ASMB,R,L,C
      HED             AUXILIARY COMMANDS FOR RTE-L MEMORY BASED SYSTEM
*     NAME:    COMND
*     SOURCE:  91750-18049
*     RELOC:   91750-16049
*     PGMR:    JERRY BELDEN 
* 
****************************************************************
* (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 COMND,1,90 91750-16049 REV.2013 791003 L
      SUP 
* 
*   THIS IS THE DS VERSION OF COMND. IT DOES NOT HAVE THE 
*    ACTION ROUTINES APPENDED TO IT, BUT RATHER PASSES
*    THE COMMAND STRING TO OPERM. 
* 
* 
*  GLOBAL DATA
* 
* 
*  GLOBAL ENTRY POINTS
* 
* 
*  EXTERNAL ROUTINES
* 
      EXT EXEC,LOGLU,RMPAR,REIO,CLRQ
      EXT PNAME,PARSE 
      EXT #ST07,.MVW
      SKP 
* GLBLK-START 
* 
******************************************************************
*                                                                *
*     G L O B A L   B L O C K               REV XXXX 790531      *
*                                                                *
*     GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY:      *
*                                                                *
*         REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST        *
*         GET,   #SLAV, RQCNV, RPCNV, GRPM,  LSTEN, PTOPM        *
*         EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3        *
*                                                                *
******************************************************************
* 
***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!***
#STR  EQU 0         STREAM WORD.
#SEQ  EQU #STR+1    SEQUENCE NUMBER.
#SRC  EQU #SEQ+1    SOURCE NODE #.
#DST  EQU #SRC+1    DEST. NODE #. 
#EC1  EQU #DST+1    REPLY ECOD1.
#EC2  EQU #EC1+1    REPLY ECOD2.
#ENO  EQU #EC2+1    NUMBER OF NODE REPORTING ERROR. 
* 
#ECQ  EQU #ENO+1    ERROR CODE QUALIFIER (BITS 4 TO 7)
#LVL  EQU #ECQ      MESSAGE FORMAT LEVEL (BITS 0 TO 3)
#MAS  EQU #LVL+1    MA "SEND" SEQ. #
#MAR  EQU #MAS+1    MA "RECV" SEQ. #
#MAC  EQU #MAR+1    MA "CANCEL" FLAGS 
#HCT  EQU #MAC+1    HOP COUNT 
#SID  EQU #HCT+1    SESSION ID WORD 
* 
#EHD  EQU #SID      LAST ITEM OF HEADER 
#MHD  EQU #EHD+1    MINIMUM HEADER SIZE 
#REQ  EQU #MHD      START OF REQUEST SPECIFIC AREA
#REP  EQU #MHD      START OF REPLY SPECIFIC AREA
* 
#MXR  EQU #MHD+24   <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>>
#LSZ  EQU 2         <<< SIZE OF LOCAL APPENDAGE AREA >>>
* 
******************************************************************
* 
* GLBLK-END 
      SKP 
* OPBLK-START 
* 
******************************************************************
*                                                                *
*      O P R E Q   B L O C K               REV XXXX 790531       *
*                                                                *
*      OFFSETS INTO DS/1000 OPREQ MESSAGE BUFFERS, USED BY:      *
*                                                                *
*                   DMESS, OPERM, RQCNV, RPCNV                   *
*                                                                *
******************************************************************
* 
* OFFSETS INTO OPREQ REQUEST AND REPLY BUFFERS. 
* 
#CML  EQU #REQ      COMMAND LENGTH. 
#CMS  EQU #CML+1    COMMAND STRING. 
#LGC  EQU #CMS+1    LOGON REQUEST CODE
#LNL  EQU #LGC+1    LENGTH OF USER NAME 
#LUN  EQU #LNL+1    LOGON USER NAME 
* 
#RLN  EQU #REP      REPLY LENGTH. 
#MSG  EQU #RLN+1    REPLY MESSAGE.
* 
* MAXIMUM SIZE OF OPREQ REQUEST/REPLY BUFFER. 
* 
#OLW  EQU #CMS+20     M A X I M U M   S I Z E   ! ! ! 
* 
* OPBLK-END 
      SKP 
* 
*     INITIALIZATION
* 
COMND JSB RMPAR     GET SCHEDULING PARAMETERS 
      DEF *+2 
      DEF CAM.I     STORE STARTING AT CAM.I 
* 
      JSB LOGLU     GET CONSOLE LU
      DEF *+2 
      DEF CAM.O     (ACTUALLY A DUMMY PARAMETER)
      STA CAM.O     SET UP LOG LU 
* 
      LDA TMP.      TEST THE RANGE (1-63) 
      JSB PCHEK       OF THE LIST LU
      LDA CAM.O     ILLEGAL RETURN, USE CONSOLE LU
      STA TMP.      STORE VALUE OF LIST 
* 
*     THIS VERSION OF COMND ALLOWS ONLY INTERACTIVE INPUT 
* 
TRLOG LDA CAM.O     USE CONSOLE LU
      IOR B104H     ECHO FLAG 
      STA CAM.I     SAVE IN INPUT FLAG
      JSB PNAME     CALL FOR THE PROGRAM'S NAME 
      DEF *+2 
      DEF PRMPT     FOR USE AS THE PROMPT 
      LDA PRMP3     GET 3RD CHARACTER 
      IOR B72       PUT COLON IN PLACE
      STA PRMP3     SAVE
      SKP 
* 
*     READ COMMAND
* 
      JSB REIO      YES, WRITE PROMPT AND READ INPUT
      DEF *+7       FROM INPUT DEVICE 
      DEF .1
      DEF CAM.I     DOUBLE BUFFER WRITE/READ
      DEF RQB+#CMS  INPUT BUFFER
      DEF MXLEN     INPUT LENGTH
      DEF PRMPT     OUTPUT BUFFER 
      DEF .4        OUTPUT LENGTH 
* 
      STB ECH       STORE TRANSMISSION LOG
      BLS 
      STB RQB+#CML  CHAR. COUNT 
      SZB,RSS       NOTHING ENTERED 
      JMP EX        NOTHING, EXIT 
      AND B200      CHECK FOR EOF 
      SZA,RSS       EOF?
      JMP PARS      NO, GO PARSE THE COMMAND
      JMP TRLOG     EOF, TRANSFER TO LOG DEVICE 
      SKP 
* 
*     PARSE STRING & TEST FOR APLDR COMMANDS
* 
PARS  JSB PARSE     USE SYSTEM'S PARSER 
      DEF *+4 
      DEF RQB+#CMS  INPUT BUFFER
      DEF RQB+#CML  CHAR COUNT
      DEF MRSLT     PARSED PARAMETER BUFFER 
* 
      LDB DMRLT     PARSE BUFFER ADDRESS
      LDA B,I       PARAMETER TYPE
      CPA .2        ASCII ? 
      JMP PAR1      YES, OK 
PARER LDA IN        NO, INPUT ERROR 
      LDB PT
      JMP RPERR 
PAR1  INB           PICK UP COMMNAND NMEMONIC 
      LDB B,I 
* 
      CLA           INITIALIZE
      STA PRAM3 
      LDA TMP.      SET UP LIST LU
      CPB LO""      IF LO, USE CONSOLE LU 
      LDA CAM.O 
      AND B377
      ALF 
      STA PRAM1 
      CLA           PRESET FUNCTION 
* 
      CPB PL""
      JMP APLF2     SET UP FOR APLDR PL 
      CPB IO""
      JMP APLFX     APLDR IO
      CPB LO""
      JMP APLF1     APLDR LO
* 
*     CHECK FOR 'SS' COMMAND W/O PARAM.  THIS WILL CAUSE
*      COMND TO SUSPEND ITSELF. 
* 
      CPB SS""
      RSS 
      JMP OPCOM     NOT 'SS'
      LDB DMRLT     PARSE BUFFER ADDRESS
      ADB .4        POINT TO NXT PARAM TYPE 
      LDB B,I 
      SZB           ANYTHING THERE ?
      JMP OPCOM     YES, STD REQUEST
* 
      JSB EXEC      NO, SUSPEND SELF
      DEF *+2 
      DEF .7
      JMP EX        JUST RESTARTED, EXIT FOR NOW
      SKP 
* 
*     FIX UP THE REQUEST TO OPERM 
* 
OPCOM CCA           SET DESTINATION TO LOCAL
      STA RQB+#DST
      LDA ECH       CALCULATE CLASS READ/WRITE REQUEST LEN. 
      ADA HDLEN 
      STA ECH 
      LDA CAM.O     SAVE LOCAL LU 
      STA RQB+#EHD   IN LAST WORD OF HEADER 
* 
*  CODE FOLLOWS TO WRITE REQUEST TO OPERM'S CLASS, DETERMINE
*   WHETHER OPERM IS DORMANT OR NOT AND HANDLE APPROPRIATELY
* 
      LDA #ST07+1   OPERM'S CLASS 
      STA CLAS1     SAVE IT 
      IOR SIGN      SET NO-WAIT BIT 
      AND SPECL     MASK OUT BITS 13 & 14 
      STA CLASS     SAVE IN REQUEST 
      JSB EXEC      DO CLASS READ/WRITE 
      DEF *+8 
      DEF CLWRT 
      DEF B10K      Z-BIT SET 
      DEF RQB       ADDR OF START OF MESSAGE
      DEF .0        NO DATA 
      DEF RQB       REQUEST BUFFER
      DEF ECH       REQUEST LENGTH
      DEF CLASS 
      JMP RPERR     ERROR 
      SSA 
      JMP RPER1     NO SAM OR CLASS # 
* 
      LDA CLAS1     CHECK OPERM AGAIN 
      SZA           INITIALIZED ? 
      JMP CALR      YES, DONE 
      JSB CLRQ      ASSIGN OWNERSHIP
      DEF *+3         OF CLASS TO US
      DEF .1            IN CASE WE
      DEF CLASS           GET STOMPED ON
      JSB EXEC      SCHEDULE OPERM WITH WAIT
      DEF *+4 
      DEF SCHD
      DEF OPERM 
      DEF CLASS     SCHED PRAM 1
      JMP RPERR     SCHEDULE ERROR
      SZA 
      JMP RPER1     OPERM NOT DORMANT 
CALR  JMP EX        YES, GO TERMINATE 
      SKP 
* 
*     ENTER BELOW FOR APLDR COMMANDS
* 
APLFX ADA .4        IO COMMAND = 5
APLF1 INA           LO = 1
APLF2 STA PRAM5     PL = 0, SAVE FUNCTION TEMPORARILY 
      IOR PRAM1     SET UP 1ST PARAMETER
      STA PRAM1 
      LDA PRAM5     WHICH COMMAND ? 
      CPA .5
      JMP APL10     DONE WITH IO COMMAND
      LDB DMRLT     PARSE BUFFER ADDR.
      ADB .4        POINT TO NEXT PARAM. TYPE 
      SZA 
      JMP APLF5     GO DO 'LO' COMMAND
      LDA B,I       MUST BE PL, GET PRAM TYPE 
      SZA,RSS       ANY 2ND PRAM ?
      JMP APL10     NO, DONE !
      CPA .2        ALPHA 
      RSS 
      JMP PARER     NO, ERROR ! 
      INB           YES 
      LDA B,I       STORE IN OPTION PARAM.
      STA PRAM3 
      JMP APL10 
      SKP 
* 
*     'LO' PARAMETER SETUP
* 
APLF5 LDA B,I       LOOK AT PARAM TYPE
* 
*     LOADING FROM A LU NOT ALLOWED ON THE L. MUST BE A 
*      REMOTE DISK FILE 
* 
      CPA .2        ASCII ? 
      RSS 
      JMP PARER     NO, MUST BE LU (NOT ALLOWED)
      INB           MOVE FILENAME TO
      LDA B          SCHEDULE PARAMETERS
      LDB APRM3 
      JSB .MVW
      DEF .3
      NOP 
      LDB A         A(3RD PRAM TYPE), PARSE BUF 
      INB           POINT TO SECURITY CODE
      LDA B,I 
      STA PRAM2 
      ADB .4        POINT TO CRN
      LDA B,I       PREPARE TO PLACE EXCESS 
      STA ACRN#      PARAMS IN RES
      ADB .3        NODE # PRAM TYPE
      LDA B,I 
      CPA .1        SHOULD BE NUMERIC 
      RSS 
      JMP PARER 
      INB 
      LDA B,I       PICK UP NODE #
      STA ACRN#+1   SAVE FILE NODE
* 
      SKP 
* 
*     SCHEDULE APLDR
* 
APL10 JSB EXEC      SCHEDULE APLDR W/WAIT 
      DEF *+10
      DEF SCHD      (NO ABORT BIT SET)
      DEF APLDR 
      DEF PRAM1 
      DEF PRAM2 
      DEF PRAM3 
      DEF PRAM4 
      DEF PRAM5 
      DEF ACRN#     STRING BUFFER 
      DEF .2        STRING LENGTH 
      JMP IDER      APLDR MISSING 
      SZA 
      JMP BSYER     APLDR BUSY
      JMP EX        NO PROBLEM
      SKP 
* 
*  EXITS
* 
*   ERRORS
* 
*   LACK OF SAM, CLASS #S OR OPERM NOT DORMANT
* 
RPER1 LDA EXX 
      LDB EC
      JMP RPERR 
* 
*     SCHEDULE ERRORS 
* 
IDER  LDB ID        APLDR MISSING 
      JMP BSY1
* 
BSYER LDB BS        APLDR BUSY
BSY1  LDA AP
      JMP RPERR 
* 
*     ERROR REPORTING 
* 
RPERR STA MSG 
      STB NUM       INSERT ERROR CODE 
      LDA CAM.O     OUTPUT LU 
      IOR B40K      FORCE NON-BUFFERED I/O
      STA CAM.O 
      JSB EXEC      WRITE TO LOCAL DEVICE 
      DEF *+5 
      DEF .2
      DEF CAM.O 
      DEF ERBUF 
      DEF .4
* 
*  EXIT PROGRAM 
* 
EX    LDA CLAS1     DID WE HAVE TO
      SZA             ALLOCATE A CLASS? 
      JMP EXIT      NO
      ISZ CLAS1     YES, SHOW THAT WE HAVE GIVEN IT BACK
      JSB CLRQ      AND 
      DEF *+3         DO
      DEF .2            SO
      DEF CLASS 
EXIT  JSB EXEC      TERMINATE SAVING RESOURCES
      DEF *+4 
      DEF .6
      DEF .0
      DEF .1
      JMP COMND 
* 
*   DATA FOR ERROR EXITS
* 
ERBUF ASC 2,CMD 
MSG   NOP 
NUM   NOP 
EXX   ASC 1,EX
EC    ASC 1,EC
IN    ASC 1,IN
PT    ASC 1,PT
AP    ASC 1,AP
ID    ASC 1,ID
BS    ASC 1,BS
      SKP 
* 
*     PCHEK - INPUT PARAMETER CHECK OF RANGE
* 
PCHEK NOP 
      LDB A         SAVE A
      SSA           IS IT GREATER THAN 0 ?
      JMP PEXIT     NO, ERROR 
      SZA,RSS       IS LU ZERO? 
      JMP PEXIT     YES, ERROR
      ADB N64       IS IT GREATER THAN 64 ? 
      SSB 
      ISZ PCHEK     NO IT IS OK SO RETURN P+2 
PEXIT JMP PCHEK,I 
* 
*     CONSTANTS 
* 
.0    DEC 0 
.1    DEC 1 
.2    DEC 2 
.3    DEC 3 
.4    DEC 4 
.5    DEC 5 
.6    DEC 6 
.7    DEC 7 
N64   DEC -64 
B72   OCT 72
B200  OCT 200 
B377  OCT 377 
B10K  OCT 10000 
B104H OCT 10400 
B40K  OCT 40000 
A     EQU 0 
B     EQU 1 
* 
DMRLT DEF MRSLT 
APRM3 DEF PRAM3 
      SKP 
* 
*     VARIBLES
* 
CAM.I NOP           INPUT DEVICE LU (MUST BE 1ST) 
TMP.  NOP           LIST LU 
CAM.O NOP           OUTPUT DEVICE LU
ECH   NOP           INPUT WORD COUNT
PRMPT BSS 2         PROMPT BUFFER 
PRMP3 BSS 1         5TH & 6TH CHARACTERS
      OCT 20137     <SPACE>,<BACKARROW> 
PRAM1 NOP           1ST APLDR SCHED PRAM
PRAM2 NOP           2ND      "
PRAM3 NOP           3RD      "
PRAM4 NOP           4TH      "
PRAM5 NOP           5TH      "
      OCT 20137     <SPACE><BACKARROW>
* 
*     PARSE BUFFER
* 
MRSLT BSS 4         \ ORDERED      COMMAND PARAMETER
      BSS 28         >             PARAMETER LIST 
      NOP           /              PARAMETER COUNT
* 
*     REQUEST BUFFER
* 
RQB   DEC 7         STREAM #
      BSS #OLW
      SKP 
* 
*     DATA ADDED FOR DS 
* 
SIGN  OCT 100000    SIGN BIT
SPECL OCT 117777    MASK FOR CLASS ALLOCATE 
ACRN# BSS 2         CRN & FILE NODE FOR LOAD
CLASS NOP           OPERM'S CLASS # 
CLAS1 OCT 1         ZERO IFF COMND ALLOCATED A CLASS
CLWRT OCT 100024    CLASS WRITE ICODE 
SCHD  OCT 100011    SCHEDULE W/WAIT ICODE 
PL""  ASC 1,PL
IO""  ASC 1,IO
LO""  ASC 1,LO
SS""  ASC 1,SS
APLDR ASC 3,APLDR 
OPERM ASC 3,OPERM 
MXLEN ABS #OLW-#CMS 
* 
*     HEADER LENGTH + APPENDAGE WORDS + 1 
* 
HDLEN DEF #MHD+#LSZ+1 
      END COMND 
                                                                                                                                                                                                              