Trailing-Edge
-
PDP-10 Archives
-
BB-LW55A-BM_1988
-
galaxy-sources/oprneb.mac
There are 14 other files named oprneb.mac in the archive. Click here to see a list.
TITLE OPRNEB ORION MODULE FOR PROCESSING NEBULA MESSAGES
SUBTTL Preliminaries
; COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1988.
; ALL RIGHTS RESERVED.
;
; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
; TRANSFERRED.
;
; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
; CORPORATION.
;
; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
; SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.
SEARCH GLXMAC,ORNMAC,QSRMAC,NEBMAC
PROLOG(OPRNEB)
;Version numbers
NEBMAN==:0 ;Maintenance edit number
NEBDEV==:20 ;Development edit number
VERSIN (NEB) ;Generate edit number
Subttl Table of Contents
; Table of Contents for OPRNEB
;
; Section Page
;
;
; 1. Revision history . . . . . . . . . . . . . . . . . . . 3
; 2. Global symbols . . . . . . . . . . . . . . . . . . . . 4
; 3. NEBMSG - NEBULA message dispatcher . . . . . . . . . . 5
; 4. N$RDSM - REMOTE DISMOUNT message . . . . . . . . . . . 6
; 5. N$FDSM - FROM NEBULA DISMOUNT message . . . . . . . . 7
; 6. N$FDAK - FROM NEBULA DISMOUNT ACK message . . . . . . 8
; 7. N$TDAK - TO NEBULA DISMOUNT ACK message . . . . . . . 9
; 8. N$CDSM - NEBULA CANCEL DISMOUNT message . . . . . . . 10
; 9. N$FMTS - FROM NEBULA MOUNT message . . . . . . . . . . 11
; 10. N$MESS - SHOW MESSAGES message . . . . . . . . . . . . 12
; 11. N$OPER - SHOW OPERATORS message . . . . . . . . . . . 13
; 12. N$SHOW - REMOTE OPERATOR SHOW message . . . . . . . . 14
; 13. N$MACS - REMOTE SHOW ACK message . . . . . . . . . . . 15
; 14. N$TEXT Process a TEXT message from a remote ORION . . 16
; 15. N$FBLK - Find a specified message block . . . . . . . 17
; 16. N$SQSR - Send messages to QUASAR, NEBULA and MOUNTR ro 18
; 17. BLDHDR - Build the GALAXY message header . . . . . . . 19
; 18. FINSHW - Send a SHOW MESSAGES or SHOW OPERATORS messag 20
; 19. CPYMSG - Copy an incoming message to an outgoing messa 21
; 20. GETMSG - PICK UP MESSAGE FOR SHOW MESSAGES COMMAND . . 22
; 21. N$BLDP - Build the remote .ORDSP block . . . . . . . . 23
; 22. CPYDSP - Copy the REMOTE DISPLAY block . . . . . . . . 24
; 23. NEBSTR - NEBULA message log file headers . . . . . . . 25
; 24. SHOW message code translation tables . . . . . . . . . 26
SUBTTL Revision history
COMMENT \
***** Release 6.0 -- begin development edits *****
1 6.1094 20-Nov-87
Add OPRNEB as the ORION module that processes messages that
are processed on a remote node in the cluster and that have come from
a remote node in the cluster.
2 6.1098 22-Nov-87
Add an entry for the OPR MOUNT STRUCTURE command to tables
NBTOQR and QRTONB.
3 6.1136 9-Dec-87
Make routine N$FBLK global. Also, correct the way N$SQSR,
N$SMDA and N$SNEB pick up the system PID index for QUASAR, MOUNTR
and NEBULA.
4 6.1138 13-Dec-87
Fix bugs found as a result of debugging NEBULA. Add routine N$TEXT
to process TEXT messages that originated from a remote ORION.
5 6.1142 17-Dec-87
Add support for the SHOW STATUS TAPE/CLUSTER-NODE: and SHOW STATUS
DISK/CLUSTER-NODE: commands.
6 6.1146 17-Dec-87
Add support for the SHOW STATUS STRUCTURE/CLUSTER-NODE: command.
7 6.1157 4-Jan-88
If an illegal NEBULA message type is detected or if the sender of
the NEBULA message is not privileged, then set flag word G$NERR so the remote
operator will be informed.
10 6.1158 5-Jan-88
Change N$RDSM to send a FROM NEBULA DISMOUNT ACK (.NFDAK) instead of
a TO NEBULA DISMOUNT ACK (.NTDAK) to MOUNTR if NEBULA is not running.
11 6.1159 5-Jan-88
Add entries for SHOW STATUS DISK, SHOW STATUS STRUCTURE and SHOW STATUS
TAPE to table NEBSTR.
12 6.1164 6-Jan-88
Shorten the display lines in table NEBSTR.
13 6.1187 17-Feb-88
If there are no messages for a node, change the error code from E$NNK
to E$NMN.
14 6.1197 27-Feb-88
Don't log a FROM NEBULA DISMOUNT ACK message since the WTO message
is logged.
15 6.1205 1-Mar-88
Change routines N$MACS and N$TEXT not to call routine SPGOUT so as to
prevent picking up a second IPCF page for the outgoing message.
16 6.1210 2-Mar-88
Change the TO NEBULA DISMOUNT ACK message log file entry to indicate
that the message came from NEBULA instead of MOUNTR.
17 6.1225 8-Mar-88
Update copyright notice.
20 6.1247 5-May-88
Add support for the SHOW STATUS NETWORK-NODE and SHOW PARAMETERS
NETWORK-NODE commands.
\ ;End of Revision History
SUBTTL Global symbols
EXTERN CHKWHL ;CHECK FOR PRIVILEGES
EXTERN TABSRC ;TABLE ENTRY LOOKUP ROUTINE
EXTERN G$NEBD ;NEBULA MSG PROCESSOR ROUTINE ADR
EXTERN G$NACK ;NEBULA ACK FLAG
EXTERN G$ARG1 ;ARGUMENT HOLDER
EXTERN G$ARG2 ;ARGUMENT HOLDER
EXTERN G$HOST ;LOCAL NODE NAME
EXTERN G$NODL ;NODE LIST POINTER
EXTERN G$NERR ;REMOTE (NEBULA) SHOW ACK COMMAND ERROR
EXTERN G$NSHW ;REMOTE SHOW MESSAGE
EXTERN GETPAG ;GET A MESSAGE PAGE
EXTERN RELPAG ;RELEASE A MESSAGE PAGE
EXTERN QSRNAM ;QUASAR'S NAME
EXTERN NEBNAM ;NEBULA'S NAME
EXTERN MDANAM ;MOUNTR'S NAME
EXTERN SNDCGP ;SEND MESSAGES TO CLUSTER GALAXY PROC
EXTERN SNDBLK ;SAB BLOCK ADDRESS
EXTERN L$NEB ;LOG A NEBULA MESSAGE
EXTERN FNDNOD ;FIND A NODE
EXTERN SHWMTX ;BUILD THE LOCAL DISPLAY BLOCK
EXTERN SHDPBK ;LOCAL DISPLAY BLOCK ADDRESS
EXTERN SHODBK ;SHOW OPERATORS HEADER
EXTERN FNDXCT ;COMPARE MESSAGE NUMBERS
EXTERN CHKMSG ;CHECK FOR A MESSAGE AT A NODE
EXTERN MSGNOD ;BUILD A DISPLAY BLOCK FOR A NODE
EXTERN OPRLST ;BUILD DISPLAY BLOCK FOR AN OPERATOR
EXTERN BLDDPY ;MOVE MSG FROM MSG LIST TO OUTPUT PAGE
EXTERN FNDMSG ;LOOK FOR A MESSAGE ON ALL NODES
EXTERN W$ASND ;[4]SEND MESSAGE TO AN OPERATOR
EXTERN G$NOW ;[4]TIME THE MESSAGE WAS RECEIVED
INTERN NEBMSG ;NEBULA MESSAGE DISPATCHER
INTERN NEBSTR ;NEBULA LOG FILE HEADERS
INTERN QRTONB ;QUASAR TO NEBULA SHOW MESSAGE CODE
INTERN N$BLDP ;REMOTE DISPLAY BLOCK BUILDER
INTERN BLDHDR ;BUILD A REMOTE SHOW ACK MESSAGE HEADER
INTERN N$SNEB ;SEND A MESSAGE TO NEBULA
INTERN N$FBLK ;[3]FIND AN ARGUMENT BLOCK
MSGADR: BLOCK 1 ;MESSAGE PAGE RELEASED FLAG
DISBLK: BLOCK 15 ;[4]REMOTE DISPLAY BLOCK
SUBTTL NEBMSG - NEBULA message dispatcher
;NEBMSG dispatches messages that NEBULA has involvement in.
;
;Call is: S1/Message type
; MI/IPCF message address
;
;Returns true: The message was successfully processed
;Returns false: An error occurred processing the message
NEBMSG: $CALL CHKWHL ;CHECK THE CALLER'S PRIVILEGES
JUMPF [$CALL E$IPE## ;[7]INSUFFICIENT PRIVILEGES
SETOM G$NERR ;[7]ACK THE REMOTE REQUESTOR
$RET ] ;[7]RETURN TO THE CALLER
MOVEI S2,NEBTAB ;PICK UP MESSAGE DISPATCH TABLE
$CALL TABSRC ;PICK UP THE PROCESSOR ROUTINE ADR
JUMPF [$CALL E$IMT## ;[7]ILLEGAL MESSAGE TYPE
SETOM G$NERR ;[7]ACK THE REMOTE REQUESTOR
$RET ] ;[7]RETURN TO THE CALLER
DMOVEM S1,G$NEBD ;SAVE MESSAGE TYPE AND ROUTINE ADDRESS
$CALL GETPAG ;PICK UP A PAGE FOR OUTGOING MESSAGE
SETZM MSGADR ;ASSUME MESSAGE NOT RELEASED ON AN ERROR
DMOVE S1,G$NEBD ;PICK UP MESSAGE TYPE AND ROUTINE ADR
$CALL 0(S2) ;PROCESS THE MESSAGE
SKIPF ;DID AN ERROR OCCUR?
$RET ;NO, RETURN NOW
CAME MO,MSGADR ;MESSAGE PAGE ALREADY RELEASED?
$CALL RELPAG ;NO, RELEASE THE MESSAGE PAGE
$RETF ;RETURN TO THE CALLER
NEBTAB: $STAB ;NEBULA MESSAGE DISPATCH TABLE
.NRDSM,,N$RDSM ;REMOTE DISMOUNT MESSAGE
.NFDSM,,N$FDSM ;FROM NEBULA DISMOUNT MESSAGE
.NFDAK,,N$FDAK ;FROM NEBULA DISMOUNT ACK MESSAGE
.NTDAK,,N$TDAK ;TO NEBULA DISMOUNT ACK MESSAGE
.NCDSM,,N$CDSM ;NEBULA CANCEL DISMOUNT MESSAGE
.NFMTS,,N$FMTS ;FROM NEBULA MOUNT MESSAGE
.NMESS,,N$MESS ;SHOW MESSAGES MESSAGE
.NSHOP,,N$OPER ;SHOW OPERATORS MESSAGE
.NMSHS,,N$SHOW ;SHOW STATUS MESSAGE
.NDSHT,,N$SHOW ;[5]SHOW STATUS TAPE
.NDSHD,,N$SHOW ;[5]SHOW STATUS DISK
.NDSTR,,N$SHOW ;[6]SHOW STATUS STRUCTURE
.NDSCD,,N$SHOW ;SHOW CONFIGURATION MESSAGE
.NMSHQ,,N$SHOW ;SHOW QUEUES MESSAGE
.NMSHP,,N$SHOW ;SHOW PARAMETERS MESSAGE
.NMSHR,,N$SHOW ;SHOW ROUTE MESSAGE
.NMSSN,,N$SHOW ;[JCR]SHOW STATUS NETWORK-NODES
.NMSPN,,N$SHOW ;[JCR]SHOW PARAMTERS NETWORK-NODES
.NMACS,,N$MACS ;REMOTE SHOW ACK MESSAGE
MT.TXT,,N$TEXT ;[4]REMOTE ORION TEXT MESSAGE
$ETAB
SUBTTL N$RDSM - REMOTE DISMOUNT message
N$RDSM: $CALL L$NEB ;LOG THE MESSAGE
$CALL CPYMSG ;COPY THE MESSAGE TO OUTPUT MESSAGE
MOVEI S1,.NTDSM ;PICK UP EXPECTED MESSAGE CODE
STORE S1,.MSTYP(MO),MS.TYP ;PLACE IN OUTGOING MESSAGE
$CALL N$SNEB ;SEND THE MESSAGE TO NEBULA
$RETIT ;RETURN ON SUCCESS SEND
;AN ERROR HAS OCCURRED - SEND MOUNTR A "FROM NEBULA DISMOUNT ACK" MESSAGE
MOVEI S1,.NRDAK ;[10]PICK UP THE MESSAGE CODE
STORE S1,.MSTYP(MO),MS.TYP ;PLACE IN THE MESSAGE
SETZM .MSFLG(MO) ;TURN OFF THE NEBULA BIT
MOVX S1,DS%FAI ;PICK UP ERROR INDICATOR
MOVEM S1,.OFLAG(MO) ;PLACE IN THE MESSAGE
MOVEI S2,2 ;PICK UP THE ARGUMENT BLOCK COUNT
MOVEM S2,.OARGC(MO) ;PLACE IN THE MESSAGE
MOVEI T1,.OHDRS(MO) ;[4]POINT TO THE ASCIZ STR NAME BLOCK
MOVEI S1,ARG.DA(T1) ;[4]POINT TO THE ASCIZ STRUCTURE NAME
HRLI S1,(POINT 7,) ;[4]MAKE INTO A POINTER
$CALL S%SIXB ;[4]PICK UP THE SIXBIT STRUCTURE NAME
MOVEM S2,ARG.DA(T1) ;[4]PLACE IN THE STRUCTURE BLOCK
MOVE S1,[.STRLN,,.STRNM] ;[4]PICK UP THE HEADER WORD
MOVEM S1,ARG.HD(T1) ;[4]PLACE IN THE STRUCTURE BLOCK
ADDI T1,.STRLN ;[4]POINT TO THE STATUS BLOCK
LOAD S1,.MSTYP(MO),MS.CNT ;PICK UP THE MESSAGE LENGTH
SUBI S1,<.OHDRS+.STRLN> ;DETERMINE NODE BLOCKS TOTAL LENGTH
MOVE S2,S1 ;SAVE FOR LATER
MOVSS S1 ;PLACE BLOCK LENGTH IN EXPECTED PLACE
HRRI S1,.STSBK ;PICK UP BLOCK TYPE
MOVEM S1,ARG.HD(T1) ;PLACE BLOCK HEADER WORD IN THE MESSAGE
LSH S2,-1 ;DETERMINE THE NUMBER OF NODES
AOS T1 ;POINT PASS THE HEADER WORD
N$RD.1: MOVE S1,ARG.DA(T1) ;[4]PICK UP THE NODE NAME
MOVEM S1,ARG.HD(T1) ;[4]PLACE WHERE MOUNTR EXPECTS IT
MOVE S1,[ST%OER+IPCFX4] ;[4]PICK UP ERROR CODE
MOVEM S1,ARG.DA(T1) ;[4]PLACE WHERE MOUNTR EXPECTS IT
ADDI T1,.NDENM ;POINT TO THE NEXT NODE BLOCK
SOJG S2,N$RD.1 ;UPDATE THE NEXT NODE BLOCK
$CALL N$SMDA ;SEND THE MESSAGE TO MOUNTR
SKIPF ;SKIP ON MESSAGE SEND FAILURE
MOVEM MO,MSGADR ;INDICATE MESSAGE PAGE RELEASED
MOVEI S1,NEBNAM ;PICK UP NEBULA'S NAME
MOVEM S1,G$ARG1 ;SAVE FOR THE LOG ERROR MESSAGE
$CALL E$IAP## ;PICK UP THE ERROR OFFSET
SETOM G$NACK ;DON'T SEND AN ACK TO NEBULA
$RETF ;INDICATE AN ERROR HAS OCCURED
SUBTTL N$FDSM - FROM NEBULA DISMOUNT message
N$FDSM: $CALL L$NEB ;LOG THE MESSAGE
$CALL CPYMSG ;COPY THE MESSAGE INTO OUTGOING PAGE
MOVEI S1,.ODDSM ;PICK UP MSG CODE THAT QUASAR EXPECTS
STORE S1,.MSTYP(MO),MS.TYP ;PLACE IN THE MESSAGE
$CALL N$SQSR ;SEND THE MESSAGE TO QUASAR
$RETIT ;RETURN ON SUCCESS
;AN ERROR OCCURRED. BUILD AND SEND THE FROM NEBULA DISMOUNT ACK MESSAGE
MOVE S1,[.OHDRS+.ERRSZ,,.NFDAK] ;PICK UP MESSAGE HEADER WORD
MOVEM S1,.MSTYP(MO) ;PLACE IN THE MESSAGE
SETZM .MSFLG(MO) ;ZERO OUT THE FLAG WORD
MOVX S1,FA%OER ;PICK UP ORION DETECTED THE ERROR
MOVEM S1,.OFLAG(MO) ;PLACE IN THE MESSAGE
MOVEI S1,1 ;PICK UP THE ARGUMENT COUNT
MOVEM S1,.OARGC(MO) ;PLACE IN THE MESSAGE
MOVE S1,[.ERRSZ,,.ERRBK] ;PICK UP ERROR BLOCK HEADER WORD
MOVEM S1,.OHDRS+ARG.HD(MO) ;PLACE IN THE MESSAGE
MOVEI S1,IPCFX4 ;PICK UP THE MONITOR ERROR CODE
MOVEM S1,.OHDRS+ARG.DA(MO) ;PLACE IN THE MESSAGE
$CALL N$SNEB ;SEND THE MESSAGE TO NEBULA
SKIPF ;IF FAILED, THEN STILL HAVE PAGE
MOVEM MO,MSGADR ;INDICATE MESSAGE PAGE RELEASED
MOVEI S1,QSRNAM ;PICK UP QUASAR'S NAME ADDRESS
MOVEM S1,G$ARG1 ;SAVE FOR THE LOG ERROR MESSAGE
$CALL E$IAP## ;PICK UP THE ERROR OFFSET
SETOM G$NACK ;DON'T SEND THE SENDER AN ACK
$RETF ;INDICATE AN ERROR OCCURRED
SUBTTL N$FDAK - FROM NEBULA DISMOUNT ACK message
N$FDAK: $CALL CPYMSG ;COPY THE MESSAGE TO OUTGOING PAGE
$CALL N$SNEB ;SEND THE MESSAGE
$RETIT ;RETURN NOW ON SUCCESS
SETOM G$NACK ;NO, DON'T ACK MOUNTR
$CALL E$IAP## ;STORE ERROR CODE
$RET ;RETURN TO THE CALLER
SUBTTL N$TDAK - TO NEBULA DISMOUNT ACK message
N$TDAK: $CALL L$NEB ;LOG THE MESSAGE
$CALL CPYMSG ;COPY THE MESSAGE TO OUTGOING PAGE
MOVEI S1,.NRDAK ;PICK UP REMOTE DISMOUNT ACK MSG CODE
STORE S1,.MSTYP(MO),MS.TYP ;PLACE IN THE MESSAGE
$CALL N$SMDA ;SEND THE MESSAGE TO MOUNTR
$RETIT ;RETURN NOW ON SUCCESS
SETOM G$NACK ;INDICATE DON'T ACK SENDER
$CALL E$IAP## ;STORE THE ERROR CODE IN G$ERR
$RET ;RETURN TO THE CALLER
SUBTTL N$CDSM - NEBULA CANCEL DISMOUNT message
N$CDSM: $CALL L$NEB ;LOG THE MESSAGE
$CALL CPYMSG ;COPY THE MESSAGE TO OUTGOING PAGE
$CALL N$SNEB ;SEND THE MESSAGE
$RETIT ;RETURN NOW ON SUCCESS
SETOM G$NACK ;NO, DON'T ACK MOUNTR
$CALL E$IAP## ;STORE THE ERROR CODE IN G$ERR
$RET ;RETURN TO THE CALLER
SUBTTL N$FMTS - FROM NEBULA MOUNT message
N$FMTS: $CALL L$NEB ;LOG THE MESSAGE
$CALL CPYMSG ;COPY THE MESSAGE TO OUTGOING PAGE
MOVEI S1,.ODMTS ;PICK UP MSG CODE THAT QUASAR EXPECTS
STORE S1,.MSTYP(MO),MS.TYP ;PLACE IN THE MESSAGE
$CALL N$SQSR ;SEND THE MESSAGE TO QUASAR
$RETIT ;RETURN ON SUCCESS
MOVEI S1,QSRNAM ;PICK UP QUASAR'S NAME ADDRESS
MOVEM S1,G$ARG1 ;SAVE FOR THE LOG ERROR MESSAGE
$CALL E$IAP## ;STORE ERROR OFFSET IN G$ERR
SETOM G$NERR ;SEND AND LOG THE ERROR
$RETF ;INDICATE AN ERROR OCCURRED
SUBTTL N$MESS - SHOW MESSAGES message
N$MESS: $SAVE <P1> ;SAVE THIS AC
MOVEI S1,.OMDSP ;[4]]PICK UP THE MESSAGE TYPE
$CALL BLDHDR ;BUILD THE GALAXY MESSAGE HEADER
MOVEI S1,SHDPBK ;PICK UP DISPLAY HEADER ADDRESS
$CALL SHWMTX ;PLACE IN THE MESSAGE
LOAD S1,.OHDRS+ARG.HD(MI),AR.TYP ;PICK UP THE BLOCK TYPE
CAIE S1,.CMNOD ;IS THIS A NODE BLOCK?
JRST N$ME.1 ;NO, CHECK FOR A NUMBER BLOCK
MOVE S1,.OHDRS+ARG.DA(MI) ;PICK UP THE NODE NAME
MOVEM S1,G$ARG1 ;SAVE IN CASE OF AN ERROR
$CALL FNDNOD ;FIND THE NODE LIST ENTRY
JUMPF [MOVEI S1,E$NNK## ;NODE NOT KNOWN
JRST N$ME.5 ] ;BUILD AN ACK MESSAGE
MOVE S1,NOD.NM(S1) ;GET THE NODE NAME
SETOM G$NSHW ;INDICATE IT IS A REMOTE SHOW MESSAGE
$CALL MSGNOD ;OUTPUT THE MESSAGES
JUMPF N$ME.5 ;GO INDICATE AN ERROR HAS OCCURRED
$CALL FINSHW ;HAVE SOME..SEND IT
$RET ;RETURN TO THE CALLER
N$ME.1: CAIE S1,.CMNUM ;IS THIS A NUMBER BLOCK?
JRST N$ME.2 ;NO, TREAT AS A <CR>
MOVE S1,G$HOST ;PICK UP THE LOCAL NODE NAME
MOVEM S1,G$ARG1 ;SAVE IN CASE OF AN ERROR
$CALL FNDNOD ;FIND THE LOCAL NODE NAME ENTRY
JUMPF [MOVEI S1,E$NNK## ;NODE NOT KNOWN
JRST N$ME.5 ] ;GO INDICATE AN ERROR HAS OCCURRED
MOVE S1,.OHDRS+ARG.DA(MI) ;PICK UP THE MESSAGE NUMBER
MOVEM S1,G$ARG2 ;SAVE IN CASE OF AN ERROR
$CALL GETMSG ;PICK UP THE MESSAGE
JUMPF [MOVEI S1,E$NSM## ;NO SUCH MESSAGE
JRST N$ME.5 ] ;GO INDICATE AN ERROR HAS OCCURRED
$CALL BLDDPY ;MOVE THE MESSAGE
JUMPF N$ME.5 ;GO INDICATE AN ERROR HAS OCCURRED
$CALL FINSHW ;FINISH OFF THE MESSAGE
$RET ;RETURN TO THE CALLER
;HERE IF JUST SHOW MESSAGES <CR>
N$ME.2: MOVE S1,G$HOST ;PICK UP THE LOCAL NODE NAME
MOVEM S1,G$ARG1 ;[13]SAVE IN CASE OF AN ERROR
$CALL FNDNOD ;FIND THE LOCAL NODE NAME ENTRY
JUMPF [MOVEI S1,E$NNK## ;NODE IS NOT KNOWN
JRST N$ME.5 ] ;GO SEND AN ACK MESSAGE
MOVE S2,NOD.NM(S2) ;GET THE NAME
SETZM P1 ;CLEAR MESSAGES FLAG
MOVE S1,G$NODL ;GET NODE LIST NUMBER
$CALL L%FIRST ;GET FIRST ENTRY
JUMPF [MOVEI S1,E$NOM## ;NO OUTSTANDING MESSAGES
JRST N$ME.5 ] ;GO SEND AN ACK MESSAGE
N$ME.3: SETOM G$NSHW ;INDICATE A REMOTE SHOW MESSAGE
$CALL MSGNOD ;GET MESSAGES FOR THIS NODE
JUMPT N$ME.4 ;GO CHECK THE NEXT NODE
CAIE S1,E$NMN## ;[13]NO MESSAGES FOR THIS NODE?
JRST N$ME.5 ;NO, INDICATE AN ERROR HAS OCCURRED
SKIPA ;[4]YES, CHECK THE NEXT NODE
N$ME.4: SETOM P1 ;MESSAGES FOUND
MOVE S1,G$NODL ;GET NODE LIST NUMER
$CALL L%NEXT ;GET NEXT ENTRY
JUMPT N$ME.3 ;PROCESS MESSAGES
JUMPE P1,[MOVEI S1,E$NOM## ;PICK UP ERROR ROUTINE ADDRESS
JRST N$ME.5 ] ;GO INDICATE AN ERROR HAS OCCURRED
$CALL FINSHW ;SEND THE MESSAGE
$RET ;RETURN TO THE CALLER
N$ME.5: $CALL 0(S1) ;[4]PLACE ERROR OFFSET IN G$ERR
SETOM G$NERR ;LOG AND SEND AN ERROR ACK
$RET ;RETURN TO THE CALLER
SUBTTL N$OPER - SHOW OPERATORS message
N$OPER: $SAVE <P1> ;SAVE THIS AC
MOVEI S1,.OMDSP ;[4]PICK UP THE MESSAGE TYPE
$CALL BLDHDR ;BUILD THE GALAXY MESSAGE HEADER
MOVEI S1,SHODBK ;SHOW OPERATOR TEXT
$CALL SHWMTX ;SHOW MESSAGE TEXT POINTER
LOAD S1,.OHDRS+ARG.HD(MI),AR.TYP ;PICK UP THE BLOCK TYPE
CAIE S1,.CMNOD ;IS THIS A NODE BLOCK?
JRST N$OP.1 ;NO, SHOW ALL OPERATORS
MOVE S1,.OHDRS+ARG.DA(MI) ;PICK UP THE NODE NAME
MOVEM S1,G$ARG1 ;SAVE IN CASE OF AN ERROR
$CALL FNDNOD ;VALIDATE THE NODE
JUMPF [MOVEI S1,E$NNK## ;NODE NOT KNOWN
JRST N$OP.3 ] ;GO INDICATE AN ERROR HAS OCCURRED
$CALL OPRLST ;OPERATORS AT NODE
JUMPF [MOVEI S1,E$NON## ;NO MESSAGES FOR THE NODE
JRST N$OP.3 ] ;GO INDICATE AN ERROR HAS OCCURRED
$CALL FINSHW ;HAVE SOME..SEND IT
$RET ;RETURN TO THE CALLER
N$OP.1: SETZM P1 ;CLEAR MESSAGES FLAG
MOVE S1,G$NODL ;GET NODE LIST NUMBER
$CALL L%FIRST ;GET FIRST ENTRY
JUMPF [MOVEI S1,E$NOD## ;NO OPERATORS DEFINED
JRST N$OP.3 ] ;GO INDICATE AN ERROR HAS OCCURRED
N$OP.2: $CALL OPRLST ;OPERATORS AT NODE
SKIPF ;NO MESSAGES SKIP FLAG SETTING
SETOM P1 ;MESSAGES FOUND
MOVE S1,G$NODL ;GET NODE LIST NUMER
$CALL L%NEXT ;GET NEXT ENTRY
JUMPT N$OP.2 ;PROCESS MESSAGES
JUMPE P1,[MOVEI S1,E$NOD## ;[4]NO OPERATORS DEFINED
JRST N$OP.3 ] ;GO INDICATE AN ERROR HAS OCCURRED
$CALL FINSHW ;YES..SEND MESSAGE
$RET ;RETURN TO THE CALLER
N$OP.3: $CALL 0(S1) ;PLACE ERROR OFFSET IN G$ERR
SETOM G$NERR ;LOG AND SEND AN ERROR ACK
$RET ;RETURN TO THE CALLER
SUBTTL N$SHOW - REMOTE OPERATOR SHOW message
N$SHOW: $CALL L$NEB ;LOG THE MESSAGE
$CALL CPYMSG ;COPY THE MESSAGE TO OUTGOING PAGE
LOAD S1,.MSTYP(MO),MS.TYP ;PICK UP THE SHOW TYPE
MOVEI S2,NBTOQR ;PICK UP THEN CODE TRANSLATION TABLE
$CALL TABSRC ;PICK UP MESSAGE CODE QUASAR EXPECTS
JUMPF N$SH.1 ;QUIT ON AN INVALID MESSAGE FORMAT
STORE S2,.MSTYP(MO),MS.TYP ;PLACE EXPECTED CODE IN THE MESSAGE
$CALL N$SQSR ;SEND THE MESSAGE TO QUASAR
$RETIT ;RETURN ON SUCCESS
MOVEI S1,NEBNAM ;PICK UP NEBULA'S NAME ADDRESS
MOVEM S1,G$ARG1 ;SAVE FOR THE LOG ERROR MESSAGE
$CALL E$IAP## ;PICK UP THE ERROR OFFSET
$RETF ;INDICATE AN ERROR OCCURRED
N$SH.1: $CALL E$IFC## ;INDICATE ILLEGALLY FORMATTED MESSAGE
$RETF ;INDICATE AN ERROR OCCURRED
SUBTTL N$MACS - REMOTE SHOW ACK message
N$MACS: HRLI S1,(MI) ;[15]ADDRESS OF THE MESSAGE
HRRI S1,(MO) ;[15]ADDRESS OF THE OUTGOING MESSAGE
BLT S1,PAGSIZ-1(MO) ;[15]MOVE THE MESSAGE
MOVEI S1,.OMACS ;PICK UP THE SHOW ACK MESSAGE CODE
STORE S1,.MSTYP(MO),MS.TYP ;SAVE THE MESSAGE TYPE
$CALL L$NRSW## ;LOG THE MESSAGE
$CALL N$SNEB ;SEND THE MESSAGE TO NEBULA
$RETIT ;RETURN ON SUCCESS
MOVEI S1,NEBNAM ;PICK UP NEBULA'S NAME ADDRESS
MOVEM S1,G$ARG1 ;PLACE WHERE ERROR TEXT EXPECTS IT
$CALL E$IAP## ;PLACE ERROR OFFSET IN G$ERR
SETOM G$NACK ;DON'T SEND AN ACK MESSAGE TO SENDER
$RET ;RETURN TO THE CALLER
SUBTTL N$TEXT Process a TEXT message from a remote ORION
N$TEXT: $CALL CHKWHL ;[4]CHECK IF WHEEL
JUMPF E$ARP## ;[4]ERROR, RETURN
HRLI S1,(MI) ;[15]ADDRESS OF THE MESSAGE
HRRI S1,(MO) ;[15]ADDRESS OF THE OUTGOING MESSAGE
BLT S1,PAGSIZ-1(MO) ;[15]MOVE THE MESSAGE
MOVE S1,G$NOW ;[4]PICK UP THE CURRENT TIME
MOVEM S1,.OHDRS+ARG.DA(MO) ;[4]PLACE IN THE REMOTE DISPLAY BLOCK
$CALL L$RERR## ;[4]LOG THE REMOTE TEXT MESSAGE
$CALL W$ASND ;[4]SEND THE MESSAGE
$RETT ;[4]RETURN
SUBTTL N$FBLK - Find a specified message block
;N$FBLK is called to find a specified message block in a message
;
;Call is: S1/Message address
; S2/Block type code
;
;Returns true: S1/Block address
;Returns false: Requested block type not found in the message
N$FBLK: $SAVE <P1,P2> ;SAVE THESE AC
MOVE P1,.OARGC(S1) ;PICK UP THE NUMBER OF ARGUMENT BLOCKS
MOVEI S1,.OHDRS(S1) ;POINT TO THE FIRST BLOCK
N$FB.1: LOAD P2,ARG.HD(S1),AR.TYP ;PICK UP THE BLOCK'S TYPE
CAMN S2,P2 ;IS THIS THE BLOCK BEING SEARCHED FOR?
$RETT ;YES, RETURN NOW
LOAD P2,ARG.HD(S1),AR.LEN ;NO, PICK UP THIS BLOCK'S LENGTH
ADD S1,P2 ;POINT TO THE NEXT BLOCK
SOJG P1,N$FB.1 ;CHECK THE NEXT BLOCK IF THERE IS ONE
$RETF ;INDICATE BLOCK NOT FOUND
SUBTTL N$SQSR - Send messages to QUASAR, NEBULA and MOUNTR routines
N$SQSR: SKIPA S1,[SP.QSR+SI.FLG] ;PICK UP QUASAR'S PID INDEX
N$SMDA: MOVX S1,SP.MDA+SI.FLG ;[3]PICK UP MOUNTR'S PID INDEX
SKIPA ;SKIP OVER PICKING UP MOUNTR'S INDEX
N$SNEB: MOVX S1,SP.NEB+SI.FLG ;[3]PICK UP NEBULA'S PID INDEX
STORE S1,SNDBLK+SAB.SI ;PLACE PID INDEX INTO SAB
SETZM SNDBLK+SAB.PD ;ZERO OUT THE PID WORD
MOVEI S2,PAGSIZ ;INDICATE THERE IS A PAGE WITH THIS MSG
$CALL SNDCGP ;SEND THE MESSAGE
$RET ;PRESERVE THE T/F INDICATOR
SUBTTL BLDHDR - Build the GALAXY message header
;Call is: S1/Message code
BLDHDR: STORE S1,.MSTYP(MO),MS.TYP ;PLACE MESSAGE CODE VALUE IN MESSAGE
DMOVE S1,.MSFLG(MI) ;PICK UP THE FLAG AND ACK CODE WORDS
DMOVEM S1,.MSFLG(MO) ;PLACE IN THE MESSAGE
MOVX S1,WT.SJI!WT.NFO ;SUPPRESS JOB INFO + MSG FORMATTED
MOVEI S2,1 ;NUMBER OF ARGUMENT BLOCKS
DMOVEM S1,.OFLAG(MO) ;PLACE IN THE MESSAGE
MOVEI P3,.OHDRS(MO) ;POINT TO FIRST ARGUMENT BLOCK
$CALL CPYDSP ;COPY OVER THE DISPLAY BLOCK
MOVE S1,MI ;PICK UP ADDRESS OF INCOMING MESSAGE
MOVEI S2,.NDENM ;PICK UP BLOCK TYPE TO SEARCH FOR
$CALL N$FBLK ;FIND THE NODE BLOCK
MOVE S1,ARG.DA(S1) ;PICK UP THE NODE NAME
MOVEM S1,.OHDRS+ARG.DA(MO) ;SAVE FOR ACK AND ERROR DISPLAYS
$RET ;RETURN TO THE CALL
SUBTTL FINSHW - Send a SHOW MESSAGES or SHOW OPERATORS message
FINSHW: ANDI P3,777 ;ISOLATE THE MESSAGE LENGTH
STORE P3,.MSTYP(MO),MS.CNT ;PLACE IN MESSAGE
$CALL L$NRSW## ;LOG THE MESSAGE
$CALL N$SNEB ;SEND THE MESSAGE TO NEBULA
$RETIT ;RETURN ON SUCCESS
MOVEI S1,NEBNAM ;PICK UP ADDRESS OF NEBULA'S NAME
MOVEM S1,G$ARG1 ;PLACE WHERE ERROR STRING EXPECTS IT
SETOM G$NACK ;DON'T ACK THE SENDER
$CALL E$IAP ;PLACE ERROR OFFSET IN G$ERR
$RET ;RETURN TO THE CALLER
SUBTTL CPYMSG - Copy an incoming message to an outgoing message
CPYMSG: LOAD S2,.MSTYP(MI),MS.CNT ;PICK UP THE MESSAGE LENGTH
ADD S2,MO ;DESTINATION ADDRESS + 1
MOVE S1,MO ;DESTINATION
HRL S1,MI ;SOURCE,,DESTINATION
BLT S1,-1(S2) ;COPY THE MESSAGE
$RET ;RETURN TO THE CALLER
SUBTTL GETMSG - PICK UP MESSAGE FOR SHOW MESSAGES COMMAND
;GETMSG is called to pick up the message address of the message specified
;in a SHOW MESSAGES command
;
;Call is: S1/Message number
; S2/Node list entry address
;
;Returns true: S1/Address of the message
;Returns false: The message was not found
GETMSG: $SAVE <P1,P2> ;SAVES THESE AC
DMOVE P1,S1 ;SAVE MESSAGE NUMBER, NODE ENTRY ADR
MOVEI T1,MSL.ID ;PICK UP ID NUMBER OF MESSAGE
HRRM T1,FNDXCT ;SAVE FOR THE COMPARE
$CALL CHKMSG ;LOOK FOR THE MESSAGE ON LOCAL NODE
$RETIT ;RETURN NOW IF MESSAGE WAS FOUND
DMOVE S1,P1 ;PICK UP MSG NUMBER, NODE ENTRY ADDRESS
MOVEI T1,MSL.ID ;PICK UP ID NUMBER OF MESSAGE
$CALL FNDMSG ;LOOK FOR MESSAGE ON ALL NODES
$RET ;PRESERVE T/F INDICATOR
SUBTTL N$BLDP - Build the remote .ORDSP block
N$BLDP: $SAVE <P1> ;SAVE THIS AC
MOVEI P1,DISBLK ;PICK UP ADDRESS OF THE DISPLAY BLOCK
$TEXT (<-1,,ARG.DA+1(P1)>,< Received message from ^N/G$HOST/::^0>)
MOVEI S2,ARG.DA+1(P1) ;[4]PICK UP ADDRESS OF THE MESSAGE
HRLI S2,(POINT 7,) ;[4]MAKE INTO A POINTER
SETZ S1, ;NUMBER OF CHARACTERS IN MESSAGE
N$BL.1: ILDB P1,S2 ;PICK UP THE NEXT BYTE
AOS S1 ;INCREMENT THE NUMBER OF CHARACTERS
SKIPE P1 ;ANY MORE CHARACTERS?
JRST N$BL.1 ;YES, COUNT THE NEXT ONE
IDIVI S1,5 ;MESSAGE LENGTH IN WORDS
SKIPE S2 ;ANY FRACTIONAL WORDS?
AOS S1 ;YES, COUNT AS AN ENTIRE WORD
ADDI S1,2 ;[4]INCLUDE HEADER AND UDT WORDS
MOVSS S1 ;PLACE LENGTH IN EXPECTED PLACE
HRRI S1,.ORDSP ;PICK UP THE BLOCK TYPE
MOVEM S1,DISBLK ;PLACE IN THE MESSAGE
$RET ;RETURN TO THE CALLER
SUBTTL CPYDSP - Copy the REMOTE DISPLAY block
;CPYDSP copies the built REMOTE DISPLAY block into the message being built
;
;Call is: P3/Address of the message's REMOTE DISPLAY block
;
;Returns: The REMOTE DISPLAY block has been copied into the message
; P3/Address of the next block
CPYDSP: MOVE S1,P3 ;PICK UP MESSAGE BLOCK ADDRESS
HLRZ S2,DISBLK ;PICK UP THE BLOCK LENGTH
ADD S2,S1 ;END OF DESTINATION + 1
HRLI S1,DISBLK ;SOURCE,,DESTINATION
BLT S1,-1(S2) ;COPY THE BLOCK INTO THE MESSAGE
MOVE P3,S2 ;[4]ADDRESS OF THE NEXT BLOCK
$RET ;RETURN TO THE CALL
SUBTTL NEBSTR - NEBULA message log file headers
NEBSTR: $STAB
.NRDSM,,[ITEXT(<REMOTE DISMOUNT message received from MOUNTR>)]
.NFDSM,,[ITEXT(<FROM NEBULA DISMOUNT message received from node ^N/S1/>)]
.NFDAK,,[ITEXT(<FROM NEBULA DISMOUNT ACK message received from MOUNTR>)]
.NTDAK,,[ITEXT(<TO NEBULA DISMOUNT ACK message received from NEBULA>)] ;[16]
.NCDSM,,[ITEXT(<NEBULA CANCEL DISMOUNT message received from MOUNTR>)]
.NFMTS,,[ITEXT(<FROM NEBULA MOUNT message received from node ^N/S1/>)]
.NSHOP,,[ITEXT(<SHOW OPERATORS message received from node ^N/S1/>)]
.NMESS,,[ITEXT(<SHOW MESSAGES message received from node ^N/S1/>)]
.NMSHS,,[ITEXT(<SHOW STATUS message received from node ^N/S1/>)]
.NDSTR,,[ITEXT(<SHOW STATUS STRUCTURE message received from node ^N/S1/>)]
.NDSHD,,[ITEXT(<SHOW STATUS DISK message received from node ^N/S1/>)]
.NDSHT,,[ITEXT(<SHOW STATUS TAPE message received from node ^N/S1/>)]
.NMSSN,,[ITEXT(<SHOW STATUS NETWORK message received from node ^N/S1/>)]
.NMSPN,,[ITEXT(<SHOW PARAMETER NETWORK message received from node ^N/S1/>)]
.NDSCD,,[ITEXT(<SHOW CONFIGURATION message received from node ^N/S1/>)]
.NMSHQ,,[ITEXT(<SHOW QUEUES message received from node ^N/S1/>)]
.NMSHP,,[ITEXT(<SHOW PARAMETERS message received from node ^N/S1/>)]
.NMSHR,,[ITEXT(<SHOW ROUTE-TABLE message received from node ^N/S1/>)]
$ETAB
SUBTTL SHOW message code translation tables
;NEBULA SHOW TO QUASAR SHOW
NBTOQR: $STAB ;[4]
.NMSHS,,.OMSHS ;SHOW STATUS
.NDSHT,,.ODSHT ;[5]SHOW STATUS TAPE
.NDSHD,,.ODSHD ;[5]SHOW STATUS DISK
.NDSTR,,.ODSTR ;[6]SHOW STATUS STRUCTURE
.NDSCD,,.ODSCD ;SHOW CONFIGURATION
.NMSHQ,,.OMSHQ ;SHOW QUEUES
.NMSHP,,.OMSHP ;SHOW PARAMETERS
.NMSHR,,.OMSHR ;SHOW ROUTE
.NFMTS,,.ODMTS ;[2]MOUNT STRUCTURE/CLUSTER-NODE
.NMSSN,,.OMSSN ;[JCR]SHOW STATUS NETWORK-NODE
.NMSPN,,.OMSPN ;[JCR]SHOW PARAMETERS NETWORK-NODE
$ETAB
;QUASAR SHOW TO NEBULA SHOW
QRTONB: $STAB
.OMSHS,,.NMSHS ;SHOW STATUS
.ODSHT,,.NDSHT ;[5]SHOW STATUS TAPE
.ODSHD,,.NDSHD ;[5]SHOW STATUS DISK
.ODSTR,,.NDSTR ;[6]SHOW STATUS STRUCTURE
.ODSCD,,.NDSCD ;SHOW CONFIGURATION
.OMSHQ,,.NMSHQ ;SHOW QUEUES
.OMSHP,,.NMSHP ;SHOW PARAMETERS
.OMSHR,,.NMSHR ;SHOW ROUTE
.ODMTS,,.NTMTS ;[2]MOUNT STRUCTURE/CLUSTER-NODE
.OMSSN,,.NMSSN ;[JCR]SHOW STATUS NETWORK-NODE
.OMSPN,,.NMSPN ;[JCR]SHOW PARAMETERS NETWORK-NODE
$ETAB
END