ASMB,R,L,C
      HED <<9580 ERROR ROUTINE>>      09580-16021 REV.A 
      NAM ERROR,7 09580-16021 REV.A 770501
* 
*---------------------------------------------------------------
* 
*     RELOC.     09580-16021
*     SOURCE     09580-18021
* 
*     M.KAESSNER    REV.A   770501
* 
*     HP 92425A TEST SYSTEM SOFTWARE IS THE PROPRIETARY 
*     MATERIAL OF THE HEWLETT-PACKARD COMPANY.  USE AND 
*     DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. 
* 
*     (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. 
*     ALL RIGHTS RESERVED.  NO PART OF THIS PROGRAM 
*     MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED
*     TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR 
*     WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. 
* 
*---------------------------------------------------------------
* 
*                   9580 STANDARD ERROR ROUTINE (CALSB COMPATABLE)
* 
      ENT ERROR,LUERR,ERRCD,.LNUM 
      ENT IERR,IERCD
      EXT EXEC,.ENTR,ISN,CNUMD
* 
* 
* 
*   CALLING SEQUENCE: 
* 
*      JSB ERROR
*      DEF *+3
*      DEF NUMBR            DECIMAL NUMBER
*      DEF STRING           ERROR MNEMONIC
*       : 
*       : 
*         THE ERROR MESSAGE IS OF THE FORMAT: 
* 
*      ERROR XXXXXX-KK IN LINE NNNN 
* 
* 
*    WHERE:   XXXXXX IS THE MNEMONIC STRING 
*             KK     IS THE ERROR NUMBER
*             NNNN   IS THE CURRENT BASIC LINE NUMBER 
* 
* 
NUMB  NOP 
MESS  NOP 
ERROR NOP 
      JSB .ENTR 
      DEF NUMB
      SKP 
* 
* INITIALIZATION
* 
      LDA OSTRT     \ INITIALIZE OUTPUT BUFFER POINTER
      STA OPTR      / 
      LDA LUERR     IF LUERR IS 1, CALL ISN FOR STATION 
      ADA M1
      SZA 
      JMP PKMSG     LU SET PREVIOUSLY 
      JSB ISN       GET STATION NUMBER
      DEF *+1 
      STA LUERR     REPLACE WITH STATION NUMBER 
* 
* PACK ERROR STRING INTO OUTPUT BUFFER
* 
PKMSG LDB MESS,I    GET NUMBER OF CHARACTERS
      SZB,RSS       IF ZERO LENGTH MESSAGE      
      JMP PKDSH        THEN PACK DASH 
      CLE,ERB       DIVIDE BY 2, IF 'E' SET THEN ODD
      SEZ           TEST REMAINDER
      INB           INCREMENT ON ODD COUNT
      LDA B         TEST NUMBER OF WORDS
      ADA M28       WORD COUNT MUST BE =< 27
      SSA 
      JMP *+3       OK, DON'T TRUNCATE
      LDB D27       TRUNCATE TO 27 WORDS (54 CHARACTERS)
      CLE           CLEAR ODD BIT 
      LDA MESS      GET STRING ADDRESS
      INA           'A' POINTS TO STRING
      JSB PAK       STORE STRING INTO OUTPUT BUFFER 
      SEZ,RSS       IF ODD COUNT, ADD A BLANK TO
      JMP PKDSH 
      LDB OPTR      LAST WORD.  GET POINTER 
      ADB M1        BACK UP ONE WORD
      LDA B,I       GET LAST WORD 
      AND UMSK      CLEAR LOWER BITS
      ADA BLNK      STORE A BLANK 
      STA B,I       REPLACE 
* 
* STORE DASH
* 
PKDSH LDA DASH      GET DASH/BLANK
      STA OPTR,I    STORE INTO OUTPUT BUFFER
      ISZ OPTR      INCREMENT BUFFER POINTER
* 
* CONVERT ERROR NUMBER AND STORE IN OUTPUT BUFFER 
* 
      LDA NUMB,I    LOAD ERROR CODE 
      SSA           IF NEGATIVE,
      CMA,INA          CONVERT TO POSITIVE
      STA ERRCD     STORE FOR OTHER FUNCTIONS 
      JSB CNUMD     CONVERT TO ASCII
      DEF *+3 
      DEF ERRCD 
      DEF BUF 
      LDA ABUF1     GET ADDRESS OF BUFFER 
      LDB D1        ONE WORD
      JSB PAK       ADD TO OUTPUT BUFFER
* 
* STORE " IN LINE  " INTO OUTPUT BUFFER 
* 
      LDA INLNE     LOAD ADDRESS OF BUFFER
      LDB D4        LOAD WORD COUNT 
      JSB PAK       STORE INTO OUTPUT BUFFER
* 
* CONVERT LINE NUMBER AND STORE INTO OUTPUT BUFFER
* 
      JSB CNUMD     CONVERT TO ASCII
      DEF *+3 
      DEF .LNUM 
      DEF BUF 
      LDA ABUF2     GET ADDRESS OF BUFFER 
      LDB D3        THREE WORDS 
      JSB PAK       ADD TO OUTPUT BUFFER
* 
* WRITE OUTPUT BUFFER 
* 
      LDA OPTR      CALCULATE 
      LDB OFRNT       SIZE OF 
      CMB,INB           OUTPUT
      ADA B               BUFFER
      STA SIZE
      JSB EXEC      ACTUALLY WRITE IT OUT 
      DEF *+5 
      DEF D2
      DEF LUERR 
OFRNT DEF OBUF
      DEF SIZE
      JMP ERROR,I   RETURN
      SPC 5 
**************
*     PAK    *
**************
PAK   NOP           A=ADDRESS  B=COUNT(WORDS) 
      CMB,INB       COMPLEMENT COUNT FOR LOOP COUNTER 
      STB LUP 
LP    LDB A,I       GET WORD
      STB OPTR,I    STORE IN OUTPUT BUFFER
      ISZ OPTR      INCREMENT OUTPUT POINTER
      INA           INCREMENT STRING POINTER
      ISZ LUP 
      JMP LP
      JMP PAK,I     RETURN
      SKP 
      SKP 
*------------------------------------------------------------------ 
* 
*     THIS ROUTINE ALLOWS FORTRAN PROGRAMS TO TEST THE ERROR CODE 
*     SET WHEN CALLS ARE MADE TO "ERROR"
* 
*     CALLING SEQUENCE: 
* 
*        JSB IERR         (OR JSB IERCD)
*        DEF *+1
*         : 
*         :               VALUE OF ERRCD IS SET IN A REGISTER THEN CLEARED
* 
* 
DUM   NOP 
IERCD EQU *         ENTRY POINT WITH TWO NAMES
IERR  NOP 
      JSB .ENTR 
      DEF DUM 
      SPC 1 
      LDA ERRCD     GET ERROR CODE IN A REG 
      CLB           STORE 0 IN
      STB ERRCD       ERRCD 
      JMP IERR,I    EXIT WITH ERRCD IN A REG
      SKP 
*          WORKING STORAGE AND CONSTANTS
* 
* 
*     EXTERNAL ENTRY VALUES 
* 
ERRCD DEC 0         ERROR CODE VALUE (INITIALLY 0)
LUERR DEC 1         ERROR LU SET BY CALSB 
.LNUM NOP           LINE NUMBER OF ERROR
* 
*     ASCII BUFFERS ETC.
* 
OBUF  OCT 3505      'BELL/E'
      ASC 3,RROR    OUTPUT BUFFER 
      BSS 37
OSTRT DEF OBUF+4    STARTING ADDRESS
OPTR  NOP           BUFFER POINTER
DASH  OCT 26440 
INLNE DEF *+1 
      ASC 4, IN LINE
BUF   BSS 3         BUFFER FOR NUMBER CONVERSION
ABUF1 DEF BUF+2 
ABUF2 DEF BUF 
* 
*     INTERNAL VALUES AND VARIBLES
* 
A     EQU           0 
B     EQU           1 
M1    DEC -1
M28   DEC -28 
D1    DEC 1 
D2    DEC 2 
D3    DEC 3 
D4    DEC 4 
D27   DEC 27
BLNK  OCT 40
UMSK  OCT 177400
LUP   NOP 
SIZE  BSS 1 
      END 
                                                                        