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 
----------------------------+
01962  M00S01959.coding  +++|
01963  M00S01960.coding  +++| Large buffers and working storage areas should be defined using EQU
01964  M00S01961.coding  +++| statements (rather than BSS and BSSZ) to avoid unneccessary loading
01965  M00S01962.coding  +++| of the buffer areas that do not require initialization.  This
01966  M00S01963.coding  +++| applies to CPU and PP code.
01967  M00S01964.coding  +++|
01968  M00S01965.coding  +++|              USE    BUFFERS
01969  M00S01966.coding  +++|     IBUF     EQU    *
01970  M00S01967.coding  +++|     OBUF     EQU    IBUF+IBUFL
01971  M00S01968.coding  +++|     RFL=     EQU    OBUF+OBUFL
01972  M00S01969.coding  +++|
01973  M00S01970.coding  +++| Small buffers and working storage areas may be allocated via BSSZ,
01974  M00S01971.coding  +++| if the program requires that the area be zero on program initiation.
01975  M00S01972.coding  +++|
01976  M00S01973.coding  +++| The BSSN macro defined in COMCMAC and COMPMAC may also be used to
01977  M00S01974.coding  +++| define buffers.
01978  M00S01975.coding  +++|
01979  M00S01976.coding  +++|
01980  M00S01977.coding  +++| 3.5 DATA/CODE NAMING TERMINOLOGY
01981  M00S01978.coding  +++|
01982  M00S01979.coding  +++|
01983  M00S01980.coding  +++|1                                                           PAGE    40
01984  M00S01981.coding  +++|
01985  M00S01982.coding  +++|
01986  M00S01983.coding  +++| 3.5.1 USE OF CONDITION TERMINOLOGY
01987  M00S01984.coding  +++|
01988  M00S01985.coding  +++| The following terms are used to describe the condition of bits used
01989  M00S01986.coding  +++| as flags or switches.  The selected terms should be used
01990  M00S01987.coding  +++| consistently within a program.
01991  M00S01988.coding  +++|
01992  M00S01989.coding  +++|           1              0
01993  M00S01990.coding  +++|           on             off
01994  M00S01991.coding  +++|           true           false
01995  M00S01992.coding  +++|           set            clear (reset)
01996  M00S01993.coding  +++|           nonzero        zero
01997  M00S01994.coding  +++|           up             down
01998  M00S01995.coding  +++|
01999  M00S01996.coding  +++|
02000  M00S01997.coding  +++| 3.5.2 TAGS WITHIN SUBROUTINES
02001  M00S01998.coding  +++|
02002  M00S01999.coding  +++| Each subroutine (main loop, primary subroutine or secondary
02003  M00S02000.coding  +++| subroutine) has a meaningful three character name which is derived
02004  M00S02001.coding  +++| from the title of the subroutine (see section 2.4).
02005  M00S02002.coding  +++|
02006  M00S02003.coding  +++| Tags used for branch instructions are of the form:
02007  M00S02004.coding  +++|
02008  M00S02005.coding  +++|           XXXn           Example: GFN1
02009  M00S02006.coding  +++|
02010  M00S02007.coding  +++| Tags on code which is added later to the subroutine are of the
02011  M00S02008.coding  +++| form:
02012  M00S02009.coding  +++|
02013  M00S02010.coding  +++|           XXXN.n         Example: GFN1.1
02014  M00S02011.coding  +++|
02015  M00S02012.coding  +++| Tags that are inserted between the SUBR and the tag XXX1 by
02016  M00S02013.coding  +++| corrective code are of the form:
02017  M00S02014.coding  +++|
02018  M00S02015.coding  +++|           XXX0.n         Example: GFN0.1
02019  M00S02016.coding  +++|
02020  M00S02017.coding  +++|
02021  M00S02018.coding  +++| Tags on storage locations (constants, temporary storage and
02022  M00S02019.coding  +++| instruction modification) within a subroutine are of the form:
02023  M00S02020.coding  +++|
02024  M00S02021.coding  +++|           XXXa
02025  M00S02022.coding  +++|
02026  M00S02023.coding  +++| Where:
02027  M00S02024.coding  +++|
02028  M00S02025.coding  +++|     XXX  =    Subroutine name
02029  M00S02026.coding  +++|     XXXN =    Tag preceding an added one
02030  M00S02027.coding  +++|     n    =    Number from 1 to 99 (in consecutive order beginning at
02031  M00S02028.coding  +++|               the entry point and ending at the exit point)
02032  M00S02029.coding  +++|     a    =    Letter from A to Z and AA to ZZ (in alphabetical order
02033  M00S02030.coding  +++|               and excluding X)
02034  M00S02031.coding  +++|
02035  M00S02032.coding  +++| Tags of the form XXXn, XXXn.n, and XXXa should not be referenced
02036  M00S02033.coding  +++| outside of subroutine XXX.
02037  M00S02034.coding  +++|
02038  M00S02035.coding  +++|1                                                           PAGE    41
02039  M00S02036.coding  +++|
02040  M00S02037.coding  +++|
02041  M00S02038.coding  +++| If the above rules cannot be followed due to tag unavailability,
02042  M00S02039.coding  +++| the entire subroutine will have its tags resequenced.
02043  M00S02040.coding  +++|
02044  M00S02041.coding  +++| Tags on storage locations within a subroutine which must be
02045  M00S02042.coding  +++| referenced outside of the subroutine should be given appropriate
02046  M00S02043.coding  +++| global tags.
02047  M00S02044.coding  +++|
02048  M00S02045.coding  +++|
02049  M00S02046.coding  +++| 3.5.3 TAGS ON DATA
02050  M00S02047.coding  +++|
02051  M00S02048.coding  +++|
02052  M00S02049.coding  +++| 3.5.3.1 DIRECT CELLS
02053  M00S02050.coding  +++|
02054  M00S02051.coding  +++| All PP direct cells have two-character names.
02055  M00S02052.coding  +++|
02056  M00S02053.coding  +++| The following table defines the preassigned direct cell usage:
02057  M00S02054.coding  +++|
02058  M00S02055.coding  +++|     Contents                   Name      Location
02059  M00S02056.coding  +++|
02060  M00S02057.coding  +++|     Control Point RA/100       RA        55
02061  M00S02058.coding  +++|     Control Point FL/100       FL        56
02062  M00S02059.coding  +++|     1                          ON        70
02063  M00S02060.coding  +++|     100                        HN        71
02064  M00S02061.coding  +++|     1000                       TH        72
02065  M00S02062.coding  +++|     3                          TR        73
02066  M00S02063.coding  +++|     CPA address                CP        74
02067  M00S02064.coding  +++|     PP input register address  IA        75
02068  M00S02065.coding  +++|     PP output register address OA        76
02069  M00S02066.coding  +++|     PP message buffer address  MA        77
02070  M00S02067.coding  +++|
02071  M00S02068.coding  +++|
02072  M00S02069.coding  +++| 3.5.3.2 CODE CONTROL NAMES
02073  M00S02070.coding  +++|
02074  M00S02071.coding  +++| Names used for assembly options, micros and to control code
02075  M00S02072.coding  +++| generation are five or more characters long.
02076  M00S02073.coding  +++|
02077  M00S02074.coding  +++|
02078  M00S02075.coding  +++| 3.5.3.3 TABLE NAMES
02079  M00S02076.coding  +++|
02080  M00S02077.coding  +++| Tags used on tables have the form:
02081  M00S02078.coding  +++|
02082  M00S02079.coding  +++|           Txxx
02083  M00S02080.coding  +++|
02084  M00S02081.coding  +++| Tags used for table lengths have the form:
02085  M00S02082.coding  +++|
02086  M00S02083.coding  +++|           TxxxL
02087  M00S02084.coding  +++|
02088  M00S02085.coding  +++| Tags used for table entry lengths have the form:
02089  M00S02086.coding  +++|
02090  M00S02087.coding  +++|           TxxxE
02091  M00S02088.coding  +++|
02092  M00S02089.coding  +++|1                                                           PAGE    42
02093  M00S02090.coding  +++|
02094  M00S02091.coding  +++|
02095  M00S02092.coding  +++| Where:
02096  M00S02093.coding  +++|
02097  M00S02094.coding  +++| xxx = 3 character table name
02098  M00S02095.coding  +++|
02099  M00S02096.coding  +++|
02100  M00S02097.coding  +++| 3.5.3.4 GLOBAL MEMORY LOCATIONS
02101  M00S02098.coding  +++|
02102  M00S02099.coding  +++| Names used for global memory locations (locations referenced by more
02103  M00S02100.coding  +++| than one subroutine) are four characters long.  Multiple definitions
02104  M00S02101.coding  +++| for global memory locations should be avoided.
02105  M00S02102.coding  +++|
02106  M00S02103.coding  +++|
02107  M00S02104.coding  +++| 3.5.4 CONSTANTS USED AS INSTRUCTIONS
02108  M00S02105.coding  +++|
02109  M00S02106.coding  +++| Four letter tag names should end in "I" if the tag name is defining
02110  M00S02107.coding  +++| an instruction.
02111  M00S02108.coding  +++|
02112  M00S02109.coding  +++| For example:
02113  M00S02110.coding  +++|
02114  M00S02111.coding  +++|      LJMI     EQU    0100B       *LJM* INSTRUCTION
02115  M00S02112.coding  +++|      SHNI     EQU    1000B       *SHN* INSTRUCTION
02116  M00S02113.coding  +++|
02117  M00S02114.coding  +++| PP instructions are defined as constants in common deck COMSPIM.
02118  M00S02115.coding  +++|
02119  M00S02116.coding  +++|
02120  M00S02117.coding  +++| 3.5.5 IF/ELSE/ENDIF SYMBOLS
02121  M00S02118.coding  +++|
02122  M00S02119.coding  +++| Symbols used on IF, ELSE, ENDIF and SKIP psuedo instructions may be
02123  M00S02120.coding  +++| system symbols or local symbols of the form:
02124  M00S02121.coding  +++|
02125  M00S02122.coding  +++|               .a
02126  M00S02123.coding  +++|
02127  M00S02124.coding  +++| where:
02128  M00S02125.coding  +++|          a = letter from A to Z
02129  M00S02126.coding  +++|
02130  M00S02127.coding  +++| Unlabeled, unnumbered IF/ELSE/SKIP/ENDIF sequences should not be
02131  M00S02128.coding  +++| used as they may unexpectedly affect other sequences.  For very
02132  M00S02129.coding  +++| short sequences a line count may be used, for longer sequences
02133  M00S02130.coding  +++| labels are preferred.
02134  M00S02131.coding  +++|
02135  M00S02132.coding  +++| 3.5.6 NON-LOCAL MACRO SYMBOLS
02136  M00S02133.coding  +++|
02137  M00S02134.coding  +++| To avoid conflicts with user code, non-local symbols defined within
02138  M00S02135.coding  +++| macros are of the form:
02139  M00S02136.coding  +++|
02140  M00S02137.coding  +++|               .n
02141  M00S02138.coding  +++|
02142  M00S02139.coding  +++| where:
02143  M00S02140.coding  +++|          n = number from 1 to 99
02144  M00S02141.coding  +++|
02145  M00S02142.coding  +++|
02146  M00S02143.coding  +++|1                                                           PAGE    43
02147  M00S02144.coding  +++|
02148  M00S02145.coding  +++|
02149  M00S02146.coding  +++| 3.5.7 LOW CORE LOCATION SYMBOLS
02150  M00S02147.coding  +++|
02151  M00S02148.coding  +++| Symbols that are used to define locations in low core (CMR) are of
02152  M00S02149.coding  +++| the form:
02153  M00S02150.coding  +++|
02154  M00S02151.coding  +++|               xxxL
02155  M00S02152.coding  +++|
02156  M00S02153.coding  +++|
02157  M00S02154.coding  +++| 3.5.8 CONTROL POINT AREA LOCATION SYMBOLS
02158  M00S02155.coding  +++|
02159  M00S02156.coding  +++| Symbols that are used for defining locations in the control point
02160  M00S02157.coding  +++| area are of the form:
02161  M00S02158.coding  +++|
02162  M00S02159.coding  +++|               xxxW
02163  M00S02160.coding  +++|
02164  M00S02161.coding  +++|
02165  M00S02162.coding  +++| 3.5.9 MONITOR FUNCTION SYMBOLS
02166  M00S02163.coding  +++|
02167  M00S02164.coding  +++| Symbols used for monitor function requests are of the form:
02168  M00S02165.coding  +++|
02169  M00S02166.coding  +++|               xxxM
02170  M00S02167.coding  +++|
02171  M00S02168.coding  +++|
02172  M00S02169.coding  +++| 3.5.10 NEGATIVE FIELD LENGTH SYMBOLS
02173  M00S02170.coding  +++|
02174  M00S02171.coding  +++| Symbols used to reference data in negative field length are of the
02175  M00S02172.coding  +++| form:
02176  M00S02173.coding  +++|
02177  M00S02174.coding  +++|               xxxN
02178  M00S02175.coding  +++|
02179  M00S02176.coding  +++|
02180  M00S02177.coding  +++| 3.6 PSEUDO INSTRUCTION USE, FORMAT, AND PARAMETERS
02181  M00S02178.coding  +++|
02182  M00S02179.coding  +++|
02183  M00S02180.coding  +++| 3.6.1 BASE AND POST RADIX USE
02184  M00S02181.coding  +++|
02185  M00S02182.coding  +++| The BASE DECIMAL pseudo-op is used in all CPU code.  The BASE MIXED
02186  M00S02183.coding  +++| pseudo-op is used in all PP code.  Post Radix is allowed for data
02187  M00S02184.coding  +++| formats other than octal and decimal; in specifying timing loops
02188  M00S02185.coding  +++| where decimal values are more meaningful to humans; and where
02189  M00S02186.coding  +++| external specifications such as ANSI or corporate standards dictate
02190  M00S02187.coding  +++| the use of a particular format.
02191  M00S02188.coding  +++|
02192  M00S02189.coding  +++|
02193  M00S02190.coding  +++| 3.6.2 EXTERNAL REFERENCES
02194  M00S02191.coding  +++|
02195  M00S02192.coding  +++| The EXT pseudo-op is not used.  All references to external names use
02196  M00S02193.coding  +++| the form =Xname.  In an absolute assembly, references to locations
02197  M00S02194.coding  +++| in other overlays use the form =Xname.
02198  M00S02195.coding  +++|
02199  M00S02196.coding  +++|
02200  M00S02197.coding  +++|1                                                           PAGE    44
02201  M00S02198.coding  +++|
02202  M00S02199.coding  +++|
02203  M00S02200.coding  +++| 3.6.3 SPACE CARD FORMAT
02204  M00S02201.coding  +++|
02205  M00S02202.coding  +++| The format of the SPACE pseudo instruction is:
02206  M00S02203.coding  +++|
02207  M00S02204.coding  +++|      tag      SPACE  4,n
02208  M00S02205.coding  +++|
02209  M00S02206.coding  +++| where:
02210  M00S02207.coding  +++|
02211  M00S02208.coding  +++|        tag     =table, macro or subroutine name
02212  M00S02209.coding  +++|        n       =statement count
02213  M00S02210.coding  +++|
02214  M00S02211.coding  +++| The statement count is a multiple of 5 that is greater or equal to
02215  M00S02212.coding  +++| 10.  It should be large enough to avoid breaking documentation
02216  M00S02213.coding  +++| across page boundaries.
02217  M00S02214.coding  +++|
02218  M00S02215.coding  +++|
02219  M00S02216.coding  +++| 3.6.4 CONDITIONAL CODE
02220  M00S02217.coding  +++|
02221  M00S02218.coding  +++| Numeric skip counts are discouraged with IF, IFC, ELSE, etc.,
02222  M00S02219.coding  +++| because this makes code difficult to read (especially when the
02223  M00S02220.coding  +++| skipped lines are not listed).  ENDIF should be used instead.  An
02224  M00S02221.coding  +++| exception is allowed for very short sequences and for systems texts
02225  M00S02222.coding  +++| where space is critical.
02226  M00S02223.coding  +++|
02227  M00S02224.coding  +++| Conditional sequences should be bracketed with labels (refer to
02228  M00S02225.coding  +++| section 3.5.5) which allows them to be easily spotted and matched in
02229  M00S02226.coding  +++| listings.
02230  M00S02227.coding  +++|
02231  M00S02228.coding  +++| When either end of a sequence of conditional code occurs at a break
02232  M00S02229.coding  +++| in the listing (SPACE, TITLE, or blank lines), the spacing lines
02233  M00S02230.coding  +++| should be placed so that spacing will be correct whether the test is
02234  M00S02231.coding  +++| true or false.  Usually this means moving the spacing outside the
02235  M00S02232.coding  +++| conditional code.
02236  M00S02233.coding  +++|
02237  M00S02234.coding  +++| Example:
02238  M00S02235.coding  +++|              .
02239  M00S02236.coding  +++|              .
02240  M00S02237.coding  +++|              .
02241  M00S02238.coding  +++|              EQ     TAG1        CONTINUE
02242  M00S02239.coding  +++|              (blank line)       (outside conditional code)
02243  M00S02240.coding  +++|     .A       IFC    EQ,*"SYSTEM"*SCOPE*
02244  M00S02241.coding  +++|     TAG3     CONTROL  TAGA,R    READ COMMAND
02245  M00S02242.coding  +++|              EQ     TAGX        RETURN
02246  M00S02243.coding  +++|              (blank line)
02247  M00S02244.coding  +++|     TAGA     BSS    8           COMMAND BUFFER
02248  M00S02245.coding  +++|     .A       ELSE
02249  M00S02246.coding  +++|     TAG3     CONTROL  CCDR      READ COMMAND
02250  M00S02247.coding  +++|              EQ     TAGX        RETURN
02251  M00S02248.coding  +++|     .A       ENDIF
02252  M00S02249.coding  +++|     ABC      SPACE  4,10        (outside conditional code)
02253  M00S02250.coding  +++|
02254  M00S02251.coding  +++|1                                                           PAGE    45
02255  M00S02252.coding  +++|
02256  M00S02253.coding  +++|
02257  M00S02254.coding  +++| 3.6.5 MACROS
02258  M00S02255.coding  +++|
02259  M00S02256.coding  +++| Macro definitions should include a description of how the macro is
02260  M00S02257.coding  +++| called and a description of all formal parameters.  (Refer to
02261  M00S02258.coding  +++| section 2.5.)
02262  M00S02259.coding  +++|
02263  M00S02260.coding  +++| The PURGMAC psuedo instruction should be used to disable any
02264  M00S02261.coding  +++| previous macro definitions of the same name.
02265  M00S02262.coding  +++|
02266  M00S02263.coding  +++| Non-local symbol definitions should be of the form .n (see section
02267  M00S02264.coding  +++| 3.5.6).
02268  M00S02265.coding  +++|
02269  M00S02266.coding  +++| To avoid terminating multiple macro definitions, the ENDM
02270  M00S02267.coding  +++| instruction should be labeled with the macro name.
02271  M00S02268.coding  +++|
02272  M00S02269.coding  +++| The MACREF macro (defined in SYSTEXT) may be included within the
02273  M00S02270.coding  +++| macro definition body to provide symbolic reference table listing of
02274  M00S02271.coding  +++| the calls of the macro.
02275  M00S02272.coding  +++|
02276  M00S02273.coding  +++| The SYSTEM XXX,= macro (defined in CPCOM) should be used for cross
02277  M00S02274.coding  +++| referencing of CP programs calling PP programs without a standard
02278  M00S02275.coding  +++| interface (Examples:  CPUMTR calling 1MA, MAGNET calling 1MT via SPC
02279  M00S02276.coding  +++| call).
02280  M00S02277.coding  +++|
02281  M00S02278.coding  +++| The EXECUTE XXX,= macro (defined in COMPMAC) should be used for
02282  M00S02279.coding  +++| cross referencing of PP programs calling PP programs or overlays
02283  M00S02280.coding  +++| without a standard interface.
02284  M00S02281.coding  +++|
02285  M00S02282.coding  +++| When space is critical, as in systems texts, the following list of
02286  M00S02283.coding  +++| column numbers represent the beginning of each field in a COMPASS
02287  M00S02284.coding  +++| coding line to be used in a macro definition.
02288  M00S02285.coding  +++|
02289  M00S02286.coding  +++|     Column 2  = location field
02290  M00S02287.coding  +++|     column 3  = operation field
02291  M00S02288.coding  +++|     column 6  = address field
02292  M00S02289.coding  +++|     column 73 = reserved
02293  M00S02290.coding  +++|
02294  M00S02291.coding  +++| If a field is full or overflows into an adjacent field, then one
02295  M00S02292.coding  +++| space should separate the fields.  If comments are required, they
02296  M00S02293.coding  +++| should appear as stand-alone comments rather than embedded comments.
02297  M00S02294.coding  +++|
02298  M00S02295.coding  +++|
02299  M00S02296.coding  +++| 3.6.6 DIS PSEUDO INSTRUCTION
02300  M00S02297.coding  +++|
02301  M00S02298.coding  +++| The DIS pseudo instruction should not be used to generate data since
02302  M00S02299.coding  +++| the syntax of the instruction determines the format of the data.
02303  M00S02300.coding  +++| The DATA psuedo instruction should be used instead.
02304  M00S02301.coding  +++|
02305  M00S02302.coding  +++|
02306  M00S02303.coding  +++|1                                                           PAGE    46
02307  M00S02304.coding  +++|
02308  M00S02305.coding  +++|
02309  M00S02306.coding  +++| 3.7 TESTS FOR OVERFLOW
02310  M00S02307.coding  +++|
02311  M00S02308.coding  +++| CPU and PP programs should contain assembly checks for certain types
02312  M00S02309.coding  +++| of overflow conditions.  The following points should be considered
02313  M00S02310.coding  +++| when making the checks.
02314  M00S02311.coding  +++|
02315  M00S02312.coding  +++|     PP programs and overlays are generated by COMPASS in multiples
02316  M00S02313.coding  +++|     of 5 PP bytes (1 CM word).  Therefore, when reading an overlay
02317  M00S02314.coding  +++|     from central memory to PP memory, more PP bytes may be
02318  M00S02315.coding  +++|     destroyed than the actual number of bytes of PP code.
02319  M00S02316.coding  +++|
02320  M00S02317.coding  +++|     Overlays loaded from mass storage to PP memory come in
02321  M00S02318.coding  +++|     multiplies of 500 PP bytes.  At least 5 bytes of the last PRU
02322  M00S02319.coding  +++|     are required to represent end of record which can increase the
02323  M00S02320.coding  +++|     size of the overlay by one PRU (500 bytes).
02324  M00S02321.coding  +++|
02325  M00S02322.coding  +++|     Care should be taken to insure that the literals block has been
02326  M00S02323.coding  +++|     defined before checking for the overflow conditions.  Literals
02327  M00S02324.coding  +++|     can be flushed by specifying:
02328  M00S02325.coding  +++|
02329  M00S02326.coding  +++|               USE    (name)
02330  M00S02327.coding  +++|               USE    *
02331  M00S02328.coding  +++|
02332  M00S02329.coding  +++|
02333  M00S02330.coding  +++| The OVERFLOW macro (defined in COMPMAC) may be used to perform these
02334  M00S02331.coding  +++| checks.
02335  M00S02332.coding  +++|
02336  M00S02333.coding  +++|
02337  M00S02334.coding  +++| 3.7.1 CM LOADS
02338  M00S02335.coding  +++|
02339  M00S02336.coding  +++| All PP programs include a test for the amount of core remaining
02340  M00S02337.coding  +++| after a CM load as shown in the following example:
02341  M00S02338.coding  +++|
02342  M00S02339.coding  +++|               USE    OVERFLOW
02343  M00S02340.coding  +++|      xxx      BSS    0
02344  M00S02341.coding  +++|               ERRNG  7772-xxx    PP MEMORY OVERFLOW
02345  M00S02342.coding  +++|
02346  M00S02343.coding  +++| Where:
02347  M00S02344.coding  +++|
02348  M00S02345.coding  +++|      xxx =tag for the last location defined
02349  M00S02346.coding  +++|
02350  M00S02347.coding  +++|
02351  M00S02348.coding  +++| 3.7.2 TABLE OVERFLOW
02352  M00S02349.coding  +++|
02353  M00S02350.coding  +++| If a PP program uses more storage than it declares, its length is
02354  M00S02351.coding  +++| checked as shown in the following example:
02355  M00S02352.coding  +++|
02356  M00S02353.coding  +++|               USE    OVERFLOW
02357  M00S02354.coding  +++|      xxx      BSS    0
02358  M00S02355.coding  +++|      xxxE     EQU    xxx+xxxL
02359  M00S02356.coding  +++|               ERRNG  7777-xxxE   PROGRAM OVERFLOW
02360  M00S02357.coding  +++|
02361  M00S02358.coding  +++|1                                                           PAGE    47
02362  M00S02359.coding  +++|
02363  M00S02360.coding  +++|
02364  M00S02361.coding  +++| Where:
02365  M00S02362.coding  +++|
02366  M00S02363.coding  +++|     xxx  = tag for the last location defined
02367  M00S02364.coding  +++|     xxxL = length of undeclared space
02368  M00S02365.coding  +++|     xxxE = end of space used
02369  M00S02366.coding  +++|
02370  M00S02367.coding  +++|
02371  M00S02368.coding  +++| 3.7.3 MASS STORAGE LOADS
02372  M00S02369.coding  +++|
02373  M00S02370.coding  +++| A test will be included in each PP program which may reside on mass
02374  M00S02371.coding  +++| storage.  This test will protect against a load which exceeds the
02375  M00S02372.coding  +++| end of memory in the PP causing wrap around.  The "OVERFLOW" macro
02376  M00S02373.coding  +++| is available in COMPMAC for this operation.
02377  M00S02374.coding  +++|
02378  M00S02375.coding  +++|
02379  M00S02376.coding  +++| 3.7.4 OVERLAY LOADS
02380  M00S02377.coding  +++|
02381  M00S02378.coding  +++| Programs calling overlays should test for memory overflow with the
02382  M00S02379.coding  +++| following test:
02383  M00S02380.coding  +++|               ERRNG  (lwa+1)-(load addr)-len   comment
02384  M00S02381.coding  +++| where:
02385  M00S02382.coding  +++|
02386  M00S02383.coding  +++|     1wa+1     =    first byte not to be destroyed by the zero level
02387  M00S02384.coding  +++|                    overlay
02388  M00S02385.coding  +++|     load addr =    address where the overlay is loaded
02389  M00S02386.coding  +++|     len       =    length of overlay
02390  M00S02387.coding  +++|
02391  M00S02388.coding  +++| The length of an overlay is defined to be the number of bytes
02392  M00S02389.coding  +++| destroyed by the overlay during loading and execution.  The overlay
02393  M00S02390.coding  +++| should also contain a test to insure that it does not exceed its
02394  M00S02391.coding  +++| defined length.  The overlay length can be adjusted to a higher or
02395  M00S02392.coding  +++| smaller value as long as none of the tests fail.  The "OVERFLOW"
02396  M00S02393.coding  +++| macro is available in COMPMAC for this operation.
02397  M00S02394.coding  +++|
02398  M00S02395.coding  +++|
02399  M00S02396.coding  +++| 3.8 RELOCATABLE CPU CODE
02400  M00S02397.coding  +++|
02401  M00S02398.coding  +++| The first word of a relocatable CPU program should be of the format:
02402  M00S02399.coding  +++|
02403  M00S02400.coding  +++|          42/0LDECK, 18/ADDR
02404  M00S02401.coding  +++|
02405  M00S02402.coding  +++| where:
02406  M00S02403.coding  +++|
02407  M00S02404.coding  +++|          DECK = deck name
02408  M00S02405.coding  +++|          ADDR = entry address of program
02409  M00S02406.coding  +++|
02410  M00S02407.coding  +++| This word is used to locate the first word address and entry point
02411  M00S02408.coding  +++| of a routine in a CM dump.
02412  M00S02409.coding  +++|
02413  M00S02410.coding  +++| The contents of A0 must never be used in a library level routine
02414  M00S02411.coding  +++| unless it is saved and restored.  A0 is used by FTN as a base
02415  M00S02412.coding  +++| register for formal parameters in subroutine linkages.
02416  M00S02413.coding  +++|
02417  M00S02414.coding  +++|1                                                           PAGE    48
02418  M00S02415.coding  +++|
02419  M00S02416.coding  +++|
02420  M00S02417.coding  +++| 3.9 ROUTINE/SUBROUTINE COMPLEXITY
02421  M00S02418.coding  +++|
02422  M00S02419.coding  +++| In this context, the term "complexity" is used in its formal sense;
02423  M00S02420.coding  +++| that is, a sense of the structural incoherence (entropy) of a
02424  M00S02421.coding  +++| routine.  The more complex a routine is, the more liable it is to be
02425  M00S02422.coding  +++| a source of errors, difficult to implement, and worse to modify or
02426  M00S02423.coding  +++| correct.  There are no hard and fast rules for gauging the
02427  M00S02424.coding  +++| complexity of a routine, but it can be said in general that the
02428  M00S02425.coding  +++| longer it is, the more decisions it makes (branches), and the more
02429  M00S02426.coding  +++| functions it performs, the more complex and unreliable it tends to
02430  M00S02427.coding  +++| be.
02431  M00S02428.coding  +++|
02432  M00S02429.coding  +++| In order to reduce complexity, the following guidelines are to be
02433  M00S02430.coding  +++| followed whenever possible (i.e., not impossible).
02434  M00S02431.coding  +++|
02435  M00S02432.coding  +++|     1.  One routine - one function.  Each routine should have one
02436  M00S02433.coding  +++|         clearly defined function.
02437  M00S02434.coding  +++|
02438  M00S02435.coding  +++|     2.  10-Tag rule.  If there are more than 10 branching locations
02439  M00S02436.coding  +++|         within a routine, it is most likely attempting to perform
02440  M00S02437.coding  +++|         too many functions (see 1 above).  It should be considered a
02441  M00S02438.coding  +++|         candidate to be broken up into functional units.
02442  M00S02439.coding  +++|
02443  M00S02440.coding  +++|     3.  Code Modification.  Minimize within routines, avoid between
02444  M00S02441.coding  +++|         routines.  If used between routines, document thoroughly.
02445  M00S02442.coding  +++|
02446  M00S02443.coding  +++|     4.  Hidden Variables.  Data placed in a register with the hope
02447  M00S02444.coding  +++|         of being used at some later time often may not survive to
02448  M00S02445.coding  +++|         its destination.  Consider global variables for
02449  M00S02446.coding  +++|         inter-routine communication, especially when there are one
02450  M00S02447.coding  +++|         or more routines intervening.  In any case, all exit
02451  M00S02448.coding  +++|         conditions from a routine must be documented.
02452  M00S02449.coding  +++|
02453  M00S02450.coding  +++|     5.  Code for the Future.  Always consider the implications of
02454  M00S02451.coding  +++|         debugging, modification, and maintenance; structure code to
02455  M00S02452.coding  +++|         make these tasks easier.
02456  M00S02453.coding  +++|
02457  M00S02454.coding  +++|
02458  M00S02455.coding  +++| 4.0 MISCELLANEOUS
02459  M00S02456.coding  +++|
02460  M00S02457.coding  +++|
02461  M00S02458.coding  +++| 4.1 PROGRAM NAMING
02462  M00S02459.coding  +++|
02463  M00S02460.coding  +++|
02464  M00S02461.coding  +++| 4.1.1 LENGTH OF PROGRAM NAME
02465  M00S02462.coding  +++|
02466  M00S02463.coding  +++| Peripheral processor program names are 3 characters long.
02467  M00S02464.coding  +++|
02468  M00S02465.coding  +++| Central Processor program names are 4 to 7 characters long.
02469  M00S02466.coding  +++|
02470  M00S02467.coding  +++|
02471  M00S02468.coding  +++|1                                                           PAGE    49
02472  M00S02469.coding  +++|
02473  M00S02470.coding  +++|
02474  M00S02471.coding  +++| 4.1.2 RESERVED NAMES
02475  M00S02472.coding  +++|
02476  M00S02473.coding  +++| The following PP program names are reserved or presently defined for
02477  M00S02474.coding  +++| use (x means any character legal in a PP program name and n means
02478  M00S02475.coding  +++| any number between 0 - 9):
02479  M00S02476.coding  +++|
02480  M00S02477.coding  +++|         Uxx       Reserved for installations
02481  M00S02478.coding  +++|         nUx       Reserved for installations
02482  M00S02479.coding  +++|         9AA-9T9   Reserved for system use
02483  M00S02480.coding  +++|         9VA-9Z9   Reserved for system use
02484  M00S02481.coding  +++|         90A-929   Reserved for diagnostics
02485  M00S02482.coding  +++|         93A-939   Reserved for system use
02486  M00S02483.coding  +++|
02487  M00S02484.coding  +++| The following names are currently used by NOS:
02488  M00S02485.coding  +++|
02489  M00S02486.coding  +++|         6xx       Callable mass storage drivers
02490  M00S02487.coding  +++|         7xx       Mass storage error processing overlays
02491  M00S02488.coding  +++|         9AA-9D9   DSD overlays
02492  M00S02489.coding  +++|         9EA-9F9   DIS overlays
02493  M00S02490.coding  +++|         9GA-9G9   O26 overlays
02494  M00S02491.coding  +++|         0xx       Location free overlays
02495  M00S02492.coding  +++|         0Cx       Controlware identification processors
02496  M00S02493.coding  +++|         0Px       Pack number identification processors
02497  M00S02494.coding  +++|         0Tx       Automatic track flaw processors
02498  M00S02495.coding  +++|         UxxL      PPCOM symbol - reserved for installations
02499  M00S02496.coding  +++|         UxxM      PPCOM symbol - reserved for installations
02500  M00S02497.coding  +++|         UxxN      PPCOM symbol - reserved for installations
02501  M00S02498.coding  +++|         UxxP      PPCOM symbol - reserved for installations
02502  M00S02499.coding  +++|         UxxW      PPCOM symbol - reserved for installations
02503  M00S02500.coding  +++|
02504  M00S02501.coding  +++| In general, tags beginning with U should not be used as tags in
02505  M00S02502.coding  +++| NOSTEXT, COMSXXX decks, etc. or as macro names in COMCMAC, COMPMAC,
02506  M00S02503.coding  +++| etc.  These tags should be reserved for installation use.
02507  M00S02504.coding  +++|
02508  M00S02505.coding  +++|
02509  M00S02506.coding  +++| 4.1.3 COMMON DECK NAMES
02510  M00S02507.coding  +++|
02511  M00S02508.coding  +++| Common deck names are seven characters in length and in the
02512  M00S02509.coding  +++| following form:
02513  M00S02510.coding  +++|
02514  M00S02511.coding  +++|         COMxaaa
02515  M00S02512.coding  +++|
02516  M00S02513.coding  +++|1                                                           PAGE    50
02517  M00S02514.coding  +++|
02518  M00S02515.coding  +++|
02519  M00S02516.coding  +++| where:
02520  M00S02517.coding  +++|
02521  M00S02518.coding  +++|     aaa =     The name of the routine or a symbolic name if no
02522  M00S02519.coding  +++|               routine name.
02523  M00S02520.coding  +++|     X   =     One of the following common deck indicators:
02524  M00S02521.coding  +++|                    C = CPU code
02525  M00S02522.coding  +++|                    P = PP code
02526  M00S02523.coding  +++|                    S = Subsystem text symbols, constants etc.
02527  M00S02524.coding  +++|                    D = Display driver code
02528  M00S02525.coding  +++|                    T = Tables
02529  M00S02526.coding  +++|                    M = Mass storage error equivalents
02530  M00S02527.coding  +++|                    B = Data manager
02531  M00S02528.coding  +++|                    K = Transaction subsystem
02532  M00S02529.coding  +++|                    I = Initialization
02533  M00S02530.coding  +++|
02534  M00S02531.coding  +++| The following indicators are reserved for SYMPL common decks: A, E,
02535  M00S02532.coding  +++| U, Z.
02536  M00S02533.coding  +++|
02537  M00S02534.coding  +++|
02538  M00S02535.coding  +++| 4.2 CODE TRANSMITTAL RULES
02539  M00S02536.coding  +++|
02540  M00S02537.coding  +++| Code which is to be integrated into a system build for eventual
02541  M00S02538.coding  +++| release to the field is identified and formatted as described in
02542  M00S02539.coding  +++| this section.
02543  M00S02540.coding  +++|
02544  M00S02541.coding  +++|
02545  M00S02542.coding  +++| 4.2.1 GENERAL RULES
02546  M00S02543.coding  +++|
02547  M00S02544.coding  +++| Each external PSR being answered has a corresponding corrective code
02548  M00S02545.coding  +++| identifier (to be described later).  Corrective code answering other
02549  M00S02546.coding  +++| PSRs is not included in the modification under this identifier.
02550  M00S02547.coding  +++| Exceptions are allowed where required by interrelated modifications
02551  M00S02548.coding  +++| for several PSRs.
02552  M00S02549.coding  +++|
02553  M00S02550.coding  +++| Corrections are placed in ascending numerical order; i. e., the
02554  M00S02551.coding  +++| corrections are sorted in the same order that the lines being
02555  M00S02552.coding  +++| corrected appear on the program library.  If a single modification
02556  M00S02553.coding  +++| changes several decks, then the corrections are also sorted in the
02557  M00S02554.coding  +++| order that the decks appear on the program library.
02558  M00S02555.coding  +++|
02559  M00S02556.coding  +++| Corrections modifying lines with previously modified sequence
02560  M00S02557.coding  +++| numbers include the line number of the nearest preceding original
02561  M00S02558.coding  +++| line in parenthesis in the comments field of the modify directive.
02562  M00S02559.coding  +++|
02563  M00S02560.coding  +++|
02564  M00S02561.coding  +++| 4.2.2 MODSET FORMAT
02565  M00S02562.coding  +++|
02566  M00S02563.coding  +++|1                                                           PAGE    51
02567  M00S02564.coding  +++|
02568  M00S02565.coding  +++|
02569  M00S02566.coding  +++| 4.2.2.1 MODSET IDENTIFIER
02570  M00S02567.coding  +++|
02571  M00S02568.coding  +++| Separate modset name lists are maintained for NOS 1 (R5.5) and NOS 2
02572  M00S02569.coding  +++| (R6.0).  Processes for naming modsets are identical, except for
02573  M00S02570.coding  +++| multiple deck modsets (NS1xxx and NS2xxx), documentation modsets
02574  M00S02571.coding  +++| (DOK1xxx and DOK2xxx), and release feature modsets (FN1xxx and
02575  M00S02572.coding  +++| FN2xxx).  A modset named 1CD4 in NOS 1, for example, has no
02576  M00S02573.coding  +++| relationship to modset 1CD4 in NOS2.
02577  M00S02574.coding  +++|
02578  M00S02575.coding  +++| You should not sign up for a modset name until after code has been
02579  M00S02576.coding  +++| generated and tested, and depending on the size of the modset, even
02580  M00S02577.coding  +++| after code review has taken place.  This allows other analysts
02581  M00S02578.coding  +++| submitting code to get the next available modset name.  You should
02582  M00S02579.coding  +++| not request modset names for modsets not to be included in the
02583  M00S02580.coding  +++| current series of builds; you should not request feature modset
02584  M00S02581.coding  +++| names for a future release until feature code for the current
02585  M00S02582.coding  +++| release is complete.  If you sign up for a modset name and don't use
02586  M00S02583.coding  +++| it, notify Code Control so that the modset name can be used by
02587  M00S02584.coding  +++| someone else.
02588  M00S02585.coding  +++|
02589  M00S02586.coding  +++| The modset name consists of three to five alphanumeric characters
02590  M00S02587.coding  +++| which are extracted from the deck name followed by a 1 to 3 digit
02591  M00S02588.coding  +++| sequence number.  The modset name cannot exceed 7 characters.
02592  M00S02589.coding  +++|
02593  M00S02590.coding  +++| 1.  For common decks that begin with "COM" use the last four
02594  M00S02591.coding  +++|     characters of the name (example - CMAC4 is a modset in deck
02595  M00S02592.coding  +++|     COMCMAC).
02596  M00S02593.coding  +++|
02597  M00S02594.coding  +++| 2.  For PP programs use the three character program name (example -
02598  M00S02595.coding  +++|     CPM2 is a modset in deck CPM).
02599  M00S02596.coding  +++|
02600  M00S02597.coding  +++| 3.  All other decks use the first five characters of the deck name;
02601  M00S02598.coding  +++|     if the deck name is less than six characters use the entire deck
02602  M00S02599.coding  +++|     name (example - LIBED2 is a modset in deck LIBEDIT).
02603  M00S02600.coding  +++|
02604  M00S02601.coding  +++| 4.  Modifications which involve multiple decks are given the modset
02605  M00S02602.coding  +++|     name:
02606  M00S02603.coding  +++|               NS1xxx    if NOS 1,
02607  M00S02604.coding  +++|               NS2xxx    if NOS 2.
02608  M00S02605.coding  +++|
02609  M00S02606.coding  +++|     Example - NS1001 is a multiple deck modset in NOS 1.
02610  M00S02607.coding  +++|              NS2001 is a multiple deck modset in NOS 2.
02611  M00S02608.coding  +++|
02612  M00S02609.coding  +++| 5.  Modifications which only correct documentation within a deck are
02613  M00S02610.coding  +++|     gathered together for each corrective code release and given the
02614  M00S02611.coding  +++|     modset name:
02615  M00S02612.coding  +++|               DOK1xxx   if NOS 1,
02616  M00S02613.coding  +++|               DOK2xxx   if NOS 2.
02617  M00S02614.coding  +++|
02618  M00S02615.coding  +++|     Example - DOK1006 is a NOS 1 modset.
02619  M00S02616.coding  +++|               DOK2006 is a NOS 2 modset.
02620  M00S02617.coding  +++|
02621  M00S02618.coding  +++|1                                                           PAGE    52
02622  M00S02619.coding  +++|
02623  M00S02620.coding  +++|
02624  M00S02621.coding  +++|     This does not include lines of code which have documentation
02625  M00S02622.coding  +++|     changes in them.
02626  M00S02623.coding  +++|
02627  M00S02624.coding  +++| 6.  If a modset is adding a new feature, the feature modset name for
02628  M00S02625.coding  +++|     each deck modified is obtained from NOS Code Control.
02629  M00S02626.coding  +++|
02630  M00S02627.coding  +++| 7.  Upon release of the system, a "composite" modset is generated
02631  M00S02628.coding  +++|     from all feature code which is to be released.
02632  M00S02629.coding  +++|
02633  M00S02630.coding  +++|
02634  M00S02631.coding  +++| 4.2.2.2 MODSET CORRECTION LETTER
02635  M00S02632.coding  +++|
02636  M00S02633.coding  +++| When a modset is correcting a previous modset, one alphabetic
02637  M00S02634.coding  +++| character (starting with A) will be appended to the sequence
02638  M00S02635.coding  +++| number.  Whenever a modset correction letter of "B" or above is
02639  M00S02636.coding  +++| required, the comments header of the modset must indicate which
02640  M00S02637.coding  +++| previous modset is being corrected.
02641  M00S02638.coding  +++|
02642  M00S02639.coding  +++|
02643  M00S02640.coding  +++| 4.2.2.3 OVERFLOW
02644  M00S02641.coding  +++|
02645  M00S02642.coding  +++| Whenever a modset identifier using the above conventions exceeds
02646  M00S02643.coding  +++| seven characters, truncate the last character(s) of the deck name to
02647  M00S02644.coding  +++| reduce the identifier to seven characters.
02648  M00S02645.coding  +++|
02649  M00S02646.coding  +++|
02650  M00S02647.coding  +++| 4.2.2.4 MODSET EXAMPLE
02651  M00S02648.coding  +++|
02652  M00S02649.coding  +++| The following format is used for corrective code modsets:
02653  M00S02650.coding  +++|
02654  M00S02651.coding  +++|     1       11        18             30         (column numbers)
02655  M00S02652.coding  +++|     +-------+---------+--------------+
02656  M00S02653.coding  +++|
02657  M00S02654.coding  +++|     ident
02658  M00S02655.coding  +++|     *IDENT  ident     initials.      yy/mm/dd.
02659  M00S02656.coding  +++|     */      ****      system.
02660  M00S02657.coding  +++|     */      ****      PSR number.
02661  M00S02658.coding  +++|     */      ****      REQUIRES - modset.
02662  M00S02659.coding  +++|     */      *****     PROBLEM - problem description.
02663  M00S02660.coding  +++|     */      (continuation of problem description).
02664  M00S02661.coding  +++|     */
02665  M00S02662.coding  +++|     */      SOLUTION - solution description.
02666  M00S02663.coding  +++|     */      (continuation of solution description).
02667  M00S02664.coding  +++|     */
02668  M00S02665.coding  +++|     */      *****     RESUBMITTAL - yy/mm/dd.
02669  M00S02666.coding  +++|     */      Reason for resubmittal.
02670  M00S02667.coding  +++|     *DECK   deckname
02671  M00S02668.coding  +++|     *I,sequence number
02672  M00S02669.coding  +++|     *D,sequence number
02673  M00S02670.coding  +++|     *D,modname.sequence number       (nearest original seq. no.)
02674  M00S02671.coding  +++|     *EDIT   deckname                 (if common deck)
02675  M00S02672.coding  +++|     */      END OF MODSET.
02676  M00S02673.coding  +++|
02677  M00S02674.coding  +++|1                                                           PAGE    53
02678  M00S02675.coding  +++|
02679  M00S02676.coding  +++|
02680  M00S02677.coding  +++| Where:
02681  M00S02678.coding  +++|
02682  M00S02679.coding  +++|     ident             = Modset name.
02683  M00S02680.coding  +++|
02684  M00S02681.coding  +++|     initials          = Initials of the analyst(s) who wrote and/or
02685  M00S02682.coding  +++|                         tested the code.  Example - ABC. (one
02686  M00S02683.coding  +++|                         analyst) ABC/ADD. (two analysts)
02687  M00S02684.coding  +++|
02688  M00S02685.coding  +++|     yy/mm/dd          = Date of last modset change.
02689  M00S02686.coding  +++|
02690  M00S02687.coding  +++|     system            = Name of system in which the modset will be
02691  M00S02688.coding  +++|                         released.  (ie - NOS 1 OS.  Or NOS 2 OS.)
02692  M00S02689.coding  +++|
02693  M00S02690.coding  +++|     PSR number        = This line must always be present.  If more
02694  M00S02691.coding  +++|                         than one PSR is answered, list the PSR
02695  M00S02692.coding  +++|                         numbers on separate lines.  If no PSR is
02696  M00S02693.coding  +++|                         involved, use the phrase:  NO PSR.
02697  M00S02694.coding  +++|
02698  M00S02695.coding  +++|     modset            = The REQUIRES lines must always be present.
02699  M00S02696.coding  +++|                         If more than one modset is required (direct
02700  M00S02697.coding  +++|                         or indirect dependency), list the modsets on
02701  M00S02698.coding  +++|                         separate lines.  If no dependency is
02702  M00S02699.coding  +++|                         involved, use the phrase:  NONE.
02703  M00S02700.coding  +++|
02704  M00S02701.coding  +++| Since mods to mods in the same release are not allowed for PSR code
02705  M00S02702.coding  +++| (physically dependent code must be in the same modset), the REQUIRES
02706  M00S02703.coding  +++| should specify modsets with logical or space dependencies.  Modsets
02707  M00S02704.coding  +++| previously released in a standard system usually should not be
02708  M00S02705.coding  +++| included.  For initial transmittal of feature code, REQUIRES - NONE
02709  M00S02706.coding  +++| should be used.  For feature repair code, the REQUIRES should
02710  M00S02707.coding  +++| specify those modsets going into the same build that are dependent
02711  M00S02708.coding  +++| on each other.
02712  M00S02709.coding  +++|
02713  M00S02710.coding  +++| The problem description should describe the problem being fixed by
02714  M00S02711.coding  +++| the modset and the impact the problem has on the user.  The solution
02715  M00S02712.coding  +++| description should describe how the problem was fixed.  External
02716  M00S02713.coding  +++| interface changes caused by the installation of the modset should
02717  M00S02714.coding  +++| also be documented.  The problem/solution description may be
02718  M00S02715.coding  +++| combined into one paragraph to avoid redundancy.
02719  M00S02716.coding  +++|
02720  M00S02717.coding  +++| The *READPL directive is not used.
02721  M00S02718.coding  +++|
02722  M00S02719.coding  +++|
02723  M00S02720.coding  +++| 4.3 INTERFACE CONSIDERATIONS
02724  M00S02721.coding  +++|
02725  M00S02722.coding  +++|
02726  M00S02723.coding  +++|1                                                           PAGE    54
02727  M00S02724.coding  +++|
02728  M00S02725.coding  +++|
02729  M00S02726.coding  +++| 4.3.1 SYSTEM SUPPLIED INTERFACES
02730  M00S02727.coding  +++|
02731  M00S02728.coding  +++| All interactions between programs (CPU and PP) and the system use
02732  M00S02729.coding  +++| system-supplied macros, linkage labels or common decks.  In PP
02733  M00S02730.coding  +++| programs the system defined direct cells are only used as defined by
02734  M00S02731.coding  +++| the system.  (see section 3.5.3.1)
02735  M00S02732.coding  +++|
02736  M00S02733.coding  +++|
02737  M00S02734.coding  +++| 4.3.2 PARAMETER VALIDATION
02738  M00S02735.coding  +++|
02739  M00S02736.coding  +++| Each parameter passed between programs will be validated or
02740  M00S02737.coding  +++| processed in a way that protects the program from uncontrolled
02741  M00S02738.coding  +++| actions caused by unexpected values.
02742  M00S02739.coding  +++|
02743  M00S02740.coding  +++|
02744  M00S02741.coding  +++| 4.3.3 MEMORY ACCESS
02745  M00S02742.coding  +++|
02746  M00S02743.coding  +++| PP programs which access the field length of a job will insure that
02747  M00S02744.coding  +++| no combination of parameters, errors, etc. will cause access to an
02748  M00S02745.coding  +++| address outside of that field length.  Addresses should be validated
02749  M00S02746.coding  +++| prior to using them for a CM read or write to avoid referencing
02750  M00S02747.coding  +++| areas of memory outside of the control points field length.
02751  M00S02748.coding  +++|
02752  M00S02749.coding  +++| A PP program accessing the field length of a control point should
02753  M00S02750.coding  +++| insure the relative address does not exceed 377777B.
02754  M00S02751.coding  +++|
02755  M00S02752.coding  +++|
02756  M00S02753.coding  +++| 4.3.4 SECURITY
02757  M00S02754.coding  +++|
02758  M00S02755.coding  +++| Programs that perform privileged functions must insure that the
02759  M00S02756.coding  +++| requester of the function has been given permission by the system to
02760  M00S02757.coding  +++| use the function.  This also applies to the use of special device
02761  M00S02758.coding  +++| drivers, which could be called accidentally or maliciously by
02762  M00S02759.coding  +++| unauthorized users.  Where common decks are available to check
02763  M00S02760.coding  +++| security or privileges, they should be used rather than locally
02764  M00S02761.coding  +++| written code.
02765  M00S02762.coding  +++|
02766  M00S02763.coding  +++|
02767  M00S02764.coding  +++| 4.3.5 RESERVATIONS AND INTERLOCKS
02768  M00S02765.coding  +++|
02769  M00S02766.coding  +++| Reservations and interlocks are only used as defined by the system
02770  M00S02767.coding  +++| and are released as soon as possible.  Non-essential code is not
02771  M00S02768.coding  +++| executed while a reservation or interlock is in effect.
02772  M00S02769.coding  +++|
02773  M00S02770.coding  +++| In cases where a reservation reject could occur, the program will:
02774  M00S02771.coding  +++|
02775  M00S02772.coding  +++|     1.  Control the rate of reservation re-issue.
02776  M00S02773.coding  +++|     2.  Detect and respond to error conditions.
02777  M00S02774.coding  +++|     3.  Protect against storage move lockup.
02778  M00S02775.coding  +++|
02779  M00S02776.coding  +++|1                                                           PAGE    55
02780  M00S02777.coding  +++|
02781  M00S02778.coding  +++|
02782  M00S02779.coding  +++| Programs which use reservations and interlocks will insure that the
02783  M00S02780.coding  +++| conditions are released no matter what program path is taken.
02784  M00S02781.coding  +++|
02785  M00S02782.coding  +++| When multiple interlocks are required, all programs in the operating
02786  M00S02783.coding  +++| system must request the interlocks in the same order.  When a reject
02787  M00S02784.coding  +++| occurs when attempting to obtain such interlocks, all reservations
02788  M00S02785.coding  +++| held must be released and the entire sequence of interlocking must
02789  M00S02786.coding  +++| begin again.
02790  M00S02787.coding  +++|
02791  M00S02788.coding  +++| Care must be taken to not issue dayfile messages, load overlays, or
02792  M00S02789.coding  +++| pause with non-dedicated channel(s) reserved.
02793  M00S02790.coding  +++|
02794  M00S02791.coding  +++| A PP program must not have a disk channel reserved when it attempts
02795  M00S02792.coding  +++| to do an STBM or AFAM monitor function.  If necessary, a ENDMS
02796  M00S02793.coding  +++| should be performed to ensure this.
02797  M00S02794.coding  +++|
02798  M00S02795.coding  +++|
02799  M00S02796.coding  +++| 4.3.6 DOCUMENTING HARDWARE DEFICIENCIES
02800  M00S02797.coding  +++|
02801  M00S02798.coding  +++| Instructions which are included to compensate for hardware
02802  M00S02799.coding  +++| deficiencies are documented with a brief description or
02803  M00S02800.coding  +++| identification of the deficiency.
02804  M00S02801.coding  +++|
02805  M00S02802.coding  +++|
02806  M00S02803.coding  +++| 4.3.7 NEW FUNCTION/LOW CORE IDENTIFIERS
02807  M00S02804.coding  +++|
02808  M00S02805.coding  +++| New tags in PPCOM, use of previously reserved fields in CMR and CPA,
02809  M00S02806.coding  +++| new PP function numbers, new monitor function numbers, etc. must be
02810  M00S02807.coding  +++| signed up for via the DSO (Design Support Office).
02811  M00S02808.coding  +++|
02812  M00S02809.coding  +++|
02813  M00S02810.coding  +++| 4.3.8 DECK INTERDEPENDENCIES
02814  M00S02811.coding  +++|
02815  M00S02812.coding  +++| Beware of deck interdependencies which may require additional
02816  M00S02813.coding  +++| code/modsets, such as PPCOM and COMSXXX changes affecting DSDI, DIS
02817  M00S02814.coding  +++| changes that should also be made in XIS, and COMCXXX/COMDXXX/COMPXXX/
02818  M00S02815.coding  +++| COMSXXX/COMTXXX, etc. changes causing CALLCPU/CALLDIS/CALLPPU/
02819  M00S02816.coding  +++| CALLSYS/CALLTAB, etc. to not assemble without lots of errors.
02820  M00S02817.coding  +++|
02821  M00S02818.coding  +++|
02822  M00S02819.coding  +++| 4.4 MODULARITY
02823  M00S02820.coding  +++|
02824  M00S02821.coding  +++|
02825  M00S02822.coding  +++| 4.4.1 PP OVERLAYS
02826  M00S02823.coding  +++|
02827  M00S02824.coding  +++| PP Programs use overlays whenever possible to improve the long range
02828  M00S02825.coding  +++| performance of the system.  Overlays are used for any seldom
02829  M00S02826.coding  +++| executed code such as error handling and seldom used features.
02830  M00S02827.coding  +++|
02831  M00S02828.coding  +++|
02832  M00S02829.coding  +++|1                                                           PAGE    56
02833  M00S02830.coding  +++|
02834  M00S02831.coding  +++|
02835  M00S02832.coding  +++| 4.4.2 HELPER PP-S
02836  M00S02833.coding  +++|
02837  M00S02834.coding  +++| Helper PPs are not used unless no other method exists.  The
02838  M00S02835.coding  +++| availability of PPs when needed should be considered, since the use
02839  M00S02836.coding  +++| of helper PP's may lead to deadlocks if no PP's are available.
02840  M00S02837.coding  +++|
02841  M00S02838.coding  +++|
02842  M00S02839.coding  +++| 4.4.3 COMMON DECKS
02843  M00S02840.coding  +++|
02844  M00S02841.coding  +++| A common deck containing executable code consists of one or more
02845  M00S02842.coding  +++| subroutines (as defined in sections 3.2.6 and 3.2.7) and any
02846  M00S02843.coding  +++| associated data storage areas.  The purpose of common decks is to
02847  M00S02844.coding  +++| increase efficiency in writing code, insure uniformity of code and
02848  M00S02845.coding  +++| decrease debugging time.  Common decks contain optimized code and
02849  M00S02846.coding  +++| external interfaces that are generalized to facilitate their use in
02850  M00S02847.coding  +++| future programs.  These decks should be used in preference to local
02851  M00S02848.coding  +++| code whenever possible.
02852  M00S02849.coding  +++|
02853  M00S02850.coding  +++| Common Decks which contain only macros are not qualified.  "S" type
02854  M00S02851.coding  +++| common decks are not qualified by the QUAL pseudo-op within the
02855  M00S02852.coding  +++| common deck.  If an "S" type common deck is qualified externally,
02856  M00S02853.coding  +++| the qualifier is the three character name of the routine.  For
02857  M00S02854.coding  +++| example:
02858  M00S02855.coding  +++|
02859  M00S02856.coding  +++|               COMSaaa        (where aaa is the qualifier)
02860  M00S02857.coding  +++|
02861  M00S02858.coding  +++|
02862  M00S02859.coding  +++| 4.5 DAYFILE MESSAGES
02863  M00S02860.coding  +++|
02864  M00S02861.coding  +++| Dayfile messages issued to the user or system Dayfile begin with a
02865  M00S02862.coding  +++| blank character and end with a period.  Dayfile messages should not
02866  M00S02863.coding  +++| exceed 50 characters.  Abbreviations should be avoided when possible
02867  M00S02864.coding  +++| in dayfile messages.
02868  M00S02865.coding  +++|
02869  M00S02866.coding  +++| Informative messages should be issued to the user dayfile only
02870  M00S02867.coding  +++| (option 3 on the MESSAGE macro or the CPON option on the call to
02871  M00S02868.coding  +++| DFM).  Messages that indicate that the job will abort are the only
02872  M00S02869.coding  +++| informative user messages that should also be issued to the System
02873  M00S02870.coding  +++| Dayfile.  Special system programs (MODVAL, ISF, Subsystems, PF or
02874  M00S02871.coding  +++| Queue Utilities, etc.) are exceptions and may issue informative
02875  M00S02872.coding  +++| messages to the System Dayfile when necessary.
02876  M00S02873.coding  +++|
02877  M00S02874.coding  +++|
02878  M00S02875.coding  +++|1                                                           PAGE    57
02879  M00S02876.coding  +++|
02880  M00S02877.coding  +++|
02881  M00S02878.coding  +++| 4.6 UNHANGABLE CHANNEL CODE
02882  M00S02879.coding  +++|
02883  M00S02880.coding  +++| To avoid channel hangs, bit 2**5 is set on some PP channel
02884  M00S02881.coding  +++| instructions.  This should only be used when undesirable side
02885  M00S02882.coding  +++| affects will not result and where it is possible to take corrective
02886  M00S02883.coding  +++| action.  (For example: disconnecting an inactive channel will not
02887  M00S02884.coding  +++| result in undesirable effects.)  Bit 2**5 should not be used when
02888  M00S02885.coding  +++| unpredictable results may occur.  Bit 2**5 is not used with channel
02889  M00S02886.coding  +++| 15.
02890  M00S02887.coding  +++|
02891  M00S02888.coding  +++| Example:
02892  M00S02889.coding  +++|               IJM    tag1,CH      IF CHANNEL DISCONNECTED
02893  M00S02890.coding  +++|               DCN    CH+4O        DISCONNECT CHANNEL
02894  M00S02891.coding  +++|               RJM    ERP          PROCESS ERROR
02895  M00S02892.coding  +++|     tag1       .
02896  M00S02893.coding  +++|                .
02897  M00S02894.coding  +++|                .
02898  M00S02895.coding  +++|
02899  M00S02896.coding  +++|
02900  M00S02897.coding  +++| 4.7 SPECIAL ENTRY POINTS
02901  M00S02898.coding  +++|
02902  M00S02899.coding  +++| Special entry points defined by NOS include:
02903  M00S02900.coding  +++|
02904  M00S02901.coding  +++|     ARG=      Inhibit argument processing
02905  M00S02902.coding  +++|     CLB=      Command line buffer
02906  M00S02903.coding  +++|     DMP=      Allow special system processing
02907  M00S02904.coding  +++|     LDR=      Loader processing
02908  M00S02905.coding  +++|     MFL=      Minimum field length
02909  M00S02906.coding  +++|     RFL=      Running field length
02910  M00S02907.coding  +++|     SDM=      Suppress dayfile message
02911  M00S02908.coding  +++|     SSJ=      Special system job
02912  M00S02909.coding  +++|     SSM=      Secure system memory
02913  M00S02910.coding  +++|     VAL=      Validation program
02914  M00S02911.coding  +++|
02915  M00S02912.coding  +++| To insure proper loading and execution of special entry point
02916  M00S02913.coding  +++| programs, special entry points must be declared after normal entry
02917  M00S02914.coding  +++| points.
02918  M00S02915.coding  +++|
02919  M00S02916.coding  +++| EXAMPLE:
02920  M00S02917.coding  +++|
02921  M00S02918.coding  +++|     IDENT     FWA
02922  M00S02919.coding  +++|     ABS
02923  M00S02920.coding  +++|     ENTRY     ABC
02924  M00S02921.coding  +++|     ENTRY     XYZ
02925  M00S02922.coding  +++|     ENTRY     RFL=
02926  M00S02923.coding  +++|     ENTRY     SSJ=
02927  M00S02924.coding  +++|     SYSCOM    B1
02928  M00S02925.coding  +++|        .
02929  M00S02926.coding  +++|        .
02930  M00S02927.coding  +++|        .
02931  M00S02928.coding  +++|
02932  M00S02929.coding  +++|
02933  M00S02930.coding  +++|1                                                           PAGE    58
02934  M00S02931.coding  +++|
02935  M00S02932.coding  +++|
02936  M00S02933.coding  +++| 4.8  SCRATCH FILE NAMES.
02937  M00S02934.coding  +++|
02938  M00S02935.coding  +++| Programs requiring temporary scratch files will use the names
02939  M00S02936.coding  +++| ZZZZZG0 - ZZZZZG9 as names for scratch files.  Programs which
02940  M00S02937.coding  +++| require more than these 10 scratch file names must resolve the
02941  M00S02938.coding  +++| required file names with Systems Design.  Such scratch files must
02942  M00S02939.coding  +++| always be returned at program termination.
02943  M00S02940.coding  +++|
02944  M00S02941.coding  +++|
02945  M00S02942.coding  +++|1                                                           PAGE    59
02946  M00S02943.coding  +++|
02947  M00S02944.coding  +++|
02948  M00S02945.coding  +++| APPENDIX A - ABBREVIATIONS
02949  M00S02946.coding  +++|
02950  M00S02947.coding  +++| Standard industry abbreviations and programming language names may
02951  M00S02948.coding  +++| be used even though they are not included in the following appendix.
02952  M00S02949.coding  +++|
02953  M00S02950.coding  +++| A.1 GENERAL ABBREVIATIONS
02954  M00S02951.coding  +++|
02955  M00S02952.coding  +++|        BML     binary maintenance log
02956  M00S02953.coding  +++|        BOI     beginning of information
02957  M00S02954.coding  +++|        CLT     common library table
02958  M00S02955.coding  +++|        CM      central memory
02959  M00S02956.coding  +++|        CME     central memory extension
02960  M00S02957.coding  +++|        CMM     common memory manager
02961  M00S02958.coding  +++|        CMR     central memory resident
02962  M00S02959.coding  +++|        CMU     compare/move unit
02963  M00S02960.coding  +++|        CP      control point
02964  M00S02961.coding  +++|        CPA     control point area address
02965  M00S02962.coding  +++|        CPU     central processing unit
02966  M00S02963.coding  +++|        CR      carriage return
02967  M00S02964.coding  +++|        CSU     cartridge storage unit
02968  M00S02965.coding  +++|        CW      control word
02969  M00S02966.coding  +++|        DAT     device access table
02970  M00S02967.coding  +++|        DIT     device interlock table
02971  M00S02968.coding  +++|        ECS     extended core storage
02972  M00S02969.coding  +++|        ESM     extended semi conductor memory
02973  M00S02970.coding  +++|        EJT     executing job table
02974  M00S02971.coding  +++|        EJTO    executing job table ordinal
02975  M00S02972.coding  +++|        EM      extended memory
02976  M00S02973.coding  +++|        EOF     end of file
02977  M00S02974.coding  +++|        EOI     end of information
02978  M00S02975.coding  +++|        EOL     end of line
02979  M00S02976.coding  +++|        EOR     end of record
02980  M00S02977.coding  +++|        EOS     end of stream
02981  M00S02978.coding  +++|        EPD     entry point directory
02982  M00S02979.coding  +++|        EST     equipment status table
02983  M00S02980.coding  +++|        FOT     family ordinal table
02984  M00S02981.coding  +++|        ETX     end of text
02985  M00S02982.coding  +++|        FDX     full duplex
02986  M00S02983.coding  +++|        FET     file enviroment table
02987  M00S02984.coding  +++|        FL      field length
02988  M00S02985.coding  +++|        FLE     field length for extended memory
02989  M00S02986.coding  +++|        FLPP    first level PPU
02990  M00S02987.coding  +++|        FNT     file name table
02991  M00S02988.coding  +++|        FST     file status table
02992  M00S02989.coding  +++|        FWA     first word address
02993  M00S02990.coding  +++|        HDX     half duplex
02994  M00S02991.coding  +++|        ID      identifier or identification
02995  M00S02992.coding  +++|        I/O     input/output
02996  M00S02993.coding  +++|        JCB     job control block
02997  M00S02994.coding  +++|        JSN     job sequence name
02998  M00S02995.coding  +++|        LCME    large core memory extended
02999  M00S02996.coding  +++|
03000  M00S02997.coding  +++|1                                                           PAGE    60
03001  M00S02998.coding  +++|
03002  M00S02999.coding  +++|
03003  M00S03000.coding  +++|        LFN     logical file name
03004  M00S03001.coding  +++|        LWA     last word address
03005  M00S03002.coding  +++|        MID     machine identification
03006  M00S03003.coding  +++|        MMF     multi-mainframe
03007  M00S03004.coding  +++|        MRT     machine recovery table
03008  M00S03005.coding  +++|        MS      mass storage
03009  M00S03006.coding  +++|        MSA     mass storage adaptor
03010  M00S03007.coding  +++|        MST     mass storage table
03011  M00S03008.coding  +++|        MST     mass storage transport (do not use abbreviation where
03012  M00S03009.coding  +++|                confusion with Mass Storage Table may result)
03013  M00S03010.coding  +++|        MT      magnetic tape
03014  M00S03011.coding  +++|        MUX     multiplexer
03015  M00S03012.coding  +++|        NFL     negative field length
03016  M00S03013.coding  +++|        PF      permanent file
03017  M00S03014.coding  +++|        PFC     permanent file catalog
03018  M00S03015.coding  +++|        PFN     permanent file name
03019  M00S03016.coding  +++|        PLD     peripheral library directory
03020  M00S03017.coding  +++|        PP      peripheral processor
03021  M00S03018.coding  +++|        PPU     first-level peripheral processor; only on CYBER 176
03022  M00S03019.coding  +++|                (also known as FLPP)
03023  M00S03020.coding  +++|        PRU     physical record unit
03024  M00S03021.coding  +++|        PST     program status table
03025  M00S03022.coding  +++|        QFT     queued file table
03026  M00S03023.coding  +++|        RA      reference address
03027  M00S03024.coding  +++|        RAE     reference address for extended memory
03028  M00S03025.coding  +++|        RCL     resident central library
03029  M00S03026.coding  +++|        RPL     resident peripheral library
03030  M00S03027.coding  +++|        RMS     rotating mass storage
03031  M00S03028.coding  +++|        SCP     system control point
03032  M00S03029.coding  +++|        SCR     status and control register
03033  M00S03030.coding  +++|        SECDED  single error correction, double error detection
03034  M00S03031.coding  +++|        SUBCP   subcontrol point
03035  M00S03032.coding  +++|        TRT     track reservation table
03036  M00S03033.coding  +++|        TTY     teletype
03037  M00S03034.coding  +++|        UCP     user control point
03038  M00S03035.coding  +++|        UEM     unified extended memory for 8X5
03039  M00S03036.coding  +++|        UDT     unit descriptor table
03040  M00S03037.coding  +++|        UJN     user job name
03041  M00S03038.coding  +++|        VSN     volume serial number
03042  M00S03039.coding  +++|
03043  M00S03040.coding  +++|
03044  M00S03041.coding  +++| A.2 NETWORK HOST PRODUCTS ABBREVIATIONS
03045  M00S03042.coding  +++|
03046  M00S03043.coding  +++|        ABH     application block header
03047  M00S03044.coding  +++|        ABL     application block limit
03048  M00S03045.coding  +++|        ABN     application block number
03049  M00S03046.coding  +++|        ABT     application block type
03050  M00S03047.coding  +++|        ACK     block acknowledged
03051  M00S03048.coding  +++|        ACN     application connection number
03052  M00S03049.coding  +++|        ACT     application character type
03053  M00S03050.coding  +++|        ADR     address information
03054  M00S03051.coding  +++|
03055  M00S03052.coding  +++|1                                                           PAGE    61
03056  M00S03053.coding  +++|
03057  M00S03054.coding  +++|
03058  M00S03055.coding  +++|        ALN     application list number
03059  M00S03056.coding  +++|        CLA     communications line adapter
03060  M00S03057.coding  +++|        IBU     input block undeliverable
03061  M00S03058.coding  +++|        IVT     interactive virtual terminal
03062  M00S03059.coding  +++|        LCF     local configuration file
03063  M00S03060.coding  +++|        LOP     local operator
03064  M00S03061.coding  +++|        NAK     block not acknowledged
03065  M00S03062.coding  +++|        NCF     network configuration file
03066  M00S03063.coding  +++|        NDL     network definition language
03067  M00S03064.coding  +++|        NFE     no format effectors
03068  M00S03065.coding  +++|        NOP     network operator
03069  M00S03066.coding  +++|        NPU     network processing unit
03070  M00S03067.coding  +++|        PFC     primary function code
03071  M00S03068.coding  +++|        SFC     secondary function code
03072  M00S03069.coding  +++|        SM      supervisory message
03073  M00S03070.coding  +++|        SMP     supervisory message processor
03074  M00S03071.coding  +++|        TA      text area
03075  M00S03072.coding  +++|        TLC     text length characters
03076  M00S03073.coding  +++|        TLMAX   maximum length of data message block text
03077  M00S03074.coding  +++|        TNAME   terminal name
03078  M00S03075.coding  +++|
03079  M00S03076.coding  +++|
03080  M00S03077.coding  +++| A.3 ACRONYMS
03081  M00S03078.coding  +++|
03082  M00S03079.coding  +++|        AIP     Application Interface Program
03083  M00S03080.coding  +++|        BIO     Batchio
03084  M00S03081.coding  +++|        CDCS    CYBER Database Control System
03085  M00S03082.coding  +++|        CRM     Cyber Record Manager
03086  M00S03083.coding  +++|        FSE     Full Screen Editor
03087  M00S03084.coding  +++|        IAF     Interactive Facility
03088  M00S03085.coding  +++|        LCN     Loosely Coupled Network
03089  M00S03086.coding  +++|        MAG     Magnet
03090  M00S03087.coding  +++|        MAP     Matrix Array Processor
03091  M00S03088.coding  +++|        MCS     Message Control System
03092  M00S03089.coding  +++|        MSF     Mass Storage Facility
03093  M00S03090.coding  +++|        MSS     Mass Storage Subsystem
03094  M00S03091.coding  +++|        NAM     Network Access Method
03095  M00S03092.coding  +++|        NOS     Network Operating System
03096  M00S03093.coding  +++|        NVE     Network Validation Facility
03097  M00S03094.coding  +++|        RBF     Remote Batch Facility
03098  M00S03095.coding  +++|        RDF     Remote Diagnostic Facility
03099  M00S03096.coding  +++|        RHF     Remote Host Facility
03100  M00S03097.coding  +++|        SMF     Screen Management Facility
03101  M00S03098.coding  +++|        SSF     Scope Station Facility
03102  M00S03099.coding  +++|        STM     Stimulator
03103  M00S03100.coding  +++|        TAF     Transaction Facility
03104  M00S03101.coding  +++|        TIP     Terminal Interface Program
03105  M00S03102.coding  +++|        TVF     Terminal Verification Facility
03106  M00S03103.coding  +++|
03107  M00S03104.coding  +++|1                                                           PAGE    62
03108  M00S03105.coding  +++|
03109  M00S03106.coding  +++|
03110  M00S03107.coding  +++| APPENDIX B - ERROR MESSAGE GUIDELINES
03111  M00S03108.coding  +++|
03112  M00S03109.coding  +++| The following general principles are to be observed in designing
03113  M00S03110.coding  +++| future error messages for NOS.  Existing messages should be improved
03114  M00S03111.coding  +++| as opportunities arise.  These guidelines will be formalized in a
03115  M00S03112.coding  +++| later Usability Design Direction Document.
03116  M00S03113.coding  +++|
03117  M00S03114.coding  +++| 1.  The purpose of an error message is to inform the user how to
03118  M00S03115.coding  +++|     correct a problem.
03119  M00S03116.coding  +++|
03120  M00S03117.coding  +++|     Discussion:  It helps to view error messages as prompts: not
03121  M00S03118.coding  +++|     "this is what you did wrong" but "this is how to do it right."
03122  M00S03119.coding  +++|     Messages should be phrased positively.  The words "ILLEGAL",
03123  M00S03120.coding  +++|     "INVALID", and "SYNTAX" are specifically not permitted in NOS
03124  M00S03121.coding  +++|     messages.  Of course, there are other ways to phrase unhelpful,
03125  M00S03122.coding  +++|     negative messages; but these three words are singled out for
03126  M00S03123.coding  +++|     extinction for being so frequently seen in the company of
03127  M00S03124.coding  +++|     usability offenders.
03128  M00S03125.coding  +++|
03129  M00S03126.coding  +++| 2.  A single message should diagnose a single error.
03130  M00S03127.coding  +++|
03131  M00S03128.coding  +++|     Discussion:  For example, if the meaning of message is "more
03132  M00S03129.coding  +++|     than seven characters or leading non-alphabetic character or
03133  M00S03130.coding  +++|     null identifier" it should be three messages.  Usually, the code
03134  M00S03131.coding  +++|     must make three separate tests, so it is easy to be precise.  An
03135  M00S03132.coding  +++|     exception is when a common deck returns an error status which
03136  M00S03133.coding  +++|     could have resulted from several different conditions.
03137  M00S03134.coding  +++|
03138  M00S03135.coding  +++| 3.  An error message is friendly if it is business-like and
03139  M00S03136.coding  +++|     informative.
03140  M00S03137.coding  +++|
03141  M00S03138.coding  +++|     Discussion:  Cute, funny, or flippant messages are to be
03142  M00S03139.coding  +++|     avoided, as they seldom diagnose accurately and always wear
03143  M00S03140.coding  +++|     quickly.  Messages should be directed at the process and not the
03144  M00S03141.coding  +++|     person.
03145  M00S03142.coding  +++|
03146  M00S03143.coding  +++| 4.  Messages must be written plainly, using terms already known to
03147  M00S03144.coding  +++|     the user.
03148  M00S03145.coding  +++|
03149  M00S03146.coding  +++|     Discussion:  Messages should use terms which are either
03150  M00S03147.coding  +++|     self-defining or natural to the process.  All words should be
03151  M00S03148.coding  +++|     part of the external user interface, like "file name" instead of
03152  M00S03149.coding  +++|     "LFN" (unless LFN is an external parameter).
03153  M00S03150.coding  +++|
03154  M00S03151.coding  +++| 5.  Messages must be written in English.
03155  M00S03152.coding  +++|
03156  M00S03153.coding  +++|     Discussion:  Messages should follow normal rules for English
03157  M00S03154.coding  +++|     grammar and punctuation, although "pidgin English" -- the
03158  M00S03155.coding  +++|     omission of selected subjects, verbs or objects in the interest
03159  M00S03156.coding  +++|     of brevity where the meaning is clear - is acceptable.  Messages
03160  M00S03157.coding  +++|     should not be written in octal, or in other forms of scientific
03161  M00S03158.coding  +++|     notation.  Note that the asterisk is not an English punctuator.
03162  M00S03159.coding  +++|1                                                           PAGE    63
03163  M00S03160.coding  +++|
03164  M00S03161.coding  +++|
03165  M00S03162.coding  +++|
03166  M00S03163.coding  +++| 6.  Messages should be self-contained.
03167  M00S03164.coding  +++|
03168  M00S03165.coding  +++|     Discussion:  If you need to tell a story, tell the whole story.
03169  M00S03166.coding  +++|     Avoid references, as they are difficult to keep up-to-date and
03170  M00S03167.coding  +++|     are often no more helpful then a good one-line message would be.
03171  M00S03168.coding  +++|
03172  M00S03169.coding  +++| 7.  Error messages should point directly to the source of the
03173  M00S03170.coding  +++|     trouble.
03174  M00S03171.coding  +++|
03175  M00S03172.coding  +++|     Discussion:  For example, "FILE NOT FOUND" is better put as
03176  M00S03173.coding  +++|     "FILE XYZ NOT FOUND", "EXPECTING COMMA OR PERIOD AFTER 'ABC'" is
03177  M00S03174.coding  +++|     much clearer than "SYNTAX ERROR".  In general, the technique of
03178  M00S03175.coding  +++|     echoing back part of the user input as part of the message is
03179  M00S03176.coding  +++|     better than the use of internal names or parameter keywords
03180  M00S03177.coding  +++|     which the user may not recognize.
03181  M00S03178.coding  +++|
03182  M00S03179.coding  +++| 8.  Interactive error messages should appear as soon as possible
03183  M00S03180.coding  +++|     after an error is committed.
03184  M00S03181.coding  +++|
03185  M00S03182.coding  +++|     Discussion:  Each interactive input should be completely and
03186  M00S03183.coding  +++|     fully validated as soon as it is received.  In no event should a
03187  M00S03184.coding  +++|     user be led down the garden path to enter a long series of input
03188  M00S03185.coding  +++|     only to be advised that it is all wrong because the first part
03189  M00S03186.coding  +++|     was wrong.
03190  M00S03187.coding  +++|
03191  M00S03188.coding  +++| 9.  No messages at all should appear for trivial, correctable errors
03192  M00S03189.coding  +++|     - nor should they be errors.
03193  M00S03190.coding  +++|
03194  M00S03191.coding  +++|     Discussion:  Errors such as missing or redundant terminators
03195  M00S03192.coding  +++|     should not be errors at all.  If a reasonable assumption can be
03196  M00S03193.coding  +++|     made as to the intent of an input, it should be acted upon as
03197  M00S03194.coding  +++|     though it were "valid".  No error diagnostic should be produced
03198  M00S03195.coding  +++|     for these cases.  If it is not perfectly clear what assumption
03199  M00S03196.coding  +++|     was made, the assumption was probably not reasonable to begin
03200  M00S03197.coding  +++|     with.
03201  M00S03198.coding  +++|
03202  M00S03199.coding  +++| 10. An error message must clearly signal that an error has occurred.
03203  M00S03200.coding  +++|
03204  M00S03201.coding  +++|     Discussion:  An error message must not be phrased in such a way
03205  M00S03202.coding  +++|     as to be confused with a merely informative message.  Also, a
03206  M00S03203.coding  +++|     message should indicate the gravity and extent of the error, as
03207  M00S03204.coding  +++|     when an error in a list inhibits processing of the remainder of
03208  M00S03205.coding  +++|     the list.
03209  M00S03206.coding  +++|
03210  M00S03207.coding  +++|1                                                           PAGE    64
03211  M00S03208.coding  +++|
03212  M00S03209.coding  +++|
03213  M00S03210.coding  +++| APPENDIX C   DOCUMENTATION/USABILITY GUIDELINES
03214  M00S03211.coding  +++|
03215  M00S03212.coding  +++|
03216  M00S03213.coding  +++| 1.  COMMAND should be used instead of CONTROL STATEMENT or CONTROL
03217  M00S03214.coding  +++|     CARD.
03218  M00S03215.coding  +++|
03219  M00S03216.coding  +++| 2.  INCORRECT should be used rather than ILLEGAL or INVALID (refer
03220  M00S03217.coding  +++|     to Appendix B item 1).
03221  M00S03218.coding  +++|
03222  M00S03219.coding  +++| 3.  USER should be used instead of ACCOUNT.
03223  M00S03220.coding  +++|
03224  M00S03221.coding  +++| 4.  USER NAME should be used instead of USER NUMBER or ACCOUNT
03225  M00S03222.coding  +++|     NUMBER.
03226  M00S03223.coding  +++|
03227  M00S03224.coding  +++| 5.  EXTENDED MEMORY should be used rather than ECS.
03228  M00S03225.coding  +++|
03229  M00S03226.coding  +++| 6.  MONITOR REQUEST should be used rather than RA+1 CALL.
03230  M00S03227.coding  +++|
03231  M00S03228.coding  +++| 7.  EST ORDINAL or DEVICE should be used instead of EQUIPMENT NUMBER
03232  M00S03229.coding  +++|     or EQUIPMENT.
03233  M00S03230.coding  +++|
03234  M00S03231.coding  +++| 8.  English variables such as file name rather than filenam should
03235  M00S03232.coding  +++|     be used to remove the shorthand notation of using variable names
03236  M00S03233.coding  +++|     that are the same length as the maximum entry.
03237  M00S03234.coding  +++|
03238  M00S03235.coding  +++| 9.  Documentation, messages, etc. should avoid the use of sexist
03239  M00S03236.coding  +++|     language (he, she, him, her, etc.).
03240  M00S03237.coding  +++|
03241  M00S03238.coding  +++|*WEOR
cdc/nos2.source/opl.opl871/deck/coding.001.txt ยท Last modified: (external edit)