ASMB,R,L,C
      HED             AUXILIARY COMMANDS FOR RTE-L MEMORY BASED SYSTEM
*     NAME:    COMND
*     SOURCE:  92070-18076
*     RELOC:   92070-16076
*     PGMR:    M.L.K. 
* 
****************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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,35  92070-16076  REV.1941  790713 
      SUP 
* 
*  GLOBAL DATA
* 
      ENT .E.R,C.BUF,CAM.I,CAM.O,ECH,INT.,O.BUF 
      ENT TMP.
* 
*  GLOBAL ENTRY POINTS
* 
      ENT MSS.,OPEN.,WRITF
* 
*  EXTERNAL ROUTINES
* 
      EXT .ENTR,EXEC,IFTTY,LOGLU,PARSE,RMPAR,REIO 
      EXT PNAME,BL..,CN..,IO..,LA..,PL..,TM.. 
      EXT TO..,IT..,ON..,SY.. 
      SKP 
* 
*     INITIALIZATION
* 
COMND JSB RMPAR     GET SCHEDULING STRING 
      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 
* 
      LDA CAM.I     TEST THE RANGE (1-63) 
      JSB PCHEK       OF INPUT LU 
TRLOG LDA CAM.O     ILLEGAL RETURN, USE CONSOLE LU
      STA CAM.I     STORE VALUE OF INPUT
      JSB IFTTY     IS INPUT INTERACTIVE? 
      DEF *+2 
      DEF CAM.I 
      STA INT.      STORE IN INTERACTIVE FLAG 
      LDB A         SAVE FLAG IN B
      LDA CAM.I     GET INPUT LU
      SZB           IS IT INTERACTIVE?
      IOR B400      YES, SET ECHO FLAG
      STA CAM.I     SAVE IN INPUT FLAG
      ADA B10K      ADD IN DOUBLE BUFFER BIT
      STA CAMII     AND SAVE FOR WRITE/READ CALL
      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 
* 
*     COMMAND LOOP
* 
*     READ COMMANDS 
* 
CLOOP LDB INT.      GET INTERACTIVE FLAG
      SZB,RSS       IS INPUT INTERACTIVE? 
      JMP REED      NO, GO READ 
* 
      JSB REIO      YES, WRITE PROMPT AND READ INPUT
      DEF *+7       FROM INPUT DEVICE 
      DEF .1
      DEF CAMII     DOUBLE BUFFER WRITE/READ
      DEF C.BUF     INPUT BUFFER
      DEF .40       INPUT LENGTH
      DEF PRMPT     OUTPUT BUFFER 
      DEF .4        OUTPUT LENGTH 
      JMP RDRTN     GO PROCESS INPUT
* 
REED  JSB REIO      READ FROM INPUT DEVICE
      DEF *+5 
      DEF .1
      DEF CAM.I     USE INPUT DEVICE
      DEF C.BUF     TO COMMAND BUFFER 
      DEF .40       UP TO 40 WORDS
RDRTN STB ECH       STORE TRANSMISSION LOG
      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 
* 
*     PARSE THE COMMAND 
* 
PARS  LDA INT.      GET INTERACTIVE FLAG
      SZA           IS INPUT INTERACTIVE? 
      JMP PAR1       YES, SO GO PARSE 
* 
      LDA C.BUF     NO, GET FIRST WORD OF INPUT BUFFER
      AND B377      AND REMOVE THE PRECEEDING COLON 
      IOR B20K
      STA C.BUF     AND PLACE BACK INTO THE BUFFER
* 
PAR1  LDA ECH       GET WORD COUNT
      ADA ECH       DOUBLE IT 
      STA CCNT      AND SAVE CHARACTER COUNT
      JSB PARSE     USE SYSTEM'S PARSER 
      DEF *+4 
      DEF C.BUF     INPUT BUFFER
      DEF CCNT      CHARACTER COUNT 
      DEF MRSLT     PARSED PARAMETER BUFFER 
      CCA           SUBTRACT ONE FROM THE 
      ADA P.CNT     PARAMETER COUNT SINCE NOT PASSING 
      STA P.CNT     THE COMMAND AS A PARAMETER
