ASMB,R,Q,C
* 
*     NAME:   CN..
*     SOURCE: 92071-18099 
*     RELOC:  92071-1X099 
*     PGMR:   C.H.W.,DJN
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
* 
      NAM CN..,7  92071-1X099  REV.2041  800806 
* 
* 
* 
* 
*  ACTION SUBROUTINE TO EXECUTE THE "CN" OPERATOR COMMAND 
*         THIS ROUTINE PERFORMS AN I/O CONTROL REQUEST
*         (EXEC,3,..) TO THE DESIGNATED DEVICE FOR ALL
*         FUNCTIONS EXCEPT "PR" AND "AB".  ON "PR", THE 
*         DEVICE PRIORITY IN DVT WORD 20 IS MODIFIED
*         DIRECTLY.  ON "AB", IF THE DEVICE CURRENTLY HAS 
*         A REQUEST AT THE HEAD OF ITS INITIATION LIST (DVT 
*         WORD 2) THE ROUTINE "$ABRQ" IN "RTIOL" IS CALLED
*         DIRECTLY TO ABORT THE REQUEST.  THIS WILL INITIATE
*         THE ABORT CALL AND RTIOL WILL IMMEDIATELY RETURN
*         TO "CN..".
* 
*    COMMAND SYNTAX:
*        CN,LU,FUNC(,OPTN1,OPTN2,OPTN3,OPTN4) 
* 
* 
      ENT CN..
* 
      EXT EXEC,$LIBR,$LIBX,$ABRQ
      EXT $LUT#,$LUTA,.XLA,.XSA,$SJS0 
* 
* 
CN..  NOP 
      JSB .XLA      GET LUT ADDRESS 
      DEF $LUTA 
      STA LUTA      SAVE LOCALLY FOR ADDS 
      JSB .XLA      GET NUMBER OF LUS 
      DEF $LUT# 
      STA LUT#      SAVE LOCALLY FOR ADDS 
      LDA CN..
      ADA .2        2ND PARAMETER IS THE PARSE BUFFER ADDR
      LDB 0,I       GET IT
      STB TMPAD 
      INA 
      LDA 0,I 
      STA ERRTN     SAVE ADDR OF ERROR PARAM
      LDA CN..,I
      STA CN..      SAVE RETURN ADDR
* 
      INB           POINT TO LU PARAMETER 
      LDA 1,I       GET IT
      STA LU
*  VERIFY ENTERED LU
      SZA 
      CMA,SSA,INA,RSS 
      JMP ER56      ERROR IF LU <1
      ADA LUT#      MAX LU - ENTERED LU 
      CMA,SSA,RSS   ENTERED > MAX?
      JMP ER56       YES, PARAMETER ERROR 
      ADA LUT#      A NOW = LU-1
      ADA LUTA
      JSB .XLA      GET LUT CONTENTS FOR LU 
      DEF 0,I 
      SZA,RSS       ASSIGNED? 
      JMP CN..,I     NO, EXIT 
      STA OPTNS     SAVE DVT ADDRESS
      ADB .3        POINT TO FUNC PARAMETER TYPE
      STB FUNCA 
      LDB 1,I       GET TYPE
      ISZ FUNCA     POINT TO VALUE
      LDA FUNCA,I   GET IT
      CPB .3        WAS IT ENTERED IN ASCII?
      JMP *+3        YES
      AND B77       USE ONLY 5-0
      JMP CN.30 
* 
      LDB OPTNS     GET DVT ADDRESS 
      CPA ASCPR     "PR"? 
      JMP PRIOR      YES, CHANGE DEVICE PRIORITY
      CPA ASCAB     "AB"? 
      JMP ABORT      YES
      LDB CNVTA     ADDR OF ASCII FUNCTIONS 
CN.10 LDA 1,I 
      INB           POINT TO OCTAL EQUIVALENT 
      CPA FUNCA,I   IS THIS THE ENTERED FUNCTION
      JMP CN.20      YES
      INB            NO, POINT TO NEXT FUNCTION 
      SZA           END OF TABLE? 
      JMP CN.10      NO 
      JMP ER56       YES, INCORRECT FUNC CODE 
