ASMB,Q,C,N HED OPERATOR ACCESS TO 3000 * (C) HEWLETT-PACKARD CO. IFN ***** NAM RMOTE,19,80 91750-16167 REV.2013 800324 MEF XIF ***** IFZ ***** NAM RMOTE,19,80 91750-16168 REV.2013 800324 MEF XIF ***** 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 UNL NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING * NAME: *SOURCE: 91750-18167 * RELOC: 91750-16167 (N OPTION) 91750-16168 (Z OPTION) * PGMR: DMT LST ************************** RMOTE ************************* * * * SOURCE: 91750-18167 * * * * BINARY: 91750-16167 N OPTION * * 91750-16168 Z OPTION (INCLUDES FILE MOVE) * * * * PROGRAMMER: JIM HARTSELL * * * * DATE: OCTOBER 21, 1975 * * * * * **** MODIFIED BY DMT BEGINNING AUGUST 1, 1978 **** * FOR DS/1000 ENHANCEMENTS PROJECT * * * ************************************************************** SPC 1 * * DS/1000 PROGRAM TO PROVIDE OPERATOR ACCESS * TO A REMOTE HP3000 COMPUTER. * EXT NAMR,IFTTY,IFBRK,.ENTR,.MVW EXT EXEC,KCVT,MESSS,REIO,LURQ EXT OPEN,READF,POSNT,CLOSE EXT #PKUP,#LU3K,HELLO,BYE EXT D3KMS,D$RQB,D$3BF,D$ERR,D$INP,D$LOG,D$SMP IFZ ***** EXT POPEN,PCONT,PREAD,PWRIT,PCLOS EXT WRITF,LOCF,CREAT EXT COR.A,SPOPN,LUTRU,CNUMD,$SPCR EXT D$BRK,D$CTY XEQT EQU 1717B ID SEGMENT ADDRESS BGLWA EQU 1777B LAST WORD IN PARTITION XIF ***** * A EQU 0 A-REGISTER B EQU 1 B-REGISTER SUP SKP * RMOTE JSB #PKUP PICK UP PARAMETERS. DEF *+4 DEF PMASK DEF NAME DEF DEFLU * CLA STA D$SMP FOR RTE-M, CLEAR SMP NUMBER. IFZ ***** STA SLFLG SLAVE-OPEN FLAG := 0. STA SPFLG SPOOL FLAG := 0. * * SET UP P-TO-P BUFFER. LDA XEQT FIND FIRST WORD JSB COR.A OF AVAILABLE MEM. STA BUFER BUFFER STARTS THERE. CMA,INA LDB BGLWA FIND LAST WORD. ADA B CALCULATE LENGTH. AND ML256 MAKE IT MULTIPLE OF 256. STA MAXBF LDB D4096 INSURE MAX CMA,INA BUFFER IS ADA D4096 <= 4096. SSA STB MAXBF * LDA #LU3K SET NODE NUMBER CMA,INA TO NEGATIVE STA NOD3K HP 3000 LU. XIF ***** * LDA LPRMP INITIALIZE FOR STA PROMP LOCAL PROMPT CHAR. * LDA MD6 SET ZERO-LENGTH RECORD STA ZLCNT COUNTER TO -6. SPC 1 * * PROCESS FIRST PARAMETER--INPUT LU OR NAMR * LDA NAME CHECK IF P1=ASCII PARAM AND HB377 (A=0 IF NUMERIC). SZA JMP STYPE * LDA NAME IF FIRST PARAMETER AND B77 (MINUS CONTROL BITS) SZA,RSS IS ZERO, LDA DEFLU USE DEFAULT LU STA NAME JSB EQTYP CHECK TYPE OF INPUT LU. * STYPE STA LUTYP SAVE EQUIPMENT TYPE. SPC 1 * * PROCESS SECOND PARAMETER--LOG DEVICE * LDB P1 ASSUME PARAMETER WAS SUPPLIED. LDA P1 IF IT IS AND HB377 ALPHABETIC SZA,RSS SZB,RSS OR ZERO, LDB DEFLU USE DEFAULT LU. LDA B CLEAR CONTROL AND B77 BITS FOR D$LOG. STA D$LOG ADD "PRINT IOR B600 COLUMN-1" BIT STA LULOG FOR LULOG. JSB LOKLU LOCK LIST LU. SPC 1 * * PROCESS THIRD PARAMETER--SEVERITY CODE * LDA SEVER MAKE SURE CPA D2 SEVERITY JMP DOELU IS 2, CPA D1 1, OR JMP DOELU ZERO. CLA STA SEVER SPC 1 * * FIGURE OUT ERROR LU. * DOELU LDA NAME IF INPUT LDB LUTYP IS SZB,RSS INTERACTIVE, JMP IOR USE IT. LDA LULOG IF LOG JSB EQTYP LU IS SZA INTERACTIVE, JMP LDDEF LDA LULOG USE IT. JMP IOR LDDEF LDA DEFLU OTHERWISE USE DEFAULT. IOR IOR B600 SET "ECHO INPUT" BIT. STA ERRLU SAVE ERROR LU. SPC 1 LDA STKHD INITIALIZE TRANSFER STACK TO JMP M1221 CONTAIN INPUT LU/NAMR. SPC 1 B77 OCT 77 B600 OCT 600 PMASK BYT 3,3 #PKUP HAS 3 PARAMS, FIRST 2 NAMR. IFZ ***** ML256 OCT 177600 D4096 DEC 4096 XIF ***** SKP * * DISPLAY PROMPT CHARACTER (IF INTERACTIVE DEVICE). * CONTROL RETURNS HERE WHEN REQUEST PROCESSING COMPLETES. * QUERY LDA P.STK,I READ FROM JSB READ CURRENT INPUT. DEF POPTS (ERROR RETURN) DEF TRANS (EOF RETURN) * LDA P.STK ADA D3 ISZ A,I BUMP RECORD COUNT. * * ECHO THE REQUEST IF NOT INPUT FROM INTERACTIVE DEVICE. * ECHO LDA LUTYP SZA,RSS JMP CKCNT IT IS AN INTERACTIVE DEVICE. * CLA IF SEVERITY = 0, JSB ECHPR ECHO. * JSB IFBRK IF BREAK DEF *+1 FLAG IS SZA SET, JMP POPTS POP TO TOP OF STACK. * LDA INBUF FIRST CHARACTER MUST XOR PROMP BE CURRENT AND HB377 PROMPT CHARACTER. SZA JMP INVAL * LDA INBUF BLANK AND B377 OUT THE IOR BLANK PROMPT STA INBUF CHARACTER. * CKCNT LDB IOLEN NULL INPUT? SZB JMP PRSCM NO--GO PARSE COMMAND. ISZ ZLCNT BUMP ZERO-LENGTH INPUT COUNTER. JMP QUERY IGNORE UNTIL 6TH... JMP M0501 THEN TERMINATE. * ZLCNT NOP ZERO-LENTGH INPUT COUNTER * * PARSE THE OPERATOR REQUEST. * PRSCM LDA MD6 SET ZERO-LENGTH STA ZLCNT COUNTER TO -6. CLA,INA SET CHARACTER STA PNTR POINTER TO 1. JSB PNAMR PARSE COMMAND DEF P1 TO P1 ARRAY. * JMP M0000 TRY FOR COMMAND FIRST. SPC 2 TRANS DLD A.TR AT EOF, GENERATE DST INBUF TRANSFER. LDB D4 STB IOLEN LDB LUTYP IF NON-INTERACTIVE, SZB JMP ECHO GO ECHO. * AND B377 CHANGE FIRST IOR BLANK CHARACTER TO BLANK. STA INBUF JMP PRSCM PARSE COMMAND. SKP * LOCAL RTE OR REMOTE HP3000 COMMAND. * OTHER LDA PROMP IF SWITCHED LOCAL, SEND CPA LPRMP COMMAND TO RTE. JMP LCRTE * * SEND REMOTE HP3000 COMMANDS. LDA D$SMP HAS "HELLO" BEEN ENTERED? SZA,RSS JMP NHLLO NO. REPORT ERROR. IFZ ***** JSB CLSLV MAKE SURE SLAVE IS CLOSED. XIF ***** JSB BLKIL KILL LEADING BLANKS IN COMMAND. JSB CMNDS SEND COMMAND TO HP3000. DEF *+3 DINBF DEF INBUF DEF IOLEN * JMP QUERY * * PASS COMMAND TO LOCAL RTE. LCRTE JSB MESSS PROCESS COMMAND. DEF *+4 (RU & ON COME THRU HERE IF DEF INBUF "NOW" WAS SPECIFIED IN COMMAND.) DEF IOLEN DEF D$LOG PASS LOG LU. * SZA,RSS IF REPLY CHAR COUNT NON-ZERO: JMP QUERY * STA TEMP NEGATE CHARACTER COUNT. * LDA D$LOG SET "ECHO INPUT" & IOR B600 "PRINT COL 1" BITS. STA CNWRD JSB REIO DISPLAY REPLY MESSAGE. DEF *+5 DEF SD2 DEF CNWRD DEF INBUF DEF TEMP OTERR JSB EROUT ERROR RETURN. 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 P1 FETCH OPERATION CODE. XOR STAR IF "*" IN AND HB377 COLUMN 1, SZA,RSS JUST A JMP QUERY COMMENT. LDA P1 FETCH OPERATION CODE. AND UMASK UPSHIFT. STA OPP SET STOP FLAG. LDB LDOPC SET OPERATION TABLE POINTER. STB TEMP1 LDB LDJMP SET PROCESSOR JUMP ADDRESS. STB TEMP2 * M0030 CPA 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 10,SWHEBYTREXRUONRWLLSV IFZ ***** ASC 1,MO XIF ***** OPP NOP OP CODE FOR CURRENT REQ. "RW" EQU LDOPC+8 "LL" EQU LDOPC+9 * 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 M0600 RW COMMAND DEF M0700 LL COMMAND. DEF M0800 SEVERITY CODE. IFZ ***** DEF M0900 MOVE FILE. XIF ***** DEF OTHER ASSUME RTE OR HP3000 COMMAND. * NHLLO JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT DISPLAY "NEED HELLO" DEF NHMSG D6 DEC 6 JMP POPTS * NHMSG ASC 6,NEED "HELLO" * UMASK OCT 157737 UPSHIFT MASK. STAR BYT 52,0 CNWRD NOP BLNKS ASC 1, SPC 3 * SUBROUTINE TO CHECK FOR POSSIBLE NON-RMOTE COMMAND (EG: UDC FILE) * CALLING SEQUENCE: JSB CKUDC * RETURNS TO P+1 IF RMOTE COMMAND * GOES TO IF NOT * CKUDC NOP ENTRY. LDA P1+1 GET CHARS 3 & 4. CPA BLNKS IF BLANKS, JMP CKUDC,I IT'S AN RMOTE COMMAND. JMP OTHER OTHERWISE PASS TO OP SYSTEM. SKP * * SW[,N] * * CHANGE OR TOGGLE DESTINATION OF OPERATOR COMMANDS. * M0100 JSB CKUDC CHECK FOR NON-RMOTE COMMAND. JSB PNAMR PARSE NODE NUMBER DEF P1 INTO P1 ARRAY. LDA STAT1 CHECK IF FIRST PARAM SPECIFIED. AND D3 SZA JMP M0105 PARAM SPECIFIED. * LDB PROMP NO PARAM. TREAT AS A TOGGLE. 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 "DINIT". * M0105 LDA P1 PARAM GIVEN. AND UMASK UPSHIFT. CPA "LO" "LO" MEANS LOCAL. JMP M0109 LDA P1 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 "DINIT". CPB A CHECK FOR VALID REMOTE LU. JMP M0110 VALID. JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT DISPLAY "INVALID REMOTE LU". DEF ILLU DEC 9 JMP POPTS * M0109 CLA M0110 LDB LPRMP CHANGE THE PROMPT CHARACTER: SZA LOCAL IF NEW LU = 0, LDB RPRMP REMOTE IF NEW LU NON-ZERO. STB PROMP * LDA A.TR CHANGE CANNED XOR PROMP TR COMMAND AND B377 PROMPT. XOR PROMP STA A.TR JMP QUERY * NLSTN JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT DISPLAY "NEED TO RUN DINIT". DEF NLSN DEC 10 JMP POPTS NLSN ASC 10,NEED TO RUN "DINIT" ILLU ASC 9,INVALID REMOTE LU "LO" ASC 1,LO SKP * * PROCESSOR FOR "HELLO" COMMAND. * M0200 LDA P1+1 MAKE SURE AND UMASK SECOND TWO CPA "LL" CHARACTERS RSS ARE "LL". JMP OTHER NO--MUST BE ANOTHER COMMAND. LDA PROMP IF LOCAL PROMPT, CPA LPRMP JMP NDREM COMMAND IS AN ERROR. JSB BLKIL KILL LEADING BLANKS. IFZ ***** JSB CLSLV MAKE SURE SLAVE IS CLOSED. XIF ***** * LDA P.STK,I IF CURRENT INPUT IS A LOGICAL UNIT, STA B USE IT. IF NOT, USE DEFAULT LU. AND HB377 SZA LDB DEFLU LDA B REMOVE ANY AND B77 CONTROL BITS. STA D$INP * JSB HELLO SEND "HELLO" TO HP3000. DEF *+7 DEF ERROR DEF #LU3K LU OF HP3000. DEF D$LOG LU OF LOG DEVICE. DEF SMPNM RETURNED PROCESS NUMBER. @INBF DEF INBUF ADDR OF HELLO MESSAGE. @REC DEF IOLEN POS. # BYTES. * LDA ERROR CHECK FOR ERRORS. SZA,RSS JMP QUERY OK. CPA D1 ERROR CODE = 1? RSS JMP RFAIL NO. * JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT DISPLAY MESSAGE. DEF HFAIL D13 DEC 13 * JMP POPTS * HFAIL ASC 13,HELLO FAILED OR LINE DOWN SKP * * PROCESSOR FOR "BYE" COMMAND. * M0300 LDA P1+1 IF CHARACTERS AND UMSK2 3 AND 4 AREN'T CPA "E" "E ", IT'S RSS NOT A BYE COMMAND. JMP OTHER LDA PROMP 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 LOGOF SEND "BYE" TO HP3000. SZA JMP RFAIL FAILED. * JMP QUERY * "E" ASC 1,E UMSK2 OCT 157777 SPC 3 * SUBROUTINE TO LOG OFF FROM 3000. USED FOR "BYE" AND "EXIT" * CALLING SEQUENCE: JSB LOGOF * * LOGOF NOP ENTRY. IFZ ***** JSB CLSLV CLOSE SLAVE (IF OPEN). XIF ***** * JSB BYE SEND "BYE" DEF *+5 DEF ERROR DEF #LU3K DEF D$LOG DEF SMPNM * LDA ERROR LOAD ERROR CODE. JMP LOGOF,I RETURN. SKP RFAIL CPA D5 JMP TMOUT CPA "IO" JMP OTERR CPB "05" JMP TMOUT CPA D1 JMP DSCNT CPB "01" JMP DSCNT * JSB PRINT DISPLAY "REQUEST FAILED". DEF RQFL DEC 7 * JMP POPTS * JSB ECHP2 ECHO IF SEVERITY=2. DSCNT JSB PRINT DISPLAY "LINK IS DISCONNECTED". DEF DISCN DEC 10 JMP POPTS * RQFL ASC 7,REQUEST FAILED * TMOUT JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT "TIMEOUT" DEF TOMSG DEC 15 * JMP POPTS * TOMSG ASC 15,TIMEOUT: NO REPLY FROM REMOTE * NDREM JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT NOT LOCAL COMMAND. DEF NTLOC DEC 9 * JMP POPTS * NTLOC ASC 9,NOT LOCAL COMMAND DISCN ASC 10,LINK IS DISCONNECTED "IO" ASC 1,IO "01" ASC 1,01 "05" ASC 5,05 SKP * TR PROCESSOR. * * TRANSFER CONTROL TO LU OR DISK FILE. * M0400 JSB CKUDC CHECK FOR NON-RMOTE COMMAND. JSB CLSFL CLOSE DISC FILE, IF OPEN. * JSB PNAMR PARSE NAMR. DEF NAME LDA STATS ISOLATE STATUS AND D3 BITS. SZA,RSS IF NOT SPECIFIED, CCA,RSS SIMULATE "TR,-1". LDA NAME SZA,RSS IS PARAMETER ZERO? JMP INVAL YES...INVALID! SSA,RSS NEGATIVE INTEGER? JMP M1220 NO. * * BACK UP THROUGH TRANSFER STACK. * LDB P.STK TOP OF STACK? BKUP CPB STKHD JMP M0501 YES. SIMULATE "EX" REQUEST. ADB MD6 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 D6 M1221 STA P.STK CHECK FOR CPA STKEN END OF STACK. RSS JMP M1230 JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT STACK OVERFLOW. DEF STKOV DEC 9 * JMP POPTS POP TO TOP OF STACK. * M1230 LDB NAME STORE LU OR FILE NAME. STB A,I INA LDB NAME+1 STB A,I INA LDB NAME+2 STB A,I INA CLB,INB SET RECORD NUMBER TO 1. STB A,I INA LDB SECU STORE SECURITY. STB A,I INA LDB CRN STORE CART NO. STB A,I * * IF DISK FILE, OPEN AND OPTIONALLY POSITION. * M1250 LDA P.STK,I AND HB377 SZA,RSS JMP QUERY LU. GO GET NEXT REQUEST. * STA LUTYP SET INPUT TYPE NON-INTERACTIVE. LDA P.STK PICK UP ADA D4 SECURITY LDB A,I AND STB SECU CARTRIDGE INA NUMBER. LDB A,I STB CRN * JSB OPEN OPEN THE FILE. DEF *+7 DEF DCB DEF ERROR DEF P.STK,I DEF D0 DEF SECU DEF CRN * JSB CKRTE CHECK FILE ERROR. JMP POPTS (ERROR RETURN) * LDA P.STK POSITIONING REQUIRED? ADA D3 LDB A,I CPB D1 (REC. CNT MORE THAN 1?) JMP QUERY NO. STB TEMP YES. * JSB POSNT POSITION TO NEXT RECORD. DEF *+5 DEF DCB DEF ERROR DEF TEMP NUR GREATER THAN ZERO. DEF TEMP ABSOLUTE RECORD NUMBER. * JSB CKRTE CHECK FOR ERRORS. JMP POPTS (ERROR FOUND) JMP QUERY * SPC 5 * * 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. * WORD 5 = SECURITY CODE * WORD 6 = CARTRIDGE NUMBER * P.STK NOP STACK POINTER. STKHD DEF *+1 * BSS 48 8 ENTRIES. * STKEN DEF * STACK LWA+1. * STKOV ASC 9,TR STACK OVERFLOW SKP * * EX PROCESSOR * * TERMINATE THE OPERATOR INTERFACE PROGRAM. * M0500 JSB CKUDC CHECK FOR NON-RMOTE COMMAND. M0501 LDA D$SMP CHECK IF A "HELLO" IS OUTSTANDING. SZA,RSS JMP M0510 NO. * JSB LOGOF YES. ISSUE AN AUTO BYE. SZA,RSS CHECK FOR ERRORS. JMP M0510 NONE. JSB PRINT ERROR FROM "BYE". DEF BYMSG D9 DEC 9 * M0510 JSB PRINT DISPLAY TERMINATION MESSAGE DEF TRMSG ON LOG DEVICE. DEC 5 * JSB CLSFL CLOSE OPEN FILES. * JSB EXEC EXIT. DEF *+2 DEF D6 * BYMSG ASC 9, AUTO "BYE" FAILED TRMSG ASC 5,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 PROMP JMP OTHER LET IT GO BY. JSB PNAMR PARSE PROGRAM DEF NAME NAME. JSB PNM1 PARSE FIRST PARAMETER. LDA OPP IF "RW" COMMAND, CPA "RW" SKIP THE JMP CKST "NOW" CHECK. CPB "NO" IF "NOW", JMP OTHER LET IT GO. CKST LDA STAT1 IF NOT PROVIDED, AND D3 SZA,RSS LDB DEFLU USE DEFAULT LU. STB TEMP1 JSB PNM1 PARSE SECOND PARAMETER. STB TEMP2 JSB PNM1 PARSE THIRD PARAMETER. STB TEMP3 JSB PNM1 PARSE FOURTH PARAMETER. STB TEMP4 JSB PNAMR PARSE FIFTH PARAMETER. DEF P1 LDB D$SMP CMB,INB LDA STAT1 IF NOT PROVIDED, AND D3 SZA,RSS STB P1 USE NEGATIVE SMP NUMBER. * LDA IOLEN MAKE # OF CMA,INA BYTES STA IOLEN NEGATIVE. * LDA SD9 CHECK WHETHER LDB OPP ICODE SHOULD BE CPB "RW" QUEUE WITH WAIT LDA SD23 ("RW" COMMAND) OR STA TEMP SCHEDULE WITH WAIT. * JSB EXEC SCHEDULE THE PROGRAM WITH WAIT. DEF *+10 DEF TEMP ICODE: 9 (SCHEDULE) OR 23 (QUEUE) DEF NAME PROGRAM NAME. DEF TEMP1 SCHEDULE PARAMETERS. DEF TEMP2 DEF TEMP3 DEF TEMP4 DEF P1 DEF INBUF DEF IOLEN 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" LDA DSC10 CPB "10" JMP SCMSG "NOT ENOUGH SAM" SCM1 LDA @RQFL "REQUEST FAILED" SCMSG STA SCM2 JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT SCM2 NOP DEC 7 JMP POPTS * DSC03 DEF *+1 ASC 7,ILLEGAL STATUS * DSC05 DEF *+1 ASC 7,NO SUCH PROGRM * PGBZY DEF *+1 ASC 7,PROGRAM BUSY * DSC10 DEF *+1 ASC 7,NOT ENOUGH SAM * @RQFL DEF RQFL SD9 DEF 9,I SD23 DEF 23,I "SC" ASC 1,SC "03" ASC 1,03 "10" ASC 1,10 "NO" ASC 1,NO SKP * * PROCESSOR FOR LL COMMAND. CHANGE $STDLIST DESTINATION (D$LOG). * M0700 JSB CHKP1 MAKE SURE P1 IS NUMERIC. LDA P1 LOAD LU. AND B77 REMOVE CONTROL BITS. STA D$LOG CHANGE $STDLIST DESTINATION. JSB LOKLU LOCK $STDLIST LU. LDA D$LOG ADD "PRINT IOR B600 COLUMN 1" BIT STA LULOG AND STORE LULOG. JMP QUERY SPC 3 * * PROCESSOR TO CHANGE SEVERITY CODE. * M0800 JSB CHKP1 MAKE SURE P1 IS NUMERIC. LDA P1 MAKE SURE ADA MD3 IT'S BETWEEN SSA,RSS 0 AND 2. JMP INVAL LDA P1 SET SEVERITY STA SEVER CODE. JMP QUERY SPC 3 * * COMMON CODE FOR LL AND SV PROCESSORS. CHECKS P1. * CHKP1 NOP ENTRY JSB CKUDC CHECK FOR NON-RMOTE COMMAND. JSB PNAMR PARSE PARAMETER. DEF P1 LDA P1 NEGATIVE? SSA JMP INVAL INVALID! LDA STAT1 WAS AND D3 IT CPA D1 NUMERIC? JMP CHKP1,I YES--RETURN. * INVAL JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT DISPLAY "INVALID INPUT". DEF INVLM DEC 7 JMP POPTS POP THE TRANSFER STACK. * INVLM ASC 7, INVALID INPUT SKP * * STORAGE AND CONSTANTS * SPC 1 ************************************* WARNING: DO NOT CHANGE ORDER OF * * "NAME" THROUGH "SEVER". * RTE FILE NAMR PARAMETERS * NAME BSS 3 * STATS BSS 1 * SECU BSS 1 * CRN BSS 1 * TYPE BSS 1 * SIZE BSS 1 * RLENG BSS 2 * * * * ALTERNATE PARSE BUFFER * P1 BSS 3 * STAT1 BSS 1 * P2 BSS 6 * * * * SEVERITY CODE * SEVER NOP * ************************************* END OF #PKUP PARAMETER BLOCK SPC 1 B20 OCT 20 B377 OCT 377 HB377 BYT 377,0 MD2 DEC -2 MD3 DEC -3 MD6 DEC -6 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D8 DEC 8 SD1 DEF 1,I SD2 DEF 2,I "00" ASC 1,00 SMPNM NOP ERROR NOP TEMP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP IOLU NOP LUTYP NOP EQ. TYPE OF INPUT DEVICE. LULOG NOP LU OF LOG DEVICE. A.TR ASC 2,$TR TR COMMAND WITH CURRENT PROMPT CHAR. LPRMP ASC 1,$_ "$" PROMPT FOR LOCAL RTE. RPRMP ASC 1,#_ "#" PROMPT FOR REMOTE 3000. PROMP ASC 1, CURRENT OPERATOR PROMPT. BLANK BYT 40,0 DEFLU BSS 1 DEFAULT LU. ERRLU BSS 1 ERROR LU. SKP *** SUBROUTINES *** SPC 2 * SUBROUTINE TO CHECK FOR RTE FILE ERROR * CALLING SEQUENCE: JSB CKRTE * * * CKRTE NOP ENTRY POINT. ISZ CKRTE SET NORMAL RETURN. LDA ERROR IF ERROR SSA,RSS >= 0, JMP CKRTE,I RETURN. CMA,INA USE ABSOLUTE STA ERROR VALUE OF ERROR. JSB ECHP2 ECHO IF SEVERITY=2. * JSB KCVT CONVERT TO ASCII. DEF *+2 DEF ERROR IOR "00" STA RTERR JSB PRINT PRINT DEF RERMS ERROR DEC 9 MESSAGE. CCA TAKE ADA CKRTE ERROR JMP A,I RETURN. * RERMS ASC 8,RTE FILE ERROR - RTERR BSS 1 SPC 3 * SUBROUTINE TO ECHO LAST INPUT IF SEVERITY IS 2 * CALLING SEQUENCE: JSB ECHP2 * ECHP2 NOP ENTRY. LDA D2 JSB ECHPR JMP ECHP2,I RETURN. SKP * * SUBROUTINE TO READ A RECORD. * CALLING SEQUENCE: * LDA * JSB READ * DEF * DEF * ERRTN NOP EFRTN NOP READ NOP ENTRY. STA IOLU SAVE INPUT INDICATOR. LDB READ,I PICK UP STB ERRTN RETURN ISZ READ ADDRESSES. LDB READ,I STB EFRTN ISZ READ AND HB377 NON ZERO IF FILE NAME, ELSE LU. SZA JMP FLRD DISK FILE. * LDA IOLU JSB EQTYP CHECK TYPE. STA LUTYP LDB MD768 ASSUME 768 MAX CHAR READ. SZA JMP LURD LU NOT INTERACTIVE. * JSB REIO DISPLAY PROMPT ON INTERACTIVE DEVICE. DEF *+5 DEF D2 DEF IOLU DEF PROMP DEF D1 * LDA IOLU SET ECHO BIT. IOR B600 STA IOLU LDB MD80 USE 80 CHARACTER READ. * * READ OPERATOR REQUEST FROM CURRENT DEVICE OR FILE. * LURD STB RDLEN STORE NUMBER OF CHARACTERS. JSB REIO LU READ. DEF *+5 DEF SD1 DEF IOLU DEF INBUF DEF RDLEN RSS JMP RDOK IF ERROR ON INPUT LU, JSB EROUT PRINT MESSAGE. JMP ERRTN,I TAKE ERROR RETURN. * RDOK STA TEMP SAVE STATUS WORD. STB IOLEN SAVE BYTE COUNT. JSB EOFCK CHECK FOR END OF FILE. JMP EFRTN,I GOT IT. JMP READ,I NORMAL RETURN. * FLRD JSB READF DISK FILE. DEF *+6 (OPENED WHEN FIRST TRANSFER DEF DCB WAS PERFORMED) DEF ERROR DEF INBUF DEF D384 DEF IOLEN ACTUAL WORD COUNT. * JSB CKRTE CHECK FOR ERRORS. JMP ERRTN,I ERROR RETURN. * LDA IOLEN IF EOF, INA,SZA,RSS JMP EFRTN,I TAKE EOF RETURN. LDA IOLEN SET IOLEN TO CLE,ELA NUMBER OF STA IOLEN BYTES. JMP READ,I NORMAL RETURN. SPC 1 D384 DEC 384 MD768 DEC -768 MD80 DEC -80 RDLEN NOP 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. DEF PARMS CLA CLEAR ERROR CODE STORAGE. STA D$ERR STA D$ERR+1 * * BEGIN CONSTRUCTION OF REQUEST BUFFER WITH * CLASS, STREAM, AND BYTE LENGTH. * LDA D3 STORE MESSAGE CLASS = 3. STA D$3BF LDA B20 STORE STREAM TYPE = 20 OCTAL. STA D$3BF+2 LDA PARMS+1,I SET BYTE COUNT IN REQUEST. STA D$3BF+7 * * MOVE ASCII MESSAGE TO REQUEST BUFFER. * INA ROUND UP NUMBER OF BYTES. CLE,ERA MAKE WORDS. STA TEMP LDA PARMS SOURCE ADDRESS OF COMMAND. LDB D$RQB DESTINATION ADDRESS. ADB D8 * JSB .MVW DEF TEMP NOP * * 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 DEFAULT LU. AND HB377 SZA LDB DEFLU LDA B REMOVE ANY AND B77 CONTROL BITS. STA 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 LONG TIMEOUT. JMP RFAIL REQUEST FAILED. * JMP CMNDS,I RETURN. * CONWD OCT 140000 SPC 4 * * SUBROUTINE TO RELEASE ANY LOCKED LUS, THEN LOCK D$LOG. * CALLING SEQUENCE: JSB LOKLU * LOKLU NOP ENTRY. JSB LURQ UNLOCK DEF *+4 ANY DEF UNLOK LUS DEF D$LOG HELD. DEF D1 NOP * LDA D$LOG IF INTERACTIVE, JSB EQTYP SZA,RSS JMP LOKLU,I RETURN. * JSB LURQ LOCK DEF *+4 D$LOG. DEF LOCK DEF D$LOG DEF D1 D0 NOP JMP LOKLU,I RETURN. * UNLOK OCT 140000 LOCK OCT 40001 SKP * * SUBROUTINE TO TEST FOR END OF FILE ON VARIOUS DEVICES. * CALLING SEQUENCE: * * * JSB EOFCK * * * EOFCK NOP ENTRY. CLE LDA LUTYP EOF DEPENDS ON DEVICE. SZA,RSS JMP EOF5 INTERACTIVE. (NO EOF.) CPA D1 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 EOF6 EOF2 RAL,RAL CHECK BIT 5. SSA,RSS JMP EOF5 NO EOF. * EOF4 LDA IOLEN CHECK FOR BLANK CARD. SZA EOF5 ISZ EOFCK EOF6 JMP EOFCK,I SKP * * KILL LEADING BLANKS IN COMMAND. * BLKIL NOP ENTRY POINT. 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 IOLEN CMA,INA STA TEMP3 NEGATIVE # BYTES. 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 IOLEN CHARACTER COUNT. STA IOLEN SZA CHECK FOR ZERO LENGTH. JMP LBLNK GO LOOK FOR ANOTHER LEADING BLANK. * JMP QUERY ALL BLANKS. GET NEXT COMMAND. SKP * * SUBROUTINE TO FIND EQUIPMENT TYPE OF AN LU. * RETURN DRIVER TYPE, OR 0 FOR INTERACTIVE LU. * CALLING SEQUENCE: LDA * JSB EQTYP * EQTYP NOP ENTRY. STA TEMP1 * JSB IFTTY CALL SYSTEM DEF *+2 ROUTINE TO DEF TEMP1 CHECK LU. SZA JMP TTY NON-INTERACTIVE-- LDA B PLACE DEVICE ALF,ALF TYPE IN AND B377 A-REG. JMP EQTYP,I RETURN. TTY CLA INTERACTIVE. TYPE=0. JMP EQTYP,I SPC 3 * * SUBROUTINE TO PRINT A RECORD ON LULOG. * CALLING SEQUENCE: JSB PRINT * DEF * DEC * PRINT NOP ENTRY POINT LDA PRINT,I PICK STA MSG UP ISZ PRINT PARAMETERS. LDA PRINT STA MSLEN ISZ PRINT SET RETURN ADDR. DOPRT JSB REIO CALL REIO FOR WRITE. DEF *+5 DEF SD2 DEF LULOG MSG NOP MSLEN NOP RSS JMP PRINT,I RETURN. * LDA ERRLU PRINT ERROR: IF ERROR CPA LULOG LU IS DIFFERENT FROM JMP PRINT,I LOG LU, STORE ERROR STA LULOG LU AS LOG LU AND JMP DOPRT DO THE PRINT AGAIN. SKP * RESULT OF BAD INPUT LU/FILE: * CLOSE COMMAND FILE (IF OPEN) * TERMINATE IF INPUT IS NON-INTERACTIVE. * POPTS LDA LUTYP IF CURRENT INPUT SZA,RSS IS INTERACTIVE, JMP QUERY EVERYTHING IS OK. JSB CLSFL CLOSE COMMAND FILE (IF ONE IS OPEN). * LDA STKHD STA P.STK RESET STACK POINTER. * LDA P.STK,I IF INPUT AND HB377 IS FROM SZA A FILE, JMP M0501 TERMINATE. LDA P.STK,I IF INPUT LU JSB EQTYP IS NOT SZA INTERACTIVE, JMP M0501 TERMINATE. JMP QUERY TRY TO READ AGAIN. SPC 3 * SUBROUTINE TO PRINT ERROR MESSAGE. * CALLING SEQUENCE: * JSB EROUT * EROUT NOP ENTRY. DST EMSG+3 SET UP MESSAGE. JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT PRINT ON LULOG. DEF EMSG D5 DEC 5 JMP EROUT,I RETURN. * EMSG ASC 5,RMOTE SPC 3 * SUBROUTINE TO ECHO LAST INPUT. * CALLING SEQUENCE: LDA * JSB ECHPR * * ECHPR NOP ENTRY. CPA SEVER IF SEVERITY CODE RSS NOT = A-REGISTER, JMP ECHPR,I DON'T ECHO. LDA IOLEN CMA,INA STA TEMP4 JSB PRINT PRINT ON LULOG. DEF INBUF TEMP4 NOP JMP ECHPR,I RETURN SPC 3 * SUBROUTINE TO CLOSE THE FILE OPEN TO DCB, IF OPEN. * CALLING SEQUENCE: JSB CLSFL * CLSFL NOP JSB CLOSE CLOSE THE FILE. DEF *+2 DEF DCB JMP CLSFL,I RETURN. SPC 3 * SUBROUTINE TO CALL PNAMR WITH P1 BUFFER PNM1 NOP ENTRY. JSB PNAMR DEF P1 LDB P1 LOAD PARAMETER. JMP PNM1,I RETURN. SPC 2 * SUBROUTINE TO CALL NAMR PARSE ROUTINE * CALLING SEQUENCE: * JSB PNAMR * DEF * IPBUF NOP PNAMR NOP ENTRY POINT LDA PNAMR,I PICK UP STA IPBUF BUFFER ADDRESS. ISZ PNAMR SET RETURN. JSB NAMR CALL DEF *+5 NAMR DEF IPBUF,I ROUTINE. DEF INBUF DEF IOLEN DEF PNTR JMP PNAMR,I RETURN. SPC 2 PNTR NOP COLUMN POINTER SPC 1 DCB BSS 144 SPC 1 *** DO NOT CHANGE ORDER OF "IOLEN" AND "INBUF" *********** IOLEN NOP INPUT LENGTH (BYTES) * INBUF BSS 384 INPUT BUFFER * ********************************************************** SKP UNL IFZ ***** LST * * PROCESSOR FOR MOVE COMMAND * M0900 JSB CKUDC CHECK FOR NON-RMOTE COMMAND. LDA D$SMP IF NO HELLO SZA,RSS ISSUED, JMP NHLLO REPORT ERROR. CLA SET RECORD STA COUNT COUNT TO ZERO. LDA SLFLG IF SLAVE IS THERE, SZA SKIP POPEN. JMP CLOSF * LDA MAXBF IF MAX BUFFER SZA,RSS SIZE IS ZERO, JMP NOSPC ERROR! STA TAG10 SET MAX LENGTH. JSB POPEN OPEN SLAVE. DEF *+6 DEF PCB DEF ERROR DEF SNAME DEF NOD3K DEF TAG JSB CHKDS CHECK FOR DS ERROR. ISZ SLFLG SET SLAVE-OPEN FLAG. * CLOSF JSB CLSFL CLOSE COMMAND FILE SO DCB CAN BE USED. CLA DISABLE "BREAK" STA D$BRK AND "CONTROL-Y" STA D$CTY CHECKS. * LDA PROMP IF PROMPT CPA RPRMP IS REMOTE, JMP FRRMO GO MOVE FROM 3000. SPC 1 ** MOVE FILE FROM LOCAL TO REMOTE SYSTEM * * OPEN RTE SOURCE FILE LDA IPRMP CHANGE PROMPT TO "/" IN CASE STA PROMP INPUT IS FROM AN LU. JSB PNAMR GET NAMR DEF NAME PARAMETERS. LDA STATS IF FILE AND D3 WAS SPECIFIED CPA D3 SPECIFIED, JMP OP1KF DO THE OPEN. LDA NAME IF LU IS SSA NEGATIVE, JMP BADLU REPORT BAD LU. JMP CRMPE * OP1KF LDA HB377 STA LUTYP SET LU TYPE = FILE. *+ CALL OPEN(DCB,ERROR,NAME,B610,SECU,CRN) JSB OPEN + DEF *+07 + DEF DCB + DEF ERROR + DEF NAME + DEF B610 + DEF SECU + DEF CRN + JSB CKRTE FILE ERROR? JMP ABEND YES. * * CREATE MPE FILE CRMPE JSB GMPNM GET MPE FORMALDESIGNATOR. JSB PNAMR PICK UP MOVE MODE. DEF P1 * LDA P1 IF USER SPECIFIED CPA "UN" UNNUMBERED FORMAT, RSS JMP TEST2 LDB D4 FOPTN := 4 JMP STFOP (FIXED LEN, ASCII). TEST2 LDB B100 ELSE, IF RTE SOURCE LDA ERROR FILE IS ASCII CPA D4 (TYPE = 4), LDB B104 FOPTN := OCTAL 104 STFOP STB TAG (VARIABLE LEN, ASCII). * (OTHERWISE FOPTN := OCT 100, VAR. LEN, BINARY) * LDA P2 DID USER CPA "SP" SPECIFY RTE SPOOL FILE JMP SETCC CPA "CC" OR CARRIAGE CONTROL? JMP SETCC JMP STRLN NO--GO SET RECORD LENGTH. SETCC LDA TAG YES--SET CCTL BIT IN FOPTIONS. IOR B404 STA TAG * STRLN CLB IF "UNNUMBERED" LDA P1 FORMAT SPECIFIED, CPA "UN" SET RECORD LENGTH LDB D40 TO 40. OTHERWISE USE 0. * * SEND TAG FIELDS AND NAME TO SLAVE. LDA D3 TAG(1) = 3 (FOR WRITE). JSB SNDWR * CLA SET TOTAL LENGTH STA TOTLN TO ZERO. * * IF TAG9 = 0, FILE ALREADY EXISTED. OK TO DESTROY DATA? LDA TAG9 SZA JMP LLOOP JSB OVER? ASK: "OVERWRITE?" CPA "Y" IF YES, JMP LLOOP GO TRANSFER FILE. JMP ABEND OTHERWISE, CLOSE BOTH FILES. * * MAIN TRANSFER LOOP... LLOOP LDA NAME READ A JSB READ RECORD. DEF ABEND (ERROR RETURN) DEF I0000 (EOF RETURN) LDA LUTYP SPECIAL CHECK: IF IOR IOLEN INTERACTIVE AND SZA,RSS LEN = 0, TAKE THE JMP I0000 EOF RETURN. ISZ COUNT BUMP RECORD COUNT. NOP JSB CONT CONTINUE? LDA TAG11 IF RTE FILE IS CPA "SP" SUPPOSED TO BE JSB CKSPL SPOOLED, CHECK IT. * LDB IOLEN CALCULATE WORD LENGTH := ADB D3 (BYTE LENGTH + 3)/2 CLE,ERB (ALLOW FOR ODD BYTE & STB WRDLN COUNT WORD). * IF WRDLN + TOTLN > TAG10 ADB TOTLN LDA TAG10 CMA,INA ADA B SZA SSA JMP I0001 *+ CALL PWRIT(PCB,ERROR,BUFER,TOTLN,TAG) JSB PWRIT + DEF *+06 + DEF PCB + DEF ERROR + DEF BUFER,I DEF TOTLN + DEF TAG + JSB CHKDS CHECK FOR DS ERROR. CLA RESET TOTAL STA TOTLN LENGTH. *+ END I0001 EQU * LDA @REC MOVE RECORD LDB BUFER TO BUFFER. ADB TOTLN JSB .MVW DEF WRDLN NOP *+ TOTLN := TOTLN + WRDLN LDA TOTLN + ADA WRDLN + STA TOTLN + *+ ELSE JMP LLOOP * * IOLEN < 0--END OF FILE. WRITE LAST XFER BUFFER. *+ TAG3 := -1 I0000 CCA STA TAG3 + *+ CALL PWRIT(PCB,ERROR,BUFER,TOTLN,TAG) JSB PWRIT + DEF *+06 + DEF PCB + DEF ERROR + DEF BUFER,I DEF TOTLN + DEF TAG + JSB CHKDS CHECK FOR DS ERROR. *+ END JMP EOF SPC 3 *** CODE TO INTERPRET FIRST COLUMN OF MPE RECORD AS CARRIAGE CONTROL *** SPC 1 CCTL LDA BUFAD,I ISOLATE FIRST AND HB377 CHARACTER. ALF,ALF MOVE TO RIGHT BYTE. STA CNTRL CPA PLUS "+"? JMP HPLUS YES. * ADA MB200 IF LESS THAN SSA OCTAL 201, JMP SCHTB TRY TABLE SEARCH. ADA MB67 IF LESS THAN SSA OCTAL 270, JMP SKIPN SKIP N LINES. ADA MB10 IF LESS THAN SSA OCTAL 300, JMP SKIPM SKIP TWO TIMES. * * SEARCH TABLE SCHTB LDB STTBL POINT TO BEGINNING OF TABLE. LOOP3 LDA B,I GET ENTRY. XOR CNTRL IS IT WHAT AND B377 WE'RE LOOKING FOR? SZA,RSS JMP FOUND INB NO--BUMP POINTER JMP LOOP3 AND STAY IN LOOP. * FOUND CPB ENTBL END OF TABLE? JMP GOWRT YES--GO WRITE. LDA B,I GET RTE CONTROL AND HB377 WORD. ALF,ALF DCNTR JSB DOCTL PERFORM I/O CONTROL. LDA IOLEN IF RECORD ONLY CPA D1 CONTAINED CONTROL, JMP BMPCT SKIP THE WRITE. JMP GOWRT GO WRITE. SPC 1 * CHANGE MPE "+" CONTROL TO RTE "*" HPLUS LDA BUFAD,I GET WORD. AND B377 MASK OUT LEFT BYTE. IOR STAR AND "*". STA BUFAD,I STORE. JMP GOWRT GO WRITE. SPC 1 *** LINE SKIPPING *** * * SKIP 56-63 LINES... SKIPM LDA D55 SKIP 55 JSB DOCTL LINES. LDA CNTRL SUBTRACT 55 ADA MD55 FROM MPE CONTROL. RSS CONTINUE IN "SKIPN" * * SKIP 1-55 LINES... SKIPN LDA CNTRL SUBTRACT OCTAL 200 ADA MB200 FROM MPE CCNTL. JMP DCNTR GO PERFORM CONTROL. SPC 1 * SUBROUTINE TO PERFORM LINE SPACING I/O CONTROL FUNCTION. * CALLING SEQUENCE: LDA * JSB DOCTL * DOCTL NOP ENTRY. STA CNTRL SAVE CONTROL WORD. LDA NAME SET CONTROL AND B77 BITS TO PERFORM IOR B1100 CONTROL FUNCTION. STA TEMP JSB EXEC CALL EXEC DEF *+4 FOR CONTROL. DEF SD3 DEF TEMP DEF CNTRL NOP IGNORE ERROR. JMP DOCTL,I RETURN. SKP * MOVE FILE FROM REMOTE TO LOCAL SYSTEM * FRRMO JSB GMPNM GET MPE FORMALDESIGNATOR JSB PNAMR GET NAMR DEF NAME PARAMETERS. JSB PNAMR PICK UP DEF P1 MOVE MODE. LDA NAME IF USER SPECIFIED AND HB377 RTE FILE AND LDB P2 ALSO CARRIAGE SZA CONTROL, SZB,RSS JMP OK JSB WARN WARN HIM AND CLA CLEAR OPTION. STA P2 * * SEND TAG FIELDS AND NAME TO SLAVE. OK CLB TAG(6) := 0 (RECLEN). LDA D2 TAG(1) := 2 (FOR READ). JSB SNDWR * (SLAVE SETS UP TAG WORDS 0 AND 8 TO BE FOPTIONS AND RECLEN.) * LDA STATS IF RTE AND D3 FILE WAS CPA D3 SPECIFIED, JMP OPN1K GO OPEN IT. * LDA NAME IF LU IS SSA NEGATIVE, JMP BADLU REPORT BAD LU. LDA SECU IF SPOOLING OPTION CPA "SP" FOR LU WAS SPECIFIED, JMP SETSP SET IT UP. * TYP0 CLA PRETEND IT'S TYPE 0 FILE. JMP SETYP SET TYPE AND GO MOVE. * * SPOOLING REQUESTED. SET UP SPOOLING FILE: RM SETSP JSB LUTRU GET "REAL" DEF *+2 LU NUMBER DEF D$LOG (IN CASE STA TEMP OF SESSION). JSB KCVT SET UP DEF *+2 DEF TEMP PORTION OF IOR "00" NAME. STA SPFIL+1 LDA D24 SET FILE STA SIZE LENGTH TO CLA 24 BLOCKS AND STA RLENG CLEAR RECORD LEN. LDA D100 SET UP STA TEMP3 SETNN JSB KCVT PORTION DEF *+2 OF NAME. DEF TEMP3 STA SPFIL+2 * LDA $SPCR SET CARTRIDGE NUMBER STA SPCRN IN SPOOL BUFFER. * JSB CREAT CREATE SPOOLING FILE DEF *+8 (TYPE = 3). DEF DCB DEF ERROR DEF SPFIL DEF SIZE DEF D3 DEF D0 DEF $SPCR LDA ERROR IF ERROR = -2, CPA MD2 (FILE EXISTS), JMP TRY2 TRY DIFFERENT . JSB CKRTE ERROR CREATING FILE? JMP ABEND YES! * * FILE CREATED... DLD SPFIL REPORT THE DST SPFLN SPOOL FILE LDA SPFIL+2 NAME TO STA SPFLN+2 THE USER. JSB PRINT DEF SPMSG DEC 9 * JSB CLSFL CLOSE IT SO SMP CAN USE IT. LDA NAME SAVE LU AND NOT77 CONTROL STA MASK BITS. XOR NAME SAVE LU STA OUTLU NUMBER. JSB EQTYP SET DEVICE STA SPTYP TYPE. JSB SPOPN OPEN FILE DEF *+3 TO SMP. DEF SPBUF DEF ERROR JSB CKRTE ERROR? JMP ABEND YES. STA SPFLG SET SPOOL FLAG. IOR MASK ADD CONTROL BITS. STA NAME SET I/O LU TO SPOOL LU. JMP TYP0 SET TYPE & GO MOVE. * * DUPLICATE NAME. TRY AGAIN. TRY2 ISZ TEMP3 BUMP PART OF NAME. LDA TEMP3 IF UP TO CPA D200 200, RSS JMP SETNN JSB CKRTE ERROR! NOP JMP ABEND * * SEE IF RTE FILE ALREADY EXISTS BY TRYING TO OPEN IT. * CALL OPEN(DCB,ERROR,NAME,B610,SECU,CRN) OPN1K JSB OPEN DEF *+7 DEF DCB DEF ERROR DEF NAME DEF B610 DEF SECU DEF CRN LDA ERROR IF ERROR < 0, SSA TRY TO CREATE IT. JMP CRT1K STA TYPE SAVE TYPE. SZA,RSS IF TYPE 0 FILE, JMP SETYP GO MOVE. * FILE EXISTS. IS IT OK TO DESTROY EXISTING DATA? JSB OVER? ASK: "OVERWRITE?" CPA "Y" IF YES, JMP SETYP GO MOVE JMP ABEND OTHERWISE, CLOSE FILES. * CRT1K LDA TYPE IF TYPE SZA IS NOT JMP CKSIZ SPECIFIED, LDB D3 SET TYPE TO 3 LDA TAG UNLESS ASCII BIT AND D4 IS SET IN THE MPE SZA FOPTIONS. (THEN LDB D4 SET TYPE TO 4.) STB TYPE STB TAG2 * CKSIZ CCB IF SIZE WAS NOT LDA SIZE SPECIFIED, USE SZA,RSS NEGATIVE ONE. STB SIZE * LDB TAG6 IF RECORD LENGTH LDA RLENG WAS NOT SPECIFIED, SZA,RSS USE MPE FILE'S. STB RLENG * * CALL CREAT(DCB,ERR1,NAME,SIZE,TYPE,SECU,CRN) JSB CREAT + DEF *+08 + DEF DCB + DEF ERR1 + DEF NAME + DEF SIZE + DEF TYPE + DEF SECU + DEF CRN + * LDA ERR1 IF CREATE ERROR IS -2, CPA MD2 IT'S MASKING THE TRUE RSS ERROR. OTHERWISE STORE STA ERROR IT AS THE FILE ERROR. * JSB CKRTE ERROR? JMP ABEND YES. * SETYP LDA TYPE SET TAG(2) TO STA TAG2 RTE FILE TYPE. * * MAIN TRANSFER LOOP. * CALL PREAD(PCB,ERROR,BUFER,TAG10,TAG) RLOOP JSB PREAD DEF *+6 DEF PCB DEF ERROR DEF BUFER,I DEF TAG10 DEF TAG JSB CHKDS CHECK FOR DS ERROR. LDA TAG7 SET TOTLN TO STA TOTLN LENGTH OF PREAD BUFFER. CLA STA I RESET INDEX (I := 0). * LOOP TO UNPACK THE PREAD BUFFER. LOOP2 LDA TOTLN IF TOTLN CMA,INA >= I, ADA I SSA,RSS DONE WITH JMP EOD? THIS BUFFER. LDA BUFER CALCULATE ADDRESS ADA I OF RECORD IN STA BUFAD PREAD BUFFER. ISZ BUFAD LDB A,I GET RECORD LENGTH STB IOLEN (BYTES). ADB D3 UPDATE INDEX CLE,ERB (WORD POINTER): ADB I STB I I := (IOLEN+3)/2 + I. * LDA TAG11 IF USER SPECIFIED CPA "CC" CARRIAGE CONTROL MAPPING, JMP CCTL GO DO IT. * GOWRT LDA NAME WRITE A JSB WRITE RECORD. DEF ABEND (ERROR RETURN) * BMPCT ISZ COUNT BUMP RECORD COUNT. NOP JSB CONT CONTINUE? JMP LOOP2 STAY IN LOOP UNTIL EOR. * * END OF DATA? EOD? LDA TAG3 IF TAG3 >= 0, SSA,RSS JMP RLOOP CONTINUE READING. * * END OF FILE. EOF LDA NAME IF RTE FILE AND HB377 NAME WAS SZA SPECIFIED, JMP CLS1K GO CLOSE IT. * LDA TAG1 IF OPERATION WAS CPA D3 WRITE, SKIP EOF JMP WTSLV AND SPOOL CHECK. * * WRITE END OF FILE IF DEVICE IS MAG TAPE OR LINE PRINTER. LDA NAME GET DRIVER JSB EQTYP TYPE. CPA B23 MAG TAPE? JMP MAGTP YES. CPA B12 LINE PRINTER? JMP LINEP YES. JMP CKSP1 NEITHER. * MAGTP LDB B100 FUNCTION CODE := 1. JMP CEXEC CALL EXEC. * LINEP LDB B1100 FUNCTION CODE := OCTAL 11. * CEXEC LDA NAME ADD LU (MINUS ANY CONTROL BITS) AND B77 TO FUNCTION CODE. IOR B STA TEMP3 JSB EXEC CALL EXEC FOR I/O CONTROL. DEF *+4 DEF SD3 DEF TEMP3 DEF MD1 NOP IGNORE ERRORS. * CKSP1 LDA SPFLG SPOOLING SET UP? SZA,RSS JMP WTSLV NO--WAIT ON SLAVE. * JSB EXEC YES--RELEASE SPOOL FILE. DEF *+5 DEF D23 DEF "SMP" DEF D4 DEF SPFLG * CLA CLEAR SPOOLING STA SPFLG FLAG. JMP WTSLV WAIT FOR SLAVE. * * DETERMINE RTE TRUNCATION FOR FILE CLOSE. CLS1K CLA ITRUN := 0. STA ITRUN LDA SIZE IF SIZE WAS SSA,RSS NOT NEGATIVE, JMP CLFIL DON'T TRUNCATE. JSB LOCF DEF *+7 DEF DCB DEF ERROR DEF P1+1 DEF P1+2 IRB DEF P1+3 DEF P1+4 JSEC * ITRUN := JSEC/2 - IRB - 1 LDA P1+4 CLE,ERA LDB P1+2 CMB ADA B STA ITRUN * * CLOSE RTE FILE AND MPE SLAVE. *+ CALL CLOSE(DCB,ERROR,ITRUN) CLFIL JSB CLOSE + DEF *+04 + DEF DCB + DEF ERROR + DEF ITRUN + * * WAIT FOR SLAVE TO CLOSE FILE. WTSLV JSB PCONT DEF *+4 DEF PCB DEF ERROR DEF TAG JSB CHKDS * EOTR LDA PROMP IF PROMPT WAS CPA IPRMP CHANGED TO "/", LDA LPRMP CHANGE BACK TO "$". STA PROMP CPA LPRMP IF SOURCE WAS REMOTE, JMP LDLCL LDA TAG12 READ COUNT = TAG12 LDB COUNT WRITE COUNT = COUNT JMP DONOR LDLCL LDA COUNT OTHERWISE READ=COUNT LDB TAG12 AND WRITE = TAG12. DONOR JSB PRNOR PRINT NUMBER OF RECORDS. CCA STA D$BRK RE-ENABLE "BREAK" STA D$CTY AND "CONTROL-Y". JMP M1250 REOPEN XFER FILE & GET COMMAND. SKP * ABNORMAL END. ABEND JSB PCONT SEND PCONTROL DEF *+4 TO TELL SLAVE DEF PCB TO SHUT DOWN. DEF ERROR DEF TAG CLA GET RID OF STA TAG4 ERROR THE STA TAG8 SLAVE SENDS. JMP EOF GO CLOSE FILE & SLAVE. SPC 3 * SUBROUTINE TO CHECK FOR DS/1000 OR MPE ERROR * CALLING SEQUENCE: JSB CHKDS * CHKDS NOP ENTRY POINT. LDA ERROR IF ERROR = 0, SZA,RSS JMP CHKDS,I RETURN. * WHAT KIND OF ERROR IS IT? CPA D1 IF ERROR = 1, JMP RERR SLAVE REJECTED. CPA MD41 IF ERROR = -41, JMP NOSLV SLAVE ISN'T THERE. CPA MD55 ID ERROR = -55, JMP PTMOT IT'S A TIMEOUT. * * PRINT THE DS/1000 ERROR MESSAGE. CMA,INA SINCE ERROR IS NEGATIVE, STA ERROR MAKE IT POSITIVE. * JSB KCVT DEF *+2 DEF ERROR IOR "00" STA DERR1 * JSB PRINT PRINT THE DEF DERMS ERROR MESSAGE. DEC 9 CKP LDA CHKDS IF CALL WAS MADE IN CPA @EOTR LAST PCONTROL, JMP EOTR GO PRINT # OF RECORDS. JMP ABEND CLOSE FILES. * @EOTR DEF EOTR DERMS ASC 8,DS/1000 ERROR - DERR1 BSS 1 * NOSLV JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT PRINT "NO DEF NSERR SLAVE" MESSAGE. DEC 8 JMP POPTS POP TO TOP OF STACK. * NSERR ASC 8,NO SLAVE AT 3000 SPC 1 NOSPC JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT PRINT "NO BUFFER DEF SPERR SPACE" MESSAGE. DEC 8 JMP POPTS POP TO TOP OF STACK. * SPERR ASC 8,NO BUFFER SPACE * PTMOT JSB PRINT PRINT DEF TOMSG "TIMEOUT" DEC 15 MESSAGE. JMP CKP GO CLEAN UP. * BADLU JSB ECHP2 ECHO IF SEVERITY=2. JSB PRINT PRINT DEF BLMSG "BAD LU" DEC 4 MESSAGE. JMP ABEND CLOSE SLAVE. * BLMSG ASC 4, BAD LU SKP * "REJECT" ERROR FROM SLAVE. TAG4 TELLS THE REASON: * 1 => SLAVE WAS EXPECTING DIFFERENT CALL. * 2 => DS/3000 ERROR. PCHECK CODE IN TAG8. * 3 => FILE SYSTEM ERROR. FCHECK CODE IN TAG8. * RERR LDA TAG4 WHY DID SLAVE REJECT? CPA D3 JMP FERR FILE ERROR. CPA D2 JMP D3KER DS/3000 ERROR. * OTHERWISE MASTER-SLAVE COMMUNICATIONS ERROR. JMP ENDCK CLOSE FILES. * *** DS/3000 ERROR D3KER JSB CNUMD CONVERT DEF *+3 FCHECK DEF TAG8 CODE. DEF DERR2 JSB PRINT PRINT DEF D3ERM MESSAGE. DEC 10 JMP ENDCK CLOSE FILES. D3ERM ASC 7,DS/3000 ERROR DERR2 BSS 3 * *** MPE FILE ERROR FERR JSB CNUMD DEF *+3 DEF TAG8 DEF MERR JSB PRINT PRINT DEF MERMS ERROR B12 DEC 10 MESSAGE. * ENDCK CLA RESET STA TAG4 ERROR STA TAG8 CODES. LDA CHKDS IF CALL WAS MADE IN CPA @EOTR LAST PCONTROL, JMP EOTR GO PRINT # OF RECORDS. JMP EOF CLOSE FILES. MERMS ASC 7,MPE FILE ERROR MERR BSS 3 SPC 3 * SUBROUTINE TO CHECK IF RECORD IS FROM SPOOL FILE. * CALLING SEQUENCE: JSB CKSPL * (IF RECORD IS NOT IN SPOOLING FORMAT, TAG11 IS SET TO 0) * CKSPL NOP ENTRY POINT. LDA IOLEN CALCULATE LENGTH CLE,ERA OF RECORD STA WRDLN IN WORDS. ADA MD2 INSURE LENGTH IS SSA >= 2. JMP BAD * LDA INBUF GET REQUEST TYPE AND B77 FROM FIRST WORD. CPA D3 = 3? JMP CTRQ YES--CONTROL REQUEST. CPA D2 = 2? JMP WRRQ YES--WRITE REQUEST. JMP BAD NEITHER. BAD REQUEST. * * CONTROL REQUEST CTRQ LDA WRDLN IS LENGTH CPA D2 = 2? JMP CKSPL,I YES. RETURN. * BAD CLA BAD RECORD: STA TAG11 CLEAR TAG 11. JSB WARN WARN USER. JMP CKSPL,I RETURN. * * WRITE REQUEST WRRQ LDA INBUF+1 CHECK DATA LENGTH. SSA,RSS JMP POSLN CMA,INA FOR NEGATIVE DATA LENGTH, INA MAKE POSITIVE # OF WORDS. CLE,ERA POSLN ADA D2 CPA WRDLN IF DATA LENGTH = RECORD LENGTH + 2, JMP CKSPL,I GOOD RECORD. JMP BAD (ELSE BAD.) SPC 3 * SUBROUTINE TO PRINT WARNING MESSAGE IF USER SPECIFIED AN ILLEGAL * OPTION. (ONLY PRINTS IF SEVERITY = 0.) * CALLING SEQUENCE: JSB WARN * WARN NOP ENTRY. LDA SEVER IF SEVERITY SZA IS NOT 0, JMP WARN,I RETURN. JSB PRINT PRINT MESSAGE. DEF WNMSG DEC 12 JMP WARN,I RETURN. * WNMSG ASC 12,WARNING--ILLEGAL OPTION. SKP * SUBROUTINE TO GET MPE FORMALDESIGNATOR * CALLING SEQUENCE: JSB GMPNM * @MPFN DBL MPFN NMLEN NOP NAME LENGTH. MPFN BSS 29 FORMALDESIGNATOR. OFSET NOP OFFSET INTO INBUF. * GMPNM NOP ENTRY POINT. LDA PNTR STORE NEGATIVE CMA,INA OF STARTING COLUMN STA NMLEN IN NMLEN. CMA STA OFSET SAVE # OF BYTES OFFSET. JSB PNAMR PARSE MPE NAME DEF P1 (DETERMINE # OF CHARS). CCA LDB IOLEN IF PNTR IS INB PAST THE CPB PNTR LAST COLUMN, INA ADD ONE. ADA PNTR ENDING COLUMN ADA NMLEN MINUS FIRST COLUMN STA NMLEN IS NAME LENGTH. ADA MD28 SSA IF LENGTH IF > 28, JMP LENOK LDA D28 SET LENGTH TO STA NMLEN 28. * LENOK LDA @INBF MOVE THE CLE,ELA MPE ADA OFSET FILE'S LDB @MPFN FORMALDESIGNATOR. MBT NMLEN CLA STORE 0 AT SBT END OF STRING. JMP GMPNM,I RETURN. SKP * SUBROUTINE TO PRINT NUMBER OF RECORDS COPIED IF SEVERITY CODE=0. * CALLING SEQUENCE: LDA "READ" COUNT * LDB "WRITE" COUNT * JSB PRNOR * PRNOR NOP ENTRY POINT. STA TEMP1 SAVE READ STB TEMP2 AND WRITE COUNTS. LDA SEVER IF SEVERITY CODE SZA IS NOT ZERO, JMP PRNOR,I RETURN. JSB CNUMD CALL RTE DEF *+3 FOR NUMBER DEF TEMP1 CONVERSION. DEF RCNT JSB CNUMD CALL RTE DEF *+3 FOR NUMBER DEF TEMP2 CONVERSION. DEF WCNT JSB PRINT PRINT IT. DEF RCNT ABS CNTLN JMP PRNOR,I RETURN. * COUNT NOP NUMBER OF RECORDS. RCNT ASC 3, ASC 7, RECORDS READ, WCNT ASC 3, ASC 9, RECORDS WRITTEN. CNTLN EQU *-RCNT SPC 3 * SUBROUTINE TO CHECK BREAK FLAG AND ABEND DURING MOVE. * CALLING SEQUENCE: JSB CONT * CONT NOP ENTRY POINT. JSB IFBRK IF BREAK DEF *+1 FLAG NOT SZA,RSS SET, JMP CONT,I CONTINUE. LDA TAG3 IF EOF FLAG SZA SET, JMP CONT,I IGNORE BREAK. JMP ABEND OTHERWISE, CLOSE FILES. SKP * SUBROUTINE TO SEND CONTROL INFORMATION AND FILE NAME TO SLAVE. * CALLING SEQUENCE: LDA <2=READ, 3=WRITE> * LDB * JSB SNDWR * SNDWR NOP ENTRY POINT. STA TAG1 TAG(1) = OPERATION (READ OR WRITE). STB TAG6 TAG(6) = RECORD LENGTH. LDA TYPE TAG(2) = RTE FILE TYPE. STA TAG2 LDA P1 TAG(5) = UNNUMBERED FORMAT INDICATOR. STA TAG5 LDA P2 TAG(11) = SPOOL/CCTL INDICATOR STA TAG11 * REST ARE SET TO ZERO. CLA STA TAG3 STA TAG4 STA TAG7 STA TAG8 STA TAG9 STA TAG12 * SEND CONTROL VIA PWRIT(PCB,ERROR,MPFN,D29,TAG). JSB PWRIT DEF *+6 DEF PCB DEF ERROR DEF MPFN DEF D29 DEF TAG JSB CHKDS CHECK FOR DS ERROR. * PICK UP RESULT VIA PCONT(PCB,ERROR,TAG) JSB PCONT DEF *+4 DEF PCB DEF ERROR DEF TAG JSB CHKDS CHECK FOR DS ERROR. JMP SNDWR,I RETURN. SKP * * SUBROUTINE TO ASK "OVERWRITE?" AND READ RESPONSE. * CALLING SEQUENCE: JSB OVER? * * OVER? NOP ENTRY. JSB REIO ASK QUESTION. DEF *+5 DEF SD2 DEF ERRLU DEF OVRW? DEF D6 NOP IGNORE ERRORS. * JSB REIO READ RESPONSE. DEF *+5 DEF SD1 DEF ERRLU DEF INBUF DEF D1 NOP IGNORE ERRORS. * LDA INBUF LOAD RESPONSE. AND UMSK1 UPSHIFT LEFT BYTE & CLEAR RIGHT. JMP OVER?,I RETURN. * OVRW? ASC 6,OVERWRITE? _* UMSK1 OCT 157400 SKP * SUBROUTINE TO WRITE A RECORD. * CALLING SEQUENCE: * * * LDA * JSB WRITE * DEF * EWRTN NOP WRITE NOP ENTRY. STA IOLU SAVE OUTPUT INDICATOR LDB WRITE,I PICK UP ERROR STB EWRTN RETURN ADDRESS. ISZ WRITE SET RETURN ADDRESS. AND HB377 NON-ZERO IF FILE NAME, ELSE LU. SZA JMP FLWR DISC FILE. * LDA IOLEN CONVERT LENGTH CMA,INA TO NEGATIVE. STA IOLEN JSB REIO WRITE ON LU. DEF *+5 DEF SD2 DEF IOLU DEF BUFAD,I DEF IOLEN RSS IF ERROR ON OUTPUT LU, JMP WRITE,I JSB EROUT PRINT MESSAGE AND JMP EWRTN,I TAKE ERROR RETURN. * FLWR LDA IOLEN CONVERT LENGTH INA TO WORDS. CLE,ERA STA IOLEN JSB WRITF WRITE ON FILE. DEF *+5 DEF DCB DEF ERROR BUFAD DEF *-* DEF IOLEN JSB CKRTE ERROR? JMP EWRTN,I YES. JMP WRITE,I NO. SKP SPC 3 *** STORAGE *** SPC 2 ERR1 NOP RTE FILE CREATE ERROR CODE. ITRUN NOP RTE TRUNCATION INDICATOR. TOTLN NOP TOTAL LENGTH OF BUFFERS READ. NOD3K NOP NEGATIVE LU OF 3000. I NOP INDEX INTO BUFER MASK NOP I/O CONTROL BITS WRDLN NOP RECORD LENGTH (WORDS) SPC 2 B404 OCT 404 "UN" ASC 1,UN "Y" BYT 131,0 "Y" IN LEFT BYTE * SNAME ASC 7,COPY3K.PUB.SYS 3000 SLAVE PROGRAM. NOP * SPC 1 PCB BSS 4 PROGRAM CONTROL BLOCK FOR SLAVE. SPC 1 * SLAVE TAG FIELD: TAG NOP MPE FOPTIONS TAG1 NOP OPERATION: 2=READ, 3=WRITE TAG2 NOP RTE FILE TYPE TAG3 NOP 0 UNTIL END OF FILE TAG4 NOP 0 UNTIL ERROR OCCURS TAG5 NOP "UN" FOR UNNUMBERED FORMAT TAG6 NOP MPE RECSIZE TAG7 NOP LENGTH OF DATA IN PREAD TAG8 NOP SPECIFIC ERROR CODE (USED WITH 4) TAG9 NOP OLD(0)/NEW(-1) FILE INDICATOR TAG10 NOP MAXIMUM P-TO-P BUFFER SIZE TAG11 NOP "SP" FOR RTE SPOOL FILE, "CC" FOR CCNTL TAG12 NOP NUMBER OF RECORDS COPIED BY MPE BSS 7 REST OF TAGS ARE NOT USED. SPC 1 STTBL DEF TABLE START OF TABLE. ENTBL DEF CNTRL END OF TABLE. * * RTE CONTROL ON LEFT, MPE CONTROL ON RIGHT TABLE BYT 100,102 BYT 101,103 BYT 77,300 BYT 76,301 BYT 70,302 BYT 71,303 BYT 72,304 BYT 73,305 BYT 74,306 BYT 75,307 BYT 76,310 BYT 103,311 BYT 104,312 BYT 105,313 CNTRL NOP * PLUS OCT 53 SPC 1 MAXBF NOP MAXIMUM P-TO-P BUFFER SIZE. BUFER NOP ADDRESS OF P-TO-P BUFFER. SPC 3 * SUBROUTINE TO CLOSE SLAVE PROGRAM, IF OPEN. * CALLING SEQUENCE: JSB CLSLV * CLSLV NOP ENTRY. LDA SLFLG IF SLAVE IS SZA,RSS NOT OPEN, JMP CLSLV,I RETURN. JSB PCLOS CLOSE SLAVE. DEF *+3 DEF PCB DEF ERROR CLA CLEAR SLAVE STA SLFLG FLAG. JMP CLSLV,I RETURN. SPC 4 * * THESE CONSTANTS ARE USED ONLY FOR MOVE COMMAND. * MB10 OCT -10 MB67 OCT -67 MB200 OCT -200 B23 OCT 23 B100 OCT 100 B104 OCT 104 B610 OCT 610 B1100 OCT 1100 NOT77 OCT 177700 MD1 DEC -1 MD28 DEC -28 MD41 DEC -41 MD55 DEC -55 D23 DEC 23 D24 DEC 24 D28 DEC 28 D29 DEC 29 D40 DEC 40 D55 DEC 55 D100 DEC 100 D200 DEC 200 SD3 DEF 3,I "SMP" ASC 3,SMP "SP" ASC 1,SP "CC" ASC 1,CC SLFLG NOP SLAVE-OPEN FLAG SPFLG NOP SPOOL FLAG IPRMP ASC 1,/_ "/" PROMPT FOR FILE MOVE INPUT. SPC 1 SPMSG ASC 6,SPOOL FILE: SPFLN ASC 3,RM SPC 1 ***** SPOOL BUFFER ***** SPBUF DEC 0 NO BATCH INPUT CHECKING NOP SPFIL ASC 3,RM SPOOLING FILE NAME DEC 0 SECURITY CODE SPCRN DEC 0 CARTRIDGE SPTYP NOP DEVICE TYPE OCT 402 DISPOSITION: WRITE-ONLY, HOLD OUTPUT. DEC 99 SPOOL PRIORITY NOP NOP NOP NOP NOP OUTLU NOP OUTPUT LU. UNL XIF ***** LST * BSS 0 **** SIZE OF RMOTE **** * END RMOTE