* 
*  CHANGE PARAMETER TYPE 2 TO 3 
      LDA N8        SET LOOP COUNTER
      STA CNT         TO 8
      LDA DMRLT     GET PARSE RESULT BUFFER ADDRESS 
PARLP LDB A,I       GET PARAMETER TYPE
      CPB .2        IS IT 2?
      INB           YES, INCREMENT IT TO 3
      STB A,I       STORE BACK INTO BUFFER
      ADA .4        INCREMENT TO NEXT PARAMETER 
      ISZ CNT       INCREMENT THE COUNT 
      JMP PARLP     GO DO NEXT PARAMETER
* 
      LDB DMRLT     GET ADDRESS OF THE FIRST PARAMETER
      INB           POINT TO ACTUAL PARAMETER 
      LDB B,I       GET PARAMETER 
      STB OPP       STORE AS STOP WORD IN COMMAND TABLE 
* 
*     GET COMMAND ADDRESS 
* 
      LDA C.TAB     GET COMMAND TABLE ADDRESS 
CMND? CPB A,I       IF COMMAND SAME AS IN TABLE 
      JMP CALL        THEN GO SET UP COMMAND ADDRESS (CAD.) 
      ADA .2        SKIP ADDRESS AND POINT TO NEXT COMMAND
      JMP CMND?     CHECK NEXT ENTRY IN TABLE 
* 
CALL  INA           GET POINTER TO COMMAND ADDRESS
      LDA A,I       THEN FETCH COMMAND ADDRESS
      STA CAD.      AND STORE 
* 
*     CALL ACTION ROUTINE 
* 
      CLA           CLEAR ERROR CODE
      STA ER          TO PASS TO ACTION ROUTINE 
      JSB CAD.,I    CALL ACTION ROUTINE 
      DEF CALR
      DEF P.CNT     PARAMETER COUNT 
      DEF P.RAM     PARAMETER LIST
      DEF ER        ERROR CODE
* 
CALR  LDA ER        DID THE ROUTINE PASS BACK 
      SZA             AN ERROR? 
      JMP ELOG      GO REPORT ERROR 
      LDA INT.      GET INTERACTIVE FLAG
      SZA           INPUT INTERACTIVE?
      JMP EX        YES, GO TERMINATE 
      JMP CLOOP     NO, READ AGAIN
      SKP 
* 
*     COMMAND TABLE 
* 
C.TAB DEF *+1 
      ASC 1,BL
      DEF BL..
      ASC 1,CN
      DEF CN..
      ASC 1,IO
      DEF IO..
      ASC 1,LA
      DEF LA..
      ASC 1,PL
      DEF PL..
      ASC 1,TM
      DEF TM..
      ASC 1,TO
      DEF TO..
      ASC 1,IT
      DEF IT..
      ASC 1,ON
      DEF ON..
      ASC 1,EX
      DEF EX..
* 
OPP   NOP           END OF TABLE
      DEF SY..
* 
COMM  NOP           COMMENTS
      LDA COMM,I
      JMP A,I 
      SKP 
* 
*     ERROR SUBROUTINE
* 
MSER  NOP 
MSS.  NOP 
      JSB .ENTR     SET UP PARAMETERS 
      DEF MSER
      LDA MSER,I    GET ERROR CODE
* 
ELOG  LDB BLNK      SET DEFAULT TO POSITIVE 
      SSA           POSITIVE OR NEGATIVE? 
      LDB BSIGN     NEGATIVE, GET MINUS SIGN
      STB ESGN      SAVE ASCII SIGN 
      SSA           NEGATIVE? 
      CMA,INA       YES SET POSITIVE
      CLB           CLEAR B FOR DIVIDE
      DIV .10       DIVIDE BY 10. TWO DIGIT ERRORS ONLY 
      ADB B60       MAKE REMAINDER ASCII
      ADA B60       MAKE QUOTIENT ASCII 
      ALF,ALF       POSITION QUOTIENT TO UPPER HALF 
      IOR B         PUT IN SECOND DIGIT 
      STA ERCDE     PUT INTO ERROR MESSAGE
      JSB EXEC      WRITE IT OUT
      DEF *+5 
      DEF .2        WRITE 
      DEF CAM.O     LOG DEVICE
      DEF ERBUF     ERROR MESSAGE 
      DEF .4        LENGTH
      JMP TRLOG     TRANSFER TO LOG DEVICE
