Google
 

Trailing-Edge - PDP-10 Archives - bb-h138e-bm_tops20_v6_1_distr - 6-1-documentation/link.doc
There are 32 other files named link.doc in the archive. Click here to see a list.














                                  TOPS-20

                           LINK Reference Manual


                                AA-4183D-TM






                This document describes LINK-20, the linking
                loader for TOPS-20.

                This document revises the  document  of  the
                same name, Order No.  AA-4183C-TM, published
                April  1982  and  its  update,   Order   No.
                AD-413C-T1, published March 1983.



   OPERATING SYSTEM AND VERSION:      TOPS-20, Version 4.1, 5.1

   SOFTWARE VERSION:                  LINK-20, Version 6.0

















                                     1







                                             First Printing, January 1976
                                                    Revised, January 1978
                                                               April 1982
                                                      Updated, March 1983
                                                        Revised, May 1985


   The information in this document is subject to change  without  notice
   and  should  not  be  construed  as  a commitment by Digital Equipment
   Corporation.  Digital Equipment Corporation assumes no  responsibility
   for any errors that may appear in this document.

   The software described in this document is furnished under  a  license
   and  may  be  used or copied only in accordance with the terms of such
   license.

   Digital Equipment Corporation assumes no responsibility for the use or
   reliability  of  its  software  on  equipment  that is not supplied by
   DIGITAL.




   Copyright  C  1976, 1985 by Digital Equipment Corporation




   The postage prepaid READER'S COMMENTS form on the last  page  of  this
   document  requests  your critical evaluation to assist us in preparing
   future documentation.



   The following are trademarks of Digital Equipment Corporation.


           DIGITAL               TOPS-10           MASSBUS
           DEC                   DECtape           OMNIBUS
           PDP                   DIBOL             OS/8
           DECUS                 EDUSYSTEM         PHA
           UNIBUS                FLIP CHIP         RSTS
           COMPUTER LABS         FOCAL             RSX
           COMTEX                INDAC             TYPESET-8
           DDT                   LAB-8             TYPESET-10
           DECCOMM               TOPS-20           TYPESET-11



                                     2


                                      CONTENTS



   CHAPTER 1       INTRODUCTION TO LINK

           1.1     INPUT TO LINK  . . . . . . . . . . . . . . . . . . 1-2
           1.1.1     Object Modules . . . . . . . . . . . . . . . . . 1-2
           1.1.2     Commands to LINK . . . . . . . . . . . . . . . . 1-3
           1.1.3     Libraries And Searches . . . . . . . . . . . . . 1-3
           1.2     OUTPUT FROM LINK . . . . . . . . . . . . . . . . . 1-4
           1.2.1     Executable Program . . . . . . . . . . . . . . . 1-4
           1.2.2     Messages . . . . . . . . . . . . . . . . . . . . 1-5
           1.2.3     Special Files  . . . . . . . . . . . . . . . . . 1-5
           1.3     LINK'S OVERLAY FACILITY  . . . . . . . . . . . . . 1-5
           1.4     LINK AND EXTENDED ADDRESSING . . . . . . . . . . . 1-5


   CHAPTER 2       USING LINK AUTOMATICALLY

           2.1     COMMAND FORMATS  . . . . . . . . . . . . . . . . . 2-1
           2.2     COMMAND SWITCHES . . . . . . . . . . . . . . . . . 2-2
           2.3     EXAMPLE OF USING LINK AUTOMATICALLY  . . . . . . . 2-4


   CHAPTER 3       USING LINK DIRECTLY

           3.1     RUNNING AND EXITING LINK . . . . . . . . . . . . . 3-1
           3.2     COMMAND FORMATS  . . . . . . . . . . . . . . . . . 3-2
           3.2.1     LINK File Specification Defaults . . . . . . . . 3-3
           3.2.2     Logical Names  . . . . . . . . . . . . . . . . . 3-4
           3.2.3     Translating Directories  . . . . . . . . . . . . 3-4
           3.3     LINK SWITCHES  . . . . . . . . . . . . . . . . . . 3-4
           3.3.1     Switch Abbreviation  . . . . . . . . . . . . . . 3-4
           3.3.2     Switch Arguments . . . . . . . . . . . . . . . . 3-5
           3.3.3     Switch Placement . . . . . . . . . . . . . . . . 3-6
           3.3.4     Alphabetical Listing of LINK Switches  . . . . . 3-8
                     /ARSIZE  . . . . . . . . . . . . . . . . . . . . 3-9
                     /COMMON  . . . . . . . . . . . . . . . . . . .  3-10
                     /CONTENTS  . . . . . . . . . . . . . . . . . .  3-11
                     /COUNTERS  . . . . . . . . . . . . . . . . . .  3-13
                     /CPU . . . . . . . . . . . . . . . . . . . . .  3-15
                     /DDEBUG  . . . . . . . . . . . . . . . . . . .  3-16
                     /DEBUG . . . . . . . . . . . . . . . . . . . .  3-17
                     /DEFAULT . . . . . . . . . . . . . . . . . . .  3-19
                     /DEFINE  . . . . . . . . . . . . . . . . . . .  3-20
                     /ENTRY . . . . . . . . . . . . . . . . . . . .  3-21
                     /ERRORLEVEL  . . . . . . . . . . . . . . . . .  3-22
                     /EXCLUDE . . . . . . . . . . . . . . . . . . .  3-23
                     /EXECUTE . . . . . . . . . . . . . . . . . . .  3-24
                     /FRECOR  . . . . . . . . . . . . . . . . . . .  3-25
                     /GO  . . . . . . . . . . . . . . . . . . . . .  3-26


                                     3


                     /EXIT  . . . . . . . . . . . . . . . . . . . .  3-27
                     /HASHSIZE  . . . . . . . . . . . . . . . . . .  3-28
                     /HELP  . . . . . . . . . . . . . . . . . . . .  3-29
                     /INCLUDE . . . . . . . . . . . . . . . . . . .  3-30
                     /LIMIT . . . . . . . . . . . . . . . . . . . .  3-32
                     /LINK  . . . . . . . . . . . . . . . . . . . .  3-35
                     /LOCALS  . . . . . . . . . . . . . . . . . . .  3-36
                     /LOG . . . . . . . . . . . . . . . . . . . . .  3-37
                     /LOGLEVEL  . . . . . . . . . . . . . . . . . .  3-38
                     /MAP . . . . . . . . . . . . . . . . . . . . .  3-39
                     /MAXNODE . . . . . . . . . . . . . . . . . . .  3-40
                     /MESSAGE . . . . . . . . . . . . . . . . . . .  3-41
                     /MISSING . . . . . . . . . . . . . . . . . . .  3-43
                     /NEWPAGE . . . . . . . . . . . . . . . . . . .  3-44
                     /NODE  . . . . . . . . . . . . . . . . . . . .  3-45
                     /NOENTRY . . . . . . . . . . . . . . . . . . .  3-47
                     /NOINCLUDE . . . . . . . . . . . . . . . . . .  3-48
                     /NOINITIAL . . . . . . . . . . . . . . . . . .  3-49
                     /NOJOBDAT  . . . . . . . . . . . . . . . . . .  3-50
                     /NOLOCAL . . . . . . . . . . . . . . . . . . .  3-51
                     /NOREQUEST . . . . . . . . . . . . . . . . . .  3-52
                     /NOSEARCH  . . . . . . . . . . . . . . . . . .  3-53
                     /NOSTART . . . . . . . . . . . . . . . . . . .  3-54
                     /NOSYMBOL  . . . . . . . . . . . . . . . . . .  3-55
                     /NOSYSLIB  . . . . . . . . . . . . . . . . . .  3-56
                     /NOUSERLIB . . . . . . . . . . . . . . . . . .  3-57
                     /ONLY  . . . . . . . . . . . . . . . . . . . .  3-58
                     /OPTION  . . . . . . . . . . . . . . . . . . .  3-59
                     /OTSEGMENT . . . . . . . . . . . . . . . . . .  3-60
                     /OVERLAY . . . . . . . . . . . . . . . . . . .  3-62
                     /PATCHSIZE . . . . . . . . . . . . . . . . . .  3-64
                     /PLOT  . . . . . . . . . . . . . . . . . . . .  3-65
                     /PLTTYP  . . . . . . . . . . . . . . . . . . .  3-67
                     /PSCOMMON  . . . . . . . . . . . . . . . . . .  3-68
                     /PVBLOCK . . . . . . . . . . . . . . . . . . .  3-69
                     /PVDATA  . . . . . . . . . . . . . . . . . . .  3-71
                     /REDIRECT  . . . . . . . . . . . . . . . . . .  3-74
                     /REQUEST . . . . . . . . . . . . . . . . . . .  3-75
                     /REQUIRE . . . . . . . . . . . . . . . . . . .  3-76
                     /RUN . . . . . . . . . . . . . . . . . . . . .  3-77
                     /RUNAME  . . . . . . . . . . . . . . . . . . .  3-78
                     /RUNOFFSET . . . . . . . . . . . . . . . . . .  3-79
                     /SAVE  . . . . . . . . . . . . . . . . . . . .  3-80
                     /SEARCH  . . . . . . . . . . . . . . . . . . .  3-81
                     /SEGMENT . . . . . . . . . . . . . . . . . . .  3-83
                     /SET . . . . . . . . . . . . . . . . . . . . .  3-85
                     /SEVERITY  . . . . . . . . . . . . . . . . . .  3-86
                     /SPACE . . . . . . . . . . . . . . . . . . . .  3-87
                     /START   . . . . . . . . . . . . . . . . . . .  3-88
                     /SUPPRESS  . . . . . . . . . . . . . . . . . .  3-89
                     /SYFILE  . . . . . . . . . . . . . . . . . . .  3-91
                     /SYMSEG  . . . . . . . . . . . . . . . . . . .  3-92


                                     4


                     /SYSLIB  . . . . . . . . . . . . . . . . . . .  3-93
                     /TEST  . . . . . . . . . . . . . . . . . . . .  3-94
                     /UNDEFINED . . . . . . . . . . . . . . . . . .  3-96
                     /UPTO  . . . . . . . . . . . . . . . . . . . .  3-97
                     /USERLIB . . . . . . . . . . . . . . . . . . .  3-98
                     /VALUE . . . . . . . . . . . . . . . . . . . .  3-99
                     /VERBOSITY . . . . . . . . . . . . . . . . . . 3-100
                     /VERSION . . . . . . . . . . . . . . . . . . . 3-102
           3.5     EXAMPLES USING LINK DIRECTLY . . . . . . . . . . 3-103


   CHAPTER 4       OUTPUT FROM LINK

           4.1     THE EXECUTABLE PROGRAM . . . . . . . . . . . . . . 4-1
           4.2     OUTPUT FILES . . . . . . . . . . . . . . . . . . . 4-2
           4.2.1     Sharable Save Files  . . . . . . . . . . . . . . 4-2
           4.2.1.1     Format of Sharable Save Files  . . . . . . . . 4-2
           4.2.2     LOG Files  . . . . . . . . . . . . . . . . . . . 4-6
           4.2.3     Map files  . . . . . . . . . . . . . . . . . . . 4-7
           4.2.4     Symbol Files . . . . . . . . . . . . . . . . . . 4-7
           4.3     MESSAGES . . . . . . . . . . . . . . . . . . . . . 4-7


   CHAPTER 5       OVERLAYS

           5.1     OVERLAY STRUCTURES . . . . . . . . . . . . . . . . 5-1
           5.1.1     Defining Overlay Structures  . . . . . . . . . . 5-2
           5.1.2     An Overlay Example . . . . . . . . . . . . . . . 5-4
           5.1.2.1     Source Files . . . . . . . . . . . . . . . . . 5-5
           5.1.2.2     Source File Compilation  . . . . . . . . . . . 5-9
           5.1.2.3     Interactive use of LINK  . . . . . . . . . . . 5-9
           5.1.2.4     TEST.LOG . . . . . . . . . . . . . . . . . .  5-11
           5.1.2.5     TEST.MAP . . . . . . . . . . . . . . . . . .  5-12
           5.1.2.6     Tree Diagram . . . . . . . . . . . . . . . .  5-20
           5.1.2.7     Executable File  . . . . . . . . . . . . . .  5-21
           5.2     WRITABLE OVERLAYS  . . . . . . . . . . . . . . .  5-22
           5.2.1     Writable Overlay Syntax  . . . . . . . . . . .  5-22
           5.2.2     Writable Overlay Error Messages  . . . . . . .  5-22
           5.3     RELOCATABLE OVERLAYS . . . . . . . . . . . . . .  5-22
           5.3.1     Relocatable Overlay Syntax . . . . . . . . . .  5-23
           5.3.2     Relocatable Overlay Messages . . . . . . . . .  5-23
           5.4     RESTRICTIONS ON OVERLAYS . . . . . . . . . . . .  5-23
           5.4.1     Restrictions on Absolute Overlays  . . . . . .  5-24
           5.4.2     Restrictions on Relocatable Overlays . . . . .  5-25
           5.4.3     Restrictions on FORTRAN Overlays . . . . . . .  5-25
           5.5     SIZE OF OVERLAY PROGRAMS . . . . . . . . . . . .  5-26
           5.6     DEBUGGING OVERLAID PROGRAMS  . . . . . . . . . .  5-26
           5.7     THE OVERLAY HANDLER  . . . . . . . . . . . . . .  5-26
           5.7.1     Calls to the Overlay Handler . . . . . . . . .  5-27
           5.7.2     Overlay Handler Subroutines  . . . . . . . . .  5-28
           5.7.3     Overlay Handler Messages . . . . . . . . . . .  5-35
           5.7.4     The FUNCT. Subroutine  . . . . . . . . . . . .  5-40


                                     5


           5.8     THE OVERLAY (OVL) FILE . . . . . . . . . . . . .  5-47
           5.8.1     The Directory Block  . . . . . . . . . . . . .  5-48
           5.8.2     The Link Number Table  . . . . . . . . . . . .  5-49
           5.8.3     The Link Name Table  . . . . . . . . . . . . .  5-49
           5.8.4     The Overlay Link . . . . . . . . . . . . . . .  5-50


   CHAPTER 6       PSECTs

           6.1     LOADING PROGRAMS WITH PSECTs . . . . . . . . . . . 6-1
           6.2     PSECT ATTRIBUTES . . . . . . . . . . . . . . . . . 6-3
           6.2.1     CONCATENATED and OVERLAID  . . . . . . . . . . . 6-4
           6.2.2     RONLY and RWRITE . . . . . . . . . . . . . . . . 6-5


   CHAPTER 7       PDVs

           7.1     PDV FORMAT . . . . . . . . . . . . . . . . . . . . 7-3
           7.2     THE PDV STATIC MEMORY MAP  . . . . . . . . . . . . 7-5
           7.3     SYMBOL TABLE VECTOR  . . . . . . . . . . . . . . . 7-7


   APPENDIX A      REL BLOCKS

                   Block Type 0 (Ignored) . . . . . . . . . . . . . . A-4
                   Block Type 1 (Code)  . . . . . . . . . . . . . . . A-5
                   Block Type 2 (Symbols) . . . . . . . . . . . . . . A-6
                   Block Type 3 (HISEG) . . . . . . . . . . . . . .  A-11
                   Block Type 4 (Entry) . . . . . . . . . . . . . .  A-12
                   Block Type 5 (End) . . . . . . . . . . . . . . .  A-13
                   Block Type 6 (Name)  . . . . . . . . . . . . . .  A-14
                   Block Type 7 (Start) . . . . . . . . . . . . . .  A-15
                   Block Type 10 (Internal Request) . . . . . . . .  A-16
                   Block Type 11 (Polish) . . . . . . . . . . . . .  A-18
                   Block Type 12 (Chain)  . . . . . . . . . . . . .  A-24
                   Block Type 14 (Index)  . . . . . . . . . . . . .  A-31
                   Block Type 15 (ALGOL)  . . . . . . . . . . . . .  A-33
                   Block Type 16 (Request Load) . . . . . . . . . .  A-34
                   Block Type 17 (Request Library)  . . . . . . . .  A-35
                   Block Type 20 (Common) . . . . . . . . . . . . .  A-36
                   Block Type 21 (Sparse Data)  . . . . . . . . . .  A-37
                   Block Type 22 (PSECT Origin) . . . . . . . . . .  A-38
                   Block Type 23 (PSECT End Block)  . . . . . . . .  A-39
                   Block Type 24 (PSECT Header Block) . . . . . . .  A-40
                   Block Type 37 (COBOL Symbols)  . . . . . . . . .  A-41
                   Block Type 100 (.ASSIGN) . . . . . . . . . . . .  A-42
                   Block Type 776 (Symbol File) . . . . . . . . . .  A-43
                   Block Type 777 (Universal File)  . . . . . . . .  A-44
                   Block Type 1000 (Ignored)  . . . . . . . . . . .  A-45
                   Block Type 1001 (Entry)  . . . . . . . . . . . .  A-46
                   Block Type 1002 (Long Entry) . . . . . . . . . .  A-47
                   Block Type 1003 (Long Title) . . . . . . . . . .  A-48


                                     6


                   Block Type 1004 (Byte Initialization)  . . . . .  A-51
                   Block Types 1010 - 1037 (Code Blocks)  . . . . .  A-52
                   Blocks 1010 - 1017 (Right Relocation)  . . . . .  A-53
                   Block Types 1020-1027 (Left/Right Relocation 
                   Blocks)  . . . . . . . . . . . . . . . . . . . .  A-55
                   Block Types 1030 - 1037 (Thirty-bit Relocation 
                   Blocks)  . . . . . . . . . . . . . . . . . . . .  A-57
                   Block Type 1042 (Request Load for SFDs)  . . . .  A-59
                   Block Type 1043 (Request Library for SFDs) . . .  A-60
                   Block Type 1044 (ALGOL Symbols)  . . . . . . . .  A-61
                   Block Type 1045 (Writable Links) . . . . . . . .  A-62
                   Block Type 1050 (Long PSECT Name Block)  . . . .  A-64
                   Block Type 1051 (Set Current PSECT)  . . . . . .  A-66
                   Block Type 1052 (PSECT End)  . . . . . . . . . .  A-67
                   Block Type 1060 (Trace Block Data) . . . . . . .  A-68
                   Block Type 1070 (Long Symbol Names)  . . . . . .  A-69
                   Block Type 1072 (Long Polish Block)  . . . . . .  A-74
                   Block Type 1074 (Long Common Name) . . . . . . .  A-78
                   Block types 1120-1127 (Argument Descriptor 
                   Blocks)  . . . . . . . . . . . . . . . . . . . .  A-79
                   Block Type 1130 (Coercion Block) . . . . . . . .  A-84
                   Block Type 1131 (TWOSEG Redirection Block) . . .  A-87
                   Block Type 1140 (PL/1 debugger information)  . .  A-88
                   Block Type 1160 (Extended Sparse Data 
                   Initialization Block)  . . . . . . . . . . . . .  A-89
                   Block Type Greater Than 3777 (ASCIZ) . . . . . .  A-92


   APPENDIX B      LINK MESSAGES

           B.1     DESCRIPTION OF MESSAGES  . . . . . . . . . . . . . B-1
           B.1.1     Message Levels   . . . . . . . . . . . . . . . . B-1
           B.1.2     Message Severity . . . . . . . . . . . . . . . . B-2
           B.1.3     Message Length . . . . . . . . . . . . . . . . . B-2
           B.1.4     Message Conventions  . . . . . . . . . . . . . . B-3
           B.2     LIST OF MESSAGES . . . . . . . . . . . . . . . . . B-4
           B.3     REASON EXPLANATION . . . . . . . . . . . . . . .  B-35


   APPENDIX C      JOB DATA AREA LOCATIONS SET BY LINK

           C.1     JOB DATA AREA  . . . . . . . . . . . . . . . . . . C-1
           C.1.1     Vestigial Job Data Area  . . . . . . . . . . . . C-2


                   GLOSSARY


   INDEX





                                     7


   FIGURES

           5-1     Example of an Overlay Structure  . . . . . . . . . 5-2


   TABLES

           1-1     Summary of LINK Switches . . . . . . . . . . . . . 1-6
           2-1     Switches for TOPS-20 Commands  . . . . . . . . . . 2-2
           5-1     Summary of LINK's Overlay-Related Switches . . . . 5-2
           B-1     Severity Codes . . . . . . . . . . . . . . . . . . B-2
           B-2     Special Message Segments . . . . . . . . . . . . . B-4










































                                     8








                                  PREFACE



   This manual is the reference document for LINK,  the  TOPS-20  linking
   loader.


   Document Structure

   Chapter 1 provides a general introduction to  LINK,  a  discussion  of
   libraries,  library searches, and extended addressing.  Chapter 1 also
   contains a summary of LINK switches.

   Chapter 2 describes automatic use of LINK through one of  the  TOPS-20
   DEBUG, EXECUTE, or LOAD commands.  This chapter is sufficient for most
   loading tasks.

   Chapter 3 describes running and exiting LINK, LINK's  command  format,
   and  LINK switches.  This chapter contains the alphabetical listing of
   LINK switches and an example of using LINK directly.

   Chapter 4 describes  output  from  LINK:   executable  programs,  most
   output  files,  and  LINK  messages.  Included are descriptions of the
   internal format of save (EXE) files.

   Chapter  5   discusses   overlays,   including   overlay   structures,
   overlay-related  output  files,  the overlay handler and its messages,
   and the FUNCT. subroutine.  This chapter has an extensive  example  of
   an overlay load.  Many of the elements of this example are of interest
   outside the context of overlays.

   Chapter 6 discusses PSECTs (Program SECTions), loading  programs  with
   PSECTS, and PSECT attributes.

   Chapter 7 discusses PDVs (Program Data Vectors), their format,  memory
   map, and symbol table vector.

   Appendix A gives a technical description of REL (RELocatable)  Blocks,
   the main input to LINK.

   Appendix B lists all LINK messages except the OVERLAY handler  runtime
   messages that are contained in Chapter 5.

   Appendix C describes JOBDAT, the Job Data Area.

   A Glossary follows the appendixes.

                                     9


   Reference Material

        TOPS-20 User's Guide

        TOPS-20 Commands Reference Manual

        MACRO Assembler Reference Manual

        FORTRAN Language Manual

        COBOL-68 Language Manual

        COBOL-74 Language Manual

        DECsystem-10/DECSYSTEM-20 Processor Reference Manual

        TOPS-20 Monitor Calls Reference Manual


   Conventions

        <ESC>          indicates that you are to enter an ESCAPE key.

        <RET>          indicates that you are to enter a carriage-return.

        bold           is used in reference section of Chapter 3 to show
        italic         defaults and Digital supported software.

   Loading Map

   To load most programs,

        1.  Become familiar with the concepts in the TOPS-20 User's Guide
            and TOPS-20 Commands Reference Manual.

        2.  Refer to Chapter 2 for a review of the  DEBUG,  EXECUTE,  and
            LOAD commands that automatically use LINK to load programs.

   To load programs that use overlays,

        1.  Refer to Chapter 5.

        2.  Refer to  the  /ARSIZE,  /LINK,  /MAXNODE,  /NODE,  /OVERLAY,
            /PLOT, and /SPACE switches in Chapter 3.

   To load programs that use PSECTs,

        1.  Refer to Chapter 6.

        2.  Refer to the /SET and /LIMIT switches in Chapter 3.

   To load extended addressing programs,


                                     10


        1.  Become familiar with the concepts in

            the DECsystem-10/DECSYSTEM-20 Processor Reference Manual

            the Chapter 8 of the TOPS-20 Monitor Calls User's Guide

            TOPS-20 Monitor Calls Reference Manual

        2.  Refer to Section 3.7.

        3.  Refer to Section 6.2 on loading PSECTs.











































                                     11
























































                                    1-1











                                 CHAPTER 1

                            INTRODUCTION TO LINK



   LINK is TOPS-20's linking loader.  It merges independently compiled or
   assembled modules into a single executable program.

   This merging process requires LINK to:

        1.  Convert relocatable addresses to absolute addresses, and bind
            program segments and PSECTs (Program SECTions) to addresses.

            Relocatable addresses are addresses within a module that  are
            specified  as  an  offset  from  the  first  location in that
            module.

            Absolute addresses are fixed locations in your address space.

            Program segments define the program as  a  single-segment  or
            two segment program.

            PSECTs are programmer- or system-defined regions.

        2.  Resolve global symbol references using chained fixups, Polish
            fixups and library searches.

            Global symbols are defined in one module and  used  in  other
            modules.   LINK  resolves the references to global symbols by
            storing the  reference  until  LINK  loads  the  module  that
            contains  the  global  symbol's definition.  After LINK loads
            that module, it "fixes up" the location in memory where  LINK
            stored the reference.

            Chained fixups are a  list  of  locations  that  require  the
            global  symbols' definition.  One location points to the next
            location that requires the global symbol's definition.

            Polish fixups use an algorithm to  find  the  locations  that
            require the global symbol's definition.




                                    1-1
                                 FIELD TEST


        3.  Produce an  executable  program,  a  JOBDAT  area  or  a  PDV
            (Program Data Vector) and a debugger symbol table.

            An executable program is the memory image of the program.

            A JOBDAT or PDV contain information about the program such as
            its version number.

            A debugger symbol table contains entries and values  for  the
            symbols defined or used in a program.



   1.1  INPUT TO LINK

   LINK accepts three kinds of input:

         o  Object modules that are the  main  input  to  LINK,  and  are
            output by a language translator.

         o  LINK commands

         o  Libraries that contain object modules for specific  languages
            and applications.




   1.1.1  Object Modules

   Object modules contain machine language that corresponds to the source
   program, and are contained in relocatable binary files.  A relocatable
   binary file can contain many modules or one module, and  is  formatted
   into REL (RELocatable) Blocks.  LINK recognizes REL Blocks and handles
   them appropriately.  The format of each REL Block Type is described in
   Appendix  A.   The  default file type for a relocatable binary file is
   REL, and throughout this manual relocatable binary files are  referred
   to as REL files.

   As  their  name  implies,  REL  files  contain  relocatable  code   or
   addresses.   LINK converts relocatable addresses to absolute addresses
   by loading relocatable code at an arbitrary memory address, and adding
   a constant to each address referenced in the program.

   In the process of converting addresses, LINK binds  program  segments,
   and PSECTS to addresses.

   A program that uses  program  segments  can  be  a  single-segment  or
   two-segment  program.   A  single  segment program uses one relocation
   counter for LINK to use in the loading process.  A two-segment program
   uses  two  relocation  counters, and is divided into a high-segment or
   low-segment.  The LINK /ONLY, /REDIRECT, /SET, and  /SEGMENT  switches


                                    1-2
                                 FIELD TEST


   can  be  used  to  manipulate  segments  during loading.  A relocation
   counter is an address counter that LINK uses while loading relocatable
   code.

   A program that uses PSECTs can have  one  or  multiple  PSECTs.   Each
   PSECT  in a program has its own relocation counter.  For example, if a
   program has 5 PSECTs, it also has 5 relocation counters, one for  each
   PSECT.  Refer to Chapter 6 for information on PSECTs.

   Besides relocating and loading  your  object  modules,  LINK  resolves
   values  for  local,  global and entry name symbols.  Local symbols are
   those that are defined and referenced only within  a  module.   Global
   symbols  are  those that are defined in one module and used in others.
   Entry name symbols are special global symbols in a module that contain
   an entry point name for other modules.



   1.1.2  Commands to LINK

   LINK commands  control  and  modify  the  loading  process.   Commands
   consist  of  file  specifications  and  switches.   LINK  commands are
   summarized at the end of this chapter and are detailed in Chapter 3.



   1.1.3  Libraries And Searches

   Libraries are files that contain object modules that may be needed  to
   resolve  global symbol references.  LINK only loads the object modules
   that contain entries for the global symbols to be resolved.  There are
   two kinds of libraries:  system or user.

   System libraries are available  to  all  users  for  searching.   Most
   language   translators  also  have  libraries  associated  with  them.
   Translators generate calls  for  subroutines  or  functions  in  their
   corresponding libraries.  Library searches find and load the necessary
   modules.

   LINK searches system libraries before it finishes loading  a  program.
   LINK  determines  which  system library to load from the object module
   that contains translator information for the program.   LINK  performs
   system library searches when it finds a LINK /GO or /LINK switch.  For
   example, if you load a  FORTRAN-compiled  module,  LINK  searches  the
   system  FORTRAN  library  SYS:FORLIB.REL when a /GO or /LINK switch is
   processed.   This  search  resolves   requests   for   FORTRAN-defined
   subroutines and functions in FORLIB.REL.

   The /SYSLIB and /NOSYSLIB switches  allow  you  to  manipulate  system
   library searches.

   The /SYSLIB switch requires LINK to search specified system  libraries


                                    1-3
                                 FIELD TEST


   no  matter  what  kind  of  modules were loaded.  The /NOSYSLIB switch
   prevents searching of specified system  libraries.   Using  these  two
   switches, you can select the order for searching system libraries.

   User libraries are libraries that you create for LINK to search.

   The /USERLIB and /NOUSERLIB switches allow you to specify user library
   searches.   /USERLIB  specifies  that  a user library must be searched
   before the corresponding  system  library.   For  example,  using  the
   switch  MYFORL/USERLIB:FORTRAN  requires  LINK  to  search  MYFORL.REL
   before searching FORLIB.  The /NOUSERLIB switch suspends the effect of
   a /USERLIB switch.

   The /SEARCH and /NOSEARCH switches allow you to specify how  an  input
   file  is to be loaded.  /SEARCH specifies that LINK search input files
   as libraries, and load  only  those  modules  that  resolve  a  global
   symbol.   /NOSEARCH  specifies  that  LINK is to load all modules from
   each input file.  /NOSEARCH is the default.

   Using combinations of these switches  gives  you  precise  control  of
   library searches.  See Chapter 3 for information on these switches.



   1.2  OUTPUT FROM LINK

   LINK outputs an executable program in memory,  messages,  and  special
   files.



   1.2.1  Executable Program

   The  main  output  from  LINK  is  an  executable  program.   In  this
   executable  program,  all  addresses  are  resolved to absolute memory
   locations, and all symbols (including subroutine calls)  are  resolved
   to absolute values or addresses.

   The executable program can be  executed  immediately  or  saved  as  a
   sharable  save  file.  A sharable save file has a default file type of
   EXE, and is referred to to as an EXE file.  LINK automatically creates
   an EXE file when you use /SAVE with LINK.

   You can also execute the executable program under  the  control  of  a
   debugger  using  the  /DEBUG or /TEST switch.  LINK outputs a debugger
   symbol table for this purpose.  A debugger symbol table  contains  the
   program's symbols and their definitions.

   LINK also generates a JOBDAT or a PDV for a program.  Both JOBDAT  and
   PDV  contain  information  about  the  program such as debugger symbol
   table pointers, version numbers, and memory use.  Refer to Appendix  C
   for JOBDAT information and Chapter 7 for PDV information.


                                    1-4
                                 FIELD TEST


   1.2.2  Messages

   During its processing, LINK generates messages that are output to your
   terminal  or  a log file.  Some of these give information about LINK's
   operation.  Some warn about possible problems.  Some identify  errors.
   LINK messages are described in Appendix B.



   1.2.3  Special Files

   At your option, LINK can generate several special files:

         o  a map file that contains information about where the  program
            was loaded, and what symbols are used in the program modules.

         o  a log file that contains a record of the messages  that  LINK
            returned during the linking and loading process.

         o  a symbol file that contains a symbol table  for  the  program
            that was loaded.

         o  a plotter file that contains a tree  diagram  of  an  overlay
            program.

         o  an overlay file that contains information about  the  overlay
            links.

   LINK's output files are described in Chapter 4.



   1.3  LINK'S OVERLAY FACILITY

   If a program is too large to execute in one piece, you can use  LINK's
   overlay  facility  to define an overlay structure for the program.  To
   do this, you define a tree structure for the program's modules.   Then
   at  execution  time,  only  part of the tree is in memory at one time.
   This reduces the amount of memory needed for execution.  See Chapter 5
   for a discussion on overlays.



   1.4  LINK AND EXTENDED ADDRESSING

   The KL Model  B  processor  is  capable  of  using  an  address  space
   consisting  of  32 sections, each containing 512 pages.  As of TOPS-20
   Version 5, programs have been able to reference this expanded  address
   space.    For   information   on  using  extended  addressing  with  a
   programming language, consult the documentation for that language.

   Use PSECTs to load a program into a nonzero section.  See Section  6.1


                                    1-5
                                 FIELD TEST


   for information on loading PSECTs.

   When loading a program that uses extended addressing,  pay  particular
   attention  to  the  use  of 18-bit and 30-bit addresses.  If a program
   uses 30-bit addresses and you reference  the  30-bit  addresses  as  a
   18-bit  address,  LINK  truncates  the 30-bit address and notifies you
   with the following message:

        %LNKFTH Fullword value [symbol] truncated to halfword

   Refer to Appendix B for more information about this message.

   LINK issues this warning if the truncation results in the  loss  of  a
   section number.

   While writing an  extended  addressing  program,  keep  the  following
   restrictions in mind:

         o  Programs that use overlays cannot use nonzero sections.

         o  LINK does not set up JOBDAT  for  a  program  loaded  in  any
            nonzero  section.   LINK stores information about an extended
            addressing program in a PDV.  PDVs are described  in  Chapter
            7.  JOBDAT is described in Appendix C.

         o  Programs should not store executable code  into  locations  0
            through  17 of nonzero sections.  However, you can store data
            that is not executed in these locations.  If data  is  stored
            in  locations 0 through 17, use global addresses to reference
            the locations.  If local addresses are  used,  the  locations
            are  referenced  as  ACs  (accumulators).   In  section  one,
            locations 0 through 17 are ACs.



   Table 1-1:  Summary of LINK Switches


   +--------------------------------------------------------------------+
   |                                                                    |
   | Switch         Description                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /ARSIZE        Sets  the  size  of  the overlay handler's table of |
   |                multiply-defined global symbols.                    |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /COMMON        Allocates  words  of  labeled  COMMON  storage  for |
   |                FORTRAN and FORTRAN-compatible programs.            |
   +--------------------------------------------------------------------+




                                    1-6
                                 FIELD TEST


   Table 1-1 (cont.)

   +--------------------------------------------------------------------+
   |                                                                    |
   | Switch         Description                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /CONTENTS      Specifies  the  symbol  types to be included in the |
   |                map file if the file is generated.                  |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /COUNTERS      Displays relocation counters on the terminal.       |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /DDEBUG        Specifies  a  default  debugger to be loaded if the |
   |                /DEBUG or /TEST switch appears without an argument. |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /DEBUG         Requests  loading  of a debugger and sets the start |
   |                address  for  execution at the start address of the |
   |                debugger.                                           |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /DEFAULT       Changes  default specifications for input or output |
   |                files.                                              |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /DEFINE        Assigns a decimal value to a symbol.                |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /ENTRY         Displays all entry  name  symbols  that  have  been |
   |                loaded on the terminal.                             |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /ERRORLEVEL    Suppresses terminal display of LINK messages.       |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /EXCLUDE       Prevents loading of the specified modules from  the |
   |                current file.                                       |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /EXECUTE       Directs   LINK   to   execute  the  loaded  program |
   |                beginning at the program's start address.           |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /EXIT          Exits LINK.                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /FRECOR        Requires  LINK to maintain a minimum amount of free |
   |                memory after any expansions.                        |
   +--------------------------------------------------------------------+



                                    1-7
                                 FIELD TEST


   Table 1-1 (cont.)

   +--------------------------------------------------------------------+
   |                                                                    |
   | Switch         Description                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /GO            Ends loading after the current file and exits LINK. |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /HASHSIZE      Gives a minimum for the initial size of the  global |
   |                symbol table.                                       |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /HELP          Displays information about LINK on the terminal.    |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /INCLUDE       Specifies modules to be loaded  regardless  of  any |
   |                global requests for them.                           |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /LIMIT         Specifies an upper bound for a PSECT.               |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /LINK          Closes an overlay link.                             |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /LOCALS        Includes  local symbols from a module in the symbol |
   |                table.                                              |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /LOG           Specifies a file specification for the log file.    |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /LOGLEVEL      Suppresses logging of LINK messages.                |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /MAP           Specifies a file specification for the  map  output |
   |                file.                                               |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /MAXNODE       Specifies  the  number  of links to be defined when |
   |                the overlayed program requires more than 256 links. |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /MESSAGE       Displays messages on the  terminal  in  the  format |
   |                specified by keyword.                               |
   +--------------------------------------------------------------------+






                                    1-8
                                 FIELD TEST


   Table 1-1 (cont.)

   +--------------------------------------------------------------------+
   |                                                                    |
   | Switch         Description                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /MISSING       Displays on the  terminal  the  number  of  modules |
   |                requested with the /INCLUDE switch  that  have  not |
   |                yet been loaded.                                    |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NEWPAGE       Sets  the  relocation  counter to the first word of |
   |                the next page.                                      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NODE          Opens an overlay link.                              |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOENTRY       Deletes  entry  name  symbols  from LINK's overhead |
   |                tables when loading overlays.                       |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOINCLUDE     Clears requests for modules that were specified  in |
   |                a previous /INCLUDE.                                |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOINITIAL     Prevents  loading  of  LINK's initial global symbol |
   |                table (JOBDAT).                                     |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOJOBDAT      Prevents LINK from filling in JOBDAT's or vestigial |
   |                JOBDAT's address space, and creates a PDV.          |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOLOCAL       Suspends the effect of a preceding  /LOCALS  switch |
   |                so  that  local  symbol  tables are not loaded with |
   |                their modules.                                      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOREQUEST     Deletes  references  to  overlay  links from LINK's |
   |                overhead tables when loading overlay programs.      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOSEARCH      Suspends the effect of a previous /SEARCH switch.   |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOSTART       Directs LINK to disregard any start addresses found |
   |                after the /NOSTART switch.                          |
   +--------------------------------------------------------------------+




                                    1-9
                                 FIELD TEST


   Table 1-1 (cont.)

   +--------------------------------------------------------------------+
   |                                                                    |
   | Switch         Description                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOSYMBOL      Prevents construction of user symbol tables.        |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOSYSLIB      Prevents automatic searching of system libraries.   |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /NOUSERLIB     Discontinues  automatic  searching of files at each |
   |                /LINK or /GO switch.                                |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /ONLY          Directs LINK  to  load  the  specified  segment  of |
   |                two-segment modules.                                |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /OPTION        Reads  the  SWITCH.INI  file  to  determine  switch |
   |                defaults for LINK.                                  |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /OTSEGMENT     Specifies  the  time  and  manner  of  loading  the |
   |                object-time system.                                 |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /OVERLAY       Initiates construction of an overlay structure.     |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /PATCHSIZE     Allocates words of storage to  precede  the  symbol |
   |                table.                                              |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /PLOT          Directs LINK to output a tree diagram of an overlay |
   |                structure.                                          |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /PLTTYP        Specifies the type of plot file to be generated  by |
   |                the /PLOT switch.                                   |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /PSCOMMON      Specifies where LINK is to load COMMON blocks.      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /PVBLOCK       Requests  a PDV (Program Data Vector) from LINK and |
   |                gives you control over where the vector goes.       |
   +--------------------------------------------------------------------+




                                    1-10
                                 FIELD TEST


   Table 1-1 (cont.)

   +--------------------------------------------------------------------+
   |                                                                    |
   | Switch         Description                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /PVDATA        Changes the contents of a PDV block.                |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /REDIRECT      Loads  two-segment formatted REL files as part of a |
   |                program using PSECTs.                               |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /REQUEST       Displays  external  overlay  link references on the |
   |                terminal.                                           |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /REQUIRE       Generates  global  requests   for   the   specified |
   |                symbols.                                            |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /RUN           Directs LINK to run a program after it is loaded.   |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /RUNAME        Assigns a job name for execution of your program.   |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /RUNOFFSET     Runs the program specified in a /RUN switch with an |
   |                offset.                                             |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SAVE          Directs LINK to create an EXE file.                 |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SEARCH        Directs  LINK  to  search  the input files and load |
   |                only the modules whose entry point names resolves a |
   |                global symbol reference.                            |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SEGMENT       Specifies whether  the  high  segment  or  the  low |
   |                segment of a two-segment program is to be used  for |
   |                loading the following modules.                      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SET           Sets  the  origin of a PSECT, or sets the .HIGH. or |
   |                .LOW. relocation counter.                           |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SEVERITY      Specifies that messages of a certain severity level |
   |                terminate the load.                                 |
   +--------------------------------------------------------------------+


                                    1-11
                                 FIELD TEST


   Table 1-1 (cont.)

   +--------------------------------------------------------------------+
   |                                                                    |
   | Switch         Description                                         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SPACE         Specifies that n words of memory follow the current |
   |                link at execution time.                             |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /START         Specifies the start address for the loaded program. |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SUPPRESS      Suppresses a previously defined global symbol.      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SYFILE        Requests LINK to output a symbol file to the  given |
   |                filespec, and sets the /SYMSEG:DEFAULT switch.      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SYMSEG        Allows you to specify where the symbol table is  to |
   |                be placed.                                          |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /SYSLIB        Forces searching of one or more  system  libraries, |
   |                immediately after you end the command line.         |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /TEST          Loads a debugger.                                   |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /UNDEFINED     Displays undefined global symbols on the terminal.  |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /UPTO          Sets an upper limit to which the symbol  table  can |
   |                expand.                                             |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /USERLIB       Directs LINK to search a user library.              |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /VALUE         Displays global symbol values on the terminal.      |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /VERBOSITY     Specifies the length of LINK messages.              |
   +--------------------------------------------------------------------+
   |                                                                    |
   | /VERSION       Allows you to specify a version number.             |
   +--------------------------------------------------------------------+




                                    1-12











                                 CHAPTER 2

                          USING LINK AUTOMATICALLY



   The  TOPS-20  LOAD,  EXECUTE,   and   DEBUG   commands   invoke   LINK
   automatically.   Each  of  these commands uses a simple command string
   that the system converts into more complicated LINK commands.

   This discussion of the LOAD, EXECUTE,  and  DEBUG  commands  does  not
   attempt  to  describe  them  completely.  Only those switches applying
   directly to loading are discussed here.  For a  full  discussion,  see
   the TOPS-20 Commands Reference Manual.

   Each of these commands invoke LINK:

         o  The LOAD command uses LINK to load your object  modules  into
            memory.   LOAD  compiles source files first if necessary, but
            does not execute the program.

         o  The EXECUTE command uses LINK to load your program, and  then
            executes  the  loaded  program.   Before loading, your source
            files are compiled, if necessary.

         o  The DEBUG command loads your program into memory along with a
            debugger.   The program is then executed under the control of
            the debugger.  The debugger that is  loaded  depends  on  the
            type  of  program  being  loaded.  See the /TEST switch for a
            list of languages.  TOPS-20 uses the file type  to  determine
            the  language in which the program is written.  Therefore, it
            is highly recommended that you use standard file  types  when
            naming  your programs' files.  Standard file types are listed
            in the TOPS-20 Commands Reference Manual.



   2.1  COMMAND FORMATS

   The LOAD, EXECUTE, and DEBUG commands follow the  same  format.   Each
   can  accept  a  list  of  input file specifications and switches.  The
   format for these commands is:



                                    2-1
                                 FIELD TEST


   @command/switches input-filespec/switches, input-filespec/switches,...

   Where:

        command        is LOAD, EXECUTE, or DEBUG.

        input-spec     is the file specification of the program you  want
                       to  load.  This input file specification accepts a
                       6-character device  name,  39-character  directory
                       name,  a  6-character  filename  and a 3-character
                       extension.

        switches       are any of the valid  switches  for  the  command.
                       Table 2-1 contains switches that apply to LINK.

   If you separate the input file specifications with commas, each source
   file  is  compiled  into  a  separate  object (relocatable) file.  For
   example,

        @LOAD PROGA,PROGB,PROGC

   compile  into  separate  object  modules,  PROGA.REL,  PROGB.REL   and
   PROGC.REL.

   If you separate the input file specifications with  plus  signs,  they
   will be compiled into a single object file.

        @LOAD PROGD+PROGE+LIBRAY

   compile into a single object module, LIBRAY.REL

   Section 2.3 shows additional examples of using LINK automatically.



   2.2  COMMAND SWITCHES

   You can use switches with the LOAD, EXECUTE,  and  DEBUG  commands  to
   control  the  program's  loading.  Table 2-1 briefly describes some of
   the command switches  that  apply  to  LINK.   Refer  to  the  TOPS-20
   Commands  Reference  Manual  for complete descriptions of the switches
   for these commands.


   Table 2-1:  Switches for TOPS-20 Commands


   +-------------------------------------------------------------------+
   |                                                                   |
   | Switch       Meaning                                              |
   +-------------------------------------------------------------------+



                                    2-2
                                 FIELD TEST


   Table 2-1 (cont.)

   +-------------------------------------------------------------------+
   |                                                                   |
   | Switch       Meaning                                              |
   +-------------------------------------------------------------------+
   |                                                                   |
   | /COMPILE     Forces  compilation  of  source  files  even  if   a |
   |              sufficiently recent REL file exists.                 |
   +-------------------------------------------------------------------+
   |                                                                   |
   | /DDT         Loads  DDT.  This  supersedes  the  default debugger |
   |              selection that is based on  the  file  type  of  the |
   |              first file in the command string.                    |
   +-------------------------------------------------------------------+
   |                                                                   |
   | /MAP         Produces a map file at the end of loading.           |
   +-------------------------------------------------------------------+
   |                                                                   |
   | /NOCOMPILE   Compiles  source  files  only if their REL files are |
   |              older than  the  source  files.  /NOCOMPILE  is  the |
   |              default.                                             |
   +-------------------------------------------------------------------+
   |                                                                   |
   | /NOSEARCH    Suspends the effect of  an  earlier  global  /SEARCH |
   |              switch. This is the default action.                  |
   +-------------------------------------------------------------------+
   |                                                                   |
   | /NOSYMBOLS   Prevents   loading   of  symbol  tables  with  their |
   |              modules.                                             |
   +-------------------------------------------------------------------+
   |                                                                   |
   | /SEARCH      Loads only the modules from  the  specified  library |
   |              file that satisfy global references in the program.  |
   +-------------------------------------------------------------------+


   You can use any LINK program switches with LOAD, EXECUTE, or DEBUG  by
   using  a  special  switch format.  This format requires that you use a
   percent sign (%) instead of the usual slash (/), and that  the  entire
   switch  specification  be enclosed in double quotation marks (").  For
   example, you can pass the /SYMSEG:HIGH switch to  LINK  by  using  the
   command:

        @EXECUTE MYPROG %"SYMSEG:HIGH"<RET>

   If you give more than one switch in this format,  succeeding  switches
   within the quotation marks must have the usual slashes:

        @EXECUTE MYPROG %"SYMSEG:HIGH/COUNTERS"<RET>

   LINK program switches are described in Chapter 3.


                                    2-3
                                 FIELD TEST


   2.3  EXAMPLE OF USING LINK AUTOMATICALLY

   For this example, the following program, named MYPROG.FOR, is used:

             TYPE 10
        10   FORMAT (' This is written by MYPROG')
             STOP
             END

   The following example shows an interactive execution  of  the  program
   using the EXECUTE command:

        @EXE<ESC>CUTE (FROM) MYPROG.FOR<RET> 
        FORTRAN: MYPROG
        MAIN.  
        LINK: Loading
        [LNKXCT MYPROG execution]
        This is written by MYPROG
        CPU time 0.21   Elapsed time 1.31


   The following example shows how to load a program for debugging  using
   the DEBUG command:


        @DEBUG MYPROG.FOR<RET>
        FORTRAN: MYPROG
        MAIN.  
        LINK: Loading
        [LNKDEB FORDDT execution]

        STARTING FORTRAN DDT

        >>START<RET>
        This is written by MYPROG
        CPU time 0.17   Elapsed time 0.46


















                                    2-4











                                 CHAPTER 3

                            USING LINK DIRECTLY



   You can choose to use the TOPS-20 LOAD, EXECUTE, and DEBUG commands to
   load  a program, or you can use LINK directly.  Using LINK directly is
   useful when you have a  large  or  complicated  program,  are  loading
   overlays,  or  are  using  PSECTs  because  you can better control the
   loading process.  For example, in the case  of  a  program  that  uses
   PSECTs,  you  can  use  LINK  switches  to  specify the origins of the
   PSECTs.  In the case of an overlay program, you can use LINK  switches
   to define the program's tree structure.

   Before you load a  program  with  LINK,  you  must  have  compiled  or
   assembled all required object modules.



   3.1  RUNNING AND EXITING LINK

   To run LINK, type LINK after the TOPS-20 system prompt.  LINK  returns
   an asterisk (*) and waits for you to enter commands.  For example,

        @LINK<RET>
        *

   To exit LINK, use the /GO switch.

   The /GO switch finishes loading the program and exits.  /GO  exits  to
   TOPS-20  command  level,  the  loaded  program  for execution, or to a
   debugger.  /GO passes control to the loaded program if  you  specified
   /EXECUTE,  and to a debugger if you specified /DEBUG.  For example, in
   the following /GO passes control to the loaded program.

        @LINK<RET>
        *MYPROG/EXECUTE/GO
        [LNKXCT MYPROG execution]
        This is written by MYPROG
        CPU time 0.21   Elapsed time 0.82

   If LINK encounters a fatal error, LINK prints  an  error  message  and


                                    3-1
                                 FIELD TEST


   exits to TOPS-20.



   3.2  COMMAND FORMATS

   A LINK command can contain  file  specifications  and  switches.   The
   general format of a LINK command is:

        */switch input-filespec /switch output-filespec /switch

   where:

        switch         is a LINK switch.  LINK switches are described  in
                       Section  3.3.   Section  3.3 also discusses switch
                       arguments, abbreviations, and placement.

        filespec       consists of 1- to 6-character device name,  1-  to
                       6-character  filename,  a  1-  to 3-character file
                       type, and a PPN (project-programmer number).

                       You  only  need  to  supply  a  filename  as  LINK
                       supplies   the   missing   parts   of   the   file
                       specifications from its defaults.  These  defaults
                       are  listed in Section 3.2.  You can use a logical
                       name to specify a device  name,  and  the  TOPS-20
                       TRANSLATE   command   to  determine  a  PPN.   See
                       Sections   3.2.2   and   3.2.3   for    additional
                       information   on   logical   names  and  TRANSLATE
                       respectively.

   You can continue a command, include a comment, or use indirect command
   files with LINK.

   By typing a hyphen before entering a carriage return, you can continue
   a  command  onto  the next line.  LINK continues the line by prompting
   with a hash sign (#).  For example,

        @LINK<RET>
        *MYPROG,MYMAP/MAP/CONTENTS:ALL-<RET>
        #/ERRORLEVEL:0/LOG/LOGLEVEL:5<RET>
        *

   You can include a comment in a command by beginning the comment with a
   semicolon.   LINK  does  not  process  the  text  after the semicolon.
   Commenting commands can be useful  in  indirect  command  files.   For
   example,

        /CONTENTS:(LOCALS,UNDEFINED)  ;Include local and undefined
                                      ;symbols in my map file.
        PROMAP/MAP:ERROR              ;Give me a map file named PROMAP
                                      ;when LINK encounters an error.


                                    3-2
                                 FIELD TEST


        PROGAM                        
        /GO                           ;Load my program

   These commands and comments when placed in an  indirect  command  file
   provide you with a description of how you want a program loaded.

   To have LINK read commands from an indirect command file,  prefix  the
   command  file specification with an at-sign (@) and enter it after the
   LINK prompt.  For example,

        @LINK<RET>
        *@LNKPRG

   LINK reads the commands in LNKPRG and processes them.  LNKPRG can have
   a  .CCL  or  .CMD file type.  Both are default file types for indirect
   command files.  LINK first looks for a .CCL file type and then a  .CMD
   file type.



   3.2.1  LINK File Specification Defaults

   For input files, the defaults are:

        device      logical name (DSK:)

        type        REL

        directory   the connected directory.  If you  are  using  a  PPN,
                    refer to Section 3.3.3 for information on translating
                    directories.

   For output files, the defaults are:

        device      logical name (DSK:)

        filename    name of last module with start address or,  if  none,
                    then  nnnLNK where nnn is your job number in decimal,
                    with any leading zeros.

        type        one or all of the following depending on the switches
                    you use.

                    /EXECUTE  executable file   EXE
                    /LOG      log file          LOG
                    /MAP      map file          MAP
                    /PLOT     plotter file      PLT
                    /SYFILE   symbol file       SYM

        directory   the connected directory.  If you  are  using  a  PPN,
                    refer to Section 3.3.3 for information on translating
                    directories.


                                    3-3
                                 FIELD TEST


   You can change these defaults  by  using  the  /DEFAULT  switch.   See
   Section 3.3.4.



   3.2.2  Logical Names

   To use a logical name:

        1.  Give the TOPS-20 DEFINE command to define a logical name.   A
            logical name cannot be longer than six characters.

        2.  Use the logical name as the device name whenever  giving  the
            file specification.

   See the TOPS-20 User's Guide for more information.



   3.2.3  Translating Directories

   To find a corresponding PPN:

        1.  Use the TOPS-20 TRANSLATE command to find  the  corresponding
            PPN for the given directory name.

        2.  Include the PPN enclosed in square brackets ([]) at  the  end
            of the file specification in the format:

                 device:filename.type[PPN]



   3.3  LINK SWITCHES

   LINK switches control and modify the loading  process.   This  section
   describes  switch abbreviations, arguments, and placements followed by
   an alphabetical listing of the LINK switches.



   3.3.1  Switch Abbreviation

   You  can  abbreviate  switches  to   save   typing.    However,   when
   abbreviating a switch, you must must include enough characters to make
   the abbreviation unique for the switch.  For example,  both  /NOSYMBOL
   and  /NOSYSLIB  begin  with the characters /NOSY, therefore you cannot
   abbreviate  the  /NOSYMBOL  switch  to  /NOSY.   You  can   abbreviate
   /NOSYMBOL  to  /NOSYM because /NOSYM is a unique set of characters for
   /NOSYMBOL.

   The following switches can  be  abbreviated  to  a  single  letter  by


                                    3-4
                                 FIELD TEST


   default:

        /D for    /DEBUG
        /E for    /EXECUTE
        /G for    /GO
        /H for    /HELP
        /L for    /LOCALS
        /M for    /MAP
        /N for    /NOLOCAL
        /S for    /SEARCH
        /T for    /TEST
        /U for    /UNDEFINE
        /V for    /VERSION

   Use the full switch name when placing switches in  batch  or  indirect
   command files to avoid incorrect or ambiguous abbreviations.



   3.3.2  Switch Arguments

   Many LINK switches require arguments.  An argument can be a  value,  a
   symbol  name,  a  module  name,  an output file specification, a PSECT
   name, a keyword, or an address.  The  specific  requirements  of  each
   switch   are   discussed   in  the  FORMAT  section  of  the  switch's
   description.

   A value can be specified in decimal or octal.  The default is provided
   in  the  FORMAT  information.  If the value can be specified in octal,
   this is  noted  in  the  OPTIONAL  NOTATIONS  section  of  the  switch
   description.   To  specify an octal value, type a hash sign (#) before
   the octal number.  For example, /ARSIZE:39 can be specified  in  octal
   as /ARSIZE:#47.

   A symbol name, a module name, or a PSECT name consists of from 1 to 72
   SIXBIT-compatible ASCII characters.  You cannot embed spaces in any of
   the names.  If the name is not Radix-50 compatible, you  must  enclose
   it  in  double  quotes.   For example, NOT^RADIX would be specified as
   "NOT^RADIX" in a LINK command.  If you enclose a name  in  quotes,  be
   aware that how you enter the name (all in UPPERCASE, all in lowercase,
   or in Mixed cAse)  affect  the  interpretation  of  the  symbol.   For
   example,

        "DIFFERENT" "different" "Different"

   all define individual symbols.  However, if you do not enclose a  name
   in  quotes and enter the name in mixed case, the name defines the same
   symbol.  For example,

        SAME same Same

   all define the symbol same and  are  equivalent  to  the  quoted  name


                                    3-5
                                 FIELD TEST


   "SAME".

   An overlay link name consists of from 1- to 6-Radix-50 characters that
   are compatible with ASCII characters.

   A keyword is a unique argument that is  associated  with  the  switch.
   For example, /DEBUG's keywords identify the debugger to be loaded with
   the program.

   An address is an octal number.

   An output file specification specifies a file that LINK is to  create.
   See  Section  3.2  for  format  and default information on output file
   specifications.  The following switches produce an output file:

        /DEFAULT       /LOG
        /MAP           /OVERLAY
        /PLOT          /NOUSERLIB
        /SAVE          /SYFILE
        /USERLIB 

   When specifying output file specifications with these switches, append
   the switch to the output file specification in the format:

        outputfilespec/switch

   For example,

        *LOGFIL/LOG

   directs LINK to write LINK messages into the output file LOGFIL.LOG.

   The other file specifications in a LINK command specify  input  files.
   For  example,  the  following  command tells LINK to use an input file
   called MYREL.REL to generate a saved  output  file  called  MYEXE.EXE.
   /SAVE  specifies MYEXE as the output filename, and .EXE is the default
   file type:

        *MYREL,MYEXE/SAVE/GO



   3.3.3  Switch Placement

   The /LOCALS, /NOLOCAL, /NOSTART, /SEGMENT, /INCLUDE,  /ONLY,  /SEARCH,
   /START  and  /NOSEARCH  switches  can  be local or global switches.  A
   local switch applies to a single file specification and is appended to
   that file specification in the command.  The switch is appended before
   the comma in a list of  file  specifications.   For  example,  in  the
   following  command, /SEARCH is used as a local switch to load FILE2 in
   search mode.  /SEARCH is appended to FILE2 before the comma.



                                    3-6
                                 FIELD TEST


        *FILE1,FILE2/SEARCH,FILE3<RET>

   A global switch applies to all the files in a command and is  disabled
   at  the end of the command when you enter a carriage-return.  A global
   switch is not appended to a file  specification,  and  can  be  placed
   after  the  LINK  prompt (*), or after a filename.  A global switch is
   appended after the comma  in  a  list  of  file  specifications.   For
   example,  in the following commands /SEARCH is a global switch used to
   load all the files in search mode.  In the first command,  /SEARCH  is
   placed  after  the  LINK  prompt.  In the second, note that /SEARCH is
   placed after the comma following the first file specification.

        */SEARCH FILE4,FILE5,FILE6<RET>
        *FILE4,/SEARCH FILE5,FILE6<RET>

   A global switch applies to all the files entered  after  the  asterisk
   and  before  the  carriage-return,  unless it is overridden by another
   switch.  If this second switch is a global switch, it persists for all
   the  files  that follow in the command.  For example, in the following
   command, the /NOSEARCH disables the /SEARCH switch  for  files  FILE10
   and FILE11.

        *FILE7,/SEARCH FILE8, FILE9,/NOSEARCH FILE10, FILE11<RET>

   If the second switch is a local switch, it overrides the first  switch
   only  for  the  file  to  which  it  is appended.  For example, in the
   following command string, the global /SEARCH switch is  overridden  by
   the  local  /NOSEARCH switch, but only for FILE2.  FILE1 and FILE3 are
   loaded in search mode.

        */SEARCH FILE1,FILE2/NOSEARCH,FILE3


                                    NOTE

           When the /GO switch is present in the same command  as
           a  global switch, /GO causes the effects of the global
           switch to go beyond  the  command  and  apply  to  any
           modules loaded during library searches.  For example,

                */SEGMENT:LOW FILEA,FILEB,FILEC/60<RET>

           causes the input files on this line and  files  loaded
           during  a library search to be loaded in the program's
           low-segment.  However, defaults for certain  languages
           can override the global switches that you specify.








                                    3-7
                                 FIELD TEST


   3.3.4  Alphabetical Listing of LINK Switches

   In this section the following information is  shown,  if  appropriate,
   for each switch:

        FORMAT
        FUNCTION
        EXAMPLES
        OPTIONAL NOTATIONS
        RELATED SWITCHES












































                                    3-8
                                 FIELD TEST


                                  /ARSIZE

   FORMAT      /ARSIZE:n

               n is a positive decimal integer.

   FUNCTION    Sets  the  size  of  the  overlay   handler's   table   of
               multiply-defined  global  symbols.  Use this switch if you
               have received LNKARL, LNKTMA, and  LNKABT  messages  in  a
               previous  attempt  to  load  your program.  These messages
               give instructions for the argument to the /ARSIZE switch.

   EXAMPLES    @LINK<RET>
               */ARSIZE:39<RET>
               *

               Allocates 39 words for the multiply-defined global  symbol
               table in each link of an overlay structure.

   OPTIONAL    You can specify the table size in octal.
   NOTATIONS

































                                    3-9
                                 FIELD TEST


                                  /COMMON

   FORMAT      /COMMON:name:n

               name is a common name.  The symbol name rules described in
               Section 3.3.2 apply to common name.

               n is a positive decimal integer.

   FUNCTION    Allocates n words of labeled COMMON  storage  for  FORTRAN
               and  FORTRAN-compatible  programs.   The COMMON label is a
               name which becomes defined as a global symbol.

               For unlabeled COMMON storage, use .COMM.  as the name,  or
               simply omit the name.

               You cannot expand a given COMMON area during loading.   If
               your  program  modules  define a given COMMON area to have
               different sizes, the module giving the largest  definition
               must  be  loaded  first.   If the /COMMON switch gives the
               largest definition, it must precede  the  loading  of  the
               modules.

   EXAMPLES    @LINK<RET>
               */COMMON:ALPHA:1000<RET>
               *

               Creates a labeled COMMON area of 1000 words.


               @LINK<RET>
               */COMMON:.COMM.:1000<RET>
               *

               Creates an unlabeled COMMON area of 1000 words.


               @LINK<RET>
               */COMMON::1000<RET>
               *

               Creates an unlabeled COMMON area of 1000 words.

   OPTIONAL    You can specify the number of words in octal.
   NOTATIONS   

   RELATED     /PSCOMMON
   SWITCHES






                                    3-10
                                 FIELD TEST


                                 /CONTENTS

   FORMAT      /CONTENTS:(keyword,...,keyword)

   FUNCTION    specifies the symbol types to be included in the map  file
               if  the  file is generated.  To generate the map file, use
               the /MAP switch.

               The keywords ALL,  NONE,  and  DEFAULT  reset  all  symbol
               types.   Otherwise, using the /CONTENTS switch resets only
               those  symbol  types  specified  by  keywords.    In   the
               following  list  of  keywords,  the  defaults are shown in
               bold:

                    Keyword        Description

                    ABSOLUTE       Include absolute symbols.
                    ALL            Include all symbols.
                    COMMON         Include COMMON symbols.
                    DEFAULT        Reset to LINK's defaults.
                    ENTRY          Include entry-name symbols.
                    GLOBAL         Include global symbols.
                    LOCALS         Include  local  symbols.   The   local
                                   symbols  cannot be included in the map
                                   file unless the /LOCALS switch is also
                                   given.
                    NOABSOLUTE     Exclude absolute symbols.
                    NOCOMMON       Exclude COMMON symbols.
                    NOENTRY        Exclude entry-name symbols.
                    NOGLOBAL       Exclude global symbols.
                    NOLOCAL        Exclude local symbols.
                    NONE           Exclude all symbols.
                    NORELOCATABLE  Exclude relocatable symbols.
                    NOUNDEFINED    Exclude undefined symbols.
                    NOZERO         Exclude   symbols    in    zero-length
                                   programs.    (a   zero-length  program
                                   contains no code or data; it  contains
                                   only  symbol definitions, for example,
                                   JOBDAT.)
                    RELOCATABLE    Include relocatable symbols.
                    UNDEFINED      Include undefined symbols.
                    ZERO           Include   symbols    in    zero-length
                                   programs.

               Only those symbols that  satisfy  all  conditions  in  the
               keyword list will appear in the MAP file.  For example, if
               both the NOGLOBAL and RELOCATABLE settings are  in  force,
               all  global  symbols  are  excluded  regardless  of  their
               relocatability.





                                    3-11
                                 FIELD TEST


   EXAMPLES    @LINK<RET>
               */CONTENTS:(NOCOMMON,NOENTRY)<RET>
               *

               Excludes COMMON and entry-name symbols.


               @LINK<RET>
               */CONTENTS:ALL<RET>
               *

               Includes all symbols.

   OPTIONAL    You can omit the parentheses if you give only one keyword.
   NOTATIONS

   RELATED     /MAP
   SWITCHES




































                                    3-12
                                 FIELD TEST


                                 /COUNTERS

   FORMAT      /COUNTERS

   FUNCTION    Displays information  about  relocation  counters  on  the
               terminal.  A relocation counter is an address counter that
               LINK uses while loading relocatable code.

               /COUNTERS returns the name, initial value, current  value,
               and limit value of each counter.  /COUNTERS first prints a
               header:

               Reloc. ctr.     initial value   current value   limit value

               Reloc. ctr.       gives the name of relocation counter.

               initial value     is the origin of the relocation counter.

               current value     is the address of the next free location
                                 after  the  relocation  counter has been
                                 loaded.

               limit value       is an upper bound  that  you  set  using
                                 /LIMIT  or that LINK sets by default for
                                 the  relocation  counter.   This   upper
                                 bound  defines  a  point  the relocation
                                 counter  should  not  load  beyond.   If
                                 /LIMIT  is  used  and  the counter loads
                                 beyond   this   bound,   LINK    returns
                                 messages.     See    /LIMIT   for   more
                                 information.

               /COUNTERS may be used to determine the  size  of  overlays
               when  loading  large  programs that might be too large for
               the allocated memory space.  Refer to Section 5.4 for more
               information.

               You can also use /COUNTERS to determine the size of PSECTs
               when loading extended addressing programs or programs that
               use PSECTs to conserve memory space.  Refer to Chapter 6.

   EXAMPLES    The following examples illustrate  the  various  /COUNTERS
               displays.

               The following display results from loading a  module  that
               does not contain code.

               @LINK<RET>
               */COUNTERS<RET>
               [LNKRLC No relocation counters set]




                                    3-13
                                 FIELD TEST


               The following display results from loading  only  absolute
               code.

               @LINK<RET>
               *ABCODE/COUNTERS<RET>
               [LNKRLC No relocation counters set
                Absolute code loaded]
               *


               The following display  results  from  loading  only  PSECT
               code.

               @LINK<RET>
               *PSCODE/COUNTERS<RET>

               [LNKRLC Reloc. ctr.     initial value   current value   limit value
                       PSCODE          20              25              1000000]
               *


               The following  display  results  from  loading  code  that
               contains both absolute and PSECT code.

               @LINK<RET>
               *MIXED/COUNTERS<RET>
               [LNKRLC Reloc. ctr.     initial value   current value   limit value
                       PSECTA          1400000         1400001         4000000
                       PSECTB          2500000         2500001         4000000
                       PSECTC          3600000         3600001         4000000
                       Absolute code loaded]
               *


               The following display results from  loading  two-segmented
               formatted code.

               @LINK<RET>
               *TWOPRT/COUNTERS<RET>
               [LNKRLC Reloc. ctr.     initial value   current value   limit value
                       .LOW.           0               1642            1000000
                       .HIGH.          400000          400753          1000000]
               *

   RELATED     /NEWPAGE, /SET, /LIMIT
   SWITCHES    








                                    3-14
                                 FIELD TEST


                                   /CPU

   FORMAT      /CPU:(keyword,keyword)

               Keyword:     KA10
                            KI10
                            KL10
                            KS10

   FUNCTION    Overrides LINK's handling  of  the  processor  information
               found in the REL files being loaded.  (See the description
               of Block Type 6 in Appendix A).  Ordinarily, LINK prints a
               warning if all REL files being loaded together do not have
               identical CPU types.  This switch can be  used  either  to
               make  LINK  flag  certain modules built for a specific CPU
               type (by specifying all but that CPU type as  keywords  to
               /CPU) or to suppress LINK's warning message (by specifying
               all the CPU types associated  with  the  REL  files  being
               loaded).

   EXAMPLES    @LINK<RET>
               */CPU:KI10<RET>
               *

               Causes LINK to issue the %LNKCCD message  if  any  modules
               with the KL10 CPU type are encountered.

   OPTIONAL    You can omit the parentheses if you specify only one CPU.
   NOTATIONS

























                                    3-15
                                 FIELD TEST


                                  /DDEBUG

   FORMAT      /DDEBUG:keyword

   FUNCTION    Specifies a default debugger to be loaded if the /DEBUG or
               /TEST switch appears without an argument.

               The keywords and the debuggers  they  specify  are  listed
               below.  Only those shown in bold are supported by DIGITAL.

                    Keyword     Debugger

                    ALGDDT      ALGDDT
                    ALGOL       ALGDDT
                    COBDDT      COBDDT
                    COBOL       COBDDT
                    DDT         DDT
                    FAIL        SDDT (SAIL debugger)
                    FORDDT      FORDDT
                    FORTRAN     FORDDT
                    MACRO       DDT
                    PASCAL      PASDDT
                    PASDDT      PASDDT
                    SAIL        SDDT (SAIL debugger)
                    SDDT        SDDT (SAIL debugger)
                    SIMDDT      SIMDDT
                    SIMULA      SIMDDT

   EXAMPLES    @LINK<RET>
               */DDEBUG:FORTRAN<RET>
               *

               Specifies FORDDT as the default debugger for the /DEBUG or
               /TEST switch.

   RELATED     /DEBUG, /TEST
   SWITCHES    

















                                    3-16
                                 FIELD TEST


                                  /DEBUG

   FORMAT      /DEBUG:keyword

   FUNCTION    Requests loading of a debugger and sets the start  address
               for  execution  at the start address of the debugger.  The
               /DEBUG switch also sets the /EXECUTE switch because it  is
               assumed  that  the  program  is  to  be executed.  The /GO
               switch  is  still  required  to  end  loading  and   begin
               execution.

               The /DEBUG switch turns on  the  /LOCALS  switch  for  the
               remainder of the load.  You can override this by using the
               /NOLOCAL  switch,  but  the  override  lasts  only  during
               processing of the current command.

               Local symbols for the debugger itself are never loaded.

               If debugging overlaid programs, you  must  specify  /DEBUG
               when  loading  the  root  node.  (Refer to Section 5.4 for
               more information.)

               The keywords and the programs they load are listed  below.
               Only those shown in bold supported by DIGITAL.

                    Keyword     Debugger

                    ALGDDT      ALGDDT
                    ALGOL       ALGDDT
                    COBDDT      COBDDT
                    COBOL       COBDDT
                    DDT         DDT
                    FAIL        SDDT (SAIL debugger)
                    FORDDT      FORDDT
                    FORTRAN     FORDDT
                    MACRO       DDT
                    PASCAL      PASDDT
                    PASDDT      PASDDT
                    SAIL        SDDT (SAIL debugger)
                    SDDT        SDDT (SAIL debugger)
                    SIMDDT      SIMDDT
                    SIMULA      SIMDDT

               If you give no keyword with /DEBUG, the default is  either
               DDT or the debugger specified by the /DDEBUG switch.









                                    3-17
                                 FIELD TEST


   EXAMPLES    @LINK<RET>
               */DEBUG:FORDDT<RET>
               *

               Loads FORDDT, sets the /EXECUTE switch, and specifies that
               FORDDT control execution.

   OPTIONAL    You can abbreviate /DEBUG to /D.
   NOTATIONS   

   RELATED     /DDEBUG, /TEST
   SWITCHES    










































                                    3-18
                                 FIELD TEST


                                 /DEFAULT

   FORMAT      filespec/DEFAULT:keyword

   FUNCTION    Changes default specifications for input or output  files.
               The  defaults  specified remain in effect until changed by
               another /DEFAULT switch.

               The keywords allowed are:

                    INPUT         Specifies the defaults for  input  file
                                  specifications.

                    OUTPUT        Specifies the defaults for output  file
                                  specifications.

               For input files, the initial defaults are:

                    device         DSK:
                    file type      REL
                    directory      Your connected directory

               For output files, the initial defaults are:

                    device         DSK:
                    filename       Name of main program
                    directory      Your connected directory

   EXAMPLES    @LINK<RET>
               */DEFAULT:INPUT .BIN<RET>
               *

               Resets input file default extension to BIN.

               @LINK<RET>
               */DEFAULT:OUTPUT MYSTR:<RET>
               *

               Resets output file default device to MYSTR:.

   OPTIONAL    If you omit the keyword, INPUT is assumed.
   NOTATIONS   












                                    3-19
                                 FIELD TEST


                                  /DEFINE

   FORMAT      /DEFINE:(symbol:value,...,symbol:value)

               symbol is a global symbol.

               value is a decimal number.

   FUNCTION    Assigns a decimal value  to  a  symbol.   This  assignment
               causes the symbols to be global symbols.  To get a list of
               any undefined symbols, use the /UNDEFINED switch.

               Defining an already defined symbol with /DEFINE  generates
               an error message.

   EXAMPLES    */UNDEFINED<RET>
               [LNKUGS  2 UNDEFINED GLOBAL SYMBOLS]
                    ALPHA   400123
                    BETA    402017

               */DEFINE:(ALPHA:591,BETA:1)<RET>
               *

               Gives the decimal values 591 and  1  to  ALPHA  and  BETA,
               respectively.

   OPTIONAL    You can give the value in octal by typing a hash sign (#)
   NOTATIONS   before the value.  You can omit  the  parentheses  if  you
               define only one symbol.

   RELATED     /UNDEFINED, /VALUE
   SWITCHES    






















                                    3-20
                                 FIELD TEST


                                  /ENTRY

   FORMAT      /ENTRY

   FUNCTION    Displays all entry name symbols that have been  loaded  on
               the  terminal.   Each  entry  name symbol is defined by an
               ENTRY statement (MACRO, FORTRAN,  or  BLISS),  a  FUNCTION
               statement  (FORTRAN),  a SUBROUTINE statement (FORTRAN, or
               COBOL), or a PROCEDURE declaration (ALGOL, or PASCAL).

               If you are using the  overlay  facility,  /ENTRY  requests
               only the entry name symbols for the current overlay link.

   EXAMPLES    @LINK<RET>
               /ENTRY<RET>
               [LNKLSS  LIBRARY SEARCH SYMBOLS (ENTRY POINTS)]
                    SQRT.  3456
               *

   RELATED     /NOENTRY
   SWITCHES    

































                                    3-21
                                 FIELD TEST


                                /ERRORLEVEL

   FORMAT      /ERRORLEVEL:n

               n is a positive decimal integer.

   FUNCTION    Suppresses the terminal  display  of  LINK  messages  with
               message  level  less  than  n, where n is a decimal number
               between 0 and 31 inclusive.  You cannot suppress level  31
               messages.  LINK's default is /ERRORLEVEL:8.

               See Appendix B for the level of each LINK message.

   EXAMPLES    @LINK<RET>
               */ERRORLEVEL:15<RET>
               *

               Suppresses all messages less than level 15.


               @LINK<RET>
               */ERRORLEVEL:0<RET>
               *

               Permits typeout of all messages.

   RELATED     /VERBOSITY, /MESSAGE
   SWITCHES    


























                                    3-22
                                 FIELD TEST


                                 /EXCLUDE

   FORMAT      /EXCLUDE:(module,...,module)

   FUNCTION    Prevents loading of the specified modules from the current
               file  even  if  they are required to resolve global symbol
               references.  You can use the /EXCLUDE switch  for  any  of
               the following purposes:

                o  If a library has several modules with the same  search
                   symbols,  you  can  select  the  module  you  want  by
                   excluding the others.

                o  If several modules contain the same  symbol,  you  can
                   select  the module with the symbol definition you want
                   by excluding the others.  This also  prevents  modules
                   from giving multiple definitions of a symbol.

                o  In  defining  an  overlay  structure,  you  can  delay
                   loading  of  a  module  until  a later overlay link by
                   excluding the module.

   EXAMPLES    @LINK<RET>
               */SEARCH LIBFIL.REL/EXCLUDE:(MOD1,MOD2)<RET>
               *

               Searches LIBFIL as a library but prevents loading of  MOD1
               and MOD2 even if they resolve global symbol references.

   OPTIONAL    You can omit the  parentheses  if  you  specify  only  one
   NOTATIONS   module.

   RELATED     /INCLUDE, /NOINCLUDE
   SWITCHES    




















                                    3-23
                                 FIELD TEST


                                 /EXECUTE

   FORMAT      /EXECUTE

   FUNCTION    Directs LINK to execute the loaded  program  beginning  at
               the program's start address.  LINK continues loading until
               a /GO switch is found.

               Use either the /EXECUTE or /DEBUG  switches  to  load  and
               execute a program.

   EXAMPLES    @LINK<RET>
               */EXECUTE<RET>
               *PROGRM/GO

   OPTIONAL    You can abbreviate /EXECUTE to /E.
   NOTATIONS   

   RELATED     /DEBUG, /GO, /RUN, /TEST
   SWITCHES    


































                                    3-24
                                 FIELD TEST


                                  /FRECOR

   FORMAT      /FRECOR:nK

               n is a positive decimal integer.

               K is the representation for 1024.

   FUNCTION    Requires LINK to maintain a minimum amount of free  memory
               after  any  expansions.  LINK's default free memory is 4K.
               If you use the /FRECOR:nK switch, LINK  computes  n  times
               1024  words and maintains the resulting number of words of
               free memory, if possible.

               If the modules to be loaded  are  quite  large,  a  larger
               amount of free memory avoids some moving of areas.

               LINK has ten areas that may be expanded during loading:

                    1.  ALGOL symbol information (AS).  +
                    2.  Bound global symbols (BG).
                    3.  Dynamic area (DY).
                    4.  Fixup area (FX).
                    5.  Global symbol tables (GS).
                    6.  User's high segment code (HC).  +
                    7.  User's low segment code (LC).  +
                    8.  Local symbol tables (LS).  +
                    9.  Relocation tables (RT).
                   10.  Argument typechecking (TP).  +

               Areas that can overflow are marked  with  a  +.   Each  of
               these  areas has a lower bound, an actual upper bound, and
               a maximum upper  bound.   LINK  normally  maintains  space
               between the actual and maximum upper bounds for each area.
               The total of these ten spaces is at least the space  given
               by the /FRECOR switch, if possible.

               LINK recovers free memory by concatenating these ten  free
               areas.   When  all this recovered space is used and one or
               more of the ten areas overflows then  free  memory  is  no
               longer maintained because the free memory has been used.

   EXAMPLES    @LINK<RET>
               */FRECOR:7K<RET>
               *

               Maintains 7K of free memory, if possible.

   OPTIONAL    You can specify the free memory in octal using a hash sign
   NOTATIONS   (#).  For example, /FRECOR:#11K.




                                    3-25
                                 FIELD TEST


                                    /GO

   FORMAT      /GO

   FUNCTION    Ends loading after the current file and exits LINK.   LINK
               then performs any required library searches, generates any
               required output files, and does one of the following:

                o  Begins execution at the start address  of  the  loaded
                   program if you used /EXECUTE.

                o  Begins execution at the start address of the  debugger
                   if you used /DEBUG.

                o  Exits to the monitor if you used no execution switch.


   EXAMPLES    @LINK<RET>
               *MYPROG/EXECUTE/GO<RET>

               [LNKXCT  MYPROG execution]

               Begins execution  of  the  loaded  program  at  its  start
               address.


               @LINK<RET>
               *MYPROG/DEBUG/GO<RET>

               [LNKDEB DDT execution]

               Begins execution  of  the  loaded  program  at  the  start
               address of DDT.

   OPTIONAL    You can abbreviate /GO to /G.
   NOTATIONS   

   RELATED     /DEBUG, /EXECUTE, /RUN
   SWITCHES    















                                    3-26
                                 FIELD TEST


                                   /EXIT

   FORMAT      /EXIT

   FUNCTION    Exits LINK.  LINK does not finish loading the program.  To
               finish loading the program and to exit LINK, use /GO.

   EXAMPLES    @LINK
               *MYPROG<RET>
               */EXIT
               @











































                                    3-27
                                 FIELD TEST


                                 /HASHSIZE

   FORMAT      /HASHSIZE:n

               n is a positive decimal integer.

   FUNCTION    Gives a minimum for the initial size of the global  symbol
               table.   LINK selects a prime number larger than n for the
               initial size.

               LINK automatically expands a symbol  table.   However,  if
               you  know  that  you need a large global symbol table, you
               can save time and space by allocating space  for  it  with
               /HASHSIZE.   You  should  give  a  hash  size  at least 10
               percent larger than the number of global  symbols  in  the
               table.

               If LINK gives the message [LNKRGS  Rehashing Global Symbol
               Table]  during a load, you should use the /HASHSIZE switch
               for future loads of the same program.   The  minimum  hash
               size  for loading a program appears in the header lines of
               the map file.

               The  default  hash  size  is  a  LINK  assembly  parameter
               (initially 251 decimal).

   EXAMPLES    @LINK<RET>
               /HASHSIZE:1000<RET>
               *

               Sets the hash size to the prime number 1021.























                                    3-28
                                 FIELD TEST


                                   /HELP

   FORMAT      /HELP:keyword

   DEFAULTS    /HELP:TEXT

   FUNCTION    Displays information about  LINK  on  the  terminal.   The
               keywords are:

                    Keyword   Description

                    SWITCHES  prints a list of valid switches.

                    TEXT      prints  a  more  detailed  description   of
                              command formats and switches.

   OPTIONAL    You can abbreviate /HELP to /H.
   NOTATIONS




































                                    3-29
                                 FIELD TEST


                                 /INCLUDE

   FORMAT      /INCLUDE:(module,...,module)

   FUNCTION    Requires the loading of the specified modules  whether  or
               not there are any global requests for them.  For example,

                    */INCLUDE:(MODU6,MODU9)<RET>

               requires that modules MODU6 and MODU9 be loaded.

               /INCLUDE can be used as a  local  or  global  switch.   If
               /INCLUDE  is  used  as  a local switch the request for the
               module is cleared after the file is loaded.  For example,

                    *FILE8/INCLUDE:(MODU7,MODU8)<RET>

               loads module MODU7 and MODU8 from FILE8.

               If /INCLUDE is used as a global switch,  the  request  for
               the  modules are not cleared until the modules are loaded.
               For example,

                    */INCLUDE:(MODU2,MODU3,MODU4) FILEA,FILEB,FILEC<RET>

               requires loading of MODU2, MODU3,  and  MODU4.   If  these
               modules  do not exist in FILEA, FILEB, and FILEC, /INCLUDE
               request continues until they are loaded.

               If you used /SEARCH specifying  library  search  mode  and
               specify  /INCLUDE,  the /INCLUDE switch causes the modules
               specified in the  switch  to  be  loaded  in  addition  to
               modules   that   are   loaded  to  satisfy  global  symbol
               references.  For example,

                     *LIBARY/SEARCH/INCLUDE:(DATMOD,NAMMOD,NUMMOD)<RET>

               Causes LIBARY to  be  searched  and  DATMOD,  NAMMOD,  and
               NUMMOD  to  be  loaded  along  with other modules that are
               needed to resolve global symbol references.

               You can use /INCLUDE in an overlay load to force a  module
               to be loaded in an ancestor link common to successor links
               that  reference  that  module.   This  makes  the   module
               available to all links that are successors to its link.

   EXAMPLES    @LINK<RET>
               */SEARCH LIB1/INCLUDE:(MOD1,MOD2)<RET>
               *

               Searches LIB1 and loads MOD1 and MOD2 even if they are not
               needed to resolve global symbol references.


                                    3-30
                                 FIELD TEST


   OPTIONAL    You can omit the  parentheses  if  you  specify  only  one
   NOTATIONS   module.

   RELATED     /EXCLUDE, /NOINCLUDE, /MISSING
   SWITCHES    

















































                                    3-31
                                 FIELD TEST


                                  /LIMIT

   FORMAT      /LIMIT:psect:origin

               psect is a PSECT name.

               origin is a thirty-bit octal address or a defined symbol.

   FUNCTION    specifies an upper bound for a PSECT.  If the PSECT  loads
               beyond this bound, LINK returns error messages.

               Before using /LIMIT, the PSECT name must be  defined  with
               either  the  /SET  switch or in one of the modules already
               loaded.

               The upper bound can be  expressed  in  either  numeric  or
               symbolic  form.   This  address  is  one  greater than the
               highest location which may be loaded in the PSECT and need
               not be in the same section as the PSECT origin.

               If the PSECT grows beyond the  address  specified  in  the
               /LIMIT  switch, LINK sends a warning to your terminal, but
               continues to process input files and to  load  code.   The
               warning message takes the following form:

                    %LNKPEL PSECT <psect> exceeded limit of <address>

               Although LINK does continue to  process  input  files  and
               load  code,  the  program  is incomplete and should NOT be
               used.  LINK produces the following fatal error:

                    ?LNKCFS Chained fixups have been suppressed

               Chained fixups are a method  that  LINK  uses  to  resolve
               symbol references.

               Using /LIMIT to define an upper bound prevents  unintended
               PSECT overlaps.  PSECT overlaps can cause LINK to loop and
               produces other unpredictable behavior, because  LINK  uses
               the  unresolved  address  relocation  chains  in  the user
               program being built.

   EXAMPLES    In the following example, the LRGPRO and  BIGPRO  programs
               each  contain two PSECTs, BIG and GRAND.  LRGPRO is loaded
               first using /COUNTERS to check the origin and the  current
               value of the PSECTs.  The PSECT origin is found by looking
               under the initial value column and the  current  value  is
               found  by looking under the current value of the /COUNTERS
               output.

               @LINK<RET>
               */SET:BIG:1000<RET>


                                    3-32
                                 FIELD TEST


               */SET:GRAND:5400<RET>
               *LRGPRO<RET>
               */COUNTERS<RET>
               [LNKRLC Reloc. ctr.     initial value   current value   limit value
                       .LOW.           0               140             1000000
                       BIG             1000            5100            1000000
                       GRAND           5400            10500           1000000
                       Absolute code loaded]

               /COUNTERS shows that the current value for PSECT  BIG  and
               the  initial  value  for PSECT GRAND are close together in
               memory.  The current value for BIG is 5100 and  the  PSECT
               origin  for  GRAND  is 5400.  The /LIMIT switch can now be
               used to restrict PSECT BIG upper bound  to  PSECT  GRAND's
               initial value using:

               */LIMIT:BIG:GRAND<RET>

               This prevents an unintended overlap when  PSECT  BIG  from
               BIGPRO is loaded because the upper bound for BIG is set to
               GRAND's origin.  Now when BIGPRO is loaded, if  PSECT  BIG
               exceeds  the  limit,  LINK  produces  the  LNKPEL  warning
               indicating that the upper bound  needs  to  be  increased.
               The  /COUNTERS  switch  shows  a new current value greater
               than 5400.  Notice that the  limit  set  with  the  /LIMIT
               switch is shown in the LIMIT VALUE column.

               *BIGPRO<RET>
               %LNKPEL PSECT BIG exceeded limit of 5100
                       detected in module .MAIN from file BIGPRO.REL
               */COUNTERS<RET>
               [LNKRLC Reloc. ctr.     initial value   current value   limit value
                       .LOW.           0               140             1000000
                       BIG             1000            6300            5400
                       GRAND           5400            10500           1000000]
                       Absolute code loaded]

               /GO continues loading the program, and LINK  produces  the
               POV warning message and the CFS fatal error message.

               */GO<RET>
               %LNKPOV PSECTs BIG and GRAND overlap from address 5400 to 6300
               ?LNKCFS chained fixups have been suppressed

               To avoid the overlap, move the  PSECTs  farther  apart  in
               memory.   In  this  example,  GRAND's origin is reset from
               5400 to 7000.

               @LINK<RET>
               */SET:BIG:1000<RET>
               */SET:GRAND:7000<RET>
               */LRGPRO<RET>


                                    3-33
                                 FIELD TEST


               */LIMIT:BIG:GRAND<RET>
               *BIGPRO<RET>
               */GO<RET>
               @


















































                                    3-34
                                 FIELD TEST


                                   /LINK

   FORMAT      /LINK:name

               name is up to 6 Radix-50 compatible characters.

   FUNCTION    Closes an overlay link.  /LINK directs LINK  to  give  the
               specified  overlay  link  name to the current memory image
               and outputs the memory image to the  overlay  file.   LINK
               first performs any required library searches and assigns a
               number to the overlay link.

               For a discussion of overlay structures, see Chapter 5.

               The current memory image has all modules loaded since  the
               beginning of the load or since the last /LINK switch.

   EXAMPLES    @LINK<RET>
               *SPEXP/LINK:ALPHA<RET>
               *

               Loads module SPEXP and outputs the  memory  image  to  the
               overlay file as an overlay link named ALPHA.

   OPTIONAL    If you omit the overlay link name, LINK uses the overlay
   NOTATIONS   link's assigned number.

   RELATED     /NODE
   SWITCH

























                                    3-35
                                 FIELD TEST


                                  /LOCALS

   FORMAT      /LOCALS

   FUNCTION    Includes local symbols from a module in the symbol  table.
               LINK does not need these tables, but you may want them for
               debugging.

               /LOCALS and /NOLOCAL may be used as either local or global
               switches.    If   the   switch   is  appended  to  a  file
               specification, it applies only to that file; if it is  not
               appended  to  a  file specification, it applies to all the
               files that follow in the same command line.

   EXAMPLES    @LINK<RET>
               */LOCALS ALPHA,BETA/NOLOCAL,CAPPA,/NOLOCAL DELTA<RET>
               *

               Loads  ALPHA  with  local  symbols,  BETA  without   local
               symbols, CAPPA with local symbols, and DELTA without local
               symbols.

   OPTIONAL    You can abbreviate /LOCALS to /L.
   NOTATIONS   

   RELATED     /NOLOCAL, /SYMSEG
   SWITCHES    



























                                    3-36
                                 FIELD TEST


                                   /LOG

   FORMAT      logfilespec/LOG

   FUNCTION    Specifies a file  specification  for  the  log  file  (see
               Section  4.2.2).  Any LINK messages output before the /LOG
               switch is encountered are not entered  in  the  log  file.
               Any  messages output after the LOG file is closed are also
               not entered in the file.

   EXAMPLES    @LINK<RET>
               *LOGFIL/LOG<RET>
               *

               Specifies the file DSK:LOGFIL.LOG in the user's directory.

               @LINK<RET>
               *TTY:/LOG<RET>
               *

               Directs log messages to the user's terminal.

   OPTIONAL    You can omit all or part of the logfilespec.
   NOTATIONS   The defaults are:

                    device         DSK:
                    filename       name of main program
                    file type      LOG
                    directory      your connected directory

               You can change the defaults using the /DEFAULT switch.

   RELATED     /LOGLEVEL
   SWITCHES    




















                                    3-37
                                 FIELD TEST


                                 /LOGLEVEL

   FORMAT      /LOGLEVEL:n

               n is a positive decimal integer.

   FUNCTION    Suppresses logging of LINK  messages  with  message  level
               less  than n, where n is a decimal number between 0 and 31
               inclusive.  You cannot suppress level 31 messages.

               See Appendix B for the level of each LINK message.

               The default is /LOGLEVEL:8.

   EXAMPLES    @LINK<RET>
               */LOGLEVEL:0<RET>
               *

               Logs all messages.

   RELATED     /ERRORLEVEL, /LOG
   SWITCHES    
































                                    3-38
                                 FIELD TEST


                                   /MAP

   FORMAT      mapfilespec/MAP:keyword

   FUNCTION    Specifies a file specification for  the  map  output  file
               (see   Section   4.2).   The  contents  of  the  file  are
               determined by the /CONTENTS switch or its defaults.

                    Keyword           Description

                    END               Produces a map file at the  end  of
                                      the  load.   This is the default if
                                      you omit the keyword.

                    ERROR             Produces a  map  file  if  a  fatal
                                      error  occurs.   Any modules loaded
                                      after this switch do not appear  in
                                      the log.  To ensure that a MAP file
                                      is generated, specify  this  switch
                                      before the loading of REL files.

                    NOW               Produces a  map  file  immediately.
                                      Library  searches are not performed
                                      unless forced.

   EXAMPLES    @LINK<RET>
               *MAPFIL/MAP:END<RET>
               *

               Generates a map in the file DSK:MAPFIL.MAP  in  your  disk
               area at the end of loading.

   OPTIONAL    You can omit all or part of the mapfilespec.
   NOTATIONS   The defaults are:

                    device         DSK:
                    filename       name of main program
                    file type      MAP
                    directory      user's connected directory

               You can change the defaults using the /DEFAULT switch.

               You can abbreviate /MAP to /M.

   RELATED     /CONTENTS
   SWITCHES    








                                    3-39
                                 FIELD TEST


                                 /MAXNODE

   FORMAT      /MAXNODE:n

               n is a positive decimal integer.

   FUNCTION    Specifies the number of overlay links to be  defined  when
               the  overlayed  program  requires  more  than  256 overlay
               links.  LINK allocates extra space in  the  OVL  file  for
               certain fixed-length tables based on the number of overlay
               links specified with this switch.

               Note that this switch must be placed  after  the  /OVERLAY
               switch  and  it must precede the first /NODE switch in the
               set of commands to LINK.

   EXAMPLES    @LINK<RET>
               *TEST/OVERLAY/MAXNODE:500<RET>
               *

               Reserves space for 500 defined overlay links.  See Chapter
               5 for a discussion on overlays.

   RELATED     /OVERLAY
   SWITCHES





























                                    3-40
                                 FIELD TEST


                                 /MESSAGE

   FORMAT      /MESSAGE:keyword

   FUNCTION    Displays messages on the terminal in the format  specified
               by keyword.  Both /MESSAGE and /VERBOSITY display messages
               on the terminal, but use  different  keywords  and  return
               slightly different output.

                    Keyword           Description

                    PREFIX            displays the message code.

                    NOPREFIX          prevents the display of the message
                                      code.

                    FIRST             displays the short message.

                    NOFIRST           prevents the display of  the  short
                                      message.

                    CONTINUATION      displays the longer message.

                    NOCONTINUATION    prevents the display of the  longer
                                      message.

   EXAMPLES    In  all  the  following  examples,   an   incorrect   file
               specification  (KSD:MISTKE)  is entered.  In the following
               example, /NOPREFIX prevents the  display  of  the  message
               code.

               @LINK<RET>
               */MESSAGE:NOPREFIX<RET>
               *KSD:MISTKE<RET>
               % Non-existent device KSD:
               [ Please retype the incorrect parts of the file
               specification ]
               *


               In the next example, a short message is returned.

               @LINK<RET>
               */MESSAGE:FIRST<RET>
               *KSD:MISTKE<RET>
               %LNKNED Non-existent device KSD:
               [ Please retype the incorrect parts of the file
               specification]


               In this example, a long message is returned.



                                    3-41
                                 FIELD TEST


               @LINK<RET>
               */MESSAGE:CONTINUATION<RET>
               *KSD:MISTKE<RET>
               %LNKNED Non-existent device KSD:
                You gave a device that does  not  exist  on  this  system.
                Correct your input files and reload.
               [ Please retype the incorrect parts of the file specification]

   RELATED     /ERRORLEVEL, /VERBOSITY
   SWITCHES












































                                    3-42
                                 FIELD TEST


                                 /MISSING

   FORMAT      /MISSING

   FUNCTION    Displays on the terminal the number of  modules  requested
               with the /INCLUDE switch that have not yet been loaded.

   EXAMPLES    In  the  following  example,  MYPROG  is  loaded,  library
               searches  are  requested,  MOD1  and MOD2 are to be loaded
               during the search, and LIB1 is to be loaded.

               @LINK<RET>
               *MYPROG<RET>
               */SEARCH/INCLUDE:(MOD1,MOD2) LIB1<RET>

               Next, /MISSING is used  to  check  if  both  modules  were
               loaded.

               */MISSING<RET>
               [LNKIMM  1 included module missing]

               Now, LIB2 is loaded, MOD2 is to be included, and  /MISSING
               is used to check if MOD2 was loaded.

               *LIB2/INCLUDE:(MOD2)<RET>
               */MISSING<RET>
               [LNKIMM  no included modules missing]
               *

   RELATED     /EXCLUDE, /INCLUDE, /UNDEFINED
   SWITCHES    























                                    3-43
                                 FIELD TEST


                                 /NEWPAGE

   FORMAT      /NEWPAGE:keyword

   FUNCTION    Sets the relocation counter to the first word of the  next
               page.   If  the  counter  is  already  at a new page, this
               switch is ignored.

                    Keyword   Description

                    LOW       Resets the low-segment counter to new page.
                              If  you  omit  the  keyword,  this  is  the
                              default.

                    HIGH      Resets  the  high-segment  counter  to  new
                              page.

   EXAMPLES    @LINK<RET>
               */NEWPAGE:HIGH<RET>
               *SUBR1<RET>
               */NEWPAGE:LOW<RET>
               *SUBR2<RET>
               *

               Sets the high-segment counter to a new page, loads  SUBR1,
               sets  the  low-segment  counter  to  a new page, and loads
               SUBR2.  Note that SUBR1  and  SUBR2  are  not  necessarily
               loaded  into  the  high and low segments respectively; the
               /NEWPAGE switch sets a counter, but  does  not  force  the
               next loaded module into the specified segment.

   RELATED     /SET, /COUNTERS
   SWITCHES    





















                                    3-44
                                 FIELD TEST


                                   /NODE

   FORMAT      /NODE:argument

   FUNCTION    Opens an overlay link.   /NODE  places  LINK's  relocation
               counter at the end of a previously defined overlay link in
               an overlay structure, which becomes the immediate ancestor
               to  the  next  overlay link defined.  (For a discussion of
               overlay structures, see Chapter 5.)

               The /NODE switch must precede any modules to be placed  in
               the new overlay link.

                    Argument          Description

                    name              is a name  given  with  a  previous
                                      /LINK   switch.   LINK  places  the
                                      relocation counter at  the  end  of
                                      the specified overlay link.

                    negative number   is a negative  number  (-n).   LINK
                                      backs  up n overlay links along the
                                      current path.

                    positive number   is a positive number n or 0.   LINK
                                      begins  further  loading at the end
                                      of overlay link number n.  You  can
                                      use  0 to begin loading at the root
                                      link.

                                                     NOTE

                                          It is recommended that  you
                                          use  an  overlay  link name
                                          (or 0 for  the  root  link)
                                          rather   than   a   nonzero
                                          number.  This is because  a
                                          change in commands defining
                                          an overlay may change  some
                                          of    the    overlay   link
                                          numbers.

   EXAMPLES    In the following example, /NODE opens overlay link FATHER,
               SON1  and  SON2  are  loaded, and /LINK closes the overlay
               link.

               @LINK<RET>
               */NODE:FATHER<RET>
               *SON1<RET>
               *SON2<RET>
               */LINK:FATHER<RET>
               *


                                    3-45
                                 FIELD TEST


               See Chapter 5 for more examples.

   RELATED     /LINK, /OVERLAY, /PLOT
   SWITCHES    


















































                                    3-46
                                 FIELD TEST


                                 /NOENTRY

   FORMAT      /NOENTRY:(symbol,symbol,...)

               symbol is an entry name symbol.

   FUNCTION    Deletes entry name symbols  from  LINK's  overhead  tables
               when  loading  overlays, thereby saving space at run time.
               If you know that execution of the current  load  does  not
               reference  certain  entry  points, you can use /NOENTRY to
               delete them.

               /NOENTRY  differs  from  /NOREQUEST  in  that   /NOREQUEST
               deletes  requests  for  symbols,  while  /NOENTRY  deletes
               symbols that might be requested.

   EXAMPLES    @LINK<RET>
               */ENTRY<RET>
               [LNKLSS  LIBRARY SEARCH SYMBOLS (ENTRY POINTS)]
                    SQRT.   3456
               */NOENTRY:(SQRT.)<RET>
               */ENTRY<RET>
               *

               Deletes SQRT.  so that it cannot  be  used  to  fulfill  a
               symbol request.

   OPTIONAL    You can omit the parentheses if only one symbol is given.
   NOTATIONS   

   RELATED     /ENTRY,   /EXCLUDE,    /NOEXCLUDE,  /INCLUDE,  /NOINCLUDE,
   SWITCHES    /MISSING, /REQUEST, /NOREQUEST






















                                    3-47
                                 FIELD TEST


                                /NOINCLUDE

   FORMAT      /NOINCLUDE

   FUNCTION    Clears requests for  modules  that  were  specified  in  a
               previous /INCLUDE.

   EXAMPLES    @LINK<RET>
               *LIB1/INCLUDE:(MOD1,MOD3)<RET>
               */NOINCLUDE<RET>
               *

               Loads MOD1 and MOD3 from LIB1.  However,  if  the  modules
               are not found immediately, LINK stops searching.

   RELATED     /INCLUDE, /EXCLUDE, /MISSING
   SWITCHES





































                                    3-48
                                 FIELD TEST


                                /NOINITIAL

   FORMAT      /NOINITIAL

   FUNCTION    Prevents loading of LINK's  initial  global  symbol  table
               (JOBDAT).   The /NOINITIAL switch cannot operate after the
               first file specification because JOBDAT is already loaded.
               The initial global symbol table contains the JBxxx symbols
               described in Appendix C.

               The /NOINITIAL switch is commonly used for:

                o  Loading  LINK  itself  (to  get  the  latest  copy  of
                   JOBDAT).

                o  Loading  a  private  copy  of  JOBDAT  (to  alter   if
                   necessary).

                o  Building an EXE file that eventually runs in executive
                   mode (for example, a monitor or bootstrap loader).

                o  Building a TOPS-20 native program which does not use a
                   JOBDAT area.

   EXAMPLES    @LINK<RET>
               */NOINITIAL<RET>
               *

   RELATED     /NOJOBDAT
   SWITCHES
























                                    3-49
                                 FIELD TEST


                                 /NOJOBDAT

   FORMAT      /NOJOBDAT

   FUNCTION    Prevents  LINK  from  filling  in  JOBDAT's  or  vestigial
               JOBDAT's  address  space  and causes LINK to create a PDV.
               JOBDAT  contains  program  information  such  as  debugger
               symbol  table  location  and  version  number.   Vestigial
               JOBDAT is used in two segment programs.

               LINK creates either  a  JOBDAT  or  a  PDV  (Program  Data
               Vector) when loading a program.  LINK creates a JOBDAT for
               most section zero programs.  LINK creates a PDV:

                o  for extended addressing programs.

                o  if a PSECT has an origin below 140.

                o  if you specify a PDV using /PVBLOCK or /PVDATA.

                o  if you specify /NOJOBDAT.

               /NOJOBDAT does not suppress symbols.

   EXAMPLES    @LINK<RET>
               *PROGAM/NOJOBDAT<RET>
               *

               Loads  PROGAM  and  keeps  LINK  from  filling  in  JOBDAT
               information during loading.

   RELATED     /NOINITIAL
   SWITCHES    





















                                    3-50
                                 FIELD TEST


                                 /NOLOCAL

   FORMAT      /NOLOCAL

   FUNCTION    Suspends the effect of a preceding /LOCALS switch so  that
               local symbol tables are not loaded with their modules.

               The /LOCALS and /NOLOCAL switches may be used as local  or
               global  switches.   If  the  switch  is appended to a file
               specification, it applies only to that file; if it is  not
               appended  to  a  file specification, it applies to all the
               following files in the same command.

               This switch is useful  if  you  need  to  conserve  memory
               space,  because  local  symbols  are  loaded  into the low
               segment by default.

   EXAMPLES    @LINK<RET>
               */LOCALS MODA,MODB/NOLOCAL,MODC,/NOLOCAL MODD<RET>
               *

               Loads MODA with local symbols, MODB without local symbols,
               MODC with local symbols, and MODD without local symbols.

   OPTIONAL    Abbreviate /NOLOCAL to /N.
   NOTATIONS   

   RELATED     /LOCALS
   SWITCHES    

























                                    3-51
                                 FIELD TEST


                                /NOREQUEST

   FORMAT      /NOREQUEST:(symbol,symbol,...)

   FUNCTION    Deletes references to overlay links from  LINK's  overhead
               tables  when  loading  overlay programs.  If you know that
               the execution of the current load does not require certain
               overlay links, you can use /NOREQUEST to delete references
               to them.

               /NOREQUEST differs from /NOENTRY in that /NOENTRY  deletes
               symbols  that might be requested, while /NOREQUEST deletes
               the requests for them.

   EXAMPLES    @LINK<RET>
               */REQUEST<RET>
               [LNKRER  REQUEST EXTERNAL REFERENCES]
                    ROUTN.
                    SQRT.
               */NOREQUEST:(ROUTN.,SQRT.)
               */REQUEST
               *

               Deletes references to ROUTN.  and SQRT.

   OPTIONAL    You can omit the parentheses if only one symbol is given.
   NOTATIONS   

   RELATED     /NOENTRY
   SWITCH
























                                    3-52
                                 FIELD TEST


                                 /NOSEARCH

   FORMAT      /NOSEARCH

   FUNCTION    Suspends the effect of a previous /SEARCH  switch.   Files
               named  between  a  /SEARCH  and  the  next  /NOSEARCH  are
               searched as libraries, so that modules are loaded only  to
               resolve global references.

               The /SEARCH and /NOSEARCH  switches  may  be  used  either
               locally  or globally.  If the switch is appended to a file
               specification, it applies only to that file; if it is  not
               appended  to  a  file  specification,  it  applies  to all
               following files in the same command string.

   EXAMPLES    @LINK<RET>
               */SEARCH ALPHA,BETA/NOSEARCH,CAPPA,/NOSEARCH DELTA<RET>
               *

               Searches ALPHA, loads  BETA,  searches  CAPPA,  and  loads
               DELTA.

   RELATED     /SEARCH
   SWITCHES    






























                                    3-53
                                 FIELD TEST


                                 /NOSTART

   FORMAT      /NOSTART

   FUNCTION    Directs LINK to disregard any start addresses found  after
               the  /NOSTART switch.  Normally LINK keeps the most recent
               start address found,  overwriting  any  previously  found.
               The /NOSTART switch prevents this replacement.

   EXAMPLES    @LINK<RET>
               MAIN1,/NOSTART MAIN2,MAIN3<RET>
               *

               Directs LINK to save the start address from MAIN1  instead
               of  replacing it with other start addresses from MAIN2 and
               MAIN3.

   RELATED     /START
   SWITCHES    



































                                    3-54
                                 FIELD TEST


                                 /NOSYMBOL

   FORMAT      /NOSYMBOL

   FUNCTION    Prevents construction of user symbol tables.  Symbols  are
               then  not  available  for the map file, but the header for
               the file can still be generated by the /MAP switch.

               The /NOSYMBOL switch prevents writing an ALGOL SYM file if
               it would otherwise have been written.

               If you do not need the map file or symbols, you  can  free
               some memory space using the /NOSYMBOL switch.

   EXAMPLES    @LINK<RET>
               */NOSYMBOL<RET>
               *





































                                    3-55
                                 FIELD TEST


                                 /NOSYSLIB

   FORMAT      /NOSYSLIB:(keyword,...,keyword)

   FUNCTION    Prevents automatic search of the system libraries named as
               keywords.   LINK  searches  system libraries at the end of
               loading to  satisfy  unresolved  global  references.   The
               /NOSYSLIB switch prevents this search.

               The  /NOSYSLIB  switch  can  also  be  used  to  terminate
               searching  of  libraries that were specified in a previous
               /SYSLIB switch.  When you specify searching of  a  library
               with  /SYSLIB,  that  library continues to be searched for
               every module you load.  You can use /NOSYSLIB  to  specify
               libraries  that  should not be searched.  Refer to /SYSLIB
               for more information.

               The keywords and the libraries  they  specify  are  listed
               below.    Only  those  shown  in  bold  specify  libraries
               supported by DIGITAL.

                    Keyword     Library

                    ANY         all
                    ALGOL       ALGLIB
                    BCPL        BCPLIB
                    COBOL       LIBOL or C74LIB
                    FORTRAN     FORLIB
                    NELIAC      LIBNEL
                    PASCAL      PASLIB
                    SAIL        SAILIB
                    SIMULA      SIMLIB

   EXAMPLES    @LINK<RET>
               */NOSYSLIB:(ALGOL,COBOL)<RET>
               *

               Prevents search of the system libraries ALGLIB and LIBOL.

   OPTIONAL    If you omit keyword it defaults to ANY.
   NOTATIONS   You can omit parentheses if only one keyword is given.

   RELATED     /SYSLIB
   SWITCHES










                                    3-56
                                 FIELD TEST


                                /NOUSERLIB

   FORMAT      /NOUSERLIB

   FUNCTION    Discontinues automatic searching of the user libraries  at
               each  /LINK  or /GO switch.  You can specify which library
               to  stop  searching  by  appending  /USERLIB  to  a   file
               specification.  For example,

               *MYLIB/NOUSERLIB

               stops searching MYLIB.

               For programs  that  use  overlays,  if  you  need  a  file
               searched  for  some  overlay links but not others, you can
               use the /USERLIB and /NOUSERLIB  switches  to  enable  and
               disable automatic searching of the file.

   EXAMPLES    @LINK<RET>
               *FILE/OVERLAY<RET>
               *FILE4/USERLIB:FORTRAN<RET>
               *LINKA/LINK:ROOT<RET>
               */NODE:ROOT<RET>
               *LINKB/LINK:ONE<RET>
               */NODE:ROOT<RET>
               *LINKA,LINKB/NOUSERLIB<RET>
               *

   OPTIONAL    If you omit the filespec, LINK discontinues search of  all
   NOTATIONS   user libraries.

   RELATED     /USERLIB
   SWITCHES    





















                                    3-57
                                 FIELD TEST


                                   /ONLY

   FORMAT      /ONLY:keyword

   FUNCTION    Directs LINK to load the specified segments of two-segment
               modules.  The keywords are:

                    Keyword     Segments

                    HIGH        high
                    LOW         low
                    BOTH        both

               If you are loading a module using /ONLY:HIGH or /ONLY:LOW,
               it cannot contain chained fixups that cross segments.

               /ONLY and /SEGMENT are incompatible switches.

   EXAMPLES    @LINK<RET>
               */ONLY:HIGH MOD1,MOD2<RET>
               *MOD3/ONLY:BOTH<RET>
               *

               Loads high segment for MOD1 and MOD2; loads both  segments
               for MOD3.

   RELATED     /SEGMENT
   SWITCHES


























                                    3-58
                                 FIELD TEST


                                  /OPTION

   FORMAT      /OPTION:name

   FUNCTION    Reads the  SWITCH.INI  file  to  determine  the  specified
               switch   defaults   for   LINK.    /NOOPTION  ignores  the
               SWITCH.INI file.

               A SWITCH.INI contains switches for LINK to use, and allows
               you   to  override  system  defaults.   For  example,  the
               following line  when  placed  in  SWITCH.INI  changes  the
               default for input files from DSK:  to MYSTR:.

               LINK/DEFAULT:INPUT MYSTR:

               The  name  argument  specifies  which  line  to  read   in
               SWITCH.INI file.  For example,

               /OPTION:LINK

               reads the LINK line in the SWITCH.INI file.

   EXAMPLES:   @LINK<RET>
               */OPTION:LINK<RET>
               *INPUT<RET>
               *




























                                    3-59
                                 FIELD TEST


                                /OTSEGMENT

   FORMAT      /OTSEGMENT:keyword

   FUNCTION    Specifies the time and manner of loading  the  object-time
               system.   An object-time system is a collection of modules
               that is called by compiled code for a particular  language
               in  order to perform various utility functions such as I/O
               and trap-handling.  For example, FOROTS is the object-time
               system  for  FORTRAN.  For more information on object-time
               systems for the language  you  are  using,  refer  to  the
               appropriate language manual.

                    Keyword      Description

                    DEFAULT      Suspends  the  effect  of   a   previous
                                 /OTSEGMENT:SHARABLE                   or
                                 /OTSEGMENT:NONSHARABLE switch.

                    NONSHARABLE  Loads the object-time  system  into  the
                                 executable  program  at load time.  Both
                                 the user  program  and  the  object-time
                                 system  may  have  code in both the high
                                 and low segments.

                    SHARABLE     Binds   the   object-time   system    at
                                 execution  time.  The user program is in
                                 the  low  segment  and  the  object-time
                                 system is in the high segment.

               LINK's default action is to bind the object-time system at
               execution  time, except in the following cases.  If any of
               the following  cases  occur,  a  non-sharable  object-time
               system is loaded as part of the program.

                o  You specify /OTSEGMENT:NONSHARABLE.

                o  You have loaded any code into the high segment.

                o  You have specified /SYMSEG:HIGH.

                o  Your  low  segment  is  too  big  for   the   sharable
                   object-time systems to fit, and your program is loaded
                   in section 0.

   EXAMPLES    @LINK<RET>
               *MYPROG/SYSLIB/OTSEGMENT:NONSHAR<RET>
               *

               Loads a non-sharable copy of  the  object-time  system  as
               part of your program.



                                    3-60
                                 FIELD TEST


   RELATED     /SEGMENT
   SWITCHES    




















































                                    3-61
                                 FIELD TEST


                                 /OVERLAY

   FORMAT      /OVERLAY:(keyword,...,keyword)

   FUNCTION    Initiates construction of an  overlay  structure.   For  a
               discussion of overlay structures, see Chapter 5.

               You can append the /OVERLAY switch to a file specification
               in the form:

                    filespec/OVERLAY:(keyword,...keyword)

               The keywords and their meanings  are  listed  below.   The
               default settings are shown in bold

                    Keyword           Description

                    ABSOLUTE          Specifies that links are absolute.

                                      This is the default situation  when
                                      overlays  are  loaded.  The inverse
                                      situation      is      to       use
                                      /OVERLAY:RELOCATABLE.   Relocatable
                                      overlays are described  in  Chapter
                                      5.

                    LOGFILE           Outputs runtime overlay messages to
                                      your terminal.

                    NOLOGFILE         Suppresses   output   of    runtime
                                      overlay messages.

                    NOWARNING         Suppresses     overlay      warning
                                      messages.

                    RELOCATABLE       Specifies    that     links     are
                                      relocatable.

                    TREE              Specifies that the  overlay  has  a
                                      tree structure.

                    WARNING           Outputs overlay warning messages to
                                      user terminal.

                    WRITABLE          Specifies  that   the   links   are
                                      writable.   Refer  to Chapter 5 for
                                      more information.

   EXAMPLES    @LINK<RET>
               */OVERLAY:(TREE,LOGFILE)

               Specifies that an overlay is to be constructed,  and  that


                                    3-62
                                 FIELD TEST


               runtime messages are to be printed on the terminal.

   OPTIONAL    You can omit the parentheses if only one keyword is given.
   NOTATIONS   

   RELATED     /LINK, /NODE, /PLOT
   SWITCHES















































                                    3-63
                                 FIELD TEST


                                /PATCHSIZE

   FORMAT      /PATCHSIZE:n

               n is a positive decimal integer.

   FUNCTION    Allocates n words of storage to precede the symbol  table.
               The allocated storage is in the same segment (high or low)
               as the symbol table.  The default is /PATCHSIZE:64.

               The storage allocated is available  for  patching  or  for
               defining  new  symbols  with DDT, and is identified by the
               global symbol "PAT.."

   EXAMPLES    @LINK<RET>
               */SYMSEG:HIGH/PATCHSIZE:200<RET>
               *

               Loads  the  symbol  table  in  the  high   segment   after
               allocating  200  words  between the last loaded module and
               the symbol table.

   OPTIONAL    You can specify the patchsize in octal.
   NOTATIONS

   RELATED     /SYMSEG
   SWITCHES    



























                                    3-64
                                 FIELD TEST


                                   /PLOT

   FORMAT      filespec/PLOT

   FUNCTION    Directs LINK to output a  tree  diagram  of  your  overlay
               structure.   You  can  have  the  diagram  formatted for a
               plotter (by default) or for a line printer (by giving  the
               device as LPT:).

               Each box in the diagram shows a link number, its name  (if
               you  gave one with the /LINK switch), and its relationship
               to other links (as defined by your commands).

               The /PLOT switch cannot precede the /OVERLAY switch.

   EXAMPLES    @LINK<RET>
               *OVLPRO/OVERLAY:(TREE,LOGFILE)<RET>
               *LPT:OVLPRO/PLOT<RET>
               *

               requests a tree diagram for the overlay.  The  diagram  is
               formatted for the line printer because LPT:  is specified.

   OPTIONAL    LINK  has  default  settings  for  the size of the overlay
   NOTATIONS   diagram and the increment  for  drawing  lines.   You  can
               override these by giving the /PLOT switch in the form:

               filespec/PLOT:(LEAVES:value,INCHES:value,STEPS:value)

               where the values for each parameter define:

                  INCHES    Width of diagram in inches.  The defaults are
                            INCHES:29  for plotter and INCHES:12 for line
                            printer.

                  LEAVES    Number of links without successors  that  can
                            appear   in   one   row.   The  defaults  are
                            LEAVES:16 for plotter and LEAVES:8  for  line
                            printer.

                  STEPS     Increments per inch for drawing  lines.   The
                            defaults   are   STEPS:100  for  plotter  and
                            STEPS:20 for line printer.

               For line printer  diagrams,  you  cannot  give  INCHES  or
               LEAVES  different  from the defaults.  The STEPS parameter
               should be between 10 and 25.

               For plotter diagrams, you should give INCHES and LEAVES in
               a  ratio  of  about  2  to  1.  For example, INCHES:40 and
               LEAVES:20.



                                    3-65
                                 FIELD TEST


               If  LINK  cannot  design  the  diagram  on  one  page,  it
               automatically designs subtrees for diagrams on more pages.

   RELATED     /LINK, /NODE, /OVERLAY
   SWITCHES    

















































                                    3-66
                                 FIELD TEST


                                  /PLTTYP

   FORMAT      /PLTTYP:keyword

   FUNCTION    Specifies the type of plot file to  be  generated  by  the
               /PLOT switch.

   KEYWORDS    DEFAULT  Generate output for a printer only if the  device
                        is a printer or terminal.

               PLOTTER  Generate output for a plotter.

               PRINTER  Generate output for a printer.

   EXAMPLES    @LINK

               *OVLPRO/OVERLAY
               *OVLPRO/PLOT/PLTTYP:PRINTER

               Causes all output from the /PLOT  switch  to  be  in  line
               printer format.

   RELATED     /PLOT
   SWITCHES






























                                    3-67
                                 FIELD TEST


                                 /PSCOMMON

   FORMAT      /PSCOMMON:psect:common

   FUNCTION    Specifies where LINK  is  to  load  COMMON  blocks.   This
               switch causes the FORTRAN common specified by the argument
               common to be  loaded  into  the  PSECT  specified  in  the
               argument  psect.   Use the /PSCOMMON switch before loading
               the specified common and  before  declaring  the  common's
               size with the /COMMON switch.

               /PSCOMMON only affects  common  blocks  defined  with  the
               /COMMON  switch.   If the common block is created by a REL
               block, /PSCOMMON is ignored, and the  PSECT  specified  by
               the REL file is used.

   EXAMPLES    In the following example, /SET defines the  SECTA  PSECT's
               origin,  /PSCOMMON  specifies  that  SECTA  is loaded into
               COMABC, and /COMMON defines the common size.

               @LINK<RET>
               */SET:SECTA:3000000
               */PSCOMMON:SECTA:COMABC
               */COMMON:COMABC:10000
               *PROG
               *

   RELATED     /COMMON
   SWITCHES

























                                    3-68
                                 FIELD TEST


                                 /PVBLOCK

   FORMAT      /PVBLOCK:keyword

   FUNCTION    Requests a PDV (Program Data Vector) from LINK  and  gives
               you control over where the vector goes.

                                          NOTE

                   PDVs are useful only with TOPS-20  Version  5  and
                   later  monitors.   Earlier  monitors  ignore PDVs.
                   Refer to Chapter  7  for  more  information  about
                   PDVs.

                    Keyword           Description

                    DEFAULT           disables the previous /PVBLOCK:HIGH
                                      or  /PVBLOCK:LOW,  and restores the
                                      default.

                                      LINK supplies a PDV by default:

                                       o  for  an   extended   addressing
                                          program,

                                       o  if /PVDATA is specified

                                       o  if /NOJOBDAT is specified.

                                       o  if a PSECT's start  address  is
                                          below 140.

                                      The default PDV is  placed  at  the
                                      end  of  the  low  segment even for
                                      programs that use PSECTs.

                    HIGH              places the PDV at the  end  of  the
                                      high segment.

                    LOW               places the PDV at the  end  of  the
                                      low segment.

                    NONE              prevents loading of the PDV.

                    PSECT:name        places the PDV at the  end  of  the
                                      named PSECT.

   EXAMPLES    In the following example, PVTEST is loaded and  a  PDV  is
               requested.   The  PDV  is  placed  at  the  end of the low
               segment as indicated by the LOW keyword.

               @LINK<RET>


                                    3-69
                                 FIELD TEST


               *PVTEST<RET>
               */PVBLOCK:LOW/GO<RET>

               Next, the TOPS-20 INFORMATION VERSION command is  used  to
               display the program and PDV name.

               @INFO VERSION<RET>
                      .
                      .
                      .
               Program is PVBLCK
               PDVs: Program name PVTEST, version 
               @

   OPTIONAL    If you specify  /PVBLOCK  with no keyword,  DEFAULT is the
   NOTATION    default.

   RELATED     /PVDATA, /NOJOBDAT
   SWITCHES



































                                    3-70
                                 FIELD TEST


                                  /PVDATA

   FORMAT      /PVDATA:keyword:value

   FUNCTION    Changes the contents of a PDV block.  The  /PVDATA  switch
               also  allocates storage for the PDV.  If the storage to be
               allocated conflicts with any PSECT, LINK issues a  message
               with  the severity level of 16, and does not write the PDV
               information into the executable program or  sharable  save
               (EXE)  file.   Refer  to Chapter 7 for more information on
               PDVs.

                                          NOTE

                   PDVs are useful only with TOPS-20  Version  5  and
                   later  monitors.   Earlier  monitors  ignore PDVs.
                   Refer to Chapter  7  for  more  information  about
                   PDVs.

                    Keyword           Description

                    NAME              is  an  optionally   quoted   ASCII
                                      string that identifies the PDV.

                                      This string  is  not  converted  to
                                      uppercase.  If you do not quote the
                                      program  name,  you  can  use  only
                                      alphanumerics  and  the period (.),
                                      dollar sign ($), and  percent  sign
                                      (%)  characters  to specify program
                                      name.

                    VERSION           is a hash sign (#) followed  by  an
                                      octal  value, a version number that
                                      starts with a number, or  a  global
                                      symbol.

                    MEMORY            is the address of the user supplied
                                      memory   map   in   octal,   or   a
                                      previously  defined  global  symbol
                                      that contains the address of a user
                                      supplied  memory  map.   The   user
                                      supplied  memory map suppresses the
                                      map generated by LINK.

                    PROGRAM           is     the     address     of     a
                                      program-specific   data   block  in
                                      octal  value,   or   a   previously
                                      defined global symbol that contains
                                      the address of  a  program-specific
                                      data block.



                                    3-71
                                 FIELD TEST


                    CBLOCK            is     the     address     of     a
                                      customer-defined block in octal, or
                                      a previously defined global  symbol
                                      that  contains  the  address  of  a
                                      customer-defined block.

                    EXPORT            is  the  address  of  a  block   of
                                      information defined by a program in
                                      octal,  or  a  previously   defined
                                      global  symbol  that  contains  the
                                      address of a block  of  information
                                      defined by a program.

   EXAMPLES    In the following example, a PDV name  and  version  number
               are  defined.   /PVDATA:NAME:T.S$T%  defines the T.S$T% as
               the PDV name, and /PVDATA:VERSION:1A(3) defines 1.1(3)  as
               the version number.

               @LINK<RET>
               */PVDATA:NAME:T.S$T%<RET>
               */PVDATA:VERSION:1A(3)<RET>
               *PVTEST/GO<RET>

               Next, the TOPS-20 INFORMATION VERSION command is  used  to
               display the PDV name and version.

               @INFO VERSION<RET>
                      .
                      .
                      .
               Program is PVBLCK
               PDVs: Program name T.S$T%, version 1.1(3)
               @


               The next example also specifies a PDV  name  and  version,
               but in a different format.

               @LINK<RET>
               */PVDATA:NAME:"TST@ "<RET>
               */PVDATA:VERSION: 101000003<RET>
               *PVTEST/GO<RET>

               @INFO VERSION<RET>
                      .
                      .
                      .
               Program is PVBLCK
               PDVs: Program name TST@ , version 1.1(3)
               @

   RELATED     /PVBLOCK


                                    3-72
                                 FIELD TEST


   SWITCHES





















































                                    3-73
                                 FIELD TEST


                                 /REDIRECT


   FORMAT      /REDIRECT:Lowpsect:Highpsect

   FUNCTION    Loads two-segmented formatted  REL  files  as  part  of  a
               program  using  PSECTs.  The argument Lowpsect is the name
               of the PSECT to receive the low segment code and Highpsect
               is the name of the PSECT to receive the high segment code.

               You must redirect both segments, you cannot redirect  just
               the high or the low segment.

   EXAMPLES    The  following  example  loads   a   two-segment   program
               (TWOPRT),  and  displays  the low- and high-segment values
               using /COUNTERS.

               @LINK<RET>
               *TWOPRT<RET>
               */COUNTERS<RET>
               [LNKRLC   Reloc. ctr.    initial value current value limit
               value
                    .LOW.          0     1642  1000000
                    .HIGH.         400000  400753  1000000]
               *

               Next, PSECT origins are set for PSHI and PSLO,  .LOW.   is
               redirected into PSLO, .HIGH.  is redirected into PSHI, and
               /COUNTERS is used to display PSHI and PSLO values.

               @LINK<RET>
               */SET:PSHI:400010<RET>
               */SET:PSLO:3500<RET>
               */REDIRECT:PSLO:PSHI<RET>
               *TWOSEG<RET>
               */COUNTERS<RET>
               [LNKRLC   Reloc. ctr.    initial value current value limit
               value
                    PSHI      400010     400753  1000000
                    PSLO      3500      5202  1000000]














                                    3-74
                                 FIELD TEST


                                 /REQUEST

   FORMAT      /REQUEST

   FUNCTION    Displays  external  global  symbol   references   on   the
               terminal.   Use  /REQUEST  to determine if a module uses a
               global symbol that is loaded in another module.

               If  you  use  /REQUEST  to  get  the  names  of   external
               references, you can then either delete the references with
               the /NOREQUEST switch, or load the referenced modules.

   EXAMPLES    @LINK<RET>
               */REQUEST<RET>
               [LNKRER  REQUEST EXTERNAL REFERENCES]
                    ROUTN.
                    SQRT.
               */NOREQUEST:ROUTN.<RET>
               */SEARCH LIB1<RET>
               *

               Obtains the external references ROUTN.  and SQRT.; deletes
               the  request  for  ROUTN.;  searches  the  file LIB1 for a
               module containing the entry point SQRT.

   RELATED     /NOREQUEST
   SWITCHES    



























                                    3-75
                                 FIELD TEST


                                 /REQUIRE

   FORMAT      /REQUIRE:(symbol,...,symbol)

   FUNCTION    Generates global requests for the specified symbols.  LINK
               uses  these  symbols  as  library  search  symbols  (entry
               points).

               /REQUIRE differs from /INCLUDE in that /INCLUDE requests a
               module  by  name,  while  /REQUIRE  requests an entry name
               symbol.  Thus you can use /REQUIRE to specify  a  function
               (for  example,  SQRT.)  even if you do not know the module
               name.

               You can use /REQUIRE to load a module into an overlay link
               common to all overlay links that reference the module.

               Note that the global requests generated  by  the  /REQUIRE
               switch  do  not use the standard FORTRAN calling sequence,
               and are therefore not visible to the /REQUEST switch.

   EXAMPLES    @LINK<RET>
               */UNDEFINED<RET>
               [LNKUGS  NO UNDEFINED GLOBAL SYMBOLS]
               */REQUIRE:(ROUTN.,SQRT.)<RET>
               */UNDEFINED<RET>
               [LNKUGS  2 UNDEFINED GLOBAL SYMBOLS]
                    SQRT.      0
                    ROUTN.     0]
               *

   OPTIONAL    You can omit the parentheses if only one symbol is given.
   NOTATIONS   

   RELATED     /SEARCH, /NOSEARCH
   SWITCHES


















                                    3-76
                                 FIELD TEST


                                   /RUN

   FORMAT      /RUN:file

   FUNCTION    Directs LINK to run the program after it is loaded.   LINK
               ignores this switch if you used /EXECUTE or /DEBUG.

   EXAMPLES:   @LINK<RET>
               */RUN:MYPROG<RET>
               *MYPROG<RET>
               *











































                                    3-77
                                 FIELD TEST


                                  /RUNAME

   FORMAT      /RUNAME:name

   FUNCTION    Assigns a job name for execution of  your  program.   This
               job name is used in the SYSTAT display.


   EXAMPLES    @LINK<RET>
               */RUNAME:LNKDEV<RET>
               *PROGRM
               *

               Assigns the name LNKDEV for program  execution  regardless
               of the file names that are loaded.







































                                    3-78
                                 FIELD TEST


                                /RUNOFFSET

   FORMAT      /RUNOFFSET:n

   FUNCTION    Runs the program specified in a /RUN switch with an offset
               of  n.   If  you omit the switch the default is 0.  If you
               omit the n argument, the default is 1.

   EXAMPLES    In the following example, MACRO is run with an offset of 1
               after MCPROG is loaded.

               @LINK<RET>
               *MCPROG<RET>
               */RUN:MACRO/RUNOFFSET:1/GO<RET>








































                                    3-79
                                 FIELD TEST


                                   /SAVE

   FORMAT      filespec/SAVE

   FUNCTION    Directs LINK to create a  sharable  save  file  using  the
               specified  file specification.  If you omit the file type,
               LINK uses EXE.

               To run  the  sharable  save  file  with  the  TOPS-20  RUN
               command, the file must have an EXE file type.

   EXAMPLES    @LINK<RET>
               *MYPROG<RET>
               *DSKZ:RUNPRO.EXE/SAVE/GO<RET>
               @

               Directs LINK to save  the  loaded  version  of  MYPROG  as
               RUNPRO.EXE on DSKZ:.




































                                    3-80
                                 FIELD TEST


                                  /SEARCH

   FORMAT      /SEARCH

   FUNCTION    Directs LINK to search the input files and load  only  the
               modules  whose  entry point names resolves a global symbol
               request.

               The /NOSEARCH  discontinues  library  searching  of  input
               files,  and  loads  all  the  modules  in the input files.
               Although /NOSEARCH  is  used,  LINK  continues  to  search
               system  libraries  unless  you  used  the  /NOSYSLIB,  and
               searches user libraries if you used the /USERLIB switch.

               For example, the FILE9, FILE8, and FILE7 input  files  are
               to  be  searched  as  libraries  and only the modules that
               resolve global symbols are  to  be  loaded,  but  all  the
               modules in FILE1, FILE2, and FILE3 are to be loaded.

               @LINK<RET>
               */SEARCH FILE9,FILE8,FILE7<RET>
               */NOSEARCH FILE1,FILE2,FILE3<RET>

               The /SEARCH and /NOSEARCH switches can be used as local or
               global  switches.   See  Section 3.3.3 for a discussion of
               switch placement.

               Note that search requests in .TEXT blocks may be processed
               in  the  reverse  order of entered /SEARCH switches.  Keep
               this in mind when specifying the order  in  which  modules
               are to be searched.  See Block types greater than 3777 for
               more information.

   EXAMPLES    @LINK<RET>
               */SEARCH MODA,MODB/NOSEARCH,MODC,/NOSEARCH MODD<RET>
               *

               Searches MODA, loads MODB, searches MODC, and loads MODD.

               This examples illustrates the use of /SEARCH and /NOSEARCH
               as  local  and  global  switches.  The /SEARCH switch is a
               global switch because it is entered  after  the  asterisk,
               and  applies to MODA and MOBC.  The first /NOSEARCH switch
               is a local switch because it is appended to MODB.   Notice
               its  placement  before  the  comma.   The second /NOSEARCH
               switch is a global switch and applies to the remainder  of
               the line.

   OPTIONAL    You can abbreviate /SEARCH to /S.
   NOTATIONS

   RELATED     /NOSEARCH


                                    3-81
                                 FIELD TEST


   SWITCHES    





















































                                    3-82
                                 FIELD TEST


                                 /SEGMENT

   FORMAT      /SEGMENT:keyword

   FUNCTION    Specifies whether the high segment or the low segment of a
               two-segment  program is to be used for loading the modules
               that follow.  If /SEGMENT is  omitted,  LINK  follows  the
               specifications in the program.

               LINK does  not  follow  the  programs  specifications  for
               FORTRAN  object code, but loads both segments into the low
               segment.  LINK does not load FORTRAN object code into  the
               low segment if:

                o  You used the /OTSEGMENT:NONSHARABLE switch.

                o  You used the /SEGMENT:HIGH switch to  load  code  into
                   the high segment.

                o  You used the /SEGMENT:DEFAULT switch to load code into
                   both segments.

                o  A high segment already exists.

               The keywords for the /SEGMENT switch are:

                    Keyword           Description

                    DEFAULT           Suspends effect of /SEGMENT:LOW  or
                                      /SEGMENT:HIGH.

                    HIGH              Loads into high segment.

                    LOW               Loads into low segment.

                    NONE              Same as DEFAULT.

               If the switch is appended  to  a  file  specification,  it
               applies only to that file; if it is not appended to a file
               specification, it applies to all following  files  in  the
               same command string.

               /SEGMENT and /ONLY are incompatible.

   EXAMPLES    @LINK<RET>
               */SEGMENT:LOW MOD1,MOD2,/SEGMENT:HIGH MOD3<RET>
               *

               Loads MOD1 and MOD2 into the low segment; loads MOD3  into
               the high segment.

   RELATED     /OTSEGMENT


                                    3-83
                                 FIELD TEST


   SWITCHES    





















































                                    3-84
                                 FIELD TEST


                                   /SET

   FORMAT      /SET:name:address

               name is .HIGH., .LOW., or a PSECT name.

               address is a thirty-bit octal address or a defined symbol.

   FUNCTION    Sets the origin of a PSECT, or sets the .HIGH.   or  .LOW.
               relocation counter.

               For setting the origin of a PSECT, name is the name of the
               PSECT,  and address is a virtual memory address.  The /SET
               switch must precede the modules that make up the specified
               PSECT.   The  /SET  switch  is not needed if the REL files
               already contain the PSECT origin information.

   EXAMPLES    @LINK<RET>
               */SET:MEMLOCA:200000<RET>
               *

               Specifies that the PSECT named MEMLOCA  is  to  be  loaded
               with an origin of address 200000.

               */SET:.HIGH.:400000<RET>
               *

               Sets the high segment relocation counter  .HIGH.   to  the
               address  400000.   Note  that saying /SET:.HIGH.  causes a
               high segment to appear and a vestigial JOBDAT area  to  be
               built.

   RELATED     /COUNTERS, /LIMIT
   SWITCHES




















                                    3-85
                                 FIELD TEST


                                 /SEVERITY

   FORMAT      /SEVERITY:n

               n is a positive decimal integer.

   FUNCTION    Specifies that errors of severity level  greater  than  or
               equal to n terminate the load, where n is a decimal number
               between 0  and  31  inclusive.   Level  31  errors  always
               terminate the load.

               The defaults are /SEVERITY:28 for  timesharing  jobs,  and
               /SEVERITY:16 for batch jobs.  See Appendix B for a list of
               severity codes.

   EXAMPLES    @LINK<RET>
               */SEVERITY:29<RET>
               *

               Specifies that level 29 errors and above are fatal.


































                                    3-86
                                 FIELD TEST


                                  /SPACE

   FORMAT      /SPACE:n

               n is a positive decimal integer.

   FUNCTION    Specifies that  n  words  of  memory  follow  the  current
               overlay  link  at  execution time.  This memory allocation
               does not increase the size of the  overlay  file,  but  it
               does increase the size of the program at run time.

               The /SPACE switch is used to allocate space for use by the
               object  time  system.   The  OTS  uses  this space for I/O
               buffers, and as scratch space in FORTRAN and heap space in
               ALGOL.

               You should place the /SPACE switch before the first  /LINK
               switch,  to  ensure  allocation  for the root link.  It is
               possible to allocate space after one or more overlays  are
               linked.   This  might  be useful if an overlay has unusual
               storage requirements:  such as buffers for a file which is
               open only while that overlay is resident, or a large local
               matrix.

               To  allocate  space  between  overlays,  use  /SPACE  when
               loading  the  overlay  that use this file or matrix.  LINK
               allows one /SPACE switch for the root node,  and  one  for
               each overlay.

               The default amount of memory  allocated,  if  you  do  not
               specify /SPACE, is 2000 for the root link and 0 (zero) for
               other overlay links.

               If the space allocated  for  a  relocatable  link  is  too
               small,  the overlay handler can relocate it.  If the space
               allocated for an absolute link is too small, a fatal error
               occurs.

   EXAMPLES    @LINK<RET>
               */OVERLAY<RET>
               *TEST/SPACE:90/LINK:MAIN<RET>

               Allocates 90 words of memory to follow the root  link  for
               the program.  See Chapter 5 for a discussion on overlay.

   OPTIONAL    You can specify the number of words in octal.
   NOTATIONS







                                    3-87
                                 FIELD TEST


                                  /START

   FORMAT      /START:symbol
               /START:address
               /START

               symbol is thirty-bit octal address or a symbol.

   FUNCTION    Specifies the start address for the  loaded  program,  and
               prevents replacement by any start addresses found in later
               modules.

               The /START switch without an argument disable a previously
               given /NOSTART switch.

               LINK starts a program using a TOPS-10 style  entry  vector
               if the entry length vector is zero.

               LINK starts a program using a TOPS-20 style entry vector:

                o  if the  program  contains  nonzero  sections  and  the
                   length of the entry vector is not specified

                o  if the length of the entry vector is 1

                o  if /NOJOBDAT equals 1

               See the TOPS-20 Monitor Calls Reference  Manual  for  more
               information on entry vectors.

   EXAMPLES    @LINK<RET>
               *MAIN1/START:ENTRY1,MAIN2,MAIN3<RET>
               *

               Defines the start address as ENTRY1 in MAIN1, and prevents
               replacement  of  this start address by any others found in
               MAIN2 or MAIN3.

   OPTIONAL    You can specify the start address in octal.
   NOTATIONS   

   RELATED     /NOSTART
   SWITCHES    











                                    3-88
                                 FIELD TEST


                                 /SUPPRESS

   FORMAT      /SUPPRESS:symbol

               Where symbol is a previously defined global symbol.

   FUNCTION    Suppresses a previously defined  global  symbol.   If  the
               symbol  is  unknown,  this switch has no effect.  Use this
               switch if the same global symbol is defined in two modules
               and you wish to suppress one of the definitions.

               LINK suppresses a defined global  symbol  by  setting  its
               definition  to undefined in the global symbol table.  LINK
               does not remove the  symbol  definition  from  the  symbol
               table.   As a result, the symbol table built for debugging
               contains both the old and new values of the symbol.

               Since LINK sets the symbol  to  undefined  in  the  symbol
               table,  it expects that a subsequent module will be loaded
               that contains a global definition for the symbol.  If  the
               symbol  is  not  defined  later, LINK issues the Undefined
               Global Symbol (LNKUGS) error.

   EXAMPLES    In the following example, the ENTPTR  symbol  is  used  in
               both  the TEST and TEST2 programs.  First, TEST is loaded,
               and the value of ENTPTR is show using the /VALUE switch.

               @LINK<RET>
               *TEST<RET>
               */VALUE:ENTPTR<RET>
               [LNKVAL   Symbol ENTPTR 140 defined]

               Next, ENTPTR's value is suppressed using /SUPPRESS and its
               current  value  is  shown.   Note  that  the  value is now
               undefined.

               */SUPPRESS:ENTPTR<RET>
               */VALUE:ENTPTR<RET>
               [LNKVAL   Symbol ENTPTR 0 undefined]

               Finally TEST2 is loaded and the value is shown again.

               *TEST2<RET>
               */VALUE:ENTPTR<RET>
               [LNKVAL   Symbol ENTPTR 200 defined]

               In the next example, TEST and TEST2 are loaded, but ENTPTR
               is  not suppressed after TEST is loaded.  In this example,
               LINK issues the Multiply-defined global symbol warning.

               @LINK<RET>
               TEST<RET>


                                    3-89
                                 FIELD TEST


               TEST2<RET>
               %LNKMDS   Multiply-defined global symbol ENTPTR
                    Detected in module .MAIN from file TEST2.REL.1
                    Defined value = 140, this value = 200
               *

















































                                    3-90
                                 FIELD TEST


                                  /SYFILE

   FORMAT      filespec/SYFILE:keyword

   FUNCTION    Requests LINK to output a symbol file to  the  given  file
               specification,  and  sets  the /SYMSEG:DEFAULT switch.  If
               you previously specified /NOSYM, the /SYFILE switch has no
               effect.

               The symbol file contains global symbols  sorted  for  DDT,
               and  has a SYM file type.  If you used the /LOCALS switch,
               this file also contains local symbols, module  names,  and
               module lengths.

                    Keyword           Description

                    ALGOL             Requests symbols in ALGOL's format.

                    RADIX-50          Requests   symbols   in    Radix-50
                                      format.

                    TRIPLET           Requests symbols in triplet format.

               See Chapter 4 for symbol table formats.

   EXAMPLES    @LINK<RET>
               *SYMBOL/SYFILE<RET>
               *

               Creates a symbol file called SYMBOL with  the  symbols  in
               Radix-50 format and a file type of .SYM.

   OPTIONAL    If you omit the keyword, Radix-50 is assumed.
   NOTATIONS   




















                                    3-91
                                 FIELD TEST


                                  /SYMSEG

   FORMAT      /SYMSEG:keyword

   FUNCTION    Allows you to specify where the  symbol  table  is  to  be
               placed.

                    Keyword           Description

                    DEFAULT           Places the symbol table in the  low
                                      segment,   except   for   overlayed
                                      programs, in which case symbols are
                                      not loaded by default.

                    HIGH              Places the symbol table in the high
                                      segment.

                    LOW               Places the symbol table in the  low
                                      segment.

                    NONE              Prevents  loading  of  the   symbol
                                      table.

                    PSECT:name        Places the symbol table at the  end
                                      of  the  PSECT after allocating the
                                      patch space.

   EXAMPLES    @LINK<RET>
               */SYMSEG:LOW<RET>
               *

               Places the symbol table in the program low segment.

   RELATED     /LOCALS, /NOLOCALS
   SWITCHES



















                                    3-92
                                 FIELD TEST


                                  /SYSLIB

   FORMAT      /SYSLIB:keyword

   FUNCTION    Forces  searching  of  one  or   more   system   libraries
               immediately  after  you enter a carriage-return ending the
               command.

               LINK automatically searches a system library, by  default,
               if code from the corresponding translator has been loaded.
               This search is performed after  all  the  modules  of  the
               program  are  loaded.   /SYSLIB forces this search to take
               place  immediately  rather  than  after  all  the  program
               modules are loaded.

               After you specify a library with /SYSLIB, the library  you
               specified  is searched every time you load a module, until
               you use /NOSYSLIB to end searching of that library.

               The keywords and the libraries  they  specify  are  listed
               below.    Keywords   shown   in  bold  indicate  libraries
               supported by DIGITAL.

                    Keyword           Library

                    ANY               all
                    ALGOL             ALGLIB
                    BCPL              BCPLIB
                    COBOL             LIBOL or C74LIB
                    FORTRAN           FORLIB
                    NELIAC            LIBNEL
                    PASCAL            PASLIB
                    SAIL              SAILIB
                    SIMULA            SIMLIB

   EXAMPLES    @LINK<RET>
               *MAIN/SYSLIB:COBOL<RET>
               *SUB1<RET>
               *SUB2/NOSYSLIB<RET>
               *

   OPTIONAL    You  can omit the keyword.  LINK searches all libraries
   NOTATIONS   for which corresponding code has been loaded.

   RELATED     /NOSYSLIB
   SWITCHES    








                                    3-93
                                 FIELD TEST


                                   /TEST

   FORMAT      /TEST:keyword

   FUNCTION    Loads the  debugger  indicated  by  keyword.   Unlike  the
               /DEBUG  switch,  /TEST  causes  execution  to begin in the
               loaded program (not in the debugging module).  This switch
               is  useful  if you expect the program to run successfully,
               but want the debugger available in case  the  program  has
               errors.

               The /TEST switch turns  on  the  /LOCALS  switch  for  the
               remainder of the load.  You can override this by using the
               /NOLOCAL  switch,  but  the  override  lasts  only  during
               processing of the current command.

               Local symbols for the debugging module  itself  are  never
               loaded.

               The keywords and the programs they load are listed  below.
               Only those shown in bold are supported by DIGITAL.

                    Keyword           Debugger

                    ALGDDT            ALGDDT
                    ALGOL             ALGDDT
                    COBDDT            COBDDT
                    COBOL             COBDDT
                    DDT               DDT
                    FAIL              SDDT (SAIL debugger)
                    FORDDT            FORDDT
                    FORTRAN           FORDDT
                    MACRO             DDT
                    PASCAL            PASDDT
                    PASDDT            PASDDT
                    SAIL              SDDT (SAIL debugger)
                    SDDT              SDDT (SAIL debugger)
                    SIMDDT            SIMDDT
                    SIMULA            SIMDDT

   EXAMPLES    @LINK<RET>
               *MYPROG/TEST:FORTRAN<RET>
               *

               Loads MYPROG and FORDDT.

   OPTIONAL    If you give no keyword with /TEST,  the default  is either
   NOTATIONS   DDT or the debugger specified by the /DDEBUG switch.

               You can abbreviate /TEST to /T.

   RELATED     /DDEBUG, /DEBUG


                                    3-94
                                 FIELD TEST


   SWITCHES    





















































                                    3-95
                                 FIELD TEST


                                /UNDEFINED

   FORMAT      /UNDEFINED

   FUNCTION    Displays undefined global symbols  on  the  terminal.   An
               undefined  global  symbol  is  one  that  LINK has not yet
               resolved.  You  can  use  /UNDEFINED  to  get  a  list  of
               undefined  symbols,  and then define them with the /DEFINE
               switch.

   EXAMPLES    @LINK<RET>
               */UNDEFINED<RET>
               [LNKUGS  2 undefined global symbols]
                    ALPHA   400123
                    IOTA    402017
               */DEFINE:(ALPHA:591,IOTA:1)<RET>
               *

               Displays two undefined global symbols  (ALPHA  and  IOTA),
               and  defines a decimal value of 591 to ALPHA and a decimal
               value of 1 to IOTA.

   OPTIONAL    You can abbreviate /UNDEFINE to /U.
   NOTATIONS

   RELATED     /DEFINE, /VALUE
   SWITCHES    



























                                    3-96
                                 FIELD TEST


                                   /UPTO

   FORMAT      /UPTO:address

               address is a thirty-bit octal address or a defined symbol.

   FUNCTION    Sets an upper limit to which the symbol table can expand.

   EXAMPLES    @LINK<RET>
               */UPTO:550000<RET>
               *FORPRO<RET>

               Defines a 550,000  upper  limit  for  the  FORTRAN  symbol
               table.   This switch overrides the default upper bound for
               the FORTOS symbol table.  This might  be  used  if  FOROTS
               begins above 400000.

   RELATED     /SYMSEG
   SWITCH



































                                    3-97
                                 FIELD TEST


                                 /USERLIB

   FORMAT      filespec/USERLIB:(keyword,...,keyword)

   FUNCTION    Directs LINK to search the user library given in the  file
               specification  before  searching  system  libraries.   The
               keyword indicates that the given library is to be searched
               only if code from the corresponding translator was loaded.

               Keywords and their meanings are given below.   Only  those
               shown in bold are supported by DIGITAL.

                    Keyword           Library

                    ALGOL             ALGOL
                    ANY               This library
                    BCPL              BCPL
                    COBOL             COBOL
                    FORTRAN           FORTRAN
                    NELIAC            NELIAC
                    PASCAL            PASCAL
                    SAIL              SAIL
                    SIMULA            SIMULA

   EXAMPLES    @LINK<RET>
               *MYFORL/USERLIB:FORTRAN<RET>
               *

               Directs LINK to search the  user  library  MYFORL  (before
               searching FORLIB) if any FORTRAN-compiled code is loaded.

   OPTIONAL    You can omit the parentheses if only one keyword is given.
   NOTATIONS   

   RELATED     /NOUSERLIB, /SYSLIB
   SWITCHES    


















                                    3-98
                                 FIELD TEST


                                  /VALUE

   FORMAT      /VALUE:(symbol,symbol,...)

   FUNCTION    Displays the values of each specified global symbol on the
               terminal.   LINK  issues  the  LNKVAL  message, giving the
               symbol, the symbol's current value, and  symbol's  status.
               Status is one of the following:

                    defined           The symbol and its value are known.
                    undefined         The symbol is  known,  but  has  no
                                      value.
                    common            The symbol is known and is  defined
                                      as COMMON.
                    unknown           The symbol is  not  in  the  symbol
                                      table.

   EXAMPLES    @LINK<RET>
               *TEST<RET>
               *SPEXP<RET>
               *SPEX2<RET>
               */VALUE:(SPEX2,DPEXP,X2,X)<RET>
               [LNKVAL  SPEX2    460    DEFINED]
               [LNKVAL  DPEXP    221    UNDEFINED]
               [LNKVAL  X2       324    COMMON, LENGTH 1 (DECIMAL)]
               [LNKVAL  X        UNKNOWN]
               *

   OPTIONAL    You can omit the parentheses  if  only  one
   NOTATIONS   symbol is given.
























                                    3-99
                                 FIELD TEST


                                /VERBOSITY

   FORMAT      /VERBOSITY:keyword

   FUNCTION    Specifies the length of LINK  messages.   This  switch  is
               similar  to  /MESSAGE.   Both  switches  determine message
               length, but use different keywords and output.

                    Keyword           Description

                    SHORT             Output only the 6-letter code.

                    MEDIUM            Output the 6-letter  code  and  the
                                      medium-length  message (usually one
                                      line or less).

                    LONG              Output  the  6-letter   code,   the
                                      medium-length message, and the long
                                      message (usually several lines).

               For a few messages no long message exists; in these  cases
               the LONG specification is ignored.

   EXAMPLES    In  all  the  examples  that  follow  an  incorrect   file
               specification  (ABC:WRONG)  is  used.   In  the  following
               example, only  the  6-letter  code  and  instructions  for
               correcting the error is returned.

               @LINK<RET>
               */VERBOSITY:SHORT
               *ABC:WRONG<RET>
               %LNKNED
               [    Please retype the incorrect parts of the file
               specification]
               *


               In the next example, a medium length message is returned.

               @LINK<RET>
               */VERBOSITY:MEDIUM<RET>
               *ABC:WRONG<RET>

               %LNKNED   Non-existent device ABC:
               [    Please retype the incorrect parts of the file specification]
               *


               In this example, a longer explanation is returned.

               @LINK<RET>
               /VERBOSITY:LONG<RET>


                                   3-100
                                 FIELD TEST


               *ABC:WRONG<RET>
               %LNKNED   Non-existent device ABC:
                    You gave a device that does  not  exist  on  this  system.
                    Correct your input files and reload.
               [    Please retype the incorrect parts of the file specification]
               *

   RELATED     /ERRORLEVEL, /MESSAGE
   SWITCHES    













































                                   3-101
                                 FIELD TEST


                                 /VERSION

   FORMAT      /VERSION:ic(j)-k

                    i = an octal number between 0 and 777 inclusive.

                    c = one or two alphabetic characters.

                    j = an octal number between 0 and 777777 inclusive.

                    k = an octal number between 0 and 7 inclusive.

   FUNCTION    Allows you to specify a version number.  /VERSION  changes
               the value of .JBVER (location 137 in JOBDAT) and .JBHVR in
               the vestigial job data area.

               If the switch is appended to an  input  specification,  or
               with  no  specification,  the version number is entered in
               .JBVER and .JBHVR (location 4 in the  vestigial  job  data
               area).

               There are four parts to the version arguments, given as i,
               c,  j,  and k above.  The first number (i) gives the major
               version  number.   The  character  (c)  gives  the   minor
               version.   The  second  number  (j) gives the edit number.
               The last number (k), which must be preceded  by  a  hyphen
               (-), shows which group last modified the file (0 = DIGITAL
               development, 1 = other DIGITAL personnel, 2-7  =  customer
               use).

   EXAMPLES    @LINK<RET>
               */VERSION:3A(461)-0<RET>
               *

               Sets the version so that the major version is 3, the minor
               version  is  A, the edit number is 461, and the last group
               to modify the file was DIGITAL development.

   OPTIONAL    You can abbreviate /VERSION to /V.
   NOTATIONS














                                   3-102
                                 FIELD TEST


   3.5  EXAMPLES USING LINK DIRECTLY

   For the following examples, the loaded program is  a  FORTRAN  program
   called MYPROG that writes the following:

        This is written by MYPROG.

   The following example shows an interactive execution  of  the  program
   using  a  LINK  command.   After  running  LINK, the command calls for
   MYPROG to be loaded.  Then the string MYLIB/USERLIB requests searching
   of  the  library  DSK:MYLIB.REL  at the end of loading.  The /NOSYSLIB
   switch prevents searching the default  system  library.   Finally  the
   /EXECUTE  switch  directs  LINK to execute the loaded program, and the
   /GO switch tells LINK that there are no more commands.

        @LINK<RET>
        *MYPROG,MYLIB/USERLIB/NOSYSLIB/EXECUTE/GO<RET>
        [LNKXCT     MYPROG execution]
        This is written by MYPROG
        CPU time 0.21   Elapsed time 1.31
        @

   The example below shows how to use LINK to load the program exactly as
   above,  except  that  the  program  is executed under the control of a
   debugger (FORDDT for FORTRAN programs):

        @LINK<RET>
        */DEBUG:FORDDT MYPROG,MYLIB/USERLIB/NOSYSLIB/GO<RET>
        [LNKDEB     FORDDT execution]

        STARTING FORTRAN DDT

        >>START<RET>
        This is written by MYPROG
        CPU time 0.17   Elapsed time 0.46
        @


















                                   3-103
























































                                    4-1











                                 CHAPTER 4

                              OUTPUT FROM LINK



   The primary output from LINK is the  executable  program  formed  from
   input modules and switches.  During its processing, LINK gives errors,
   warnings, and  informational  messages.   At  your  option,  LINK  can
   generate any of several files.



   4.1  THE EXECUTABLE PROGRAM

   The executable program that LINK generates consists mostly of data and
   machine  instructions  from  your  object  modules.  In the executable
   program, all relocatable addresses  have  been  resolved  to  absolute
   addresses, and the values of all global references have been resolved.

   You have several options for loading the  program,  depending  on  the
   purpose of the load.  Those options are:

         o  Execute the program.  To do this, include the /EXECUTE switch
            any place before the /GO switch.  LINK passes control to your
            program for execution.

         o  Execute the program under the control of a debugger.   To  do
            this,  use  the  /DEBUG  switch  before  the first input file
            specification.

         o  Execute the program and debug  it  after  execution.   To  do
            this,  use  the  /TEST and /EXECUTE switches before the first
            input file specification.  After execution, type DEBUG to the
            system to enter the debugger.

         o  Save the executable as a sharable save file or an  EXE  file.
            To do this, use the /SAVE switch.  See Section 4.2.







                                    4-1
                                 FIELD TEST


   4.2  OUTPUT FILES

   At your option, LINK can produce any of the following output files:

         o  Sharable save file.

         o  Log file.

         o  Map file.

         o  Symbol file.

         o  Plotter file (see Section 5.1).

         o  Overlay file (see Section 5.1).



   4.2.1  Sharable Save Files

   The sharable file, save file or EXE file, is a copy of  the  completed
   executable  program generated by LINK.  You can create a sharable save
   file by supplying the /SAVE switch before the /GO switch when you  are
   loading  the  program with direct commands to LINK.  The sharable save
   file retains the same file name as the source  program,  with  a  file
   type of EXE.

   Alternatively, you can type the file specification, followed by /SAVE,
   and  the  sharable save file is written to the file you specified.  If
   you load the program with the executable LOAD TOPS-20 command, you may
   then save the sharable save file by typing the TOPS-20 SAVE command.

   You can run the sharable save file later,  without  running  LINK,  by
   using  the  TOPS-20  RUN  command,  or  the  two TOPS-20 GET and START
   commands.  The following section describes the internal format of  the
   sharable save file.



   4.2.1.1  Format of Sharable  Save  Files - A  sharable  save  file  is
   divided  into two main areas:  the directory area contains information
   about the structure of the file, and the data area contains  the  data
   of the file.











                                    4-2
                                 FIELD TEST


   The following diagram illustrates the general  format  of  a  sharable
   save file:

           Directory       ========================
           Area:           !  Directory Section   !
                           !                      !
                           !                      !
                           ------------------------
                           ! Entry Vector Section !
                           ------------------------
                           !         PDV          !
                           !       Section        !
                           ------------------------
                           ! Terminating Section  !
                           ========================
           Data Area:      !    Data Section      !
                           !                      !
                           !                      !
                           !                      !
                           !                      !
                           !                      !
                           !                      !
                           !                      !
                           !                      !
                           ========================


                                    NOTE

           The PDV area is useful only with TOPS-20 version 5 and
           later  monitors.   Earlier  monitors ignore this area.
           See Chapter 7 for more information on PDVs.

   The directory area  of  the  sharable  save  file  has  four  distinct
   sections:   the  directory  section, the entry vector section, the PDV
   section, and the terminating section.  The size of the directory  area
   depends on the access characteristics of the pages in the data area of
   the save file.

   Each of the sections in the directory area begins with a  header  word
   containing  its identifier code in the left half and its length in the
   right half.  Each section is described in the following paragraphs.

   The directory section is the first of the four sections and  describes
   groups  of contiguous pages that have identical access.  The length of
   this section varies according to the number  of  groups  that  can  be
   generated from the data portion of the save file.  The more data pages
   that can be combined into a single group, the fewer  groups  required,
   and the smaller the directory section.

   The format of the directory section is as follows:



                                    4-3
                                 FIELD TEST


         0            8 9         17 18                      35       
        !=======================================================!
        !      Identifier code      !      Number of words      !
        !           1776            !   (including this word)   !
        !                           !   in directory section    !
        !=======================================================!
        !    Access    !   Page number in file, or 0 if group   !
        !     bits     !          of pages is all zero          !
        !=======================================================!
        !    Repeat    !       Page number in the process       !
        !    count     !                                        !
        !=======================================================!
                                .
                                .
                                .
        !=======================================================!
        ! Access bits  !        Page number in the file         !
        !=======================================================!
        ! Repeat count !       Page number in the process       !
        !=======================================================!

   PSECT attributes are used to  set  the  access  bits.   Refer  to  the
   description  of  Block  Type  24  in  Appendix  A.  The bits currently
   defined in the directory section are:

        B1     The process pages in this group are sharable

        B2     The process pages in this group are writable

   The remaining access bits in the directory section are zero.

   The repeat count is the number (minus 1) of consecutive pages  in  the
   group  described  by  the  word pair.  Pages are considered to be in a
   group when the following three conditions are met:

        1.  The pages are contiguous.

        2.  The pages have the same access.

        3.  The pages are allocated but not loaded.

   A group of all zero pages is indicated by a file page number of 0.

   The word pairs are repeated for each group of  pages  in  the  address
   space.

   The entry vector section follows the directory section and  points  to
   the first word of the entry vector and gives the length of the vector.


         0                        17 18                       35
        !=======================================================!


                                    4-4
                                 FIELD TEST


        !      Identifier code      !      Number of words      !
        !           1775            !   (including this word)   !
        !                           !  in entry vector section  !
        !=======================================================!
        !                         254000                        !
        !=======================================================!
        !                    Starting Address                   !
        !=======================================================!

   This format is the default.  However, if you make  special  provisions
   in  your  program,  the  format  becomes the following.  (Refer to the
   description of Block Type 7 in Appendix A and the description  of  the
   SFRKV%  JSYS in the TOPS-20 Monitor Calls Reference Manual for further
   information.)

         0                        17 18                       35
        !=======================================================!
        !      Identifier code      !      Number of words      !
        !           1775            !   (including this word)   !
        !                           !  in entry vector section  !
        !=======================================================!
        !            Number of words in entry vector            !
        !=======================================================!
        !                Address of entry vector                !
        !=======================================================!


   The data for this section is the address of the entry vector.


























                                    4-5
                                 FIELD TEST


   The PDV section may follow the entry vector section and  contains  the
   addresses  at  which the PDVs begin (PDVAs).  This section is optional
   and only appears for an extended addressing program,  if  the  program
   declared  a PDV, or if /NOJOBDAT is used causing LINK to create a PDV.
   The format of the PDV section is as follows:


         0                        17 18                       35
        !=======================================================!
        !      Identifier code      !      Number of words      !
        !           1774            !   (including this word)   !
        !                           !  in data vector section   !
        !=======================================================!
        !                Address of PDV 1                       !
        !=======================================================!
        !                Address of PDV 2                       !
        !=======================================================!
                                .
                                .
                                .
        !=======================================================!
        !                Address of PDV n                       !
        !=======================================================!


   For information on the format of a PDV, see Chapter 7.

   The terminating section, called the end  section,  always  immediately
   precedes  the  data section.  The format of the terminating section is
   the following:


        !=======================================================!
        !      Identifier code      !                           !
        !           1777            !             1             !
        !=======================================================!


   The data area follows the terminating section, beginning at  the  next
   page boundary.



   4.2.2  LOG Files

   A LOG file, .LOG, is generated if you use the /LOG switch.  LINK  then
   writes  most of its messages into the specified file.  You can control
   the kinds of messages entered in the LOG file by using  the  /LOGLEVEL
   switch.  For an example of a LOG file, see Section 5.1.





                                    4-6
                                 FIELD TEST


   4.2.3  Map files

   The map file, .MAP, is generated if you use  the  /MAP  switch.   LINK
   constructs  a  symbol map in this file.  The kinds of symbols included
   depends on your use of the /CONTENTS, /LOCALS, /NOLOCALS,  /NOINITIAL,
   and  /NOSYMBOLS  switches.   For an example of a map file, see Section
   5.1.  For a list of /MAP options, refer to Chapter 3.



   4.2.4  Symbol Files

   The symbol file, SYM file, is generated if you use the /SYFILE switch.
   This  file  contains  all  global  symbols,  module  names, and module
   lengths, and, if you used the /LOCALS switch, all local symbols.

   The  format  of  the  symbol  file  is  defined  using  /SYFILE:ALGOL,
   /SYFILE:RADIX-50, or /SYFILE:TRIPLET.

   /SYSFILE:ALGOL creates a symbol file where the first word of the table
   is  XWD  1044, count.  The remaining words are copied out of Type 1044
   REL  blocks.   If  an  ALGOL  main  program  has  been  loaded,   then
   /SYFILE:ALGOL becomes the default.

   /SYFILE:RADIX-50 creates a symbol file where the  first  word  of  the
   table  is negative.  Each symbol requires two words in the table:  the
   first is the symbol name in Radix-50 format; the second is the  symbol
   value.  This is the default if just /SYFILE is used.

   /SYFILE:TRIPLET creates internal format used by LINK.



   4.3  MESSAGES

   During its processing, LINK issues messages about what  it  is  doing,
   and  about  errors or possible errors it finds.  LINK also responds to
   query switches such as  /COUNTERS,  /ENTRY,  /MISSING,  /REQUEST,  and
   /UNDEFINED.

   Each LINK message has an assigned level and an assigned severity.  See
   Appendix B for the level and severity of each message.

   The level of a message determines whether the  message  is  output  to
   your  terminal, the log file, or both.  You can control this output by
   using the /ERRORLEVEL switch for the terminal and the /LOGLEVEL switch
   for the log file.  LINK's defaults are /ERRORLEVEL:8 and /LOGLEVEL:8.







                                    4-7
                                 FIELD TEST


   Responses to query switches  and  messages  that  require  you  to  do
   something  immediately are never output to the LOG file.  For example,
   if you use  the  /UNDEFINE  switch,  LINK  responds  with  the  LNKUGS
   message;  this  message  is  output to the terminal but not to the log
   file.

   The severity of  a  message  determines  whether  LINK  considers  the
   message  fatal  (that is, whether the job is terminated).  You can set
   the fatal severity with the /SEVERITY switch.  The default  severities
   are 24 for interactive jobs and 16 for batch jobs.

   For both terminal messages and log file entries, LINK can issue short,
   medium,  or  long  messages,  depending  on your use of the /VERBOSITY
   switch.  For /VERBOSITY:SHORT, LINK gives only a  6-letter  code;  for
   /VERBOSITY:MEDIUM,  LINK  gives  the code and a medium-length message;
   for /VERBOSITY:LONG, LINK gives the code, a medium-length message, and
   a  long  message.   The  /MESSAGE  switch  can also be used to specify
   message length.  See Chapter 3 for more information  on  /MESSAGE  and
   the other switches discussed in this section.

   Appendix B gives each 6-letter message code, its level  and  severity,
   and its medium-length and long messages.
































                                    4-8











                                 CHAPTER 5

                                  OVERLAYS



   If your loaded program is too large to execute in one piece,  you  may
   be  able  to  define  an  overlay  structure for it.  This permits the
   system to execute the program with only some parts at a time  in  your
   virtual address space.  The overlay handler removes and reads in parts
   of the program, according to the overlay structure.

                                    NOTE

           You only need an overlay structure if your program  is
           too  large  for  your  virtual  address space.  If the
           program can fit in your virtual space, you should  not
           define an overlay structure for it; the monitor's page
           swapping facility is faster than overlay execution.



   5.1  OVERLAY STRUCTURES

   An overlay program  has  a  tree  structure.   (The  tree  is  usually
   pictured  upside down.)  The tree is made up of links, each containing
   one or more program modules.  These  links  are  connected  by  paths.
   Using LINK switches, you define each link and each path.

   At the top of the (upside down) tree is  the  root  link,  which  must
   contain  the main program.  First-level links are below the root link;
   each first-level link is connected to the root link by one path.

   Second-level links are  below  the  first-level  links,  and  each  is
   connected  by a path to exactly one first-level link.  A link at level
   n is connected by a path to exactly one link at level n-1.

   Notice that a link can have more than one downward path (to  successor
   links), but only one upward path (to predecessor links).

   Figure 5-1 shows a diagram of an overlay structure with 5 links.   The
   root  link  is  TEST;  the  first-level  links are LEFT and RIGHT; the
   second-level links are LEFT1 and LEFT2.


                                    5-1
                                 FIELD TEST














                        Art work number: MRS-2595-83




   Figure 5-1:  Example of an Overlay Structure


   Defining an overlay structure allows your  program  to  execute  in  a
   smaller space.  This is because the code in a given link is allowed to
   make reference to memory only  in  links  along  a  direct  upward  or
   downward path.

   In the structure in Figure 5-1, the link LEFT can reference memory  in
   itself,  in  the root link (TEST), or in its successor links LEFT1 and
   LEFT2.  More generally, a link can reference memory in any  link  that
   is vertically connected to it.

   Referencing memory in any other link is not allowed.  For  example,  a
   path from LEFT1 to LEFT2 is not a direct upward or downward path.

   Because of this restriction on memory references,  only  one  complete
   vertical  path  (at  most) is required in the virtual address space at
   any one time.  The remaining links can be stored on  disk  while  they
   are not needed.



   5.1.1  Defining Overlay Structures

   LINK has a family of overlay-related  switches.   These  switches  are
   summarized  in  Table  5-1  below  and  described in detail in Section
   3.2.2.  In addition to the overlay-related switches, you can use other
   LINK switches such as /ERRORLEVEL or /LOG when loading overlays.


   Table 5-1:  Summary of LINK's Overlay-Related Switches


   Switch        Description


                                    5-2
                                 FIELD TEST


   Table 5-1 (cont.)

   Switch        Description

   /ARSIZE       Sets  the  size  of  the  overlay  handler's  table  of
                 multiply-defined global symbols.

   /LINK         Closes an overlay link.

   /MAXNODE      Specifies the number of links to be  defined  when  the
                 overlayed program requires more than 256 links.

   /NODE         Opens an overlay link.

   /NOREQUEST    Deletes references to links from LINK's overhead tables
                 when loading overlay programs.

   /OVERLAY      Initiates construction of an overlay structure.

   /PLOT         Directs LINK to output a tree diagram of  your  overlay
                 structure.

   /PLTTYP       Specifies  the type of plot file to be generated by the
                 /PLOT switch.

   The  following  example  shows  commands  for  defining  the   overlay
   diagrammed in Figure 5-1.  Each command is followed by an explanation.

        *TEST/LOG/LOGLEVEL:2    

   Defines the log file for the overlay.   TEST/LOG  specifies  that  the
   file  is named TEST.LOG.  The /LOGLEVEL:2 switch directs that messages
   of level 2 and above be entered in the log file.

        */ERRORLEVEL:5

   Directs LINK to return messages of level 5 and above to the terminal.

        *TEST/OVERLAY

   Tells LINK that an overlay structure is to be defined,  and  that  the
   file for the overlay is to be TEST.OVL.

        *TEST/MAP

   Defines the to contain symbol maps for each link.

        *LPT:TEST/PLOT

   Directs that a tree diagram of the overlay links  be  printed  on  the
   line printer.



                                    5-3
                                 FIELD TEST


        *OVL0,OVL1/LINK:TEST

   Loads the OVL0.REL  and  OVL1.REL  files  into  the  root  link.   The
   /LINK:TEST  switch  tells  LINK  that no more modules are to be in the
   root link, and that the link name is TEST.

        */NODE:TEST OVL2/LINK:LEFT

   Defines a link named LEFT.  /NODE:TEST tells LINK that the link  being
   defined (LEFT) is to be an immediate successor to TEST, the root link.
   OVL2/LINK:LEFT loads the OVL2.REL file, ends the link,  and  names  it
   LEFT.

        */NODE:LEFT OVL5/LINK:LEFT1

   Defines a link named LEFT1.  /NODE:LEFT tells LINK that the link being
   defined  (LINK1)  is  an immediate successor to LEFT.  OVL5/LINK:LEFT1
   loads the OVL5.REL file, ends the link, and names it LEFT1.

        */NODE:LEFT OVL6/LINK:LEFT2

   Defines another immediate successor to LEFT named LEFT2.

        */NODE:TEST OVL3,OVL4/LINK:RIGHT

   Defines  the  last  link,  RIGHT.   /NODE:TEST  defines  RIGHT  as  an
   immediate  successor  to  TEST, loads the OVL3.REL and OVL4.REL files,
   and names the link RIGHT.

        *TEST/SAVE

   Directs LINK to create the saved file TEST.EXE.

        */EXECUTE/GO

   Specifies that the loaded program (TEST) is to be executed,  and  that
   all commands to LINK are completed.

   This process also produced an executable file TEST.EXE, which  can  be
   run  using  the  RUN system command.  However, to run the program, the
   file TEST.OVL must be present, because it provides the  code  for  the
   links.



   5.1.2  An Overlay Example

   The following pages show samples of the files  used  in  the  previous
   example.





                                    5-4
                                 FIELD TEST


   5.1.2.1  Source Files - Copies of the FORTRAN source files used in the
   overlay are displayed on the terminal using the TOPS-20 TYPE command.

   @TYPE OVL0.FOR<RET>

   CTHIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
   C  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
   C
   CCOPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983

   C       Simple overlay tests

   C                       OVL0
   C                      /    \
   C               OVL2A         OVL4
   C             /     \              \
   C          OVL5      OVL6           OVL1
   C                       \          /
   C                       OVL2B   OVL3

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)

           TYPE 1
   1       FORMAT ('1','Execution begins in main program OVL0')

           TYPE 11
   11      FORMAT (1X,'OVL0 CALLS OVL2A')
           IVAR=0
           CALL OVL2A(IVAR)
           TYPE 2
   2       FORMAT (/1X,'RETURN TO OVL0')
           IF (IVAR.NE.1) TYPE 100
   100     FORMAT(' ?Error. Value not returned from OVL2A')

           TYPE 21
   21      FORMAT (1X,'OVL0 CALLS OVL4')
           NUMB=0
           CALL OVL4(NUMB)
           TYPE 2
           IF (IVAR.NE.1) TYPE 200
   200     FORMAT(' ?Error. Value not returned from NUMB')

           TYPE 3
   3       FORMAT (/1X,'Execution ends in main program OVL0'//)

           STOP
           END





                                    5-5
                                 FIELD TEST


   @TYPE OVL1.FOR


           SUBROUTINE OVL1(IVAR)

   C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
   C   OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
   C 
   C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)

           TYPE 1
   1       FORMAT (30x,'   OVL1 CALLS OVL3'/)

           NUM=0
           CALL OVL3(NUM)
           TYPE 2
   2       FORMAT (30x,'   RETURN TO OVL1'/)
           IF (NUM.NE.1) TYPE 100
   100     FORMAT(' ?Error. Variable not returned from OVL3.')

           IVAR=1
           RETURN
           END


   @TYPE OVL2.FOR


           SUBROUTINE OVL2A(ARG)

   C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
   C   OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
   C 
   C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)
           INTEGER OVL6

           TYPE 1
   1       FORMAT (1X,'    OVL2A CALLS OVL5'/)
           ARG=0
           CALL OVL5(ARG)
           TYPE 2
   2       FORMAT (1X,'    RETURN TO OVL2A'/)
           IF (ARG.NE.1) TYPE 100
   100     FORMAT(' ?Error. Value not returned from OVL5')


                                    5-6
                                 FIELD TEST


           TYPE 3
   3       FORMAT (1X,'    OVL2A CALLS OVL6'/)
           NUM=0
           NUM=OVL6(NUM)
           TYPE 2
           IF (NUM.NE.1) TYPE 300
   300     FORMAT(' ?Error. Value not returned from OVL6')

           ARG=1           !Return value
           RETURN
           END

           SUBROUTINE OVL2B

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)

           TYPE 1
   1       FORMAT (/1X,'           OVL2B DOESN''T CALL ANYTHING')

           RETURN
           END


   @TYPE OVL3.FOR

           SUBROUTINE OVL3(IVAR)

   C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
   C   OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
   C 
   C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)

           IVAR=1  !Got here!

           TYPE 1
   1       FORMAT (30x,'           OVL3 DOESN''T CALL ANYTHING'/)

           RETURN
           END


   @TYPE OVL4.FOR

           SUBROUTINE OVL4(ARGU)

   C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED


                                    5-7
                                 FIELD TEST


   C   OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
   C 
   C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1982

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)

           TYPE 1
   1       FORMAT (30x,'   OVL4 CALLS OVL1')
           NUM=0
           CALL OVL1(NUM)
           IF (NUM.NE.1) TYPE 100
   100     FORMAT(' ?Error. Value not returned from OVL1')

           TYPE 2
   2       FORMAT (30x,'   RETURN TO OVL4')

           ARGU=1
           RETURN
           END


   @TYPE OVL5.FOR


           SUBROUTINE OVL5(NUM)

   C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
   C   OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
   C 
   C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)
           COMMON C

           C=(1,1)
           C=C**C
           TYPE 1
   1       FORMAT (30x,'           OVL5 CALLS CEXP3.'/)

           NUM=1
           RETURN
           END



   @TYPE OVL6.FOR

           INTEGER FUNCTION OVL6(ARG)


                                    5-8
                                 FIELD TEST


   C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
   C   OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
   C 
   C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983

           IMPLICIT DOUBLE PRECISION (D)
           IMPLICIT COMPLEX (C)
           IMPLICIT INTEGER (A)

           TYPE 1
   1       FORMAT (30x,'   OVL6 CALLS OVL2B'/)
           NUM=0
           CALL OVL2B(NUM)
           TYPE 2
   2       FORMAT (30x,'   RETURN TO OVL6'/)
           IF (NUM .NE. 0) TYPE 100
   100     FORMAT(' ?Error. Value not returned from OVL2A')

           OVL6=1
           RETURN
           END



   5.1.2.2  Source File Compilation - Source files are compiled using the
   TOPS-20 COMPILE command.

   @compile ovl0,ovl1,ovl2,ovl3,ovl4,ovl5,ovl6
   FORTRAN: OVL0
   OVL0    
   FORTRAN: OVL1
   OVL1    
   FORTRAN: OVL2
   OVL2A   
   OVL2B   
   FORTRAN: OVL3
   OVL3    
   FORTRAN: OVL4
   OVL4    
   FORTRAN: OVL5
   OVL5    
   FORTRAN: OVL6
   OVL6    



   5.1.2.3  Interactive use of LINK - LINK is run and used to define  and
   execute the overlay.

   @LINK
   TEST/LOG/LOGLEVEL:5
   /ERRORLEVEL:5


                                    5-9
                                 FIELD TEST


   TEST/OVERLAY
   TEST/MAP
   LPT:TEST/PLOT
   OVL0,OVL1/LINK:TEST
   [LNKLMN Loading module OVL0 from file OVL0.REL.1]
   [LNKLMN Loading module OVL1 from file OVL1.REL.1]
   [LNKLMN Loading module OVRLAY from file SYS:OVRLAY.REL.10]
   [LNKLMN Loading module FORHST from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module FORSHR from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module FORGET from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module FDBDUM from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module KSORT from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module FORMSL from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module FORPSE from file SYS:FORLIB.REL.1]
   [LNKELN End of link number 0 name TEST]
   NODE:TEST OVL2/LINK:LEFT
   [LNKLMN Loading module OVL2A from file OVL2.REL.1]
   [LNKLMN Loading module OVL2B from file OVL2.REL.1]
   [LNKELN End of link number 1 name LEFT]
   /NODE:LEFT OVL5/LINK:LEFT1
   [LNKLMN Loading module OVL5 from file OVL5.REL.1]
   [LNKLMN Loading module CEXP3. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module CDLOG from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module CGLOG from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module CGLOG from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module GATAN. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module GLOG. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module DATAN. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module DEXP. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module DLOG. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module DSIN. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module DFL.4 from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module EXP2. from file SYS:FORLIB.REL.1]
   [LNKLMN Loading module MTHMSG from file SYS:FORLIB.REL.1]
   [LNKELN End of link number 2 name LEFT1]
   /NODE:LEFT OVL6/LINK:LEFT2
   [LNKLMN Loading module OVL6 from file OVL6.REL.1]
   [LNKELN End of link number 3 name LEFT2]
   /NODE:TEST OVL3,OVL4/LINK:RIGHT
   [LNKLMN Loading module OVL3 from file OVL3.REL.1]
   [LNKLMN Loading module OVL4 from file OVL4.REL.1]
   [LNKELN End of link number 4 name RIGHT]
   TEST/SAVE
   /EXECUTE/GO
   [LNKXCT OVL0 execution]

   Execution begins in main program OVL0
   OVL0 CALLS OVL2A
           OVL2A CALLS OVL5

                                    OVL5 CALLS CEXP3.



                                    5-10
                                 FIELD TEST


           RETURN TO OVL2A

           OVL2A CALLS OVL6

                                   OVL6 CALLS OVL2B


                   OVL2B DOESN'T CALL ANYTHING
                                   RETURN TO OVL6

           RETURN TO OVL2A


   RETURN TO OVL0
   OVL0 CALLS OVL4
                                   OVL4 CALLS OVL1
                                   OVL1 CALLS OVL3

                                           OVL3 DOESN'T CALL ANYTHING

                                   RETURN TO OVL1

                                   RETURN TO OVL4

   RETURN TO OVL0

   Execution ends in main program OVL0


   CPU time 0.85   Elapsed time 11.85




   5.1.2.4  TEST.LOG - LINK generated the following  TEST.LOG  file.   It
   shows the log messages issued during the load.

   15:30:48   6   1   LMN  Loading module OVL0 from file OVL0.REL.1
   15:30:49   6   1   LMN  Loading module OVL1 from file OVL1.REL.1
   15:30:50   6   1   LMN  Loading module OVRLAY from file SYS:OVRLAY.REL.10
   15:30:52   6   1   LMN  Loading module FORHST from file SYS:FORLIB.REL.1
   15:30:52   6   1   LMN  Loading module FORSHR from file SYS:FORLIB.REL.1
   15:30:52   6   1   LMN  Loading module FORGET from file SYS:FORLIB.REL.1
   15:30:53   6   1   LMN  Loading module FDBDUM from file SYS:FORLIB.REL.1
   15:30:53   6   1   LMN  Loading module KSORT from file SYS:FORLIB.REL.1
   15:30:54   6   1   LMN  Loading module FORMSL from file SYS:FORLIB.REL.1
   15:30:54   6   1   LMN  Loading module FORPSE from file SYS:FORLIB.REL.1
   15:31:23   7   1   ELN  End of link number 0 name TEST

   15:31:42   6   1   LMN  Loading module OVL2A from file OVL2.REL.1
   15:31:42   6   1   LMN  Loading module OVL2B from file OVL2.REL.1
   15:31:48   7   1   ELN  End of link number 1 name LEFT


                                    5-11
                                 FIELD TEST


   15:32:04   6   1   LMN  Loading module OVL5 from file OVL5.REL.1
   15:32:06   6   1   LMN  Loading module CEXP3. from file SYS:FORLIB.REL.1
   15:32:06   6   1   LMN  Loading module CDLOG from file SYS:FORLIB.REL.1
   15:32:07   6   1   LMN  Loading module CGLOG from file SYS:FORLIB.REL.1
   15:32:07   6   1   LMN  Loading module CGLOG from file SYS:FORLIB.REL.1
   15:32:07   6   1   LMN  Loading module GATAN. from file SYS:FORLIB.REL.1
   15:32:08   6   1   LMN  Loading module GLOG. from file SYS:FORLIB.REL.1
   15:32:09   6   1   LMN  Loading module DATAN. from file SYS:FORLIB.REL.1
   15:32:09   6   1   LMN  Loading module DEXP. from file SYS:FORLIB.REL.1
   15:32:09   6   1   LMN  Loading module DLOG. from file SYS:FORLIB.REL.1
   15:32:09   6   1   LMN  Loading module DSIN. from file SYS:FORLIB.REL.1
   15:32:10   6   1   LMN  Loading module DFL.4 from file SYS:FORLIB.REL.1
   15:32:10   6   1   LMN  Loading module EXP2. from file SYS:FORLIB.REL.1
   15:32:10   6   1   LMN  Loading module MTHMSG from file SYS:FORLIB.REL.1
   15:32:12   7   1   ELN  End of link number 2 name LEFT1

   15:32:36   6   1   LMN  Loading module OVL6 from file OVL6.REL.1
   15:32:37   7   1   ELN  End of link number 3 name LEFT2

   15:32:55   6   1   LMN  Loading module OVL3 from file OVL3.REL.1
   15:32:56   6   1   LMN  Loading module OVL4 from file OVL4.REL.1
   15:32:56   7   1   ELN  End of link number 4 name RIGHT



   5.1.2.5  TEST.MAP - LINK generated the following  TEST.MAP  file.   It
   shows symbol maps for the overlay.

                   LINK symbol map of      OVL0            page 1
           Produced by LINK version 6(2353) on 11-Feb-85 at 11:53:18

           Overlay no.     0       name    TEST
           Overlay is absolute
           Low  segment starts at       0 ends at   10243 length    10244 =   9P
           Control Block address is  10202, length     32 (octal), 26. (decimal)
           348 words free in Low segment
           188 Global symbols loaded, therefore min. hash size is 209
           Start address is    235, located in program OVL0

                   *************

   JOBDAT-INITIAL-SYMBOLS
           %JOBDT      43200000454 Global  Absolute    Suppressed  .JB41                41 Global  Absolute        
           .JBAPR              125 Global  Absolute                .JBBLT               45 Global  Absolute        
           .JBCHN              131 Global  Absolute                .JBCNI              126 Global  Absolute        
           .JBCOR              133 Global  Absolute                .JBCST              136 Global  Absolute        
           .JBDA               140 Global  Absolute                .JBDDT               74 Global  Absolute        
           .JBEDV              112 Global  Absolute                .JBERR               42 Global  Absolute        
           .JBFF               121 Global  Absolute                .JBH41                1 Global  Absolute    Suppressed
           .JBHCR                2 Global  Absolute    Suppressed  .JBHDA               10 Global  Absolute    Suppressed
           .JBHGA                7 Global  Absolute    Suppressed  .JBHGH           400000 Global  Absolute    Suppressed
           .JBHNM                5 Global  Absolute    Suppressed  .JBHRL              115 Global  Absolute        


                                    5-12
                                 FIELD TEST


           .JBHRN                3 Global  Absolute    Suppressed  .JBHSA                0 Global  Absolute    Suppressed
           .JBHSM                6 Global  Absolute    Suppressed  .JBHVR                4 Global  Absolute    Suppressed
           .JBINT              134 Global  Absolute                .JBOPC              130 Global  Absolute        
           .JBOPS              135 Global  Absolute                .JBOVL              131 Global  Absolute        
           .JBPFH              123 Global  Absolute                .JBPFI               74 Global  Absolute        
           .JBREL               44 Global  Absolute                .JBREN              124 Global  Absolute        
           .JBSA               120 Global  Absolute                .JBSYM              116 Global  Absolute        
           .JBTPC              127 Global  Absolute                .JBUSY              117 Global  Absolute        
           .JBUUO               40 Global  Absolute                .JBVER              137 Global  Absolute        

                   *************

   OVL0    from DSK:OVL0.REL       created by FORTRAN on 11-Feb-85 at 11:52:27
           Low  segment starts at     140 ends at     234 length       75 (octal),    61. (decimal)
           High segment starts at     235 ends at     345 length      111 (octal),    73. (decimal)

           MAIN.               235 Global  Relocatable             OVL0                235 Entry   Relocatable     

                   *************

   OVL1    from DSK:OVL1.REL       created by FORTRAN on 11-Feb-85 at 11:52:28
           Low  segment starts at     346 ends at     377 length       32 (octal),    26. (decimal)
           High segment starts at     400 ends at     442 length       43 (octal),    35. (decimal)

           OVL1                401 Entry   Relocatable             FOROT%           400010 Global  Absolute        

                   *************

   OVRLAY  from SYS:OVRLAY.REL     created by MACRO on 25-Jan-85 at  5:25:39
           Low  segment starts at    4252 ends at    5245 length      774 (octal),   508. (decimal)
           High segment starts at     443 ends at    4150 length     3506 (octal),  1862. (decimal)


                   LINK symbol map of      OVL0            page 2
   OVRLAY
           BOUT%      104000000051 Global  Absolute                CLOSF%     104000000022 Global  Absolute        
           CLROV.             2501 Entry   Relocatable             ERJMP      320700000000 Global  Absolute        
           ERSTR%     104000000011 Global  Absolute                GCVEC%     104000000300 Global  Absolute        
           GETOV.             2376 Entry   Relocatable             GJ%FOU     400000000000 Global  Absolute    Suppressed
           GJ%OLD     100000000000 Global  Absolute    Suppressed  GJ%SHT          1000000 Global  Absolute    Suppressed
           GJ%TMP      10000000000 Global  Absolute    Suppressed  GTJFN%     104000000020 Global  Absolute        
           HALTF%     104000000170 Global  Absolute                INIOV.             2354 Entry   Relocatable     
           JFNS%      104000000030 Global  Absolute                JS%DEV     300000000000 Global  Absolute    Suppressed
           JS%DIR      70000000000 Global  Absolute    Suppressed  JS%NAM       7000000000 Global  Absolute    Suppressed
           JS%PAF                1 Global  Absolute    Suppressed  LOGOV.             2520 Entry   Relocatable     
           OF%BSZ     770000000000 Global  Absolute    Suppressed  OF%RD            200000 Global  Absolute    Suppressed
           OF%WR            100000 Global  Absolute    Suppressed  OPENF%     104000000021 Global  Absolute        
           PA%EX       20000000000 Global  Absolute    Suppressed  PA%PRV        200000000 Global  Absolute    Suppressed
           PBOUT%     104000000074 Global  Absolute                REMOV.             2412 Entry   Relocatable     
           RMAP%      104000000061 Global  Absolute                RPACS%     104000000057 Global  Absolute        
           RUNOV.             2430 Entry   Relocatable             RUNTM%     104000000015 Global  Absolute        
           SAVOV.             2454 Entry   Relocatable             SFPTR%     104000000027 Global  Absolute        


                                    5-13
                                 FIELD TEST


           SIN%       104000000052 Global  Absolute                SOUT%      104000000053 Global  Absolute        
           %OVRLA        501000212 Global  Absolute    Suppressed  .FHJOB           777773 Global  Absolute    Suppressed
           .FHSLF           400000 Global  Absolute    Suppressed  .GJEXT                5 Global  Absolute    Suppressed
           .GJGEN                0 Global  Absolute    Suppressed  .JSAOF                1 Global  Absolute    Suppressed
           .NULIO           377777 Global  Absolute    Suppressed  .OVRLA             4273 Entry   Relocatable     
           .OVRLO             4314 Global  Relocatable             .OVRLU             3254 Entry   Relocatable     
           .OVRWA             4313 Global  Relocatable     
                   *************

   FORHST  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29

           Zero length module

                   *************

   FORSHR  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29

           Zero length module

                   *************

   FORGET  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at    5725 ends at    7134 length     1210 (octal),   648. (decimal)
           High segment starts at    5246 ends at    5724 length      457 (octal),   303. (decimal)

           ABORT.             5603 Entry   Relocatable     
           ALCHN.             5557 Entry   Relocatable             ALCOR.             5553 Entry   Relocatable     
           CFIBF%     104000000100 Global  Absolute                CHRPT.             5725 Global  Relocatable     
           CLOSE.             5515 Entry   Relocatable             DEC.               5533 Entry   Relocatable     
           DECHN.             5561 Entry   Relocatable             DECOR.             5555 Entry   Relocatable     
           ENC.               5531 Entry   Relocatable             ERROR.             5511 Entry   Relocatable     
           ESOUT%     104000000313 Global  Absolute                EXIT.              5551 Entry   Relocatable     
           EXIT1.             5517 Entry   Relocatable             FDBMS.             5567 Entry   Relocatable     
           FIN.               5543 Entry   Relocatable             FIND.              5547 Entry   Relocatable     
           FORER.             5511 Entry   Relocatable             FOROP.             5573 Entry   Relocatable     
           FOROT$             5610 Entry   Relocatable             FOROT.             5246 Entry   Relocatable     
           FUNCT.             5565 Entry   Relocatable             GET%       104000000200 Global  Absolute        

                   LINK symbol map of      OVL0            page 3
   FORGET
           GEVEC%     104000000205 Global  Absolute                GJ%PHY         10000000 Global  Absolute    Suppressed
           GT%NOV            40000 Global  Absolute    Suppressed  IFI.               5575 Entry   Relocatable     
           IFO.               5577 Entry   Relocatable             IN.                5521 Entry   Relocatable     
           INIT.              5507 Entry   Relocatable             INQ.               5571 Entry   Relocatable     
           IOLST.             5541 Entry   Relocatable             MTHER.             5601 Entry   Relocatable     
           MTOP.              5545 Entry   Relocatable             NLI.               5535 Entry   Relocatable     
           NLO.               5537 Entry   Relocatable             OPEN.              5513 Entry   Relocatable     
           OUT.               5523 Entry   Relocatable             PA%PEX      10000000000 Global  Absolute    Suppressed
           PM%CNT     400000000000 Global  Absolute    Suppressed  PM%RD      100000000000 Global  Absolute    Suppressed
           PM%RWX     160000000000 Global  Absolute    Suppressed  PM%WR       40000000000 Global  Absolute    Suppressed
           PMAP%      104000000056 Global  Absolute                PSOUT%     104000000076 Global  Absolute        
           RD%JFN       4000000000 Global  Absolute    Suppressed  RD%TOP     200000000000 Global  Absolute    Suppressed


                                    5-14
                                 FIELD TEST


           RF%LNG     400000000000 Global  Absolute    Suppressed  RFSTS%     104000000156 Global  Absolute        
           RTB.               5525 Entry   Relocatable             SEVEC%     104000000204 Global  Absolute        
           TEXTI%     104000000524 Global  Absolute                TRACE.             5563 Entry   Relocatable     
           WTB.               5527 Entry   Relocatable             .PRIIN              100 Global  Absolute    Suppressed
           .PRIOU              101 Global  Absolute    Suppressed  .RFSFL                4 Global  Absolute    Suppressed

                   *************

   FDBDUM  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           High segment starts at    7135 ends at    7135 length        1 (octal),     1. (decimal)

           FDBMS%             7135 Global  Relocatable             KDBMS.             7135 Global  Relocatable     
           %DBSTP             7135 Entry   Relocatable     
                   *************

   KSORT   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at    7152 ends at    7154 length        3 (octal),     3. (decimal)
           High segment starts at    7136 ends at    7151 length       14 (octal),    12. (decimal)

           KSORT.             7136 Entry   Relocatable     
           %PASRT             7154 Global  Relocatable             %SRTAD             7152 Global  Relocatable     

                   *************

   FORMSL  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           High segment starts at    7155 ends at    7714 length      540 (octal),   352. (decimal)

           F.AQS              7267 Entry   Relocatable             F.CFS              7360 Entry   Relocatable     
           F.CGP              7333 Entry   Relocatable             F.CGS              7367 Entry   Relocatable     
           F.CLE              7233 Entry   Relocatable             F.CPP              7376 Entry   Relocatable     
           F.CWU              7223 Entry   Relocatable             F.ICE              7242 Entry   Relocatable     
           F.IDU              7173 Entry   Relocatable             F.IJE              7424 Entry   Relocatable     
           F.IOE              7155 Entry   Relocatable             F.IPN              7405 Entry   Relocatable     
           F.MXD              7342 Entry   Relocatable             F.NCA              7260 Entry   Relocatable     
           F.NCS              7251 Entry   Relocatable             F.NOF              7213 Entry   Relocatable     
           F.NOR              7164 Entry   Relocatable             F.NSS              7351 Entry   Relocatable     
           F.SNH              7415 Entry   Relocatable             F.SRE              7311 Entry   Relocatable     
           F.SSE              7276 Entry   Relocatable             F.TMA              7324 Entry   Relocatable     
           F.UNO              7203 Entry   Relocatable     
                   *************


                   LINK symbol map of      OVL0            page 4


   FORPSE  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   10121 ends at   10201 length       61 (octal),    49. (decimal)
           High segment starts at    7715 ends at   10120 length      204 (octal),   132. (decimal)

           PAUS.              7716 Entry   Relocatable     
           RFMOD%     104000000107 Global  Absolute                SFMOD%     104000000110 Global  Absolute        
           STOP.              7721 Entry   Relocatable             TT%OSP     400000000000 Global  Absolute    Suppressed


                                    5-15
                                 FIELD TEST


                   *************


           Index to LINK symbol map of     OVL0            page 5

           Name    Page    Name    Page    Name    Page    Name    Page

           FDBDUM   3      FORMSL   3      KSORT    3      OVL1     1
           FORGET   2      FORPSE   4      OVL0     1      OVRLAY   1
           FORHST   2      FORSHR   2


                   LINK symbol map of      OVL0    #1      page 6

           Overlay no.     1       name    LEFT
           Overlay is absolute
           Low  segment starts at   14244 ends at   14501 length      236 =   1P
           Control Block address is  14440, length     30 (octal), 24. (decimal)
           Path is 0
           190 words free in Low segment
           6 Global symbols loaded, therefore min. hash size is 7

                   *************

   OVL2A   from DSK:OVL2.REL       created by FORTRAN on 11-Feb-85 at 11:52:30
           Low  segment starts at   14244 ends at   14315 length       52 (octal),    42. (decimal)
           High segment starts at   14316 ends at   14412 length       75 (octal),    61. (decimal)

           OVL2A             14317 Entry   Relocatable     

                   *************

   OVL2B   from DSK:OVL2.REL       created by FORTRAN on 11-Feb-85 at 11:52:30
           Low  segment starts at   14413 ends at   14425 length       13 (octal),    11. (decimal)
           High segment starts at   14426 ends at   14437 length       12 (octal),    10. (decimal)

           OVL2B             14427 Entry   Relocatable     

                   *************

                   LINK symbol map of      OVL0    #2      page 7

           Overlay no.     2       name    LEFT1
           Overlay is absolute
           Low  segment starts at   14502 ends at   22675 length     6174 =   7P
           Control Block address is  22510, length     20 (octal), 16. (decimal)
           Path is 0, 1
           66 words free in Low segment
           53 Global symbols loaded, therefore min. hash size is 59

                   *************



                                    5-16
                                 FIELD TEST


   OVL5    from DSK:OVL5.REL       created by FORTRAN on 11-Feb-85 at 11:52:36
           Low  segment starts at   14502 ends at   14517 length       16 (octal),    14. (decimal)
           High segment starts at   14520 ends at   14547 length       30 (octal),    24. (decimal)

           .COMM.            14502 Common  length       2.         OVL5              14521 Entry   Relocatable     

                   *************

   CEXP3.  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   16062 ends at   16144 length       63 (octal),    51. (decimal)
           High segment starts at   14550 ends at   16061 length     1312 (octal),   714. (decimal)

           CEXP2.            14551 Entry   Relocatable             CEXP3.            14655 Entry   Relocatable     

                   *************

   CDLOG   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   16515 ends at   16544 length       30 (octal),    24. (decimal)
           High segment starts at   16145 ends at   16514 length      350 (octal),   232. (decimal)

           CDLOG             16146 Entry   Relocatable     

                   *************

   CGLOG   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29

           Zero length module

                   *************

   CGLOG   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   17112 ends at   17145 length       34 (octal),    28. (decimal)
           High segment starts at   16545 ends at   17111 length      345 (octal),   229. (decimal)

           CGLOG.            16546 Entry   Relocatable     

                   *************

   GATAN.  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   17715 ends at   17723 length        7 (octal),     7. (decimal)
           High segment starts at   17146 ends at   17714 length      547 (octal),   359. (decimal)

           GATAN.            17147 Entry   Relocatable             GATN2.            17242 Entry   Relocatable     

                   *************

                   LINK symbol map of      OVL0    #2      page 8


   GLOG.   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   20075 ends at   20102 length        6 (octal),     6. (decimal)
           High segment starts at   17724 ends at   20074 length      151 (octal),   105. (decimal)


                                    5-17
                                 FIELD TEST


           GLG10.            17725 Entry   Relocatable             GLOG.             17730 Entry   Relocatable     

                   *************

   DATAN.  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   20652 ends at   20660 length        7 (octal),     7. (decimal)
           High segment starts at   20103 ends at   20651 length      547 (octal),   359. (decimal)

           DATAN.            20104 Entry   Relocatable             DATN2.            20177 Entry   Relocatable     

                   *************

   DEXP.   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   21042 ends at   21044 length        3 (octal),     3. (decimal)
           High segment starts at   20661 ends at   21041 length      161 (octal),   113. (decimal)

           DEXP.             20662 Entry   Relocatable     
                   *************

   DLOG.   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   21217 ends at   21222 length        4 (octal),     4. (decimal)
           High segment starts at   21045 ends at   21216 length      152 (octal),   106. (decimal)

           DLG10.            21046 Entry   Relocatable     
           DLOG.             21051 Entry   Relocatable     
                   *************

   DSIN.   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   21450 ends at   21454 length        5 (octal),     5. (decimal)
           High segment starts at   21223 ends at   21447 length      225 (octal),   149. (decimal)

           DCOS.             21224 Entry   Relocatable     
           DSIN.             21236 Entry   Relocatable     
                   *************

   DFL.4   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           High segment starts at   21455 ends at   21464 length       10 (octal),     8. (decimal)

           DFL.4             21456 Entry   Relocatable     

                   *************

   EXP2.   from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           Low  segment starts at   21606 ends at   21610 length        3 (octal),     3. (decimal)
           High segment starts at   21465 ends at   21605 length      121 (octal),    81. (decimal)

           EXP2.             21466 Entry   Relocatable     
                   *************


                   LINK symbol map of      OVL0    #2      page 9



                                    5-18
                                 FIELD TEST


   MTHMSG  from SYS:FORLIB.REL     created by MACRO on 25-Jan-85 at  5:24:29
           High segment starts at   21611 ends at   22507 length      677 (octal),   447. (decimal)

           L.888             22106 Entry   Relocatable     
           L.999             22077 Entry   Relocatable             L.AII             21762 Entry   Relocatable     
           L.AIR             21753 Entry   Relocatable             L.AIZ             21735 Entry   Relocatable     
           L.AOI             22043 Entry   Relocatable             L.ARZ             21744 Entry   Relocatable     
           L.ATI             21710 Entry   Relocatable             L.ATZ             21701 Entry   Relocatable     
           L.AZM             21771 Entry   Relocatable             L.BAZ             22052 Entry   Relocatable     
           L.BPI             22016 Entry   Relocatable             L.BPO             21663 Entry   Relocatable     
           L.BPU             21672 Entry   Relocatable             L.IPO             21645 Entry   Relocatable     
           L.IPU             21627 Entry   Relocatable             L.MFX             22124 Entry   Relocatable     
           L.NAA             22025 Entry   Relocatable             L.NNA             22061 Entry   Relocatable     
           L.NOR             22115 Entry   Relocatable             L.ROV             21611 Entry   Relocatable     
           L.RPO             21654 Entry   Relocatable             L.RPU             21636 Entry   Relocatable     
           L.RTI             21717 Entry   Relocatable             L.RTR             21726 Entry   Relocatable     
           L.RUN             21620 Entry   Relocatable             L.ZCI             22007 Entry   Relocatable     
           L.ZIZ             22034 Entry   Relocatable             L.ZNI             22070 Entry   Relocatable     
           L.ZZZ             22000 Entry   Relocatable     
                   *************



           Index to LINK symbol map of     OVL0    #2      page 10

           Name    Page    Name    Page    Name    Page    Name    Page

           CDLOG    7      DATAN.   8      DSIN.    8      GLOG.    8
           CEXP3.   7      DEXP.    8      EXP2.    8      MTHMSG   9
           CGLOG    7      DFL.4    8      GATAN.   7      OVL5     7
           CGLOG    7      DLOG.    8


                   LINK symbol map of      OVL0    #3      page 11

           Overlay no.     3       name    LEFT2
           Overlay is absolute
           Low  segment starts at   14502 ends at   14666 length      165 =   1P
           Control Block address is  14637, length     20 (octal), 16. (decimal)
           Path is 0, 1
           73 words free in Low segment
           4 Global symbols loaded, therefore min. hash size is 5

                   *************

   OVL6    from DSK:OVL6.REL       created by FORTRAN on 11-Feb-85 at 11:52:37
           Low  segment starts at   14502 ends at   14550 length       47 (octal),    39. (decimal)
           High segment starts at   14551 ends at   14636 length       66 (octal),    54. (decimal)

           OVL6              14552 Entry   Relocatable     

                   *************


                                    5-19
                                 FIELD TEST



                   LINK symbol map of      OVL0    #4      page 12

           Overlay no.     4       name    RIGHT
           Overlay is absolute
           Low  segment starts at   14244 ends at   14426 length      163 =   1P
           Control Block address is  14375, length     22 (octal), 18. (decimal)
           Path is 0
           233 words free in Low segment
           5 Global symbols loaded, therefore min. hash size is 6

                   *************

   OVL3    from DSK:OVL3.REL       created by FORTRAN on 11-Feb-85 at 11:52:32
           Low  segment starts at   14244 ends at   14257 length       14 (octal),    12. (decimal)
           High segment starts at   14260 ends at   14277 length       20 (octal),    16. (decimal)

           OVL3              14261 Entry   Relocatable     
                   *************

   OVL4    from DSK:OVL4.REL       created by FORTRAN on 11-Feb-85 at 11:52:34
           Low  segment starts at   14300 ends at   14331 length       32 (octal),    26. (decimal)
           High segment starts at   14332 ends at   14374 length       43 (octal),    35. (decimal)

           OVL4              14333 Entry   Relocatable     

                   *************



           Index to overlay numbers of OVL0                page 13

           Overlay Page    Overlay Page    Overlay Page    Overlay Page

           #0       5      #2      10      #3      11      #4      12
           #1       6

           Index to overlay names of OVL0

           Name    Page    Name    Page    Name    Page    Name    Page

           LEFT     6      LEFT2   11      RIGHT   12      TEST     5
           LEFT1   10

           [End of LINK map of     OVL0]



   5.1.2.6  Tree   Diagram - The   tree   diagram   requested   by    the
   LPT:TEST/PLOT switch.




                                    5-20
                                 FIELD TEST





























   5.1.2.7  Executable File - The process  also  produced  an  executable
   file  TEST.EXE,  which  can  be  run  using  the  RUN  system command.
   However, to run the  program,  the  file  TEST.OVL  must  be  present,
   because it provides the code for the links.























                                    5-21
                                 FIELD TEST


   5.2  WRITABLE OVERLAYS

   Ordinarily each overlay link built by LINK is copied  by  the  overlay
   handler  from  the  OVL  file  to  the  address space at runtime.  The
   contents of any locations that have been modified are lost  each  time
   the  overlay  link is copied from the OVL file.  This can be prevented
   by the use of writable overlays.

   If a link is specified as writable, the overlay  handler  copies  that
   link  to  a temporary file on disk before overwriting it.  Later, when
   the copied link is needed, the overlay handler retrieves the link from
   the  temporary  file  rather  than  the  OVL  file.   In this way, any
   modified values are preserved.  Because writable overlays involve more
   file  I/O, they are slower than the default (nonwritable) overlays and
   should  only  be  used  when  the  program   structure   and   storage
   requirements demand dynamic storage in overlay links.

   To specify that an overlay is writable, use the FORTRAN SAVE statement
   in the program, and specify /OVERLAY:WRITABLE when loading the program
   with LINK.



   5.2.1  Writable Overlay Syntax

   To build a writable overlay, specify the  keyword  WRITABLE  with  the
   /OVERLAY switch in the LINK command:


        filespec/OVERLAY:WRITABLE



   5.2.2  Writable Overlay Error Messages

   The overlay handler must  write  and  update  a  temporary  file.   In
   addition to the error messages associated with all overlays, there are
   two additional error messages for writable overlays:

        ?  OVLCWF Cannot write file [filename]:  [reason]

        ?  OVLCUF Cannot update file [filename]:  [reason]

   If either of these messages appears, you should check for  disk  quota
   violations  or other conditions that could prevent the overlay handler
   from writing a temporary file.



   5.3  RELOCATABLE OVERLAYS

   LINK ordinarily allocates 2000 extra words at the end of the root link


                                    5-22
                                 FIELD TEST


   and  no  extra  space  at  the  end  of each subsequent link.  This is
   adequate for programs with static storage  requirements.   If  a  link
   requires  extra  storage at run-time, you can use the /SPACE switch to
   make the necessary allowances for  the  program's  requirements.   The
   /SPACE  switch  allows  you  to  specify  the  number  of  words to be
   allocated after the current link is loaded.

   However,  there  are   programs   whose   dynamic   run-time   storage
   requirements  are  unpredictable.   For  example, a program's run-time
   storage requirements may vary according to the program's  input.   For
   this class of programs, relocatable overlays can be useful.

   For relocatable overlays LINK places extra relocation  information  in
   the  OVL  file,  permitting  overlay links to be relocated at runtime.
   The overlay handler, using the FUNCT. subroutine, can determine  where
   the  link  will  fit  in  the  address  space  and resolve relocatable
   addresses within the link.  This extra processing  causes  relocatable
   overlays  to  run  slower  than  nonrelocatable overlays.  Relocatable
   overlays should only be used when you  cannot  determine  the  dynamic
   storage requirements of a program.



   5.3.1  Relocatable Overlay Syntax

   To build a relocatable overlay, specify the RELOCATABLE keyword to the
   /OVERLAY switch in the LINK command:

        filespec/OVERLAY:RELOCATABLE



   5.3.2  Relocatable Overlay Messages

   If /OVERLAY:(LOGFILE,RELOCATABLE) is specified during the loading of a
   program,  informational messages of the following form are sent to the
   your terminal:

        %OVLRLL Relocating link [linkname] at [address]



   5.4  RESTRICTIONS ON OVERLAYS

   The following restrictions apply to all overlaid programs:

         o  Overlaid programs cannot be run execute-only.

         o  Overlaid programs cannot use PDVs.

         o  PSECTed programs cannot be overlaid.



                                    5-23
                                 FIELD TEST


         o  Overlaid programs with large buffer requirements must use the
            /SPACE switch.  If an %OVLMAN (Memory not available) error is
            encountered, the program should be reloaded using the  /SPACE
            switch with each link.

         o  If the program uses more than 256  links,  use  the  /MAXNODE
            switch  to  specify  the  number  of  links necessary for the
            program.  LINK allocates extra space in the the OVL file  for
            tables  that  require  it,  based  on the number of links you
            specify.

         o  If the program uses argument checking,  the  callee  argument
            checking  block  must be seen in the same overlay node as the
            definition of the global symbol of the same name.

         o  If the program uses character fixup, the argument  block  and
            the  character descriptor must be in the same segment (low or
            high), and they must both be either relocatable or absolute.



   5.4.1  Restrictions on Absolute Overlays

   The following restrictions apply to absolute overlaid programs:

        1.  Any intermediate results stored in non-root links are lost as
            soon  as  the  links are overlaid.  Do not expect to retain a
            value stored in a non-root link unless /OVERLAY:WRITABLE  has
            been specified.

        2.  Certain forms of global,  inter-overlay  references  are  not
            recommended  because  you  cannot  be sure that the necessary
            modules will be in memory at the right time.  Some  of  these
            references are:

             o  Additive fixups, in the form ABC##+XYZ where  ABC  is  in
                another overlay.

             o  Left-hand fixups, in the form XWD ABC##,XYZ, where ABC is
                in another overlay.

             o  Fullword fixups, in the form EXP ABC##, where ABC  is  in
                another overlay.

             o  Similarly, MOVEI 1,ABC##, where ABC  is  in  a  different
                overlay, should not be used, because the necessary module
                may not be in memory.

            In fact, the only predictable inter-overlay global  reference
            is  one that brings the necessary module into memory, such as
            PUSHJ P,ABC##.



                                    5-24
                                 FIELD TEST


   5.4.2  Restrictions on Relocatable Overlays

   The following restriction applies to relocatable overlays:

         o  Complex expressions involving  relocatable  symbols  are  not
            relocated  properly  in  a  relocatable overlay.  No standard
            DIGITAL   compiler   produces   such   expressions.     MACRO
            programmers should avoid using them in modules that are to be
            loaded as part of an overlaid program.  Any  expression  that
            causes MACRO to generate a Polish fixup block is not properly
            relocated at runtime.  The following  are  examples  of  such
            complex expressions:

                 MOVEI 1,A##+B##+C##
                 A,,0



   5.4.3  Restrictions on FORTRAN Overlays

   The following restrictions apply to FORTRAN programs that are  written
   with associate variables and using the overlay facility.

         o  If the associate variable is declared in a  subroutine,  that
            subroutine  must  be  loaded  in the root link of the overlay
            structure.   Accessing  a  file  opened  with  an   associate
            variable  changes  the  value  of the specified variable.  If
            this variable is in  a  nonresident  overlay  link  when  the
            access  is  made,  program  execution  produces unpredictable
            results.  Moreover, the value of the  variable  is  reset  to
            zero each time its overlay link is removed from memory.  Only
            variables declared in routines that are loaded into the  root
            link  are  always  resident.   However, variables declared in
            COMMON and in the root link are always resident, and  may  be
            safely used as associate variables.

         o  If you place COMMON in a writable overlay, be sure  that  all
            references  to  the  variables in that COMMON are in the same
            overlay or its successors.

         o  A FORTRAN ASSIGN statement  may  be  used  in  a  relocatable
            overlay.  If the ASSIGN is made in a subroutine, the value of
            the assigned variable may be preserved from one call of  that
            subroutine to the next.  However, the overlay containing that
            subroutine could then be replaced in memory  by  a  different
            overlay.    If  the  overlay  containing  the  subroutine  is
            relocated differently when  brought  back  into  memory,  any
            subsequent GOTO may fail.






                                    5-25
                                 FIELD TEST


   5.5  SIZE OF OVERLAY PROGRAMS

   Although most programs have a consistent size, the size of an  overlay
   program  depends  on  which  overlays  are  in  memory.   This  can be
   ascertained by using the /COUNTER switch when linking the program.  To
   do  this,  place  /COUNTER  after  the /LINK switch for the overlay of
   which you want to know the size, but before  the  next  /NODE  switch.
   For example,

        *OVLAY/LINK
        */COUNTER
        */NODE:TOP

   This gives you the size of the program when the  overlay  is  actually
   loaded into memory.  The display includes all routines loaded from the
   runtime libraries.  This allows you to determine which overlay is  the
   largest, and whether the program can be loaded without restructuring.



   5.6  DEBUGGING OVERLAID PROGRAMS

   COBDDT and ALGDDT can be used to debug overlay  programs,  but  FORDDT
   cannot.   To  use  DDT with an overlaid program, the program should be
   loaded using /SYMSEG:LOW, with local symbols for the desired modules.

   To set breakpoints in an overlay, put a subroutine in the  root  node,
   and  call  the  subroutine  from  the overlay.  Such a subroutine need
   consist only of a SUBROUTINE statement, a RETURN,  and  an  END.   The
   breakpoint  can  be  set  at this subroutine before the program starts
   running.

   RESET.  in FOROTS removes the symbol  table  when  a  FORTRAN  program
   starts  running.  The symbol table will return after the first overlay
   is called.  If you need the  symbols  for  debugging  the  root  link,
   insert  a  CALL  INIOVL at the beginning of the main program (refer to
   Section 5.7.1 for more information).  This  call  will  reinstall  the
   symbol  table.   LINK builds a separate symbol table for each overlay,
   so that all the  symbols  known  to  DDT  are  for  modules  that  are
   currently  in  memory.   Note  that  it is not possible to single-step
   through RESET.  The DDT commands $X  and  $$X  do  not  work.   Set  a
   breakpoint after RESET.  if you are debugging a root link, and use the
   DDT command $G.



   5.7  THE OVERLAY HANDLER

   LINK's overlay handler is the program  that  supervises  execution  of
   overlay structures defined by LINK switches.

   The overlay handler is in the file SYS:OVRLAY.REL.  Some installations


                                    5-26
                                 FIELD TEST


   will  install LINK Version 5 or later without the overlay handler that
   was shipped with it.  To find the version of the overlay handler, type
   the following:

        @LINK<RET>
        *SYS:OVRLAY<RET>
        */VALUE:%OVRLA<RET>
        [LNKVAL Symbol %OVRLA 501000210 defined]
        *

   The left halfword of $OVRLA contains the version number of the overlay
   handler,  and  should  be 501, corresponding to the Version 6 of LINK.
   The right halfword is the edit number, and should be 000210  if  field
   image, or greater if edits have been installed.

   When you load an overlay structure, the overlay handler is loaded into
   the  root  link  of  the  structure.   From  there  it  can  supervise
   overlaying operations, because the root link is always in your virtual
   address  space during execution.  During execution, when a link not in
   memory is called, the overlay handler brings  in  the  link,  possibly
   overlaying  one  or more links already in memory.  The overlay handler
   consists of self-modifying code and data, and  two  128-word  buffers.
   One  of these buffers, IDXBFR, contains a 128-word section of the link
   number index table.  This allows 256 links to be  directly  referenced
   at any one time.  The second buffer, INBFR, contains the preambles and
   relocation tables, if required, of the individual links.

   There are two ways of overlaying links during execution:

        1.  A call to a link not in memory implicitly calls  the  overlay
            handler to overlay one or more links with the required links.
            This action of the overlay  handler  is  transparent  to  the
            user.

        2.  An explicit call to  one  of  several  entry  points  in  the
            overlay  handler  can cause one or more links to be overlaid.
            These entry points and calls to them  are  discussed  in  the
            sections below.



   5.7.1  Calls to the Overlay Handler

   Overlays can be used transparently, or they can be  explicitly  called
   from  the  program.  Such calls are made to one of the entry points in
   the overlay handler.

   The overlay handler has five entry points that are available for calls
   from user programs.  To call the overlay handler from a MACRO program,
   you must use the standard calling sequence, which is:

        MOVEI     16,arglst


                                    5-27
                                 FIELD TEST


        PUSHJ     17,entry-name

   Where arglst is the address of the  first  argument  in  the  argument
   list, and entry-name is the entry-point name.

   The argument list must be of the form:

                  -n,,0          ;n is number of arguments
        arglst:   Z code,addr1   ;For first argument
                          .
                          .
                          .
                  Z code,addrn   ;For nth argument

        Where addr...  is the address of the argument.

   The legal values of "code" are 2 (for a link number), 17 (for an ASCIZ
   string), and 15 (for a character string descriptor).

   For each word of the argument list, the code  indicates  the  type  of
   argument.   The  code  occupies  the AC field, bits 9 through 12.  The
   address gives the location of the argument; it  can  be  indirect  and
   indexed.

   To call the overlay handler from a FORTRAN program, the call  must  be
   of the form:

        CALL subroutine (arglst)

   Where subroutine is the name of the desired subroutine, and arglst  is
   a list of arguments separated by commas.



   5.7.2  Overlay Handler Subroutines

   Each of the seven callable subroutines in the overlay handler  has  an
   entry  name  symbol  for use with MACRO, and a subroutine name for use
   with FORTRAN, as follows:















                                    5-28
                                 FIELD TEST


   MACRO Entry     FORTRAN                 Subroutine
   Name Symbol   Subroutine                 Function

     CLROV.        CLROVL     Specifies a non-writable overlay.

     GETOV.        GETOVL     Brings specified links into memory.

     INIOV.        INIOVL     Specifies the file from which  the  overlay
                              program   is   read,   if   the  load  time
                              specification is to be overridden.

     LOGOV.        LOGOVL     Specifies  or  closes  the  file  in  which
                              runtime  messages  from the overlay handler
                              are written.

     REMOV.        REMOVL     Removes specified links from memory.

     RUNOV.        RUNOVL     Moves into  memory  a  specified  link  and
                              begins execution at its start address.

     SAVOV.        SAVOVL     Specifies a writable overlay.


   Declaring a Non-Writable Link (CLROV.)

   You can declare an overlay link to be non-writable, using  the  CLROV.
   entry  point.  This does not immediately affect the program, but waits
   until the link is about to be overlaid or read in.   If  the  link  is
   already non-writable, this entry point has no effect.

























                                    5-29
                                 FIELD TEST


        Example

                  MOVEI          16,arglst
                  PUSHJ          17,CLROV.

                  -n,,0                         ;n is number of arguments
        arglst:   Z 17,addr1                    ;for first ASCIZ linkname
                        .
                        .
                        .
                  Z 17,addrn                    ;for nth ASCIZ linkname

                                 OR

                  -n,,0                         ;n is number of arguments
        arglst:   Z 2,addr1                     ;for first link number
                        .
                        .
                        .
                  Z 2,addrn                     ;for nth link number

        Where addr...  is the address of the argument.


   Getting a Specific Path (GETOV.)

   The subroutine to bring a specific path into core can be used to  make
   sure that a particular path is used when otherwise the overlay handler
   might have a choice of paths.  It is illegal to specify  a  path  that
   overlays the calling link.

   To call the subroutine from a FORTRAN program, use:

        CALL GETOVL (linkname,...,linkname)

   where each linkname is the ASCIZ name of a link in the desired path.

   To call the subroutine from a MACRO program, use the standard  FORTRAN
   calling sequence:

        MOVEI     16,arglst
        PUSHJ     17,GETOV.

   The argument list has one word for each link required  to  be  in  the
   path.

        Example

                  -n,,0                         ;n is number of arguments
        arglst:   Z 17,addr1
                        .
                        .
                        .

                                    5-30
                                 FIELD TEST


                  Z 17,addrn

                                 OR

                  -n,,0                         ;n is number of arguments
        arglst:   Z 2,addr1
                        .
                        .
                        .
                  Z 2,addrn

        Where addr...  is the address of the argument.


   Initializing an Overlay (INIOV.)

   The overlay initializing subroutine specifies a file  from  which  the
   overlay program is read.  This subroutine is used to override the file
   specified at load time.  The file specified  to  INIOV. can  have  any
   valid  specification,  but  it  must  be  in the correct format for an
   overlay (OVL) file.

   To call the subroutine from a FORTRAN program, use:

        CALL INIOVL ('filespec')

   where `filespec' is a literal constant that can  give  a  39-character
   device,  a  39-character  filename,  a  39-character  file type, and a
   39-character directory.

   To call the subroutine from a MACRO program, use the standard  FORTRAN
   calling sequence:

        MOVEI     16,arglst
        PUSHJ     17,INIOV.

   The argument list is of the form:

                -1,,0
        arglst: Z 17,address of ASCIZ filespec

   where filespec is an ASCIZ string (ASCII ending with nulls)  that  can
   give  a  39-character  device, a 39-character filename, a 39-character
   file type, and a 39-character directory.

                                    NOTE

           If you call INIOV. with no arguments, it initiates the
           overlay  handler and reads in the symbols for the root
           link, using the overlay file specified at  load  time.
           This  can be useful for debugging the root link before
           any successor links have been read in, because symbols
           are  not normally available until the first link comes

                                    5-31
                                 FIELD TEST


           into memory.

   Specifying an Overlay Log File (LOGOV.)

   You can specify an output file for runtime messages from  the  overlay
   handler.   These  messages  are  listed  in Section 5.5.  The log file
   entry includes the elapsed run  time  since  the  first  call  to  the
   overlay handler.

   To call this subroutine from a FORTRAN program, use:

        CALL LOGOVL ('filespec')

   where `filespec' is a literal constant  that  can  give  a  device,  a
   filename, a file type, and a PPN.

   To close the file, use

        CALL LOGOVL (0)

   You can omit the (0) argument to close the file.

   To call the subroutine from a MACRO program, use the standard  FORTRAN
   calling sequence:

        MOVEI     16,arglst
        PUSHJ     17,LOGOV.

   The argument list is of the form:

                -1,,0
        arglst: Z 17,address of ASCIZ filespec

   Where filespec is an ASCIZ string that can give a device, a  filename,
   a file type, and a PPN.

   To close the log file, the argument list is:

                -1,,0
        arglst: Z 17,address of word containing zero


   Removing Specific Links from Memory (REMOV.)

   The subroutine to remove specific links from memory, once they are  no
   longer  required,  can  be  used  to reduce core image size for faster
   execution.  Specifying removal of the calling link causes an error.

   To call the subroutine from a FORTRAN program, use:

        CALL REMOVL (linkname,...,linkname)



                                    5-32
                                 FIELD TEST


   Where each linkname is the ASCIZ name of a link  to  be  removed  from
   memory.

   To call the subroutine from a MACRO program, use the standard  FORTRAN
   calling sequence:

        MOVEI     16,arglst
        PUSHJ     17,REMOV.

   The argument list has one word for each link to be removed.

        Example

                  -n,,0                         ;n is number of arguments
        arglst:   Z 17,addr1
                        .
                        .
                        .
                  Z 17,addrn

                                 OR

                  -n,,0                         ;n is number of arguments
        arglst:   Z 2,addr1
                        .
                        .
                        .
                  Z 2,addrn

        Where addr...  is the address of the argument.


   Running a Specific Link (RUNOV.)

   The subroutine for running a specific  link  allows  you  to  transfer
   program  execution  to  the  start  address of a particular link.  (An
   error occurs if the link has no start address.)  If the  link  is  not
   already in memory, it and its path are brought in.

   You can use this subroutine to overlay the calling link,  because  the
   next  instruction  executed  is  the  start address of the named link;
   therefore, there is no automatic return to the calling link.

                                    NOTE

           The FORTRAN compiler does not generate start addresses
           for  subroutines.   FORTRAN  main  programs  cannot be
           loaded into non-root links.  Therefore, to use  RUNOVL
           to  transfer  control  to  a  FORTRAN  subroutine in a
           non-root link, you must use the /START switch at  load
           time to define a start address for the link.



                                    5-33
                                 FIELD TEST


   To call the subroutine RUNOVL from a FORTRAN program, use:

        CALL RUNOVL (linkname)

   Where linkname is the ASCIZ name of the link to be run.

   To call the subroutine from a MACRO program, use the standard  FORTRAN
   calling sequence:

        MOVEI     16,arglst
        PUSHJ     17,RUNOV.

   The argument list is of the form:

                -1,,0
        arglst: Z 17,address of ASCIZ linkname

                                     OR

                -1,,0
        arglst: Z 2,address of link number


   Declaring A Writable Link (SAVOV.)

   You can dynamically declare an overlay link to be writable by  calling
   SAVOV.    This   does  not  affect  the  current  state  of  the  code
   immediately, but waits until the link is about to be overlaid.  If the
   link is already writable, this symbol has no effect.

        Example

        MOVEI     16,arglst
        PUSHJ     17,SAVOV.

                  -n,,0                         ;n is number of arguments

        arglst:   Z 17,addr1                    ;for first ASCIZ linkname
                        .
                        .
                        .
                  Z 17,addrn                    ;for nth ASCIZ linkname

                                 OR

                  -n,,0                         ;n is number of arguments
        arglist:  Z 2,addr1                     ;for first link number
                        .
                        .
                        .
                  Z 2, addrn                    ;for nth link number



                                    5-34
                                 FIELD TEST


        Where addr...  is the address of the argument.

   If called with no arguments, SAVOV.  only  initializes  the  temporary
   file.



   5.7.3  Overlay Handler Messages

   This section lists  all  of  the  overlay  handler's  messages.   LINK
   messages, which have the LNK prefix, are given in Appendix B.

   For each overlay handler  message,  the  last  three  letters  of  the
   six-letter  code,  the severity, and the text of the message are given
   in boldface.  Then, in lightface type, comes  an  explanation  of  the
   message.

   When a message is issued,  the  three  letters  are  suffixed  to  the
   letters  OVL,  forming  a  6-letter  code  of  the  form  OVLxxx.  The
   explanation of the message is printed only if you use the /OVERLAY:LOG
   switch.

   The severity of a message determines whether  the  job  is  terminated
   when  the  message  is  issued.   Level  31 messages terminate program
   execution.  Level 8 messages are  warnings:   they  do  not  terminate
   execution,  but  the  error  may  affect the execution of the program.
   Level 1 messages are informational and are  printed  on  the  terminal
   only if you specified /OVERLAY:LOGFILE.


























                                    5-35
                                 FIELD TEST


   Code  Sev                     Message and Explanation

   ARC   31    Attempt to remove caller from link [name or number]

               The named link attempted to remove the  link  that  called
               it.   This  error  occurs  when  the  call  to  the REMOV.
               subroutine requests removal of the calling link.

   ARL    8    Ambiguous request in link number  [number]  for  [symbol],
               using link number [number]

               More than one successor  link  satisfies  a  call  from  a
               predecessor  link,  and  none  of  these  successors is in
               memory.  Since all their paths are of  equal  length,  the
               overlay handler has selected an arbitrary link.

   CDL   31    Cannot delete link [name or number], FUNCT. return  status
               [number]

               This is an internal LINK error, and  is  not  expected  to
               occur.    If   it   does,   please  notify  your  Software
               Specialist, or send a Software Performance Report (SPR) to
               DIGITAL.

               Return status is one of the following:

               1   Core already deallocated
               3   Illegal argument passed to FUNCT. module

   CGM   31    Cannot get memory from OTS, FUNCT. return status [octal]

               The system does not have enough free memory  to  load  the
               link.   The status is returned from the object-time system
               and depends on the particular FUNCT. function the  overlay
               handler  used.   See Section 5.7.4 for the FUNCT. function
               codes and status messages.

   CRF   31    Cannot read file [file] [reason]

               An error occurred when reading the overlay file.  The file
               was closed after the last successful read operation.

   CSM   31    Cannot shrink memory, FUNCT. return status [octal]

               A request to the object-time system to reduce  memory,  if
               possible,  failed.   This  error is not expected to occur.
               If it does, please notify your Software Specialist or send
               a Software Performance Report (SPR) to DIGITAL.

   CUF   31    Cannot update file [file] [reason]

               An error occurred when updating the TMP  file  into  which


                                    5-36
                                 FIELD TEST


               non-resident writable overlay links are written.

   CWF   31    Cannot write file [file] [reason]

               An error occurred when creating the TMP file used to store
               non-resident writable overlay links.

   DLN   1     Deleting link [name or number] after [hh:mm:ss]

               The named link has been removed from memory as a result of
               a  call  to  the  REMOV. subroutine.   The  time  given is
               elapsed time since the first call to the overlay  handler.
               This  message  is  output only to the overlay log file, if
               any.

   IAT   31    Illegal argument type on call to [subroutine]

               A user call to the named overlay handler  subroutine  gave
               an illegal type of argument.

   IEF   31    Input error for file [file] [reason]

               An error occurred while reading the OVL or TMP file.

   ILN   31    Illegal link number [number]

               A user call to one of the overlay handler subroutines gave
               an illegal link number as an argument.

   IMP   31    Impossible error condition at PC=[address]

               This is an internal error caused  by  monitor  call  error
               returns  that  should  not  occur.  This message is issued
               instead of the HALT message.  This error is  not  expected
               to  occur.   If  it  does,  please  notify  your  Software
               Specialist or send a Software Performance Report (SPR)  to
               DIGITAL.

   IPE   31    Input positioning error for file [file] [reason]

               An error occurred while reading the OVL or TMP file.

   IVN   8     Inconsistent version numbers

               The OVL and EXE files found were not created at  the  same
               time, and may not be compatible.

   LNM   31    Link number [decimal] not in memory

               A call to the REMOV.  subroutine  has  removed  the  named
               link from memory.  It must be restored by a call to GETOV.
               or RUNOV.


                                    5-37
                                 FIELD TEST


   MAN   31    Memory not available for  absolute  [link],  FUNCT. return
               status [octal]

               There is not enough room for the overlay handler  to  load
               the  specified  link  into the part of memory the link was
               built for.  Two options are available:  a) Use the  /SPACE
               switch at load time to reserve more space for the link, or
               b) Build  a  relocatable  overlay  using  the  RELOCATABLE
               option to the /OVERLAY switch at load time.

   MEF   31    Memory expansion failed, FUNCT. return status [octal]

               The overlay handler was unable to get free space from  the
               memory  manager.   Restructure  your  overlay  so that the
               minimum number of links are in memory at any time.

   NMS   8     Not enough memory to load symbols, FUNCT.   return  status
               [octal]

               There was not enough free space available to load  symbols
               into memory.

   NRS   31    No relocation table for symbols

               A relocation table was not included for the symbol  table.
               It  is  possible  that  LINK failed to load the relocation
               table because there wasn't enough room in memory.

   NSA   31    No start address for link [name or number]

               A user call to the RUNOV. subroutine requests execution to
               continue  at the start address of the named link, but that
               link has no start address.

   NSD   31    No such device for [file]

               An invalid device was specified.

   OEF   31    Output error for file [file] [reason]

               An error occurred when writing the overlay file.  The file
               was closed after the last successful write operation.

   OPE   31    Output positioning error for file [file] [reason]

               An error occurred while writing the TMP file used to  hold
               non-resident writable overlay links.

   OPP   31    Overlay handler in private page

               The overlay handler has been loaded  into  a  non-sharable
               page  of  the program.  Your program should not write into


                                    5-38
                                 FIELD TEST


               the pages occupied by the overlay handler.  Ask LINK for a
               map  of your program if there is doubt.  If the program is
               not writing into these pages, this error  may  reflect  an
               internal LINK error.  This error is not expected to occur.
               If it does, please notify your Software Specialist or send
               a Software Performance Report (SPR) to DIGITAL.

   RLL   1     Relocating link [name or number] at [address]

               The named relocatable link has been loaded  at  the  given
               address.   This  message is output only to the overlay log
               file.

   RLN   1     Reading in link [name or number] after [time]

               The named link has been loaded.  The time given is elapsed
               time  since  the  first call to the overlay handler.  This
               message is output only to the overlay log file.

   RMP   31    RMAP JSYS failed

               This is an internal error and is not  expected  to  occur.
               If it does, please notify your Software Specialist or send
               a Software Performance Report (SPR) to DIGITAL.

   RPA   31    RPACS JSYS failed

               This is an internal error and is not  expected  to  occur.
               If it does, please notify your Software Specialist or send
               a Software Performance Report (SPR) to DIGITAL.

   STS   8     OTS reserved space too small

               The object-time system does not have space for its minimum
               number  of  buffers.   Reload, using the /SPACE switch for
               the root link with an argument greater than 2000 (octal).

   ULN   31    Unknown link name [name]

               A call to one of the overlay handler subroutines  gave  an
               invalid link name as an argument.  Correct the call.

   USC   8     Undefined subroutine [name] called from [address]

               A required subroutine was not loaded.  The instruction  at
               the  given  program counter address calls for an undefined
               subroutine.   Correct  the  call  or  load  the   required
               subroutine.

   WLN   1     Writing [link] after [time]

               The overlay handler is  writing  out  a  writable  overlay


                                    5-39
                                 FIELD TEST


               link.



   5.7.4  The FUNCT. Subroutine

   Each DIGITAL-supplied object-time system has  a  subroutine  that  the
   overlay handler uses for memory management, I/O, and message handling.
   This subroutine has a single entry point, FUNCT., and is called by the
   sequence:

        MOVEI     16,arglst
        PUSHJ     17,FUNCT.

   The format of the argument list is:

                -<n+3>,,0
        arglst: Z 2,address of integer function code
                Z 2,address for error code on return
                Z 2,address for status code on return
                Z code,address of first argument
                  .
                  .
                  .
                Z code,address of nth argument

   Where function code is one of  the  function  codes  described  below;
   error  code  is  a  3-letter  ASCII mnemonic output by the object-time
   system (after ?, %, or [); and status (on return) contains one of  the
   following values:

        -1  Function not implemented
         0  Successful return
         n  Number of the error message

   Most object-time systems allocate separate space for their own use and
   for  the  use  of the overlay handler.  This minimizes the possibility
   that the overlay handler requests space that the object-time system is
   already using.

   The permitted function code arguments, their names, and their meanings
   are:

        Code   Name             Function

          0    ILL    Illegal function; returns -1 status.

          1    GAD    Get a specific segment of memory.

          2    COR    Get a given amount of memory from anywhere  in  the
                      space allocated to the overlay handler.



                                    5-40
                                 FIELD TEST


          3    RAD    Return a specific segment of memory.

          4    GCH    Get an I/O channel.

          5    RCH    Return an I/O channel.

          6    GOT    Get  memory  from  the  space  allocated   to   the
                      object-time system.

          7    ROT    Return memory to the object-time system.

         10    RNT    Get the initial runtime, in milliseconds, from  the
                      object-time system.

         11    IFS    Get the initial runtime file specification  of  the
                      program being run.

         12    CBC    Cut back core (if possible) to reduce job size.

         13    RRS    Read retain status (DBMS)

         14    WRS    Write retain status (DBMS)

         15    GPG    Get pages

         16    RPG    Return pages

         17    GPSI   Get TOPS-20 PSI channel

         20    RPSI   Return TOPS-20 PSI channel

         21    MPG    Get contiguous set of pages

   All FUNCT.  codes are reserved to DIGITAL.

   The   following   subsections   describe   each   function   of    the
   FUNCT. subroutine (except the reserved functions).


   ILL (0)  Function

   This function is illegal.  The  argument  list  is  ignored,  and  the
   status returned is -1.


   GAD (1)  Function

   The GAD function gets memory from a  specific  address  in  the  space
   allocated to the overlay handler.  The argument list points to:

        arg 1  Address of requested memory
        arg 2  Size of requested allocation (in words)


                                    5-41
                                 FIELD TEST


   A call to GAD with arg 2 equal to -1 requests all available memory.

   On return, the status is one of the following:

        0  Successful allocation
        1  Not enough memory available
        2  Memory not available at specified address
        3  Illegal arguments (address + size > 256K)


   COR (2)  Function

   The COR function gets memory from any available space allocated to the
   overlay handler.  The arguments are:

        arg 1  Undefined (address of allocated memory on return)
        arg 2  Size of requested allocation

   On return, the status is:

        0  Core allocated
        1  Not enough memory available
        3  Illegal argument (size > 256K)


   RAD (3)  Function

   The RAD function returns the memory starting at the specified  address
   to the overlay handler.  The arguments are:

        arg 1  Address of memory to be returned
        arg 2  Size of memory to be returned (in words)

   On return, the status is one of the following:

        0  Successful return of memory
        1  Memory cannot be returned
        3  Illegal argument (address or size > 256K)


   GCH (4)  Function

   Returns a status of 1.  The channel is not available.


   RCH (5)  Function

   Returns a status of 1.  The channel is not available.


   GCH (4)  Function



                                    5-42
                                 FIELD TEST


   The GCH function gets an input/output channel.  The arguments are:

        arg 1  Undefined (channel number allocated on return)
        arg 2  Ignored

   On return, the status is one of the following:

        0  Successful channel allocation
        1  No channels available


   RCH (5)  Function

   The RCH function returns an input/output channel.  Its arguments are:

        arg 1  Number of channel to be returned
        arg 2  Ignored

   On return, the status is one of the following:

        0  Channel released
        1  Channel number invalid for user


   GOT (6)  Function

   The  GOT  function  gets  memory  from  the  space  allocated  to  the
   object-time system.  Its arguments are:

        arg 1  Undefined (address of allocated memory on return)
        arg 2  Size of memory requested

   On return, the status is one of the following:

        0  Successful allocation
        1  Not enough memory available
        3  Illegal argument (size > 256K)


   ROT (7)  Function

   The ROT function  returns  memory  to  the  object-time  system.   Its
   arguments are:

        arg 1  Address of memory to be returned
        arg 2  Size of memory to be returned (in words)

   On return, the status is one of the following:

        0  Successful return of memory
        1  Memory cannot be returned
        3  Illegal argument (address or size > 256K)


                                    5-43
                                 FIELD TEST


   RNT (10)  Function

   The RNT function returns the initial runtime,  in  milliseconds,  from
   the  object-time  system.   (At  the  beginning  of  the  program, the
   object-time system will have executed a RUNTIM UUO; the result is  the
   time returned by RNT.)  Its arguments are:

        arg 1  Undefined (contains initial runtime on return)
        arg 2  Ignored

   On return, the runtime is in arg 1, and the status is 0.   The  status
   is 0.


   IFS (11)  Function

   Always returns a value of -1.  This function is not implemented.


   CBC (12)  Function

   The CBC function cuts back memory if possible, which reduces the  size
   of the job.  It uses no arguments, and the returned status is 0.

   RRS (13) Function ( Reserved for DBMS )

   Returns ARG1 = 0.  On return, the status is always 0.


   WRS (14) Function ( Reserved for DBMS )

   Returns ARG1 = 0.  On return, the status is always 0.


   GPG (15) Function

   The GPG function is used to fetch a page.  The arguments are:

               arg2:  size to be allocated, in words

   On return,
               arg1 = address of allocated memory, on page boundary

   and the status is one of the following:

               0 if allocated OK
               1 if not enough memory
               3 if argument error


   RPG (16) Function



                                    5-44
                                 FIELD TEST


   The RPG function is used to return pages.  The arguments are:

               arg1:  address (a word)
               arg2:  size (in words)

   On return, the status is:
               0 if deallocated OK
               1 if wasn't allocated
               3 if argument error


   GPSI (17)

   The GPSI function can be used  to  get  a  PSI  channel  for  programs
   running  in  a  TOPS-20  environment.   This entry point provides only
   controlled access to the PSI tables.  GPSI arranges  that  the  tables
   exist  and  that SIR and EIR have been done but does not do AIC or any
   other JSYS necessary  to  set  up  the  channel  (ATI  or  MTOPR,  for
   example).

   The arguments are:

               arg1: channel number,
                      or -1 to allocate any user-assignable channel
               arg2: level number
               arg3: address of interrupt routine

   On return, arg1 contains the  channel  number  allocated  (if  -1  was
   originally specified).  On return, the status is:

                0 if OK
                1 if channel was already assigned
                2 if no free channels
                3 if argument error

                                    NOTE

           This function is used by TOPS-20 programs.   It  is  a
           reserved function in the TOPS-10 environment.

   RPSI (20) Function

   This entry point provides only controlled access to  the  PSI  tables.
   It  does  not do DIC or any other JSYS necessary to release a channel.
   It just clears the level and interrupt address fields in CHNTAB.

   This function accepts the following argument:
               arg1:  channel number

   On return the status is one of the following:
               0 if OK
               1 if channel wasn't in use


                                    5-45
                                 FIELD TEST


               3 if argument error

                                    NOTE

           This function is used by TOPS-20 programs.   It  is  a
           reserved function in the TOPS-10 environment.


   MPG (21) Function

   This function gets a contiguous set of pages.  The pages requested are
   always  allocated  from  the  section  FOROTS  is in.  The user cannot
   depend upon this call to either create or destroy the pages.

        arg 1     first page number to allocate.  The page number must be
                  in the range 0 to 777.

        arg 2     number of pages to allocate

   On return, the status is one of the following:

        0         successful deallocation of all given pages
        1         one or more pages was not allocated through MPG
        3         illegal argument (bad page number count)






























                                    5-46
                                 FIELD TEST


   5.8  THE OVERLAY (OVL) FILE

   This section contains diagrams of the contents  of  the  overlay  file
   output  by  LINK  as  a  result of the /OVERLAY switch.  The following
   diagram shows the overall scheme of the file:


                      Scheme of the Overlay (OVL) File

          |=======================================================|
          |                                                       |
          |                    Directory Block                    |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                   Link Number Table                   |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                    Link Name Table                    |
          |                                                       |
          |=======================================================|
          |                                                       |
          |               Writable Link Flags Table               |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                         Link                          |
          |                                                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                                                       |
          |                         Link                          |
          |                                                       |
          |=======================================================|
















                                    5-47
                                 FIELD TEST


   5.8.1  The Directory Block

   The following diagram shows the contents of the Directory Block:


                              Directory Block

           |=======================================================|
   .DIHDR: |       0 (Reserved)        | Length of Directory Block |
           |-------------------------------------------------------|
   .DIRGN: |                     0 (Reserved)                      |
           |-------------------------------------------------------|
   .DIVER: |       Version Number of Corresponding EXE file        |
           |-------------------------------------------------------|
   .DILPT: | -(Size of Link No. Table) |Link Number Table Block No.|
           |-------------------------------------------------------|
   .DINPT: |-(Size of Link Name Table) | Link Name Table Block No. |
           |-------------------------------------------------------|
   .DIWPT: |-(Size of Writable Flg Tbl)| Writable Flg Tbl Block No |
           |-------------------------------------------------------|
   .DIFLG: |                         Flags                         |
           |-------------------------------------------------------|
           |                     0 (Reserved)                      |
           |=======================================================|


   In the fourth word above, the size of the Link Number Table (in words)
   is  half  the  number of links (rounded upward); the Link Number Table
   Block No. is the number of the 128-word disk block containing the Link
   Number Table.  (There are four disk blocks per disk page.)

   In the fifth word above, the size of the Link Name Table (in words) is
   twice the number of links; the Link Name Table Block No. is the number
   of the 128-word disk block containing the Link Name Table.

   The table defined by the .DIWPT word above consists  of  a  string  of
   two-bit   bytes.    The  first  bit,  OW.WRT,  indicates  whether  the
   corresponding overlay link is writable.  This bit  is  set  under  the
   control of a REL block of type 1045 (writable links).  The second bit,
   OW.PAG, indicates whether the corresponding overlay link is  currently
   paged  into  the  runtime  overlay temporary file.  This is strictly a
   run-time flag and should be zero in the overlay file.   This  flag  is
   defined in the overlay file to allow the overlay handler to set up its
   flag table with a single read operation.

   The .DIFLG word in the directory block contains a single bit flag (bit
   0).   If  this  bit  is  set,  the  overlay file contains at least one
   writable overlay.  This information is also contained in the  Writable
   Link  Table.   However,  by  having  the  information available in the
   directory block the overlay handler can determine  if  any  links  are
   writable  without scanning the Writable Link Table.  All other bits in
   the .DIFLG word are reserved and must be zero.


                                    5-48
                                 FIELD TEST


                                    NOTE

           If you request both writable and relocatable overlays,
           only  halfwords  known  to be relocatable at load time
           will  be  correctly  relocated  when   the   link   is
           refetched.




   5.8.2  The Link Number Table

   The following diagram shows the contents of the Link Number Table:


                             Link Number Table

          |=======================================================|
          |     Pointer to Link 0     |     Pointer to Link 1     |
          |-------------------------------------------------------|
          |     Pointer to Link 2     |     Pointer to Link 3     |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |    Pointer to Link n-1    |     Pointer to Link n     |
          |=======================================================|


   Each pointer is a disk block number.  Any unused  words  in  the  last
   disk block of the Link Number Table are zeros.



   5.8.3  The Link Name Table

   The following diagram shows the contents of the Link Name Table:


                              Link Name Table

          |=======================================================|
          |                      Link Number                      |
          |-------------------------------------------------------|
          |                   SIXBIT Link Name                    |
          |=======================================================|
                                      .
                                      .
                                      .
          |=======================================================|
          |                      Link Number                      |


                                    5-49
                                 FIELD TEST


          |-------------------------------------------------------|
          |                   SIXBIT Link Name                    |
          |=======================================================|


   Any unused words in the last disk block of the  Link  Name  Table  are
   zeros.



   5.8.4  The Overlay Link

   The following diagram shows the overall scheme of each overlay link in
   the overlay file:


                         Scheme of an Overlay Link

          |=======================================================|
          |                                                       |
          |                        Preamble                       |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                      Code for Link                    |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                  Link Control Section                 |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                         EXTTAB                        |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                         INTTAB                        |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                    Relocation Table                   |
          |                                                       |
          |=======================================================|
          |                                                       |
          |                 Other Relocation Tables               |
          |                                                       |
          |=======================================================|







                                    5-50
                                 FIELD TEST


   The Preamble

   The following diagram shows  the  contents  of  the  preamble  for  an
   overlay link:


                                  Preamble

         |=======================================================|
         |       0 (Reserved)        |    Length of Preamble     |
         |-------------------------------------------------------|
         |       0 (Reserved)        |       0 (Reserved)        |
         |-------------------------------------------------------|
         |       0 (Reserved)        |        Link Number        |
         |-------------------------------------------------------|
         |                   SIXBIT Link Name                    |
         |-------------------------------------------------------|
         |Pointer to List of Bound Links Starting with Root Link |
         |-------------------------------------------------------|
         | Pointer to List of Bound Links Ending with Root Link  |
         |-------------------------------------------------------|
         |                   Equivalence Pointer                 |
         |-------------------------------------------------------|
         |               Address of Control Section              |
         |-------------------------------------------------------|
         |                         Flags                         |
         |-------------------------------------------------------|
         |         Absolute Address at Which Link Loaded         |
         |-------------------------------------------------------|
         |         Length of Link (Code through INTTAB)          |
         |-------------------------------------------------------|
         |          Disk Block Number of Start of Link Code      |
         |-------------------------------------------------------|
         |                     0 (Reserved)                      |
         |-------------------------------------------------------|
         |           Disk Block Number of Relocation Table       |
         |-------------------------------------------------------|
         |        Disk Block Number of Other Relocation Tables   |
         |-------------------------------------------------------|
         |                     0 (Reserved)                      |
         |-------------------------------------------------------|
         |           Disk Block Number of Radix-50 Symbols       |
         |-------------------------------------------------------|
         |Block Number of Relocation Tables for Radix-50 Symbols |
         |-------------------------------------------------------|
         |        Next Free Memory Location for Next Link        |
         |=======================================================|







                                    5-51
                                 FIELD TEST


   Code for the Link

   The code for each link consists of a core image that  was  constructed
   from  the  REL files placed in the link.  This core image contains the
   code and data for the link.

   The Control Section

   The following diagram shows the contents of the Control Section:


                              Control Section

         |=======================================================|
         |       0 (Reserved)        |     Length of Header      |
         |-------------------------------------------------------|
         |       0 (Reserved)        |       0 (Reserved)        |
         |-------------------------------------------------------|
         |       0 (Reserved)        |        Link Number        |
         |-------------------------------------------------------|
         |                   SIXBIT Link Name                    |
         |-------------------------------------------------------|
         |  Ptr to Ancestor in Core  | Ptr to Successor in Core  |
         |-------------------------------------------------------|
         | -(Length of Symbol Table) |  Address of Symbol Table  |
         |-------------------------------------------------------|
         |       0 (Reserved)        |  Start Address for Link   |
         |-------------------------------------------------------|
         |Memory Needed to Load Link |   First Address in Link   |
         |-------------------------------------------------------|
         |    -(Length of EXTTAB)    |     Pointer to EXTTAB     |
         |-------------------------------------------------------|
         |    -(Length of INTTAB)    |     Pointer to INTTAB     |
         |-------------------------------------------------------|
         |               Address of Symbols on Disk              |
         |-------------------------------------------------------|
         |                  Relocation Address                   |
         |-------------------------------------------------------|
         |              Copy of Block Number for Code            |
         |-------------------------------------------------------|
         |-(Length of Radix-50 SymTab)|Blk No. of Radix-50 SymTab|
         |=======================================================|
   Ptr = Pointer











                                    5-52
                                 FIELD TEST


   The EXTTAB Table

   The following diagram shows the contents of the EXTTAB table:


                                   EXTTAB

          |=======================================================|
          |                     JSP 1,.OVRLA                      |
          |-------------------------------------------------------|
          |           Flags           |Address of Callee's INTTAB |
          |-------------------------------------------------------|
          |   Callee's Link Number    |Ptr to Callee's Control Sec|
          |-------------------------------------------------------|
          |     Backward Pointer      |      Forward Pointer      |
          |=======================================================|
                                      .
                                      .
                                      .
          |=======================================================|
          |                     JSP 1,.OVRLA                      |
          |-------------------------------------------------------|
          |           Flags           |Address of Callee's INTTAB |
          |-------------------------------------------------------|
          |   Callee's Link Number    |Ptr to Callee's Control Sec|
          |-------------------------------------------------------|
          |     Backward Pointer      |      Forward Pointer      |
          |=======================================================|
          Ptr = Pointer


   The flags in the left half of  the  second  word  have  the  following
   meanings:

        Bit  Meaning (if bit is on)

         0   Module is in core.
         1   Module is in more than one link.
         2   Relocatable link is already relocated.















                                    5-53
                                 FIELD TEST


   The INTTAB Table

   The following diagram shows the contents of the INTTAB table:


                                   INTTAB

          |=======================================================|
          |       0 (Reserved)        |  Address of Entry Point   |
          |-------------------------------------------------------|
          |       0 (Reserved)        |      Forward Pointer      |
          |=======================================================|
                                      .
                                      .
                                      .
          |=======================================================|
          |       0 (Reserved)        |  Address of Entry Point   |
          |-------------------------------------------------------|
          |       0 (Reserved)        |      Forward Pointer      |
          |=======================================================|


































                                    5-54
                                 FIELD TEST


   The Relocation Table

   The following diagram shows the contents of the Relocation Table:


                              Relocation Table

          |=======================================================|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |=======================================================|


   The Relocation Table contains one bit for each halfword of  the  link.
   If  the  bit  is  on,  the  halfword is relocatable; if it is off, the
   halfword is not relocatable.

   The first word contains the relocation bits for the first  22  (octal)
   words  of  the  link; the second word contains the relocation bits for
   the next 22 (octal) words; and so forth for all words in the link.

   This table exists only when relocatable overlays  are  requested  with
   the /OVERLAY:RELOCATABLE switch.


























                                    5-55
                                 FIELD TEST


   The Other Relocation Tables

   The following diagram shows  the  contents  of  the  Other  Relocation
   Tables:


                          Other Relocation Tables

          |=======================================================|
          |        Number of Words Following for This Link        |
          |-------------------------------------------------------|
          |        Link Number        |   Planned Load Address    |
          |-------------------------------------------------------|
          |    Relocation Halfword    |   Ptr to Words of Code    |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |    Relocation Halfword    |   Ptr to Words of Code    |
          |=======================================================|
                                      .
                                      .
                                      .
          |=======================================================|
          |        Number of Words Following for This Link        |
          |-------------------------------------------------------|
          |        Link Number        |   Planned Load Address    |
          |-------------------------------------------------------|
          |    Relocation Halfword    |   Ptr to Words of Code    |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |    Relocation Halfword    |   Ptr to Words of Code    |
          |=======================================================|
          Ptr = Pointer

   This table exists only when relocatable overlays have  been  requested
   with  the OVERLAY/RELOCATABLE switch.  The Other Relocation Tables are
   used to hold internal LINK references.












                                    5-56











                                 CHAPTER 6

                                   PSECTs



   PSECTs (Program SECTions) are programmer- or system-defined regions of
   code  and data that LINK relocates in memory.  PSECTs are used for two
   reasons:

         o  To load extended addressing programs.

         o  To structure a program's memory space.



   6.1  LOADING PROGRAMS WITH PSECTs

   When loading  programs  with  PSECTs  (including  extended  addressing
   programs),  you  must specify the origin of the PSECT.  LINK then uses
   this PSECT origin to store the data in the PSECTs.

   To specify a PSECT origin, include the origin in the source program or
   use  the  LINK  /SET  switch.  See the appropriate language manual for
   including the origin in the source program and Chapter 3 for the  /SET
   switch.

   Defining an upper bound is also important when  loading  PSECTs.   The
   LINK  /LIMIT  switch defines an upper bound for a PSECT.  If the PSECT
   loads to this bound, LINK returns a  warning  and  an  error  message.
   Despite  these  messages, LINK continues to process input files and to
   load code.  The warning is:

        %LNKPEL PSECT [psect] exceeded limit of [address]

   Although LINK does continue to process input files and load code,  the
   program  is  incomplete and should not be used.  LINK does produce the
   following fatal error:

        ?LNKCFS Chained fixups have been suppressed

   Chained  fixups  are  a  method  that  LINK  uses  to  resolve  symbol
   references.  See the Glossary for a definition of chained fixups.


                                    6-1
                                 FIELD TEST


   Using /LIMIT to  define  an  upper  bound  prevents  unintended  PSECT
   overlaps.   PSECT  overlaps  can  cause LINK to loop and produce other
   unpredictable behavior.

   For example, the LRGPRO and BIGPRO modules each  contain  two  PSECTs,
   BIG  and GRAND.  LRGPRO is loaded and /COUNTERS is used to check PSECT
   origins and current values.  PSECT origins are found by looking  under
   the initial value column and PSECT current values are found by looking
   under the current value column of the  /COUNTERS  output.   The  upper
   bound is found by looking under the limit value column.

   @LINK<RET>
   */SET:BIG:1000<RET>
   */SET:GRAND:5400<RET>
   *LRGPRO<RET>
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.     initial value   current value   limit value
           .LOW.           0               140             1000000
           BIG             1000            5100            1000000
           GRAND           5400            10500           1000000
           Absolute code loaded]
   *

   /COUNTERS shows that the current value for PSECT BIG and  the  initial
   value for PSECT GRAND are close together in memory.  The current value
   for BIG is 5100 and the PSECT origin for GRAND is  5400.   The  /LIMIT
   switch  can now be used to restrict PSECT BIG's current value to PSECT
   GRAND's initial value using the following:

   */LIMIT:BIG:GRAND<RET>

   /LIMIT prevents an unintended overlap because it causes LINK to  issue
   a  warning  if  the current value for BIG exceeds GRAND's origin.  The
   warning is:

   %LNKPEL PSECT [psect] exceeded limit of [address]

   The warning message indicates that the PSECTs overlapped, and that BIG
   and  GRAND  need  to be farther apart in memory.  The /COUNTERS switch
   shows a new current value greater than 5400.  Notice  that  the  limit
   set with the /LIMIT switch is shown in the limit value column.

   *BIGPRO<RET>
   %LNKPEL PSECT BIG exceeded limit of 5400
           detected in module .MAIN from file BIGPRO.REL.1
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.     initial value   current value   limit value
           .LOW.           0               140             1000000
           BIG             1000            6300            5400
           GRAND           5400            10500           1000000]
           Absolute code loaded]



                                    6-2
                                 FIELD TEST


   /GO continues loading the program, and LINK issues a warning and fatal
   error message.  The warning is:

   %LNKPOV Psects [psect] and [psect] overlap from address  [address]  to
   [address]

   The fatal error message is:

   ?LNKCFS chained fixups have been suppressed

   For example,

   */GO<RET>
   %LNKPOV Psects BIG and GRAND overlap from address 5400 to 6300
   ?LNKCFS chained fixups have been suppressed
   @

   Now, LINK is re-run and the PSECTs are moved farther apart in  memory.
   In this example, GRAND's origin is reset from 5400 to 7000.

   @LINK<RET>
   */SET:BIG:1000<RET>
   */SET:GRAND:7000<RET>
   *LRGPRO<RET>
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.    initial value  current value  limit value
           .LOW.          0              140            1000000
           BIG            1000           5100           1000000
           GRAND          7000           10500          1000000]

   */LIMIT:BIG:GRAND<RET>
   *BIGPRO<RET>
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.    initial value  current value  limit value
           .LOW.          0              140            1000000
           BIG            1000           6300           5400
           GRAND          7000           10500          1000000]
   */GO<RET>
   @



   6.2  PSECT ATTRIBUTES

   PSECT attributes specify how LINK stores a PSECT in  memory,  and  the
   page access of the PSECT.

   The CONCATENATED or  OVERLAID  attribute  specifies  how  LINK  stores
   PSECTs, and the RONLY and RWRITE attributes specify the page access.





                                    6-3
                                 FIELD TEST


   6.2.1  CONCATENATED and OVERLAID

   LINK uses the CONCATENATED or OVERLAID attributes when loading  PSECTs
   into memory.  These attributes are specified when the PSECT is defined
   in the source program, and are contained in REL Blocks  24  and  1050.
   See  Appendix  A for information on these blocks.  If the attribute is
   not specified, LINK uses CONCATENATED.

   The following example illustrates how PSECTs are stored in memory.  In
   this  example,  modules MAINKO and MAINKC contain three PSECTs, ALPHA,
   BETA, and GAMMA.  There is an additional  module  named  SUBMD1.   The
   ALPHA  and  BETA  PSECTs  have  the  CONCATENATE attribute.  The GAMMA
   PSECT, which is a data PSECT declared in each module,  has  attributes
   defined  differently  in  each module to illustrate the differences in
   memory storage.  GAMMA has the OVERLAID attribute  defined  in  MAINKO
   and the CONCATENATED attribute defined in MAINKC.

   First, LINK is run and the origin is set for PSECTs ALPHA,  BETA,  and
   GAMMA.

   @LINK<RET>
   */SET:ALPHA:3000/SET:BETA:5000/SET:GAMMA:7000<RET>

   Next, MAINKO is loaded with GAMMA defined as OVERLAID,  and  /COUNTERS
   is used to display the initial, current, and limit values.

   *MAINKO         ;OVERLAID GAMMA<RET>
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.    initial value  current value  limit value
           ALPHA          3000           3017           1000000
           BETA           5000           5011           1000000
           GAMMA          7000           7025           1000000]

   Now, SUBMD1 is loaded, /COUNTERS is used, and /GO is used to load  the
   modules  and  exit LINK.  Notice that the current values for ALPHA and
   BETA have increased, and that the current value for GAMMA remains  the
   same.

   *SUBMD1<RET>
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.    initial value  current value  limit value
           ALPHA          3000           3033           1000000
           BETA           5000           5041           1000000
           GAMMA          7000           7025           1000000]
   */GO<RET>
   @

   In the following example, LINK is run and the origin is set for PSECTs
   ALPHA, BETA, and GAMMA.

   @LINK<RET>
   */SET:ALPHA:3000/SET:BETA:5000/SET:GAMMA:7000<RET>


                                    6-4
                                 FIELD TEST


   Now, MAINKC is loaded with GAMMA defined as CONCATENATE, and /COUNTERS
   is used.

   *MAINKC  ;CONCATENATED GAMMA<RET>
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.    initial value  current value  limit value
           ALPHA          3000           3017           1000000
           BETA           5000           5011           1000000
           GAMMA          7000           7025           1000000]
   *


   Next, SUBMD1 is loaded, /COUNTERS is used, and /GO is used to load the
   modules and exit LINK.  Notice that all current values have increased.

   *SUBMD1<RET>
   */COUNTERS<RET>
   [LNKRLC Reloc. ctr.    initial value  current value  limit value
           ALPHA          3000           3033           1000000
           BETA           5000           5041           1000000
           GAMMA          7000           7035           1000000]
   */GO<RET>
   @



   6.2.2  RONLY and RWRITE

   The RONLY and RWRITE attributes set the page access for PSECTs.  RONLY
   defines  the  page  access to be read-only and RWRITE defines the page
   access to be read/write.  These  attributes  are  set  in  the  source
   program.  If the attribute is not set, LINK uses RWRITE.

   For example, the following MACRO statement defines  read/write  access
   for the RED PSECT.

        .PSECT RED/RWRITE,1000

   1000 is the PSECT's origin.

   LINK sets the page access to read-only if a memory page contains  part
   or  all  of a read-only PSECT even if a read/write PSECT exists on the
   same page.











                                    6-5
























































                                    7-1











                                 CHAPTER 7

                                    PDVs



   LINK stores information about the program that it is  loading  into  a
   PDV or JOBDAT.  A PDV (Program Data Vector) is a block of information.
   JOBDAT is the job data area.

   LINK stores information in a PDV:

         o  for extended addressing programs.

         o  if a PSECT has an origin below 140.

         o  if you specify a PDV using /PVBLOCK or /PVDATA.

         o  if /NOJOBDAT is used.

   LINK stores information in JOBDAT for most section zero programs.

   LINK stores  such  information  as  debugger  symbol  table  pointers,
   version numbers, and memory use.

   Although LINK builds no more than one PDV per load, a program can  use
   the  TOPS-20  PDVOP% JSYS at runtime to build new PDVs or to find PDVs
   associated with object time systems  and  utilities  merged  into  the
   address  space.   LINK  cannot  build  a  PDV  for a program that uses
   overlays.

   At link time, you can use the /PVBLOCK and /PVDATA switches to request
   a  PDV,  control  its  memory  location,  or change its contents.  See
   Chapter 3 for information on these switches.

   Each PDV contains  location  .PVCST  reserved  for  customer  use.   A
   typical  use  for  this location might be to point to the address of a
   transfer vector that contains entry points to a utility package.   Any
   program that wants to call the utility can then use the PDVOP% JSYS to
   find the address of the transfer vector.  This eliminates the need  to
   build  the  transfer  vector  address  of  the  utility package into a
   program.



                                    7-1
                                 FIELD TEST


   For more information about the  PDVOP%  JSYS,  refer  to  the  TOPS-20
   Monitor Calls Reference Manual.




















































                                    7-2
                                 FIELD TEST


   7.1  PDV FORMAT

   The format of a PDV follows:

   Word   Symbol                Meaning

    0     .PVCNT    is the length of the PDV including this word.

    1     .PVNAM    points to the name in ASCIZ of this PDV.  The default
                    PDV name is nnnLNK, where nnn is the job name.

                    The following rules apply to the  assignment  of  PDV
                    names.   If these rules are followed, conflicting PDV
                    names can be avoided:

                    1.  PDV names assigned by DIGITAL  will  contain  the
                        percent  character  (%).   PDV  names assigned by
                        users should not contain the percent character.

                    2.  All PDV names containing the period character (.)
                        are reserved to DIGITAL for future use.

                    3.  The dollar sign character  ($)  is  reserved  for
                        special    use:     PDV   names   of   the   form
                        string1$string2  are  reserved  for  the  special
                        class  of  use  named  by string1.  Rules 1 and 2
                        still apply in this case.

                    As a  general  guideline,  PDV  names  should  be  as
                    specific  as  possible  to  avoid  name conflicts and
                    confusion.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.

    2     .PVEXP    points to a counted vector of exported information.

                    A counted vector is a contiguous block of information
                    where  the  length  of  the block is contained in the
                    first word.  A PDV is an example of a counted vector.

                    Exported information is information that is available
                    for use by other programs.

                    By convention the remainder of the block  is  defined
                    by  the  program.   If  a  program  class exists, the
                    program class defines the remainder of  the  program.
                    See  the third rule in the PDV naming rules above for
                    program class.



                                    7-3
                                 FIELD TEST


                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.

    3     .PVREE    is a word reserved for DIGITAL and must be zero.

    4     .PVVER    is the  program's  version  number.   See  .JBVER  in
                    Appendix C for more information.

    5     .PVMEM    points to the static memory  map  for  this  program.
                    See Section 7.2 for a description of the memory map.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.

    6     .PVSYM    points to the symbol table vector for  this  program.
                    See Section 7.3 for a description of this vector.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.

    7     .PVCTM    is the time that your program was compiled in TOPS-20
                    format.

   10     .PVCVR    is the version number of the main program's compiler.
                    See .JBVER in Appendix C for more information.

   11     .PVLTM    is the time that the program was  loaded  in  TOPS-20
                    format.

   12     .PVLVR    is LINK's version number.

   13     .PVMON    points  to  a  monitor  data  block.   (Reserved  for
                    DIGITAL.)

   14     .PVPRG    points to a program data block.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.








                                    7-4
                                 FIELD TEST


   15     .PVCST    points to a customer-defined data block.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.



   7.2  THE PDV STATIC MEMORY MAP

   LINK creates the static memory map along with the  PDV.   This  static
   memory map can be used as a resource in dynamic memory allocation.  In
   addition to containing information about allocated pages in use,  this
   memory  map  contains  information  about pages that are allocated but
   zero.

   In the PDV, the .PVMEM (5) word points to the program's memory map.

   The  memory  map  is  a  variable  length  table  of  variable  length
   subtables.

        ===================================                             ^
        |        Memory Map Table         |                             |
        |---------------------------------|      ^                      |
        |                                 |      |       Variable       |
        |            Subtable             |      |                      |
        |                                 |      |        Lengths       |
        |---------------------------------|      V                      |
                         .                                              |
                         .                                              |
                         .                                              |
        |---------------------------------|      ^                      |
        |                                 |      |                      |
        |            Subtable             |      |                      |
        |                                 |      |                      |
        |---------------------------------|      V                      |
        ===================================                             V

   A subtable defines the beginning and end  of  a  block  of  contiguous
   words of memory with the same read/write attributes.

   The addresses in the subtable are ordered from lowest to highest  with
   the  lowest  block  of  memory entered into the subtable first and the
   highest entered into the subtable last.









                                    7-5
                                 FIELD TEST


   The format of the memory map is illustrated below.


          --          0                17|18                 35   
          |           |=========================================
          |           |        Length Of  Table In Words       |   
          |      --   ------------------------------------------
          |      |    |   Access  Bits   | Subtable Length "n" |   
          |Sub-  |    ------------------------------------------   
          |table |    |       Lowest Address  Of  Block        |   
          |  n   |    ------------------------------------------
   Memory |      |    |       Highest  Address  Of  Block      |   
   Map    |      |    ------------------------------------------
          |      |    /                                        /   
          |      |    /                                        /   
          |      --   ------------------------------------------   
          |                              .
          |                              .
          |                              .
          |      --   ------------------------------------------
          |      |    |   Access Bits    | Subtable Length "n" |
          |Sub-  |    ------------------------------------------
          |table |    |       Lowest  Address  Of  Block       |
          |  n   |    ------------------------------------------
          |      |    |       Highest  Address  Of  Block      |
          |      |    ------------------------------------------
          |      |    /                                        /
          |      --   /                                        /
          --          ==========================================


                                 Memory Map


   Word   Symbol    Meaning

   0      .MMLEN    is the length in  words  of  the  entire  memory  map
                    table, including this word.


                                  Subtable


   Word   Symbol    Meaning

   0      .MMDAT    is  the  first  subtable  word   and   contains   two
                    half-words:  MM%ACC and MM%LEN.

                    MM%ACC    contains the block access bits.  The access
                              bits  define  the block attributes, namely,
                              whether  this   block   is   read-only   or
                              read/write.


                                    7-6
                                 FIELD TEST


                              These bits are set  according  to  how  the
                              PSECT  attributes  are  set  in  the source
                              program.   LINK  defaults  read  and  write
                              attributes  if  the source program does not
                              explicitly set attributes.  All  blocks  in
                              the  memory  map  implicitly  have read and
                              execute access.  If bit 3, MM%WR,  is  set,
                              the  block  is  writable.  Undefined access
                              bits are reserved for DIGITAL and  must  be
                              zero.

                    MM%LEN    contains the subtable length including  the
                              first  word.   The  length of a subtable is
                              normally  3,  but   can   be   greater   if
                              additional   information  is  stored  after
                              .MMHGH.  This area after .MMHGH is reserved
                              for DIGITAL.

                              To obtain the address of the next subtable,
                              add  the  length of the current subtable to
                              the address of the current  subtable.   For
                              example,  if  the  length  of  the  current
                              subtable is 5 and its address is 15672, the
                              address of the subtable following is 15677.

   1      .MMLOW    is the address of the  first  word  of  a  contiguous
                    block of memory with the same read/write or read-only
                    attributes.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.

   2      .MMHGH    is the address of the last word of the block.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.



   7.3  SYMBOL TABLE VECTOR

   A symbol table vector is a pointer to the symbol tables of a  program.
   There  is one symbol table vector, and an undefined and defined symbol
   table per program.

   The .PVSYM (6) word in the PDV points to the symbol table vector.   If
   there  is  no  symbol  table (for example, when you use /NOSYM at link
   time), the .PVSYM word is 0.  If LINK builds the symbol table  vector,


                                    7-7
                                 FIELD TEST


   it always contains the defined and undefined symbol table pointers.

   The symbol table vector contains subtables that point to  each  symbol
   table  and  gives their length and type.  Each subtable is three words
   long, although only the first  two  words  are  currently  used.   The
   format of a symbol table vector is illustrated below.


                      0        5|6                     35
           --         ===================================
   Symbol  |          |    Vector  Length  In  Words    | 
   Table   |      --  -----------------------------------
   Vector  |      |   |   Type  |  Symbol Table Length  | 
           | Sub- |   ----------------------------------- 
           | Table|   |  Symbol  Table  Pointer         | 
           |   n  |   -----------------------------------
           |      |   | Reserved For DIGITAL, Must Be 0 |
           |      --  -----------------------------------
           |                         .
           |                         .                    
           |                         .                    
           |      
           | Sub- --   -----------------------------------
           | Table|    |   Type |   Symbol  Table Length |
           |   n  |    -----------------------------------
           |      |    |  Symbol  Table  Pointer         |
           |      |    -----------------------------------
           |      |    | Reserved For DIGITAL, Must Be 0 |
           --     --   ===================================


                                Symbol Table


   Word   Symbol    Meaning

   0      .STLEN    defines the length  in  words  of  the  symbol  table
                    vector including this word.


                                  Subtable


   Word   Symbol    Meaning

   0      .STDAT    is the first subtable word and contains  two  fields:
                    ST%TYP and ST%LEN.

                    ST%TYP    is a 6-bit field that contains  the  symbol
                              table type.

                              The types are:


                                    7-8
                                 FIELD TEST


                              Code   Name    Type

                              0      .UNDFD  Undefined
                              1      .R50D   Radix-50 defined symbols
                              2      .R50U   Radix-50 undefined symbols
                              3-37           Reserved for DIGITAL
                              40-77          Reserved for customers

                  ST%LEN    is a 30-bit field that contains the length in
                            words of the particular symbol table.

   1      .STPTR    is the lowest word in the table.

                    If bit 0 is 1, this  word  contains  a  section-local
                    address.   If bit 0 is 0, this word contains a global
                    address.   A  section-local  address  is  an   18-bit
                    address.  A global address is a 30-bit address.

   The Reserved word is reserved for DIGITAL and must be zero.



































                                    7-9
























































                                    A-1











                                 APPENDIX A

                                 REL BLOCKS



   REL (RELocatable) Blocks are  the  main  input  to  LINK  and  contain
   information that LINK uses to load a program.

   This appendix describes each type of REL Block and gives  its  format.
   Terms used throughout this discussion are defined as follows:

   Header Word:        a fullword that contains the REL Block Type in its
                       left  half  and a short count or long count in its
                       right half.

   Short Count:        a halfword that contains the  length  of  the  REL
                       Block,  excluding  relocation  words.   The  short
                       count appears before each group of 18 decimal,  or
                       22 octal words and excludes the header word.

   Long Count:         a halfword that contains the  length  of  the  REL
                       Block, including all words in the block except the
                       header word itself.

   Relocation Word:    a fullword that contains the relocation  bits  for
                       up  to  18  decimal  or  22 octal following words.
                       Each relocation bit  is  either  1,  indicating  a
                       relocatable   halfword,   or   0,   indicating   a
                       nonrelocatable halfword.

                       The   first   two   relocation   bits   give   the
                       relocatability  of  the  left  and  right  halves,
                       respectively, of the next following word; the next
                       two bits give the relocatability of the two halves
                       of the second following word; and so forth for all
                       bits  in  the  word, except any unused bits, which
                       are zero.

                       If a REL Block has relocation words, the first one
                       follows   the   header  word.   If  more  than  18
                       (decimal) data words follow this relocation  word,
                       the  next  word  (after  the  18 words) is another


                                    A-1
                                 FIELD TEST


                       relocation word.   Thus,  a  REL  Block  that  has
                       relocation  words  will have one for each 18 words
                       of data that it contains.  If the REL  Block  does
                       not  contain an integral multiple of 18 words, the
                       last relocation word has unused bits.


                                              NOTE

                           A block with a zero short count  does  not
                           include a relocation word.


   Data Word:          Any word other than a header word or a  relocation
                       word.

   MBZ:                Must Be Zero.

                                    NOTE

           All  numbers  in  this  appendix  are   octal   unless
           specifically noted as decimal.

   The diagram below shows a REL Block having a short count of 7,  and  a
   relocation word.

          |=======================================================|
          |        Block Type         |             7             |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                      Data Word 1                      |
          |-------------------------------------------------------|
          |                      Data Word 2                      |
          |-------------------------------------------------------|
          |                      Data Word 3                      |
          |-------------------------------------------------------|
          |                      Data Word 4                      |
          |-------------------------------------------------------|
          |                      Data Word 5                      |
          |-------------------------------------------------------|
          |                      Data Word 6                      |
          |-------------------------------------------------------|
          |                      Data Word 7                      |
          |=======================================================|









                                    A-2
                                 FIELD TEST


   The diagram below shows a REL Block having a short count of 31 (octal)
   and two relocation words.

          |=======================================================|
          |        Block Type         |            31             |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                      Data Word 1                      |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                     Data Word 22                      |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                     Data Word 23                      |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                     Data Word 31                      |
          |=======================================================|

   REL Block Types must be numbered  in  the  range  0  to  777777.   The
   following list shows which numbers are reserved for DIGITAL, and which
   for customers:


               Type Numbers                      Use

                 0 -     37          Reserved for DIGITAL
                40 -     77          Reserved for customers
               100 -    401          Reserved for DIGITAL
               402 -    577          Reserved for customers
               600 -    677          Reserved for customer files
               700 -    777          Reserved for DIGITAL files
              1000 -   1777          Reserved for DIGITAL
              2000 -   3777          Reserved for customers
              4000 - 777777          Reserved for ASCII text











                                    A-3
                                 FIELD TEST


                          Block Type 0 (Ignored)

          |=======================================================|
          |             0             |        Short Count        |
          |-------------------------------------------------------|
          |               Optional Relocation Word                |
          |-------------------------------------------------------|
          |                       Data Word                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 0 is ignored by LINK.

   If the short count is 0, then no  relocation  word  follows,  and  the
   block consists of only one word.  This is how LINK bypasses zero words
   in a REL file.

































                                    A-4
                                 FIELD TEST


                            Block Type 1 (Code)

          |=======================================================|
          |             1             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |             0             | Address Word              |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 1 contains data and code.  The address is where LINK is  to
   load the data.  This address can be relocatable or absolute, depending
   on the value of  bit  1  of  the  relocation  word.   LINK  loads  the
   remaining data words beginning at that address.

   If a symbol is used to specify the start address, the following format
   of Block Type 1 is used:


          |=======================================================|
          |             1             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                        Symbol                         |
          |-------------------------------------------------------|
          |                        Offset                         |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   In this alternate format, the first four bits of the first  data  word
   (Symbol)  are  1100 (binary), and the word is assumed to be a Radix-50
   symbol of type 60.  The load address is calculated by adding the value
   of  the  global symbol to the offset given in the following word.  The
   third and following data words are loaded beginning at  the  resulting
   address.   The  global symbol must be defined when the Type 1 Block is
   found.






                                    A-5
                                 FIELD TEST


                          Block Type 2 (Symbols)

          |=======================================================|
          |             2             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |Code |                 Radix-50 Symbol                 |
          |-------------------------------------------------------|
          |                  Second Word of Pair                  |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |Code |                 Radix-50 Symbol                 |
          |-------------------------------------------------------|
          |                  Second Word of Pair                  |
          |=======================================================|

   The first word of each pair has a code in bits 0 to 3 and  a  Radix-50
   symbol  in bits 4 to 35 (decimal).  The contents of the second word of
   a pair depends on the given code.  The octal codes and their  meanings
   are:

     Code                          Meaning

     00   This code is illegal in a symbol block.

     04   The given symbol is a global definition.  Its value,  contained
          in the second word of the pair, is available to other programs.

     10   The given symbol is  a  local  definition,  and  its  value  is
          contained  in  the  second  word of the pair.  If the symbol is
          followed by one of the special pairs or by a Polish  REL  Block
          (as explained below, under code 24), the symbol is considered a
          partially defined local symbol.  Otherwise,  it  is  considered
          fully defined.

     14   The given symbol is a block name (from a translator  that  uses
          block  structure).   The  second  word of the pair contains the
          block level.  The symbol is considered local; if local  symbols
          are  loaded,  the  value  of  the  block name is entered in the
          symbol table as its block level.

     24   The given symbol is a global definition.  However, it  is  only
          partially  defined  at  this  time, and LINK cannot yet use its
          value.  If the symbol is defined in terms  of  another  symbol,
          then  the  next  entry in the REL file must be a word pair in a
          Block Type 2 as follows:

          |=======================================================|


                                    A-6
                                 FIELD TEST


          | 60  |                  Other Symbol                   |
          |-------------------------------------------------------|
          | 50  |                  This  Symbol                   |
          |=======================================================|

          In this format, code 50 indicates that the right  half  of  the
          word depends on the other symbol.

          If the partially defined symbol is defined in terms of a Polish
          expression,  then  the next entry in the REL file must be Block
          Type 11 (Polish), whose store operator gives this symbol as the
          symbol to be fixed up.  A fixup resolves the symbol.  The store
          operator must be -4 or -6.

     30   The given symbol is a global definition.  However, it  is  only
          partially  defined  at  this  time, and LINK cannot yet use its
          value.  If the symbol is defined in terms  of  another  symbol,
          then  the  next  entry in the REL file must be a word pair in a
          Block Type 2 as follows:

          |=======================================================|
          | 60  |                  Other Symbol                   |
          |-------------------------------------------------------|
          | 70  |                  This  Symbol                   |
          |=======================================================|

          In this format, code 70 indicates that the  left  half  of  the
          word depends on the other symbol.

          If the partially defined symbol is defined in terms of a Polish
          expression,  then  the next entry in the REL file must be Block
          Type 11 (Polish), whose store operator gives this symbol as the
          symbol to be fixed up.  The store operator must be -5.

     34   The given symbol is a global definition.  However, it  is  only
          partially  defined  at  this  time, and LINK cannot yet use its
          value.  If the symbol is defined in terms  of  another  symbol,
          then  the  next  entry in the REL file must be a word pair in a
          Block Type 2 as follows:

          |=======================================================|
          | 60  |                  Other Symbol                   |
          |-------------------------------------------------------|
          | 50  |                  This  Symbol                   |
          |-------------------------------------------------------|
          | 60  |                  Other Symbol                   |
          |-------------------------------------------------------|
          | 70  |                  This  Symbol                   |
          |=======================================================|

          This format indicates that both halves of the  word  depend  on
          the other symbol.


                                    A-7
                                 FIELD TEST


     44   The given symbol is a global definition exactly as in code  04,
          except that DDT does not output the symbol.

     50   The given symbol is a local  symbol  exactly  as  in  code  10,
          except that DDT does not output the symbol.

     60   The given symbol is a global request.  LINK's handling  of  the
          symbol  depends on the value of the code in the first four bits
          of the second word of the pair.  These codes and their meanings
          are:

            00   The right half of the word  gives  the  address  of  the
                 first  word in a chain of requests for the global memory
                 address.  In each request, the right half  of  the  word
                 gives  the  address of the next request.  The chain ends
                 when the address is 0.

            40   The right half of the word  contains  an  address.   The
                 right half of the value of the requested symbol is added
                 to the right half of this word.

            50   The rest of the word contains a  Radix-50  symbol  whose
                 value  depends  on the requested global symbol.  (If the
                 given Radix-50 symbol is not  the  one  defined  in  the
                 previous  word  pair,  then this word is ignored.)  When
                 the value of the requested symbol  is  resolved,  it  is
                 added  to  the  right  half of the value of the Radix-50
                 symbol.

            60   The right half of the word  contains  an  address.   The
                 right half of the value of the requested symbol is added
                 to the left half of this word.

            70   The rest of the word contains a  Radix-50  symbol  whose
                 value  depends  on the requested global symbol.  (If the
                 given Radix-50 symbol is not  the  one  defined  in  the
                 previous  word  pair,  then this word is ignored.)  When
                 the value of the requested global symbol is resolved, it
                 is  added  to the left half of the value of the Radix-50
                 symbol.

     64   The given symbol is a global definition exactly as in code  24,
          except that DDT does not output the symbol.

     70   The given symbol is partially defined, where the left  half  is
          deferred,  as  in  code 30, except that DDT does not output the
          symbol.

     74   The given symbol is partially defined, where the right half  is
          deferred,  as  in  code 34, except that DDT does not output the
          symbol.



                                    A-8
                                 FIELD TEST


   Symbols are placed in the symbol table in the order  that  LINK  finds
   them.  However, DDT expects to find the symbols in a specific order.

   For a non-block-structured program, that order is:

        Program Name

        Symbols for Program

   For a block-structured program whose structure is:

        Begin Block 1 (same as program name)
             Begin Block 2
             End Block 2
             Begin Block 3
                  Begin Block 4
                  End Block 4
             End Block 3
        End Block 1

   the order is:

        Program Name (Block 1)
        Block Name 2
        Symbols for Block 2
        Block Name 4
        Symbols for Block 4
        Block Name 3
        Symbols for Block 3
        Block Name 1
        Symbols for Block 1

   This ordering follows the rule that the  name  and  symbols  for  each
   block must occur in the symbol table in the order of the block endings
   in the program.

   The following fixup rules apply to this block:

        1.  Only one fixup by a Type 2, 10, 11, 12, 15,  1070,  1072,  or
            1120  Block  is  allowed  for  a  given  word.  (There can be
            separate fixups for the left and right  halves  of  the  same
            word.)

        2.  Fixups are not necessarily performed in the order LINK  finds
            them.

        3.  Chained halfword  fixups  cannot  cross  section  boundaries.
            Also,  they  cannot  fixup  a location which resolves to word
            zero of a section unless it is the only address in the chain.

        4.  Chained fixups must be in strict descending address order.



                                    A-9
                                 FIELD TEST


        5.  A location must contain data before the location can be fixed
            up.




















































                                    A-10
                                 FIELD TEST


                           Block Type 3 (HISEG)

          |=======================================================|
          |             3             |      Short Count          |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |High-Segment Program Break |    High-Segment Origin    |
          |-------------------------------------------------------|
          |(Low-Segment Program Break)|   (Low-Segment Origin)    |
          |=======================================================|

   Block Type 3 tells LINK that code  is  to  be  loaded  into  the  high
   segment.

   The Short Count is either 1 or 2.

   If the left half of the first data word is 0, subsequent Type 1 blocks
   found  are assumed to have been produced by the MACRO pseudo-op HISEG.
   This usage is not recommended.  It means that  the  addresses  in  the
   blocks  are  relative  to  0, but are to be placed in the program high
   segment.  The right half of the first data word is  the  beginning  of
   the high segment (usually 400000).

   If the left half of the first data  word  is  nonzero  (the  preferred
   usage),  subsequent  Type  1  blocks  found  are  assumed to have been
   produced by the MACRO pseudo-op TWOSEG.

   The right half is interpreted as the beginning of  the  high  segment,
   and  the  left half is the high-segment break; the high-segment length
   is the difference of the left and right halves.

   (One-pass translators that cannot  calculate  the  high-segment  break
   should set the left half equal to the right half.)

   If the second word appears in the HISEG block, its left half shows the
   low-segment  program  break,  and its right half shows the low-segment
   origin (usually 0).
















                                    A-11
                                 FIELD TEST


                           Block Type 4 (Entry)

          |=======================================================|
          |             4             |        Short Count        |
          |-------------------------------------------------------|
          |                 Relocation Word (Zero)                |
          |-------------------------------------------------------|
          |                    Radix-50 Symbol                    |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                    Radix-50 Symbol                    |
          |=======================================================|

   Block Type 4 lists the entry name symbols for a program module.  If  a
   Type  4  block  appears in a module, it must be the first block in the
   module.  A library file contains a  Type  4  block  for  each  of  its
   modules.

   When LINK is in library search mode, the  symbols  in  the  block  are
   compared  to the current list of global requests for the load.  If one
   or more matches occur, the module is loaded.

   The 4 high order bits of the symbol are 0 and are ignored.




























                                    A-12
                                 FIELD TEST


                            Block Type 5 (End)

          |=======================================================|
          |             5             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                    First Data Word                    |
          |-------------------------------------------------------|
          |                   (Second Data Word)                  |
          |=======================================================|

   Block Type 5 ends a program module.  A Block Type  6  (Name)  must  be
   encountered earlier in the module than the Type 5 block.

   The Short Count is 1 or 2.

   If the module contains a two-segment program, the first data  word  is
   the  high-segment  break  and  the second data word is the low-segment
   break.  If the module contains a one-segment program, the  first  data
   word  is  the  program  break and the second data word is the absolute
   break.  If the count is 1, then the second word is assumed to be 0.

   If the module contains a program that uses PSECTs, Block Type 5 has no
   effect  except  if  the  /REDIRECT  switch was used.  If /REDIRECT was
   used, the break information is used to set the highest location to  be
   loaded for the PSECT specified in /REDIRECT.

   Each PRGEND pseudo-op in a MACRO program generates a Type 5 REL block.
   Therefore,  a  REL  file  may contain more than one pair of Type 6 and
   Type 5 blocks.

   A library REL file has a Type 5 block  at  the  end  of  each  of  its
   modules.




















                                    A-13
                                 FIELD TEST


                            Block Type 6 (Name)

          |=======================================================|
          |             6             |      Short Count          |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                    Radix-50 Symbol                    |
          |-------------------------------------------------------|
          | (CPU)  |    (Compiler)    | (Length of Blank Common)  |
          |-------------------------------------------------------|

   Block Type 6 contains the program name, and must precede  any  Type  2
   blocks.   (A  module  should begin with a Type 6 or 1003 block and end
   with a Type 5 block.)

   The Short Count is 1 or 2.

   The first data word is the program name in Radix-50 format; this  name
   cannot be blanks.  The second data word is optional; if it appears, it
   contains CPU codes in bits 0 to 5, a compiler code in  bits  6  to  17
   (decimal),  and  the length of the program's blank COMMON in the right
   halfword.

   The CPU codes specify processors for program execution as:

        Bit 2     KS10
        Bit 3     KL10
        Bit 4     KI10
        Bit 5     KA10

   If none of these bits are on, then any of the processors can  be  used
   for execution.

   The compiler code specifies the compiler that produced the  REL  file.
   The defined codes are:

        0    Unknown        10   FORTRAN        20   BLISS-36
        1    Not used       11   MACRO          21   BASIC
        2    COBOL-68       12   FAIL           22   SITGO
        3    ALGOL          13   BCPL           23   (Reserved)
        4    NELIAC         14   MIDAS          24   PASCAL
        5    PL/I           15   SIMULA         25   JOVIAL
        6    BLISS          16   COBOL-7        26   ADA
        7    SAIL           17   COBOL









                                    A-14
                                 FIELD TEST


                           Block Type 7 (Start)

          |=======================================================|
          |             7             |      Short Count          |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                     Start Address                     |
          |-------------------------------------------------------|
          |(60) |           (Optional Radix-50 Symbol)            |
          |=======================================================|

   Block Type 7 contains the start address for program  execution.   LINK
   uses  the  start address in the last such block processed by the load,
   unless /START or /NOSTART switches specify otherwise.

   Short Count is 2.

   If the Optional Radix-50 Symbol word is present, it must be a Radix-50
   symbol  with  the code 60.  LINK forms the start address by adding the
   value of the symbol to the value in the right half  of  the  preceding
   word (Start Address).

   LINK defaults a TOPS-10 style entry vector if the entry length  vector
   is zero.

   LINK defaults a TOPS-20 style entry vector:

         o  if the program contains nonzero sections and  the  length  of
            the entry vector is not specified

         o  if the length of the entry vector is 1

         o  if /NOJOBDAT equals 1




















                                    A-15
                                 FIELD TEST


                     Block Type 10 (Internal Request)

          |=======================================================|
          |            10             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |  Pointer to Last Request  |           Value           |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |  Pointer to Last Request  |           Value           |
          |=======================================================|

   Block Type 10 is generated by one-pass translators to resolve requests
   caused by forward references to internal symbols.  The MACRO assembler
   also generates Type 10 blocks to resolve requests for  labels  defined
   in  literals; a separate chain is required for each PSECT in a program
   that contains PSECTs.

   Each data word contains one request for an internal symbol.  The  left
   half is the address of the last request for a given symbol.  The right
   half is the value of the symbol.  The right half of the  last  request
   contains  the  address of the next-to-last request, and so on, until a
   zero right half is found.  (This is exactly analogous to Radix-50 code
   60 with second-word code 00 in a Block Type 2.)

   If a data word contains -1, then the following word contains a request
   for  the left (rather than right) half of the specified word.  In this
   case, the left half of the word being fixed up contains the address of
   the  next-to-last left half request, and so on, until a zero left half
   is found.  (This is a left half chain  analogous  to  the  right  half
   chain described above.)

   The following fixup rules apply to this block:

        1.  Only one fixup by a Type 2, 10, 11, 12, 15,  1070,  1072,  or
            1120  Block  is  allowed  for  a  given field.  (There can be
            separate fixups for the left and right  halves  of  the  same
            word.)

        2.  Fixups are not necessarily performed in the order LINK  finds
            them.

        3.  These  are  halfword  fixups   and   cannot   cross   section
            boundaries.   They  wrap  within  a  section.  Also, halfword
            fixups cannot fixup a location which resolves to word zero of
            a section unless it is the only address in the chain.




                                    A-16
                                 FIELD TEST


        4.  Chained fixups must be in strict descending address order.

        5.  A location must contain data before the location can be fixed
            up.


















































                                    A-17
                                 FIELD TEST


                          Block Type 11 (Polish)

          |=======================================================|
          |            11             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |       Data Halfword       |       Data Halfword       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |       Data Halfword       |       Data Halfword       |
          |=======================================================|

   Block Type 11 defines Polish  fixups  for  operations  on  relocatable
   values  or  external symbols.  Only one store operator code can appear
   in a Block Type 11; this store operator code can be  either  a  symbol
   fixup  code  or a chained fixup code.  The store operator code appears
   at the end of the block.

   The following fixup rules apply to this block:

        1.  Only one fixup by a Type 2, 10, 11, 15, 1070, 1072,  or  1120
            Block  is  allowed for a given field.  (There can be separate
            fixups for the left and right halves of the same word.)

        2.  Fixups are not necessarily performed in the order LINK  finds
            them.

        3.  Chained halfword  fixups  cannot  cross  section  boundaries.
            Also,  they  cannot  fixup  a location which resolves to word
            zero of a section unless it is the only address in the chain.

        4.  Chained fixups must be in strict descending address order.

        5.  A location must contain data before the location can be fixed
            up.

   The data words of a Type 11 block form one Polish string of halfwords.
   Each halfword contains one of the following:

        1.  A symbol fixup store operator code.

            A symbol fixup defines the value to be stored  in  the  value
            field  of  the  symbol  table for the given symbol.  A symbol
            fixup store operator code is followed by  two  or  four  data
            halfwords.

        2.  A chained fixup store operator code.



                                    A-18
                                 FIELD TEST


            A chained fixup takes a relocatable address  whose  corrected
            virtual  address  is the location for storing or chaining.  A
            chained fixup store operator code is  followed  by  one  data
            halfword.

        3.  A data type code.

            Data type code 0 is followed by a data halfword; a data  type
            code 1 or 2 is followed by two data halfwords.

        4.  An arithmetic or logical operator code.

        5.  A PSECT index code.

            This code defines a PSECT index to be  used  for  calculating
            the  relocated  addresses  that  appear in this block.  PSECT
            indexes are needed only for PSECTed programs.

            A global PSECT index is associated  with  a  Block  Type  11.
            This index appears as the first halfword after the relocation
            word, and it defines the PSECT for the store address or store
            symbol.  Any addresses for a different PSECT must be preceded
            by a different PSECT index.

            Thus, a relocatable data halfword in a different  PSECT  must
            appear in one of the following formats:

            |-------------------------------------------------------|
            |          400nnn           |   (operator code)         |
            |-------------------------------------------------------|
            |                      (operands)                       |
            |-------------------------------------------------------|

                                         OR

            |-------------------------------------------------------|
            |           . . .           |          400nnn           |
            |-------------------------------------------------------|
            |      (operator code)      |         (operands)        |
            |-------------------------------------------------------|

            where the different PSECT index is nnn+1.

            Any relocatable  address  that  does  not  have  an  explicit
            preceding  PSECT  index  code preceding its data type code is
            assumed to be in the same PSECT as the store address for  the
            block.   The current PSECT may be set by a previous REL Block
            type.

        6.  A halfword of data (preceded by a data type  0  halfword)  or
            two  halfwords  of  data  (preceded  by  a  data  type 1 or 2
            halfword).


                                    A-19
                                 FIELD TEST


            A sequence of halfwords containing a data type code 0  and  a
            data halfword can begin in either half of a word.


   The codes and their meanings are:

   .LINK fixup codes

        -10  does a store into the link that was specified if the address
             is  negative.   Stores the address as a link-end.  Links the
             result of the Polish Block.

        -7   Fullword replacement.  No chaining is done.

   Symbol Fixup Store Operator Codes:

        -6   Fullword symbol fixup.   The  following  one  or  two  words
             contain  the  Radix-50  symbol(s)  (with their 4-bit codes).
             The first is the symbol to be fixed up, and  the  second  is
             the   block  name  for  a  block-structured  program  (0  or
             nonexistent for other programs).

        -5   Left half symbol fixup.  The  following  one  or  two  words
             contain the Radix-50 symbols.  The first is the symbol to be
             fixed  up,  and  the  second  is  the  block  name   for   a
             block-structured   program   (0  or  nonexistent  for  other
             programs).

        -4   Right half symbol fixup.  The following  one  or  two  words
             contain the Radix-50 symbols.  The first is the symbol to be
             fixed  up,  and  the  second  is  the  block  name   for   a
             block-structured   program   (0  or  nonexistent  for  other
             programs).

   Chained Fixup Store Operator Codes:

        -3   Fullword chained fixup.  The halfword  following  points  to
             the  first element in the chain.  The entire word pointed to
             is replaced, and the old  right  half  points  to  the  next
             fullword.

        -2   Left half chained fixup.  The halfword following  points  to
             the first element in the chain.

        -1   Right half chained fixup.  The halfword following points  to
             the first element in the chain.

   Data Type Codes:

         0   The next halfword is an operand.

         1   The next two halfwords form a fullword operand.


                                    A-20
                                 FIELD TEST


         2   The next two halfwords form a  Radix-50  symbol  that  is  a
             global request.  The operand is the value of the symbol.

   Arithmetic and Logical Operator Codes:

         3   Add.

         4   Subtract.  The first operand is subtracted by the second.

         5   Multiply.

         6   Divide.  The first operand is divided by the second.

         7   Logical AND.

        10   Logical OR.

        11   Logical shift.  The first operand is shifted by the second.

             A positive second operand causes a shift  to  the  left.   A
             negative operand causes a shift to the right.

        12   Logical XOR.

        13   Logical NOT (one's complement).

        14   Arithmetic negation (two's complement).

        15   Count leading zeros (like JFFO instruction).  Refer  to  the
             MACRO  Assembler  Reference Manual for information about the
             ^L operand, which this code implements.

        16   Remainder.  The first operand is REM by the second.

        17   Magnitude.

        20   Maximum.

        21   Minimum.

        22   Comparison.  Returns 0 if the two operands are different; -1
             if they are equal.

        23   Used to resolve the links in a chain.  The  address  of  the
             specified link is used.  See -10.

        24   Symbol  definition  test.   Returns  0  if  the  operand  (a
             Radix-50 symbol) is unknown; 1 if it is known but undefined;
             -1 if it is known and defined.

        25   Skip N words of Polish.



                                    A-21
                                 FIELD TEST


        26   Skip the remainder of the REL  module  if  the  argument  is
             nonzero,  otherwise  return the argument.  Undefined symbols
             are not allowed with this store  operator  in  data  type  2
             operands.

        27   Return contents of location N.  No fixups  may  be  done  on
             location N.

   PSECT Index Codes:

    400nnn   PSECT index nnn, where nnn is a 3-digit octal integer.

   For an example of a Type 11 block, the MACRO statements

                EXTERN B
        A:      EXP <A*B+A>

   Generate (assuming that A has a relocatable value of zero):

          |=======================================================|
          |            11             |             6             |
          |-------------------------------------------------------|
          |00|01|00|00|10|10|                  0                  |
          |-------------------------------------------------------|
          |          3 (Add)          |       5 (Multiply)        |
          |-------------------------------------------------------|
          | 0 (Halfword Operand Next) |      0 (Relocatable)      |
          |-------------------------------------------------------|
          |2 (Fullword Radix-50 Next) |  1st Half of Radix-50 B   |
          |-------------------------------------------------------|
          |  2nd Half of Radix-50 B   | 0 (Halfword Operand Next) |
          |-------------------------------------------------------|
          |      0 (Relocatable)      | -3 ( Chained Fixup Next)  |
          |-------------------------------------------------------|
          |  0 (Chain Starts at 0')   |           . . .           |
          |=======================================================|

   The first word contains the block type (11) and the short  count  (6).
   The  second  word  is the relocation word; it shows that the following
   halfwords are to be relocated:  right half of second  following  word,
   left half of fifth following word, left half of sixth following word.

   The next word shows that  the  two  operations  to  be  performed  are
   addition  and multiplication; because this is in Polish prefix format,
   the multiplication is to be performed on the first two operands first,
   then addition is performed on the product and the third operand.

   The next two halfwords define the first operand.  The  first  halfword
   is  a data type code 0, showing that the operand is a single halfword;
   the next halfword is the operand (relocatable 0).

   The next three halfwords define the  second  operand.   The  first  of


                                    A-22
                                 FIELD TEST


   these  halfwords contains a data type code 2, showing that the operand
   is two halfwords containing a Radix-50 symbol with code 60.  The  next
   two halfwords give the symbol (B).

   The next two halfwords define the third operand.  The first  of  these
   halfwords  contains  a data type code 0, showing that the operand is a
   single halfword; the next halfword gives  the  value  of  the  operand
   (relocatable 0).

   The next two halfwords give the store operator  for  the  block.   The
   first  of  these  halfwords  contains the chained fixup store operator
   code -3, showing that a fullword chained fixup is required;  the  next
   halfword  contains the operand (relocatable 0), showing that the chain
   starts at relocatable zero.

   The last halfword is irrelevant, and should be zero.  If  it  is  not,
   LINK issues the LNKJPB error message.





































                                    A-23
                                 FIELD TEST


                           Block Type 12 (Chain)

          |=======================================================|
          |            12             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                     Chain Number                      |
          |-------------------------------------------------------|
          |       Chain Address       |       Store Address       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                     Chain Number                      |
          |-------------------------------------------------------|
          |       Chain Address       |       Store Address       |
          |=======================================================|

   Block Type 12 chains together data structures from separately compiled
   modules.   (The  MACRO  pseudo-ops  .LINK and .LNKEND generate Type 12
   blocks.) Block Type 12  allows  linked  lists  that  have  entries  in
   separately  compiled modules to be constructed so that new entries can
   be added to one  module  without  editing  or  recompiling  any  other
   module.

   The data words in a Type 12 block are paired.  The first word of  each
   pair  contains  a  chain number between 1 and 100 (octal).  (The chain
   number is negative if the pair was generated by a .LNKEND  pseudo-op.)
   The  second  word  contains  a  store address in the right half, and a
   chain address in the left half.   The  store  address  points  to  the
   location  where  LINK  will  place the chain address of the last entry
   encountered for the current chain.  The first entry in a chain  has  a
   zero in the word pointed to by the store address.

   A MACRO statement of the form:

        .LINK chain-number,store-address,chain-address

   generates a word pair in a Type 12 block  as  shown  above.   A  MACRO
   statement of the form:

        .LINK chain-number,store-address

   generates a word pair in a Type 12  block  with  a  0  for  the  chain
   address field in the REL block.  A MACRO statement of the form:

        .LNKEND chain-number,store-address

   generates a word pair in a Type 12  Block  with  a  0  for  the  chain
   address and a negative chain number.


                                    A-24
                                 FIELD TEST


   As LINK processes a load, it performs a  separate  chaining  for  each
   different  chain  number found; thus a word pair in a Type 12 block is
   related to all other word pairs having the same chain number (even  in
   other  loaded  modules).  Type 12 pairs having different chain numbers
   (even in the same module), are not related.

   The following fixup rules apply to this block:

        1.  Only one fixup by a Type 2, 10, 11, 12, 15,  1070,  1072,  or
            1120  Block  is  allowed  for  a  given field.  (There can be
            separate fixups for the left and right  halves  of  the  same
            word.)

        2.  Fixups are not necessarily performed in the order LINK  finds
            them.

        3.  Chain numbers above 100 (octal) are reserved by DIGITAL.

        4.  These  are  halfword  fixups   and   cannot   cross   section
            boundaries.   They  wrap  within  a  section.  Also, halfword
            fixups cannot fixup a location which resolves to word zero of
            a section unless it is the only address in the chain.

        5.  A location must contain data before the location can be fixed
            up.

   To show how the chains are  formed,  we  will  take  some  pairs  from
   different  programs  having  the same chain number (1 in the example).
   The following four programs contain .LINK or  .LNKEND  pseudo-ops  for
   the  chain numbered 1.  After each program, the word pair generated in
   the Type 12 block appears.

                                    NOTE

           When LINK stores an address resulting from a  Type  12
           REL  Block,  only  the  right  half  of  the receiving
           location is written.  You  can  safely  store  another
           value in the left half; it will not be overwritten.
















                                    A-25
                                 FIELD TEST


   Example

          TITLE MOD0
                    .
                    .
                    .
          TAG0:   BLOCK 1
                    .
                    .
                    .
                  .LNKEND 1,TAG0
                    .
                    .
                    .
                  END

          |=======================================================|
          |                          -1                           |
          |-------------------------------------------------------|
          |             0             |       Value of TAG0       |
          |=======================================================|

          TITLE MOD1
                    .
                    .
                    .
          TAG1:   BLOCK 1
                    .
                    .
                    .
                  .LINK 1,TAG1
                    .
                    .
                    .
                  END

          |=======================================================|
          |                           1                           |
          |-------------------------------------------------------|
          |             0             |       Value of TAG1       |
          |=======================================================|

          TITLE MOD2
                    .
                    .
                    .
          TAG2:   BLOCK 1
                    .
                    .
                    .
                  .LINK 1,TAG2
                    .


                                    A-26
                                 FIELD TEST


                    .
                    .
                  END



















































                                    A-27
                                 FIELD TEST


          |=======================================================|
          |                           1                           |
          |-------------------------------------------------------|
          |             0             |       Value of TAG2       |
          |=======================================================|

          TITLE MOD3
                    .
                    .
                    .
          TAG3:   BLOCK 1
                    .
                    .
                    .
          TAG33:  BLOCK 1
                    .
                    .
                    .
                  .LINK 1,TAG33,TAG3
                    .
                    .
                    .
                  END

          |=======================================================|
          |                           1                           |
          |-------------------------------------------------------|
          |       Value of TAG3       |       Value of TAG33      |
          |=======================================================|

























                                    A-28
                                 FIELD TEST


   Suppose we load MOD0 first.  The .LNKEND statement for MOD0  generates
   a negative chain number.  LINK sees the negative chain number (-1) and
   recognizes this as the result of a .LNKEND statement for chain  number
   1.   LINK  remembers  the store address (value of TAG0) as the base of
   the chain.

   Next we load MOD1.  The .LINK statement for  MOD1  does  not  use  the
   third argument, so the chain address is 0.  LINK sees that this is the
   first entry for chain number 1.  Because it is the first  entry,  LINK
   places  a 0 in the store address (value of TAG1).  LINK then remembers
   the value of TAG1 for use in the next  chain  entry.   (If  the  chain
   address  is  0, as it is in MOD1, LINK remembers the store address; if
   the chain address is nonzero, LINK remembers the chain address.)

   Next we load MOD3.  The .LINK statement in MOD3 uses a third  argument
   (TAG3),  therefore,  the  value  of TAG3 is used as the chain address.
   LINK places its remembered  address  (value  of  TAG1)  in  the  store
   address  (value  of TAG33).  Because the chain address (value of TAG3)
   is nonzero, LINK remembers it for the next entry.

   Finally we load MOD2.  Like MOD1, the .LINK statement  for  MOD2  does
   not  take  a  third  argument,  and thus the chain address is 0.  LINK
   places the remembered address (value of TAG3)  in  the  store  address
   (value  of  TAG2).  Because the chain address is 0, LINK remembers the
   store address (value of TAG2).

   At the end of loading, LINK places the last remembered address  (value
   of TAG2) at the address (value of TAG0) given by the .LNKEND statement
   in MOD0.

   The results of the chaining can be seen in the  following  diagram  of
   the loaded core image:

             MOD0                     MOD2
           -----------------       ----------------
           |               |       |              |
           |               |       |              |
   TAG0:   |Value of TAG2  |  TAG2:|Value of TAG3 |
           |               |       |              |
           |               |       |              |
           |               |       |              |
           -----------------       ----------------

              MOD3                    MOD1
           -----------------       ----------------
           |               |       |              |
           |               |       |              |
   TAG3:   |               |  TAG1:|       0      |
           |               |       |              |
   TAG33:  |Value of TAG1  |       |              |
           |               |       |              |
           -----------------       ----------------


                                    A-29
                                 FIELD TEST


   Note that the order of loading for modules with .LINK
   statements is critical.  (A module containing a .LNKEND
   statement can be loaded any time;
   its treatment is not affected by the order of loading.)

   For example, if we load the four programs in the order
   MOD2, MOD3, MOD0, MOD1, we get a different resulting
   core image:

              MOD0                    MOD1
           -----------------       ----------------
           |               |       |              |
           |               |       |              |
   TAG0:   |Value of TAG1  |  TAG1:|Value of TAG3 |
           |               |       |              |
           |               |       |              |
           |               |       |              |
           -----------------       ----------------

              MOD3                    MOD2
           -----------------       ----------------
           |               |       |              |
           |               |       |              |
   TAG3:   |               |  TAG2:|       0      |
           |               |       |              |
   TAG33:  |Value of TAG2  |       |              |
           |               |       |              |
           -----------------       ----------------


























                                    A-30
                                 FIELD TEST


                           Block Type 14 (Index)

          |=======================================================|
          |            14             |            177            |
          |-------------------------------------------------------|
          |                      Sub-Block                        |
          |                                                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                                                       |
          |                       Sub-Block                       |
          |                                                       |
          |-------------------------------------------------------|
          |            -1             | Ptr To Nxt Rel Blk Typ 14 |
          |=======================================================|


   Each sub-block is of the form:

          |=======================================================|
          |    Index-Version Number   |     Count of Symbols      |
          |-------------------------------------------------------|
          |                    Radix-50 Symbol                    |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                    Radix-50 Symbol                    |
          |-------------------------------------------------------|
          |      Pointer to Module Containing Entry Symbols       |
          |=======================================================|


   Block Type 14 contains a  list  of  all  entry  points  in  a  library
   produced  by  MAKLIB.  The block contains 177 (octal) data words (with
   no relocation words); if the index requires more  entries,  additional
   Type 14 blocks are used.  If 177 data words are not needed, zero words
   pad the block to a length  of  177.   -1  indicates  the  end  of  the
   sub-block information.

   The Type 14 block consists of a header word, a number  of  sub-blocks,
   and  a trailer word containing the disk block address of the next Type
   14 block, if any.  Each disk block is 128 words.

   Each sub-block is like a Type 4 block, with three differences:





                                    A-31
                                 FIELD TEST


        1.  The sub-block has no relocation words.

        2.  The last word of the sub-block  points  to  the  module  that
            contains the entry points listed in the sub-block.  The right
            half of the pointer has the disk block number of  the  module
            within  the  file;  the left half has the number of words (in
            that block) that precede the module.  If  there  is  no  next
            block, then the word after the last sub-block is -1.

        3.  The index-version number is used so that old blocks can still
            be loaded, even if the format changes in the future.











































                                    A-32
                                 FIELD TEST


                           Block Type 15 (ALGOL)

          |=======================================================|
          |            15             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |       Load Address        |          Length           |
          |-------------------------------------------------------|
          |       Chain Address       |          Offset           |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |       Chain Address       |          Offset           |
          |=======================================================|

   Block Type 15 is used to build the special ALGOL OWN block.

   The first data word contains the length of the module's OWN  block  in
   the right half, and the desired load address for the current OWN block
   in the left half.  Each following word  contains  an  offset  for  the
   start  of  the  OWN  block  in  the  right  half, and the address of a
   standard righthalf chain of requests for that word of the OWN block in
   the left half.

   When LINK sees a REL Block Type  15,  it  allocates  a  block  of  the
   requested  size  at the requested address.  The length of the block is
   then placed in the left half of the first word, and the address of the
   last OWN block seen is placed in the right half.  If this is the first
   OWN block seen, 0 is stored in the right half of the first word.

   The remaining data words are then processed by adding the  address  of
   the  first  word of the OWN block to each offset, and then storing the
   resulting value in all the locations chained together,  starting  with
   the chain address.

   At the end of loading, LINK checks  to  see  if  the  symbol  %OWN  is
   undefined.   If  it is undefined, then it is defined to be the address
   of the last OWN block seen.  In addition, if LINK is creating an ALGOL
   symbol  file,  the  file specification of the symbol file is stored in
   the first OWN block loaded.  This  file  specification  must  use  the
   standard TOPS-10 format below:

        device:name.type[project-programmer number]








                                    A-33
                                 FIELD TEST


                       Block Type 16 (Request Load)

          |=======================================================|
          |            16             |        Short Count        |
          |-------------------------------------------------------|
          |                Relocation Word (Zero)                 |
          |-------------------------------------------------------|
          |                    SIXBIT Filename                    |
          |-------------------------------------------------------|
          |               Project-Programmer Number               |
          |-------------------------------------------------------|
          |                     SIXBIT Device                     |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                    SIXBIT Filename                    |
          |-------------------------------------------------------|
          |               Project-Programmer Number               |
          |-------------------------------------------------------|
          |                     SIXBIT Device                     |
          |=======================================================|



   Block Type 16 contains a list of files to be loaded.  The  data  words
   are  arranged  in  triplets; each triplet contains information for one
   file:  file name, project-programmer number,  and  device.   The  file
   type is assumed to be .REL.

   LINK saves the specifications for the files to be  loaded,  discarding
   duplicates.   At  the  end  of loading, LINK loads all specified files
   immediately before beginning library searches.

   The MACRO pseudo-op .REQUIRE generates a Type 16 REL Block.


















                                    A-34
                                 FIELD TEST


                      Block Type 17 (Request Library)

          |=======================================================|
          |            17             |        Short Count        |
          |-------------------------------------------------------|
          |                Relocation Word (Zero)                 |
          |-------------------------------------------------------|
          |                    SIXBIT Filename                    |
          |-------------------------------------------------------|
          |               Project-Programmer Number               |
          |-------------------------------------------------------|
          |                     SIXBIT Device                     |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                    SIXBIT Filename                    |
          |-------------------------------------------------------|
          |               Project-Programmer Number               |
          |-------------------------------------------------------|
          |                     SIXBIT Device                     |
          |=======================================================|

   Block Type 17 is identical to Block Type 16 except that the  specified
   files  are  loaded  in  library  search mode.  The specified files are
   searched after loading files given  in  Type  16  blocks,  but  before
   searching system or user libraries.

   The MACRO pseudo-op .REQUEST generates a Type 17 REL Block.
























                                    A-35
                                 FIELD TEST


                          Block Type 20 (Common)

          |=======================================================|
          |            20             |        Short Count        |
          |-------------------------------------------------------|
          |                Relocation Word (Zero)                 |
          |-------------------------------------------------------|
          |                    Radix-50 Symbol                    |
          |-------------------------------------------------------|
          |            Length of Labeled Common Block             |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                    Radix-50 Symbol                    |
          |-------------------------------------------------------|
          |            Length of Labeled Common Block             |
          |=======================================================|

   Block Type 20 allocates labeled COMMON areas.  The label for unlabeled
   COMMON is ".COMM.".  If a Block Type 20 appears in a REL file, it must
   appear before any other block that causes code to be loaded or storage
   to be allocated in the core image.

   LINK allocates the specified COMMON into the current PSECT  only  when
   allocating  COMMON  areas  in  a  program  that  contains PSECTs.  The
   current PSECT is defined as the PSECT specified in a previous Type  22
   PSECT Origin Block or Type 1051 Set PSECT Block.

   If the program does not use PSECTs, the  COMMON  areas  are  allocated
   into the HISEG or LOSEG as specified with the /SEGMENT switch.

   The data words are arranged in pairs.  The first  word  of  each  pair
   contains  a  COMMON  name  in Radix-50 format (the four-bit code field
   must contain 60).  The second contains the length of the  area  to  be
   allocated.

   For each COMMON entry found, LINK first determines whether the  COMMON
   area  is  already  allocated.  If not, LINK allocates it.  If the area
   has been allocated, the allocated area must be at least  as  large  as
   the current requested allocation.

   COMMON blocks can be referenced from other  block  types  as  standard
   globally  defined  symbols.  However, a COMMON block must be initially
   allocated by Block Type 20, Block Type 1074, Block Type 6  (for  blank
   COMMON),  or  by the /COMMON switch to LINK.  Any attempt to initially
   define a COMMON block with a standard global symbol definition  causes
   the LNKSNC error when the redefining Block Type 20 is later seen.





                                    A-36
                                 FIELD TEST


                        Block Type 21 (Sparse Data)

          |=======================================================|
          |            21             |        Short Count        |
          |-------------------------------------------------------|
          |                Relocation Word (Zero)                 |
          |-------------------------------------------------------|
          |                                                       |
          |                       Sub-Block                       |
          |                                                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                                                       |
          |                       Sub-Block                       |
          |                                                       |
          |=======================================================|

   Each sub-block is of the form:
          |=======================================================|
          |         Long Count        |          Address          |
          |-------------------------------------------------------|
          |                       Data Word                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 21 contains data to be loaded sparsely  in  a  large  area.
   The  first  word  of  each  sub-block  contains the long count for the
   sub-block in the left half, and the address for loading the data words
   in the right half.

   If the first four bits of the first data word of  each  sub-block  are
   1100  (binary)  then  the  word  is assumed to be a previously defined
   Radix-50 symbol of type 60; in this case the left half of  the  second
   word  is the sub-block count, and the right half plus the value of the
   symbol is the load address.











                                    A-37
                                 FIELD TEST


                       Block Type 22 (PSECT Origin)

          |=======================================================|
          |            22             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |      (SIXBIT PSECT Name) or (PSECT Index)             |
          |-------------------------------------------------------|
          |                     PSECT Origin                      |
          |=======================================================|
                                                                 

   Block Type 22 contains the PSECT origin (base address).

   Block Type 22 tells LINK to set the value of the relocation counter to
   the  value  of  the counter associated with the given PSECT name.  All
   following TWOSEG REL blocks are relocated with respect to  this  PSECT
   until the next Block Type 22, 23, or 1051 is found.

   When data or code is being loaded into  this  PSECT,  all  relocatable
   addresses are relocated for the PSECT counter.

   MACRO generates a Block Type 22 for each .PSECT and  .ENDPS  pseudo-op
   it  processes.   These  Type  22 blocks are interleaved with the other
   blocks to indicate PSECT changes.  A Type 22 block is  also  generated
   at the beginning of each symbol table to show to which PSECT the table
   refers.


























                                    A-38
                                 FIELD TEST


                      Block Type 23 (PSECT End Block)

          |=======================================================|
          |            23             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                      PSECT Index                      |
          |-------------------------------------------------------|
          |                      PSECT Break                      |
          |=======================================================|

   Block Type 23 contains information about a PSECT.

   The PSECT index uniquely identifies the PSECT within the module  being
   loaded.  The Type 24 block assigns the index.

   The PSECT break  gives  the  length  of  the  PSECT.   This  break  is
   interpreted  as  being  relative  to the PSECT's origin in the current
   module.


































                                    A-39
                                 FIELD TEST


                    Block Type 24 (PSECT Header Block)

          |=======================================================|
          |            24            |       Short  Count         |
          |-------------------------------------------------------|
          |                   Relocation Word                     |
          |-------------------------------------------------------|
          |                 PSECT Name (SIXBIT)                   |
          |-------------------------------------------------------|
          |       Attributes         |       PSECT Index          |
          |-------------------------------------------------------|
          |                     PSECT Origin  (optional)          |
          |=======================================================|


   Block Type 24 contains information concerning a specified PSECT.   The
   first  word  contains  the  block  type number and the number of words
   associated with the block.  The second word  contains  the  relocation
   information.   The  third word contains the PSECT name in SIXBIT.  The
   fourth word is the PSECT origin specified for this module.

        Bit       Interpretation                     MACRO .PSECT Keyword

        11        PSECT is all within one
                  section.  This is the default.

        12        PSECT is in a nonzero
                  section.

        13        PSECT is page-aligned.             PALIGNED

        14        Concatenate parts of               CONCATENATE
                  PSECTs seen in distinct modules.

        15        Overlay parts of PSECTs            OVERLAY
                  seen in distinct modules.

        16        Read-only                          RONLY

        17        Read and write                     RWRITE

   LINK must find a Type 24 or 1050 block for a PSECT before it finds the
   index  for  that  PSECT.   (MACRO  generates a complete set of Type 24
   blocks for all PSECTs in a module before  generating  Type  2  (Symbol
   Table) Blocks and Type 11 (POLISH) Blocks.)









                                    A-40
                                 FIELD TEST


                       Block Type 37 (COBOL Symbols)

          |=======================================================|
          |            37             |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                       Data Word                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 37 contains a debugging symbol table for COBDDT, the  COBOL
   debugging  program.   If  local symbols are being loaded, the table is
   loaded.

   If a REL file contains a Block Type 37, it must appear after all other
   blocks  that cause code to be loaded or storage to be allocated in the
   core image.

   This block is in the same format as the Type 1 REL Block.





























                                    A-41
                                 FIELD TEST


                         Block Type 100 (.ASSIGN)

          |=======================================================|
          |            100            |        Short Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |Code |                Radix-50 Symbol 1                |
          |-------------------------------------------------------|
          |Code |                Radix-50 Symbol 2                |
          |-------------------------------------------------------|
          |                        Offset                         |
          |=======================================================|

   Block Type 100 defines Symbol 1 (in the diagram above) as a new global
   symbol  with  the  current  value  of Symbol 2, and then increases the
   value of Symbol 2 by the value of the given offset.

   LINK ignores Code in Symbol 2.

                                    NOTE

           Symbol 2 must be completely  defined  when  the  Block
           Type 100 is found.

   The MACRO pseudo-op .ASSIGN generates a Type 100 REL Block.




























                                    A-42
                                 FIELD TEST


                       Block Type 776 (Symbol File)

          |=======================================================|
          |            776            |        Long Count         |
          |-------------------------------------------------------|
          |           .JBSYM-Style Symbol Table Pointer           |
          |-------------------------------------------------------|
          |           .JBUSY-Style Symbol Table Pointer           |
          |-------------------------------------------------------|
          |                       Data Word                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 776 must begin in the first word of the file, if it  occurs
   at  all.   This  block  type  shows that the file is a Radix-50 symbol
   file.

   The data words form a Radix-50 symbol table for DDT in the same format
   as  the  table  loaded  for  the switches /LOCALS/SYMSEG or the switch
   /DEBUG.





























                                    A-43
                                 FIELD TEST


                      Block Type 777 (Universal File)

          |=======================================================|
          |             777           |        Long Count         |
          |-------------------------------------------------------|
          |                       Data Word                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 777 is included in a universal (UNV) file that is  produced
   by  MACRO  so that LINK will recognize when a UNV file is being loaded
   inadvertently.  When a Block Type 777 is encountered, LINK produces  a
   ?LNKUNS error.




































                                    A-44
                                 FIELD TEST


                         Block Type 1000 (Ignored)

          |=======================================================|
          |           1000            |        Long Count         |
          |-------------------------------------------------------|
          |                       Data Word                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 1000 is ignored by LINK.







































                                    A-45
                                 FIELD TEST


                          Block Type 1001 (Entry)


          |=======================================================|
          |       1001                |     Long Count            |
          |-------------------------------------------------------|
          |                       Symbol                          |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                        Symbol                         |
          |=======================================================|

   Block type 1001 is used to declare symbolic entry points.   Each  word
   contains  one  SIXBIT  symbol.   This  block is similar in function to
   block type 4.




































                                    A-46
                                 FIELD TEST


                       Block Type 1002 (Long Entry)


          |=======================================================|
          |         1002              |      Long  Count          |
          |-------------------------------------------------------|
          |                    Symbol Name                        |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                     Symbol Name                       |
          |=======================================================|

   Block type 1002 is used to declare a symbolic entry point with a  long
   name in SIXBIT.  The count reflects the symbol length in words.





































                                    A-47
                                 FIELD TEST


                       Block Type 1003 (Long Title)

          =======================================================
          |          1003          |      Long Count            |
          |-----------------------------------------------------|
          |             1          |    Count of Title words    |
          |-----------------------------------------------------|
          |                   Program Title                     |
          |-----------------------------------------------------|
          |              Additional Program Title               |
          |-----------------------------------------------------|
          |              Additional Program Title               |
          |-----------------------------------------------------|
                                  .
                                  . 
                                  .
          |-----------------------------------------------------|
          |                       |        Count of             |
          |              2        |   ASCII Comment Words       |
          |-----------------------------------------------------|
          |                  More  Comment  Words               |
          |-----------------------------------------------------|
          |                  More  Comment  Words               |
          |-----------------------------------------------------|
                                  . 
                                  . 
                                  .         
          |-----------------------------------------------------|
          |               3       |   Count Of Compiler Words   |
          |-----------------------------------------------------|
          |      Compiler Code    |          CPU Bits           |
          |-----------------------------------------------------|
          |                   Compiler Name (in  ASCII)         |
          |-----------------------------------------------------|
          |               Additional Compiler Name              |
          |-----------------------------------------------------|
          |               Additional Compiler Name              |
          |-----------------------------------------------------|
                                  .
                                  .
                                  .
          ------------------------------------------------------
          |              4        |            0               |
          |----------------------------------------------------|
          |                 Compile Date and Time              |
          |----------------------------------------------------|
          |                Compiler Version Number             |
          |----------------------------------------------------|
          |               5       |             0              |
          |----------------------------------------------------|
          |                     Device Name                    |
          |----------------------------------------------------|


                                    A-48
                                 FIELD TEST


          |                  UFD or 0 for TOPS-20              |
          |----------------------------------------------------|
          |               6       |             0              |
          |----------------------------------------------------|
          |                   TOPS-10 File Name                |
          |----------------------------------------------------|
          |       File Extension  |             0              |
          |----------------------------------------------------|
          |               7       |      number of SFDs        |
          |----------------------------------------------------|
          |                  SIXBIT SFD 1                      |
          |----------------------------------------------------|
          |                  SIXBIT SFD 2                      |
          |----------------------------------------------------|
                                  .
                                  .
                                  .
          |----------------------------------------------------|
          |              10       |   Count of TOPS-20 File    |
          |                       |    Spec Words (in ASCII)   |
          |----------------------------------------------------|
          |               TOPS-20 File Spec                    |
          |----------------------------------------------------|
          |               TOPS-20 File Spec                    |
          |----------------------------------------------------|
                                  .
                                  . 
                                  .
          |----------------------------------------------------|
          |              11       |             0              |
          |----------------------------------------------------|
          |                  Source Version Number             |
          |----------------------------------------------------|
          |                  Date and Time                     |
          |====================================================|

   Block type 1003 is used to declare long title symbols in SIXBIT and to
   furnish  other  information  about the source module.  This Block Type
   contains the information that LINK prints in the map file.

   Block type 1003 consists of sub-blocks  1  through  11  (octal).   The
   Title  sub-block  must  be the first sub-block specified and cannot be
   omitted.  You can omit  other  sub-blocks,  but  the  sub-blocks  must
   remain in numerical order.

   The Program Title is a one word title from 1- to 72-SIXBIT  characters
   long.   You  can specify a title of 0, and LINK defaults to .MAIN, but
   you may want to enter a more specific title.

   For the compiler code and the CPU code, refer to  the  explanation  of
   Block Type 6, where these codes are listed.



                                    A-49
                                 FIELD TEST


   In sub-block 5, the Device name is where the source file  resides  and
   the UFD and SFD words are 0 for TOPS-20.

   In sub-block 10, the TOPS-20 file specification must be  specified  in
   the following format:

   <directory.subdirectories>filename.filetype.version number;attributes

   This specification identifies the source file.  LINK outputs this file
   specification to the map file in the order you enter it.

   The Time and Date are in TOPS-10 format.  The date is derived  from  a
   code.  That is given by the following formula:

        code =  31[12(year-1964)+(month-1)]+(day-1)

   You can obtain the current day, month, and year using the formulas:

        day = mod(code,31)+1
        month = mod(code/31,12)+1
        year = (code/372)+1964

   The Time is the time in milliseconds that has elasped since midnight.

   See  the  TOPS-10  Monitor  Calls  Reference  Manual  for   additional
   information on date and time.




























                                    A-50
                                 FIELD TEST


                   Block Type 1004 (Byte Initialization)

          |======================================================|
          |           1004            |        Long  Count       |
          |------------------------------------------------------|
          |                    Relocation Word                   |
          |------------------------------------------------------|
          |                      Byte Count                      |
          |------------------------------------------------------|
          |                     Byte Pointer                     |
          |------------------------------------------------------|
          |                     Byte String                      |
          |------------------------------------------------------|
                                      .
                                      .
                                      .
   The above Block Type 1004 format is used to move  a  character  string
   into static storage.  This format uses old style relocation.

   The byte count is the number of bytes in the string.  The byte pointer
   is relocated and used to initialize a string in the user's program.

   A second format for Block Type 1004 follows:

          |=======================================================|
          |           1004            |        Long  Count        |
          |-------------------------------------------------------|
          |                    Relocation Word                    |
          |-------------------------------------------------------|
          |                     Global Symbol                     |
          |-------------------------------------------------------|
          |                      Byte Count                       |
          |-------------------------------------------------------|
          |                     Byte Pointer                      |
          |-------------------------------------------------------|
          |                     Byte String                       |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .

   In this format, the global symbol (in SIXBIT) is used to relocate  the
   byte  pointer.   The  symbol  must  be  defined when this REL block is
   encountered.










                                    A-51
                                 FIELD TEST


                   Block Types 1010 - 1037 (Code Blocks)

   Block types 1010 through 1037 are similar in  function  to  blocks  of
   Type  1.   They contain code and data to be loaded.  These blocks also
   contain relocation bytes that permit inclusion of PSECT indexes  local
   to  the module.  For PSECTed programs with many inter-PSECT references
   this permits a substantial decrease in the size of the REL files.  The
   number  of PSECTs that can be encoded in this manner is limited by the
   size of the relocation byte.  A set of parallel code blocks  differing
   only  in  the  size  of  the  relocation  byte permits the compiler or
   assembler to select the most space efficient representation  according
   to the number of PSECTs referenced in a given load module.

   This set of blocks is divided by the type of relocation:

        Right Relocation              Block types 1010 - 1017

        Left/Right Relocation         Block types 1020 - 1027

        Thirty-bit Relocation         Block types 1030 - 1037


































                                    A-52
                                 FIELD TEST


                   Blocks 1010 - 1017 (Right Relocation)

          |=======================================================|
          |           1010            |      Long  Count          |
          |-------------------------------------------------------|
          |     b1   |   b2   |   b3   |   . . .    |      bi     |
          |-------------------------------------------------------|
          |                    Beginning Address                  |
          |-------------------------------------------------------|
          |                         Data 1                        |
          |-------------------------------------------------------|
          |                         Data 2                        |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data (i-1)                      |
          |=======================================================|


   Block Types 1010 - 1017 are identical in function.  They  differ  only
   in  the  size  and  number  of relocation bytes.  Each relocation byte
   applies to the right half of the corresponding data word.

        Long Count          is the length of the REL block, including all
                            words in the block except the Header word.

        b1,b2...bi          are the relocation bytes.

                            Each relocation byte contains a  PSECT  index
                            number.   A  PSECT  index  must be explicitly
                            specified.  There is  no  default  for  PSECT
                            index.   A  zero  byte  means  no  relocation
                            (absolute data).   All  PSECT  index  numbers
                            must  reference  predefined  PSECTs.   In the
                            table below, I-value is the maximum number of
                            PSECT  indexes  that  can  be referenced in a
                            field.

                            Size I-value Block Type

                               2   18      1010
                               3   12      1011
                               6    6      1012
                               9    4      1013
                              18    2      1014

                            A size of 2 allows 3  PSECTs;  a  size  of  3
                            allows 7 (2**3-1) PSECTs, etc.




                                    A-53
                                 FIELD TEST


        Beginning Addr      is the address where the block of code is  to
                            be  loaded.   This  address is relocated with
                            respect to the 30-bit address for  the  PSECT
                            in  "b1".  It is not necessary to declare the
                            current PSECT with a block of Type 22.

        Data1...Data(i-1)   are the words to be loaded.  The right halves
                            of  these words are relocated with respect to
                            the various PSECTs that are specified by  the
                            corresponding relocation bytes, b2,b3,...bi.












































                                    A-54
                                 FIELD TEST


           Block Types 1020-1027 (Left/Right Relocation Blocks)

          |=======================================================|
          |            1020           |       Long  Count         |
          |-------------------------------------------------------|
          |    L1  | R1   |   L2  |  R2  |  . . .  |   Li  |  Ri  |
          |-------------------------------------------------------|
          |                  Beginning Address                    |
          |-------------------------------------------------------|
          |                         Data 1                        |
          |-------------------------------------------------------|
          |                         Data 2                        |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                       Data (i-1)                      |
          |=======================================================|

   Block Types 1020 - 1027 are identical in function.  They  differ  only
   in  the  size  and  number  of  relocation  bytes.  Each pair of bytes
   applies  to  the  left  and  right  halves,   respectively,   of   the
   corresponding data word.

        Long Count          is the length of the REL block, including all
                            words except the Header word.

        L1,R1               are the relocation byte pairs  for  the  left
                            and  right halves respectively.  In the table
                            below, I-value is the maximum number of PSECT
                            indexes that can be referenced in a field.

                            Size I-Value Block Type

                              2    9       1020
                              3    6       1021
                              6    3       1022
                              9    2       1023

                            (Block Types 1024-1027 are reserved)

                            Polish  blocks  must  be  used  to  do   left
                            relocation  if  there  are more than (2**9)-1
                            (decimal 511) PSECTs local to the module.

        Beginning Addr      is the address of the block  of  code  to  be
                            loaded.    This  address  is  relocated  with
                            respect to the 30-bit address for  the  PSECT
                            in "R1".  "L1" must be zero.




                                    A-55
                                 FIELD TEST


        Data1,..Data(i-1)   is the block of code to be loaded, whose left
                            and  right  halves are relocated with respect
                            to the various PSECTs  as  specified  by  the
                            corresponding   byte  pairs.   The  L2  index
                            relocates the left half of data word 1 and R2
                            relocates  the  right  half  of  data word 1.
                            Note that these blocks contain  2  bytes  for
                            each  data  word  as compared to one byte for
                            Block Types 1010 - 1017.













































                                    A-56
                                 FIELD TEST


          Block Types 1030 - 1037 (Thirty-bit Relocation Blocks)

          |=======================================================|
          |           1030            |       Long  Count         |
          |-------------------------------------------------------|
          |     b1   |   b2   |    . . .   |         bi           |
          |-------------------------------------------------------|
          |                  Beginning Address                    |
          |-------------------------------------------------------|
          |                         Data 1                        |
          |-------------------------------------------------------|
          |                         Data 2                        |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                        Data (i-1)                     |
          |=======================================================|

   Block Types 1030 - 1037 are identical in function.  They  differ  only
   in  the  size  and  number  of relocation bytes.  Each relocation byte
   applies to the entire 30-bit address field of the  corresponding  data
   word.

        103x                is the Block Type number

        Long Count          is the length of the REL block, including all
                            words in the block except the Header word.

        b1,b2..bi           are the relocation bytes.

                            Each relocation byte contains a  PSECT  index
                            number.   A  zero  byte  means  no relocation
                            (absolute data).   All  PSECT  index  numbers
                            must  reference  predefined  PSECTs.   In the
                            table below, I-value is the maximum number of
                            PSECT  indexes  that  can  be referenced in a
                            field.

                            Size I-Value   Block Type     Maximum No.  of
                                                          PSECTs

                               2   18        1030           3
                               3   12        1031           7
                               6    6        1032           63
                               9    4        1033           511
                              18    2        1034           More than 511

                            (Block Types 1035 - 1037 are reserved)

        Beginning Addr      is the address where the block of code is  to


                                    A-57
                                 FIELD TEST


                            be  loaded.   This  address is relocated with
                            respect to the PSECT  in  "b1".   It  is  not
                            necessary to declare the current PSECT with a
                            block of Type 22.

        Data1...Data(i-1)   are the  words  to  be  loaded.   The  30-bit
                            address  field  of  these  words is relocated
                            with respect to the various PSECTs  that  are
                            specified  by  the  corresponding  relocation
                            bytes, b2,b3,...bi.












































                                    A-58
                                 FIELD TEST


                  Block Type 1042 (Request Load for SFDs)

          |=======================================================|
          |           1042            |        Long  Count        |
          |-------------------------------------------------------|
          |                        Device                         |
          |-------------------------------------------------------|
          |                    SIXBIT Filename                    |
          |-------------------------------------------------------|
          |        File Extension     |    Directory Count        |
          |-------------------------------------------------------|
          |               Project-Programmer Number               |
          |-------------------------------------------------------|
          |                         SFD1                          |
          |-------------------------------------------------------|
          |                         SFD2                          |
          |-------------------------------------------------------|
                                    .
                                    .
                                    .

   Block Type 1042 contains a list of files to be loaded.  It is  similar
   to blocks of Type 16, but it supplies TOPS-10 sub-file directories for
   the files being requested.  The first three data words  (device,  file
   name,  and  extension) are required.  The right half of the third word
   (directory count) specifies the number of directory  levels  that  are
   included.  For example, the directory [27,5434,SFD1,SFD2] would have a
   directory count of 3.

   LINK saves the specifications for the files to be  loaded,  discarding
   duplicates.  LINK loads all specified files at the end of loading, and
   immediately before beginning library searches.






















                                    A-59
                                 FIELD TEST


                Block Type 1043 (Request Library for SFDs)

          |=======================================================|
          |           1043            |        Long  Count        |
          |-------------------------------------------------------|
          |                        Device                         |
          |-------------------------------------------------------|
          |                    SIXBIT Filename                    |
          |-------------------------------------------------------|
          |        File Extension     |    Directory Count        |
          |-------------------------------------------------------|
          |               Project-Programmer Number               |
          |-------------------------------------------------------|
          |                         SFD1                          |
          |-------------------------------------------------------|
          |                         SFD2                          |
          |-------------------------------------------------------|
                                    .
                                    .
                                    .

   Block Type 1043 specifies the files to be searched as  libraries.   It
   is similar to Type 17 Blocks, except that it provides TOPS-10 sub-file
   directories.  The first three  data  words  (device,  file  name,  and
   extension)  are required.  The right half of the third word (directory
   count) specifies the number of directory  levels  that  are  included.
   For  example, the directory [27,5434,SFD1,SFD2] would have a directory
   count of 3.

   The specified files are searched after requested files are loaded, but
   before user and system libraries are searched.























                                    A-60
                                 FIELD TEST


                      Block Type 1044 (ALGOL Symbols)

          |=======================================================|
          |           1044            |        Long Count         |
          |-------------------------------------------------------|
          |                       Data Word                       |
          |-------------------------------------------------------|
                                      .                           
                                      .
                                      .                           
          |-------------------------------------------------------|
          |                       Data Word                       |
          |=======================================================|

   Block Type 1044 contains a debugging  symbol  table  for  ALGDDT,  the
   ALGOL debugging program.

   If an ALGOL main program has been loaded, or  if  you  have  used  the
   /SYFILE:ALGOL  switch, LINK writes the data words into a SYM file.  In
   addition, if any Type 15 (ALGOL OWN) REL blocks have been  seen,  LINK
   stores  the  file  specification  of the file into the first OWN block
   loaded.

                                    NOTE

           If you have specified the /NOSYMBOLS switch, or if you
           have  specified  the  /SYFILE  switch with an argument
           other than ALGOL, then  LINK  ignores  any  Type  1044
           blocks found.

























                                    A-61
                                 FIELD TEST


                     Block Type 1045 (Writable Links)

          |=======================================================|
          |            1045           |      Long  Count          |
          |-------------------------------------------------------|
          |                         Flags                         |
          |-------------------------------------------------------|
          |                         Symbol                        |
          |-------------------------------------------------------|
          |                         Symbol                        |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |                         Symbol                        |
          |=======================================================|

   Block type 1045 declares as writable either the  link  containing  the
   current  module  or  the  links  containing  the  definitions  of  the
   specified symbols or both.  This block type  must  follow  any  common
   block declarations (Types 20 or 6) in a module.

   The flag word indicates which links are writable.  If bit one  is  set
   then  the  link containing the current module and the links containing
   the definitions of the specified symbols are writable.  If bit one  of
   the  flag  word is not set then the link containing the current module
   is not writable, but the links containing the  specified  symbols  are
   writable.  All unused flag bits are reserved and should be zero.

   Any symbols specified in a block of Type 1045 must be defined  in  the
   path  of  links  leading  from  the  root link to the current link.  A
   module cannot declare a parallel or inferior link to be writable.

   If the symbol name contains six or fewer characters it is  represented
   in a single word, left justified, with the following format:

          |=======================================================|
          |                  SIXBIT Symbol Name                   |
          |=======================================================|














                                    A-62
                                 FIELD TEST


   If the symbol name contains more than six characters it is represented
   in the following format:

          Bits
          0              5 6                 29  30             35
          |=======================================================|
          |        0      |    Reserved (0)    |  Long Count      |
          |-------------------------------------------------------|
          |             Word 1 of SIXBIT Symbol Name              |
          |-------------------------------------------------------|
          |             Word 2 of SIXBIT Symbol Name              |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |     Word (Long Count -1) of SIXBIT Symbol Name        |
          |=======================================================|

   The first six bits of a long symbol are always 0.  This  distinguishes
   a long symbol name from a single word symbol name.  N is the length of
   the symbol name  including  the  header  word.   The  remaining  words
   contain  the  symbol  name  in  SIXBIT, six characters to a word, left
   justified.






























                                    A-63
                                 FIELD TEST


                  Block Type 1050 (Long PSECT Name Block)

          0                         17 18                       35
          |=======================================================|
          |            1050           |       Long  Count         |
          |-------------------------------------------------------|
          | Reserved for DIGITAL, MBZ |       Index               |
          |-------------------------------------------------------|
          |                 SIXBIT  Symbol Name                   |
          |-------------------------------------------------------|
          |                        Attributes                     |
          |-------------------------------------------------------|
          |                         Origin         (Optional)     |
          |=======================================================|

   where SIXBIT Symbol Name may be either a word  of  up  to  six  SIXBIT
   characters, or the following block.

          0       5 6                                 29 30     35
          |=======================================================|
          |     0   | Reserved for DIGITAL, MBZ   | Long Count    |
          |-------------------------------------------------------|
          |            First word of SIXBIT Symbol Name           |
          |-------------------------------------------------------|
          |            Second word of SIXBIT Symbol Name          |
          |-------------------------------------------------------|
                                                                 
                                                                 
          |-------------------------------------------------------|
          |           Nth word of SIXBIT Symbol Name              |
          |=======================================================|

   Block Type 1050 creates a PSECT with the given name, if none currently
   exists.   It  also  assigns  a unique index number to the PSECT.  This
   index is binding only  in  the  current  module.   LINK  clears  PSECT
   indexes  at the end of each module.  PSECT indexes in any given module
   must be declared in consecutive order starting at index "1".

   Blocks Type 1050 also assigns attributes to a PSECT and specifies  the
   PSECT's origin address.  The attributes that can be assigned are:

        Bit       Description

        11        PSECT is confined to one section.  If this bit is  set,
                  LINK  gives  an  error if the PSECT overflows.  You can
                  set Bit 11 or Bit 12, but not  both.   Bit  11  is  the
                  default.  There is no equivalent MACRO .PSECT Keyword.

        12        PSECT is in a nonzero section.  If  this  bit  is  set,
                  LINK  gives a warning if the PSECT is placed in section
                  zero.  There is no equivalent MACRO .PSECT Keyword.



                                    A-64
                                 FIELD TEST


        13        PSECT is  PAGE-ALIGNED.   PALIGNED  is  the  equivalent
                  MACRO .PSECT Keyword.

        14        CONCATENATE parts of PSECTs seen in distinct modules.

                  You can set Bit 14 (CONCATENATED) or Bit 15 (OVERLAID),
                  but  not  both.   The  CONCATENATE and OVERLAID (listed
                  below)  attributes  are  mutually   exclusive.    These
                  attributes  also span modules; so if one module sets an
                  attribute and a later module sets a mutually  exclusive
                  attribute, LINK issues the warning:

                  %LNKCOE  Both  CONCATENATE   and   OVERLAY   attributes
                  specified for psect [name].

                  If neither is set, CONCATENATED is the default,  and  a
                  warning message is not returned if subsequent pieces of
                  the PSECT are marked OVERLAID.

                  CONCATENATED is the equivalent MACRO .PSECT Keyword.

        15        OVERLAID parts of  PSECTs  seen  in  distinct  modules.
                  OVERLAID is the equivalent MACRO .PSECT Keyword.

        16        This PSECT must be READ-ONLY.

                  You can set Bit 16 (READ-ONLY) or  Bit  17  (WRITABLE),
                  but  not  both.   The  READ-ONLY  and  WRITABLE (listed
                  below)  attributes  are  mutually   exclusive.    These
                  attributes  also span modules; so if one module sets an
                  attribute and a later module sets a mutually  exclusive
                  attribute, LINK issues the warning:

                  %LNKRWA  Both   READ-ONLY   and   WRITABLE   attributes
                  specified   for  psect  [name].   If  neither  is  set,
                  WRITABLE is the default, and a warning message  is  not
                  returned  if  subsequent pieces of the PSECT are marked
                  READ-ONLY.

                  RONLY is the equivalent MACRO .PSECT Keyword.

        17        This PSECT must be WRITABLE.  RWRITE is the  equivalent
                  MACRO .PSECT Keyword.

   All other bits in the Attributes word must be 0.

   The origin specified in this block is absolute.

   At least one block type 1050 (or the related block 24) is required for
   each  PSECT  being  loaded, and this block must be loaded prior to any
   other blocks that reference its PSECT (that is, use the  unique  index
   number).


                                    A-65
                                 FIELD TEST


                    Block Type 1051 (Set Current PSECT)

          |=======================================================|
          |           1051            |      Long Count           |
          |-------------------------------------------------------|
          | Reserved For DIGITAL, MBZ |           Index           |
          |=======================================================|

   Block  type  1051  resets  the  "current  PSECT"  against  which  LINK
   relocates subsequent REL blocks if no PSECT is explicitly specified.












































                                    A-66
                                 FIELD TEST


                        Block Type 1052 (PSECT End)

          |=======================================================|
          |            1052           |    Long Count             |
          |-------------------------------------------------------|
          |          MBZ              |   PSECT Index Number      |
          |-------------------------------------------------------|
          |                      PSECT Break                      |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |           MBZ             |   PSECT Index Number      |
          |-------------------------------------------------------|
          |                      PSECT Break                      |
          |=======================================================|

   Block Type 1052 allocates additional space for a  given  PSECT.   This
   space is located between the last address in the PSECT containing data
   and the address given by the PSECT break.  A block of  Type  1052  can
   contain more than one pair of PSECT indexes and breaks.

   A module must contain a block of Type 24 (PSECT  Name)  or  Type  1050
   (Long  PSECT  Name)  with the given PSECT index before a block of Type
   1052 is generated.  If a given PSECT has more than one block 1052 in a
   single module, the block with the largest break address is used.

   The break is interpreted as being relative to the  PSECT's  origin  in
   the current module.
























                                    A-67
                                 FIELD TEST


                    Block Type 1060 (Trace Block Data)

          |=======================================================|
          |           1060            |        Long Count         |
          |-------------------------------------------------------|
          |                   SIXBIT Edit Name                    |
          |-------------------------------------------------------|
          |        Active Code        |       Last Changer        |
          |-------------------------------------------------------|
          |       Creator Code        |    15-Bit Date Created    |
          |-------------------------------------------------------|
          |      Installer Code       |   15-Bit Date Installed   |
          |-------------------------------------------------------|
          |                       Reserved                        |
          |-------------------------------------------------------|
          |        Edit Count         |      PCO Group Count      |
          |-------------------------------------------------------|
          |                                                       |
          \                                                       /
                      Associated Edit Names And Codes            
          /                                                       \
          |                                                       |
          |-------------------------------------------------------|
          |                                                       |
          \                                                       /
                         Program Change Order Groups
          /                                                       \
          |                                                       |
          |=======================================================|

   Block Type 1060 contains  data  used  by  the  MAKLIB  program.   LINK
   ignores this block type.






















                                    A-68
                                 FIELD TEST


                    Block Type 1070 (Long Symbol Names)

   |====================================================================|
   |              1070                !          Long Count             |
   |--------------------------------------------------------------------|
   |     Code      ! 0 !      N       !P!  R  !      V     !     0      |
   |--------------------------------------------------------------------|
   |         Left PSECT index        !       Right PSECT index          |
   |--------------------------------------------------------------------|
   |                             Value                                  |
   |--------------------------------------------------------------------|
   |                             Name                                   |
   |--------------------------------------------------------------------|
   \                                                                    \
   \                    N additional name words                         \
   \                                                                    \
   |--------------------------------------------------------------------|
   \                                                                    \
   \                   V additional value words                         \
   \                                                                    \
   |====================================================================|

   This block defines a long symbol.  A symbol defined  with  this  block
   can:

         o  be output to the DDT symbol table.   Symbols  longer  than  6
            characters are truncated when output to the DDT symbol table.

         o  be output to LINK MAP if requested.

         o  have its value relocated as specified.

         o  resolve global requests.

   The Long Symbol Name Block is divided into two sections, the basic and
   the extension sections.

   The basic section consists of four words:  the flag word, an  optional
   PSECT index word, the value word, and name word.

   The Flags word contains information about  the  type  of  symbol,  the
   length  of the symbol name, and relocation.  The optional word defines
   the PSECT index.  The Value word contains  the  symbol's  value.   The
   Name word contains the symbol's name.

   If the name or the value cannot  fit  in  a  single  word,  the  block
   contains  an  extension  section that consists of as many words as are
   necessary to accommodate the symbol name and the value.  The length of
   the  symbol  name  and value is stored in the Flag word and determines
   how many words are allocated for the long symbol name in the extension
   section.   The  maximum  size for the symbol is 72 characters.  In the
   case of a short symbol name only the basic section is used.


                                    A-69
                                 FIELD TEST


   The following pages provide detailed information on  the  block.   For
   each word, the field, bits, and description is given.


        Field               Bits

                                Header Word

                                Description

   Block Type               0-17    1070

   Block Length             18-35   Number of words used in this block


                                 Flag Word

                                Description

   Code                     0-8     A nine-bit code field:

                                    bit 0  Must Be Zero

                                    000    Program name

                                    100    Local symbol definitions
                                           110  Suppressed to DDT
                                           120  MAP only

                                    200    Global   symbols    completely
                                           defined by one word
                                           202  Undefined
                                           203  Right fixup
                                           204  Left fixup
                                           205  Right and left fixups
                                           206  30-bit fixup
                                           207  Fullword fixup
                                           210-217 Suppress to DDT
                                           220-227 MAP only

                                    240 to Global symbol request for
                                    247    chain fixup
                                           240  Ignored (No fixup)
                                           241  Undefined
                                           242  Undefined
                                           243  RH fixup
                                           244  LH fixup
                                           245  Undefined
                                           246  30-bit fixup
                                           247  Fullword fixup

                                    250 to Global request for


                                    A-70
                                 FIELD TEST


                                    257    additive fixups (the value  of
                                           x  has  the same meaning as in
                                           0-7 above)

                                    260 to Global request for additive
                                    267    symbol fixups (the value of  x
                                           has the same meaning as in 0-7
                                           above)

                                    300    Block names












































                                    A-71
                                 FIELD TEST


                                    NOTE

           All symbols that require a fixup for their  definition
           must  have  the  fixup block immediately following the
           entry.

        Field                       Bits             Description

                            Flag Word (Continued)

   0                        9-10    Must Be Zero

   N--Name length           11-17   If not zero, extended name  field  of
                                    length  n  words is used, so that the
                                    name occupies N+1 words.

   P--PSECT Flag            18      If bit 18=0, relocate with respect to
                                    the  current PSECT.  No PSECT numbers
                                    are needed.

                                    If bit 18=1, relocate with respect to
                                    the PSECT specified in the next word.

   R--Relocation Type       19-21   3-bit relocation type field.

                                         0    Absolute
                                         1    Right half
                                         2    Left half
                                         3    Both halves
                                         4    30-bit
                                         5    Fullword

   V--Value field           22-28   Number of additional value  words  if
                                    value is a long symbol.

   0                        29-35   Not used


                               PSECT Indexes

   PSECT Indexes                    Exists only if bit 18 equals 1 in the
                                    Flag  word.   Contains Left and Right
                                    PSECT numbers.  Bit 0 and bit  18  of
                                    this word are zeros.


                                   Value

   Value Word                       Contains the symbol value, it may  be
                                    relocated   as   specified   by   the
                                    relocation type and the PSECT numbers
                                    provided.   Contains a symbol for 26x


                                    A-72
                                 FIELD TEST


                                    codes.


                                    Name

   Name Word                        Contains the symbol name in SIXBIT.


                          N Additional Name Words

   Additional name field            Optional.  It exists only if N  >  0.
                                    It contains the additional characters
                                    when a long symbol name is used.


                          V Additional Value Words

   Additional value field           Optional.  It exist  only  if  the  V
                                    field  is greater than 0.  This field
                                    contains  the  additional  characters
                                    when  a  long  symbol  name  is being
                                    resolved.  The  first  word  contains
                                    the length of the extended field.

   The following fixup rules apply to this block:

        1.  Only one fixup by a Type 2, 10, 11, 12, 15,  1070,  1072,  or
            1120  Block  is  allowed  for  a  given field.  (There can be
            separate fixups for the left and right  halves  of  the  same
            word.)

        2.  Fixups are not necessarily performed in the order LINK  finds
            them.

        3.  A location must contain data before the location can be fixed
            up.


















                                    A-73
                                 FIELD TEST


                    Block Type 1072 (Long Polish Block)

          |=======================================================|
          |          1072          |          Long  Count         |
          |-------------------------------------------------------|
          |              Half-Word Polish String                  |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |=======================================================|

   Long Polish Blocks of type 1072 define Polish fixups for operations on
   relocatable  long external symbols.  This Block Type is interpreted as
   a string of 18-bit operators and operands.  The  block  is  in  Polish
   prefix  format, with the store operator at the end of the block.  Each
   halfword can contain one of the following:

         o  A halfword code in which the first 9 bits  contain  the  data
            length  (when  applicable)  and the second 9 bits contain the
            code telling LINK how to interpret the data that follows.

         o  A halfword data or a part of  a  larger  data  packet  to  be
            interpreted by LINK as indicated by the code that immediately
            precedes it.

         o  A PSECT index of the format 400000+N.  The PSECT index  field
            of  a  long  Polish  block  causes LINK to relocate addresses
            against the PSECT number specified in the "N"  of  the  PSECT
            index 400000+N.

         o  A Polish operator.

                                    NOTE

           Operations are performed in the order  in  which  they
           are encountered.

















                                    A-74
                                 FIELD TEST


                              CODE DEFINITIONS

                             Data Packet Codes


   Category         Code                       Description

   Operand         xxxyyy          next "xxx+1" halfwords contain data of
                                   type "yyy"

                   000000          halfword - absolute
                   001000          fullword - absolute

                   000001          halfword - relocatable
                   001001          fullword - relocatable

                   000010          fullword symbol name in Radix-50
                   xxx010          xxx+1  halfwords  of  symbol  name  in
                                   SIXBIT

                                    NOTE

           You cannot store a symbol in a single  halfword.   You
           must  place  the symbol in the first halfword and fill
           the second halfword with zeroes.


                           Polish Operator Codes

   Category         Code                       Description

   Operator
                   000100          Add
                   000101          Subtract
                   000102          Multiply
                   000103          Divide
                   000104          Logical AND
                   000105          Logical OR
                   000106          Logical shift
                   000107          Logical XOR
                   000110          One's complement (not)
                   000111          Two's complement (negative)
                   000112          Count leading zeros
                   000113          Remainder
                   000114          Magnitude
                   000115          Maximum
                   000116          Minimum
                   000117          Equal relation
                   000120          Link
                   000121          Defined
                   000122-00177    Reserved



                                    A-75
                                 FIELD TEST


                            Store Operator Codes

   Store Operator  xxx=0 or 1

                   For xxx=0       Next two halfwords contain a  Radix-50
                                   symbol to be resolved.

                   xxx777-xxx770   Chained   fixup    with    relocatable
                                   addresses.    Next   xxx+1   halfwords
                                   contain  the  start  address  of   the
                                   chain.

                   000777          Right   half   chained   fixup    with
                                   relocatable  address.   Next  halfword
                                   contains a relocatable address.

                   000776          Left   half   chained    fixup    with
                                   relocatable  address.   Next  halfword
                                   contains a relocatable address.

                   000775          30-bit chained fixup with  relocatable
                                   address.   Next  halfword  contains  a
                                   relocatable address.

                   000774          Fullword    chained     fixup     with
                                   relocatable  address.   Next  halfword
                                   contains a relocatable address.

                   001777          Right   half   chained   fixup    with
                                   relocatable  address.   Next  fullword
                                   contains a relocatable address.

                   001776          Left   half   chained    fixup    with
                                   relocatable  address.   Next  fullword
                                   contains a relocatable address.

                   001775          30-bit chained fixup with  relocatable
                                   address.   Next  fullword  contains  a
                                   relocatable address.

                   001774          Fullword    chained     fixup     with
                                   relocatable  address.   Next  halfword
                                   contains a relocatable address.

                   xxx767-xxx764   Chained    fixups    with     absolute
                                   addresses.

                   000767-000764   Chained fixup with  absolute  address.
                                   Next  halfword  contains  an  absolute
                                   address.

                   001767-001764   Chained fixup with  absolute  fullword


                                    A-76
                                 FIELD TEST


                                   address.   Next  two halfwords contain
                                   absolute address.

                   xxx757-xxx754   Symbol  fixup.   For  1<=xxx<=377  the
                                   next  xxx+1 halfwords contain a SIXBIT
                                   symbol name to be resolved.

                   xxx757          Right half symbol fixup.
                   xxx756          Left half symbol fixup.
                   xxx755          30-bit symbol fixup.
                   xxx754          Fullword symbol fixup.

                   xxx747-xxx700   Not defined

   PSECT index     4000000+N       PSECT index for PSECT N.

   The following fixup rules apply to this block:

        1.  Only one fixup by a Type 2, 10, 11, 12, 15,  1070,  1072,  or
            1120  Block  is  allowed  for  a  given field.  (There can be
            separate fixups for the left and right  halves  of  the  same
            word.)

        2.  Fixups are not necessarily performed in the order LINK  finds
            them.

        3.  A location must contain data before the location can be fixed
            up.


























                                    A-77
                                 FIELD TEST


                    Block Type 1074 (Long Common Name)

          |=======================================================|
          |          1074          |          Long  Count         |
          |-------------------------------------------------------|
          |      PSECT Index       |          Symbol Length       |
          |-------------------------------------------------------|
          |                 Common Block Length                   |
          |-------------------------------------------------------|
          |                        Symbol                         |
          |                    (More Symbol)                      |
          ==========================================================

   Block Type 1074 defines a long COMMON name. 








































                                    A-78
                                 FIELD TEST


            Block types 1120-1127 (Argument Descriptor Blocks)

          |=======================================================|
          |       1120 - 1127        |   Long   Count             |
          |-------------------------------------------------------|
          |            N-Bit Byte Relocation Information          |
          |-------------------------------------------------------|
          |               Argument Block Address  or 0            |
          |-------------------------------------------------------|
          |               Associated Call Address or 0            |
          |-------------------------------------------------------|
          |                  Loading Address or 0                 |
          |-------------------------------------------------------|
          |            Length of Function Name (in bytes)         |
          |-------------------------------------------------------|
          |                  Function Name (ASCIZ)                |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |      Flag Bits          |       Argument Count        |
          |-------------------------------------------------------|
          |       First Argument's Primary Descriptor             |
          |-------------------------------------------------------|
          |       First Argument's Secondary Descriptor           |
          |-------------------------------------------------------|
          |       Second Argument's Primary Descriptor            |
          |-------------------------------------------------------|
          |       Second Argument's Secondary Descriptor          |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |       nth Argument's Primary Descriptor               |
          |-------------------------------------------------------|
          |       nth Argument's Secondary Descriptor             |
          |=======================================================|


   A block of this type is  generated  for  the  argument  list  to  each
   subroutine  call.  The subroutine entry point also specifies one block
   with this format, though for the callee the argument block address  is
   zero.   If  a  descriptor block is associated with an argument list it
   must always follow the loading of the argument list.

   The associated call address  is  used  by  LINK  in  diagnostic  error
   messages  and  its  value is determined by the compiler.  The argument
   block address is nonzero if the descriptor block is associated with  a
   call.   In  this case the argument block address points to the base of
   the argument block.


                                    A-79
                                 FIELD TEST


   The argument block address, associated call address  and  the  loading
   address are all relocatable.

   The argument descriptors in these type blocks describe the  properties
   of  each formal (in the case of an entry point) or actual (in the case
   of a call).  In either case the name  of  the  associated  routine  is
   specified  as  a byte count followed by an ASCIZ string.  Each primary
   description is optionally followed by a secondary descriptor.

   There are five flag bits in the Descriptor Block:


     Bit                                    Usage

      0              If bit 0 is 1 then a difference between  the  actual
                     number  of  arguments  and  the  expected  number of
                     arguments is flagged as a warning at load time.   If
                     bit 0 is 0 no action is taken.

      1              If bit 1 is 1 then the block is  associated  with  a
                     function  call.   If  bit  1  is 0 then the block is
                     associated with the function definition.

      2              If bit 2 is 1 then the descriptor  block  is  loaded
                     into  user  memory at the loading address.  This bit
                     is ignored.

      3              If bit 3 is 1 then the callee returns  a  value  and
                     the   value's  descriptor  is  the  last  descriptor
                     specified.

      4              If bit 4 is 1,  and  the  caller  expects  a  return
                     value, which is not provided by the called function,
                     or if the called  function  unexpectedly  returns  a
                     value,  then LINK will issue an error.  The severity
                     of the error is controlled by the coercion block.


















                                    A-80
                                 FIELD TEST


   The format for the argument descriptors is as follows:


      Bit                                   Usage

     0               (Reserved)

     1               No update.  In a caller  block  the  argument  is  a
                     literal, constant, or expression.  In a callee block
                     the argument won't be modified.

     2-4             Passing mechanism

                            000 - pass by address
                            001 - pass by descriptor
                            010 - pass immediate value
                            Others - reserved

     5               Compile-time constant

     6-11            Argument type code (see below)

     12-18           (Reserved)

     19-26           (Reserved)

     27-35           Number of secondary descriptors


   The argument type codes are as follows:


     Type-Code                   Usage

         0           No use
         1           FORTRAN logical
         2           Integer
         3           (Reserved)
         4           Real
         5           (Reserved)
         6           36-bit string
         7           Alternate return (label)
         10          Double real
         11          Double integer
         12          Double octal
         13          G-floating real
         14          Complex
         15          COBOL format byte string  descriptor  (for  constant
                     strings),   or   FORTRAN  character  for  a  program
                     compiled with FORTRAN /NOEXTEND switch
         16          BASIC shared string descriptor
         17          ASCIZ string


                                    A-81
                                 FIELD TEST


         20          Seven-bit ASCII string
         21          FORTRAN character, one-word global byte pointer  for
                     a program compiled with /EXTEND



















































                                    A-82
                                 FIELD TEST


   Secondary descriptors are used to convey information about the  length
   of  a  data  object  passed  as  an  argument  and (in the case of the
   callee's argument descriptor block) whether or not a mismatched length
   is permissible.  Secondary descriptors have the following format:


     Bit Pos                       Usage

       0-2        (For callee only) Defines the permissible relationships
                  between formal and actual lengths.  The values are:

                  000 - Any relationships are allowed
                  001 - Lengths must be equal
                  010 - Actual < formal
                  011 - Actual <= formal
                  100 - Actual > formal
                  101 - Actual >= formal
                  110 - Reserved
                  111 - Reserved

       3-5        Length of argument (in words)

































                                    A-83
                                 FIELD TEST


                             Block Type 1130 (Coercion Block)

          |=======================================================|
          |           1130            |   Long  Count             |
          |-------------------------------------------------------|
          |       Field Code          |        Action             |
          |-------------------------------------------------------|
          |   Formal Attribute        |   Actual Attribute        |
          |-------------------------------------------------------|
          |       Field Code          |        Action             |
          |-------------------------------------------------------|
          |   Formal Attribute        |   Actual Attribute        |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |       Field Code          |        Action             |
          |-------------------------------------------------------|
          |   Formal Attribute        |   Actual Attribute        |
          |=======================================================|

   Block Type 1130 specifies which data type associations are permissible
   and  what  action  LINK  should take if an illegal type association is
   attempted.  It may also specify actions to be taken by LINK to  modify
   an actual parameter.

   The  Coercion  Block  must  be  placed  before  any  instance  of  the
   caller/callee  descriptor  block  in  the  REL file.  If more than one
   coercion block is seen during a load, the last block seen is used  for
   type checking.

   If the description block and command  strings  are  not  in  the  same
   section, no error message is given.

   When  a  caller's  argument  descriptor  block  is  compared  to   the
   descriptor  block  provided by the callee, LINK first checks bit 0 and
   the argument counts of the descriptor block.  If bit 0 is set and  the
   argument  counts  differ,  a  warning  is  given.   However, if a byte
   description is not word-aligned, no warning is given.

   Next  LINK  compares  the  argument   descriptors.    The   particular
   formal/actual  pair  is  looked  up  in the internal table LINK builds
   using the information in the coercion  block.   The  item  field  code
   designates  which  field  of the argument descriptor is being checked.
   The field codes are defined as follows:

        Field Code               Condition

             0         Check update
             1         Check passing mechanism
             2         Check argument type code


                                    A-84

             3         Check if compile-time constant
             4         Check number of arguments
             5         Check for return value
             6         Check length of argument

   If the fields of the formal/actual pair do not  match,  LINK  searches
   the  internal  table  set up by the coercion block.  If the table does
   not specify an action to take in the event of such  a  mismatch,  LINK
   issues an informational message.  If the formal/actual pair differs in
   more than one field then LINK takes the most severe  action  specified
   for the mismatches.

   If an actual/formal pair differ and no coercion block has  been  seen,
   LINK ignores the difference.  If the caller has specified a descriptor
   block but the subroutine has not, or if the subroutine has specified a
   descriptor and the caller has not, LINK does not flag the condition as
   an error and does not take any special action.

   If LINK finds  an  entry  in  its  internal  table  for  a  particular
   actual/formal  mismatch, it uses the action code found in the entry to
   select one of the following five possible responses:


        Code (18 Bits)                         Action

          0                 Informational message

          1                 Warning

          2                 Error

          3                 Reserved  for  the  specific  conversion   of
                            static  descriptor  pointers (in the argument
                            list)   into   addresses.    The   descriptor
                            pointers  are  supplied  by FORTRAN blocks of
                            types 112x.

                                                NOTE

                                The   actual    conversion    process
                                involves the following actions:


                                 o  If byte descriptor's P  field  is
                                    not word-aligned, issue a warning
                                    and continue.

                                 o  Pick up word address of start  of
                                    string.

                                 o  If the string is not in the  same
                                    section  as  the  argument block,
                                    nonfatal error and continue.


                                    A-85
                                 FIELD TEST


                                 o  Put the  address  of  the  string
                                    into   the   associated  argument
                                    block in place of the address  of
                                    the string descriptor.

          4                 Suppress the message.

          5-777776          Reserved

          777777            Fatal error


   These  messages  can  be  displayed  or  suppressed.   Refer  to   the
   descriptions of the /ERRORLEVEL and /LOGLEVEL switches.








































                                    A-86
                                 FIELD TEST


                Block Type 1131 (TWOSEG Redirection Block)

          |=====================================================|
          |            1131            |          Long Count    |
          |-----------------------------------------------------|
          |        Name of PSECT for low segment, or 0          |
          |-----------------------------------------------------|
          |        Name of PSECT for high segment, or 0         |
          |=====================================================|

   where each PSECT name has the form:

          |=====================================================|
          |                   SIXBIT Symbol Name                |
          |=====================================================|

                                        or

          0        5 6              17 18       29 30           35
          |=======================================================|
          |     0   | Reserved for DIGITAL, MBZ   | Long Count    |
          |-------------------------------------------------------|
          |            First word of SIXBIT Symbol Name           |
          |-------------------------------------------------------|
          |            Second word of SIXBIT Symbol Name          |
          |-------------------------------------------------------|
                                                                 
                                                                 
          |-------------------------------------------------------|
          |           Nth word of SIXBIT Symbol Name              |
          |=======================================================|

   Block Type 1131 permits TWOSEG REL modules to be loaded into PSECTs by
   a  compiler.  You must redirect both the high and the low segment, you
   cannot redirect one or the other.  Also, you cannot redirect both  the
   high and low segment into the same PSECT.

   This block does not affect the  current  module,  but  all  subsequent
   modules to be loaded.















                                    A-87
                                 FIELD TEST


                Block Type 1140 (PL/1 debugger information)

          |=====================================================|
          |            1140            |          Long Count    |
          |-----------------------------------------------------|
          |                        Data Word                    |
          |-----------------------------------------------------|
                                       .
                                       .
                                       .
          |-----------------------------------------------------|
          |                        Data Word                    |
          |=====================================================|

   Block Type 1140 is ignored by LINK.







































                                    A-88
                                 FIELD TEST


        Block Type 1160 (Extended Sparse Data Initialization Block)

          =======================================================
          |              1160          |         Long    Count  |
          |-----------------------------------------------------|
          | R | F | B | P | 0 | SYMLEN |            PSECT       |
          |-----------------------------------------------------|
          |               Symbol (SYMLEN words)                 |
          |-----------------------------------------------------|
          | S  |           Origin   Address                     |
          |-----------------------------------------------------|
          |              Repetition Count if R=1                |
          |-----------------------------------------------------|
          |                  Fill Count if F=1                  |
          |-----------------------------------------------------|
          |                  Fill Byte if F=1                   |
          |-----------------------------------------------------|
          |                  Byte Count if B=1                  |
          |-----------------------------------------------------|
          |                     Data Bytes                      |
          =======================================================

   Block Type 1160 supports the loading of data into different PSECTs and
   sections.   This  REL  Block allow separate program units to load data
   into different bytes in the same word of  memory  at  different  times
   during the loading process.

   Block Type 1160 fields are described below.

   Field Name          Position            Description

   R                   Bit 0               is a 1-bit  field.   If  R  is
                                           one, the Repetition Count word
                                           exists.  If  R  is  zero,  the
                                           Repetition Count is assumed to
                                           be 1.

   F                   Bit 1               is a 1-bit  field.   If  F  is
                                           one,  the  Fill Count and Fill
                                           Byte words  exist.   If  F  is
                                           zero, no fill is used.

   B                   Bit 2               is a 1-bit  field.   If  B  is
                                           one,   the   Byte  Count  word
                                           exits.  If B is zero, one Data
                                           Byte is assumed.

   P                   Bits 3-8            is a 6-bit field.  This is the
                                           position within the word where
                                           the first byte is to stored.

   Unused              Bit 9               is an unused bit that must  be


                                    A-89
                                 FIELD TEST


                                           zero.

   SYMLEN              Bits 10-17          is an 8-bit field.  SYMLEN  is
                                           the  length  in  words  of the
                                           global symbol to  be  used  to
                                           calculate the address to store
                                           the byte string.  If SYMLEN is
                                           zero,   there   is  no  global
                                           symbol.   The  value  of   the
                                           symbol  is added to the origin
                                           address.  The symbol  must  be
                                           completely defined before this
                                           addition occurs.

   PSECT               Bits 18-35          is an 18-bit field.  PSECT  is
                                           the   PSECT  to  relocate  the
                                           Origin Address  against.   The
                                           relocation   is   30-bit.   If
                                           PSECT  is  zero,  the   Origin
                                           Address is absolute.

   Symbol              Bits 0-35           is a SIXBIT symbol name of the
                                           length  specified  in  SYMLEN.
                                           The value of  this  symbol  is
                                           added  to  the Origin Address.
                                           The  symbol  must  be  defined
                                           when  the  block is seen, or a
                                           fatal error occurs.

   S                   Bits 0-5            is a 6-bit field.   S  is  the
                                           size of the data bytes.

   Origin Address      Bits 6-35           is  a  30-bit  field.   Origin
                                           Address  is  the address where
                                           LINK  begins  to  store   Data
                                           Bytes.

   Repetition Count    Bits 0-35           is a 36-bit  field.   If  flag
                                           bit R is one, Repetition Count
                                           exists and contains the number
                                           of  times  to  repeat the data
                                           store.   The  Data  Bytes  are
                                           stored  and the fill operation
                                           is performed as many times  as
                                           specified  in  the  Repetition
                                           Count.

   Fill Count          Bits 0-35           is a 36-bit  field.   If  flag
                                           bit   F  is  one,  Fill  Count
                                           exists and specifies how  many
                                           times  to  store the Fill Byte
                                           after storing Data Bytes.


                                    A-90
                                 FIELD TEST


   Fill Byte           Bits 0-35           is a 36-bit  field.   If  flag
                                           bit F is one, Fill Byte exists
                                           and   contains    the    right
                                           justified  value to be used in
                                           the fill operation.

   Byte Count          Bits 0-35           is a 36-bit  field.   If  flag
                                           bit B is one, Byte Count exits
                                           and specifies  the  number  of
                                           Data Bytes to be stored.

   Data Bytes          Bits 0-35           are the data to be stored,  of
                                           the  length  specified  by the
                                           Byte Count, or 1 if flag bit B
                                           is  not  set.   This  data  is
                                           stored left-justified,  packed
                                           as  many to a word as will fit
                                           without  overlapping  a   word
                                           boundary.



































                                    A-91
                                 FIELD TEST


                   Block Type Greater Than 3777 (ASCIZ)

          |=======================================================|
          |  ASCII  |  ASCII  |  ASCII  |  ASCII  |  ASCII  |  0  |
          |-------------------------------------------------------|
          |  ASCII  |  ASCII  |  ASCII  |  ASCII  |  ASCII  |  0  |
          |-------------------------------------------------------|
                                      .
                                      .
                                      .
          |-------------------------------------------------------|
          |  ASCII  |  ASCII  |  ASCII  |  ASCII  |    0    |  0  |
          |=======================================================|

   When LINK reads a number larger than 3777 in the left half  of  a  REL
   Block header word, the block is assumed to contain ASCIZ text.  If the
   module containing the text is  being  loaded,  LINK  reads  the  ASCII
   characters  as  if  they  were a command string, input from the user's
   terminal.

   LINK reads the string as five 7-bit ASCII characters per word; bit  35
   of  each word is ignored.  The string and the block end when the first
   null ASCII character (000) is found in the fifth 7-bit byte of a  word
   (bits 28-34).

   After loading the current REL file, LINK processes text statements  in
   the reverse order in which they are encountered -- from the end to the
   beginning of the module.  For example, the first,  second,  and  third
   statements from the beginning of a module are processed third, second,
   and first.  As a result,  search  requests  in  .TEXT  blocks  may  be
   processed in the reverse order of entered /SEARCH switches.  Keep this
   in mind when specifying the order the modules are to be searched.






















                                    A-92











                                 APPENDIX B

                               LINK MESSAGES



   This appendix lists all of LINK's messages except  the  messages  from
   the overlay handler.  Overlay handler messages have the OVL prefix and
   appear in Chapter 5.  Section B.1 describes the format of messages and
   Section B.2 lists LINK's messages.



   B.1  DESCRIPTION OF MESSAGES

   For each message, the last three letters of  the  6-letter  code,  the
   level,  the severity, and its medium-length message are given in bold.
   The long message follows, and appears beneath the medium message.

        CODE       LEV     SEV     MEDIUM MESSAGE

                                   LONG MESSAGE

   When a message is issued,  the  three  letters  are  appended  to  the
   letters LNK, forming a 6-letter code of the form LNKxxx.  For example,
   EXS is the 3-letter code for EXIT segment.  EXS is appended to LNK  to
   form the 6-letter code LNKEXS.




   B.1.1  Message Levels

   The level of a message  determines  whether  it  is  returned  to  the
   terminal,  the  log file, or both.  You can use /ERRORLEVEL to control
   message output to the terminal and /LOGLEVEL to control message output
   to the log file.  Both switches suppress messages with a level of 8 or
   below.  For some messages an asterisk (*) is given for  the  level  or
   severity.   This  means that the value is variable, and depends on the
   conditions that generated the message.





                                    B-1
                                 FIELD TEST


   B.1.2  Message Severity

   The severity of a message determines whether the  load  is  terminated
   when  the  message is issued.  Table B-1 lists the severity codes used
   in LINK, with  their  meanings.   Severity  codes  are  decimal.   The
   /SEVERITY  switch  provides  a means for lowering the severity that is
   considered fatal.  For example, if the severity  is  set  at  28  (the
   default  for  timesharing  jobs) and you want to terminate the load if
   you receive a warning message, you can lower the severity to 16.  This
   causes  LINK  to terminate the load if a message with a severity of 16
   is issued.

   The severity also determines the first character on the  message  line
   output  to  the  terminal.  This character can then be detected by the
   batch system.  For all informational  messages,  the  character  is  a
   square  bracket  ([).   Informational  messages  also  end in a square
   bracket (]).  Warnings use percent sign  (%),  and  fatal  errors  use
   question mark (?).



   Table B-1:  Severity Codes


   Decimal       Meaning
   Code       

   1-7           Informational;  messages  of  this  severity  generally
                 indicate LINK's progress through the load.

   8-15          Warning; LINK is able to recover by itself and continue
                 the load.

   16            Warning if timesharing, but fatal and stops the load if
                 running under batch.

   20            Fatal; LINK can only partially recover and continue the
                 load. The loaded program may  be  incorrect.  Undefined
                 symbols cause this action.

   24            This is for file access errors. Under  batch,  this  is
                 fatal and stops the load. Under timesharing, this is  a
                 warning,  and  LINK  prompts  for  the   correct   file
                 specification if possible.

   31            Always fatal; LINK stops the load.



   B.1.3  Message Length

   The /VERBOSITY switch determines whether the  medium-length  and  long


                                    B-2
                                 FIELD TEST


   messages  are  issued.  If you use /VERBOSITY:SHORT, only the 6-letter
   code is issued.  For example,

        [LNKEXS]

   If you  use  /VERBOSITY:MEDIUM,  the  medium-length  message  is  also
   issued.  For example,

        [LNKEXS   EXIT segment]

   If you use /VERBOSITY:LONG, the code, medium-length message, and  long
   message are issued.  For example,

        [LNKEXS   EXIT segment

                       LINK is in the last stages of loading your program
                       (for  example,  creating  .EXE  and  symbol files,
                       preparing execution if requested).]

   The /MESSAGE switch also specifies message length.



   B.1.4  Message Conventions

   {}             indicate  optional  portions   of   the   medium-length
                  message,   and   are   printed   only   in  appropriate
                  circumstances.

                  The JSYS error text optional message is a monitor  call
                  message.   Refer to the TOPS-20 Monitor Calls Reference
                  Manual for a description of these messages.

   []             contain information pertinent to the particular  error.
                  This portion of the medium-length messages is filled in
                  at  runtime.   Table  B-2  describes  each   of   these
                  bracketed quantities.

   file           identifies the module or file where the error occurred.
                  Whenever possible, LINK attempts to indicate the module
                  and file associated with an  error.   This  information
                  represents  the  module  currently  being  processed by
                  LINK,  and  may  not  always  be  the   actual   module
                  containing  the error.  For instance, if LINK detects a
                  multiply-defined  symbol,  either  value  may  be   the
                  incorrect  one.   In  this  case, LINK reports only the
                  last and latest redefinition and the module  containing
                  it.






                                    B-3
                                 FIELD TEST


   Table B-2:  Special Message Segments


   Segment            Description

   [area]             The  name  of  one  of  LINK's   internal   memory
                      management   areas.  See  the  /FRECOR  switch  in
                      Chapter 3 for a list of these areas.

   [date]             The date when LINK is running.

   [decimal]          A decimal number.

   [device]           A device name.

   [file]             A file specification.

   [label]            An internal label in LINK.

   [memory]           A memory size, such as 17P.

   [name]             The  name  of  the  loaded program or a node in an
                      overlaid program.

   [octal]            An octal number.

   [reason]           The reason for a file access failure, one  of  the
                      messages shown in Section B.3.

   [switch]           The name of a switch associated with the error.

   [symbol]           The name of a symbol,  such  as  a  subroutine  or
                      common block name.

   [type]             The type or attribute associated with a symbol.





   B.2  LIST OF MESSAGES


       Code    Lev  Sev                      Message

       ABT     31   31   Load  aborted  due  to  %LNKTMA   errors,   max.
                         /ARSIZE:  needed was [decimal]

                         You loaded programs  containing  more  ambiguous
                         subroutine  requests  than can fit in the tables
                         of one or more overlay links.   You  received  a
                         LNKARL message for each ambiguous request, and a


                                    B-4
                                 FIELD TEST


                         LNKTMA message  for  each  link  with  too  many
                         requests.   You  can solve this problem by using
                         the /ARSIZE switch just before each /LINK switch
                         to expand the tables separately.

       AIC     31   31   Attempt  to  increase  size  of  {blank  common}
                         {common [symbol]} from [decimal] to [decimal]
                         {Detected in module [symbol] from file [file]}

                         FORTRAN common areas  cannot  be  expanded  once
                         defined.    Either  load  the  module  with  the
                         largest definition first, or  use  the  /COMMON:
                         switch to reserve the needed space.

       AMM     +    +    Argument mismatch in argument [decimal] in  call
                         to  routine [symbol] called from module [symbol]
                         at location [octal]

                         The caller supplied argument does not match  the
                         argument expected by the callee.
   [1]

       AMP      8    8   ALGOL main program not loaded

                         You  loaded  ALGOL  procedures,  but   no   main
                         program.    The   missing   start   address  and
                         undefined  symbols  will  cause  termination  of
                         execution.

       ANM     31   31   Address not in memory

                         LINK expected a particular user address to be in
                         memory,  but  it  is  not  there.   This  is  an
                         internal  LINK  error.   This  message  is   not
                         expected  to  occur.   If it does, please notify
                         your Software  Specialist  or  send  a  Software
                         Performance Report (SPR) to DIGITAL.

       ARL      8    8   Ambiguous  request  in  link   [decimal]   {name
                         [name]} for [symbol] defined in links [decimal],
                         [decimal], ...

                         More than one successor link can satisfy a  call
                         from  a  predecessor link.  The predecessor link
                         requested an entry point that  is  contained  in
   ---------------

    [1]  + The level and severity of this  message  is  determined  by  a
         compiler-generated  coercion  block.  A coercion block specifies
         which data type associations are  permissible  and  what  action
         LINK  should  take  if an illegal type association is attempted.
         See Block Type 1130 in Appendix A for more information.


                                    B-5
                                 FIELD TEST


                         two  or  more  of  its  successors.   You should
                         revise your  overlay  structure  to  remove  the
                         ambiguity.

               If you execute the current  load,  one  of  the  following
                         occurs when the ambiguous call is executed:

                          o  If only one module satisfying the request is
                             in memory, that module will be called.

                          o  If  two  or  more  modules  satisfying   the
                             request are in memory, the one with the most
                             links in memory will be called.

                          o  If no modules satisfying the request are  in
                             memory,  the  one  with  the  most  links in
                             memory will be called.

                         If a module cannot be selected by the methods  2
                         or  3 above, an arbitrarily selected module will
                         be called.

       AZW     31   31   Allocating zero words

                         LINK's memory manager was called with a  request
                         for  0  words.   This is an internal LINK error.
                         This message is not expected to  occur.   If  it
                         does,  please notify your Software Specialist or
                         send a  Software  Performance  Report  (SPR)  to
                         DIGITAL.

       CBO     31   31   Cannot build overlays outside section zero

                         You have tried to build an overlay structure for
                         a  program  that  is  either too large to fit in
                         section zero or which loads outside section zero
                         by  default.   Check your LINK commands and also
                         the  assembly  or  compiler  commands  used   to
                         produce the program modules.

       CCD     31   31   CPU conflict
                         {Detected in module [symbol] from file [file]}

                         You   have   loaded   modules   compiled    with
                         conflicting  CPU specifications, such as loading
                         a MACRO  program  compiled  with  the  statement
                         .DIRECTIVE   KL10   and  another  compiled  with
                         .DIRECTIVE KI10.  Recompile the affected modules
                         with compatible CPU specifications.

       CCE      8    8   Character constant not word aligned in  call  to
                         routine [routine] called from module [module] at


                                    B-6
                                 FIELD TEST


                         location [address]

                         Link has detected a character constant that  did
                         not  begin  on  a  word boundary.  This error is
                         most likely the result of a language  translator
                         error.  This error is not expected to occur.  If
                         it does, please notify your Software  Specialist
                         or send a Software Performance Report

       CCS     31   31   Cannot create section [octal]
                         {Detected in module [symbol] from file [file]}

                         LINK is unable to create the specified  section.
                         This  could be because your system does not have
                         extended addressing hardware, or  because  there
                         are insufficient resources to create a section.

       CFS     31   31   Chained fixups have been suppressed

                         The specified  PSECT  grew  beyond  the  address
                         specified  in the /LIMIT switch.  The program is
                         probably incorrect.  Use the  /MAP  or  /COUNTER
                         switch  to  check for accidental PSECT overlaps.
                         Refer to  Section  3.2.2  for  more  information
                         about the /LIMIT switch.

       CLD     31   28   Cannot load DDT
                         {JSYS error text}

                         DDT could not be loaded into  memory  with  your
                         program.   The  second line of the error message
                         is the last TOPS-20 process error and  indicates
                         why the error occurred.> ;[2304]

       CLF      1    1   Closing log file, continuing on file [file]

                         You have changed  the  log  file  specification.
                         The  old log file is closed; further log entries
                         are written in the new log file.

       CMC     31   31   Cannot mix COBOL-68 and COBOL-74 compiled code
                         {Detected in module [symbol] from file [file]}

                         You cannot use COBOL-68 and  COBOL-74  files  in
                         the  same load.  Compile all COBOL programs with
                         the same compiler and reload.


       CMF     31   31   COBOL module must be loaded first
                         {Detected in module [symbol] from file [file]}

                         You are  loading  a  mixture  of  COBOL-compiled


                                    B-7
                                 FIELD TEST


                         files   and   other  files.   Load  one  of  the
                         COBOL-compiled files first.

       CMP     31   28   Common [symbol] declared in multiple psects
                         {Detected in module [symbol] from file [file]}

                         You have loaded a module  which  specifies  that
                         the named common block must be loaded in a PSECT
                         which is not compatible with the psect in  which
                         it  was  originally  loaded.  Compile the module
                         with  the  common  in  the  same  PSECT  as  the
                         original.

       CMX     8    8    Cannot mix GFloating FORTRAN compiled code  with
                         FORTRAN compiled code

                         You cannot load modules produced by FORTRAN with
                         modules  produced by GFLoating FORTRAN.  Compile
                         all FORTRAN modules the same way, then reload.

       CNW     31   31   Code not yet written at [label]

                         You attempted to use an  unimplemented  feature.
                         This is an internal LINK error.  This message is
                         not expected  to  occur.   If  it  does,  please
                         notify   your  Software  Specialist  or  send  a
                         Software Performance Report (SPR) to DIGITAL.

       COE     8    8    Both   CONCATENATE   and   OVERLAY    attributes
                         specified for psect [ name ]

                         One of  the  modules  you  have  already  loaded
                         explicitly sets an attribute for the named PSECT
                         which conflicts with the  declaration  of  PSECT
                         attributes  in  the  current  module.  Check the
                         compiler   switches   or    assembly    language
                         directives  that  were used in the generation of
                         these modules.

       COF     +    +    Cannot open file [file]
                         {JSYS error text}

                         LINK cannot open the specified file for input

       CPU     31   31   Module incompatible with specified CPU
                         {Detected in module [symbol] from file [file]}

                         The module you are attempting to load  does  not
                         contain  a  .DIRECTIVE  for  any of the CPUs you
                         specified with the /CPU switch.   Recompile  the
                         module  with  the  proper  .DIRECTIVE,  or use a
                         different /CPU switch.


                                    B-8
                                 FIELD TEST


       CRS      1    1   Creating section [octal]

                         LINK prints this informational  message  when  a
                         module  is  loaded  into  a  new  section.   The
                         message is printed only if  you  have  specified
                         /ERROR:0.

       CSF      1    1   Creating saved file

                         LINK is generating your executable (.EXE) file.

       CSP     31   28   Cannot setup UDDT symbol table pointers
                         {JSYS error text}

                         An error occurred while  writing  UDDT's  symbol
                         table  pointers.   Symbols  may not be available
                         for use  now.   This  is  probably  because  the
                         symbol  table pointers were on a write-protected
                         memory page.

       DEB     31    1   [name] execution

                         LINK is beginning program execution at the named
                         debugger.

       DLT     31    1   Execution deleted

                         Although you have asked for  program  execution,
                         LINK   cannot   proceed  due  to  earlier  fatal
                         compiler or LINK errors.  Your program  is  left
                         in memory or in an executable file.

       DNA     31   28   DDT not available
                         {JSYS error text}

                         SYS:UDDT.EXE could not be found.

       DRC      8    8   Decreasing  relocation  counter  [symbol]   from
                         [octal] to [octal]
                         {Detected in module [symbol] from file [file]}

                         You are using the  /SET  switch  to  reduce  the
                         value  of an already defined relocation counter.
                         Unless you know exactly  where  each  module  is
                         loaded, code may be overwritten.

       DSC     31   31   Data store to common [symbol] not in link number
                         [decimal]
                         {Detected in module [symbol] from file [file]}

                         You loaded a FORTRAN-compiled module  with  DATA
                         statement  assignments  to  a  common area.  The


                                    B-9
                                 FIELD TEST


                         common area is already defined  in  an  ancestor
                         link.   Restructure  the  load  so that the DATA
                         statements are loaded in the same  link  as  the
                         common area to which they refer.

       DSL     31    *   Data store  to  location  [octal]  not  in  link
                         number [decimal]
                         {Detected in module [symbol] from file [file]}

                         You have a data store for an  absolute  location
                         outside  the  specified  link.   Load the module
                         into the root link.

                                               NOTE

                             If the location is less than  140,  this
                             message has level 8 and severity 8.

       DUZ     31   31   Decreasing undefined symbol count below zero

                         LINK's  undefined  symbol   count   has   become
                         negative.   This  message  is  not  expected  to
                         occur.  If it does, please notify your  Software
                         Specialist or send a Software Performance Report
                         (SPR) to DIGITAL.

       EAS     31   31   Error creating area AS overflow file [file]
                         {JSYS error text}

                         LINK could not make the ALGOL  symbol  table  on
                         disk.  You could be over your disk quota, or the
                         disk could be full or have errors.

       ECE     31   31   Error creating EXE file [file]
                         {JSYS error text}

                         LINK could not write the  saved  file  on  disk.
                         You  could  be over your disk quota, or the disk
                         could be full or have errors.       

       EIF     31   31   Error for input file [file]
                         {JSYS error text}

                         A read error has occurred  on  the  input  file.
                         Use  of  the  file is terminated and the file is
                         released.

                              
       ELF      1    1   End of log file

                         LINK has finished writing your  log  file.   The
                         file is closed.


                                    B-10
                                 FIELD TEST


       ELN      1    1   End of link number [decimal] {name [name]}

                         The link is loaded.

       ELS     31   31   Error creating area LS overflow file [file]
                         {JSYS error text}

                         LINK could not write your local symbol table  on
                         the disk.  You could be over your disk quota, or
                         the disk could be full or have errors.

       EMS      1    1   End of MAP segment

                         The map file is completed and closed.

       EOE     31   31   EXE file output error [file]
                         {JSYS error text}

                         LINK could not write the saved file on the disk.

       EOI     31   31   Error on input [file]

                         An error has been  detected  while  reading  the
                         named file.


       EOO     31   31   Error on output [file]

                         An error has been  detected  while  writing  the
                         named file.

       EOV     31   31   Error creating overlay file [reason] [file]

                         LINK could not write the  overlay  file  on  the
                         disk.

       ETP     31   31   Error creating area TP overflow file  {[reason]}
                         [file]
                         {JSYS error text}

                         LINK could not make the typechecking area on the
                         disk.  You could be over your disk quota, or the
                         disk could be full or have errors.

       EXS      1    1   EXIT segment

                         LINK is in  the  last  stages  of  loading  your
                         program  (for  example, creating .EXE and symbol
                         files, preparing for execution if requested).

       FCF      1    1   Final code fixups



                                    B-11
                                 FIELD TEST


                         LINK is reading one  or  both  segment  overflow
                         files  backwards  to  perform  any  needed  code
                         fixups.   This  may  cause   considerable   disk
                         overhead, but occurs only if your program is too
                         big for memory.

       FEE     *    *    ENTER error (octal) [reason] [file]

                         One of the following conditions occurred:

                         1.  The specified file name was illegal.

                         2.  When updating a  file,  the  specified  file
                             name did not match the file being updated.

                         3.  The RENAME monitor call following  a  LOOKUP
                             monitor call failed.


       FIN      1    1   LINK finished

                         LINK is finished.   Control  is  passed  to  the
                         monitor, or to the loaded program for execution.

       FLE     *    *    LOOKUP error (octal) [reason] [file]

                         One of the following conditions occurred:

                         1.  The specified file name was illegal.

                         2.  When updating a  file,  the  specified  file
                             name did not match the file being updated.

                         3.  The RENAME monitor call following  a  LOOKUP
                             monitor call failed.


       FRE     *    *    RENAME error [reason] [file]

                         One of the following conditions occurred:

                         1.  The specified file name was illegal.

                         2.  When updating a  file,  the  specified  file
                             name did not match the file being updated.

                         3.  The RENAME monitor call following  a  LOOKUP
                             monitor call failed.


       FSN     31   31   FUNCT.  subroutine not loaded



                                    B-12
                                 FIELD TEST


                         During final processing of your root link,  LINK
                         found   that  the  FUNCT.   subroutine  was  not
                         loaded.  This would cause an infinite  recursion
                         if  your  program  were  executed.   The  FUNCT.
                         subroutine is requested by the overlay  handler,
                         and  is  usually  loaded  from  a default system
                         library.   Either  you  prevented  searching  of
                         system  libraries,  or  you  did not load a main
                         program from an overlay-supporting compiler into
                         the root link.

       FTH     15   15   Fullword value [symbol] truncated to halfword

                         This message is printed when a symbol that has a
                         value  greater  than 777777 is used to resolve a
                         halfword reference.  This warning message  helps
                         you  to  be  sure that global addresses are used
                         properly throughout the modules in a load.

       HCL     31   31   High segment code not allowed in an overlay link
                         {Detected in module [symbol] from file [file]}

                         You have attempted to  load  high  segment  code
                         into  an  overlay link other than the root.  Any
                         high segment code in an overlaid program must be
                         in the root.

       HSL     31   31   Attempt to set high segment origin too low
                         {Detected in module [symbol] from file [file]}

                         You have set the high-segment counter to a  page
                         containing  low-segment code.  Reload, using the
                         /SET:.HIGH.:n switch, or  (for  MACRO  programs)
                         reassemble after changing your TWOSEG pseudo-op.

       HTL     31   31   Symbol hash table too large

                         Your  symbol  hash  table  is  larger  than  the
                         maximum  LINK  can  generate  (about 50P).  This
                         table  size  is  an  assembly  parameter.   This
                         message  is  not expected to occur.  If it does,
                         please notify your Software Specialist or send a
                         Software Performance Report (SPR) to DIGITAL.

       IAS     31   31   Error reading area AS from file [file]
                         {JSYS error text}

                         An error occurred while  reading  in  the  ALGOL
                         symbol table.

       ICB      8    8   Invalid chain REL block (type  12)  link  number
                         [octal]


                                    B-13
                                 FIELD TEST


                         {Detected in module [symbol] from file [file]}

                         REL block type  12  (Chain),  generated  by  the
                         MACRO  pseudo-op .LINK and .LNKEND, must contain
                         a number from 1 to  100  (octal)  in  its  first
                         word.  The link word is ignored.

       IDM     31   31   Illegal data mode for device [device]

                         You specified an illegal combination  of  device
                         and  data  mode  (for example, terminal and dump
                         mode).  Specify a legal device.

       IHC     31   31   Error reading area HC
                         {JSYS error text}

                         An  error  occurred  while   reading   in   your
                         high-segment code.


       ILC     31   31   Error reading area LC
                         {JSYS error text}

                         An  error  occurred  while   reading   in   your
                         low-segment code.

       ILS     31   31   Error reading area LS from file [file]
                         {JSYS error text}

                         An error occurred while reading  in  your  local
                         symbol table.

       IMA      8    8   Incremental maps not yet available

                         The INCREMENTAL keyword for the /MAP  switch  is
                         not implemented.  The switch is ignored.

       IMI     31   31   Insufficient memory to initialize LINK

                         LINK needs more memory than is available.

       IMM      *    1   [Decimal] included modules  missing  {from  file
                         [file]}

                         You have requested with the /INCLUDE switch that
                         the  named  modules (if any) be loaded.  Specify
                         files containing these modules.

       INS     31   31   I/O data block not set

                         LINK attempted  a  monitor  call  (for  example,
                         LOOKUP, ENTER) for a channel that is not set up.


                                    B-14
                                 FIELD TEST


                         This is an internal LINK error.  This message is
                         not  expected  to  occur.   If  it  does, please
                         notify  your  Software  Specialist  or  send   a
                         Software Performance Report (SPR) to DIGITAL.

       IOV     31   31   Input error for overlay file [file]

                         An error occurred when reading the overlay file.

       IPO     31   31   Invalid Polish operator [octal]
                         {Detected in module [symbol] from file [file]}

                         You are attempting to load a file containing  an
                         invalid   REL  Block  Type  11  (Polish).   This
                         message is not expected to occur.  If  it  does,
                         please notify your Software Specialist or send a
                         Software Performance Report (SPR) to DIGITAL.

       IPX     31   31   Invalid PSECT index {for PSECT [symbol]}
                         {Detected in module [symbol] from file [file]}

                         A  REL  block  contains   a   reference   to   a
                         nonexistent   PSECT.   This  error  is  probably
                         caused by a fault  in  the  language  translator
                         used   for  the  program.   This  error  is  not
                         expected to occur.  If it  does,  please  notify
                         your  Software  Specialist  or  send  a Software
                         Performance Report (SPR) to DIGITAL.

       IRB     31   31   Illegal REL block type [octal]
                         {Detected in module [symbol] from file [file]}

                         The file is not in the proper binary format.  It
                         may  have  been  generated  by a translator that
                         LINK does not recognize, or it may be  an  ASCII
                         or .EXE file.

       IRC     31   31   Illegal relocation counter
                         {Detected in module [symbol] from file [file]}

                         One of the new style 1000+ block  types  has  an
                         illegal relocation counter.  This message is not
                         expected to occur.  If it  does,  please  notify
                         your  Software  Specialist  or  send  a Software
                         Performance Report (SPR) to DIGITAL.

       IRR      8    8   Illegal request/require block
                         {Detected in module [symbol] from file [file]}

                         One of the REL block types 1042 or  1043  is  in
                         the  wrong format.  This message is not expected
                         to  occur.   If  it  does,  please  notify  your


                                    B-15
                                 FIELD TEST


                         Software   Specialist   or   send   a   Software
                         Performance Report (SPR) to DIGITAL.

       ISM     31   31   Incomplete symbol in store  operator  in  Polish
                         block (type 11 or 1072)
                         {Detected in module [symbol] from file [file]}

                         The specified  module  contains  an  incorrectly
                         formatted  Polish  Fixup  Block  (Type 11).  The
                         store operator specifies a symbol fixup, but the
                         block ends before the symbol is fully specified.
                         This error is probably caused by a fault in  the
                         language  translator used for the program.  This
                         error is not expected to  occur.   If  it  does,
                         please notify your Software Specialist or send a
                         Software Performance Report (SPR) to DIGITAL.

       ISN     31   31   Illegal symbol name [symbol]
                         {Detected in module [symbol] from file [file]}

                         The LINK symbol table routine  was  called  with
                         the blank symbol.  This error can be caused by a
                         fault in the language translator  used  for  the
                         program.  This message is not expected to occur.
                         If  it  does,  please   notify   your   Software
                         Specialist or send a Software Performance Report
                         (SPR) to DIGITAL.

       ISP     31   31   Incorrect symbol pointer

                         There is an error in the  global  symbol  table.
                         This is an internal LINK error.  This message is
                         not expected  to  occur.   If  it  does,  please
                         notify   your  Software  Specialist  or  send  a
                         Software Performance Report (SPR) to DIGITAL.

       ISS      8    8   Insufficient space for symbol table after  PSECT
                         [symbol] -- table truncated

                         There is  insufficient  address  space  for  the
                         symbol  table  between  the  named PSECT and the
                         next higher one or the end of the address space.
                         Restructure   your   PSECT   layout   to   allow
                         sufficient room for the  symbol  table,  or  use
                         /UPTO to allow more room.

       IST     31   31   Inconsistency in switch table

                         LINK has found errors in the switch table passed
                         from  the  SCAN  module.   This  is  an internal
                         error.  This message is not expected  to  occur.
                         If   it   does,   please  notify  your  Software


                                    B-16
                                 FIELD TEST


                         Specialist or send a Software Performance Report
                         (SPR) to DIGITAL.

       ITB     31   31   Invalid text in ASCII block from file [file]

                         LINK has failed to complete the processing of an
                         ASCII  text REL block from the named file.  This
                         is an  internal  error.   This  message  is  not
                         expected  to  occur.   If it does, please notify
                         your Software  Specialist  or  send  a  Software
                         Performance Report (SPR) to DIGITAL.

       ITP     31   31   Error reading area TP {Status [octal]} from file
                         [file]
                         {JSYS error text}

                         An  error  occurred   while   reading   in   the
                         typechecking area.

       IUU          31   Illegal user UUO at PC [octal]

                         LINK's user UUO (LUUO) handler has  detected  an
                         illegal  UUO.   This is an internal error.  This
                         message is not expected to occur.  If  it  does,
                         please notify your Software Specialist or send a
                         Software Performance Report (SPR) to DIGITAL.

       IVC     31   31   Index validation check failed at address [octal]

                         The range checking of LINK's internal tables and
                         arrays  failed.   The address given is the point
                         in a LINK segment  at  which  failure  occurred.
                         This  is an internal error.  This message is not
                         expected to occur.  If it  does,  please  notify
                         your  Software  Specialist  or  send  a Software
                         Performance Report (SPR) to DIGITAL.

       JPB      8    8   Junk at end of Polish block
                         {Detected in module [symbol] from file [file]}

                         The specified  module  contains  an  incorrectly
                         formatted  Polish Fixup Block (Type 11).  Either
                         the last  unused  halfword  (if  it  exists)  is
                         nonzero,  or there are extra halfwords following
                         all valid data.

       LDS      1    1   LOAD segment

                         The  LINK  module  LNKLOD   is   beginning   its
                         processing.

       LFB      1    1   LINK log file begun on [date]


                                    B-17
                                 FIELD TEST


                         LINK is creating your log file as  a  result  of
                         defining the logical name LOG:.

       LFC      1    1   Log file continuation

                         LINK is continuing your log file as a result  of
                         the /LOG switch.

       LFI      1    1   Log file initialization

                         LINK is beginning your log file as a  result  of
                         the /LOG switch.

       LII      8    1   Library index inconsistent, continuing

                         A  REL  Block  Type  14  (Index)  for  a  MAKLIB
                         generated  library  file  is  inconsistent.  The
                         library is searched, but the index is ignored.

       LIN      1    1   LINK initialization

                         LINK is beginning its processing by initializing
                         its internal tables and variables.

       LMM     +    +    Length mismatch for argument [decimal]  in  call
                         to  routine [symbol] called from module [symbol]
                         at location [octal]

                         The length of the argument passed by the  caller
                         does  not  match what the called routine expects
                         it to be.
   [2]

       LMN      6    1   Loading module [symbol] from file [file]

                         LINK is loading the named module.

       LNA      8    8   Link name [name] already assigned to link number
                         [decimal]

                         You used this name for another link.  Specify  a
                         different name for this link.

       LNL      8    8   Link number [decimal] not loaded

   ---------------

    [2]  + The level and severity of this  message  is  determined  by  a
         compiler-generated  coercion  block.  A coercion block specifies
         which data type associations are  permissible  and  what  action
         LINK  should  take  if an illegal type association is attempted.
         See Block Type 1130 in Appendix A for more information.


                                    B-18
                                 FIELD TEST


                         The link with  this  number  has  not  yet  been
                         loaded.   The  /NODE  switch is ignored.  If you
                         have used link numbers  instead  of  link  names
                         with the /NODE switch, you may have confused the
                         link numbers.  To avoid this, use link names.

       LNM     31   31   Link number [decimal] not in memory

                         LINK cannot find the named link in memory.  This
                         is  an  internal  error.   This  message  is not
                         expected to occur.  If it  does,  please  notify
                         your  Software  Specialist  or  send  a Software
                         Performance Report (SPR) to DIGITAL.

       LNN      8    8   Link name [name] not assigned

                         The name you gave with the /NODE switch  is  not
                         the  name  of  any  loaded  link.  The switch is
                         ignored.

       LNS     31    8   Low segment data base not same size

                         The length of LINK's low  segment  differs  from
                         the  length  stored  in  the  current  LINK high
                         segment.  This occurs if some  but  not  all  of
                         LINK's   .EXE  files  have  been  updated  after
                         rebuilding LINK from  sources.   Update  all  of
                         LINK's .EXE files.

       LSM      8    8   /LINK switch missing while loading  link  number
                         [decimal] -- assumed

                         Your use of the /NODE switch shows that you want
                         to  begin  a  new  overlay link, but the current
                         link is not yet completely loaded.  LINK assumes
                         a  /LINK  switch immediately preceding the /NODE
                         switch, and  loads  the  link  (without  a  link
                         name).

       LSS     31    1   {No}  Library  search  symbols  (entry   points)
                         {[symbol] [octal]

                         The listed symbols and their values (if any) are
                         those that are library search entry points.

       MDS      8    8   Multiply-defined global symbol [symbol]
                         {Detected in module [symbol] from file [file]}
                         Defined value = [octal], this value = [octal]

                         The named module contains a new definition of an
                         already   defined   global   symbol.    The  old
                         definition  is  used.   Make   the   definitions


                                    B-19
                                 FIELD TEST


                         consistent and reload.

       MEF     31   31   Memory expansion failed

                         LINK  cannot   expand   memory   further.    All
                         permitted overflows to disk have been tried, but
                         your program is still too  large  for  available
                         memory.   A  probable  cause  is  a large global
                         symbol table,  which  cannot  be  overflowed  to
                         disk.   It  may be necessary to restructure your
                         program, or  use  overlays,  to  alleviate  this
                         problem.

       MMF     31   31   Memory manager failure

                         The internal memory manager in LINK has failed a
                         consistency  check.   This error is not expected
                         to  occur.   If  it  does,  please  notify  your
                         Software   Specialist   or   send   a   Software
                         Performance Report (SPR) to DIGITAL.

       MOV      1    1   Moving low segment to expand area [area]

                         LINK is rearranging its low segment to make more
                         room for the specified area.  Area is one of the
                         following:

                         AS ALGOL symbol table
                         BG bound global symbols
                         DY dynamic free memory
                         FX fixup area
                         GS global symbol table
                         HC your high-segment code
                         LC your low-segment code
                         LS local symbol tables
                         RT relocation tables

       MPS      1    1   MAP segment

                         The LINK module LNKMAP is writing a map file.

       MPT     31   31   Mixed PSECT and TWOSEG code in same module
                         {Detected in module [symbol] from file [file]}

                         This module contains both PSECT code and  TWOSEG
                         code.   LINK  cannot load such a module.  Change
                         the source code to use PSECTs .HIGH.  and  .LOW.
                         as  the  high  and  low segments, and remove the
                         TWOSEG or HISEG pseudo-ops.

       MRN      1    1   Multiple regions not yet implemented



                                    B-20
                                 FIELD TEST


                         The REGION keyword for the  /OVERLAY  switch  is
                         not implemented.  The argument is ignored.

       MSN      8    8   Map sorting not yet implemented

                         Alphabetical or numerical  sorting  of  the  map
                         file is not implemented.  The symbols in the map
                         file appear in the order they are found  in  the
                         REL files.

       NAP     31   31   No store address in polish  block  (type  11  or
                         1072)
                         {Detected in module [symbol] from file [file]}

                         The specified  module  contains  an  incorrectly
                         formatted  polish fixup block (type 11 or 1072).
                         The store operator specifies a memory fixup, but
                         the  block ends before the address is specified.
                         This error is probably caused by a fault in  the
                         language  translator used for the program.  This
                         error is not expected to  occur.   If  it  does,
                         please notify your Software Specialist or send a
                         Software Performance Report (SPR) to DIGITAL.

       NBR     31   31   Attempt to position to node before the root

                         The argument you gave for the /NODE switch would
                         indicate  a  link  before  the  root link.  (For
                         example, from a position after the third link in
                         a path, you cannot give /NODE:-4.)

       NEB      8    8   No end block seen
                         {Detected in module [symbol] from file [file]}

                         No REL Block Type 5 (End) was found in the named
                         module.  This will happen if LINK finds two Type
                         6 blocks (Name) without an intervening  end,  or
                         if  an end-of-file is found before the end block
                         is seen.  LINK simulates the missing end  block.
                         However,  fatal  messages  usually  follow this,
                         because this condition usually indicates  a  bad
                         REL file.

       NED     31   24   Non-existent device [device]

                         You gave a device that does not  exist  on  this
                         system.  Correct your input files and reload.

       NFS     31   28   No free section for XDDT

                         There  is  no  free  nonzero  section  to   load
                         SYS:XDDT.EXE into.  XDDT can only be loaded into


                                    B-21
                                 FIELD TEST


                         a section which is unused by your program.   You
                         must  reconfigure your program to be able to use
                         XDDT.

       NHN     31   31   No high segment in nonzero section

                         You have attempted to  load  high  segment  code
                         into  a  program  that  is  being  loaded into a
                         nonzero section.  Programs  with  high  segments
                         must be in section zero.

       NPS      8    8   Non-existent PSECT [symbol] specified for symbol
                         table

                         You have specified the name  of  a  PSECT  after
                         which  LINK  should append the symbol table, but
                         no PSECT with that name was  loaded.   Load  the
                         named PSECT or specify an existing PSECT for the
                         symbols.

       NSA     31    1   No start address

                         Your program does not have a  starting  address.
                         This  can  happen  if you neglect to load a main
                         program.  Program execution, if requested,  will
                         be  suppressed  unless  you  specified  debugger
                         execution.

       NSM     31   31   /NODE switch missing after /LINK switch

                         You used the /LINK switch, which indicates  that
                         you  want  to  begin a new overlay link, but you
                         have not specified a /NODE switch to  tell  LINK
                         where to put the new overlay link.

       NSO     31   31   No store operator in Polish block (type 11)
                         {Detected in module [symbol] from file [file]}

                         The specified  module  contains  an  incorrectly
                         formatted  Polish Fixup Block (Type 11).  Either
                         the block does not have  a  store  operator,  or
                         LINK  was  not  able  to  detect  it  due to the
                         block's invalid format.  This error is  probably
                         caused  by  a  fault  in the language translator
                         used  for  the  program.   This  error  is   not
                         expected  to  occur.   If it does, please notify
                         your Software  Specialist  or  send  a  Software
                         Performance Report (SPR) to DIGITAL.

       NVR     +    +    No value returned  by  routine  [symbol]  called
                         from module [symbol] at location [octal]



                                    B-22
                                 FIELD TEST


                         The called routine  does  not  return  a  value,
                         however the caller expected a returned value.
   [3]

       OAS     31   31   Error writing area AS from file [file]
                         {JSYS error text}

                         An error occurred while writing  out  the  ALGOL
                         symbol table.

       OEL      8    8   Output error on  log  file,  file  closed,  load
                         continuing {[file]}

                         An error has occurred on the output  file.   The
                         output  file  is  closed  at the end of the last
                         data successfully output.

       OEM      8    8   Output error on  map  file,  file  closed,  load
                         continuing [file]

                         An error has occurred on the output  file.   The
                         output  file  is  closed  at the end of the last
                         data successfully output.

       OES      8    8   Output error on symbol file, file  closed,  load
                         continuing [file]

                         An error has occurred on the output  file.   The
                         output  file  is  closed  at the end of the last
                         data successfully output.

       OFD     31   31   OPEN failure for device [device]

                         An OPEN or INIT monitor call for  the  specified
                         device  failed.  The device may be under another
                         user's control.>

       OFN     31   31   Old FORTRAN (F40) module not available
                         {Detected in module [symbol] from file [file]}

                         The standard released version of LINK  does  not
                         support F40 code.

       OFS     31   31   Overlay file must be created on a file structure

   ---------------

    [3]  + The level and severity of this  message  is  determined  by  a
         compiler-generated  coercion  block.  A coercion block specifies
         which data type associations are  permissible  and  what  action
         LINK  should  take  if an illegal type association is attempted.
         See Block Type 1130 in Appendix A for more information.


                                    B-23
                                 FIELD TEST


                         Specify a disk device for the overlay file.

       OHC     31   31   Error writing area HC
                         {JSYS error text}

                         An  error  occurred  while  writing   out   your
                         high-segment code.

       OHN     31   31   Overlay handler not loaded

                         Internal symbols in the  overlay  handler  could
                         not  be  referenced.   If you are using your own
                         overlay handler, this is a user error;  if  not,
                         it  is  an internal error and is not expected to
                         occur.  If it does, please notify your  Software
                         Specialist or send a Software Performance Report
                         (SPR) to DIGITAL.

       OLC     31   31   Error writing area LC
                         {JSYS error text}

                         An  error  occurred  while  writing   out   your
                         low-segment code.

       OLS     31   31   Error writing area LS from file [file]
                         {JSYS error text}

                         An error occurred while writing out  your  local
                         symbol table.

       OMB     31   31   /OVERLAY switch must be first

                         The /OVERLAY switch must appear before  you  can
                         use  any  of  the  following switches:  /ARSIZE,
                         /LINK, /NODE, /PLOT, /SPACE.  (It is  sufficient
                         that the /OVERLAY switch appear on the same line
                         as the first of these switches you use.)

       ONS      8    1   Overlays not supported in this version of LINK

                         LINK handles overlays with its LNKOV1 and LNKOV2
                         modules.    Your  installation  has  substituted
                         dummy versions of  these.   You  should  request
                         that  your  installation  rebuild  LINK with the
                         real LNKOV1 and LNKOV2 modules.

       OOV     31   31   Output error for overlay file [file]

                         An error has occurred while writing the  overlay
                         file.

       OS2      1    1   Overlay segment phase 2


                                    B-24
                                 FIELD TEST


                         LINK's module LNKOV2  is  writing  your  overlay
                         file.

       OSL      8    8   Overlaid program symbols must be in low segment

                         You have specified /SYMSEG:HIGH or /SYMSEG:PSECT
                         when  loading  an  overlay  structure.   Specify
                         /SYMSEG:LOW or /SYMSEG:DEFAULT.

       OTP     31   31   Error writing area TP {Status [octal]} from file
                         [file]
                         {JSYS error text}

                         An  error  occurred  while   writing   out   the
                         typechecking area.

       PAS      1    1   Area AS overflowing to disk

                         The load is too large to fit  into  the  allowed
                         memory and the ALGOL symbol table is being moved
                         to disk.

       PBI      8    8   Program  break  [octal]  invalid  {Detected   in
                         module [symbol] from file [file]}

                         The  highest  address  allocated  in  the  named
                         module  is  greater  than 512P.  This is usually
                         caused by  dimensioning  large  arrays.   Modify
                         your programs or load list to reduce the size of
                         the load.

       PCL      8    8   Program too complex  to  load,  saving  as  file
                         [file]

                         Your program is too complex to load into  memory
                         for one of the following reasons:

                         1.  There are page gaps between  psects  (except
                             below the high segment).

                         2.  There are psects above  the  origin  of  the
                             high segment.

                         3.  Your program will not fit  in  memory  along
                             with LINK's final placement code.

                         4.  Your program's low segment has the read-only
                             attribute,  or the high segment has the read
                             and write attribute.

                         LINK has saved your program as an  EXE  file  on
                         disk  and cleared your user memory.  You can use


                                    B-25
                                 FIELD TEST


                         a GET or RUN command to load the EXE file.

       PCX      8    1   Program too complex to load  and  execute,  will
                         run from file [file]

                         Your program is too complex to load into  memory
                         for one of the following reasons:

                         1.  There are page gaps between  psects  (except
                             below the high segment).

                         2.  There are psects above  the  origin  of  the
                             high segment.

                         3.  Your program will not fit  in  memory  along
                             with LINK's final placement code.

                         4.  Your program's low segment has the read-only
                             attribute,  or the high segment has the read
                             and write attribute.

                         LINK will save your program as an  EXE  file  on
                         disk  and automatically run it, but the EXE file
                         will not be deleted.

       PEF     31    8   Premature end of file from file [file]

                         LINK found an end-of-file  inside  a  REL  block
                         (that  is, the word count for the block extended
                         beyond the  end-of-file).   This  error  may  be
                         caused  by  a  fault  in the language translator
                         used for the program.

       PEL     31    8   PSECT [symbol] exceeded limit of [octal]

                         The specified  PSECT  grew  beyond  the  address
                         specified  in the /LIMIT switch.  The program is
                         probably incorrect.  Use the  /MAP  or  /COUNTER
                         switch  to  check for accidental PSECT overlaps.
                         Refer to  Section  3.2.2  for  more  information
                         about the /LIMIT switch.

       PHC      1    1   Area HC overflowing to disk

                         The load is too large to fit  into  the  allowed
                         memory and your high-segment code is being moved
                         to disk.

       PLC      1    1   Area LC overflowing to disk

                         The load is too large to fit  into  the  allowed
                         memory  and your low-segment code is being moved


                                    B-26
                                 FIELD TEST


                         to disk.

       PLS      1    1   Area LS overflowing to disk

                         The load is too large to fit  into  the  allowed
                         memory  and  your  local symbol tables are being
                         moved to disk.

       PMA     +    +    Possible modification of argument  [decimal]  in
                         call  to  routine  [symbol]  called  from module
                         [symbol] at location [octal]

                         The  caller  has  specified  that  the  argument
                         should  not  be  modified.   The  called routine
                         contains code which may  modify  this  argument.
                         In  some  cases this message will occur although
                         the argument is not  actually  modified  by  the
                         routine.
   [4]

       PNO      8    8   Program Data  Vectors  not  allowed  in  overlay
                         links

                         Program data vectors cannot be loaded as part of
                         an  overlay program.  The load continues, but no
                         program data vector will be provided.

       POT      1    1   Plotting overlay tree

                         LINK is creating your overlay tree file.

       POV      8    8   PSECTs  [symbol]  and  [symbol]   overlap   from
                         address [octal] to [octal]

                         The named  PSECTs  overlap  each  other  in  the
                         indicated  range  of  addresses.   If you do not
                         expect  this  message,  restructure  your  PSECT
                         origins with the /SET switch.

       PTL     31   31   Program too long
                         {Detected in module [symbol] from file [file]}

                         Your program  extends  beyond  location  777777,
                         which  is  the  highest  location  that  LINK is
                         capable of loading.  You may  be  able  to  make
   ---------------

    [4]  + The level and severity of this  message  is  determined  by  a
         compiler-generated  coercion  block.  A coercion block specifies
         which data type associations are  permissible  and  what  action
         LINK  should  take  if an illegal type association is attempted.
         See Block Type 1130 in Appendix A for more information.


                                    B-27
                                 FIELD TEST


                         your   program  fit  by  moving  PSECT  origins,
                         lowering the high-segment origin, loading into a
                         single  segment,  reducing the size of arrays in
                         your program, or using the overlay facility.

       RBS     31   31   REL block type [octal] too short
                         {Detected in module [symbol] from file [file]}

                         The REL block  is  inconsistent.   This  may  be
                         caused  by  incorrect  output  from a translator
                         (for  example,  missing  argument  for  an   end
                         block).  Recompile the module and reload.

       RED      1    1   Reducing low segment to [memory]

                         LINK  is  reclaiming  memory  by  deleting   its
                         internal tables.

       RER      *    1   {No}  Request  external  references  (inter-link
                         entry points)
                         {[symbol] [octal]}

                         The listed symbols and  their  values  (if  any)
                         represent subroutine entry points in the current
                         link.

       RGS      1    1   Rehashing global symbol table from [decimal]  to
                         [decimal]

                         LINK is expanding the global symbol table either
                         to  a  prime  number  larger than your /HASHSIZE
                         switch requested, or by about 50  percent.   You
                         can  speed  up  future  loads of this program by
                         setting /HASHSIZE this large at the beginning of
                         the load.

       RLC     31    1   Reloc ctr.  initial value current value
                         {[symbol] [octal] [octal]}

                         The listed  symbols  and  values  represent  the
                         current  placement  of  PSECTs  in  your address
                         space.

       RUM     31   31   Returning unavailable memory

                         LINK attempted to return memory  to  the  memory
                         manager,   but  the  specified  memory  was  not
                         previously  allocated.   This  is  an   internal
                         error.   This  message is not expected to occur.
                         If  it  does,  please   notify   your   Software
                         Specialist or send a Software Performance Report
                         (SPR) to DIGITAL.


                                    B-28
                                 FIELD TEST


       RWA     8    8    Both   READ-ONLY   and   WRITEABLE    attributes
                         specified for psect [ name ]

                         One of  the  modules  you  have  already  loaded
                         explicitly sets an attribute for the named PSECT
                         which conflicts with the  declaration  of  PSECT
                         attributes  in  the  current  module.  Check the
                         compiler   switches   or    assembly    language
                         directives  that  were used in the generation of
                         these modules.

       SFU      8    8   Symbol table fouled up

                         There are errors  in  the  local  symbol  table.
                         Loading continues, but any maps you request will
                         not contain control section lengths.  This is an
                         internal error.  This message is not expected to
                         occur.  If it does, please notify your  Software
                         Specialist or send a Software Performance Report
                         (SPR) to DIGITAL.

       SIF     31   31   Symbol insert failure, non-zero hole found

                         LINK's  hashing  algorithms  failed;  they   are
                         trying  to  write  a new symbol over an old one.
                         You  may  be  able  to  load  your  files  in  a
                         different  order.   This  is  an internal error.
                         This message is not expected to  occur.   If  it
                         does,  please notify your Software Specialist or
                         send a  Software  Performance  Report  (SPR)  to
                         DIGITAL.

       SMP      8    8   SIMULA main program not loaded

                         You loaded some SIMULA  procedures  or  classes,
                         but  no main program.  Missing start address and
                         undefined symbols will terminate execution.

       SNC     31   31   Symbol [symbol]  already  defined,  but  not  as
                         common
                         {Detected in module [symbol] from file [file]}

                         You defined a FORTRAN common area with the  same
                         name  as a non-common symbol.  You must indicate
                         which definition you  want.   If  you  want  the
                         common definition, load the common area first.

       SNL      1    1   Scanning new command line

                         LINK is ready to process the next command line.

       SNP      8    8   Subroutine [symbol] in link number [decimal] not


                                    B-29
                                 FIELD TEST


                         on  path  for  call  from  link number [decimal]
                         {name [name]}

                         The named subroutine is in a different path than
                         the   calling   link.    Redefine  your  overlay
                         structure so  that  the  subroutine  is  in  the
                         correct path.

       SNS     31   31   SITGO not supported
                         {Detected in module [symbol] from file [file]}

                         LINK  does  not  support  the  REL  file  format
                         produced  by  the  SITGO  compiler.   Load  your
                         program by using SITGO.

       SOE     31   31   Saved file output error [file]

                         An error occurred in outputting the EXE file.

       SPF     31   8    Splice fork failed {,saving on file [file]}

                         LINK was unable  to  replace  itself  with  your
                         program  using  the  extended  splice fork JSYS.
                         The probable cause is your  monitor  not  having
                         the  extended  splice fork code installed.  LINK
                         will save your program if  it  has  not  already
                         been  saved,  and  will  get  or run it from the
                         resulting EXE file.

       SRB      8    8   Attempt to set relocation counter [symbol] below
                         initial value of [octal]
                         {Detected in module [symbol] from file [file]}

                         You cannot use the /SET switch to set the  named
                         relocation counter below its initial value.  The
                         attempt is ignored.

       SRP     31   31   /SET:  switch required for PSECT [symbol]
                         {Detected in module [symbol] from file [file]}

                         Relocatable PSECTs are not implemented; you must
                         specify  an  explicit  absolute  origin with the
                         /SET switch for the named PSECT.

       SSN      8    8   Symbol table sorting not yet implemented

                         Alphabetical or numerical sorting of the  symbol
                         table is not implemented.  The symbols appear in
                         the order they are found.

       SST      1    1   Sorting symbol table



                                    B-30
                                 FIELD TEST


                         LINK is rearranging the  symbol  table,  and  if
                         required, is converting the symbols from the new
                         to old  format  as  indicated  on  the  /SYMSEG,
                         /SYFILE, or /DEBUG switch.

       STC      1    1   Symbol table completed

                         The symbol  table  has  been  sorted  and  moved
                         according  to  the  /SYMSEG,  /SYFILE, or /DEBUG
                         switch.

       STL     31   31   Symbol too long

                         A symbol specified in a rel block is longer than
                         the maximum allowed by LINK.

       SUP      1    1   Loading suppressed

                         During the compilation process, errors  occurred
                         and a nonzero number was entered in JBERR.  LINK
                         does not attempt to  load  the  REL  files  that
                         result  from  this  compile  because they may be
                         incorrect.  Some compilers do  not  produce  REL
                         files if errors are encountered.

       T13     31   31   LVAR REL block (type 13) not implemented
                         {Detected in module [symbol] from file [file]}

                         REL Block Type 13 (LVAR) is obsolete.   Use  the
                         MACRO pseudo-op TWOSEG.

       TDS      8    8   Too late to delete initial symbols

                         LINK  has  already  loaded  the  initial  symbol
                         table.   To  prevent  this  loading,  place  the
                         /NOINITIAL  switch   before   the   first   file
                         specification.

       TMA     31    8   Too many ambiguous requests  in  link  [decimal]
                         {name [name]}, use /ARSIZE:[decimal]
                         {Detected in module [symbol] from file [file]}

                         You  have  more  ambiguous  subroutine  requests
                         (indicated  by LNKARL messages) than will fit in
                         the table  for  this  link.   Continue  loading.
                         Your  load  will  abort at the end with a LNKABT
                         message; if you have  loaded  all  modules,  the
                         message will give the size of the needed /ARSIZE
                         switch for a reload.

       TML     31   31   Too many links, use /MAXNODE



                                    B-31
                                 FIELD TEST


                         You have specified more overlay links than  were
                         allowed  by  the  current value for the /MAXNODE
                         switch.   Reload  your  program  with  a  larger
                         /MAXNODE value.

       TMM     +    +    Type mismatch seen  for  argument  [decimal]  in
                         call  to  routine  [symbol]  called  from module
                         [symbol] at location [octal]

                         The data type of  the  argument  passed  by  the
                         caller  does  not  match what the called routine
                         expects.
   [5]

       TTF      8    8   Too many titles found

                         In producing the index  for  a  map  file,  LINK
                         found   more   program   names  than  there  are
                         programs.  The symbol table is in  error.   This
                         is  an  internal  error.   This  message  is not
                         expected to occur.  If it  does,  please  notify
                         your  Software  Specialist  or  send  a Software
                         Performance Report (SPR) to DIGITAL.

       UAR      8    8   Undefined assign for [symbol]
                         {Detected in module [symbol] from file [file]}

                         The named symbol was referenced in a  REL  Block
                         Type  100 (ASSIGN), but the symbol is undefined.
                         This  is  generated  with  the  MACRO  pseudo-op
                         .ASSIGN.  The assignment is ignored.  You should
                         load a module that defines the symbol.

       UCB     8    8    Unknown COMMON [symbol] referenced

                         A reference was made to a common block,  however
                         the block does not exist.

       UIE     31   31   Unexpected internal error during processing

                         An error occurred while  processing  a  previous
                         error.   This  message is not expected to occur.
                         If  it  does,  please   notify   your   Software
                         Specialist or send a Software Performance Report
                         (SPR) to DIGITAL.
   ---------------

    [5]  + The level and severity of this  message  is  determined  by  a
         compiler-generated  coercion  block.  A coercion block specifies
         which data type associations are  permissible  and  what  action
         LINK  should  take  if an illegal type association is attempted.
         See Block Type 1130 in Appendix A for more information.


                                    B-32
                                 FIELD TEST


       UGS      *    1   {No} Undefined global symbols {[symbol] [octal]

                         The listed symbols and  their  values  (if  any)
                         represent symbols not yet defined by any module.
                         Each value is the first address in  a  chain  of
                         references for the associated symbol.

                         If this message resulted  automatically  at  the
                         end  of  loading, this is a user error.  In this
                         case, the load will continue, leaving references
                         to these symbols unresolved.

       UMF     31   31   Unexpected monitor call failure for [JSYS] at PC
                         [octal]
                         {JSYS error text}

                         A monitor call  has  unexpectedly  failed.   The
                         second  line  of  the  error message is the last
                         TOPS-20 process  error  and  indicates  why  the
                         error  occurred.   This  may  be either a system
                         problem or a LINK internal error,  depending  on
                         the message.

       UNS     31   31   Universal  file  REL  block   (type   777)   not
                         supported from file [file]

                         Extraction of symbols  from  a  MACRO  universal
                         file is not implemented.

       URC     31    1   Unknown Radix-50 symbol code [octal] [symbol]
                         {Detected in module [symbol] from file [file]}

                         In a REL Block Type 2  (Symbols),  the  first  4
                         bits  of  each  word  pair  contain the Radix-50
                         symbol code.  LINK found  one  or  more  invalid
                         codes in the block.  This error can be caused by
                         a fault in the language translator used for  the
                         program.

       URV     +    +    Unexpected  return  value  in  call  to  routine
                         [symbol] called from module [symbol] at location
                         [octal]

                         The called routine returns a value which was not
                         expected by the caller.
   [6]

       USA      8    8   Undefined start address [symbol]

                         You gave an undefined global symbol as the start
                         address.  Load a module that defines the symbol.



                                    B-33
                                 FIELD TEST


       USB     8    8    Undefined symbol in byte array (type 1004) block
                         {Detected in module [symbol] from file [file]}

                         LINK has detected an undefined global symbol  in
                         a  type  1004  REL block.  This global symbol is
                         used to relocate a  byte  pointer  and  must  be
                         defined  before  the  1004 block that uses it is
                         seen.  This error is most likely the  result  of
                         an  error  in  the  language  translator used to
                         generate the REL file.

       USC     31    8   Undefined subroutine [symbol] called  from  link
                         number [decimal] {name [name]}

                         The named link contains a call for a  subroutine
                         you  have  not  loaded.   If  the  subroutine is
                         required  for  execution,   you   must   reload,
                         including the required module in the link.

       USD     31   31   Undefined symbol [ symbol ] used in loading code
                         or data blocks

                         You have loaded a module that is loading code or
                         data  at  a  symbolic  address and the symbol is
                         currently unknown to LINK.  Check the  order  in
                         which you are loading modules.

       USI      8   16   Undefined  symbol  [symbol]  illegal  in  switch
                         [switch]

                         You have specified  an  undefined  symbol  to  a
                         switch  that can only take a defined symbol or a
                         number.  Specify the correct switch value.

       UUA      8    8   Undefined /UPTO:  address [symbol]

                         You gave the named symbol as an argument to  the
                         /UPTO  switch, but the symbol was never defined.
                         Load a module that defines the symbol, or change
                         your argument to the /UPTO switch.

       VAL     31    1   Symbol [symbol] [octal] [type]

                         LINK has printed the specified symbol, its value
                         and its attributes as requested.
   ---------------

    [6]  + The level and severity of this  message  is  determined  by  a
         compiler-generated  coercion  block.  A coercion block specifies
         which data type associations are  permissible  and  what  action
         LINK  should  take  if an illegal type association is attempted.
         See Block Type 1130 in Appendix A for more information.


                                    B-34
                                 FIELD TEST


       WNA     +    +    Wrong number of arguments  in  call  to  routine
                         [symbol] called from module [symbol] at location
                         [octal]

                         The number of arguments in the routine  call  is
                         not  the  number  of  arguments  expected by the
                         called routine.

       XCT     31    1   [Name] execution

                         LINK is beginning execution of your program.

       ZSV      8    8   Zero switch value illegal

                         You omitted required arguments for a switch (for
                         example,  /REQUIRE  with no symbols).  Respecify
                         the switch.




   B.3  REASON EXPLANATION

   The [reason] message segment of the LNKEOV,  LNKETP,  LNKFEE,  LNKFLE,
   and LNKFRE messages may contain one of the following codes.


       Code            Description

        0              (LNKFEE and LNKFRE only)
                       One of the following conditions occurred:

                       1.  The specified file name was illegal.

                       2.  When updating a file, the specified file  name
                           did not match the file to be updated.

                       3.  The RENAME monitor  call  following  a  LOOKUP
                           monitor call failed.


        0              (LNKFLE only)
                       The named file was not found.  Specify an existing
                       file.

        1              The named directory does not exist  on  the  named
                       file  structure,  or the project-programmer number
                       given was incorrect.

        2              You do not have the sufficient  access  privileges
                       to use the named file.



                                    B-35
                                 FIELD TEST


        3              Another job is currently modifying the named file.
                       Try accessing the file later.

        4              The named file already exists, or a different file
                       was  specified on the ENTER monitor call following
                       a LOOKUP monitor call.

        6              One of the following conditions occurred:

                       1.  A transmission, device or data error  occurred
                           while  attempting to read the directory or the
                           RIB of the named file.

                       2.  A hardware-detected device or data  error  was
                           detected  while  reading the named directory's
                           RIB or data block.

                       3.  A software-detected data  inconsistency  error
                           was   detected   while   reading   the   named
                           directory's or file's RIB.

        7              The named file is not saved a file.  This  message
                       can   never   occur   and  is  included  only  for
                       completeness of the LOOKUP, ENTER and RENAME error
                       codes.  This message is not expected to occur.  If
                       it does, please notify your Software Specialist or
                       send   a  Software  Performance  Report  (SPR)  to
                       DIGITAL.

        14             You  have  exceeded  the  quota   of   the   named
                       directory,  or  the  entire  capacity  of the file
                       structure,  Delete  some  files,  or   specify   a
                       directory or structure with sufficient space.

        15             The  named  device  is  write-locked.   Specify  a
                       write-enabled   device  or  ask  the  operator  to
                       write-enable the named device.

        24             A LOOKUP and ENTER monitor call was  performed  on
                       generic device DSK:  and the search list is empty.

        30             A LOOKUP and  ENTER  monitor  call  was  given  to
                       update  a file, but the file cannot be updated for
                       some  reason  For   example,   another   user   is
                       superseding it or the file was deleted between the
                       time of the LOOKUP and ENTER.

        42             This message indicates that a  LOOKUP,  ENTER,  or
                       RENAME  error  occurred  that was larger in number
                       than the errors LINK knows about.  This message is
                       not  expected to occur.  If it does, please notify
                       your  Software  Specialist  or  send  a   Software


                                    B-36
                                 FIELD TEST


                       Performance Report (SPR) to DIGITAL.





















































                                    B-37
























































                                    C-1











                                 APPENDIX C

                    JOB DATA AREA LOCATIONS SET BY LINK



   LINK sets a number of locations between 40  and  140  (octal)  in  the
   user's  program.   These  locations  are  known  as  the Job Data Area
   (commonly abbreviated to JOBDAT).  They are used by many languages and
   programs.  In addition, two segment programs have a Vestigial Job Data
   Area of eight words following the high segment origin.

   The /NOJOBDAT switch, described in  Section  3.2.2,  keeps  LINK  from
   filling in JOBDAT.



   C.1  JOB DATA AREA


   Address   Symbolic            Use

      41     .JB41     HALT if not specified otherwise.
                       Executes by LUUOs.

      42     .JBERR    Right:    Number of errors during loading.

      74     .JBDDT    Left:     Highest location occupied by DDT.
                       Right:    Start address of DDT if loaded.

      115    .JBHRL    Left:     High segment length.
                       Right:    Highest address in high segment.

      116    .JBSYM    Left:     Negative length of symbol table.
                       Right:    Address of table.

      117    .JBUSY    Left:     Negative  length  of  undefined   symbol
                                 table.
                       Right:    Address of undefined symbol table.

      120    .JBSA     Left:     First free location in low segment.
                       Right:    Start address of program.



                                    C-1
                                 FIELD TEST


   Address   Symbolic            Use

      121    .JBFF               Right:   First  free  location  in   low
                                 segment.

      124    .JBREN              Right:  Reenter address of program.

      131    .JBOVL              Address of header  block  for  the  root
                                 link in an overlaid program.

      133    .JBCOR    Left:     Highest location of low  segment  loaded
                                 with data.

      137    .JBVER    Version   Program version  number  (in octal)  and
                       number:   flags, in the format shown below.

                                 Bits   Meaning

                                  0-2   Modifier flag:

                                        Flag  Meaning

                                           0  DIGITAL  development  group
                                              last modified the program.
                                           1  Other   DIGITAL   employees
                                              last modified the program.
                                         2-4  A  customer  last  modified
                                              the program.
                                         5-7  A  customer's   user   last
                                              modified the program.

                                  3-11  DIGITAL's latest  major  revision
                                        number,  usually incremented by 1
                                        for each release.
                                 12-17  DIGITAL's minor revision  number,
                                        which  is  usually  0, unless the
                                        program has been  modified  since
                                        the last release.
                                 18-35  The edit number, increased  by  1
                                        after  each  edit to the program.
                                        This value is never reset.



   C.1.1  Vestigial Job Data Area

     Offset  Symbolic            Use

        0    .JBHSA    Copy of .JBSA.

        1    .JBH41    Copy of .JB41.



                                    C-2
                                 FIELD TEST


        2    .JBHCR    Copy of .JBCOR.

        3    .JBHRH    LH:  left half of .JBHRL.
                       RH:  right half of .JBREN.

        4    .JBHVR    Copy of .JBVER.

        5    .JBHNM    Program Name.

        6    .JBHSM    High segment symbol table, if any.

        7    .JBHGA    High segment origin page in bits 9-17.

        








































                                    C-3
























































                                    8-1












                                  GLOSSARY



   absolute address         is a fixed location in user  virtual  address
                            space  which  cannot  be  relocatable  by the
                            software.

   ASCII                    is the American Standard Code for Information
                            Interchange.   A  7-bit code in which textual
                            information  is  recorded.   ASCII  code  can
                            represent  128  distinct  characters.   These
                            characters  are  the  upper  and  lower  case
                            letters,  numbers,  common punctuation marks,
                            and special control characters.

   assembler                translates  assembly  language  into  machine
                            language.

   relocatable              contains machine language  code corresponding
   binary file              to your source program.

   chained fixup            is a linked list of locations that require  a
                            global  symbol  definition.   The  left-half,
                            right-half, or whole words points to the next
                            location   in  the  list  that  requires  the
                            definition.

   compiler                 translates high-level language  into  machine
                            language.

   counted vector           is a region of memory whose size  is  in  the
                            first word of a block.

   debugger                 is  a   program   that   helps   you   locate
                            programming errors or bugs.

   entry name symbol        is a symbol in  a  module  that  contains  an
                            entry point name for other modules.

   executable program       is the form of a program that is ready to  be
                            executed by the computer.
                                 FIELD TEST


   fixup                    is a process  LINK  uses  to  resolve  global
                            symbol references.  LINK stores the reference
                            until it loads the module that  contains  the
                            global symbol's definition.  After LINK loads
                            that module, it places the  definition  where
                            the reference is stored.

   global symbol            is a symbol defined in one module that can be
                            referenced by other modules.

   JOBDAT                   contains  information  about  a  program   in
                            locations  20  decimal to 137 decimal such as
                            its debugger symbol  table  pointer,  version
                            numbers, and memory use.

   language translator      is a compiler or  assembler  that  translates
                            source code into machine executable format.

   library                  is a file that contains object  modules  that
                            may  be  needed by programs to resolve global
                            symbol references.

   object module            contains a source program's relocatable  code
                            in machine-readable format.

   PDV                      stands for Program Data Vector  and  contains
                            information  about  a  program  such  as  its
                            debugger  symbol   table   pointer,   version
                            number,  and  memory  use.   A  PDV  is  used
                            usually in place of JOBDAT  for  an  extended
                            addressing program.

   Polish chained fixups    is  a  process  that  uses  an  algorithm  to
                            resolve global symbols.

   PSECTs                   stands   for   Program   SECTions   and   are
                            programmer  or system defined regions of code
                            or  data  that  LINK  relocates  together  in
                            memory.

   Radix-50                 is a highly compressed code  used  to  record
                            textual    information.     The    characters
                            available in Radix-50 are uppercase  letters,
                            0-9,  ., %, $, and a space.  A space is equal
                            to 0, and cannot be used in names.

   relocatable address      is  an  address  within  a  module  that   is
                            specified   as   an  offset  from  the  first
                            location in that module.

   REL blocks               are output from a  language  translator  that
                            make up and contain the information that LINK
                                 FIELD TEST


                            uses to load a program.

   REL file                 is  the  file  produced   by   compilers   or
                            assemblers  that contains the REL blocks used
                            by LINK to load a program.

   SIXBIT                   is a 6-bit code in which textual  information
                            is  recorded.  It is a compressed form of the
                            ASCII character set, therefore not all of the
                            characters  in ASCII are available in SIXBIT,
                            notably the nonprinting characters and  lower
                            case letters are omitted.

   symbol table             contains entries and values for  each  symbol
                            defined or used within a program.

   sharable save file       is  the  executable  program  that  has  been
                            stored  in a file using the LINK /SAVE switch
                            or the TOPS-20 SAVE command.  This  file  has
                            an .EXE file extension.


































                                     3
                                        


                                   INDEX



   Abbreviating LINK switches, 3-4       loading, 3-17, 3-94
   Abbreviating switches, 3-4            specifying, 3-16
   Absolute address, 1-2               Debugging overlaid programs, 5-26
   Address                             Declaring non-writable links,
     absolute, 1-2                         5-29
     relocatable, 1-2                  Declaring writable links, 5-34
     virtual, 1-2                      Default
   Allocating                            changing file specifications,
     FORTRAN COMMON storage, 3-10            3-19
   Allocating memory                   /DEFAULT switch, 3-19
     for overlays, 3-87                Defaults
   /ARSIZE switch, 3-9                   file specifications, 3-3
                                         specifying, 3-59
   Blocks                              /DEFINE switch, 3-20
     REL, 1-2, A-1                     Defining
   Building PDVs, 7-1                    global symbols, 3-20
                                         logical names, 3-4
   Calls to overlay handler, 5-27      Deleting
   CCL file, 3-3                         entry name symbols, 3-47
   Changing PDVs contents, 3-71        Deleting overlay links, 3-52
   Clearing modules, 3-48              Displayiing
   Closing overlay links, 3-35           needed modules, 3-43
   CLROV., 5-29                        Displaying
   CLROVL, 5-29                          entry name symbols, 3-21
   CMD file, 3-3                         external global symbol
   Command switches                          references, 3-75
     TOPS-20, 2-3                        global symbol values, 3-99
   Commenting LINK commands, 3-2         relocation counters, 3-13
   /COMMON switch, 3-10                  undefined global symbols, 3-96
   CONCATENATE                         Displaying messages, 3-41, 3-100
     PSECTs attributes, 6-4
   Conserving memory space, 3-51       Ending loading, 3-26
   Constructing overlays, 3-62         Entry name
   /CONTENTS switch, 3-11                symbols, 1-3
   Continuing LINK commands, 3-2       Entry name symbols
   Core image file, 4-1                  deleting, 3-47
   /COUNTERS switch, 3-13                displaying, 3-21
   /CPU switch, 3-15                   Entry points overlay handler,
   CPU type                                5-27
     specifying, 3-15                  /ENTRY switch, 3-21
   Creating                            /ERRORLEVEL switch, 3-22
     EXE files, 3-80                   /EXCLUDE switch, 3-23
     sharable save files, 3-80         EXE file, 1-4
   Creating PDVs, 3-50                 Executable program, 1-4, 4-1
                                       EXECUTE
   Data word, A-2                        TOPS-20 command, 2-1
   /DDEBUG switch, 3-16                /EXECUTE switch, 3-1, 3-24
   DEBUG                               Executing a loaded program, 3-24


                                  Index-1
                                        


     TOPS-20 command, 2-1              /EXIT switch, 3-27
   /DEBUG switch, 1-4, 3-1, 3-17       Exiting LINK, 3-1, 3-26
   Debuggers                           EXTTAB table, 5-53



















































                                  Index-2
                                        


   File                                  when LINK creates, 7-1
     core image, 4-1
     EXE, 1-4                          Levels
     indirect command, 3-3               message, 4-7
     log, 1-5, 4-6                     Libraries
     map, 1-5, 4-7                       searching, 3-81
     overlay, 1-5                      Library, 1-3
     plotter, 1-5                        searching, 1-3
     REL, 1-2                            system, 1-3
     sharable save, 1-4                  user, 1-4
     symbol, 1-5, 3-91, 4-7            /LIMIT LINK switch, 6-2
   File specification defaults         /LIMIT switch, 3-32
     changing, 3-19                    LINK, 1-1
   Forcing modules loading, 3-30         input, 1-2
   Forcing system library searching,     messages, 1-5
       3-93                              output, 1-4
   Format                              LINK commands
     link overlay, 5-50                  commenting, 3-2
     overlay file, 5-47                  continuing, 3-2
     PDV, 7-3                            file specification defaults,
   FORTRAN COMMON                            3-3
     allocating, 3-10                    format, 3-2
   /FRECOR switch, 3-25                  in indirect command files, 3-3
   Free memory                         LINK messages, 4-7, B-1
     maintaining, 3-25                   description, B-1
   FUNCT. subroutine, 5-23, 5-40         level, B-1
                                         severity, B-2
   GETOV., 5-30                        Link name table format, 5-49
   GETOVL, 5-30                        LINK number table format, 5-49
   Global LINK switches, 3-7           Link overlay code, 5-52
   Global symbol                       Link overlay format, 5-50
     displaying values, 3-99           /LINK switch, 3-35
   Global symbols, 1-3                 LINK switches, 3-4
     defining, 3-20                      abbreviating, 3-4
     displaying undefined, 3-96          arguments, 3-5
     suppressing, 3-89                   format for use with TOPS-20
   /GO switch, 3-1, 3-26                     commands, 2-3
                                         placement, 3-6
   /HASHSIZE switch, 3-28              LOAD
   Header word, A-1                      TOPS-20 command, 2-1
   /HELP switch, 3-29                  Loading
                                         debuggers, 3-17, 3-94
   IDXBFR, 5-27                          ending, 3-26
   INBFR, 5-27                           FORTRAN into PSECTs COMMONS,
   /INCLUDE switch, 3-30                     3-68
   Including local symbols, 3-36         object-time systems, 3-60
   Indirect command file, 3-3            PSECTs, 6-1
   INIOV., 5-31                          segments, 3-58
   INIOVL, 5-31                          two-segment code using PSECTs,
   INTTAB table, 5-54                        3-74
                                       Local LINK switches, 3-6
   Job data area, C-1                  Local symbols, 1-3


                                  Index-3
                                        


   Job names                             including, 3-36
     specifying, 3-78                  /LOCALS switch, 3-36
   JOBDAT, 1-4, C-1                    Log file, 1-5, 4-6



















































                                  Index-4
                                        


     specifying, 3-37                  /NOREQUEST switch, 3-52
   Log files                           /NOSEARCH switch, 1-4, 3-53
     overlay, 5-32                     /NOSTART switch, 3-54
   /LOG switch, 3-37                   /NOSYMBOL switch, 3-55
   Logical names                       /NOSYSLIB switch, 1-4, 3-56
     defining, 3-4                     /NOUSERLIB switch, 1-4, 3-57
   /LOGLEVEL switch, 3-38              Number of overlay links
   LOGOV., 5-32                          specifying, 3-40
   LOGOVL, 5-32
   Long count, A-1                     Object modules, 1-2
                                       Object-time systems
   Maintaining free memory, 3-25         loading, 3-60
   Map file, 1-5, 4-7                  /ONLY switch, 1-2, 3-58
     resetting symbol types, 3-11      Opening overlay links, 3-45
     specifying symbol types, 3-11     /OPTION switch, 3-59
   /MAP switch, 3-39                   Origin
   /MAXNODE switch, 3-40                 PSECTs, 6-1
   MBZ, A-2                            /OTSEGMENT switch, 3-60
   Memory                              Output file specification
     allocating                          specifying, 3-6
       for overlays, 3-87              OVERLAID
   Memory map                            PSECTs attributes, 6-4
     format of PDV, 7-6                Overlaid programs
     length, 7-6                         debugging, 5-26
     PDV, 7-5                          Overlay
   Memory space                          file, 1-5
     conserving, 3-51                  Overlay file format, 5-47
   Message levels, 4-7                 Overlay handler, 5-26
   Message severity, 4-8                 calls to, 5-27
   Message severity codes, B-2           entry points, 5-27
   /MESSAGE switch, 3-41               Overlay handler messages, 5-35
   Messages                            Overlay link names
     Displaying, 3-100                   specifying, 3-6
     LINK, 4-7                         Overlay link paths, 5-1
     overlay handler, 5-35             Overlay link preamble, 5-51
     suppressing, 3-22                 Overlay links
     suppressing logging, 3-38           closing, 3-35
   /MISSING switch, 3-43                 deleting, 3-52
   Module names                          naming, 3-35
     specifying, 3-5                     opening, 3-45
   Modules                               predecessor, 5-1
     clearing, 3-48                      successor, 5-1
     forcing loading, 3-30             Overlay log files, 5-32
     preventing loading, 3-23          Overlay program size, 5-26
                                       Overlay structure, 5-1
   Naming overlay links, 3-35          /OVERLAY switch, 3-62
   /NEWPAGE switch, 3-44               Overlay switches, 5-2
   /NODE switch, 3-45                  Overlaying links, 5-27
   /NOENTRY switch, 3-47               Overlays, 1-5
   /NOINCLUDE switch, 3-48               constructing, 3-62
   /NOINITIAL switch, 3-49               restrictions, 5-23
   /NOJOBDAT switch, 3-50                writable, 5-22


                                  Index-5
                                        


   /NOLOCAL switch, 3-51               Overlays relocatable, 5-23
   Non-writable links
     declaring, 5-29                   Page access



















































                                  Index-6
                                        


     setting, 6-5                        origin, 6-1
   /PATCHSIZE switch, 3-64               preventing unintended overlaps,
   Paths                                     6-2
     overlay link, 5-1                   specifying upper bounds, 3-32
   PDV, 1-4, 7-1                         upper bound, 6-2
     building, 7-1                     /PVBLOCK switch, 3-69
     format, 7-3                       /PVDATA switch, 3-71
     memory map, 7-5
       format, 7-6                     /REDIRECT switch, 1-3, 3-74
     when LINK creates, 7-1            REL
   PDVOP% JSYS, 7-1                      blocks, 1-2
   PDVs                                  file, 1-2
     changing contents, 3-71           REL blocks, A-1
     requesting, 3-69                  Relocatable
   Plot file                             overlays, 5-23
     specifying, 3-67                  Relocatable address, 1-2
   /PLOT switch, 3-65                  Relocatable binary file
   Plotter file, 1-5                     See REL file.
   /PLTTYP switch, 3-67                Relocation counter
   Predecessor links, 5-1                definition, 1-3
   Predecessor overlay links, 5-1      Relocation counters
   Preventing                            displaying, 3-13
     automatic system library            for PSECTed programs, 1-3
         searching, 3-56                 for segmented programs, 1-2
     JOBDAT, 3-50                        setting, 3-44, 3-85
     module loading, 3-23              Relocation table, 5-55
     user symbol tables, 3-55          Relocation word, A-1
   Preventing JOBDAT, 3-49             REMOV., 5-32
   Program                             Removing links, 5-32
     executable, 1-4                   REMOVL, 5-32
     executing, 3-24                   /REQUEST switch, 3-75
     single-segment, 1-2               Requesting
     specifying termination, 3-86        symbols, 3-76
     two-segment, 1-2                  Requesting PDVs, 3-69
   Program Data Vector                 /REQUIRE switch, 3-76
     See PDV.                          Resetting symbol types for the
   Program Data Vectors                    map file, 3-11
     See PDVs                          Restrictions overlays, 5-23
   Program size                        RONLY
     overlay, 5-26                       PSECTs attributes, 6-5
   /PSCOMMON switch, 3-68              Root link, 5-1
   PSECT bounds, 6-1                   /RUN switch, 3-77
   PSECT names                         /RUNAME switch, 3-78
     specifying, 3-5                   Running LINK, 3-1
   PSECT origins                       Running links, 5-33
     setting, 3-85                     /RUNOFFSET switch, 3-79
   PSECTs, 6-1                         RUNOV., 5-33
     attributes, 6-3                   RUNOVL, 5-33
       CONCATENATE, 6-4                RWRITE
       OVERLAID, 6-4                     PSECTs attributes, 6-5
       RONLY, 6-5
       RWRITE, 6-5                     Save file format, 4-2


                                  Index-7
                                        


     loading, 6-1                      /SAVE switch, 1-4, 3-80
     loading two-segment code into,    SAVOV., 5-34
         3-74                          SAVOVL, 5-34



















































                                  Index-8
                                        


   /SEARCH switch, 1-4, 3-81           Successor links, 5-1
   Searching libraries, 3-81           successor overlay links, 5-1
   Searching user libraries, 3-98      /SUPPRESS switch, 3-89
   /SEGMENT switch, 3-83               Suppressing
   Segments                              global symbols, 3-89
     loading, 3-58                       messages display, 3-22
     specifying, 3-83                  Suppressing logging messages,
   /SET LINK switch, 6-1                   3-38
   /SET switch, 3-85                   /SYFILE switch, 3-91
   Setting global symbol table size,   Symbol file, 1-5, 4-7
       3-28                              specifying, 3-91
   Setting page access, 6-5            Symbol names
   Setting PSECT origins, 3-85           specifying, 3-5
   Setting relocation counters, 3-44,  Symbol table limits
       3-85                              setting, 3-97
   Setting symbol table limits, 3-97   Symbol table vector, 7-7
   Severity                              format, 7-8
     message, 4-8                      Symbol tables
   Severity codes                        specifying location, 3-92
     message, B-2                      Symbols
   /SEVERITY switch, 3-86                entry name, 1-3
   Sharable save file, 1-4               global, 1-3
   Short count, A-1                      local, 1-3
   Single-segment program, 1-2         /SYMSEG switch, 3-92
   Size                                /SYSLIB switch, 1-4, 3-93
     setting global symbol table,      System libraries
         3-28                            forcing searching, 3-93
   /SPACE switch, 3-87                   preventing automatic searching,
   Specifying                                3-56
     CPU type, 3-15                    System library, 1-3
     debuggers, 3-16
     job names, 3-78                   /TEST switch, 1-4, 3-94
     log file, 3-37                    TOPS-20 command switches, 2-3
     module names, 3-5                 Translating directories, 3-4
     number of overlay links, 3-40     Tree diagram
     output file specifications, 3-6     outputting, 3-65
     overlay link names, 3-6           Tree structure, 5-1
     plot file, 3-67                   Two-segment program, 1-2
     program termination, 3-86
     PSECT names, 3-5                  /UNDEFINED switch, 3-96
     PSECTs upper bounds, 3-32         Upper bound for PSECTs, 6-2
     segments, 3-83                    /UPTO switch, 3-97
     start addresses, 3-88             User libraries, 1-4
     symbol names, 3-5                   searching, 3-98
     symbol types for the map file,      stopping automatic searching,
         3-11                                3-57
     version numbers, 3-102            User symbol tables
   Specifying values, 3-5                preventing, 3-55
   Start addresses                     /USERLIB switch, 1-4, 3-98
     specifying program, 3-88
   /START switch program, 3-88         /VALUE switch, 3-99
   Stopping automatic user library     Values


                                  Index-9
                                        


       searching, 3-57                   specifying, 3-5
   Subroutine                          /VERBOSITY switch, 3-100
     FUNCT., 5-23, 5-40                Version numbers



















































                                  Index-10
                                        


     specifying, 3-102                 Writable links
   /VERSION switch, 3-102                declaring, 5-34
   Virtual address, 1-2                Writable overlays, 5-22



















































                                  Index-11