ASMB,R,L,C HED OPERM 91750-16142 REV.2013 * (C) HEWLETT-PACKARD CO. 1980 NAM OPERM,19,30 91750-16142 REV.2013 800418 L 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 HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT OPERM,CNOPT ENT CAM.O,ECH,C.BUF EXT EXEC,#SLAV,#GET,#GETR,#RSAX EXT BL..,CN..,LA..,TM..,TO..,IT..,ON..,SY.. EXT .MVW,PARSE,#NODE,#RPB EXT #ST07,.ENTR * * NAME: OPERL * SOURCE: 91750-18142 * RELOC: 91750-16142 * PGMR: JERRY BELDEN * DATE: 18 JUN 79 * * OPERM IS THE CCE MONITOR WHICH RECEIVES OPERATOR REQUESTS INIT- * IATED BY A REMOTE CPU. THIS MONITOR OPERATES ON STREAM 7. * SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2013 791213 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, DINIT, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * DSTIO, LUMAP, #CMGT, INCNV, OTCNV, RMTIO * * RSM, DLGON, #DISM, #DSSM, #MSSM, #SCSM, #UPSM * ****************************************************************** * ***!!!!! THE ORDER OF THE FIRST 8 WORDS (#STR THRU #LVL) IS * ***!!!!! FIXED BY THE REQUIREMENT THAT THE STREAM, ADDRESSES * ***!!!!! ERROR CODES & LEVEL # ALWAYS BE IN THE SAME PLACE, * ***!!!!! REGARDLESS OF MESSAGE FORMAT. THIS ALSO MAKES * ***!!!!! STORE-AND-FORWARD CODE MUCH SIMPLER. * #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) * #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * * GLBLK-END SKP * OPBLK-START * ****************************************************************** * * * O P R E Q B L O C K REV 2013 791119 * * * * OFFSETS INTO DS/1000 OPREQ MESSAGE BUFFERS, USED BY: * * * * DMESS, OPERM, RQCNV, RPCNV * * RSM, DLGON, #MSSM, #UPSM * ****************************************************************** * * OFFSETS INTO OPREQ REQUEST AND REPLY BUFFERS. * #CML EQU #REQ COMMAND LENGTH. #CMS EQU #CML+1 COMMAND STRING. #LGC EQU #CMS+1 LOGON REQUEST CODE #LNL EQU #LGC+1 LENGTH OF USER NAME #LUN EQU #LNL+1 LOGON USER NAME * #RLN EQU #REP REPLY LENGTH. #MSG EQU #RLN+1 REPLY MESSAGE. * * MAXIMUM SIZE OF OPREQ REQUEST/REPLY BUFFER. * #OLW EQU #CMS+23 M A X I M U M S I Z E ! ! ! * * OPBLK-END SKP SUP OPERM LDA B,I GET INPUT PARAMETER STA CLSN NO - NORMAL SCHEDULE - SAVE CLASS NUMBER * OPER1 JSB #GETR WAIT FOR REQUEST DEF *+4 DEF CLSN CLASS # A.RQB DEF RQB REQUEST BUFFER DEF C#OLW MAX LENGTH JMP DON3 IGNORE THE COMMUNICATION ERROR * CLA CLEAR CLB ERROR DST RQB+#EC1 LOCATIONS. STA RQB+#ENO * LDA RQB+#DST IS THIS A LOCAL INA,SZA REQUEST FROM COMND? JMP REMOT NO, REAL DS LDA CLSN YES, AND CLMSK DE-ALLOCATE IOR BIT13 BUFFER STA TEMP JSB EXEC DEF *+5 DEF .21 DEF TEMP DEF RQB DEF .0 LDB RQB+#EHD GET LIST LU JMP OPER2 * REMOT JSB #GET DE-ALLOCATE BUFFER DEF *+6 AND LOG IF NEEDED DEF CLSN DEF RQB DEF C#OLW DEF .0 DEF .0 JMP DON3 IF ERROR, TERMINATE CLB GET REMOTE FLAG * OPER2 STB LOCLU SAVE LOCAL LU OR 0 CLA STA OUTFL RESET OUTPUT FLAG * LDA RQB+#CML GET LENGTH SZA,RSS IF ZERO...SEND BACK ZERO TO THEM JMP DONE * CPA .2 IF COMMAND = "XX", RSS JMP PARS LDA RQB+#CMS I.E. LOGON/OFF TO CPA "XX" NON-SESSION NODE, RSS JMP PARS LDA RQB+#LGC (EXCEPT SPECIAL UPLIN LOG-OFF, CPA N1 JMP RLEAS IN WHICH CASE IGNORE REQUEST) SZA,RSS IF LOG-OFF, REPLY WITH DEST SID = 0, JMP DONE DLD "RS04 ELSE DST RQB+#EC1 REPLY WITH "S.M. NOT INSTALLED". LDA #NODE SET ASCII BIT AND NODE NUMBER. IOR BIT15 STA RQB+#ENO JMP DONE GO SEND REPLY FOR ERROR. * RLEAS JSB #RSAX RELEASE TCB FOR IGNORED DEF *+4 NO-REPLY UPLIN DEF .7 LOG-OFF REQUEST. DEF RQB+#SEQ DEF RQB+#STR * JMP OPER1 GO WAIT FOR ANOTHER REQUEST. SKP * * CODE FOR COMND INSERTED HERE * PARS ARS CONVERT MESSAGE LENGTH (CHARS) STA ECH TO WORD COUNT JSB PARSE USE SYSTEM'S PARSER DEF *+4 DEF RQB+#CMS INPUT BUFFER DEF RQB+#CML 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 SKP * * 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 * DONE LDA OUTFL ANY OUTPUT ? SZA JMP DON1 YES CONTINUE STA RQB+#RLN NO, SO INDICATE DON1 LDB LOCLU LOCAL ORIGINATION SZB JMP DON2 YES LDA RQB+#RLN SAVE LENGTH IN WORDS INTO REPLY ADA L#RLN ADD STANDARD LENGTH OF PARMB STA LEN SAVE AS REPLY LENGTH * LDA RQB+#STR GET STREAM TYPE IOR BIT14 SET IN FOR REPLY STA RQB+#STR SAVE AS REPLY STREAM * LDA A.RQB MOVE REPLY LDB A#RPB INTO #SLAV JSB .MVW DEF C#OLW NOP * JSB #SLAV SEND REPLY DEF *+4 DEF LEN DEF .0 DEF .0 NOP IGNORE THE ERROR RETURN * JMP OPER1 WAIT FOR ANOTHER REQUEST SKP * * LOCAL ORIGINATOR - DO OUTPUT * DON2 SZA,RSS ANY OUTPUT ? JMP DON3 NO JSB EXEC LOCAL, SO OUTPUT DIRECTLY DEF *+5 DEF .2 DEF LOCLU DEF RQB+#MSG DEF RQB+#RLN (+ WORDS) * * NOTE THAT #ST07+1 CONTAINS A NON-ZERO # IF OPERM WAS * SCHEDULED BY UPLIN OR LSTEN. OTHERWISE, MUST TERMINATE * & DEALLOCATE CLASS. * DON3 LDA #ST07+1 CHECK FOR CLASS # XOR CLSN EQUAL TO THAT AND CLMSK OF DS SZA,RSS JMP OPER1 RUNNING UNDER DS, GO TO 'GET' * JSB EXEC TERMINATE, NO RESOURCES SAVED DEF *+2 DEF .6 SKP * * COMMAND TABLE * C.TAB DEF *+1 ASC 1,BL DEF BL.. ASC 1,CN DEF CN.. ASC 1,LA DEF LA.. 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.. SKP * * ERROR HANDLER * 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 * LDA AERBF TRANSFER TO REPLY BUFFER LDB A#MSG DESTINATION JSB .MVW DEF .4 NOP LDA .4 STA RQB+#RLN SAVE LENGTH IN WORDS IN REPLY ISZ OUTFL INDICATE SOME OUTPUT JMP DONE * ERBUF ASC 2,CMND ESGN NOP SIGN ERCDE NOP ERROR CODE IN ASCII * BLNK ASC 1, BSIGN ASC 1, - SKP * * CENTRAL OUTPUT ROUTINE - CALLED FROM ACTION ROUTINES IN * PLACE OF EXEC 2. OUTPUT TO REMOTE SITES GOES BACK IN * THE REPLY SO ONLY ONE LINE OF OUTPUT IS ALLOWED. LAST * CALL TO THIS SUBROUTINE DICTATES WHAT IS RETURNED. * OCODE NOP EXEC CODE NOP OUTPUT LU OBUFF NOP OUTPUT BUFFER OLENG NOP OUTPUT LENGTH * CNOPT NOP ENTRY POINT JSB .ENTR DEF OCODE LDA OLENG,I CHECK LENGTH SPECIFIER SSA,RSS JMP CNOP1 IN WORDS CMA,INA CONVERT BYTES TO WORDS CLE,ERA CNOP1 SZA,RSS ANYTHING THERE ? JMP CNOP2 NO STA RQB+#RLN SAVE BUFFER LENGTH ISZ OUTFL INDICATE OUTPUT WAITING LDA OBUFF MOVE MESSAGE TO REPLY BUFFER LDB A#MSG JSB .MVW DEF RQB+#RLN NOP CNOP2 JMP CNOPT,I SKP * * EXIT ACTION ROUTINE * EX.. NOP JMP DONE SKP * * CONSTANTS * .0 DEC 0 .2 DEC 2 .4 DEC 4 .6 DEC 6 .7 DEC 7 .10 DEC 10 .21 DEC 21 N1 DEC -1 N8 DEC -8 N18 DEC -18 N64 DEC -64 B60 OCT 60 BIT13 OCT 20000 BIT14 OCT 40000 BIT15 OCT 100000 CLMSK OCT 17777 "XX" ASC 1,XX "RS04 ASC 2,RS04 * DMRLT DEF MRSLT A#MSG DEF RQB+#MSG A#RPB DEF #RPB AERBF DEF ERBUF * A EQU 0 B EQU 1 SPC 2 * * VARIABLES * RQB BSS #OLW LOCAL BUFFER FOR REQUEST/REPLY C.BUF EQU RQB+#CMS CAM.O NOP LOG LU * 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 CNT NOP LOOP COUNTER ER NOP ERROR CODE FOR ACTION ROUTINES CLSN NOP TEMP NOP C#OLW ABS #OLW L#RLN ABS #RLN+1 HEADER LEN + 1 FOR MSG LEN WORD LEN NOP OUTFL NOP OUTPUT PENDING FLAG LOCLU NOP LU IF LOCAL ORIGIN OR 0 * END OPERM