mark@NTSC-74.ARPA ("Mark Layton") (11/06/86)
I've finally given up trying to find an answer to this problem on
my own. I got tired of having my edit sessions interrupted by users
sending messages to my terminal (via a program installed with privilege
to broadcast to other terminals). So I wrote a program , largely lifted
from the FORTRAN programmer's reference manual, to trap these messages
and log them to a file. I $SPAWNED a subprocess in my login.com file
to run this program. So far, so good. It worked just fine. However, some
very strange side effects have resulted. If I do a HELP command which
requires more than one screen to display (FORTRAN for example) HELP
prints the message "Press return to continue". When I do, I get the
fatal error message "%RMS-F-USZ, invalid user buffer size" . Also, If
I attempt to spawn a subprocess, I get the message "%DCL-E-TRMMBX, terminal
has associated mailbox - terminate image and then spawn". And finally,
when I try a SET HOST, I get the message "%SYSTEM-F-DEVACTIVE, device is
active". If I stop the process which is running the broadcast trapper,
everything returns to normal.
As far as I can determine, this is all the fault of the SMG routine
SMG$SET_BROADCAST_TRAPPING. If I remove the call to this routine from my
program, everything is fine. Of course, then there's no point to having
the program. My guess is that SMG$SET_BROADCAST_TRAPPING somehow sets up a
mailbox which is attached to the terminal and that VMS uses SYS$BRDCST to
do lots of stuff which expects to be going to a terminal, not a mailbox.
Hence the problems. I'm running on a VAX-11/785 under VMS 4.2. I talked
to three VMS developers about this at the Spring DECUS in Dallas and they
just pointed fingers at each other (RMS --> RTL, EXECUTIVE <-- RTL, etc. ).
Any help will be greatly appreciated. Thanks in advance.
Mark Layton
Computer Scientist
Naval Training Systems Center
Code 741
Orlando, FL 32792
Phone: 305-646-4491
Autovon: 791-4491
ARPA: mark@ntsc-74
P.S. For the heck of it, I'm including my program below.
implicit none
integer*4 status,
2 pbid,
2 smg$create_pasteboard,
2 smg$set_broadcast_trapping,
2 sys$hiber
common /id/ pbid
external brkthru_routine
status=smg$create_pasteboard(pbid,,,,1)
if (.not. status) call lib$signal(%val(status))
status= smg$set_broadcast_trapping(pbid,brkthru_routine)
if (.not. status) call lib$signal(%val(status))
status=sys$hiber()
call exit
end
subroutine brkthru_routine()
implicit none
integer*4 status,pbid,smg$get_broadcast_message
character*256 message
integer*2 message_size
common /id/ pbid
status=smg$get_broadcast_message(pbid, message, message_size)
if(.not. status) call lib$signal(%val(status))
if( index(message,char(13)//char(10)) .ne. 0 ) then
20 open(unit=2,file='send.log',status='unknown',access='append',
1 recl=256,err=20)
write(2,'(1x,a/)') message(1:message_size)
close(2)
end if
end
------
------