*DECK S$ERMSG 
          IDENT  S$ERMSG
          COMMENT  CONTAINS ERROR MESSAGE TABLE 
          SPACE  5
**    S$ERMSG -  ERROR MESSAGE TABLE AND LOOKUP 
* 
*     CALLING SEQUENCE- 
*         S$ERMSG(ERNUM,SEVERITY,LENGTH,LINE) 
*     GIVEN-
*         ERNUM -  ERROR NUMBER 
*     OUTPUT PARAMETERS-
*         SEVERITY -  SEVERITY OF ERROR MESSAGE (20,30,40,50) FOR (T,W,F,C) 
*         LENGTH   -  LENGTH OF MESSAGE IN CHARACTERS 
*         LINE     -  START ADDRESS OF THE MESSAGE TEXT 
*     DOES- 
*         PASSES THE SEVERITY,LENTGH AND TEXT ADDRESS TO THE CALLING ROUTINE
*     ORGANIZATION- 
*WHEN THE MACRO M IS CALLED AS M,ERNUM,SEVERITY,(TEXT) THEN 
*         VFD  6/0,18/SEVERITY,18/LENGTH,18/TEXTADDRESS IS GENERATED IN THE 
*         NOMINAL BLOCK, ADDRESSED BY DIRCT+ERNUM.
*         TEXTADDRESS IS THE FIRST ADDRESS OF THE ERROR TEXT, GENERATED IN THE
*         BLOCK MESS. 
*         A LINE TERMINATOR OF 12 ZERO BITS IS GENERATED AFTER CONSECUTIVE PARTS
*         OF THE TEXT CONSISTING OF 72 CHARACTERS.
*         IF S$ERMSG IS CALLED AND THE MESSAGE IS NOT FILLED IN THEN IT RETURNS 
*         THE MESSAGE:  SORT5 ERROR NR <ERNUM> AND A WARNING SEVERITY.
* 
 DMAX     EQU    200
 T        EQU    20           TRIVIAL 
 W        EQU    30           WARNING 
 F        EQU    40           FATAL 
 C        EQU    50           CATASTROPHIC
* 
 M        MACRO  P1,P2,P3 
 LP       MICRO  1,,*(* 
 RP       MICRO  1,,*)* 
 N        MICRO  1,,#_P3_#
 CC       MICCNT N
 TT       SET    1
 RM       SET    CC 
          IF     -DEF,P2,1
          ERR    SPECIFY SEVERITY RIGHTLY 
          ORG    DIRCT+P1 
          USE    MESS 
 L        SET    *
          IFEQ   RM,0,3 
 CC       SET    10 
          DATA   10H
          SKIP   13 
          DUP    100
 GN1      IFGT   RM,0 
 SLICE    MICRO  TT,71,*"N"*
 SLICE    MICRO  1,78,* "SLICE"      *
 GN2      IFGT   RM,71
          DIS    ,*"SLICE"* 
 CC       SET    CC+9 
 GN2      ELSE
          DATA   H*"SLICE"* 
 CC       SET    CC+1 
          STOPDUP 
 GN2      ENDIF 
 TT       SET    TT+71
 RM       SET    RM-71
 GN1      ENDIF 
          ENDD
          USE    0
          VFD    6/0,18/P2,18/CC,18/L 
 LP       MICRO  1,,*"QT"LP"QT"*
 RP       MICRO  1,,*"QT"RP"QT"*
          ENDM
* 
 QT       MICRO  1,,*"* 
 LP       MICRO  1,,*"QT"LP"QT"*
 RP       MICRO  1,,*"QT"RP"QT"*
          USE    0
          ENTRY  S$ERMSG
S$ERMSG   DATA    0 
          SB1    1
          SA2    X1           X2 = VALUE ERNUM
          SX7    X2 
          NG     X7,S$ERMSG   YOU NEVER KNOW
          SX0    X7-DMAX
          NG     X0,L10 
          SX7    DMAX 
 L10      SA2    X7+DIRCT     ENTRY IN DIRECTORY
          SB4    A2           REMEMBER ENTRY
          SB2    X2-MISSING 
          NE     B2,B0,L20    JUMP IF MESSAGE FILLED IN 
          SA2    BLANK
          BX6    X2 
          MX2    54 
          SX5    1S20/10+1
 REP      LX6    54 
          BX1    X7 
          IX1    X1*X5
          AX1    20           X1/10 
          BX4    X1           N/10  *1
          LX4    2                  *2
          IX0    X1+X4              *5
          LX0    1                  *10 
          IX0    X7-X0        N-(N/10*10) 
          SX3    X0+33B       DISPLAY DECIMAL 
          BX6    X2*X6        REMOVE RIGHTMOST BLANK
          BX6    X6+X3        ADD CHARACTER 
          BX7    X1           REPLACE N BY N/10 
          SB2    X7 
          GT     B2,B0,REP
          LX6    54 
          SA2    B4           ENTRY IN DIRECTORY
          SA6    MISSING+2
 L20      SA3    A1+B1        X3 = ADDRESS RECEIVING SEVERITY 
          SA4    A3+B1        X4 = ADDRESS RECEIVING LENGTH 
          SA5    A4+B1        A5 = ADDRESS RECEIVING TEXT ADDRESS 
          SX6    X2           ADDRESS OF MESSAGE
          SA6    X5+B0
          AX2    18 
          SX6    X2           LENGTH
          SA6    X4+B0
          AX2    18 
          SX6    X2           SEVERITY
          SA6    X3+B0
          EQ     S$ERMSG
