Updating the Tops-20 Finger client was simple enough, a table entry for DECnet and a small routine to build the JFN string, viz:

FINGER>@mim
[Fork FINGER opening DCN:MIM-117 for reading, writing]
 18:40:07 FINGER IO wait at FNGPRT+23  Used 0:00:09.5 in 481:11:26, Load   0.04
RSX-11M-PLUS system MIM. Tue Jun 18 00:40:08 2024. Up: 2 days, 22:09.

                                                                     Luser          Real name                 Term    Idle Logged in
                                                                                                                                    B
ILLQUIST      Johnny Billquist          TT10:     2d 15 Jun 02:31
                                                                 BILLQUIST      Johnny Billquist          TT14:   2:03 17 Jun 21:20

FINGER>

Ultra-cool!!

It would appear that there is no carriage return before the line feed.  For the TCP version of finger, you are conforming to the TELNET standard, which wants CR - LF, not simple LF.  As I recall, the Tops-20 DECnet finger server would do the same thing as that is what the client does (recall that it is in a fork and has no idea of what it might be talking to)


On 6/17/24 5:36 PM, Thomas DeBellis wrote:

Actually Tops-20 finger does functions exactly the same whether you are local or network; that is, a line of text is parsed from primary input (.PRIIN) and the resulting output is typed on the terminal or primary output (.PRIOU).  What happens in the network case is that the backing JFN's for .PRIIN and .PRIOU are changed from the controlling terminal (I.E., .CTTRM) to the network JFN with the SPJFN% JSYS.

When running as such in 'server mode', Finger has no idea of what is going on.  It literally can not tell the difference in input source unless it does some terminal specific things, which it largely doesn't do.  This is how the NETSRV daemon implements the Finger TCP service.

Similarly, when finger is run as a client and asks for a network connection, the protocol is deduced by a table lookup and the line it has is simply shoved over the connection.  The only difference is in the syntax for the constructed JFN.  Code exists for TCP and Pup and it's simple enough to put in a DECnet entry.  I might do that to try it out.


Regarding Batch, it would be difficult to imagine a valid use case for IDLE%.  CPU time is probably fine as it takes processor time to consume characters.  That being said, it's possible that you could have a background task that pops every so often to do some minor thing while the main fork could be wedged.  It all seems a little contrived.

I bring it up because the Tops-20 pseudo-terminal implementation is accurate enough so that I can test certain arcane features such as parity with Kermit-20.  When I use Kermit-20 to establish a local connection over a PTY, it works fine, viz:

 User    Personal name       Job Subsys  Idle TTY Console location
SLOGIN   Thomas DeBellis       8 EMACS   1:21  44 iSnack.Laurel: Development, Large
                      -->     10 FINGER        46 iSnack.Laurel: Secondary Testing, Kermit-20
                      -->     12 EXEC      14. 21 Job 10, SLOGIN, FINGER

You can see that I haven't typed anything into job 12 for fourteen minutes since I pushed to an EXEC to run the finger.

This doesn't happen with the Batch controller, so I've wondered what it might be doing that clears idle.


On 6/17/24 3:57 PM, Johnny Billquist wrote:
On 2024-06-17 21:37, Thomas DeBellis wrote:
The finger server simply listened on a particularly port and when a connect was accepted, it was handed off to a fork with finger mapped and the primary I/O JFN's were set to the network connection.  I don'tsee that it is on the PANDA distribution, but it's an easy thing to write.

From a DECnet perspective it's definitely easy. Connection estavlished, client sends one line in the same format as the command line, server responds, just like if you'd get a line and process locally.

I would expect that either the TOPS-20 version also does things slightly differently for DECnet than local, or else it's not compatible with the RSX (and I assume VMS) version.

For a local processing, the command line is provided as a part of starting the process, while over DECnet it will need to read a command line from the DECnet connection. But from there on, it's pretty much the same story either way.

As I recall, it doesn't quite work right with a batch job, but since there is nobody there, this doesn't really matter.  Idle time in that case is detected by CPU consumption.

Idle for batch jobs would be weird. As soone as one thing is completed, the next thing should be started. Where would any idle time be? Unless there is something like a sleep at the CLI prompt level.

  Johnny