Trailing-Edge
-
PDP-10 Archives
-
BB-KL11L-BM_1990
-
galsrc/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
SEARCH MACSYM ;[35]
PROLOG(OPRNEB)
;**;[31]At PROLOG(OPRNEB)+1L add 1 line JCR 2/22/90
ERRSET ;[31]Initialize error tables
;Version numbers
NEBMAN==:36 ;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.
21 6.1269 18-Oct-88
Fix a bug in N$SHOW so that OPR>SHOW STATUS PRINTER LOCAL /CLUSTER
will work. If NEB%MS is lit for the cluster OPR action commands, turn it off,
update the node name in the object block and forward the message to QUASAR.
22 6.1284 4-Oct-89
Replace "New message from NEBULA" in ORION's log file with the type
of message and what node the message originated from.
23 6.1289 29-Nov-89
Add support for the RESPOND/CLUSTER-NODE command and remote MOUNTR
commands.
24 6.1294 23-Dec-89
In routine N$SHOW turn off bit .RMLPT if set before sending the
message to QUASAR. Also, if the message contains an object block, place
the local node name in the object block only if a local printer or
non-printer object has been specified and the message is not for all
nodes (i.e., the node word does not contain a "-1").
25 6.1305 19-Jan-90
Implement support for the ROUTE/CLUSTER-NODE command.
26 6.1307 1-Feb-90
Implement support for the CLOSE LOG/CLUSTER-NODE command.
27 6.1311 14-Feb-90
Implement support for the REPORT/CLUSTER-NODE command.
30 6.1313 20-Feb-90
Implement support for DISMOUNT/CLUSTER-NODE command. In routine N$FDSM
set bit MF.RDM if the remote dismount is a result of a SET EXCLUSIVE or
DISMOUNT REMOVAL command.
31 6.1312 22-Feb-90
Implement support for the /CLUSTER-NODE: switch in the ENABLE/DISABLE
CLASS-SCHEDULER, FILE-RETRIEVAL-WAITS, LOGGING and SEMI-OPR commands.
32 6.1315 27-Apr-90
Implement support for the /CLUSTER-NODE: swtich in the ENABLE/DISABLE
BROADCAST-MESSAGES, SHOW BROADCAST-MESSAGES and the SHOW OPERATOR/ALL commands.
33 6.1316 2-May-90
Cause routine N$RSPD to always send a Null ACK to NEBULA.
34 6.1318 3-Jun-90
Add support for alias printers
35 6.1317 7-June-90
Add support for SET JOB /CLUSTER-NODE: command
36 6.1317 11-June-90
Save the node name in case of error
\ ;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
;**;[21]At EXTERN G$NOW add 1 line JYCW Oct-18-88
EXTERN MANTAB,COMMAN ;[21]COMMAND TABLE AND COMMAN ROUTINE
;**;[32]At EXTERN MANTAB add 1 line JCR 4/27/90
EXTERN CLSTYP,DISARG,G$CLUN,MSGARG ;[32]Broadcast messages support
;**;[35]At EXTERN CLSTYP add 1 line JYCW 6/8/90
EXTERN SETJ.S,SETJ.W ;[35]SET JOB
EXTERN SNDAOP,SNDNAL,NOALTN ;[35]SEND OPERATOR
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
;**;[34]At EXTERN N$FBLK+1L: add 3 lines PMM 6/3/90
EXTERN AKAOBJ ;[34]Alias printer object block
EXTERN SAKHDR ;[34]SHOW ALIAS remote message header
EXTERN LSTENT ;[34]SHOW ALIAS last printer type
MSGADR: BLOCK 1 ;MESSAGE PAGE RELEASED FLAG
DISBLK: BLOCK 15 ;[4]REMOTE DISPLAY BLOCK
;**;[26]At DISBLK:+0L add 3 lines JCR 2/1/90
G$NEBF::BLOCK 1 ;[26]Remote origin flag
G$NULA::BLOCK 1 ;[26]Null ACK needed flag
G$REMN::BLOCK 1 ;[26]Remote node name
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
;**;[23]At NEBMSG:+4L replace 4 lines with 15 lines JCR 11/29/89
MOVEI S2,N$TEXT ;[23]Assume a Text message
CAIN S1,MT.TXT ;[23]Is this a Text message?
JRST NEBM.2 ;[23]Yes, go prepare to dispatch
TXZ S1,NEB%MS ;[23]No, turn off "CLUSTER-NODE" bit
CAIGE S1,.NBMSG ;[23]A NEBULA message?
CAIGE S1,.ODMES ;[23]No, a MOUNTR message?
JRST NEBM.1 ;[23]No, search the table
MOVEI S2,NBMSG ;[23]Pick up the routine address
JRST NEBM.2 ;[23]Go prepare to dispatch
NEBM.1: MOVEI S2,NEBTAB ;[23]Pick up message dispatch table
$CALL TABSRC ;[23]Pick up the processor routine adr
JUMPF [$CALL E$IMT## ;[23]Illegal message type
SETOM G$NERR ;[23]ACK the remote requestor
$RET ] ;[23]Return to the caller
NEBM.2: DMOVEM S1,G$NEBD ;[23]Save message type and routine adr
$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 ;[5]SHOW STATUS NETWORK-NODES
.NMSPN,,N$SHOW ;[5]SHOW PARAMTERS NETWORK-NODES
.NMACS,,N$MACS ;REMOTE SHOW ACK MESSAGE
MT.TXT,,N$TEXT ;[4]REMOTE ORION TEXT MESSAGE
;**;[23]At NEBTAB:+22L add 30 lines JCR 11/29/89
.OMSTA,,NBMSG ;[23]STARTUP message
.OMSHT,,NBMSG ;[23]SHUTDOWN message
.OMSET,,NBMSG ;[23]SET message
.OMPAU,,NBMSG ;[23]STOP message
.OMCON,,NBMSG ;[23]CONTINUE message
.OMSHC,,NBMSG ;[23]SHOW COMMAND FILE
.OMREQ,,NBMSG ;[23]REQUEUE message
.OMCAN,,NBMSG ;[23]ABORT message
.OMFWS,,NBMSG ;[23]FORWARDSPACE message
.OMALI,,NBMSG ;[23]ALIGN PRINTER message
.OMSUP,,NBMSG ;[23]SUPPRESS PRINTER message
.OMSND,,NBMSG ;[23]SEND message
.OMBKS,,NBMSG ;[23]BACKSPACE message
.OMHLD,,NBMSG ;[23]HOLD message
.OMREL,,NBMSG ;[23]RELEASE message
;**;[25]At NEBTAB:+39L change 1 line JCR 1/19/90
.OMRTD,,RTMSG ;[25]ROUTE message
.OMDEL,,NBMSG ;[23]CANCEL message
.OMMOD,,NBMSG ;[23]MODIFY message
.OMENA,,NBMSG ;[23]ENABLE message
.OMDIS,,NBMSG ;[23]DISABLE message
.OMDEF,,NBMSG ;[23]DEFINE message
.OMDSP,,NBMSG ;[23]DN60 DISPLAY message
.OMNXT,,NBMSG ;[23]NEXT message
.OMELP,,NBMSG ;[23]ENA LOG/SPOOL LPT OBJECTS message
.OMDLP,,NBMSG ;[23]DIS LOG/SPOOL LPT OBJECTS message
.OMELT,,NBMSG ;[23]ENA SPECIFIC LPT LOG/SPOOL message
.OMDLT,,NBMSG ;[23]DIS SPECIFIC LPT LOG/SPOOL message
.OMEUP,,NBMSG ;[23]ENA UNPRIV USER REMOTE I/O message
.OMDUP,,NBMSG ;[23]DIS UNPRIV USER REMOTE I/O
.OMRSP,,N$RSPD ;[23]RESPOND message
;**;[26]At NEBTAB:+55L add 1 line JCR 2/1/90
.OMCLO,,N$LOG ;[26]CLOSE LOG message
;**;[27]At NEBTAB:+57L add 1 line JCR 2/14/90
.OMREP,,N$REP ;[27]REPORT message
;**;[31]At NEBTAB:+59L add 8 lines JCR 2/22/90
.OMECS,,N$CLAS ;[31]ENABLE CLASS-SCHEDULER
.OMDCS,,N$CLAS ;[31]DISABLE CLASS-SCHEDULER
.OMEFI,,N$FILE ;[31]ENABLE FILE-RETRIEVAL
.OMDFI,,N$FILE ;[31]DISABLE FILE-RETRIEVAL
.OMELG,,N$LGNG ;[31]ENABLE LOGGING
.OMDLG,,N$LGNG ;[31]DISABLE LOGGING
.OMESO,,N$SEMI ;[31]ENABLE SEMI-OPR
.OMDSO,,N$SEMI ;[31]DISABLE SEMI-OPR
;**;[32]At NEBTAB:+68L add 3 lines JCR 4/27/90
.OMEBM,,N$BCW ;[32]ENABLE BROADCAST-MESSAGES
.OMDBM,,N$BCW ;[32]DISABLE BROADCAST-MESSAGES
.OMSBM,,N$SBC ;[32]SHOW BROADCAST-MESSAGES
;**;[34]At NEBTAB:+71L add 2 lines PMM 6/3/90
.OMAKA,,N$DAK ;[34]DEFINE ALIAS
.OMSAK,,N$SAK ;[34]SHOW ALIAS
;**;[35]At NEBTAB:+73L add 2 line JYCW 6/8/90
.OMSJB,,N$SETJ ;[35]REMOTE SET JOB
.OMSOP,,N$SEDO ;[35]REMOTE SEND OPERATOR
$ETAB
;**;[25]At the end of NEBTAB: add routine RTMSG JCR 1/19/90
SUBTTL RTMSG - ROUTE Message Preprocessor
;[25]Routine RTMSG is called to determine if the node names specified in
;[25]the source and/or destination object descriptions need to be
;[25]changed to the local node name. In processing the route command,
;[25]the ORION where the message originated will place its name into
;[25]the source or destination object descriptor if the operator did
;[25]not specify a node name. If this is the case, then the remote
;[25]ORION must change the node name to its own name.
;[25]
;[25]Call is: MI/Route message address
;[25] S1/Message type
;[25]Returns: PJRST to NBMSG
RTMSG: MOVE S1,.OFLAG(MI) ;[25]Pick up the flag word
MOVE S2,G$HOST ;[25]Pick up local node name
TXNE S1,RT.SND ;[25]Default source node name?
MOVEM S2,SNDADR(MI) ;[25]Yes, update with local node name
TXNE S1,RT.DND ;[25]Default destination node name?
MOVEM S2,DNDADR(MI) ;[25]Yes, update with local node name
;**;[34]At RTMSG:+5L add 20 lines PMM 6/3/90
MOVEI S2,.RTEFM ;[34]Get source object block type
MOVE S1,MI ;[34]Get message address
$CALL N$FBLK ;[34]Get address of block type
SETZM ARG.DA+OBJ.AK(S1) ;[34]Clear alias name
MOVE P1,S1 ;[34]Save address of block
AOS S1 ;[34]Get address of block data
$CALL FINDPR## ;[34]Search for printer's alias name
JUMPF RTMS.1 ;[34]No alias, check destination block
MOVE S1,OBJAKA(S2) ;[34]Get SIXBIT alias name
MOVEM S1,ARG.DA+OBJ.AK(P1) ;[34]Save in message
RTMS.1: MOVEI S2,.RTETO ;[34]Get destination object block type
MOVE S1,MI ;[34]Get message address
$CALL N$FBLK ;[34]Get address of block type
SETZM ARG.DA+OBJ.AK(S1) ;[34]Clear alias name
MOVE P1,S1 ;[34]Save address of block
AOS S1 ;[34]Get address of block data
$CALL FINDPR## ;[34]Search for printer's alias name
JUMPF RTMS.2 ;[34]No alias, drop into common code
MOVE S1,OBJAKA(S2) ;[34]Get SIXBIT alias name
MOVEM S1,ARG.DA+OBJ.AK(P1) ;[34]Save in message
RTMS.2: MOVEI S1,.OMRTD ;[25]Expected by routine NBMSG
PJRST NBMSG ;[25]Drop into common code
SUBTTL NBMSG - Cluster OPR action routine handler.
;**;[23]At SUBTTL NBMSG:+1L replace 5 lines with 12 lines JCR 11/29/89
;[23]Routine NBMSG processes OPR action messages that do not need to be
;[23]converted. The message is already in the form of an ORION to QUASAR format.
;[23]If there is an object block in the message and it is not for a remote
;[23]printer (i.e., not for a cluster, DQS or LAT printer), then place the
;[23]local node name in the object block. The message is then forwarded to
;[23]QUASAR.
;
;[23]Call is: S1/Message type with bit NEB%MS turned off
;[23] MI/IPCF message address
;
;[23]Returns true: The message was sucessfully sent to QUASAR
;[23]Returns false: The message was not sent to QUASAR
;**;[21]At NEBTAB:+21L add routine NBMSG:
;**;[23]At NBMSG:+0L replace 8 lines with 3 lines JCR 11/29/89
NBMSG: STORE S1,.MSTYP(MI),MS.TYP ;[23]Turn off NEB%MS in incoming msg
$CALL L$NEB ;[23]Log the message
$CALL CPYMSG ;[23]Copy the message to outgoing page
MOVE S1,MO ;[21]PICK UP ADDRESS OF MESSAGE
MOVEI S2,.OROBJ ;[21]PICK UP BLOCK TYPE TO SEARCH FOR
$CALL N$FBLK ;[21]FIND THE OBJECT BLOCK
JUMPF NBMS.6 ;[34]None
;**;[34]At NBMSG:+6L replace 1 line with 17 lines PMM 6/3/90
HRRZ S2,ARG.DA+OBJ.TY(S1) ;[34]Pick up the object type
CAIN S2,.OTLPT ;[34]Is this a LPT?
JRST NBMS.2 ;[34]Yes, treat differently
MOVE S2,ARG.DA+OBJ.TY(S1) ;[34]Pick up the full object type
TXZE S2,.RMLPT ;[34]Was /NODE specified originally?
JRST NBMS.1 ;[34]Yes, so use its value
MOVE S2,G$HOST ;[34]Pick up the local node name
MOVEM S2,ARG.DA+OBJ.ND(S1) ;[34]Place it in the object block
JRST NBMS.6 ;[34]Send to QUASAR
NBMS.1: MOVEM S2,ARG.DA+OBJ.TY(S1) ;[34]Save the updated object type
JRST NBMS.6 ;[34]Send to QUASAR
NBMS.2: MOVE S2,ARG.DA+OBJ.TY(S1) ;[34]Get object type
TXNE S2,.DQLPT!.LALPT ;[34]Is it LAT or DQS printer?
JRST NBMS.3 ;[34]Yes, proceed as usual
LOAD S2,ARG.HD(S1),AR.LEN ;[34]Pick up object block length
CAIN S2,AKBSIZ ;[34]Does length indicate an alias?
SETZM OBJAKA(S1) ;[34]Yes, clear alias
MOVE P3,S1 ;[34]Get address of object block
MOVE P1,S1 ;[34]Preserve address of object block
LOAD S1,ARG.DA+OBJ.UN(S1),OU.HRG ;[34]Get high range
$CALL RANGAB## ;[34]Search for alias names
MOVE S1,P1 ;[34]Restore address of object block
NBMS.3: MOVE S2,ARG.DA+OBJ.TY(S1) ;[34]Get the object type
TXNN S2,.LALPT ;[34]Is it a LAT printer?
TXNE S2,.DQLPT ;[34]DQS printer?
SETZM ARG.DA+OBJ.AK(S1) ;[34]Yes, clear alias
TXNN S2,.DQLPT ;[21]DQS?
TXNE S2,.CLLPT ;[21]CLUSTER PRINTER?
JRST NBMS.5 ;[34]YES
TXNN S2,.LALPT ;[21]IS IT A LAT?
TXZE S2,.RMLPT ;[21]IS IT A REMOTE PRINTER (/NODE:)
JRST NBMS.4 ;[34]YES, NO NEED TO CHANGE NODE NAME
MOVE S2,G$HOST ;[21]GET LOCAL NODE NAME
MOVEM S2,ARG.DA+OBJ.ND(S1) ;[21]PUT IT IN OBJECT BLK
SKIPA ;[21]NO NEED TO CHANGE THE OBJECT TYPE
NBMS.4: MOVEM S2,ARG.DA+OBJ.TY(S1) ;[34]SAVE THE OBJECT TYPE
NBMS.5: AOS S1 ;[34]Point past object block header
$CALL FINDPR## ;[34]Is it in list?
JUMPF NBMS.6 ;[34]No, send to QUASAR
MOVE T1,OBJAKA(S2) ;[34]Get SIXBIT alias name
MOVEM T1,ARG.DA+OBJ.AK(P1) ;[34]Save in object block
NBMS.6: $CALL N$SQSR ;[34]Send the message to QUASAR
;**;[23]At NBMSG1:+1L replace 5 lines with 1 line JCR 11/29/89
$RET ;[23]Preserve T/F for caller
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
;**;[30]At N$FDSM+4L add 2 lines JYCW 2/20/90
MOVX S1,MF.RDM ;[30]Get indirect remote dismount
IORM S1,.MSFLG(MO) ;[30]Place in the outgoing 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
;**;[23]At N$MESS:+1L add 1 line JCR 11/29/89
$CALL L$NEB ;[23]Log the message
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
;**;[23]At N$MESS:+9L replace 4 lines with 2 lines JCR 11/29/89
$CALL N$FNOD ;[23]Find the node list entry
$RETIF ;[23]Return if node entry not found
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
;**;[23]At N$ME.1:+3L replace 4 lines with 2 lines JCR 11/29/89
$CALL N$FNOD ;[23]Find the node list entry
$RETIF ;[23]Return if node entry not found
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
;**;[23]At N$ME.1:+9L replace 2 lines with 1 line JCR 11/29/89
JUMPF N$NSM ;[23]No such message
$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
;**;[23]At N$ME.2:+1L replace 4 lines with 2 lines JCR 11/29/89
$CALL N$FNOD ;[23]Find the local node name entry
$RETIF ;[23]The node is not known
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
;**;[23]At N$OPER:+1L add 1 line JCR 11/29/89
$CALL L$NEB ;[23]Log the message
MOVEI S1,.OMDSP ;[4]PICK UP THE MESSAGE TYPE
$CALL BLDHDR ;BUILD THE GALAXY MESSAGE HEADER
;**;[32]At N$OPER:+5L add 4 lines JCR 4/27/90
SETZM G$ARG3## ;[32]Assume no /ALL switch
MOVE S1,.OFLAG(MI) ;[32]Pick up the flag word
TXNE S1,OP.ALL ;[32]/ALL switch specified?
SETOM G$ARG3## ;[32]Yes, indicate so
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
;**;[23]At N$OPER:+9L replace 4 lines with 2 lines JCR 11/29/89
$CALL N$FNOD ;[23]Find the local node name entry
$RETIF ;[23]The node is not known
$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
;**;[21]At N$SHOW:+6L add 12 lines JYCW Oct-18-88
MOVE S1,MO ;[21]PICK UP ADDRESS OF MESSAGE
MOVEI S2,.OROBJ ;[21]PICK UP BLOCK TYPE TO SEARCH FOR
$CALL N$FBLK ;[21]FIND THE OBJECT BLOCK
JUMPF N$SH.0 ;[21]NO OBJECT BLOCK
;**;[34]At N$SHOW:+11L add 3 lines PMM 6/3/90
LOAD S2,ARG.HD(S1),AR.LEN ;[34]Pick up object block length
CAIN S2,AKBSIZ ;[34]Does length indicate an alias?
SETZM OBJ.AK(S1) ;[34]Yes, clear alias
;**;[24]At N$SHOW:+12L replace 11 lines with 17 lines JCR 12/23/89
N$SHW.0:MOVE S2,ARG.DA+OBJ.ND(S1) ;[24]Pick up the node name
CAMN S2,[-1] ;[24]Is it for all nodes?
JRST N$SH.0 ;[24]Yes, send the message to QUASAR
MOVE S2,ARG.DA+OBJ.TY(S1) ;[24]Get the object type
CAMN S2,[-1] ;[24]For all objects?
JRST N$SH.0 ;[24]Yes, send the message to QUASAR
TXNN S2,.DQLPT ;[24]DQS?
TXNE S2,.CLLPT ;[24]Cluster printer?
JRST N$SH.0 ;[24]Yes, send the message to QUASAR
TXNE S2,.LALPT ;[24]Is it a LAT?
JRST N$SH.0 ;[24]Yes, send the message to QUASAR
TXZE S2,.RMLPT ;[24]Node Switch Present?
JRST N$SH0A ;[24]Yes, go turn off .RMLPT bit
MOVE S2,G$HOST ;[24]Get the local node name
MOVEM S2,ARG.DA+OBJ.ND(S1) ;[24]Put it in the object block
SKIPA ;[24]Don't update the object type
N$SH0A: MOVEM S2,ARG.DA+OBJ.TY(S1) ;[24]Update the object type
;**;[34]At N$SHOA:+1L add 2 lines PMM 6/3/90
SKIPA ;[34]Don't zero the alias name
N$SH.0: SETZM OBJ.AK(S1) ;[34]Clear alias for remote LPT only
$CALL N$SQSR ;[21]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
;**;[23]At N$TEXT:+9L add routines N$RSPD and N$FNOD JCR 11/29/89
SUBTTL N$RSPD - Process a RESPOND message from a remote ORION
;[23]Routine N$RSPD processes a RESPOND message from a remote ORION.
;[23]
;[23]Call is: MI/Address of the RESPOND message
;[23]
;[23]Returns true: The outstanding WTOR was successfully responded to
;[23]Returns false: The outstanding WTOR no longer exists or was not
;[23] responded to
N$RSPD: $SAVE <P1,P2,P3,P4> ;[23]Save some scratch ACs
$CALL L$NEB ;[23]Log the message
MOVEI S1,.OHDRS(MI) ;[23]Point to the first parser block
$CALL P$SETU## ;[23]Set up the parser
$CALL P$NUM## ;[23]Pick up the message number
JUMPF N$RS.1 ;[23]Illegally formatted message
MOVE P1,S1 ;[23]Save the message number
MOVE S1,G$HOST ;[23]Pick up the local node name
$CALL N$FNOD ;[23]Find the node entry address
;**;[33]At N$RSPD:+9L change 1 line JCR 5/2/90
JUMPF N$RS.2 ;[33]None, send a Null ACK
MOVE P2,S2 ;[23]Save the node entry address
MOVEM P1,G$ARG2 ;[23]Save message number if an error
MOVE S1,P1 ;[23]Place msg number in expected place
$CALL GETMSG ;[23]Check for message for this node
JUMPF N$NSM ;[23]Quit now if no such message
MOVE P2,S2 ;[23]Save the message address
MOVEI S1,.OMRSP ;[23]Pick up RESPOND message type
STORE S1,.MSTYP(MO),MS.TYP ;[23]Place in the outgoing message
MOVE S1,MI ;[23]Pick up incoming message address
MOVEI S2,.NDENM ;[23]Pick up remote node block code
$CALL N$FBLK ;[23]Find it in the incoming message
JUMPF N$RS.1 ;[23]Illegally formatted message
LOAD P4,ARG.DA(S1) ;[23]Save the requestor's node name
MOVEI P3,.OHDRS(MO) ;[23]Point to 1st block of outgoing msg
MOVE S1,.MSCOD(MI) ;[23]Pick up the PID
MOVEM S1,G$SND## ;[23]Overwrite NEBULA's PID
MOVX S1,MF.NEB ;[23]Pick up the remote origin bit
IORM S1,.MSFLG(MO) ;[23]Place in the outgoing message
SETOM G$NSHW ;[23]Indicate request came remotely
$CALL REMRSP## ;[23]Respond to the WTOR
JUMPF N$RS.1 ;[23]Go indicate if an error occurred
SKIPN G$ERR## ;[23]Need to send a remote ACK?
;**;[33]At N$NSM:-3L change 1 line JCR 5/2/90
JRST N$RS.2 ;[33]No, send a Null ACK
JRST N$RS.1 ;[23]Indicate an error has occurred
N$NSM: MOVEI S1,E$NSM## ;[23]No such message
$CALL 0(S1) ;[23]Place error offset in G$ERR
N$RS.1: SETOM G$NERR ;[23]Indicate must build a remote ACK
$RETF ;[23]Indicate an error occurred
;**;[33]At N$RS.1:+2L add 14 lines JCR 5/2/90
N$RS.2: MOVE P1,TF ;[33]Remember the T/F indicator
$CALL M%GPAG ;[33]Pick up a page
MOVE S2,[PAGSIZ,,.OMNAK] ;[33]Pick up message type
MOVEM S2,.MSTYP(S1) ;[33]Place in the message
MOVE S2,.MSCOD(MI) ;[33]Pick up the PID
MOVEM S2,.MSCOD(S1) ;[33]Place in the message
MOVE P2,MO ;[33]Remember first output page address
MOVE MO,S1 ;[33]Place address where expected
$CALL N$SNEB ;[33]Send the message to NEBULA
SKIPT ;[33]Don't release page on success
$CALL RELPAG ;[33]Release the page
MOVE MO,P2 ;[33]Pick up first output page address
MOVE TF,P1 ;[33]Pick up original T/F indicator
$RET ;[33]Return to the caller
;**;[26]At N$RS.1:+1L add routine N$LOG JCR 2/1/90
SUBTTL N$LOG - Close the Log File
;[26]N$LOG is called to close the OPR log file.
;[26]
;[26]Call is: MI/Address of the CLOSE LOG message
;[26] MO/Address of outgoing IPCF message
;[26] S1/CLOSE LOG message code (.OMCLO)
;[26]Returns true: The log file has been closed, renamed and a new log
;[26] file has been opened.
;[26]Returns false: Logging is not enabled or an error occurred in either
;[26] closing, renaming or opening the new log file.
N$LOG: $CALL L$NEB ;[26]Log the message
$CALL RELPAG ;[26]Release the outgoing page
MOVE S1,MI ;[26]Pick up the message address
MOVEI S2,.NDENM ;[26]Check for the node block
$CALL N$FBLK ;[26]Find the node argument block
JUMPF N$LO.1 ;[26]If not found, pass back error
MOVE S1,ARG.DA(S1) ;[26]Pick up the node name
MOVEM S1,G$REMN ;[26]Save for any $QWTO
MOVEM S1,G$NEBF ;[26]Indicate remote for any $QWTO
$CALL L$CLOS## ;[26]Close the log file
$RET ;[26]Preserve any error indicator
N$LO.1: SETOM G$NERR ;[26]Indicate must build a remote ACK
$CALL E$IFC ;[26]Indicate illegally formatted msg
;**;[27]At N$LO.1:+2L add routine N$REP JCR 2/14/90
SUBTTL N$REP - REPORT a Device Error
;[27]N$REP is called to place an entry in SYSERR
;[27]
;[27]Call is: MI/Address of the REPORT message
;[27] MO/Address of outgoing IPCF message
;[27] S1/REPORT message code (.OMREP)
;[27]Returns false: Always. This is because an MT.TXT message is
;[27] always sent.
N$REP: $CALL L$NEB ;[27]Log the message
$CALL RELPAG ;[27]Not sending a message to QUASAR
LOAD S2,.OHDRS+ARG.HD(MI),AR.LEN ;[27]Pick up block length
MOVEI S1,.OHDRS+ARG.DA(MI) ;[27]Pick up block address
SYERR% ;[27]Do the SYSERR update
ERJMP N$RE.1 ;[27]Go indicate the update failed
$CALL E$SEM## ;[27]Indicate SYSERR entry was made
SKIPA ;[27]Set the MT.TXT message flag
N$RE.1: $CALL E$SUF## ;[27]SYSERR update failed
SETOM G$NERR ;[27]Indicate must build an MT.TXT msg
$RET ;[27]Return to the caller
;**;[31]At N$RE.1:+3L add routines N$CLAS, N$FILE, N$LGNG and N$SEMI
;**;[31] JCR 2/22/90
SUBTTL N$CLAS - Process an ENABLE/DISABLE CLASS-SCHEDULER Message
;[31]N$CLAS is called to Enable or Disable class scheduling
;[31]
;[31]Call is: MI/Address of the CLASS-SCHEDULER message
;[31] MO/Address of outgoing IPCF message
;[31] S1/Message code (.OMECS or .OMDCS)
;[31]Returns false: Always. This is because an MT.TXT message is
;[31] always sent.
N$CLAS: $SAVE <P1,P2,P3> ;[31]Save these AC
SETZ P1, ;[31]Assume enable
CAIE S1,.OMECS ;[31]Enable request?
SETO P1, ;[31]No, indicate disable
$CALL L$NEB ;[31]Log the message
$CALL RELPAG ;[31]Not sending a message to QUASAR
MOVE S1,MI ;[31]Pick up the message address
MOVEI S2,.SCBLK ;[31]SKED% argument value block
$CALL N$FBLK ;[31]Pick up the block
JUMPF N$CL.2 ;[31]Quit on an error
MOVE P3,ARG.DA(S1) ;[31]Pick up the SKED% data
MOVEI S1,.SKICS ;[31]Pick up the function
MOVEI S2,P2 ;[31]Point to the SKED% argument block
MOVEI P2,.SACTL+1 ;[31]Size of the block
SKED% ;[31]Start or stop the scheduler
ERJMP N$CL.1 ;[31]Trap the error
MOVEI S1,[ASCIZ/enabled/] ;[31]Assume enabling
SKIPE P1 ;[31]Enabling?
MOVEI S1,[ASCIZ/disabled/] ;[31]No, disabling
MOVEM S1,G$ARG1 ;[31]Save for routine E$CSE
$CALL E$CSE ;[31]Scheduler enabled/disabled
JRST N$CL.3 ;[31]Go finish up
N$CL.1: MOVE S1,[EXP -2] ;[31]The last TOPS-20 error
MOVEM S1,G$ARG1 ;[31]Save for routine E$CSF
$CALL E$CSF ;[31]Indicate class scheduler error
SKIPA ;[31]Go finish up
N$CL.2: $CALL E$IFC ;[31]Indicate illegally formatted msg
N$CL.3: SETOM G$NERR ;[31]Indicate must build a remote ACK
$RET ;[31]Return to the caller
SUBTTL N$FILE - Process an ENABLE/DISABLE FILE-RETRIEVAL Message
;[31]N$FILE is called to enable or disable file retrievals
;[31]
;[31]Call is: MI/Address of the File Retrieval message
;[31] MO/Address of outgoing IPCF message
;[31] S1/Message code (.OMEFI or .OMDFI)
;[31]Returns false: Always. This is because an MT.TXT message is
;[31] always sent.
N$FILE: $SAVE <P1> ;[31]Save this AC
SETZ P1, ;[31]Assume enable
CAIE S1,.OMEFI ;[31]Enable request?
SETO P1, ;[31]No, indicate disable
$CALL L$NEB ;[31]Log the message
$CALL RELPAG ;[31]Not sending a message to QUASAR
MOVEI S1,[ASCIZ/enable/] ;[31]Assume enable
SKIPE P1 ;[31]Enabling?
MOVEI S1,[ASCIZ/disable/] ;[31]No, disabling
MOVEM S1,G$ARG1 ;[31]Save for MT.TXT message
MOVEI S1,.SFRTW ;[31]Pick up the function code
MOVE S2,P1 ;[31]Same as the ENABLE/DISABLE value
SMON% ;[31]Set the value
ERJMP N$FI.1 ;[31]Go indicate an error occurred
$CALL E$FRW ;[31]File retrieval waits modified
SKIPA ;[31]Go finish up
N$FI.1: $CALL E$RWF ;[31]Indicate error
SETOM G$NERR ;[31]Indicate must build a remote ACK
$RET ;[31]Return to the caller
SUBTTL N$LGNG - Process an ENABLE/DISABLE LOGGING Message
;[31]N$LGNG is called to enable or disable logging
;[31]
;[31]Call is: MI/Address of the Logging message
;[31] MO/Address of outgoing IPCF message
;[31] S1/Message code (.OMELG or .OMDLG)
;[31]Returns false: Always. This is because an MT.TXT message is
;[31] always sent.
N$LGNG: $SAVE <P1> ;[31]Save this AC
SETZ P1, ;[31]Assume enable
CAIE S1,.OMELG ;[31]Enable request?
SETO P1, ;[31]No, indicate disable
$CALL L$NEB ;[31]Log the message
$CALL RELPAG ;[31]Not sending a message to QUASAR
SKIPN P1 ;[31]Disabling?
JRST N$LG.1 ;[31]No, enabling
$CALL L$REL## ;[31]Release the log file
JUMPF N$LG.4 ;[31]Indicate error to remote operator
SETZM LOGINT## ;[31]Logging disabled
$CALL E$LFC ;[31]Set log file closed
MOVE P1,G$ERR ;[31]Destroyed by N$SNDA
JRST N$LG.3 ;[31]Indicate to the remote operator
N$LG.1: SETOM LOGINT## ;[31]Assume success
$CALL L$OPNL## ;[31]Open the log file
JUMPT N$LG.2 ;[31]Go tell the operators
SKIPN LOGOPN## ;[31]Log file already open?
SETZM LOGINT## ;[31]No, so couldn't open it
JRST N$LG.4 ;[31]Go indicate an error
SETOM LOGINT## ;[31]Mark logging enabled
N$LG.2: $CALL E$OLO ;[31]ORION log file open
MOVE P1,G$ERR ;[31]Destroyed by N$SNDA
N$LG.3: $CALL N$SNDA ;[31]Message to all operators
MOVEM P1,G$ERR ;[31]Save the error code
SKIPA ;[31]Indicate error for NEBULA
N$LG.4: $CALL E$LFE ;[31]Indicate a log file error
SETOM G$NERR ;[31]Indicate must build a remote ACK
$RET ;[31]Return to the caller
SUBTTL N$SNDA - Send a Text Message to all the Operators
;[31]Routine N$SNDA sends a text (MT.TXT) message to all operators
;[31]that is the result of a remote operator request.
;[31]Call is: No arguments
;[31]Returns: The text message has been sent to all the local operators
;[31]Assumes: WDANHD contains the SIXBIT node name where the request
;[31] originated.
N$SNDA: LOAD S1,G$JOB## ;[31]Get the job number
$CALL GETJOB## ;[31]Get the job information
$CALL BLDRAK## ;[31]Build the ACK
SETOM S1 ;[31]Send to all
SETZM G$ERR ;[31]Clear the error word
SETOM G$ASND## ;[31]Force the message out
$CALL SNDAOP## ;[31]Send to all operators
$RET ;[31]Return to the caller
SUBTTL N$SEMI - Process an ENABLE/DISABLE SEMI-OPR Message
;[31]N$SEMI is called to enable or disable SEMI-OPRs
;[31]
;[31]Call is: MI/Address of the SEMI-OPR message
;[31] MO/Address of outgoing IPCF message
;[31] S1/Message code (.OMESO or .OMDSO)
;[31]Returns false: Always. This is because an MT.TXT message is
;[31] always sent.
N$SEMI: $SAVE <P1> ;[31]Save this AC
SETZ P1, ;[31]Assume enable
CAIE S1,.OMESO ;[31]Enable request?
SETO P1, ;[31]No, indicate disable
$CALL L$NEB ;[31]Log the message
$CALL RELPAG ;[31]Not sending a message to QUASAR
JUMPN P1,N$SE.1 ;[31]Go disable SEMI-OPRs
MOVEI S1,[ASCIZ/enable/] ;[31]Get the enable text
MOVEM S1,G$ARG1 ;[31]Save the value for the MT.TXT msg
SETZM G$SEMF## ;[31]Indicate SEMI-OPR is enabled
$CALL E$SMO ;[31]Indicate result of the command
JRST N$SE.2 ;[31]Indicate message for NEBULA
;[31]Do the DISABLE SEMI-OPR command
N$SE.1: MOVEI S1,[ASCIZ/disable/] ;[31]Get the disable text
MOVEM S1,G$ARG1 ;[31]Save the value for the MT.TXT msg
SETOM G$SEMF## ;[31]Indicate SEMI-OPR is disabled
$CALL E$SMO ;[31]Indicate result of the command
$CALL DELSOP## ;[31]Delete any SEMI-OPRs
N$SE.2: SETOM G$NERR ;[31]Indicate must build a remote ACK
$RET ;[31]Return to the caller
;**;[32]At N$SE.2:+2L add routines N$BCW and N$SBC JCR 4/27/90
SUBTTL N$BCW - Process an ENABLE/DISABLE BROADCAST-MESSAGES Message
;[32]N$BCW is called to enable or disable WTO broadcasting
;[32]
;[32]Call is: MI/Address of the BROADCAST-MESSAGES message
;[32] MO/Address of outgoing IPCF message
;[32] S1/Message code (.OMEBM or .OMDBM)
;[32]Returns false: Always. This is because an MT.TXT message is
;[32] always sent.
N$BCW: $SAVE <P1,P2> ;[32]Save some scratch ACs
SETZ P1, ;[32]Assume enable
CAIE S1,.OMEBM ;[32]Enable request?
SETO P1, ;[32]No, indicate disable
$CALL L$NEB ;[32]Log the message
$CALL RELPAG ;[32]Not sending a message to QUASAR
MOVE S1,MI ;[32]Pick up the message address
MOVEI S2,.BMPAR ;[32]Pick up the block type
$CALL N$FBLK ;[32]Find the block
JUMPF N$BC.1 ;[32]Quit if no such block
MOVE S2,BMC.ND(S1) ;[32]Pick up the node name
MOVEM S2,G$ARG1 ;[32]Save for later
MOVEI S2,.BMOTM ;[32]Assume msg associated w/ object
MOVEI P2,MSGARG ;[32]Assume msg associated w/ object
CAME S2,BMC.CL(S1) ;[32]Is it?
MOVEI P2,DISARG ;[32]No, so indicate so
MOVEM P2,CLSTYP ;[32]Save the message class type
DMOVE S1,BMC.A1(S1) ;[32]Pick up the data
DMOVEM S1,0(P2) ;[32]Save for later
SETZM G$CLUN ;[32]Indicate don't forward message
$CALL ENAB.1## ;[32]Update the message display queue
SKIPA ;[32]Set remote ACK word
N$BC.1: $CALL E$IFC ;[32]Indicate illegally formatted msg
SETOM G$NERR ;[32]Indicate must build a remote ACK
$RET ;[32]Return to the caller
SUBTTL N$SBC - Process a SHOW BROADCAST-MESSAGES Message
;[32]N$SBC is called to process a remote SHOW BROADCAST-MESSAGS message.
;[32]
;[32]Call is: MI/Address of the SHOW BROADCAST-MESSAGES message
;[32] MO/Address of outgoing IPCF message
;[32] S1/Message code (.OMSBM)
;[32]Returns true: The SHOW BROADCAST-MESSAGES display has been built
;[32]Returns false: The BROADCAST-MESSAGES queue is empty
N$SBC: $SAVE <P1,P2> ;[32]Save some scratch ACs
$CALL L$NEB ;[32]Log the message
MOVEI S1,.OMDSP ;[32]Pick up the message type
$CALL BLDHDR ;[32]Build the remote header
MOVE S1,MI ;[32]Pick up the message address
MOVEI S2,.ORNOD ;[32]Pick up the block type
$CALL N$FBLK ;[32]Find the block
JUMPF N$SB.1 ;[32]Quit if no such block
MOVE S2,ARG.DA(S1) ;[32]Pick up the node name
MOVEM S2,G$ARG1 ;[32]Save for later
SETZM G$CLUN ;[32]Indicate don't forward message
$CALL SHWB.2## ;[32]Update the message display queue
JUMPF N$SB.1 ;[32]Indicate if an error occurred
$CALL FINSHW ;[32]Finish the message and send
$RET ;[32]Return to the caller
N$SB.1: SETOM G$NERR ;[32]Indicate must build a remote ACK
$RET ;[32]Return to the caller
SUBTTL N$FNOD - Find a Node Entry
;[23]N$FNOD is called to find the node entry address of a node in the
;[23]node list.
;[23]
;[23]Call is: S1/Sixbit node name whose entry is to be found
;[23]Returns true: S2/Node entry address
;[23]Returns false: The node entry does not exist
N$FNOD: MOVEM S1,G$ARG1 ;[23]Save in case of an error
$CALL FNDNOD ;[23]Validate the node
$RETIT ;[23]Found the node entry
MOVEI S1,E$NNK## ;[23]Node not known
$CALL 0(S1) ;[23]Place error offset in G$ERR
SETOM G$NERR ;[23]Log and send an error ACK
$RET ;[23]Preserve the failure indicator
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
;
;**;[23]At GETMSG:-3L change 1 line
;[23]Returns true: S2/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
;**;[23]At GETMSG:+9L add 1 line JCR 11/29/89
HRRM T1,FNDXCT ;[23]SAVE FOR COMPARE
$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
;**;[23]At N$BL.1:+2L replace 2 lines with 1 line JCR 11/29/89
JUMPN P1,N$BL.1 ;[23]Get the next character
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
;**;[23]At N$BL.1:+12L add 3 lines JCR 11/29/89
MOVE S1,[.NDESZ,,.NDENM] ;[23]Pick up cluster node header word
MOVEM S1,G$CBLK## ;[23]Save for /CLUSTER-NODE commands
$RET ;RETURN TO THE CALLER
;**;[34]After routine N$BLDP add routines N$DAK and N$SAK PMM 6/3/90
SUBTTL N$DAK - Process the Remote DEFINE ALIAS Message
;[34]Routine N$DAK processes OPR DEFINE ALIAS messages. It sets up the
;[34]following data which are needed for DEFINE ALIAS processing:
;[34]the standard object block AKAOBJ, G$ARG2 and G$ARG3.
;[34]Call is: MI/Address of the DEFINE ALIAS message
;[34] MO/Address of outgoing IPCF message
;[34]Returns true: Always
N$DAK: $SAVE <P1,P2> ;[34]Save some ACs
$CALL L$NEB ;[34]Log the message
MOVE S1,MI ;[34]Get message address
MOVEI S2,.NDENM ;[34]Get block type
$CALL N$FBLK ;[34]Find block type in message
JUMPF N$DA.4 ;[34]If none, indicate error
MOVE S1,ARG.DA(S1) ;[34]Get remote node name from message
MOVEI S2,G$CBLK## ;[34]Get address of global data block
MOVEM S1,ARG.DA(S2) ;[34]Save node name for later use
SETZM G$CLUN ;[34]Clear node(s) value
SETZM G$ARG2## ;[34]Clear alias to be deleted
MOVEI P1,.OHDRS(MI) ;[34]Point at first argument
MOVE S1,ARG.DA(P1) ;[34]Get 'new' alias name
MOVEM S1,G$ARG3## ;[34]Save for later
ADDI P1,.AKASZ ;[34]Point at next block
HRRZ S1,ARG.HD(P1) ;[34]Get block type
CAIN S1,.OROBJ ;[34]Is it an object block?
JRST N$DA.2 ;[34]Yes process printer specification
;[34]It is an unDEFINE message
$CALL DEF.1B## ;[34]Process unDEFINE ALIAS message
JUMPT N$DA.6 ;[34]Page has already been released
$CALL RELPAG ;[34]Release page if bad return
JRST N$DA.6 ;[34]Indicate must send a remote ACK
N$DA.2: HRLI T1,(P1) ;[34]Get source address
HRRI T1,AKAOBJ ;[34]Get source,,destination address
BLT T1,AKAOBJ+OBJ.SQ ;[34]Move the entire object block
MOVE S1,AKAOBJ+ARG.DA+OBJ.TY ;[34]Pick up the printer type
TXZE S1,.RMLPT ;[34]Node switch specified?
JRST N$DA.3 ;[34]Yes, so keep node name as is
CAME S1,[.OTLPT] ;[34]A local printer?
JRST N$DA.4 ;[34]No, so doesn't apply
MOVE S1,G$HOST ;[34]Pick up the local node name
MOVEM S1,AKAOBJ+ARG.DA+OBJ.ND ;[34]Save in the object block
SKIPA ;[34]Don't update the printer type
N$DA.3: MOVEM S1,AKAOBJ+ARG.DA+OBJ.TY ;[34]Save the updated printer type
N$DA.4: MOVEI S1,AKAOBJ+1 ;[34]Pick up the object block address
$CALL FINDPR## ;[34]Is it in the linked list?
JUMPF N$DA.5 ;[34]No, so don't indicate so
MOVE S1,OBJAKA(S2) ;[34]Get the old alias
MOVEM S1,AKAOBJ+OBJ.AK+1 ;[34]Save it in the object block
N$DA.5: $CALL DEF.6A## ;[34]Process the DEFINE ALIAS message
SKIPT ;[34]Page has already been released
$CALL RELPAG ;[34]Release page if bad return
N$DA.6: SETOM G$NERR ;[34]Indicate must send a remote ACK
$RET ;[34]Return to the caller
SUBTTL N$SAK - Process the Remote SHOW ALIAS Message
;[34]Routine N$SAK processes OPR SHOW ALIAS messages. It sets up the
;[34]the standard object block AKAOBJ which is needed for SHOW ALIAS
;[34]processing.
;[34]Call is: MI/Address of the DEFINE ALIAS message
;[34] MO/Address of outgoing IPCF message
;[34]Returns true: One or more aliases have been defined
;[34]Returns false: No aliases have been defined
N$SAK:: $SAVE <P1,P2> ;[34]Save these ACs
$CALL L$NEB ;[34]Log message
SETZM G$CLUN ;[34]Clear node(s) value
SETOM G$NSHW ;[34]Indicate remote processing
SETZM AKAOUT## ;[34]Assume no eligible entries
MOVEI S1,.OMDSP ;[34]Pick up the message header
$CALL BLDHDR ;[34]Build the GALAXY message header
MOVEI P1,.OHDRS+ARG.DA(MI) ;[34]Point at object block
MOVEI P4,AKAOBJ ;[34]Get address of model object block
;[34]Initialize standard object block
HRLI T1,(P1) ;[34]Save source address
HRRI T1,AKAOBJ ;[34]Save source,,destination address
BLT T1,AKAOBJ+OBJ.SQ-1 ;[34]Initialize entire object block
SETZM LSTENT ;[34]Initialize last entry type
MOVEI T1,AKAOBJ ;[34]Get destination address
MOVE P2,OBJ.AK(T1) ;[34]Get alias from object block
CAME P2,[-1] ;[34]Is there an alias?
JRST N$SA.2 ;[34]Yes process for an alias name
$CALL SHWA.6## ;[34]Process for printer specification
SKIPA
N$SA.2: $CALL SHWA.3## ;[34]Yes process the show alias
JUMPT FINSHW ;[34]Finish and send to NEBULA
N$SA.3: SETOM G$NERR ;[34]Indicate an error occurred
$RET ;[34]Return
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 N$SETJ - REMOTE SET JOB command
;**;[35]AtCPYDSP+6L add 31 lines JYCW 6/8/90
;Add routine N$SETJ to process a remote SET JOB command.
N$SETJ: SETOM G$NERR ;[35]Indicate this needs a remote ACK
$CALL L$NEB ;[35]Log the message
$CALL RELPAG ;[35]Release the outgoing page
MOVE S1,MI ;[35]Pick up the message address
MOVEI S2,.NDENM ;[35]Check for the node block
$CALL N$FBLK ;[35]Find the node argument block
JUMPF N$SET2 ;[35]If not found, pass back error
MOVE S1,ARG.DA(S1) ;[35]Pick up the node name
MOVEM S1,G$REMN ;[35]Save for any $QWTO
MOVEM S1,G$NEBF ;[35]Indicate remote for any $QWTO
MOVE S1,MI ;[35]Pick up the message address
MOVEI S2,.STJOB ;[35]Set Job Block
$CALL N$FBLK ;[35]Find the block
IFE. TF ;[35]No, how about .STSCH
MOVE S1,MI ;[35]Pick up the message address
MOVEI S2,.STSCH ;[35]Set Job Block
$CALL N$FBLK ;[35]Find the block
JUMPF N$SET2 ;[35]No set job block!!
HRRZ P1,ARG.DA(S1) ;[35]Job number
HLRZ P2,ARG.DA(S1) ;[35]Data
MOVEM P1,G$ARG1 ;[35]SAVE THE JOB NUMBER
$CALL SETJ.S ;[35]SET JOB SCH
ELSE. ;[35]
HRRZ P1,ARG.DA(S1) ;[35]Job number
HLRZ P2,ARG.DA(S1) ;[35]Data
MOVEM P1,G$ARG1 ;[35]SAVE THE JOB NUMBER
$CALL SETJ.W ;[35]SET JOB NOOPR/OP
ENDIF. ;[35]
$RET ;[35]
N$SET2: $RETF ;[35]
SUBTTL N$SEDO - REMOTE SEND OPERATOR command
;Add routine N$SEDO to process a remote SEND OPERATOR command.
N$SEDO:$CALL L$NEB ;[35]Log the message
$CALL RELPAG ;[35]Release the outgoing page
MOVE S1,MI ;[35]Pick up the message address
MOVEI S2,.NDENM ;[35]Check for the node block
$CALL N$FBLK ;[35]Find the node argument block
JUMPF N$SET2 ;[35]If not found, pass back error
MOVE S1,ARG.DA(S1) ;[35]Pick up the node name
MOVEM S1,G$REMN ;[35]Save for any $QWTO
MOVEM S1,G$NEBF ;[35]Indicate remote for any $QWTO
$CALL GETPAG ;[35]Get an output page
MOVE S1,MI ;[35]Pick up the message address
MOVEI S2,.CMTXT ;[35]Text block
$CALL N$FBLK ;[35]Find the block
JUMPF N$SED2 ;[35]No message block
MOVEI P3,ARG.DA(S1) ;[35]Save the message address
HRLI S2,(S1) ;[35]Source
HRRI S2,.OHDRS(MO) ;[35]Out message
LOAD S1,ARG.HD(S1),AR.LEN ;[35] PICK UP THIS BLOCK'S LENGTH
STORE S1,.MSTYP(MO),MS.CNT ;[35]Store it in out message
ADDI S1,(S2) ;[35]
BLT S2,-1(S1) ;[35]Store the text message
AOS .OARGC(MO) ;[35]BUMP THE ARGUMENT COUNT
MOVX S1,.OMDSP ;[35]Message type
STORE S1,.MSTYP(MO),MS.TYP ;[35]Store it in out message
LOAD S1,.MSTYP(MO),MS.CNT ;[35]Store it in out message
ADDI S1,.OHDRS ;[35]Add in the galaxy header size
STORE S1,.MSTYP(MO),MS.CNT ;[35]Store it in out message
MOVE S1,MI ;[35]Pick up the message address
MOVEI S2,.ORNOD ;[35]/NODE block?
$CALL N$FBLK ;[35]Find the block
IFN. TF ;[35]No,
MOVE S1,ARG.DA(S1) ;[35]Data
;**;[36]At N$SEDO+32L add 1 line JYCW 6/11/90
MOVEM S1,G$ARG1 ;[36]Save it for error
$CALL FNDNOD ;[35]Find the node
JUMPF E$NNK ;[35]The node is not known
MOVE S1,S2 ;[35]Get node entry address
SETOM NOALTN ;[35]No alternate nodes
$CALL SNDNAL ;[35]Send to all OPRs no alternates
JUMPF E$NON ;[35]No OPRs at node and return
ELSE. ;[35]
SETOM S1 ;[35]Send to all OPRS
$CALL SNDAOP ;[35]Send to all
ENDIF. ;[35]
$RETT ;[35]
N$SED2: $RETF ;[35]
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/>)]
;**;[22]At NEBSTR:+21L add 29 lines JCR 10/4/89
.OMSTA,,[ITEXT(<START message received from node ^N/S1/>)] ;[22]
.OMSHT,,[ITEXT(<SHUT message received from node ^N/S1/>)] ;[22]
.OMSET,,[ITEXT(<SET message received from node ^N/S1/>)] ;[22]
.OMPAU,,[ITEXT(<STOP message received from node ^N/S1/>)] ;[22]
.OMCON,,[ITEXT(<CONTINUE message received from node ^N/S1/>)] ;[22]
.OMSHC,,[ITEXT(<SHOW CONTROL FILE message received from node ^N/S1/>)] ;[22]
.OMREQ,,[ITEXT(<REQUEUE message received from node ^N/S1/>)] ;[22]
.OMCAN,,[ITEXT(<ABORT message received from node ^N/S1/>)] ;[22]
.OMFWS,,[ITEXT(<FORWARDSPACE message received from node ^N/S1/>)];[22]
.OMALI,,[ITEXT(<ALIGN message received from node ^N/S1/>)] ;[22]
.OMSUP,,[ITEXT(<SUPPRESS message received from node ^N/S1/>)] ;[22]
.OMSND,,[ITEXT(<SEND message received from node ^N/S1/>)] ;[22]
.OMBKS,,[ITEXT(<BACKSPACE message received from node ^N/S1/>)] ;[22]
.OMHLD,,[ITEXT(<HOLD message received from node ^N/S1/>)] ;[22]
.OMREL,,[ITEXT(<RELEASE message received from node ^N/S1/>)] ;[22]
.OMRTD,,[ITEXT(<ROUTE message received from node ^N/S1/>)] ;[22]
.OMDEL,,[ITEXT(<CANCEL message received from node ^N/S1/>)] ;[22]
.OMMOD,,[ITEXT(<MODIFY message received from node ^N/S1/>)] ;[22]
.OMENA,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[22]
.OMDIS,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[22]
.OMDEF,,[ITEXT(<DEFINE message received from node ^N/S1/>)] ;[22]
.OMDSP,,[ITEXT(<DN60 DISPLAY message received from node ^N/S1/>)];[22]
.OMNXT,,[ITEXT(<NEXT message received from node ^N/S1/>)] ;[22]
.OMELP,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[22]
.OMDLP,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[22]
.OMELT,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[22]
.OMDLT,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[22]
.OMEUP,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[22]
.OMDUP,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[22]
;**;[23]At NEBSTR:+51L add 12 lines JCR 11/29/89
.OMRSP,,[ITEXT(<RESPOND message received from node ^N/S1/>)] ;[23]
.ODENA,,[ITEXT(<ENABLE AVR message received from node ^N/S1/>)] ;[23]
.ODDIS,,[ITEXT(<DISABLE AVR message received from node ^N/S1/>)] ;[23]
.ODSDK,,[ITEXT(<SET DISK message received from node ^N/S1/>)] ;[23]
.ODSTP,,[ITEXT(<SET TAPE message received from node ^N/S1/>)] ;[23]
.ODSST,,[ITEXT(<SET STRUCTURE message received from node ^N/S1/>)];[23]
.ODUNL,,[ITEXT(<DISMOUNT TAPE message received from node ^N/S1/>)];[23]
.ODIDN,,[ITEXT(<IDENTIFY message received from node ^N/S1/>)];[23]
.ODDMT,,[ITEXT(<CANCEL MOUNT message received from node ^N/S1/>)];[23]
.ODSWI,,[ITEXT(<SWITCH message received from node ^N/S1/>)];[23]
.ODSPO,,[ITEXT(<SET PORT message received from node ^N/S1/>)];[23]
.ODUDS,,[ITEXT(<UNDEFINE message received from node ^N/S1/>)];[23]
;**;[26]At NEBSTR:+62L add 1 line JCR 2/1/90
.OMCLO,,[ITEXT(<CLOSE LOG message received from node ^N/S1/>)];[26]
;**;[27]At NEBSTR:+64L add 1 line JCR 2/14/90
.OMREP,,[ITEXT(<REPORT message received from node ^N/S1/>)];[27]
;**;[31]At NEBSTR:+66L add 8 lines JCR 2/22/90
.OMECS,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[31]
.OMDCS,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[31]
.OMEFI,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[31]
.OMDFI,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[31]
.OMELG,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[31]
.OMDLG,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[31]
.OMESO,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[31]
.OMDSO,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[31]
;**;[32]At NEBSTR:+77L add 3 lines JCR 4/27/90
.OMEBM,,[ITEXT(<ENABLE message received from node ^N/S1/>)] ;[32]
.OMDBM,,[ITEXT(<DISABLE message received from node ^N/S1/>)] ;[32]
.OMSBM,,[ITEXT(<SHOW BROADCAST-MESSAGES message received from node ^N/S1/>)] ;[32]
;**;[34]At NEBSTR:+81L add 2 lines PMM 6/3/90
.OMAKA,,[ITEXT(<DEFINE ALIAS message received from node ^N/S1/>)] ;[34]
.OMSAK,,[ITEXT(<SHOW ALIAS message received from node ^N/S1/>)] ;[34]
;**;[35]At NEBSTR+80L add 1 line JYCW 6/8/90
.OMSJB,,[ITEXT(<SET JOB message received from node ^N/S1/>)] ;[35]
.OMSOP,,[ITEXT(<SEND OPERATOR message received from node ^N/S1/>)] ;[35]
$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 ;[20]SHOW STATUS NETWORK-NODE
.NMSPN,,.OMSPN ;[20]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 ;[20]SHOW STATUS NETWORK-NODE
.OMSPN,,.NMSPN ;[20]SHOW PARAMETERS NETWORK-NODE
$ETAB
END