* 
ERBUF ASC 2,CMND
ESGN  NOP           SIGN
ERCDE NOP           ERROR CODE IN ASCII 
* 
BLNK  ASC 1,
BSIGN ASC 1, -
      SKP 
* 
*     DUMMY OPEN CALL 
* 
ODCB  NOP 
OLU   NOP 
* 
OPEN. NOP 
      JSB .ENTR 
      DEF ODCB
* 
      LDA OLU,I     GET PASSED LU 
      SZA,RSS       IF ZERO, ITS LEGAL
      JMP OKOPN     SO STORE AND EXIT 
      JSB PCHEK     IS IT LEGAL LU? 
      JMP EROPN     NO, REPORT ERROR
OKOPN STA ODCB,I    YES, PUT INTO DCB 
      JMP OPEN.,I   RETURN
* 
EROPN LDA N18       ERROR CODE -18
      JMP ELOG      GO REPORT IT
      SPC 5 
* 
*     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 
      SKP 
* 
*     DUMMY WRITF ROUTINE 
* 
WDCB  NOP 
WERR  NOP 
WBUF  NOP 
WLEN  NOP 
WRITF NOP 
      JSB .ENTR 
      DEF WDCB
* 
      JSB EXEC      DO WRITE
      DEF *+5 
      DEF .2
      DEF WDCB,I    LU IS IN DCB
      DEF WBUF,I
      DEF WLEN,I
* 
      CLA           SET NO ERROR
      STA WERR,I     INTO USER'S ERROR CODE 
      JMP WRITF,I   RETURN
      SKP 
* 
*     EXIT ACTION ROUTINE 
* 
EX..  NOP 
EX    JSB EXEC      TERMINATE SAVING RESOURCES
      DEF *+4 
      DEF .6
      DEF .0
      DEF .1
      JMP COMND 
      SKP 
* 
*     CONSTANTS 
* 
.0    DEC 0 
.1    DEC 1 
.2    DEC 2 
.4    DEC 4 
.6    DEC 6 
.10   DEC 10
.40   DEC 40
N8    DEC -8
N18   DEC -18 
N64   DEC -64 
B60   OCT 60
B72   OCT 72
B200  OCT 200 
B377  OCT 377 
B400  OCT 400 
B10K  OCT 10000 
B20K  OCT 20000 
* 
DMRLT DEF MRSLT 
* 
A     EQU 0 
B     EQU 1 
      SPC 5 
* 
*     VARIBLES
* 
CAM.I NOP           INPUT DCB (MUST BE FIRST) 
TMP.  NOP           LIST LU 
CAM.O NOP           LOG LU
INT.  NOP           INTERACTIVE FLAG
.E.R  NOP           GLOBAL ERROR FLAG 
* 
C.BUF BSS 40        INPUT STRING
CAD.  NOP           COMMAND ADDRESS FORM C.TAB
MRSLT BSS 4         \  ORDERED   COMMAND PARAMETER
P.RAM BSS 28         >           PARAMETER LIST 
P.CNT NOP           /            PARAMETER COUNT
ECH   NOP           INPUT WORD COUNT
O.BUF NOP           OUTPUT DCB
CNT   NOP           LOOP COUNTER
CCNT  NOP           CHARACTER COUNT 
ER    NOP           ERROR CODE FOR ACTION ROUTINES
CAMII NOP           COMMAND INPUT FOR WRITE/READ REQUEST
PRMPT BSS 2         PROMPT BUFFER 
PRMP3 BSS 1         5TH & 6TH CHARACTERS
      OCT 20137     <SPACE><BACKARROW>
* 
LEN   EQU * 
      END COMND 
                                                                                                                    