!TITLE Writing to the OPER Console
!
! These four procedures allow a process to communicate with the
! operator's console (OPER).
!<DOPER
externalroutine  DOPER(integer  CONSOLE, string (255)S)
!
! This writes the string S to Dirlog and to the OPER.  CONSOLE is not
! used and should be set to zero.
!>
      WRSS("OPER: ", S)
      OPER(0, S)
END ; ! DOPER
!
!-----------------------------------------------------------------------
!
!<DOPERPROMPT
externalroutine  DOPER PROMPT(integer  CNSL, string (255)S)
!
! This procedure is used when an interactive process is started from an
! OPER
!>
   RECORD  (PARMF)P
      P = 0
      P_DEST = X'00320008' ! ((CNSL&X'FF')<<8)
      P_S <- S
      DPONI(P)
END ; ! DOPER PROMPT
!
!-----------------------------------------------------------------------
!
EXTERNALROUTINE  DOPER2(STRING (255)S)
      DOPER(0, S)
END ; ! DOPER2
!
!-----------------------------------------------------------------------
!
!<DOPERR
externalroutine  DOPERR(string (23)TXT, integer  FN, RES)
!
! This procedure is used to write a short error message to the OPER
! console.  FN is used to select a value from the list of names below and
! the text written is of the form:
!
!      TXT sp NAME(FN) sp RES
!
CONSTINTEGER  TOP = 15
CONSTSTRING (4)ARRAY  NAME(1:TOP) = C 
{..1}"CRTE",
{..2}"CONN",
{..3}"PERM",
{..4}"DSFI",
{..5}"DSCN",
{..6}"STOP",
{..7}"GTDA",
{..8}"DFST",
{..9}"RNAM",
{.10}"SPOL",
{.11}"XFER",
{.12}"DNDA",
{.13}"CNDA",
{.14}"GFND",
{.15}"DSTR"
!>
STRING (23)S
      S = TXT
      IF  1 <= FN <= TOP C 
      THEN  S <- S." ".NAME(FN)
      S <- S." ".ITOS(RES) IF  RES >= 0
      DOPER2(S)
END ; ! DOPERR
!
!-----------------------------------------------------------------------
!
!<OPER
systemroutine  OPER(integer  CONSOLE, string (255)S)
!
! This procedure causes the text string S to be displayed on logical
! Oper console number CONSOLE (taking as many lines of scrolled Oper
! output as necessary).
!>
RECORD (PARMF)NAME  P
INTEGER  L
      P == RECORD(OUTPAD)
!
      CYCLE 
         P = 0
         P_DEST = X'320007' ! ((CONSOLE & 7) << 8)
         P_S <- S
         *OUT_6; ! LIKE DPON BUT WITHOUT SPOILING LOUTP
         L = LENGTH(S) - 23
         RETURN  UNLESS  L > 0
         LENGTH(S) = L
         MOVE(L, ADDR(S)+24, ADDR(S)+1)
      REPEAT 
END ; ! OPER
!
!-------------------end-of-included-text---------------------------------
!