ASMB,Q,C
      HED <RMOTE> OPERATOR ACCESS TO 3000 * (C) HEWLETT-PACKARD CO. 1980
      NAM RMOTE,19,80 91741-16007 REV 2013 790731 
      SPC 1 
******************************************************************
*  * (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 THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 2 
* RMOTE 
* SOURCE: 91741-18007 
* BINARY: 91741-16007 
* JIM HARTSELL
* OCT 21, 1975
* 
* DS/1000 PROGRAM TO PROVIDE OPERATOR ACCESS
* TO A REMOTE HP3000 COMPUTER.  RMOTE CAN BE USED BY SEVERAL
* TERMINALS - SEE RTE MANUAL, MULTIPLE TERMINAL OPERATION.
* 
* 
      EXT EXEC,PARSE,CNUMD,KCVT,MESSS,REIO
      EXT OPEN,READF,POSNT,CLOSE
      EXT .ENTR,#LU3K,HELLO,BYE 
      EXT D3KMS,D$STW,D$ZRO,D$WDC 
      EXT D$RQB,D$INI,D$ERR 
      EXT D$INP,D$LOG,D$SMP 
      IFZ 
      EXT DBUG
      XIF 
* 
A     EQU 0 
B     EQU 1 
      SUP 
* 
* CHECK FOR DEBUG OPTION. 
* 
RMOTE EQU * 
      IFZ 
      LDA B,I       IS P1 = -1 ?
      CPA MD1       (*ON,RMOTE,-1 TO INVOKE DEBUG)
      RSS 
      JMP INIT      NO. INITIALIZE DATA LINK. 
* 
      JSB DBUG      YES. ALLOW DEBUG COMMANDS HERE, 
      DEF *+1        FOLLOWED BY "CONTINUE".
* 
      JSB EXEC      SAVE RESOURCES & TERMINATE. 
      DEF *+4       RE-SCHEDULE RMOTE WITH DESIRED PARAMS.
      DEF B6
      DEF B0
      DEF B1
* 
      JMP RMOTE     RE-SCHEDULE STARTS HERE.
      XIF 
* 
* INITIALIZE TRANSFER STACK AND PROMPT CHARACTER. 
* 
INIT  STB TEMP      SAVE ADDR OF SCHEDULE PARAMS. 
* 
      LDA STKHD     RESET STACK POINTER.
      STA P.STK 
      CLA,INA       SET FIRST STACK ENTRY 
      STA P.STK,I   FOR LOGICAL UNIT 1 (DEFAULT). 
      CLA 
      STA DSTLU     RESET DEST. LU TO LOCAL.
      STA D$SMP     FOR RTE-M, CLEAR SMP NUMBER.
* 
      LDA LPRMP     INITIALIZE FOR LOCAL PROMPT CHAR. 
      STA CPRMP 
      LDA PROMP 
      AND B377
      IOR CPRMP 
      STA PROMP     OPERATOR PROMPT CHAR. 
* 
      LDA A.TR
      AND B377
      IOR CPRMP 
      STA A.TR      CANNED TRANSFER COMMAND.
* 
      LDA TEMP,I    CHECK IF P1 = ASCII PARAM.
      AND HB377 
      SZA,RSS 
      JMP STR       NO. MUST BE INPUT LU. 
* 
* FETCH SCHEDULE PARAMETERS (FL,NA,ME,SEVERITY,LIST). 
* 
      LDA A.TR      GENERATE "$TR,FLNAME" IN BUFFER.
      STA INBUF 
      LDA A.TR1 
      STA INBUF+1 
      LDA TEMP,I
      STA INBUF+2 
      ISZ TEMP
      LDA TEMP,I
      SZA,RSS 
      LDA BLNKS 
      STA INBUF+3 
      ISZ TEMP
      LDA TEMP,I
      SZA,RSS 
      LDA BLNKS 
      STA INBUF+4 
      ISZ TEMP
* 
      LDA B5        SET COUNT.
      STA INCNT 
* 
      LDA TEMP,I    SET UP DUMMY SCHEDULE PARAMS. 
      STA ALTBK+3   SEVERITY CODE.
      ISZ TEMP
      LDA TEMP,I
      STA ALTBK+2   LIST LU.
* 
      LDA DFALT     POINT TO DUMMY PARAMS.
      STA TEMP
* 
STR   STA TRFLG     SET/CLEAR FLAG FOR QUERY SECTION. 
* 
* FETCH SCHEDULE PARAMETERS (LU,LOG,LIST,SEVERITY CODE).
* 
      LDA TEMP,I    GET LU OF INPUT DEVICE. 
      SZA,RSS 
      JMP STAT      IF NONE, USE DEFAULT. 
      CPA B1        IGNORE IF = 1.
      JMP STAT
* 
      STA P.STK,I   PUT SPECIFIED LU INTO XFER STACK. 
* 
STAT  LDA P.STK,I 
      JSB EQTYP     CHECK EQ. TYPE OF INPUT LU. 
      STA LUTYP 
* 
      ISZ TEMP
      LDA TEMP,I    GET LU OF LOG DEVICE. 
      SZA 
      JMP SVLOG 
* 
      LDB LUTYP 
      CLA,INA       EITHER LU 1 OR
      SZB,RSS 
      LDA P.STK,I   INPUT LU IF TTY DEVICE. 
SVLOG STA LOGLU 
      STA D$LOG 
* 
      LDB LUTYP     SET LU FOR ERROR MESSAGES:
      CLA,INA 
      SZB,RSS 
      LDA P.STK,I   INPUT LU IF TTY DEVICE. 
      STA ERRLU     OTHERWISE, 1. 
* 
      ISZ TEMP
      LDA TEMP,I    GET LU OF LIST DEVICE,
      SZA,RSS 
      LDA B6        OR USE DEFAULT = 6. 
      STA LSTLU 
* 
      ISZ TEMP
      LDA TEMP,I    SAVE SEVERITY CODE. 
      STA SEVER 
* 
      LDA TRFLG     IF SCHEDULED WITH FILE NAME,
      SZA           ALREADY HAVE TR SIMULATED.
      JMP CHKPR 
      SKP 
* 
* DISPLAY PROMPT CHARACTER (IF TTY DEVICE). 
* CONTROL RETURNS HERE WHEN REQUEST PROCESSING COMPLETES. 
* 
QUERY LDA P.STK,I   CHECK CURRENT INPUT:
      AND HB377       NON ZERO IF FILE NAME, ELSE LU. 
      SZA 
      JMP REMRD     DISK FILE.
* 
      LDA P.STK,I 
      STA TEMP      SAVE LU FOR LATER USE.
      JSB EQTYP     CHECK TYPE. 
      STA LUTYP 
      SZA 
      JMP LOCRD     LU NOT TTY DEVICE.
* 
      JSB REIO      DISPLAY PROMPT ON TTY DEVICE. 
      DEF *+5 
      DEF B2
      DEF P.STK,I 
      DEF PROMP 
      DEF B1
* 
      LDA P.STK,I   SET ECHO BIT. 
      IOR B400
      STA TEMP
* 
* INPUT OPERATOR REQUEST FROM CURRENT DEVICE OR FILE. 
* 
LOCRD JSB REIO      LU READ.
      DEF *+5 
      DEF SD1 
      DEF TEMP
      DEF INBUF 
      DEF D40 
      RSS 
      JMP RDOK      IF ERROR ON INPUT LU, 
      DST EMSG+3    SET 
      LDA EMSG+2     UP 
      AND HB377       ERROR 
      IOR B40          MESSAGE. 
      JMP INERR      GO TO INPUT ERROR HANDLER. 
* 
RDOK  STA TEMP      SAVE STATUS WORD. 
      STB INCNT     SAVE WORD COUNT.
      JSB EOFCK     CHECK FOR END OF FILE.
      JMP TRANS     GOT IT. 
      JMP ECHO      GO ECHO IF NECCESSARY.
* 
REMRD JSB READF     LOCAL DISK FILE.
      DEF *+6       (OPENED WHEN FIRST TRANSFER 
      DEF IDCB      WAS PERFORMED)
      DEF IERR
      DEF INBUF 
      DEF D40 
      DEF INCNT     ACTUAL WORD COUNT.
* 
      JSB ERCHK     CHECK FOR ERRORS. 
* 
      LDA INCNT     IF EOF, GENERATE TR REQUEST.
      INA,SZA 
      JMP BUMP
TRANS LDA A.TR      RESULTS IN TR,-1 (TO PREVIOUS ONE). 
      STA INBUF 
      LDA A.TR+1
      STA INBUF+1 
      LDA B2
      STA INCNT 
      JMP ECHO
* 
BUMP  LDA P.STK 
      ADA B3
      ISZ A,I       BUMP RECORD COUNT.
* 
* ECHO THE REQUEST IF NOT INPUT FROM TTY DEVICE.
* 
ECHO  LDA LUTYP 
      SZA,RSS 
      JMP CKCNT     IT IS A TTY DEVICE. 
* 
      LDA SEVER     ECHO IF 
      SZA,RSS         SEVERITY CODE = 0.
      JSB ECHPR 
* 
CHKPR LDA INBUF     FIRST CHARACTER MUST
      AND HB377     BE CURRENT PROMPT CHARACTER.
      CPA CPRMP 
      RSS 
      JMP INVAL 
* 
      LDA INBUF     BLANK OUT THE PROMPT CHAR.
      AND B377
      IOR BLANK 
      STA INBUF 
* 
CKCNT LDB INCNT     IGNORE REQUEST IF NULL. 
      RBL           MAKE CHARACTER COUNT. 
      SZB,RSS 
      JMP QUERY 
* 
* PARSE THE OPERATOR REQUEST. 
* 
      STB TEMP
* 
      JSB PARSE 
      DEF *+4 
      DEF INBUF 
      DEF TEMP
      DEF PRAMS     PARAMETER BUFFER ADDRESS. 
* 
      JMP M0000     TRY FOR RMOTE COMMAND FIRST.
* 
* LOCAL RTE OR REMOTE HP3000 COMMAND. 
* 
OTHER LDA INCNT     SET UP +CHAR COUNT. 
      RAL 
      STA TEMP
      SZA,RSS 
      JMP QUERY     IGNORE IF ZERO. 
* 
      LDA DSTLU     IF LOCAL MODE, SEND COMMAND 
      SZA,RSS       TO RTE. 
      JMP LCRTE 
* 
* SEND REMOTE HP3000 COMMANDS.
* 
      LDA D$SMP     HAS "HELLO" BEEN ENTERED? 
      SZA,RSS 
      JMP NHLLO     NO. ERROR.
* 
      JSB BLKIL     KILL LEADING BLANKS IN COMMAND. 
SNCMD JSB CMNDS     SEND COMMAND TO HP3000. 
      DEF *+3 
DINBF DEF INBUF 
      DEF TEMP
* 
      JMP QUERY 
* 
* PASS COMMAND TO LOCAL RTE.
* 
LCRTE JSB MESSS     PROCESS COMMAND.
      DEF *+4        (RU & ON COME THRU HERE IF 5TH 
      DEF INBUF       PARAM WAS SPECIFIED IN COMMAND.)
      DEF TEMP
      DEF STKHD,I   PASS LU OF USER'S TERMINAL. 
* 
      SZA,RSS       IF CHAR CNT NON-ZERO, 
      JMP QUERY 
* 
      STA TEMP      NEGATIVE CHARACTER COUNT. 
* 
      JSB REIO      DISPLAY REPLY MESSAGE.
      DEF *+5 
      DEF SD2 
      DEF LOGLU 
      DEF INBUF 
      DEF TEMP
      RSS           ERROR CHECK.
* 
      JMP QUERY 
* 
* ERROR ON OUTPUT LU
OTERR DST EMSG+3    SET 
      LDA EMSG+2     UP 
      AND HB377       ERROR 
      IOR B40          MESSAGE
      JSB EROUT     PRINT IT. 
      JMP QUERY 
      SKP 
* 
* CHECK THE OPERATOR REQUEST CODE AGAINST THE LEGAL 
* REQUEST CODES AND JUMP TO THE PROPER PROCESSOR. 
* 
*    TO ADD NEW REQUEST ONE MERELY: 
*      A. ADDS ASCII OPERATION CODE TO TABLE "LDOPC". 
*      B. ADDS PROCESSOR START ADDRESS TO TABLE "LDJMP".
*      C. ADDS PROCESSOR CODING TO PROCESS THE REQUEST. 
* 
M0000 LDA OP        FETCH OPERATION CODE. 
      AND UMASK     UPSHIFT.
      STA B 
      STB OPP       SET STOP FLAG.
      LDA LDOPC     SET OPERATION TABLE POINTER.
      STA TEMP1 
      LDA LDJMP     SET PROCESSOR JUMP ADDRESS. 
      STA TEMP2 
* 
M0030 CPB TEMP1,I   COMPARE WITH TABLE VALUE. 
      JMP TEMP2,I   COMPARES. GO DO IT. 
* 
      ISZ TEMP1     KEEP LOOKING. 
      ISZ TEMP2 
      JMP M0030 
* 
LDOPC DEF *+1       OPERATION CODE TABLE ADDRESS. 
* 
      ASC 8,SWHEBYTREXRUONLL
OPP   NOP                OP CODE FOR CURRENT REQ. 
* 
LDJMP DEF *+1,I     JMP ADDRESS FOR EACH OP CODE. 
      DEF M0100     SWITCH. 
      DEF M0200     HELLO.
      DEF M0300     BYE.
      DEF M0400     TRANSFER. 
      DEF M0500     EXIT. 
      DEF M0600     "RU" COMMAND TRAP.
      DEF M0600     "ON" COMMAND TRAP.
      DEF M0700     LL COMMAND. 
      DEF OTHER     ASSUME RTE OR HP3000 COMMAND. 
* 
NHLLO JSB DSPLY     DISPLAY "NEED HELLO"
      DEF NHMSG 
      JMP QUERY 
* 
NHMSG DEF *+2 
      DEF B6
      ASC 6,NEED "HELLO"
* 
INVAL JSB DSPLY     DISPLAY "INVALID INPUT".
      DEF INVLM 
      JMP QUERY 
* 
INVLM DEF *+2 
      DEF B7
      ASC 7,INVALID INPUT 
* 
UMASK OCT 157737    UPSHIFT MASK. 
      SKP 
* 
* SW[,N]
* 
* CHANGE OR TOGGLE DESTINATION OF OPERATOR COMMANDS.
* 
M0100 LDA CP1       CHECK IF FIRST PARAM SPECIFIED. 
      SZA 
      JMP M0105     PARAM SPECIFIED.
* 
      LDB CPRMP     NO PARAM. TREAT AS A TOGGLE.
      CLA 
      CPB RPRMP     IS CURRENT PROMPT = REMOTE PROMPT?
      JMP M0110     YES. SWITCH TO LOCAL PROMPT.
      LDA #LU3K     NO. GET LU OF 3000. 
      SZA 
      JMP M0110     GO CHANGE CURRENT PROMPT. 
      JMP NLSTN     TELL USER HE NEEDS TO RUN "LSTEN".
* 
M0105 LDA P1        PARAM GIVEN:
      SZA,RSS       0=LOCAL RTE, N=HP3000 LU. 
      JMP M0110 
      LDB #LU3K     IF NON-ZERO, MUST BE IN #LU3K.
      SZB,RSS 
      JMP NLSTN     TELL USER HE NEEDS TO RUN "LSTEN".
      CPB A         CHECK FOR VALID REMOTE LU.
      JMP M0110     VALID.
      JSB DSPLY     DISPLAY "INVALID REMOTE LU".
      DEF ILLU
      JMP CLRLU 
* 
M0110 STA DSTLU     CHANGE THE PROMPT CHARACTER:
      LDB LPRMP      LOCAL IF NEW LU = 0, 
      SZA 
      LDB RPRMP      REMOTE IF NEW LU NON-ZERO. 
      STB CPRMP 
* 
      LDA PROMP     CHANGE OPERATOR PROMPT. 
      AND B377
      IOR CPRMP 
      STA PROMP 
* 
      LDA A.TR      CHANGE CANNED TR
      AND B377       COMMAND PROMPT.
      IOR CPRMP 
      STA A.TR
* 
      JMP QUERY 
* 
DSTLU OCT 0         CURRENT DESTINATION LU. 
* 
NLSTN JSB DSPLY     DISPLAY "NEED TO RUN LSTEN".
      DEF NLSN
* 
CLRLU CLA 
      STA DSTLU 
* 
      JMP QUERY 
* 
NLSN  DEF *+2 
      DEF D10 
      ASC 10,NEED TO RUN "LSTEN"
* 
ILLU  DEF *+2 
      DEF D9
      ASC 9,INVALID REMOTE LU 
      SKP 
* 
* PROCESSOR FOR "HELLO" COMMAND.
* 
M0200 LDA CPRMP     IF LOCAL PROMPT,
      CPA LPRMP 
      JMP NDREM      COMMAND IS AN ERROR. 
* 
      JSB BLKIL     KILL LEADING BLANKS IN COMMAND. 
      LDA INCNT     GET MESSAGE BYTE LENGTH.
      CLE,ELA 
      STA #BYTS 
* 
      LDA P.STK,I   IF CURRENT INPUT IS A LOGICAL UNIT, 
      STA B         USE IT. IF NOT, USE SPECIFED LU.
      AND HB377 
      SZA 
      LDB STKHD,I 
      STB D$INP 
* 
      JSB HELLO     SEND "HELLO" TO HP3000. 
      DEF *+7 
      DEF IERR
      DEF DSTLU     LU OF HP3000. 
      DEF LOGLU     LU OF LOG DEVICE. 
      DEF SMPNM     RETURNED PROCESS NUMBER.
      DEF INBUF     ADDR OF HELLO MESSAGE.
      DEF #BYTS     POS. # BYTES. 
* 
      LDA IERR      CHECK FOR ERRORS. 
      SZA 
      JMP BDHEL     FAILED. 
      JMP QUERY 
BDHEL CPA B1        ERROR CODE = 1? 
      RSS 
      JMP RFAIL     NO. 
* 
      JSB DSPLY     YES. DISPLAY MESSAGE. 
      DEF HFAIL 
* 
      JMP QUERY 
* 
HFAIL DEF *+2 
      DEF D13 
      ASC 13,HELLO FAILED OR LINE DOWN
      SKP 
* 
* PROCESSOR FOR "BYE" COMMAND.
* 
M0300 LDA CPRMP     IF LOCAL PROMPT,
      CPA LPRMP 
      JMP NDREM      COMMAND IS AN ERROR. 
      LDA D$SMP      IF NO HELLO ISSUED,
      SZA,RSS 
      JMP NHLLO       COMMAND IS AN ERROR.
* 
      JSB BYE       SEND "BYE" TO HP3000. 
      DEF *+5 
      DEF IERR
      DEF DSTLU     LU OF HP3000. 
      DEF LOGLU     LU OF LOG DEVICE. 
      DEF SMPNM     PROCESS NUMBER. 
* 
      LDA IERR      CHECK FOR ERRORS. 
      SZA 
      JMP RFAIL     FAILED. 
* 
      JMP QUERY 
      SKP 
RFAIL CPA B5
      JMP TMOUT 
      CPA "IO"
      JMP OTERR 
      CPB "05"
      JMP TMOUT 
      CPA B1
      JMP DSCNT 
      CPB "01"
      JMP DSCNT 
* 
      JSB DSPLY     DISPLAY "REQUEST FAILED". 
      DEF RQFL
* 
      JMP QUERY 
* 
DSCNT JSB DSPLY     DISPLAY "LINK IS DISCONNECTED". 
      DEF DISCN 
      JMP QUERY 
* 
RQFL  DEF *+2 
      DEF B7
      ASC 7,REQUEST FAILED
* 
TMOUT JSB DSPLY     "TIMEOUT" 
      DEF TOMSG 
* 
      JMP QUERY 
* 
TOMSG DEF *+2 
      DEF D15 
      ASC 15,TIMEOUT: NO REPLY FROM REMOTE
* 
NDREM JSB DSPLY     NOT LOCAL COMMAND.
      DEF NTLOC 
* 
      JMP QUERY 
* 
NTLOC DEF *+2 
      DEF D9
      ASC 9,NOT LOCAL COMMAND 
* 
DISCN DEF *+2 
      DEF D10 
      ASC 10,LINK IS DISCONNECTED 
      SKP 
*  TR PROCESSOR.
* 
*  TRANSFER CONTROL TO LU OR DISK FILE. 
* 
M0400 LDA P.STK,I   IF CURRENT INPUT IS FROM A
      AND HB377     DISC FILE, CLOSE IT.
      SZA,RSS 
      JMP M1210 
* 
      JSB CLOSE 
      DEF *+3 
      DEF IDCB
      DEF IERR
* 
      CLA           CLEAR IDCB OPEN FLAG. 
      STA OPNFL 
* 
M1210 LDA P1        GET PARAM 1.
      SZA,RSS       IF NOT SPECIFIED, 
      CCA           SIMULATE "TR,-1". 
      SSA,RSS       NEGATIVE INTEGER? 
      JMP M1220     NO. 
* 
* BACK UP THROUGH TRANSFER STACK. 
* 
      LDB P.STK     TOP OF STACK? 
BKUP  CPB STKHD 
      JMP M0500     YES. SIMULATE "EX" REQUEST. 
      ADB MD4       NO. BACK UP 1 ENTRY.
      INA,SZA 
      JMP BKUP      LOOP TILL DONE. 
      STB P.STK     SET NEW STACK ADDRESS.
      JMP M1250     GO CHECK FOR FILE.
* 
* ADD NEW CONTROL TO THE TRANSFER STACK.
* 
M1220 LDA P.STK     BUMP TO NEXT ENTRY. 
      ADA B4
      STA P.STK 
      CPA STKEN 
      RSS 
      JMP M1230 
      JSB DSPLY     STACK OVERFLOW. 
      DEF STKOV 
* 
      JMP QUERY 
* 
M1230 LDB P1        STORE LU OR FILE NAME.
      STB A,I 
      INA 
      LDB P1+1
      STB A,I 
      INA 
      LDB P1+2
      STB A,I 
      INA 
      CLB,INB       SET RECORD NUMBER TO 1. 
      STB A,I 
* 
* IF DISK FILE, OPEN AND OPTIONALLY POSITION. 
* 
M1250 LDA P.STK,I 
      AND HB377 
      SZA,RSS 
      JMP QUERY     LOCAL LU. GO GET NEXT REQUEST.
* 
      STA LUTYP     SET LU TYPE NON-TTY.
      JSB OPEN      OPEN THE FILE.
      DEF *+4 
      DEF IDCB
      DEF IERR
      DEF P.STK,I 
* 
      LDA IERR      PROCESS ERRORS ONLY IF
      SSA           IERR IS NEGATIVE. 
      JSB ERCHK 
      ISZ OPNFL     SET OPEN FLAG.
* 
      LDA P.STK     POSITIONING REQUIRED? 
      ADA B3
      LDB A,I 
      CPB B1        (REC. CNT MORE THAN 1?) 
      JMP QUERY     NO. 
      STB TEMP      YES.
* 
      JSB POSNT     POSITION TO NEXT RECORD.
      DEF *+5 
      DEF IDCB
      DEF IERR
      DEF TEMP      NUR GREATER THAN ZERO.
      DEF TEMP      ABSOLUTE RECORD NUMBER. 
* 
      JSB ERCHK      CHECK FOR ERRORS.
      JMP QUERY 
* 
* TRANSFER STACK: 
*   FOR EACH ENTRY, WORD 1 = INTEGER LU OR
*                            FIRST 2 FNAME CHAR.
*                   WORD 2,3 = REST OF FNAME. 
*                   WORD 4 = NEXT RECORD NUMBER.
* 
P.STK NOP           STACK POINTER.
STKHD DEF *+1 
* 
      BSS 32        8 ENTRIES.
* 
STKEN DEF *         STACK LWA+1.
* 
STKOV DEF *+2 
      DEF D9
      ASC 9,TR STACK OVERFLOW 
      SKP 
* 
*  EX PROCESSOR 
* 
*  TERMINATE THE OPERATOR INTERFACE PROGRAM.
* 
M0500 LDA D$SMP     CHECK IF A "HELLO" IS OUTSTANDING.
      SZA,RSS 
      JMP M0510       NO. 
* 
      JSB BYE       YES. ISSUE AN AUTO BYE. 
      DEF *+5 
      DEF IERR
      DEF #LU3K 
      DEF LOGLU 
      DEF SMPNM 
* 
      LDA IERR      CHECK FOR ERRORS. 
      SZA,RSS 
      JMP M0510     NONE. 
      JSB DSPLY     ERROR FROM "BYE". 
      DEF BYMSG 
* 
M0510 JSB DSPLY     DISPLAY TERMINATION MESSAGE 
      DEF TRMSG     ON LOG DEVICE.
* 
      JSB CLSFL     CLOSE OPEN FILES. 
* 
      JSB EXEC      EXIT. 
      DEF *+2 
      DEF B6
* 
BYMSG DEF *+2 
      DEF D9
      ASC 9,AUTO "BYE" FAILED 
TRMSG DEF *+2 
      DEF B6
      ASC 6, $END RMOTE 
      SKP 
* 
* PROCESSOR FOR "RU" COMMAND TRAP.  IF ENTERED UNDER THE LOCAL
* PROMPT, AND 5TH PARAM IS NOT SPECIFIED, PASS SESSION NUMBER 
* AS 5TH SCHEDULE PARAMETER.
* 
M0600 LDA RPRMP     IF REMOTE PROMPT, 
      CPA CPRMP 
      JMP OTHER      LET IT GO BY.
      LDA P2        FIRST PARAM = "NOW"?
      CPA "NO"
      JMP OTHER     YES. LET IT GO BY.
* 
      LDA CP6       WAS 5TH PARAM SPECIFIED?
      SZA 
      JMP M0610     YES. LEAVE IT ALONE.
* 
      LDA D$SMP     NO. GET CURRENT PROCESS NUMBER, 
      CMA,INA        NEGATE IT, 
      STA P6         AND STORE AS 5TH SCHEDULE PARAM. 
* 
M0610 LDB STKHD,I 
      LDA CP2       IS FIRST PARAM SPECIFIED? 
      SZA,RSS 
      STB P2        NO. PASS LU OF USER'S TERMINAL. 
* 
      JSB EXEC      SCHEDULE THE PROGRAM WITH WAIT. 
      DEF *+8       PASS 1ST 4 PARAMS ALONG WITH 5TH. 
      DEF SD9 
      DEF P1        PROGRAM NAME. 
      DEF P2        SCHEDULE PARAMETERS.
      DEF P3
      DEF P4
      DEF P5
      DEF P6
      JMP SCERR     ERROR RETURN. 
* 
      SZA,RSS       NORMAL RETURN.
      JMP QUERY 
      LDA PGBZY     PROGRAM WAS BUSY. 
      JMP SCMSG 
* 
SCERR CPA "SC"
      RSS 
      JMP SCM1      NOT A SCHEDULING ERROR. 
      LDA DSC03 
      CPB "03"
      JMP SCMSG     "ILLEGAL STATUS"
      LDA DSC05 
      CPB "05"
      JMP SCMSG     "NO SUCH PROG"
SCM1  LDA RQFL      "REQUEST FAILED"
SCMSG STA SCM2
      JSB DSPLY 
SCM2  NOP 
      JMP QUERY 
* 
DSC03 DEF *+1 
      DEF *+2 
      DEF B7
      ASC 7,ILLEGAL STATUS
DSC05 DEF *+1 
      DEF *+2 
      DEF B6
      ASC 6,NO SUCH PROG
PGBZY DEF *+1 
      DEF *+2 
      DEF B5
      ASC 5,PROG BUSY 
      SKP 
* 
* PROCESSOR FOR LL COMMAND.  CHANGE $STDLIST DESTINATION (D$LOG). 
* 
M0700 LDB CP1 
      JSB INTCK     CHECK FOR NUMERIC PARAM.
      LDA P1
      STA D$LOG     CHANGE $STDLIST DESTINATION.
      JMP QUERY 
* 
      SKP 
* 
* 
* SEND OPERATOR COMMAND (ASCII STRING) TO HP3000. 
* 
* CALLING SEQUENCE: 
* 
*     JSB CMNDS 
*     DEF *+3 
*     DEF BUFA       ADDR OF ASCII STRING.
*     DEF BUFL        POS. # BYTES IN STRING. 
* 
PARMS NOP           ADDR OF ASCII COMMAND STRING. 
      NOP           LENGTH OF ASCII STRING (+BYTES).
* 
CMNDS NOP 
      JSB .ENTR     GET PARAM ADDRESSES.
DPRAM DEF PARMS 
      CLA           CLEAR ERROR CODE STORAGE. 
      CLB 
      DST D$ERR 
* 
* BEGIN CONSTRUCTION OF REQUEST BUFFER WITH 
* THE 8-WORD FIXED FORMAT FOR REMOTE COMMANDS.
* 
      LDA DPRAM     POINT TO ADDR OF FIRST PARAM. 
      JSB D$INI     INITIALIZE BUFFER STUFFERS. 
* 
      LDA B3        STORE MESSAGE CLASS = 3.
      JSB D$STW 
      CLA           CLEAR COMPUTER ID.
      JSB D$STW 
      LDA B20       STORE STREAM TYPE = 20 OCTAL. 
      JSB D$STW 
      LDA MD4       CLEAR SUB-STREAM, PROCESS #'S.
      JSB D$ZRO 
      LDA PARMS+1,I SET BYTE COUNT IN REQUEST.
      ADA MD2       ADJUST FOR D$STW. 
      JSB D$STW     STORE MESSAGE BYTE COUNT. 
* 
* MOVE ASCII MESSAGE TO REQUEST BUFFER. 
* 
      LDA PARMS     COMMAND MESSAGE SOURCE ADDRESS. 
      LDB PARMS+1,I NUMBER OF BYTES.
      INB           ROUND UP. 
      CLE,ERB       MAKE WORDS. 
      STB TEMP
      LDB D$RQB     DESTINATION ADDRESS.
      ADB D8
* 
      MVW TEMP      MOVE THE MESSAGE. 
* 
      JSB D$WDC     SET WORD LENGTH OF REQUEST. 
* 
* SET UP INPUT LU FOR $STDIN REQUESTS.
* 
      LDA P.STK,I   IF CURRENT INPUT IS A LOGICAL UNIT, 
      STA B         USE IT. IF NOT, USE SPECIFIED LU. 
      AND HB377 
      SZA 
      LDB STKHD,I 
      STB D$INP 
* 
* SEND REQUEST TO THE 3000 BY WRITING TO
* QUEX'S CLASS, AND WAIT FOR THE REPLY. 
* 
      JSB D3KMS     SHIP THE REQUEST BUFFER TO QUEX.
      DEF *+2        NO ABORT IF ERROR. 
      DEF CONWD      NO TIMEOUT.
      JMP RFAIL     REQUEST FAILED. 
* 
      JMP CMNDS,I   RETURN. 
* 
CONWD OCT 140000
      SKP 
* 
* SUBROUTINE TO TEST FOR END OF FILE ON VARIOUS DEVICES.
* 
*   TEMP = EQT STATUS WORD. 
*   INCNT = EQT WORD COUNT. 
*   LUTYP = EQUIPMENT TYPE. 
*  JSB EOFCK
*   EOF RETURN
*   NORMAL RETURN 
* 
EOFCK NOP 
      CLE 
      LDA LUTYP     EOF DEPENDS ON DEVICE.
      SZA,RSS 
      JMP EOF1      TTY.
      CPA B1
      JMP EOF1      PHOTOREADER.
      CPA D9
      JMP EOF4      CARD READER.
      CPA D13 
      JMP EOF4      MARK SENSE. 
      CCE           DEFAULT TO MAG TAPE.
* 
EOF1  LDA TEMP      GET STATUS WORD.
      ALF,ALF 
      SEZ,RSS       IF E=1, CHECK BIT 7.
      JMP EOF2
      SSA 
      JMP EOF3
EOF2  RAL,RAL       CHECK BIT 5.
      SSA,RSS 
      JMP EOF5      NO EOF. 
* 
EOF3  LDA LUTYP     END OF FILE.
      SZA           IF TTY, OUTPUT CAR. RET.
      JMP EOF6
* 
      JSB REIO      OUTPUT CARRIAGE-RETURN. 
      DEF *+5 
      DEF B2
      DEF P.STK,I 
      DEF CR
      DEF B1
* 
      JMP EOF6
* 
EOF4  LDA INCNT     CHECK FOR BLANK CARD. 
      SZA 
EOF5  ISZ EOFCK 
EOF6  JMP EOFCK,I 
      SKP 
* 
* KILL LEADING BLANKS IN COMMAND. 
* 
BLKIL NOP 
LBLNK LDA INBUF     CHECK FOR LEADING BLANK 
      AND HB377     (OK FOR RTE, BUT NG FOR 3000).
      CPA BLANK 
      RSS 
      JMP BLKIL,I   NONE. RETURN. 
* 
      LDA DINBF     ADDRESS OF ASCII COMMAND. 
      STA TEMP1     SOURCE POINTER. 
      STA TEMP2     DESTINATION POINTER.
      LDA INCNT 
      CMA,INA 
      STA TEMP3     NEGATIVE # WORDS. 
      LDB TEMP1,I   PRIME THE PUMP. 
      ISZ TEMP1 
* 
LOOP1 LDA TEMP1,I   MOVE STRING LEFT ONE BYTE.
      RRL 8 
      STB TEMP2,I 
      ISZ TEMP2 
      RRL 8 
      ISZ TEMP1 
      ISZ TEMP3 
      JMP LOOP1     LOOP TILL DONE. 
* 
      CCA           SUBTRACT 1 FROM 
      ADA TEMP       CHARACTER COUNT. 
      STA TEMP
      SZA           CHECK FOR ZERO LENGTH.
* 
      JMP LBLNK     GO LOOK FOR ANOTHER LEADING BLANK.
* 
      JMP QUERY     ALL BLANKS. GET NEXT COMMAND. 
                                                                                                      