*DECK NS$BRK
USETEXT COM$NS
USETEXT ERR$NS
USETEXT KDS$NS
USETEXT LIN$NS
  
      PROC NS$BRK(ERRCODE);  # PROCESS HOP/BRK                         #
# TITLE NS$BRK - PROCESS HOP/BRK.      #
  
      BEGIN    # NS$BRK # 
# 
**    NS$BRK - PROCESS HOP/BRK. 
* 
*     J.C. LEE    1981
* 
*     THIS ROUTINE PROCESSES THE "BREAK" COMMAND FROM THE HOP.
* 
*     PROC NS$BRK(ERRCODE)
* 
*     ENTRY:  
*       NONE. 
* 
*     EXIT: 
*       ERRCODE - IF ILLEGAL HOP SM IS DETECTED.
* 
*     METHOD: 
*       IF K-DISPLAY IS ASSIGNED: 
*         REDUCE TSB SIZE FOR PAGE-WAIT BUFFER TO 1 WORD(HDR WORD). 
*         SET K-DISPLAY LINE COUNT TO 0.
*         SEND "READY.." TO K-DISPLAY.
*       ELSE
*         SET ERRCODE TO "ILLEGAL HOP SM".
* 
# 
  
      ITEM ERRCODE    U;     # ERROR CODE                              #
  
      $BEGIN
      XREF
        BEGIN 
        PROC NS$DBG;         # TRACE PROC CALL                         #
        END 
      $END
  
      XREF
        BEGIN 
        PROC EXREDUC;        # REDUCE TSB SIZE FOR PAGE WAIT BUFFER    #
        PROC MOVEOK;         # ALLOW MOVES       #
        FUNC NS$FEC U;       # FORMAT ERROR CODE                       #
        PROC TSBINFO;        # GET TSB INFO      #
        END 
  
  
      ITEM TSBN       U;     # TSB NUMBER        #
      ITEM TSBFWA     U;     # TSB FIRST WORD ADDRESS                  #
      ITEM TSBSIZE    U;     # TSB SIZE#
  
      CONTROL EJECT;
  
      $BEGIN
      NS$DBG("BRK");         # TRACE CALL                              #
      $END
  
      IF DCW$F$ASS[0] 
      THEN                   # K-DISPLAY ASSIGNED                      #
        BEGIN 
        TSBN = DCW$PWBTSB[0]; 
        TSBINFO(TSBSIZE,TSBFWA,TSBN);  # LOCATE PAGE WAIT BUFFER       #
        P<PWB$BUFFER> = 0;
  
        IF PWB$LC[TSBFWA] NQ 0
        THEN # LINES QUEUED IN PAGE WAIT BUFFER                        #
          BEGIN # DISCARD ALL LINES QUEUED IN PAGE WAIT BUFFER         #
          EXREDUC(PWB$WC[TSBFWA]-PWB$HDRL,TSBN,FALSE,TSBFWA); 
          PWB$LC[TSBFWA] = 0; 
          PWB$WC[TSBFWA] = PWB$HDRL;
          END 
  
        MOVEOK(TSBN);        # ALLOW PAGE WAIT BUFFER TO MOVE          #
        DCW$F$PAGE[0] = FALSE; # CLEAR PAGE FULL FLAG                  #
        DCW$LC[0] = 0;
        END 
  
      ELSE # NAM ERROR                                                 #
        ERRCODE = NS$FEC(EC"ERR$SM", SMEC"HSM$HOPSM");
  
      RETURN; 
      END    # NS$BRK PROC #
  
      TERM
