ASMB,Q,C HED 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.