User Tools

Site Tools


cdc:nos2.source:opl.opl871:deck:coding.001

Deck CODING Part 001

1 Modification

Listing Sections

Source

Seq #  *Modification Id* Act 
----------------------------+
01967  M01S01964.coding  +++|
01968  M01S01965.coding  +++|              USE    BUFFERS
01969  M01S01966.coding  +++|     IBUF     EQU    *
01970  M01S01967.coding  +++|     OBUF     EQU    IBUF+IBUFL
01971  M01S01968.coding  +++|     RFL=     EQU    OBUF+OBUFL
01972  M01S01969.coding  +++|
01973  M01S01970.coding  +++| Small buffers and working storage areas may be allocated via BSSZ,
01974  M01S01971.coding  +++| if the program requires that the area be zero on program initiation.
01975  M01S01972.coding  +++|
01976  M01S01973.coding  +++| The BSSN macro defined in COMCMAC and COMPMAC may also be used to
01977  M01S01974.coding  +++| define buffers.
01978  M01S01975.coding  +++|
01979  M01S01976.coding  +++|
01980  M01S01977.coding  +++| 3.5 DATA/CODE NAMING TERMINOLOGY
01981  M01S01978.coding  +++|
01982  M01S01979.coding  +++|
01983  M01S01980.coding  +++|1                                                           PAGE    40
01984  M01S01981.coding  +++|
01985  M01S01982.coding  +++|
01986  M01S01983.coding  +++| 3.5.1 USE OF CONDITION TERMINOLOGY
01987  M01S01984.coding  +++|
01988  M01S01985.coding  +++| The following terms are used to describe the condition of bits used
01989  M01S01986.coding  +++| as flags or switches.  The selected terms should be used
01990  M01S01987.coding  +++| consistently within a program.
01991  M01S01988.coding  +++|
01992  M01S01989.coding  +++|           1              0
01993  M01S01990.coding  +++|           on             off
01994  M01S01991.coding  +++|           true           false
01995  M01S01992.coding  +++|           set            clear (reset)
01996  M01S01993.coding  +++|           nonzero        zero
01997  M01S01994.coding  +++|           up             down
01998  M01S01995.coding  +++|
01999  M01S01996.coding  +++|
02000  M01S01997.coding  +++| 3.5.2 TAGS WITHIN SUBROUTINES
02001  M01S01998.coding  +++|
02002  M01S01999.coding  +++| Each subroutine (main loop, primary subroutine or secondary
02003  M01S02000.coding  +++| subroutine) has a meaningful three character name which is derived
02004  M01S02001.coding  +++| from the title of the subroutine (see section 2.4).
02005  M01S02002.coding  +++|
02006  M01S02003.coding  +++| Tags used for branch instructions are of the form:
02007  M01S02004.coding  +++|
02008  M01S02005.coding  +++|           XXXn           Example: GFN1
02009  M01S02006.coding  +++|
02010  M01S02007.coding  +++| Tags on code which is added later to the subroutine are of the
02011  M01S02008.coding  +++| form:
02012  M01S02009.coding  +++|
02013  M01S02010.coding  +++|           XXXN.n         Example: GFN1.1
02014  M01S02011.coding  +++|
02015  M01S02012.coding  +++| Tags that are inserted between the SUBR and the tag XXX1 by
02016  M01S02013.coding  +++| corrective code are of the form:
02017  M01S02014.coding  +++|
02018  M01S02015.coding  +++|           XXX0.n         Example: GFN0.1
02019  M01S02016.coding  +++|
02020  M01S02017.coding  +++|
02021  M01S02018.coding  +++| Tags on storage locations (constants, temporary storage and
02022  M01S02019.coding  +++| instruction modification) within a subroutine are of the form:
02023  M01S02020.coding  +++|
02024  M01S02021.coding  +++|           XXXa
02025  M01S02022.coding  +++|
02026  M01S02023.coding  +++| Where:
02027  M01S02024.coding  +++|
02028  M01S02025.coding  +++|     XXX  =    Subroutine name
02029  M01S02026.coding  +++|     XXXN =    Tag preceding an added one
02030  M01S02027.coding  +++|     n    =    Number from 1 to 99 (in consecutive order beginning at
02031  M01S02028.coding  +++|               the entry point and ending at the exit point)
02032  M01S02029.coding  +++|     a    =    Letter from A to Z and AA to ZZ (in alphabetical order
02033  M01S02030.coding  +++|               and excluding X)
02034  M01S02031.coding  +++|
02035  M01S02032.coding  +++| Tags of the form XXXn, XXXn.n, and XXXa should not be referenced
02036  M01S02033.coding  +++| outside of subroutine XXX.
02037  M01S02034.coding  +++|
02038  M01S02035.coding  +++|1                                                           PAGE    41
02039  M01S02036.coding  +++|
02040  M01S02037.coding  +++|
02041  M01S02038.coding  +++| If the above rules cannot be followed due to tag unavailability,
02042  M01S02039.coding  +++| the entire subroutine will have its tags resequenced.
02043  M01S02040.coding  +++|
02044  M01S02041.coding  +++| Tags on storage locations within a subroutine which must be
02045  M01S02042.coding  +++| referenced outside of the subroutine should be given appropriate
02046  M01S02043.coding  +++| global tags.
02047  M01S02044.coding  +++|
02048  M01S02045.coding  +++|
02049  M01S02046.coding  +++| 3.5.3 TAGS ON DATA
02050  M01S02047.coding  +++|
02051  M01S02048.coding  +++|
02052  M01S02049.coding  +++| 3.5.3.1 DIRECT CELLS
02053  M01S02050.coding  +++|
02054  M01S02051.coding  +++| All PP direct cells have two-character names.
02055  M01S02052.coding  +++|
02056  M01S02053.coding  +++| The following table defines the preassigned direct cell usage:
02057  M01S02054.coding  +++|
02058  M01S02055.coding  +++|     Contents                   Name      Location
02059  M01S02056.coding  +++|
02060  M01S02057.coding  +++|     Control Point RA/100       RA        55
02061  M01S02058.coding  +++|     Control Point FL/100       FL        56
02062  M01S02059.coding  +++|     1                          ON        70
02063  M01S02060.coding  +++|     100                        HN        71
02064  M01S02061.coding  +++|     1000                       TH        72
02065  M01S02062.coding  +++|     3                          TR        73
02066  M01S02063.coding  +++|     CPA address                CP        74
02067  M01S02064.coding  +++|     PP input register address  IA        75
02068  M01S02065.coding  +++|     PP output register address OA        76
02069  M01S02066.coding  +++|     PP message buffer address  MA        77
02070  M01S02067.coding  +++|
02071  M01S02068.coding  +++|
02072  M01S02069.coding  +++| 3.5.3.2 CODE CONTROL NAMES
02073  M01S02070.coding  +++|
02074  M01S02071.coding  +++| Names used for assembly options, micros and to control code
02075  M01S02072.coding  +++| generation are five or more characters long.
02076  M01S02073.coding  +++|
02077  M01S02074.coding  +++|
02078  M01S02075.coding  +++| 3.5.3.3 TABLE NAMES
02079  M01S02076.coding  +++|
02080  M01S02077.coding  +++| Tags used on tables have the form:
02081  M01S02078.coding  +++|
02082  M01S02079.coding  +++|           Txxx
02083  M01S02080.coding  +++|
02084  M01S02081.coding  +++| Tags used for table lengths have the form:
02085  M01S02082.coding  +++|
02086  M01S02083.coding  +++|           TxxxL
02087  M01S02084.coding  +++|
02088  M01S02085.coding  +++| Tags used for table entry lengths have the form:
02089  M01S02086.coding  +++|
02090  M01S02087.coding  +++|           TxxxE
02091  M01S02088.coding  +++|
02092  M01S02089.coding  +++|1                                                           PAGE    42
02093  M01S02090.coding  +++|
02094  M01S02091.coding  +++|
02095  M01S02092.coding  +++| Where:
02096  M01S02093.coding  +++|
02097  M01S02094.coding  +++| xxx = 3 character table name
02098  M01S02095.coding  +++|
02099  M01S02096.coding  +++|
02100  M01S02097.coding  +++| 3.5.3.4 GLOBAL MEMORY LOCATIONS
02101  M01S02098.coding  +++|
02102  M01S02099.coding  +++| Names used for global memory locations (locations referenced by more
02103  M01S02100.coding  +++| than one subroutine) are four characters long.  Multiple definitions
02104  M01S02101.coding  +++| for global memory locations should be avoided.
02105  M01S02102.coding  +++|
02106  M01S02103.coding  +++|
02107  M01S02104.coding  +++| 3.5.4 CONSTANTS USED AS INSTRUCTIONS
02108  M01S02105.coding  +++|
02109  M01S02106.coding  +++| Four letter tag names should end in "I" if the tag name is defining
02110  M01S02107.coding  +++| an instruction.
02111  M01S02108.coding  +++|
02112  M01S02109.coding  +++| For example:
02113  M01S02110.coding  +++|
02114  M01S02111.coding  +++|      LJMI     EQU    0100B       *LJM* INSTRUCTION
02115  M01S02112.coding  +++|      SHNI     EQU    1000B       *SHN* INSTRUCTION
02116  M01S02113.coding  +++|
02117  M01S02114.coding  +++| PP instructions are defined as constants in common deck COMSPIM.
02118  M01S02115.coding  +++|
02119  M01S02116.coding  +++|
02120  M01S02117.coding  +++| 3.5.5 IF/ELSE/ENDIF SYMBOLS
02121  M01S02118.coding  +++|
02122  M01S02119.coding  +++| Symbols used on IF, ELSE, ENDIF and SKIP psuedo instructions may be
02123  M01S02120.coding  +++| system symbols or local symbols of the form:
02124  M01S02121.coding  +++|
02125  M01S02122.coding  +++|               .a
02126  M01S02123.coding  +++|
02127  M01S02124.coding  +++| where:
02128  M01S02125.coding  +++|          a = letter from A to Z
02129  M01S02126.coding  +++|
02130  M01S02127.coding  +++| Unlabeled, unnumbered IF/ELSE/SKIP/ENDIF sequences should not be
02131  M01S02128.coding  +++| used as they may unexpectedly affect other sequences.  For very
02132  M01S02129.coding  +++| short sequences a line count may be used, for longer sequences
02133  M01S02130.coding  +++| labels are preferred.
02134  M01S02131.coding  +++|
02135  M01S02132.coding  +++| 3.5.6 NON-LOCAL MACRO SYMBOLS
02136  M01S02133.coding  +++|
02137  M01S02134.coding  +++| To avoid conflicts with user code, non-local symbols defined within
02138  M01S02135.coding  +++| macros are of the form:
02139  M01S02136.coding  +++|
02140  M01S02137.coding  +++|               .n
02141  M01S02138.coding  +++|
02142  M01S02139.coding  +++| where:
02143  M01S02140.coding  +++|          n = number from 1 to 99
02144  M01S02141.coding  +++|
02145  M01S02142.coding  +++|
02146  M01S02143.coding  +++|1                                                           PAGE    43
02147  M01S02144.coding  +++|
02148  M01S02145.coding  +++|
02149  M01S02146.coding  +++| 3.5.7 LOW CORE LOCATION SYMBOLS
02150  M01S02147.coding  +++|
02151  M01S02148.coding  +++| Symbols that are used to define locations in low core (CMR) are of
02152  M01S02149.coding  +++| the form:
02153  M01S02150.coding  +++|
02154  M01S02151.coding  +++|               xxxL
02155  M01S02152.coding  +++|
02156  M01S02153.coding  +++|
02157  M01S02154.coding  +++| 3.5.8 CONTROL POINT AREA LOCATION SYMBOLS
02158  M01S02155.coding  +++|
02159  M01S02156.coding  +++| Symbols that are used for defining locations in the control point
02160  M01S02157.coding  +++| area are of the form:
02161  M01S02158.coding  +++|
02162  M01S02159.coding  +++|               xxxW
02163  M01S02160.coding  +++|
02164  M01S02161.coding  +++|
02165  M01S02162.coding  +++| 3.5.9 MONITOR FUNCTION SYMBOLS
02166  M01S02163.coding  +++|
02167  M01S02164.coding  +++| Symbols used for monitor function requests are of the form:
02168  M01S02165.coding  +++|
02169  M01S02166.coding  +++|               xxxM
02170  M01S02167.coding  +++|
02171  M01S02168.coding  +++|
02172  M01S02169.coding  +++| 3.5.10 NEGATIVE FIELD LENGTH SYMBOLS
02173  M01S02170.coding  +++|
02174  M01S02171.coding  +++| Symbols used to reference data in negative field length are of the
02175  M01S02172.coding  +++| form:
02176  M01S02173.coding  +++|
02177  M01S02174.coding  +++|               xxxN
02178  M01S02175.coding  +++|
02179  M01S02176.coding  +++|
02180  M01S02177.coding  +++| 3.6 PSEUDO INSTRUCTION USE, FORMAT, AND PARAMETERS
02181  M01S02178.coding  +++|
02182  M01S02179.coding  +++|
02183  M01S02180.coding  +++| 3.6.1 BASE AND POST RADIX USE
02184  M01S02181.coding  +++|
02185  M01S02182.coding  +++| The BASE DECIMAL pseudo-op is used in all CPU code.  The BASE MIXED
02186  M01S02183.coding  +++| pseudo-op is used in all PP code.  Post Radix is allowed for data
02187  M01S02184.coding  +++| formats other than octal and decimal; in specifying timing loops
02188  M01S02185.coding  +++| where decimal values are more meaningful to humans; and where
02189  M01S02186.coding  +++| external specifications such as ANSI or corporate standards dictate
02190  M01S02187.coding  +++| the use of a particular format.
02191  M01S02188.coding  +++|
02192  M01S02189.coding  +++|
02193  M01S02190.coding  +++| 3.6.2 EXTERNAL REFERENCES
02194  M01S02191.coding  +++|
02195  M01S02192.coding  +++| The EXT pseudo-op is not used.  All references to external names use
02196  M01S02193.coding  +++| the form =Xname.  In an absolute assembly, references to locations
02197  M01S02194.coding  +++| in other overlays use the form =Xname.
02198  M01S02195.coding  +++|
02199  M01S02196.coding  +++|
02200  M01S02197.coding  +++|1                                                           PAGE    44
02201  M01S02198.coding  +++|
02202  M01S02199.coding  +++|
02203  M01S02200.coding  +++| 3.6.3 SPACE CARD FORMAT
02204  M01S02201.coding  +++|
02205  M01S02202.coding  +++| The format of the SPACE pseudo instruction is:
02206  M01S02203.coding  +++|
02207  M01S02204.coding  +++|      tag      SPACE  4,n
02208  M01S02205.coding  +++|
02209  M01S02206.coding  +++| where:
02210  M01S02207.coding  +++|
02211  M01S02208.coding  +++|        tag     =table, macro or subroutine name
02212  M01S02209.coding  +++|        n       =statement count
02213  M01S02210.coding  +++|
02214  M01S02211.coding  +++| The statement count is a multiple of 5 that is greater or equal to
02215  M01S02212.coding  +++| 10.  It should be large enough to avoid breaking documentation
02216  M01S02213.coding  +++| across page boundaries.
02217  M01S02214.coding  +++|
02218  M01S02215.coding  +++|
02219  M01S02216.coding  +++| 3.6.4 CONDITIONAL CODE
02220  M01S02217.coding  +++|
02221  M01S02218.coding  +++| Numeric skip counts are discouraged with IF, IFC, ELSE, etc.,
02222  M01S02219.coding  +++| because this makes code difficult to read (especially when the
02223  M01S02220.coding  +++| skipped lines are not listed).  ENDIF should be used instead.  An
02224  M01S02221.coding  +++| exception is allowed for very short sequences and for systems texts
02225  M01S02222.coding  +++| where space is critical.
02226  M01S02223.coding  +++|
02227  M01S02224.coding  +++| Conditional sequences should be bracketed with labels (refer to
02228  M01S02225.coding  +++| section 3.5.5) which allows them to be easily spotted and matched in
02229  M01S02226.coding  +++| listings.
02230  M01S02227.coding  +++|
02231  M01S02228.coding  +++| When either end of a sequence of conditional code occurs at a break
02232  M01S02229.coding  +++| in the listing (SPACE, TITLE, or blank lines), the spacing lines
02233  M01S02230.coding  +++| should be placed so that spacing will be correct whether the test is
02234  M01S02231.coding  +++| true or false.  Usually this means moving the spacing outside the
02235  M01S02232.coding  +++| conditional code.
02236  M01S02233.coding  +++|
02237  M01S02234.coding  +++| Example:
02238  M01S02235.coding  +++|              .
02239  M01S02236.coding  +++|              .
02240  M01S02237.coding  +++|              .
02241  M01S02238.coding  +++|              EQ     TAG1        CONTINUE
02242  M01S02239.coding  +++|              (blank line)       (outside conditional code)
02243  M01S02240.coding  +++|     .A       IFC    EQ,*"SYSTEM"*SCOPE*
02244  M01S02241.coding  +++|     TAG3     CONTROL  TAGA,R    READ COMMAND
02245  M01S02242.coding  +++|              EQ     TAGX        RETURN
02246  M01S02243.coding  +++|              (blank line)
02247  M01S02244.coding  +++|     TAGA     BSS    8           COMMAND BUFFER
02248  M01S02245.coding  +++|     .A       ELSE
02249  M01S02246.coding  +++|     TAG3     CONTROL  CCDR      READ COMMAND
02250  M01S02247.coding  +++|              EQ     TAGX        RETURN
02251  M01S02248.coding  +++|     .A       ENDIF
02252  M01S02249.coding  +++|     ABC      SPACE  4,10        (outside conditional code)
02253  M01S02250.coding  +++|
02254  M01S02251.coding  +++|1                                                           PAGE    45
02255  M01S02252.coding  +++|
02256  M01S02253.coding  +++|
02257  M01S02254.coding  +++| 3.6.5 MACROS
02258  M01S02255.coding  +++|
02259  M01S02256.coding  +++| Macro definitions should include a description of how the macro is
02260  M01S02257.coding  +++| called and a description of all formal parameters.  (Refer to
02261  M01S02258.coding  +++| section 2.5.)
02262  M01S02259.coding  +++|
02263  M01S02260.coding  +++| The PURGMAC psuedo instruction should be used to disable any
02264  M01S02261.coding  +++| previous macro definitions of the same name.
02265  M01S02262.coding  +++|
02266  M01S02263.coding  +++| Non-local symbol definitions should be of the form .n (see section
02267  M01S02264.coding  +++| 3.5.6).
02268  M01S02265.coding  +++|
02269  M01S02266.coding  +++| To avoid terminating multiple macro definitions, the ENDM
02270  M01S02267.coding  +++| instruction should be labeled with the macro name.
02271  M01S02268.coding  +++|
02272  M01S02269.coding  +++| The MACREF macro (defined in SYSTEXT) may be included within the
02273  M01S02270.coding  +++| macro definition body to provide symbolic reference table listing of
02274  M01S02271.coding  +++| the calls of the macro.
02275  M01S02272.coding  +++|
02276  M01S02273.coding  +++| The SYSTEM XXX,= macro (defined in CPCOM) should be used for cross
02277  M01S02274.coding  +++| referencing of CP programs calling PP programs without a standard
02278  M01S02275.coding  +++| interface (Examples:  CPUMTR calling 1MA, MAGNET calling 1MT via SPC
02279  M01S02276.coding  +++| call).
02280  M01S02277.coding  +++|
02281  M01S02278.coding  +++| The EXECUTE XXX,= macro (defined in COMPMAC) should be used for
02282  M01S02279.coding  +++| cross referencing of PP programs calling PP programs or overlays
02283  M01S02280.coding  +++| without a standard interface.
02284  M01S02281.coding  +++|
02285  M01S02282.coding  +++| When space is critical, as in systems texts, the following list of
02286  M01S02283.coding  +++| column numbers represent the beginning of each field in a COMPASS
02287  M01S02284.coding  +++| coding line to be used in a macro definition.
02288  M01S02285.coding  +++|
02289  M01S02286.coding  +++|     Column 2  = location field
02290  M01S02287.coding  +++|     column 3  = operation field
02291  M01S02288.coding  +++|     column 6  = address field
02292  M01S02289.coding  +++|     column 73 = reserved
02293  M01S02290.coding  +++|
02294  M01S02291.coding  +++| If a field is full or overflows into an adjacent field, then one
02295  M01S02292.coding  +++| space should separate the fields.  If comments are required, they
02296  M01S02293.coding  +++| should appear as stand-alone comments rather than embedded comments.
02297  M01S02294.coding  +++|
02298  M01S02295.coding  +++|
02299  M01S02296.coding  +++| 3.6.6 DIS PSEUDO INSTRUCTION
02300  M01S02297.coding  +++|
02301  M01S02298.coding  +++| The DIS pseudo instruction should not be used to generate data since
02302  M01S02299.coding  +++| the syntax of the instruction determines the format of the data.
02303  M01S02300.coding  +++| The DATA psuedo instruction should be used instead.
02304  M01S02301.coding  +++|
02305  M01S02302.coding  +++|
02306  M01S02303.coding  +++|1                                                           PAGE    46
02307  M01S02304.coding  +++|
02308  M01S02305.coding  +++|
02309  M01S02306.coding  +++| 3.7 TESTS FOR OVERFLOW
02310  M01S02307.coding  +++|
02311  M01S02308.coding  +++| CPU and PP programs should contain assembly checks for certain types
02312  M01S02309.coding  +++| of overflow conditions.  The following points should be considered
02313  M01S02310.coding  +++| when making the checks.
02314  M01S02311.coding  +++|
02315  M01S02312.coding  +++|     PP programs and overlays are generated by COMPASS in multiples
02316  M01S02313.coding  +++|     of 5 PP bytes (1 CM word).  Therefore, when reading an overlay
02317  M01S02314.coding  +++|     from central memory to PP memory, more PP bytes may be
02318  M01S02315.coding  +++|     destroyed than the actual number of bytes of PP code.
02319  M01S02316.coding  +++|
02320  M01S02317.coding  +++|     Overlays loaded from mass storage to PP memory come in
02321  M01S02318.coding  +++|     multiplies of 500 PP bytes.  At least 5 bytes of the last PRU
02322  M01S02319.coding  +++|     are required to represent end of record which can increase the
02323  M01S02320.coding  +++|     size of the overlay by one PRU (500 bytes).
02324  M01S02321.coding  +++|
02325  M01S02322.coding  +++|     Care should be taken to insure that the literals block has been
02326  M01S02323.coding  +++|     defined before checking for the overflow conditions.  Literals
02327  M01S02324.coding  +++|     can be flushed by specifying:
02328  M01S02325.coding  +++|
02329  M01S02326.coding  +++|               USE    (name)
02330  M01S02327.coding  +++|               USE    *
02331  M01S02328.coding  +++|
02332  M01S02329.coding  +++|
02333  M01S02330.coding  +++| The OVERFLOW macro (defined in COMPMAC) may be used to perform these
02334  M01S02331.coding  +++| checks.
02335  M01S02332.coding  +++|
02336  M01S02333.coding  +++|
02337  M01S02334.coding  +++| 3.7.1 CM LOADS
02338  M01S02335.coding  +++|
02339  M01S02336.coding  +++| All PP programs include a test for the amount of core remaining
02340  M01S02337.coding  +++| after a CM load as shown in the following example:
02341  M01S02338.coding  +++|
02342  M01S02339.coding  +++|               USE    OVERFLOW
02343  M01S02340.coding  +++|      xxx      BSS    0
02344  M01S02341.coding  +++|               ERRNG  7772-xxx    PP MEMORY OVERFLOW
02345  M01S02342.coding  +++|
02346  M01S02343.coding  +++| Where:
02347  M01S02344.coding  +++|
02348  M01S02345.coding  +++|      xxx =tag for the last location defined
02349  M01S02346.coding  +++|
02350  M01S02347.coding  +++|
02351  M01S02348.coding  +++| 3.7.2 TABLE OVERFLOW
02352  M01S02349.coding  +++|
02353  M01S02350.coding  +++| If a PP program uses more storage than it declares, its length is
02354  M01S02351.coding  +++| checked as shown in the following example:
02355  M01S02352.coding  +++|
02356  M01S02353.coding  +++|               USE    OVERFLOW
02357  M01S02354.coding  +++|      xxx      BSS    0
02358  M01S02355.coding  +++|      xxxE     EQU    xxx+xxxL
02359  M01S02356.coding  +++|               ERRNG  7777-xxxE   PROGRAM OVERFLOW
02360  M01S02357.coding  +++|
02361  M01S02358.coding  +++|1                                                           PAGE    47
02362  M01S02359.coding  +++|
02363  M01S02360.coding  +++|
02364  M01S02361.coding  +++| Where:
02365  M01S02362.coding  +++|
02366  M01S02363.coding  +++|     xxx  = tag for the last location defined
02367  M01S02364.coding  +++|     xxxL = length of undeclared space
02368  M01S02365.coding  +++|     xxxE = end of space used
02369  M01S02366.coding  +++|
02370  M01S02367.coding  +++|
02371  M01S02368.coding  +++| 3.7.3 MASS STORAGE LOADS
02372  M01S02369.coding  +++|
02373  M01S02370.coding  +++| A test will be included in each PP program which may reside on mass
02374  M01S02371.coding  +++| storage.  This test will protect against a load which exceeds the
02375  M01S02372.coding  +++| end of memory in the PP causing wrap around.  The "OVERFLOW" macro
02376  M01S02373.coding  +++| is available in COMPMAC for this operation.
02377  M01S02374.coding  +++|
02378  M01S02375.coding  +++|
02379  M01S02376.coding  +++| 3.7.4 OVERLAY LOADS
02380  M01S02377.coding  +++|
02381  M01S02378.coding  +++| Programs calling overlays should test for memory overflow with the
02382  M01S02379.coding  +++| following test:
02383  M01S02380.coding  +++|               ERRNG  (lwa+1)-(load addr)-len   comment
02384  M01S02381.coding  +++| where:
02385  M01S02382.coding  +++|
02386  M01S02383.coding  +++|     1wa+1     =    first byte not to be destroyed by the zero level
02387  M01S02384.coding  +++|                    overlay
02388  M01S02385.coding  +++|     load addr =    address where the overlay is loaded
02389  M01S02386.coding  +++|     len       =    length of overlay
02390  M01S02387.coding  +++|
02391  M01S02388.coding  +++| The length of an overlay is defined to be the number of bytes
02392  M01S02389.coding  +++| destroyed by the overlay during loading and execution.  The overlay
02393  M01S02390.coding  +++| should also contain a test to insure that it does not exceed its
02394  M01S02391.coding  +++| defined length.  The overlay length can be adjusted to a higher or
02395  M01S02392.coding  +++| smaller value as long as none of the tests fail.  The "OVERFLOW"
02396  M01S02393.coding  +++| macro is available in COMPMAC for this operation.
02397  M01S02394.coding  +++|
02398  M01S02395.coding  +++|
02399  M01S02396.coding  +++| 3.8 RELOCATABLE CPU CODE
02400  M01S02397.coding  +++|
02401  M01S02398.coding  +++| The first word of a relocatable CPU program should be of the format:
02402  M01S02399.coding  +++|
02403  M01S02400.coding  +++|          42/0LDECK, 18/ADDR
02404  M01S02401.coding  +++|
02405  M01S02402.coding  +++| where:
02406  M01S02403.coding  +++|
02407  M01S02404.coding  +++|          DECK = deck name
02408  M01S02405.coding  +++|          ADDR = entry address of program
02409  M01S02406.coding  +++|
02410  M01S02407.coding  +++| This word is used to locate the first word address and entry point
02411  M01S02408.coding  +++| of a routine in a CM dump.
02412  M01S02409.coding  +++|
02413  M01S02410.coding  +++| The contents of A0 must never be used in a library level routine
02414  M01S02411.coding  +++| unless it is saved and restored.  A0 is used by FTN as a base
02415  M01S02412.coding  +++| register for formal parameters in subroutine linkages.
02416  M01S02413.coding  +++|
02417  M01S02414.coding  +++|1                                                           PAGE    48
02418  M01S02415.coding  +++|
02419  M01S02416.coding  +++|
02420  M01S02417.coding  +++| 3.9 ROUTINE/SUBROUTINE COMPLEXITY
02421  M01S02418.coding  +++|
02422  M01S02419.coding  +++| In this context, the term "complexity" is used in its formal sense;
02423  M01S02420.coding  +++| that is, a sense of the structural incoherence (entropy) of a
02424  M01S02421.coding  +++| routine.  The more complex a routine is, the more liable it is to be
02425  M01S02422.coding  +++| a source of errors, difficult to implement, and worse to modify or
02426  M01S02423.coding  +++| correct.  There are no hard and fast rules for gauging the
02427  M01S02424.coding  +++| complexity of a routine, but it can be said in general that the
02428  M01S02425.coding  +++| longer it is, the more decisions it makes (branches), and the more
02429  M01S02426.coding  +++| functions it performs, the more complex and unreliable it tends to
02430  M01S02427.coding  +++| be.
02431  M01S02428.coding  +++|
02432  M01S02429.coding  +++| In order to reduce complexity, the following guidelines are to be
02433  M01S02430.coding  +++| followed whenever possible (i.e., not impossible).
02434  M01S02431.coding  +++|
02435  M01S02432.coding  +++|     1.  One routine - one function.  Each routine should have one
02436  M01S02433.coding  +++|         clearly defined function.
02437  M01S02434.coding  +++|
02438  M01S02435.coding  +++|     2.  10-Tag rule.  If there are more than 10 branching locations
02439  M01S02436.coding  +++|         within a routine, it is most likely attempting to perform
02440  M01S02437.coding  +++|         too many functions (see 1 above).  It should be considered a
02441  M01S02438.coding  +++|         candidate to be broken up into functional units.
02442  M01S02439.coding  +++|
02443  M01S02440.coding  +++|     3.  Code Modification.  Minimize within routines, avoid between
02444  M01S02441.coding  +++|         routines.  If used between routines, document thoroughly.
02445  M01S02442.coding  +++|
02446  M01S02443.coding  +++|     4.  Hidden Variables.  Data placed in a register with the hope
02447  M01S02444.coding  +++|         of being used at some later time often may not survive to
02448  M01S02445.coding  +++|         its destination.  Consider global variables for
02449  M01S02446.coding  +++|         inter-routine communication, especially when there are one
02450  M01S02447.coding  +++|         or more routines intervening.  In any case, all exit
02451  M01S02448.coding  +++|         conditions from a routine must be documented.
02452  M01S02449.coding  +++|
02453  M01S02450.coding  +++|     5.  Code for the Future.  Always consider the implications of
02454  M01S02451.coding  +++|         debugging, modification, and maintenance; structure code to
02455  M01S02452.coding  +++|         make these tasks easier.
02456  M01S02453.coding  +++|
02457  M01S02454.coding  +++|
02458  M01S02455.coding  +++| 4.0 MISCELLANEOUS
02459  M01S02456.coding  +++|
02460  M01S02457.coding  +++|
02461  M01S02458.coding  +++| 4.1 PROGRAM NAMING
02462  M01S02459.coding  +++|
02463  M01S02460.coding  +++|
02464  M01S02461.coding  +++| 4.1.1 LENGTH OF PROGRAM NAME
02465  M01S02462.coding  +++|
02466  M01S02463.coding  +++| Peripheral processor program names are 3 characters long.
02467  M01S02464.coding  +++|
02468  M01S02465.coding  +++| Central Processor program names are 4 to 7 characters long.
02469  M01S02466.coding  +++|
02470  M01S02467.coding  +++|
02471  M01S02468.coding  +++|1                                                           PAGE    49
02472  M01S02469.coding  +++|
02473  M01S02470.coding  +++|
02474  M01S02471.coding  +++| 4.1.2 RESERVED NAMES
02475  M01S02472.coding  +++|
02476  M01S02473.coding  +++| The following PP program names are reserved or presently defined for
02477  M01S02474.coding  +++| use (x means any character legal in a PP program name and n means
02478  M01S02475.coding  +++| any number between 0 - 9):
02479  M01S02476.coding  +++|
02480  M01S02477.coding  +++|         Uxx       Reserved for installations
02481  M01S02478.coding  +++|         nUx       Reserved for installations
02482  M01S02479.coding  +++|         9AA-9T9   Reserved for system use
02483  M01S02480.coding  +++|         9VA-9Z9   Reserved for system use
02484  M01S02481.coding  +++|         90A-929   Reserved for diagnostics
02485  M01S02482.coding  +++|         93A-939   Reserved for system use
02486  M01S02483.coding  +++|
02487  M01S02484.coding  +++| The following names are currently used by NOS:
02488  M01S02485.coding  +++|
02489  M01S02486.coding  +++|         6xx       Callable mass storage drivers
02490  M01S02487.coding  +++|         7xx       Mass storage error processing overlays
02491  M01S02488.coding  +++|         9AA-9D9   DSD overlays
02492  M01S02489.coding  +++|         9EA-9F9   DIS overlays
02493  M01S02490.coding  +++|         9GA-9G9   O26 overlays
02494  M01S02491.coding  +++|         0xx       Location free overlays
02495  M01S02492.coding  +++|         0Cx       Controlware identification processors
02496  M01S02493.coding  +++|         0Px       Pack number identification processors
02497  M01S02494.coding  +++|         0Tx       Automatic track flaw processors
02498  M01S02495.coding  +++|         UxxL      PPCOM symbol - reserved for installations
02499  M01S02496.coding  +++|         UxxM      PPCOM symbol - reserved for installations
02500  M01S02497.coding  +++|         UxxN      PPCOM symbol - reserved for installations
02501  M01S02498.coding  +++|         UxxP      PPCOM symbol - reserved for installations
02502  M01S02499.coding  +++|         UxxW      PPCOM symbol - reserved for installations
02503  M01S02500.coding  +++|
02504  M01S02501.coding  +++| In general, tags beginning with U should not be used as tags in
02505  M01S02502.coding  +++| NOSTEXT, COMSXXX decks, etc. or as macro names in COMCMAC, COMPMAC,
02506  M01S02503.coding  +++| etc.  These tags should be reserved for installation use.
02507  M01S02504.coding  +++|
02508  M01S02505.coding  +++|
02509  M01S02506.coding  +++| 4.1.3 COMMON DECK NAMES
02510  M01S02507.coding  +++|
02511  M01S02508.coding  +++| Common deck names are seven characters in length and in the
02512  M01S02509.coding  +++| following form:
02513  M01S02510.coding  +++|
02514  M01S02511.coding  +++|         COMxaaa
02515  M01S02512.coding  +++|
02516  M01S02513.coding  +++|1                                                           PAGE    50
02517  M01S02514.coding  +++|
02518  M01S02515.coding  +++|
02519  M01S02516.coding  +++| where:
02520  M01S02517.coding  +++|
02521  M01S02518.coding  +++|     aaa =     The name of the routine or a symbolic name if no
02522  M01S02519.coding  +++|               routine name.
02523  M01S02520.coding  +++|     X   =     One of the following common deck indicators:
02524  M01S02521.coding  +++|                    C = CPU code
02525  M01S02522.coding  +++|                    P = PP code
02526  M01S02523.coding  +++|                    S = Subsystem text symbols, constants etc.
02527  M01S02524.coding  +++|                    D = Display driver code
02528  M01S02525.coding  +++|                    T = Tables
02529  M01S02526.coding  +++|                    M = Mass storage error equivalents
02530  M01S02527.coding  +++|                    B = Data manager
02531  M01S02528.coding  +++|                    K = Transaction subsystem
02532  M01S02529.coding  +++|                    I = Initialization
02533  M01S02530.coding  +++|
02534  M01S02531.coding  +++| The following indicators are reserved for SYMPL common decks: A, E,
02535  M01S02532.coding  +++| U, Z.
02536  M01S02533.coding  +++|
02537  M01S02534.coding  +++|
02538  M01S02535.coding  +++| 4.2 CODE TRANSMITTAL RULES
02539  M01S02536.coding  +++|
02540  M01S02537.coding  +++| Code which is to be integrated into a system build for eventual
02541  M01S02538.coding  +++| release to the field is identified and formatted as described in
02542  M01S02539.coding  +++| this section.
02543  M01S02540.coding  +++|
02544  M01S02541.coding  +++|
02545  M01S02542.coding  +++| 4.2.1 GENERAL RULES
02546  M01S02543.coding  +++|
02547  M01S02544.coding  +++| Each external PSR being answered has a corresponding corrective code
02548  M01S02545.coding  +++| identifier (to be described later).  Corrective code answering other
02549  M01S02546.coding  +++| PSRs is not included in the modification under this identifier.
02550  M01S02547.coding  +++| Exceptions are allowed where required by interrelated modifications
02551  M01S02548.coding  +++| for several PSRs.
02552  M01S02549.coding  +++|
02553  M01S02550.coding  +++| Corrections are placed in ascending numerical order; i. e., the
02554  M01S02551.coding  +++| corrections are sorted in the same order that the lines being
02555  M01S02552.coding  +++| corrected appear on the program library.  If a single modification
02556  M01S02553.coding  +++| changes several decks, then the corrections are also sorted in the
02557  M01S02554.coding  +++| order that the decks appear on the program library.
02558  M01S02555.coding  +++|
02559  M01S02556.coding  +++| Corrections modifying lines with previously modified sequence
02560  M01S02557.coding  +++| numbers include the line number of the nearest preceding original
02561  M01S02558.coding  +++| line in parenthesis in the comments field of the modify directive.
02562  M01S02559.coding  +++|
02563  M01S02560.coding  +++|
02564  M01S02561.coding  +++| 4.2.2 MODSET FORMAT
02565  M01S02562.coding  +++|
02566  M01S02563.coding  +++|1                                                           PAGE    51
02567  M01S02564.coding  +++|
02568  M01S02565.coding  +++|
02569  M01S02566.coding  +++| 4.2.2.1 MODSET IDENTIFIER
02570  M01S02567.coding  +++|
02571  M01S02568.coding  +++| Separate modset name lists are maintained for NOS 1 (R5.5) and NOS 2
02572  M01S02569.coding  +++| (R6.0).  Processes for naming modsets are identical, except for
02573  M01S02570.coding  +++| multiple deck modsets (NS1xxx and NS2xxx), documentation modsets
02574  M01S02571.coding  +++| (DOK1xxx and DOK2xxx), and release feature modsets (FN1xxx and
02575  M01S02572.coding  +++| FN2xxx).  A modset named 1CD4 in NOS 1, for example, has no
02576  M01S02573.coding  +++| relationship to modset 1CD4 in NOS2.
02577  M01S02574.coding  +++|
02578  M01S02575.coding  +++| You should not sign up for a modset name until after code has been
02579  M01S02576.coding  +++| generated and tested, and depending on the size of the modset, even
02580  M01S02577.coding  +++| after code review has taken place.  This allows other analysts
02581  M01S02578.coding  +++| submitting code to get the next available modset name.  You should
02582  M01S02579.coding  +++| not request modset names for modsets not to be included in the
02583  M01S02580.coding  +++| current series of builds; you should not request feature modset
02584  M01S02581.coding  +++| names for a future release until feature code for the current
02585  M01S02582.coding  +++| release is complete.  If you sign up for a modset name and don't use
02586  M01S02583.coding  +++| it, notify Code Control so that the modset name can be used by
02587  M01S02584.coding  +++| someone else.
02588  M01S02585.coding  +++|
02589  M01S02586.coding  +++| The modset name consists of three to five alphanumeric characters
02590  M01S02587.coding  +++| which are extracted from the deck name followed by a 1 to 3 digit
02591  M01S02588.coding  +++| sequence number.  The modset name cannot exceed 7 characters.
02592  M01S02589.coding  +++|
02593  M01S02590.coding  +++| 1.  For common decks that begin with "COM" use the last four
02594  M01S02591.coding  +++|     characters of the name (example - CMAC4 is a modset in deck
02595  M01S02592.coding  +++|     COMCMAC).
02596  M01S02593.coding  +++|
02597  M01S02594.coding  +++| 2.  For PP programs use the three character program name (example -
02598  M01S02595.coding  +++|     CPM2 is a modset in deck CPM).
02599  M01S02596.coding  +++|
02600  M01S02597.coding  +++| 3.  All other decks use the first five characters of the deck name;
02601  M01S02598.coding  +++|     if the deck name is less than six characters use the entire deck
02602  M01S02599.coding  +++|     name (example - LIBED2 is a modset in deck LIBEDIT).
02603  M01S02600.coding  +++|
02604  M01S02601.coding  +++| 4.  Modifications which involve multiple decks are given the modset
02605  M01S02602.coding  +++|     name:
02606  M01S02603.coding  +++|               NS1xxx    if NOS 1,
02607  M01S02604.coding  +++|               NS2xxx    if NOS 2.
02608  M01S02605.coding  +++|
02609  M01S02606.coding  +++|     Example - NS1001 is a multiple deck modset in NOS 1.
02610  M01S02607.coding  +++|              NS2001 is a multiple deck modset in NOS 2.
02611  M01S02608.coding  +++|
02612  M01S02609.coding  +++| 5.  Modifications which only correct documentation within a deck are
02613  M01S02610.coding  +++|     gathered together for each corrective code release and given the
02614  M01S02611.coding  +++|     modset name:
02615  M01S02612.coding  +++|               DOK1xxx   if NOS 1,
02616  M01S02613.coding  +++|               DOK2xxx   if NOS 2.
02617  M01S02614.coding  +++|
02618  M01S02615.coding  +++|     Example - DOK1006 is a NOS 1 modset.
02619  M01S02616.coding  +++|               DOK2006 is a NOS 2 modset.
02620  M01S02617.coding  +++|
02621  M01S02618.coding  +++|1                                                           PAGE    52
02622  M01S02619.coding  +++|
02623  M01S02620.coding  +++|
02624  M01S02621.coding  +++|     This does not include lines of code which have documentation
02625  M01S02622.coding  +++|     changes in them.
02626  M01S02623.coding  +++|
02627  M01S02624.coding  +++| 6.  If a modset is adding a new feature, the feature modset name for
02628  M01S02625.coding  +++|     each deck modified is obtained from NOS Code Control.
02629  M01S02626.coding  +++|
02630  M01S02627.coding  +++| 7.  Upon release of the system, a "composite" modset is generated
02631  M01S02628.coding  +++|     from all feature code which is to be released.
02632  M01S02629.coding  +++|
02633  M01S02630.coding  +++|
02634  M01S02631.coding  +++| 4.2.2.2 MODSET CORRECTION LETTER
02635  M01S02632.coding  +++|
02636  M01S02633.coding  +++| When a modset is correcting a previous modset, one alphabetic
02637  M01S02634.coding  +++| character (starting with A) will be appended to the sequence
02638  M01S02635.coding  +++| number.  Whenever a modset correction letter of "B" or above is
02639  M01S02636.coding  +++| required, the comments header of the modset must indicate which
02640  M01S02637.coding  +++| previous modset is being corrected.
02641  M01S02638.coding  +++|
02642  M01S02639.coding  +++|
02643  M01S02640.coding  +++| 4.2.2.3 OVERFLOW
02644  M01S02641.coding  +++|
02645  M01S02642.coding  +++| Whenever a modset identifier using the above conventions exceeds
02646  M01S02643.coding  +++| seven characters, truncate the last character(s) of the deck name to
02647  M01S02644.coding  +++| reduce the identifier to seven characters.
02648  M01S02645.coding  +++|
02649  M01S02646.coding  +++|
02650  M01S02647.coding  +++| 4.2.2.4 MODSET EXAMPLE
02651  M01S02648.coding  +++|
02652  M01S02649.coding  +++| The following format is used for corrective code modsets:
02653  M01S02650.coding  +++|
02654  M01S02651.coding  +++|     1       11        18             30         (column numbers)
02655  M01S02652.coding  +++|     +-------+---------+--------------+
02656  M01S02653.coding  +++|
02657  M01S02654.coding  +++|     ident
02658  M01S02655.coding  +++|     *IDENT  ident     initials.      yy/mm/dd.
02659  M01S02656.coding  +++|     */      ****      system.
02660  M01S02657.coding  +++|     */      ****      PSR number.
02661  M01S02658.coding  +++|     */      ****      REQUIRES - modset.
02662  M01S02659.coding  +++|     */      *****     PROBLEM - problem description.
02663  M01S02660.coding  +++|     */      (continuation of problem description).
02664  M01S02661.coding  +++|     */
02665  M01S02662.coding  +++|     */      SOLUTION - solution description.
02666  M01S02663.coding  +++|     */      (continuation of solution description).
02667  M01S02664.coding  +++|     */
02668  M01S02665.coding  +++|     */      *****     RESUBMITTAL - yy/mm/dd.
02669  M01S02666.coding  +++|     */      Reason for resubmittal.
02670  M01S02667.coding  +++|     *DECK   deckname
02671  M01S02668.coding  +++|     *I,sequence number
02672  M01S02669.coding  +++|     *D,sequence number
02673  M01S02670.coding  +++|     *D,modname.sequence number       (nearest original seq. no.)
02674  M01S02671.coding  +++|     *EDIT   deckname                 (if common deck)
02675  M01S02672.coding  +++|     */      END OF MODSET.
02676  M01S02673.coding  +++|
02677  M01S02674.coding  +++|1                                                           PAGE    53
02678  M01S02675.coding  +++|
02679  M01S02676.coding  +++|
02680  M01S02677.coding  +++| Where:
02681  M01S02678.coding  +++|
02682  M01S02679.coding  +++|     ident             = Modset name.
02683  M01S02680.coding  +++|
02684  M01S02681.coding  +++|     initials          = Initials of the analyst(s) who wrote and/or
02685  M01S02682.coding  +++|                         tested the code.  Example - ABC. (one
02686  M01S02683.coding  +++|                         analyst) ABC/ADD. (two analysts)
02687  M01S02684.coding  +++|
02688  M01S02685.coding  +++|     yy/mm/dd          = Date of last modset change.
02689  M01S02686.coding  +++|
02690  M01S02687.coding  +++|     system            = Name of system in which the modset will be
02691  M01S02688.coding  +++|                         released.  (ie - NOS 1 OS.  Or NOS 2 OS.)
02692  M01S02689.coding  +++|
02693  M01S02690.coding  +++|     PSR number        = This line must always be present.  If more
02694  M01S02691.coding  +++|                         than one PSR is answered, list the PSR
02695  M01S02692.coding  +++|                         numbers on separate lines.  If no PSR is
02696  M01S02693.coding  +++|                         involved, use the phrase:  NO PSR.
02697  M01S02694.coding  +++|
02698  M01S02695.coding  +++|     modset            = The REQUIRES lines must always be present.
02699  M01S02696.coding  +++|                         If more than one modset is required (direct
02700  M01S02697.coding  +++|                         or indirect dependency), list the modsets on
02701  M01S02698.coding  +++|                         separate lines.  If no dependency is
02702  M01S02699.coding  +++|                         involved, use the phrase:  NONE.
02703  M01S02700.coding  +++|
02704  M01S02701.coding  +++| Since mods to mods in the same release are not allowed for PSR code
02705  M01S02702.coding  +++| (physically dependent code must be in the same modset), the REQUIRES
02706  M01S02703.coding  +++| should specify modsets with logical or space dependencies.  Modsets
02707  M01S02704.coding  +++| previously released in a standard system usually should not be
02708  M01S02705.coding  +++| included.  For initial transmittal of feature code, REQUIRES - NONE
02709  M01S02706.coding  +++| should be used.  For feature repair code, the REQUIRES should
02710  M01S02707.coding  +++| specify those modsets going into the same build that are dependent
02711  M01S02708.coding  +++| on each other.
02712  M01S02709.coding  +++|
02713  M01S02710.coding  +++| The problem description should describe the problem being fixed by
02714  M01S02711.coding  +++| the modset and the impact the problem has on the user.  The solution
02715  M01S02712.coding  +++| description should describe how the problem was fixed.  External
02716  M01S02713.coding  +++| interface changes caused by the installation of the modset should
02717  M01S02714.coding  +++| also be documented.  The problem/solution description may be
02718  M01S02715.coding  +++| combined into one paragraph to avoid redundancy.
02719  M01S02716.coding  +++|
02720  M01S02717.coding  +++| The *READPL directive is not used.
02721  M01S02718.coding  +++|
02722  M01S02719.coding  +++|
02723  M01S02720.coding  +++| 4.3 INTERFACE CONSIDERATIONS
02724  M01S02721.coding  +++|
02725  M01S02722.coding  +++|
02726  M01S02723.coding  +++|1                                                           PAGE    54
02727  M01S02724.coding  +++|
02728  M01S02725.coding  +++|
02729  M01S02726.coding  +++| 4.3.1 SYSTEM SUPPLIED INTERFACES
02730  M01S02727.coding  +++|
02731  M01S02728.coding  +++| All interactions between programs (CPU and PP) and the system use
02732  M01S02729.coding  +++| system-supplied macros, linkage labels or common decks.  In PP
02733  M01S02730.coding  +++| programs the system defined direct cells are only used as defined by
02734  M01S02731.coding  +++| the system.  (see section 3.5.3.1)
02735  M01S02732.coding  +++|
02736  M01S02733.coding  +++|
02737  M01S02734.coding  +++| 4.3.2 PARAMETER VALIDATION
02738  M01S02735.coding  +++|
02739  M01S02736.coding  +++| Each parameter passed between programs will be validated or
02740  M01S02737.coding  +++| processed in a way that protects the program from uncontrolled
02741  M01S02738.coding  +++| actions caused by unexpected values.
02742  M01S02739.coding  +++|
02743  M01S02740.coding  +++|
02744  M01S02741.coding  +++| 4.3.3 MEMORY ACCESS
02745  M01S02742.coding  +++|
02746  M01S02743.coding  +++| PP programs which access the field length of a job will insure that
02747  M01S02744.coding  +++| no combination of parameters, errors, etc. will cause access to an
02748  M01S02745.coding  +++| address outside of that field length.  Addresses should be validated
02749  M01S02746.coding  +++| prior to using them for a CM read or write to avoid referencing
02750  M01S02747.coding  +++| areas of memory outside of the control points field length.
02751  M01S02748.coding  +++|
02752  M01S02749.coding  +++| A PP program accessing the field length of a control point should
02753  M01S02750.coding  +++| insure the relative address does not exceed 377777B.
02754  M01S02751.coding  +++|
02755  M01S02752.coding  +++|
02756  M01S02753.coding  +++| 4.3.4 SECURITY
02757  M01S02754.coding  +++|
02758  M01S02755.coding  +++| Programs that perform privileged functions must insure that the
02759  M01S02756.coding  +++| requester of the function has been given permission by the system to
02760  M01S02757.coding  +++| use the function.  This also applies to the use of special device
02761  M01S02758.coding  +++| drivers, which could be called accidentally or maliciously by
02762  M01S02759.coding  +++| unauthorized users.  Where common decks are available to check
02763  M01S02760.coding  +++| security or privileges, they should be used rather than locally
02764  M01S02761.coding  +++| written code.
02765  M01S02762.coding  +++|
02766  M01S02763.coding  +++|
02767  M01S02764.coding  +++| 4.3.5 RESERVATIONS AND INTERLOCKS
02768  M01S02765.coding  +++|
02769  M01S02766.coding  +++| Reservations and interlocks are only used as defined by the system
02770  M01S02767.coding  +++| and are released as soon as possible.  Non-essential code is not
02771  M01S02768.coding  +++| executed while a reservation or interlock is in effect.
02772  M01S02769.coding  +++|
02773  M01S02770.coding  +++| In cases where a reservation reject could occur, the program will:
02774  M01S02771.coding  +++|
02775  M01S02772.coding  +++|     1.  Control the rate of reservation re-issue.
02776  M01S02773.coding  +++|     2.  Detect and respond to error conditions.
02777  M01S02774.coding  +++|     3.  Protect against storage move lockup.
02778  M01S02775.coding  +++|
02779  M01S02776.coding  +++|1                                                           PAGE    55
02780  M01S02777.coding  +++|
02781  M01S02778.coding  +++|
02782  M01S02779.coding  +++| Programs which use reservations and interlocks will insure that the
02783  M01S02780.coding  +++| conditions are released no matter what program path is taken.
02784  M01S02781.coding  +++|
02785  M01S02782.coding  +++| When multiple interlocks are required, all programs in the operating
02786  M01S02783.coding  +++| system must request the interlocks in the same order.  When a reject
02787  M01S02784.coding  +++| occurs when attempting to obtain such interlocks, all reservations
02788  M01S02785.coding  +++| held must be released and the entire sequence of interlocking must
02789  M01S02786.coding  +++| begin again.
02790  M01S02787.coding  +++|
02791  M01S02788.coding  +++| Care must be taken to not issue dayfile messages, load overlays, or
02792  M01S02789.coding  +++| pause with non-dedicated channel(s) reserved.
02793  M01S02790.coding  +++|
02794  M01S02791.coding  +++| A PP program must not have a disk channel reserved when it attempts
02795  M01S02792.coding  +++| to do an STBM or AFAM monitor function.  If necessary, a ENDMS
02796  M01S02793.coding  +++| should be performed to ensure this.
02797  M01S02794.coding  +++|
02798  M01S02795.coding  +++|
02799  M01S02796.coding  +++| 4.3.6 DOCUMENTING HARDWARE DEFICIENCIES
02800  M01S02797.coding  +++|
02801  M01S02798.coding  +++| Instructions which are included to compensate for hardware
02802  M01S02799.coding  +++| deficiencies are documented with a brief description or
02803  M01S02800.coding  +++| identification of the deficiency.
02804  M01S02801.coding  +++|
02805  M01S02802.coding  +++|
02806  M01S02803.coding  +++| 4.3.7 NEW FUNCTION/LOW CORE IDENTIFIERS
02807  M01S02804.coding  +++|
02808  M01S02805.coding  +++| New tags in PPCOM, use of previously reserved fields in CMR and CPA,
02809  M01S02806.coding  +++| new PP function numbers, new monitor function numbers, etc. must be
02810  M01S02807.coding  +++| signed up for via the DSO (Design Support Office).
02811  M01S02808.coding  +++|
02812  M01S02809.coding  +++|
02813  M01S02810.coding  +++| 4.3.8 DECK INTERDEPENDENCIES
02814  M01S02811.coding  +++|
02815  M01S02812.coding  +++| Beware of deck interdependencies which may require additional
02816  M01S02813.coding  +++| code/modsets, such as PPCOM and COMSXXX changes affecting DSDI, DIS
02817  M01S02814.coding  +++| changes that should also be made in XIS, and COMCXXX/COMDXXX/COMPXXX/
02818  M01S02815.coding  +++| COMSXXX/COMTXXX, etc. changes causing CALLCPU/CALLDIS/CALLPPU/
02819  M01S02816.coding  +++| CALLSYS/CALLTAB, etc. to not assemble without lots of errors.
02820  M01S02817.coding  +++|
02821  M01S02818.coding  +++|
02822  M01S02819.coding  +++| 4.4 MODULARITY
02823  M01S02820.coding  +++|
02824  M01S02821.coding  +++|
02825  M01S02822.coding  +++| 4.4.1 PP OVERLAYS
02826  M01S02823.coding  +++|
02827  M01S02824.coding  +++| PP Programs use overlays whenever possible to improve the long range
02828  M01S02825.coding  +++| performance of the system.  Overlays are used for any seldom
02829  M01S02826.coding  +++| executed code such as error handling and seldom used features.
02830  M01S02827.coding  +++|
02831  M01S02828.coding  +++|
02832  M01S02829.coding  +++|1                                                           PAGE    56
02833  M01S02830.coding  +++|
02834  M01S02831.coding  +++|
02835  M01S02832.coding  +++| 4.4.2 HELPER PP-S
02836  M01S02833.coding  +++|
02837  M01S02834.coding  +++| Helper PPs are not used unless no other method exists.  The
02838  M01S02835.coding  +++| availability of PPs when needed should be considered, since the use
02839  M01S02836.coding  +++| of helper PP's may lead to deadlocks if no PP's are available.
02840  M01S02837.coding  +++|
02841  M01S02838.coding  +++|
02842  M01S02839.coding  +++| 4.4.3 COMMON DECKS
02843  M01S02840.coding  +++|
02844  M01S02841.coding  +++| A common deck containing executable code consists of one or more
02845  M01S02842.coding  +++| subroutines (as defined in sections 3.2.6 and 3.2.7) and any
02846  M01S02843.coding  +++| associated data storage areas.  The purpose of common decks is to
02847  M01S02844.coding  +++| increase efficiency in writing code, insure uniformity of code and
02848  M01S02845.coding  +++| decrease debugging time.  Common decks contain optimized code and
02849  M01S02846.coding  +++| external interfaces that are generalized to facilitate their use in
02850  M01S02847.coding  +++| future programs.  These decks should be used in preference to local
02851  M01S02848.coding  +++| code whenever possible.
02852  M01S02849.coding  +++|
02853  M01S02850.coding  +++| Common Decks which contain only macros are not qualified.  "S" type
02854  M01S02851.coding  +++| common decks are not qualified by the QUAL pseudo-op within the
02855  M01S02852.coding  +++| common deck.  If an "S" type common deck is qualified externally,
02856  M01S02853.coding  +++| the qualifier is the three character name of the routine.  For
02857  M01S02854.coding  +++| example:
02858  M01S02855.coding  +++|
02859  M01S02856.coding  +++|               COMSaaa        (where aaa is the qualifier)
02860  M01S02857.coding  +++|
02861  M01S02858.coding  +++|
02862  M01S02859.coding  +++| 4.5 DAYFILE MESSAGES
02863  M01S02860.coding  +++|
02864  M01S02861.coding  +++| Dayfile messages issued to the user or system Dayfile begin with a
02865  M01S02862.coding  +++| blank character and end with a period.  Dayfile messages should not
02866  M01S02863.coding  +++| exceed 50 characters.  Abbreviations should be avoided when possible
02867  M01S02864.coding  +++| in dayfile messages.
02868  M01S02865.coding  +++|
02869  M01S02866.coding  +++| Informative messages should be issued to the user dayfile only
02870  M01S02867.coding  +++| (option 3 on the MESSAGE macro or the CPON option on the call to
02871  M01S02868.coding  +++| DFM).  Messages that indicate that the job will abort are the only
02872  M01S02869.coding  +++| informative user messages that should also be issued to the System
02873  M01S02870.coding  +++| Dayfile.  Special system programs (MODVAL, ISF, Subsystems, PF or
02874  M01S02871.coding  +++| Queue Utilities, etc.) are exceptions and may issue informative
02875  M01S02872.coding  +++| messages to the System Dayfile when necessary.
02876  M01S02873.coding  +++|
02877  M01S02874.coding  +++|
02878  M01S02875.coding  +++|1                                                           PAGE    57
02879  M01S02876.coding  +++|
02880  M01S02877.coding  +++|
02881  M01S02878.coding  +++| 4.6 UNHANGABLE CHANNEL CODE
02882  M01S02879.coding  +++|
02883  M01S02880.coding  +++| To avoid channel hangs, bit 2**5 is set on some PP channel
02884  M01S02881.coding  +++| instructions.  This should only be used when undesirable side
02885  M01S02882.coding  +++| affects will not result and where it is possible to take corrective
02886  M01S02883.coding  +++| action.  (For example: disconnecting an inactive channel will not
02887  M01S02884.coding  +++| result in undesirable effects.)  Bit 2**5 should not be used when
02888  M01S02885.coding  +++| unpredictable results may occur.  Bit 2**5 is not used with channel
02889  M01S02886.coding  +++| 15.
02890  M01S02887.coding  +++|
02891  M01S02888.coding  +++| Example:
02892  M01S02889.coding  +++|               IJM    tag1,CH      IF CHANNEL DISCONNECTED
02893  M01S02890.coding  +++|               DCN    CH+4O        DISCONNECT CHANNEL
02894  M01S02891.coding  +++|               RJM    ERP          PROCESS ERROR
02895  M01S02892.coding  +++|     tag1       .
02896  M01S02893.coding  +++|                .
02897  M01S02894.coding  +++|                .
02898  M01S02895.coding  +++|
02899  M01S02896.coding  +++|
02900  M01S02897.coding  +++| 4.7 SPECIAL ENTRY POINTS
02901  M01S02898.coding  +++|
02902  M01S02899.coding  +++| Special entry points defined by NOS include:
02903  M01S02900.coding  +++|
02904  M01S02901.coding  +++|     ARG=      Inhibit argument processing
02905  M01S02902.coding  +++|     CLB=      Command line buffer
02906  M01S02903.coding  +++|     DMP=      Allow special system processing
02907  M01S02904.coding  +++|     LDR=      Loader processing
02908  M01S02905.coding  +++|     MFL=      Minimum field length
02909  M01S02906.coding  +++|     RFL=      Running field length
02910  M01S02907.coding  +++|     SDM=      Suppress dayfile message
02911  M01S02908.coding  +++|     SSJ=      Special system job
02912  M01S02909.coding  +++|     SSM=      Secure system memory
02913  M01S02910.coding  +++|     VAL=      Validation program
02914  M01S02911.coding  +++|
02915  M01S02912.coding  +++| To insure proper loading and execution of special entry point
02916  M01S02913.coding  +++| programs, special entry points must be declared after normal entry
02917  M01S02914.coding  +++| points.
02918  M01S02915.coding  +++|
02919  M01S02916.coding  +++| EXAMPLE:
02920  M01S02917.coding  +++|
02921  M01S02918.coding  +++|     IDENT     FWA
02922  M01S02919.coding  +++|     ABS
02923  M01S02920.coding  +++|     ENTRY     ABC
02924  M01S02921.coding  +++|     ENTRY     XYZ
02925  M01S02922.coding  +++|     ENTRY     RFL=
02926  M01S02923.coding  +++|     ENTRY     SSJ=
02927  M01S02924.coding  +++|     SYSCOM    B1
02928  M01S02925.coding  +++|        .
02929  M01S02926.coding  +++|        .
02930  M01S02927.coding  +++|        .
02931  M01S02928.coding  +++|
02932  M01S02929.coding  +++|
02933  M01S02930.coding  +++|1                                                           PAGE    58
02934  M01S02931.coding  +++|
02935  M01S02932.coding  +++|
02936  M01S02933.coding  +++| 4.8  SCRATCH FILE NAMES.
02937  M01S02934.coding  +++|
02938  M01S02935.coding  +++| Programs requiring temporary scratch files will use the names
02939  M01S02936.coding  +++| ZZZZZG0 - ZZZZZG9 as names for scratch files.  Programs which
02940  M01S02937.coding  +++| require more than these 10 scratch file names must resolve the
02941  M01S02938.coding  +++| required file names with Systems Design.  Such scratch files must
02942  M01S02939.coding  +++| always be returned at program termination.
02943  M01S02940.coding  +++|
02944  M01S02941.coding  +++|
02945  M01S02942.coding  +++|1                                                           PAGE    59
02946  M01S02943.coding  +++|
02947  M01S02944.coding  +++|
02948  M01S02945.coding  +++| APPENDIX A - ABBREVIATIONS
02949  M01S02946.coding  +++|
02950  M01S02947.coding  +++| Standard industry abbreviations and programming language names may
02951  M01S02948.coding  +++| be used even though they are not included in the following appendix.
02952  M01S02949.coding  +++|
02953  M01S02950.coding  +++| A.1 GENERAL ABBREVIATIONS
02954  M01S02951.coding  +++|
02955  M01S02952.coding  +++|        BML     binary maintenance log
02956  M01S02953.coding  +++|        BOI     beginning of information
02957  M01S02954.coding  +++|        CLT     common library table
02958  M01S02955.coding  +++|        CM      central memory
02959  M01S02956.coding  +++|        CME     central memory extension
02960  M01S02957.coding  +++|        CMM     common memory manager
02961  M01S02958.coding  +++|        CMR     central memory resident
02962  M01S02959.coding  +++|        CMU     compare/move unit
02963  M01S02960.coding  +++|        CP      control point
02964  M01S02961.coding  +++|        CPA     control point area address
02965  M01S02962.coding  +++|        CPU     central processing unit
02966  M01S02963.coding  +++|        CR      carriage return
02967  M01S02964.coding  +++|        CSU     cartridge storage unit
02968  M01S02965.coding  +++|        CW      control word
02969  M01S02966.coding  +++|        DAT     device access table
02970  M01S02967.coding  +++|        DIT     device interlock table
02971  M01S02968.coding  +++|        ECS     extended core storage
02972  M01S02969.coding  +++|        ESM     extended semi conductor memory
02973  M01S02970.coding  +++|        EJT     executing job table
02974  M01S02971.coding  +++|        EJTO    executing job table ordinal
02975  M01S02972.coding  +++|        EM      extended memory
02976  M01S02973.coding  +++|        EOF     end of file
02977  M01S02974.coding  +++|        EOI     end of information
02978  M01S02975.coding  +++|        EOL     end of line
02979  M01S02976.coding  +++|        EOR     end of record
02980  M01S02977.coding  +++|        EOS     end of stream
02981  M01S02978.coding  +++|        EPD     entry point directory
02982  M01S02979.coding  +++|        EST     equipment status table
02983  M01S02980.coding  +++|        FOT     family ordinal table
02984  M01S02981.coding  +++|        ETX     end of text
02985  M01S02982.coding  +++|        FDX     full duplex
02986  M01S02983.coding  +++|        FET     file enviroment table
02987  M01S02984.coding  +++|        FL      field length
02988  M01S02985.coding  +++|        FLE     field length for extended memory
02989  M01S02986.coding  +++|        FLPP    first level PPU
02990  M01S02987.coding  +++|        FNT     file name table
02991  M01S02988.coding  +++|        FST     file status table
02992  M01S02989.coding  +++|        FWA     first word address
02993  M01S02990.coding  +++|        HDX     half duplex
02994  M01S02991.coding  +++|        ID      identifier or identification
02995  M01S02992.coding  +++|        I/O     input/output
02996  M01S02993.coding  +++|        JCB     job control block
02997  M01S02994.coding  +++|        JSN     job sequence name
02998  M01S02995.coding  +++|        LCME    large core memory extended
02999  M01S02996.coding  +++|
03000  M01S02997.coding  +++|1                                                           PAGE    60
03001  M01S02998.coding  +++|
03002  M01S02999.coding  +++|
03003  M01S03000.coding  +++|        LFN     logical file name
03004  M01S03001.coding  +++|        LWA     last word address
03005  M01S03002.coding  +++|        MID     machine identification
03006  M01S03003.coding  +++|        MMF     multi-mainframe
03007  M01S03004.coding  +++|        MRT     machine recovery table
03008  M01S03005.coding  +++|        MS      mass storage
03009  M01S03006.coding  +++|        MSA     mass storage adaptor
03010  M01S03007.coding  +++|        MST     mass storage table
03011  M01S03008.coding  +++|        MST     mass storage transport (do not use abbreviation where
03012  M01S03009.coding  +++|                confusion with Mass Storage Table may result)
03013  M01S03010.coding  +++|        MT      magnetic tape
03014  M01S03011.coding  +++|        MUX     multiplexer
03015  M01S03012.coding  +++|        NFL     negative field length
03016  M01S03013.coding  +++|        PF      permanent file
03017  M01S03014.coding  +++|        PFC     permanent file catalog
03018  M01S03015.coding  +++|        PFN     permanent file name
03019  M01S03016.coding  +++|        PLD     peripheral library directory
03020  M01S03017.coding  +++|        PP      peripheral processor
03021  M01S03018.coding  +++|        PPU     first-level peripheral processor; only on CYBER 176
03022  M01S03019.coding  +++|                (also known as FLPP)
03023  M01S03020.coding  +++|        PRU     physical record unit
03024  M01S03021.coding  +++|        PST     program status table
03025  M01S03022.coding  +++|        QFT     queued file table
03026  M01S03023.coding  +++|        RA      reference address
03027  M01S03024.coding  +++|        RAE     reference address for extended memory
03028  M01S03025.coding  +++|        RCL     resident central library
03029  M01S03026.coding  +++|        RPL     resident peripheral library
03030  M01S03027.coding  +++|        RMS     rotating mass storage
03031  M01S03028.coding  +++|        SCP     system control point
03032  M01S03029.coding  +++|        SCR     status and control register
03033  M01S03030.coding  +++|        SECDED  single error correction, double error detection
03034  M01S03031.coding  +++|        SUBCP   subcontrol point
03035  M01S03032.coding  +++|        TRT     track reservation table
03036  M01S03033.coding  +++|        TTY     teletype
03037  M01S03034.coding  +++|        UCP     user control point
03038  M01S03035.coding  +++|        UEM     unified extended memory for 8X5
03039  M01S03036.coding  +++|        UDT     unit descriptor table
03040  M01S03037.coding  +++|        UJN     user job name
03041  M01S03038.coding  +++|        VSN     volume serial number
03042  M01S03039.coding  +++|
03043  M01S03040.coding  +++|
03044  M01S03041.coding  +++| A.2 NETWORK HOST PRODUCTS ABBREVIATIONS
03045  M01S03042.coding  +++|
03046  M01S03043.coding  +++|        ABH     application block header
03047  M01S03044.coding  +++|        ABL     application block limit
03048  M01S03045.coding  +++|        ABN     application block number
03049  M01S03046.coding  +++|        ABT     application block type
03050  M01S03047.coding  +++|        ACK     block acknowledged
03051  M01S03048.coding  +++|        ACN     application connection number
03052  M01S03049.coding  +++|        ACT     application character type
03053  M01S03050.coding  +++|        ADR     address information
03054  M01S03051.coding  +++|
03055  M01S03052.coding  +++|1                                                           PAGE    61
03056  M01S03053.coding  +++|
03057  M01S03054.coding  +++|
03058  M01S03055.coding  +++|        ALN     application list number
03059  M01S03056.coding  +++|        CLA     communications line adapter
03060  M01S03057.coding  +++|        IBU     input block undeliverable
03061  M01S03058.coding  +++|        IVT     interactive virtual terminal
03062  M01S03059.coding  +++|        LCF     local configuration file
03063  M01S03060.coding  +++|        LOP     local operator
03064  M01S03061.coding  +++|        NAK     block not acknowledged
03065  M01S03062.coding  +++|        NCF     network configuration file
03066  M01S03063.coding  +++|        NDL     network definition language
03067  M01S03064.coding  +++|        NFE     no format effectors
03068  M01S03065.coding  +++|        NOP     network operator
03069  M01S03066.coding  +++|        NPU     network processing unit
03070  M01S03067.coding  +++|        PFC     primary function code
03071  M01S03068.coding  +++|        SFC     secondary function code
03072  M01S03069.coding  +++|        SM      supervisory message
03073  M01S03070.coding  +++|        SMP     supervisory message processor
03074  M01S03071.coding  +++|        TA      text area
03075  M01S03072.coding  +++|        TLC     text length characters
03076  M01S03073.coding  +++|        TLMAX   maximum length of data message block text
03077  M01S03074.coding  +++|        TNAME   terminal name
03078  M01S03075.coding  +++|
03079  M01S03076.coding  +++|
03080  M01S03077.coding  +++| A.3 ACRONYMS
03081  M01S03078.coding  +++|
03082  M01S03079.coding  +++|        AIP     Application Interface Program
03083  M01S03080.coding  +++|        BIO     Batchio
03084  M01S03081.coding  +++|        CDCS    CYBER Database Control System
03085  M01S03082.coding  +++|        CRM     Cyber Record Manager
03086  M01S03083.coding  +++|        FSE     Full Screen Editor
03087  M01S03084.coding  +++|        IAF     Interactive Facility
03088  M01S03085.coding  +++|        LCN     Loosely Coupled Network
03089  M01S03086.coding  +++|        MAG     Magnet
03090  M01S03087.coding  +++|        MAP     Matrix Array Processor
03091  M01S03088.coding  +++|        MCS     Message Control System
03092  M01S03089.coding  +++|        MSF     Mass Storage Facility
03093  M01S03090.coding  +++|        MSS     Mass Storage Subsystem
03094  M01S03091.coding  +++|        NAM     Network Access Method
03095  M01S03092.coding  +++|        NOS     Network Operating System
03096  M01S03093.coding  +++|        NVE     Network Validation Facility
03097  M01S03094.coding  +++|        RBF     Remote Batch Facility
03098  M01S03095.coding  +++|        RDF     Remote Diagnostic Facility
03099  M01S03096.coding  +++|        RHF     Remote Host Facility
03100  M01S03097.coding  +++|        SMF     Screen Management Facility
03101  M01S03098.coding  +++|        SSF     Scope Station Facility
03102  M01S03099.coding  +++|        STM     Stimulator
03103  M01S03100.coding  +++|        TAF     Transaction Facility
03104  M01S03101.coding  +++|        TIP     Terminal Interface Program
03105  M01S03102.coding  +++|        TVF     Terminal Verification Facility
03106  M01S03103.coding  +++|
03107  M01S03104.coding  +++|1                                                           PAGE    62
03108  M01S03105.coding  +++|
03109  M01S03106.coding  +++|
03110  M01S03107.coding  +++| APPENDIX B - ERROR MESSAGE GUIDELINES
03111  M01S03108.coding  +++|
03112  M01S03109.coding  +++| The following general principles are to be observed in designing
03113  M01S03110.coding  +++| future error messages for NOS.  Existing messages should be improved
03114  M01S03111.coding  +++| as opportunities arise.  These guidelines will be formalized in a
03115  M01S03112.coding  +++| later Usability Design Direction Document.
03116  M01S03113.coding  +++|
03117  M01S03114.coding  +++| 1.  The purpose of an error message is to inform the user how to
03118  M01S03115.coding  +++|     correct a problem.
03119  M01S03116.coding  +++|
03120  M01S03117.coding  +++|     Discussion:  It helps to view error messages as prompts: not
03121  M01S03118.coding  +++|     "this is what you did wrong" but "this is how to do it right."
03122  M01S03119.coding  +++|     Messages should be phrased positively.  The words "ILLEGAL",
03123  M01S03120.coding  +++|     "INVALID", and "SYNTAX" are specifically not permitted in NOS
03124  M01S03121.coding  +++|     messages.  Of course, there are other ways to phrase unhelpful,
03125  M01S03122.coding  +++|     negative messages; but these three words are singled out for
03126  M01S03123.coding  +++|     extinction for being so frequently seen in the company of
03127  M01S03124.coding  +++|     usability offenders.
03128  M01S03125.coding  +++|
03129  M01S03126.coding  +++| 2.  A single message should diagnose a single error.
03130  M01S03127.coding  +++|
03131  M01S03128.coding  +++|     Discussion:  For example, if the meaning of message is "more
03132  M01S03129.coding  +++|     than seven characters or leading non-alphabetic character or
03133  M01S03130.coding  +++|     null identifier" it should be three messages.  Usually, the code
03134  M01S03131.coding  +++|     must make three separate tests, so it is easy to be precise.  An
03135  M01S03132.coding  +++|     exception is when a common deck returns an error status which
03136  M01S03133.coding  +++|     could have resulted from several different conditions.
03137  M01S03134.coding  +++|
03138  M01S03135.coding  +++| 3.  An error message is friendly if it is business-like and
03139  M01S03136.coding  +++|     informative.
03140  M01S03137.coding  +++|
03141  M01S03138.coding  +++|     Discussion:  Cute, funny, or flippant messages are to be
03142  M01S03139.coding  +++|     avoided, as they seldom diagnose accurately and always wear
03143  M01S03140.coding  +++|     quickly.  Messages should be directed at the process and not the
03144  M01S03141.coding  +++|     person.
03145  M01S03142.coding  +++|
03146  M01S03143.coding  +++| 4.  Messages must be written plainly, using terms already known to
03147  M01S03144.coding  +++|     the user.
03148  M01S03145.coding  +++|
03149  M01S03146.coding  +++|     Discussion:  Messages should use terms which are either
03150  M01S03147.coding  +++|     self-defining or natural to the process.  All words should be
03151  M01S03148.coding  +++|     part of the external user interface, like "file name" instead of
03152  M01S03149.coding  +++|     "LFN" (unless LFN is an external parameter).
03153  M01S03150.coding  +++|
03154  M01S03151.coding  +++| 5.  Messages must be written in English.
03155  M01S03152.coding  +++|
03156  M01S03153.coding  +++|     Discussion:  Messages should follow normal rules for English
03157  M01S03154.coding  +++|     grammar and punctuation, although "pidgin English" -- the
03158  M01S03155.coding  +++|     omission of selected subjects, verbs or objects in the interest
03159  M01S03156.coding  +++|     of brevity where the meaning is clear - is acceptable.  Messages
03160  M01S03157.coding  +++|     should not be written in octal, or in other forms of scientific
03161  M01S03158.coding  +++|     notation.  Note that the asterisk is not an English punctuator.
03162  M01S03159.coding  +++|1                                                           PAGE    63
03163  M01S03160.coding  +++|
03164  M01S03161.coding  +++|
03165  M01S03162.coding  +++|
03166  M01S03163.coding  +++| 6.  Messages should be self-contained.
03167  M01S03164.coding  +++|
03168  M01S03165.coding  +++|     Discussion:  If you need to tell a story, tell the whole story.
03169  M01S03166.coding  +++|     Avoid references, as they are difficult to keep up-to-date and
03170  M01S03167.coding  +++|     are often no more helpful then a good one-line message would be.
03171  M01S03168.coding  +++|
03172  M01S03169.coding  +++| 7.  Error messages should point directly to the source of the
03173  M01S03170.coding  +++|     trouble.
03174  M01S03171.coding  +++|
03175  M01S03172.coding  +++|     Discussion:  For example, "FILE NOT FOUND" is better put as
03176  M01S03173.coding  +++|     "FILE XYZ NOT FOUND", "EXPECTING COMMA OR PERIOD AFTER 'ABC'" is
03177  M01S03174.coding  +++|     much clearer than "SYNTAX ERROR".  In general, the technique of
03178  M01S03175.coding  +++|     echoing back part of the user input as part of the message is
03179  M01S03176.coding  +++|     better than the use of internal names or parameter keywords
03180  M01S03177.coding  +++|     which the user may not recognize.
03181  M01S03178.coding  +++|
03182  M01S03179.coding  +++| 8.  Interactive error messages should appear as soon as possible
03183  M01S03180.coding  +++|     after an error is committed.
03184  M01S03181.coding  +++|
03185  M01S03182.coding  +++|     Discussion:  Each interactive input should be completely and
03186  M01S03183.coding  +++|     fully validated as soon as it is received.  In no event should a
03187  M01S03184.coding  +++|     user be led down the garden path to enter a long series of input
03188  M01S03185.coding  +++|     only to be advised that it is all wrong because the first part
03189  M01S03186.coding  +++|     was wrong.
03190  M01S03187.coding  +++|
03191  M01S03188.coding  +++| 9.  No messages at all should appear for trivial, correctable errors
03192  M01S03189.coding  +++|     - nor should they be errors.
03193  M01S03190.coding  +++|
03194  M01S03191.coding  +++|     Discussion:  Errors such as missing or redundant terminators
03195  M01S03192.coding  +++|     should not be errors at all.  If a reasonable assumption can be
03196  M01S03193.coding  +++|     made as to the intent of an input, it should be acted upon as
03197  M01S03194.coding  +++|     though it were "valid".  No error diagnostic should be produced
03198  M01S03195.coding  +++|     for these cases.  If it is not perfectly clear what assumption
03199  M01S03196.coding  +++|     was made, the assumption was probably not reasonable to begin
03200  M01S03197.coding  +++|     with.
03201  M01S03198.coding  +++|
03202  M01S03199.coding  +++| 10. An error message must clearly signal that an error has occurred.
03203  M01S03200.coding  +++|
03204  M01S03201.coding  +++|     Discussion:  An error message must not be phrased in such a way
03205  M01S03202.coding  +++|     as to be confused with a merely informative message.  Also, a
03206  M01S03203.coding  +++|     message should indicate the gravity and extent of the error, as
03207  M01S03204.coding  +++|     when an error in a list inhibits processing of the remainder of
03208  M01S03205.coding  +++|     the list.
03209  M01S03206.coding  +++|
03210  M01S03207.coding  +++|1                                                           PAGE    64
03211  M01S03208.coding  +++|
03212  M01S03209.coding  +++|
03213  M01S03210.coding  +++| APPENDIX C   DOCUMENTATION/USABILITY GUIDELINES
03214  M01S03211.coding  +++|
03215  M01S03212.coding  +++|
03216  M01S03213.coding  +++| 1.  COMMAND should be used instead of CONTROL STATEMENT or CONTROL
03217  M01S03214.coding  +++|     CARD.
03218  M01S03215.coding  +++|
03219  M01S03216.coding  +++| 2.  INCORRECT should be used rather than ILLEGAL or INVALID (refer
03220  M01S03217.coding  +++|     to Appendix B item 1).
03221  M01S03218.coding  +++|
03222  M01S03219.coding  +++| 3.  USER should be used instead of ACCOUNT.
03223  M01S03220.coding  +++|
03224  M01S03221.coding  +++| 4.  USER NAME should be used instead of USER NUMBER or ACCOUNT
03225  M01S03222.coding  +++|     NUMBER.
03226  M01S03223.coding  +++|
03227  M01S03224.coding  +++| 5.  EXTENDED MEMORY should be used rather than ECS.
03228  M01S03225.coding  +++|
03229  M01S03226.coding  +++| 6.  MONITOR REQUEST should be used rather than RA+1 CALL.
03230  M01S03227.coding  +++|
03231  M01S03228.coding  +++| 7.  EST ORDINAL or DEVICE should be used instead of EQUIPMENT NUMBER
03232  M01S03229.coding  +++|     or EQUIPMENT.
03233  M01S03230.coding  +++|
03234  M01S03231.coding  +++| 8.  English variables such as file name rather than filenam should
03235  M01S03232.coding  +++|     be used to remove the shorthand notation of using variable names
03236  M01S03233.coding  +++|     that are the same length as the maximum entry.
03237  M01S03234.coding  +++|
03238  M01S03235.coding  +++| 9.  Documentation, messages, etc. should avoid the use of sexist
03239  M01S03236.coding  +++|     language (he, she, him, her, etc.).
03240  M01S03237.coding  +++|
03241  M01S03238.coding  +++|*WEOR
cdc/nos2.source/opl.opl871/deck/coding.001.txt ยท Last modified: by 127.0.0.1