UNIVERSAL SNDDEF - Definitions for Stanford SNDSRV terminal messages
       SUBTTL David Eppstein/DE/KSL/MRC/WHP4

       SEARCH MONSYM,MACSYM

       COMMENT \

                   Format of IPCF pages used by SNDSRV
                   ===================================

SN$HDR  On write contains SIXBIT function type.  Currently defined types:
               SNDALL - send to all logged in users
               SNDLIN - send to a specific line
               SNDUSR - send to all logged in jobs of a specific user
               SNDSTA - send statistics back to requestor
       On read, contains -1 if an error was encountered, zero otherwise.

SN$DAT  Contains a line number or usernumber as appropriate.

SN$FLG  Format flags specified by the requestor.  Currently defined flags:
               T%HDR  - the header has already been made, don't make another
               T%RSYS - obey REFUSE SYSTEM even if caller is a wheel
               (T%USER and T%RAFT defined but ignored by SNDSRV)

SN$ERR  On read contains an error code

SN$STR  On read contains the first word of a short ASCIZ error string
       corresponding to the error code in SN$ERR

SN$TTY  Unused on write.  On read, this word contains the number of ttys
       the server attempted to send messages too.  Succeeding words are
       of the form <state,,line number>, where state is one of
               -1  user was refusing messages
                0  message was successfully send
               +1  a timeout occured (the SOUT% was blocked too long)
               +2  the line was inactive (the SOUT% failed)

SN$MSG  The user's message (an ASCIZ string) starts at this location.

\

; Offsets and flags

       SN$HDR==0               ;SIXBIT function name
       SN$DAT==1               ;Data for function
       SN$FLG==2               ;User flags
       SN$ERR==3               ;Error code, if any
       SN$STR==4               ;Error string, if any
       SN$TTY==20              ;TTY list header
       SN$MSG==100             ;Start of user message


; Format flags specified in SN$FLG by current requestor

       T%USER==1B0             ;Turn on "user program" features:
                               ;if recipient has multiple tty type status
       T%RAFT==1B1             ;Obey REFUSE SYS after this message
                               ;(used by $SEND, ignored by SNDSRV)
       T%HDR==1B2              ;Header already supplied, don't make another
       T%RSYS==1B3             ;Obey REFUSE SYS always

; Error codes and strings returned in SN$ERR and SN$STR

DEFINE SNDERRS <
       X 000,TTXIEC,<SNDSRV confused!  Unknown error code>
       X 001,TTXCAP,<WHEEL or OPERATOR capabilities required>
       X 002,TTXUNK,<Unknown function code>
       X 003,TTXDET,<User has detached jobs only, use MAIL>
       X 004,TTXNLG,<User is not logged in, use MAIL>
       X 005,TTXUIR,<Unable to identify requesting job>
       X 006,TTXLNG,<Message too long to send>
       X 007,TTXREF,<User refusing messages>
       X 010,TTXIMP,<Function not yet implemented>
       X 011,TTXTIM,<Unable to send message, server timed out>
       X 012,TTXNSU,<No such user>
       X 013,TTXUSM,<Unable to send message>
       X 014,TTXNST,<No such terminal>
       X 015,TTXFIL,<Message sent, but could not append to sends file>
       X 016,TTXNBD,<Nobody logged in>
       X 017,TTXACT,<Receiving terminal is not in use>
       X 020,TTXNLI,<Must be logged in to do that>
       X 021,TTXBAT,<Can't send to a batch job>
       X 022,TTXIPC,<Failure in local send>
       X 023,TTXNET,<Failure in net send>
>


DEFINE X (VALUE,SYMBOL,STRING) <
       SYMBOL==VALUE
       IFG <VALUE-MAXTTX>,<MAXTTX==VALUE>
>
       MAXTTX==0
       SNDERRS                 ;Define values for each symbol

; Storage parameters shared by SEND/SNDSRV

       MAXCHR==^D3000          ;Maximum number of characters that can be sent

; Definitions for SNDMSG subroutine package

       RC%TYP==.LHALF          ;Type of recipient
       RC%NXT==.RHALF          ;Next link in recipient chain

       RC.TTY==0               ;Send to terminal (must be 0)
       RC.USR==1               ;Send to local user
       RC.ALL==2               ;Send to all local logged-in users
       RC.NET==3               ;Send to a net user

       .SDPID==0               ;Offset in argument block for sender PID
       .SDFLG==1               ;Flags for IP$FLG
       .SDTCC==2               ;Interrupt channel for TCP interrupt

; Useful macros

DEFINE MKPTR (AC) <             ;;Turn HRROI pointer into the real thing
       TLC AC,-1
       TLCN AC,-1
        HRLI AC,(POINT 7,)
>

       END