* 
CN.20 LDA 1,I       GET FUNC CODE OCTAL EQUIVALENT
* 
CN.30 LDB TMPAD 
      ADB .9        ADDR OF 1ST OPT. PARAM
      STB OPTNS     STORE IN EXEC CALL
      ADB .4        ADDR OF 2ND 
      STB OPTNS+1 
      ADB .4        ADDR OF 3RD 
      STB OPTNS+2 
      ADB .4        ADDR OF 4TH 
      STB OPTNS+3 
      CPA .9        FORM CONTROL? 
      JMP FORMS      YES
* 
CN.40 LSL 6         FUNC CODE INTO BITS 11-6
      IOR LU        INCLUDE ENTERED LU
      STA LU        STORE FOR EXEC CALL 
* 
      JSB EXEC      ISSUE THE CONTROL REQUEST!
      DEF *+7 
      DEF K3N       NO ABORT
      DEF LU
OPTNS BSS 4         MODIFIED ABOVE
      JMP ER56      GIVE ERROR IF ABORT RETURN
      JMP CN..,I    RETURN
      SPC 3 
*  DOING FORMS CONTROL, IF DEFAULTED PARAMETER, USE -2
FORMS ADB N13 
      LDB 1,I       GET TYPE OF 1ST OPT PRAM
      LDA N2
      SZB,RSS       DEFAULTED?
      STA OPTNS,I    YES, DO A TOP-OF-FORM
      LDA .9        GET FORM CTL VALUE AGAIN
      JMP CN.40     SET LU & DO IT
      SPC 3 
*  CHANGE DEVICE IFT QUEUEING PRIORITY
PRIOR ADB .19 
      STB TMPAD     POINT TO DVT20
      LDB FUNCA 
      ADB .4
      LDA 1,I       GET NEW PRIORITY
      AND B77 
      CPA 1,I       PRIO > 63?
      RSS            NO 
      JMP ER56      ERROR, TOO LARGE
      JSB $LIBR     GO PRIVILEDGED
      NOP 
      JSB .XLA
      DEF TMPAD,I 
      AND B1777 
      IOR 1,I       SET NEW PRIO IN DVT WD 20 
      JSB .XSA      MODIFY DVT TABLE
      DEF TMPAD,I 
      JMP PVEX
      SPC 3 
*  ABORT REQUEST AT HEAD OF DVT FOR LU
ABORT ISZ OPTNS     POINT TO DVT2 
* 
      JSB $LIBR     LOWER FENCE 
      NOP 
      JSB .XLA      GET ADDR OF HEAD
      DEF OPTNS,I 
      ELA,CLE,ERA   CLEAR "Q" BIT 
      CPA .0        ANYTHING QUEUED?
      JMP PVEX      NO, SO EXIT 
      JSB $SJS0      YES, ABORT REQUEST, B HAS DVT ADDR 
      DEF $ABRQ 
PVEX  JSB $LIBX     RAISE FENCE & EXIT
      DEF CN..
* 
* 
ER56  LDA .56       56 = BAD PARAMETER
      STA ERRTN,I   RETURN ERROR VALUE
      JMP CN..,I     AND RETURN 
* 
* 
*  DATA AREA
* 
LUTA  NOP 
LUT#  NOP 
TMPAD NOP 
ERRTN NOP 
LU    NOP 
FUNCA NOP 
* 
.0    DEC 0 
.19   DEC 19
.56   DEC 56
B77   OCT 77
B1777 OCT 177700
K3N   OCT 100003
N2    DEC -2
N13   DEC -13 
ASCPR ASC 1,PR
ASCAB ASC 1,AB
* 
CNVTA DEF *+1 
      ASC 1,AD      NEW DEVICE ADDRESS
      OCT 24
      ASC 1,BF      BACK SPACE FILE 
      OCT 14
      ASC 1,BR      BACKSPACE RECORD
.2    OCT 2 
      ASC 1,DP      SET DRIVER PARAMETERS 
      OCT 24
      ASC 1,EO      WRITE END-OF-FILE 
      OCT 1 
      ASC 1,FF      FORWARD SPACE FILE
      OCT 13
      ASC 1,FR      FORWARD SPACE RECORD
.3    OCT 3 
      ASC 1,LE      PAPER TAPE LEADER 
      OCT 10
      ASC 1,RW      REWIND MAGNETIC TAPE
.4    OCT 4 
      ASC 1,TO      TOP-OF-FORM 
.9    OCT 11
      DEC 0         END OF TABLE
* 
      END 
                                                                                                                                                                                                                        