(Continued from page 2)
In a Native Mode MPE stack trace such as this the current
point of execution in the program is usually the top line, labelled NM
0. In this case we're sitting in the "block_current_process" routine. A
few lines below that at NM 5 we see "impede_process". This is definitely
an impeded process, but we knew that already!
Our main point of interest is to see what our program is doing, or
trying to do. Most of this stack trace, everything from line NM 12 and
above, happens to be system code, or operating system procedures. Line
NM 12 tells us that the program called the COMMAND intrinsic, and asked
the OS to execute an MPE command.
But due to the fact that Glance can't see the internal symbols of our
program, it therefore can't show us the procedure names, and we still
don't know what our program is doing. We could certainly narrow it down
by checking the source code for all the locations where we call the
COMMAND intrinsic, but there could be many, and we don't like guessing
games. So we were prepared to guide Steve through a somewhat tricky
procedure that would allow him to produce a stack trace that included
our program's internal procedure names.
Before we got to that, however, a couple of eagle-eyed members of our
tech support team noticed the "hxtellop" procedure buried in the middle
of the stack trace (at line NM b). This indicated to us that our program
had passed a TELLOP command to the COMMAND intrinsic, and was trying to
display some data to the system CONSOLE.
But what could cause a simple TELLOP message to become impeded? The only
answer which makes sense is that the CONSOLE itself was hung in some
fashion, and was not able to display messages. Therefore, any process
that attempted to write to the CONSOLE also became "hung".
We asked Steve to check his physical CONSOLE. Perhaps someone had halted
a listing with Ctrl-S and left it like that; or perhaps they had
started typing a command and didn't finish. Steve hit RETURN at the
CONSOLE and saw a flood of queued messages fly by. The system at once
returned to normal, and all impeded processes cleared up, including our
program. It wasn't our fault after all!
The root cause of the problem is that the MPE CONSOLE has a buffer of
limited size. When the CONSOLE, for whatever reason, is prevented from
displaying messages, the buffer can fill, which ultimately leads to
impeding any subsequent processes that attempt to write to it. The moral
of the story is that every MPE shop should include CONSOLE health as
part of its standard operating procedures.
In MPE/iX release 5.5 and above, users are able to print directly
to printers on their network equipped with JetDirect cards or print
servers; you'll configure HP or PCL compatible line printers as (pseudo)
spooled printers on the 3000 using a special config tool/command file
provided with MPE. A configuration file called "NPCONFIG.PUB.SYS"
contains control information for the actual printers - including their
IP addresses and TCP port numbers.
HP really wants you to use JetDirect print servers for TCP/IP
printing from your HP3000. The built-in network printing capability in
MPE/iX 5.5 officially "supports" only HP Jetdirect products. Part of
this requirement is the fact that the network printing solution makes
extensive use of the SNMP network status options that Jetdirect cards
support (most other network printing cards do not). A workaround when
using non-hp print servers is to add a "snmp_enabled=FALSE" setting to
the printer's entry in the NPCONFIG file.
To integrate the printer yourself do the following:
Step One - Create pseudo printer LDEV in SYSGEN
1. Make sure you are logged on as MANAGER.SYS and get the 'CONSOLE'.
2. Check that there are no recent changes to sysgen pending; if there
are, the changes should be evaluated for its effect on the HP3000 System
prior to making and invoking your own changes for network printing.
3. Enter
:RUN SYSGEN.PUB.SYS
4. At the sysgen prompt (>), enter io to start the I/O configurator.
5. Define the logical device identification for each network printer
that you want to add. To use the default configuration values, specify
HPTCPJD as the device identification and designate the path as NONE.
(Continued on page 5)