* 
 BLANK    DATA   10H
 MISSING  DATA   H* SORT5 ERROR NR* 
          BSS    1
* 
 DIRCT    BSS    0
          DUP    DMAX+1,1 
          VFD    6/0,18/30,18/30,18/MISSING 
* 
          USE    MESS 
 MESS     BSS    0
* 
* 
* 
  M 01,F,(A SPACE OR , EXPECTED)
  M 02,C,(CHARACTERS OUTSIDE A STRING OR NAME MUST BE A LETTER DIGIT "RP
," = "LP" ' , OR SPACE) 
  M 03,F,(A VALUE SHOULD FOLLOW THIS KEYWORD) 
  M 04,C,(UNDEFINED COLLATING SEQUENCE) 
  M 05,F,(CHARACTER AFTER KEYWORD MUST BE SPACE OR =) 
  M 06,F,(INVALID KEYWORD DETECTED) 
  M 07,F,(UNLESS IN A STRING, = SHOULD FOLLOW ONLY A KEYWORD) 
  M 08,F,(DUPLICATE COLLATING SEQUENCE NAME FOUND)
  M 09,F,(( ) MUST ENCLOSE A VALUE) 
  M 10,F,(CHARACTER AFTER = MUST BE LETTER, DIGIT "LP" $ ' OR SPACE)
  M 11,F,(THIS VALUE SHOULD BE A STRING (DELIMITED WITH 'S))
  M 13,F,(THIS COMMA SHOULD BE FOLLOWED BY A LETTER, DIGIT, SPACE, OR ( 
  M 14,F,(THIS CHARACTER MUST BE A LETTER, DIGIT "LP" ' OR ,) 
  M 15,F,(TOO MANY PARAMETER POSITIONS HAVE BEEN SPECIFIED) 
  M 17,F,(CHARACTER AFTER "RP" MUST BE SPACE "RP" OR ,) 
  M 18,F,(CHARACTER AFTER "LP" MUST BE A LETTER, DIGIT $ ' "LP" OR SPACE
,)
  M 19,F,(THE HIGH AND LOW VALUES OF THIS RANGE MUST BE AN INTEGER, R1, 
,R2, R3,  R1G, EF OR EFG) 
  M 20,F,(THE HIGH AND LOW VALUES OF THIS RANGE MUST BE A STRING) 
  M 21,F,(CHARACTER FOLLOWING AN INTEGER MUST BE "RP" .. , SPACE OR LETT
,ER)
  M 22,F,(POSITIONAL VALUES ARE NOT ALLOWED IN A VALUE-SET) 
  M 23,W,(A PERIOD CANNOT BE USED IN A PARAMETER-LIST)
  M 24,F,(A RANGE IS ONLY ALLOWED AS A VALUE FOR ENR, KEY OR SUM PARAMET
,ERS) 
  M 25,F,(UNLESS $CHAR(N) IS USED, ONLY ONE SET OF NESTED PARENTHESES 
,IS       ALLOWED)
  M 26,W,(UNLESS WITHIN A STRING, NEITHER . NOR = IS ALLOWED WITHIN A VA
,LUE SET) 
  M 27,F,(THIS VALUE SHOULD BE A FILE OR PROC NAME) 
  M 29,F,(PARENTHESES MUST BE MATCHED IN THE PARAMETER-LIST)
  M 30,F,(TOO FEW SETS GIVEN FOR THE KEYWORD ENDED HERE)
  M 31,F,(TOO MANY VALUE-SETS GIVEN FOR THIS KEYWORD-VALUE-LIST)
  M 32,F,(THIS VALUE SHOULD BE AN INTEGER)
  M 33,F,(TOO MANY VALUES SPECIFIED IN THIS VALUE-SET)
  M 34,F,(TOO FEW VALUES SPECIFIED IN THIS VALUE-SET) 
  M 35,F,(ONLY A , "RP" .. OR SPACE CAN FOLLOW A PARAMETER VALUE) 
  M 37,F,(THIS PARAMETER VALUE MUST BE A SET OR A RANGE)
* 
  M 50,W,(DIALOG PARAMETER CAN ONLY BE SPECIFIED IN A CONTROL STATEMENT)
  M 51,F,(ONLY 3 VALUES CAN BE GIVEN IN KEY/SUM VALUE-SET IF F..L FORMAT
, IS USED)
  M 52,F,(FILE,PROC, AND COL-SEQ. NAMES MUST BEGIN WITH A LETTER) 
  M 53,F,(VALUES ALLOWED FOR THE FASTIO PARAMETER ARE YES AND NO) 
  M 54,W,(MORE THAN 100 INPUT FILES GIVEN, ONLY THE FIRST 100 SORTED) 
  M 56,F,(IF THE FIRST VALUE OF A SEQS IS A RANGE THEN ALL OTHER VALUES 
,OF THAT SEQS MUST BE RANGES OF THE SAME LENGTH)
  M 57,F,(WHEN LOW..HIGH IS USED AS A VALUE FOR SEQS LOW MUST BE LESS TH
,AN HIGH) 
  M 58,F,(ONLY SINGLE CHARACTER STRINGS OR $CHAR CAN BE USED AS VALUES F
,OR SEQS) 
  M 59,F,(FOR $CHAR(N), N MUST BE A POSITIVE DECIMAL INTEGER) 
  M 60,F,(CONTRADICTORY VALUES FOR LO PARAMETER SHOULD NOT BE SPECIFIED 
,)
  M 61,F,(FILE NAMES MUST NOT EXCEED 7 CHARACTERS IN LENGTH)
  M 62,C,(THE MAXIMUM LENGTH OF A LINE IS 240 CHARACTERS) 
  M 63,F,(VALUES ALLOWED FOR THE DIALOG PARAMETER ARE YES AND NO) 
  M 64,F,(A SPACE OR , MUST FOLLOW THE SORT OR MERGE VERB IN DIR. FILE
,)
  M 65,C,(A PERIOD MUST FOLLOW SORT5 OR MERGE)
  
  M 67,F,(DIRECTIVE FILE NAMES MUST BE UNIQUE)
  M 68,F,(LINES CONTINUING THE SORT5 OR MERGE PARAMETER-LIST MUST BEGIN 
,WITH A   PERIOD) 
  M 69,F,(FILE NAMES CAN CONTAIN ONLY LETTERS AND DIGITS) 
  M 70,F,(LENGTH MUST BE SPECIFIED IF TYPE IS SPECIFIED)
  M 71,F,(KEY LENGTH FOR KEYTYPE REAL MUST BE 10) 
  M 72,F,(ONLY THE VALUES A OR D ARE ALLOWED AS VALUES FOR KEY ORDER) 
  M 73,W,(UNEQUAL FL FOR INPUT AND OUTPUT FILES WITH RT=F OR RT=Z)
  M 74,F,(VALUES ALLOWED FOR THE EL PARAMETER ARE T,W,F OR C) 
  M 75,F,(VALUES FOR THE LO PARAMETER ARE OFF, S AND A) 
  M 76,F,(VALUES ALLOWED AS EXPRESSIONS ARE INTEGER,R1,R2,R3,R1G,EF OR
,EFG) 
  M 77,F,($NULL SHOULD NOT BE USED AS A VALUE WITHIN A SET OF VALUES) 
  M 78,F,(VALUES ALLOWED FOR THE ST PARAMETER ARE R1,R2,R3,R1G,EF OR EFG
,)
  M 79,F,(VALUES ALLOWED FOR THE RETAIN PARAMETER ARE YES AND NO) 
  M 80,F,(OWNMRL AND OWNFL SHOULD NOT BOTH BE SPECIFIED FOR THE SAME SOR
,RT)
  M 81,F,(SUM AND KEY FIELDS MAY NOT OVERLAP) 
  M 82,C,(LINES IN A DIRECTIVE FILE MUST BE NO LONGER THAN 100 CHARACTER
,S IN LENGTH) 
  M 83,F,(REPETITION VALUE OF A SUM FIELD MUST BE AN INTEGER) 
  M 84,F,(VALUES ALLOWED FOR OWNT PARAMETER ARE OLD AND NEW)
  M 85,F,(IN A KEY/SUM VALUE-SET USING FIRST..LAST, LAST IS LESS THAN FI
,RST) 
  M 86,C,(NUMERIC KEY TYPES ARE THE ONLY TYPES VALID FOR SUM FIELDS)
  M 87,C,(LINES OF A DIR FILE MUST BEGIN WITH SORT OR MERGE VERB, OR BE 
,A CONTINUATION)
  M 88,F,(BYTE/BIT POSITION OR LENGTH OF A SUM/KEY FIELD MUST BE AN INTE
,GER) 
  M 89,F,(SEQN VALUE MUST NOT BE ONE OF THE PREDEFINED KEY-TYPES) 
  M 90,F,(SEQR AND SEQA MAY BE SPECIFIED ONLY ONCE FOR EACH COLLATING SE
,QUENCE)
  M 91,F,(SEQN MUST BE SPECIFIED BEFORE ANY OTHER SEQ PARAMETER CAN BE G
,IVEN)
  M 92,F,(VALUES ALLOWED FOR SEQR AND SEQA PARAMETERS ARE YES AND NO) 
  M 93,F,(SEQN SHOULD NOT BE GIVEN WITHOUT GIVING SEQS OR SEQR BEFORE TH
,E NEXT SEQN) 
  M 94,F,(VALUES ALLOWED FOR SEQS PARAMETER ARE STRINGS AND $CHAR(N)) 
  M 95,F,(TWO RANGES OF CHARACTERS USED IN THE SAME SEQS MUST BE THE SAM
,E LENGTH)
  M 96,F,(VALUE GIVEN IN THE $CHAR FUNCTION MUST BE AN INTEGER) 
  M 97,F,(CHARACTERS GIVEN IN A SINGLE COLLATING SEQUENCE MUST APPEAR ON
,LY ONCE) 
  M 98,W,(COL-SEQUENCE NAMES LONGER THAN 10 CHARACTERS ARE TRUNCATED) 
  M 99,F,(NUMBER OF KEY AND/OR SUM CHARACTERS MUST BE LESS THAN 256)
  M 100,C,(SIGNED NUMERIC CHARACTER FIELD IS TOO SHORT) 
  M 101,F,(NO PARAMETER CAN BE SPECIFIED MORE THAN ONCE ON ONE LINE)
  M 102,F,(DUPLICATE PARAMETER SPECIFIED) 
  M 103,C,(EITHER AN INPUT FILE,OWN1 OR OWN2 MUST BE GIVEN             )
  M 104,C,(EITHER AN OUTPUT FILE,OWN3 OR OWN4 MUST BE GIVEN            )
* 
  M 107,F,(INCORRECT PARAMETER VALUE) 
  M 108,F,(TOO FEW/MANY PARAMETERS) 
  M 110,F,(CALL OUT OF SEQUENCE)
  M 111,F,(INVALID NAME GIVEN FOR SM5SEQN)
  M 112,F,(ONLY SINGLE CHARACTER LITERALS CAN BE USED AS PARAMETERS OF
,SM5SEQS) 
  M 113,W,(RECORD LENGTH IS GREATER THAN MAXIMUM RL - 5000) 
  M 114,F,(SUM FIELDS MAY NOT EVALUATE TO MORE THAN 60 BITS)
  M 115,C,(RETAIN AND SUMMING MAY NOT BE SPECIFIED AT THE SAME TIME)
  M 116,W,(MRL/FL IS NOT LARGE ENOUGH TO ACCOMODATE THE SPECIFIED KEYS) 
  M 117,W,(FASTIO PARAMETER DISABLED FOR FILES NOT ON MASS STORAGE) 
  M 118,W,(FASTIO PARAMETER WAS SPECIFIED BUT COULD NOT BE PROCESSED) 
  M 119,F,(FOR KEY AND SUM FIELDS, THE BEGINNING POSITION AND THE LENGTH
, MUST BE  NON-ZERO)
  M 120,F,(SUMMING OVERFLOW OCCURRED - SEE DAYFILE FOR DETAILS) 
  M 121,F,(UNABLE TO LOAD USER OWNCODE - SORT DID NOT COMPLETE) 
  M 122,F,(OWNCODE WAS SPECIFIED BUT NO OWNF FILE WAS GIVEN)
* 
  M 151,W,(NOT SORT, MERGE OR OUTPUT;   'SORT' ASSUMED.)
  M 152,C,(RETURNED FROM OWNCODE WITHOUT CALLING SMRTN) 
  M 153,C,(TOO MANY ERRORS FOUND. PROCESSING TERMINATED)
  M 154,F,(SMRTN CALL ILLEGAL WITH SM5 PROCEDURES -RUN ABORTED) 
  M 155,C,(RETURN CODE MUST BE IN RANGE 0-3)
  M 156,W,(AN INPUT RECORD WAS READ  WHICH WAS TOO SHORT TO HOLD THE
, KEY/SUM FIELDS SPECIFIED FOR THIS SORT/MERGE) 
  M 157,C,(NEITHER SORT NOR MERGE HAS BEEN SPECIFIED) 
  M 158,C,(FILE NAMES FOR A MERGE MUST BE UNIQUE) 
* 
  M 159,T,(KEY FIELDS OVERLAP OTHER KEY FIELDS.)
  M 160,F,(ALTER OPTION CANNOT BE USED FOR OVERLAPPING KEY FIELDS.) 
  M 161,F,(SUM FIELDS CANNOT OVERLAP OTHER SUM FIELDS.) 
          END 
