STATUS is a monitor/finger/whatever type program, which allows you to specify exactly what you want to see and how you want to see it. You can specify any GETJPI (or one of several GETSYI items) to be displayed (or selected upon), plus a few extras. See STATUS.HLP for more info. See WHO.COM for some general examples, SHOWSYS.COM for an example that looks quite like SHOW SYSTEM, and SHOWUSERS.COM for an example that looks quite like SHOW USERS. It has been written in such a way as to be easily modified, and added to. See the file MODIFY.DOC for more info on how. To use: Either edit STATUS.CLD so that the IMAGE clause points to where you are storing the image, or define a logical name STATUS to point to the image, or store the STATUS image in SYS$SYSTEM. Then you can either do SET COMMAND STATUS, or add it to the system command tables via SET COMMAND/TABLE=SYS$SHARE:DCLTABLES/OUT=SYS$SHARE:DCLTABLES STATUS. If you do the latter, be sure to reinstall the tables. From an appropriately privileged account execute STATUS.COM, which will start the DECnet server task (SERVER.EXE). You will then be able to use the STATUS command. To restrict use: If you don't want users to be able to see certain items, you can comment them out of KEYWORDS.DAT (or remove them entirely). Then run MAKE to recompile the program. Users will no longer be able to access those items. Simple eh? You don't have to be this drastic though.. Security has been enhanced. You can associate an access level for an item, and any client meeting (or exceeding) that level will be allowed to see it. The clients access level is set via the routines in SECURE.C, by default it is implemented as follows: The client node/username is used to index into the User database, if no record is found, then the client node is used to index into the node database, if no record is found then the client node is compared to the server node, if its the same, the level is set to 3, if not then the node is checked to see if it's a member of the cluster, if so, the level is set to 2, otherwise the level is set to 1. In KEYWORDS.DAT, the last number defines the access level for an item. By default all items are set to level 1. You might want to (for example) change all the items that return a privilege mask to be at level 4, then enable the User database and define a few users to have level 4 access. To manage: There are a few logical names you can define: STATUS_ORGANIZATION is a string which is returned for the ORGANIZATION item STATUS_TERMINALS determines where the terminal database is located STATUS_WHO determines where the personal name database is located STATUS_NODES determines where the node security database is located STATUS_USERS determines where the user security database is located There are a few databases that you can optionally create. The Terminal database, the Personal name database, the Node/User database, and the Node database. These are all simply indexed files with one key (which can be any size). You can use INDEXED.COM to create these files if you wish. The names for these files are defined in CONFIG.H and can be easily changed. More comments can be found in CONFIG.H. The defaults are as follows: The Terminal database: (by default this database is enabled for use) filename = "STATUS_TERMINALS" default-spec = "SYS$SYSTEM:.LOCATION" The key is the name of the terminal. This should look exactly like what WHERE returns when it doesn't find a record in the database. For example, "TTA0", "TXA0". Note that they are all uppercase, and the leading underscore and trailing colon have been removed. Terminal servers are supported, the key should be "server/port" where server is the name of the server, and port is the name of the port. Note that the "/" is necessary. The non-key portion of the record can contain whatever you wish to be displayed for the WHERE item. The key can contain trailing spaces. The Personal name database: (by default this database is not enabled for use) filename = "STATUS_WHO" default-spec = "SYS$SYSTEM:.NAMES" The key is a username. The non-key portion of the record can contain whatever you wish to be displayed for the WHO item. The Node database: (by default this database is not enabled for use) filename = "STATUS_NODES" default-spec = "SYS$SYSTEM:.LEVEL" The key is a nodename. The non-key portion of the record should contain the access level (0 means no access) for that node. Note that the record should contain a textual number (i.e. "0"), not a binary number (ie. a longword 0). The Node/User database: (by default this database is not enabled for use) filename = "STATUS_USERS" default-spec = "SYS$SYSTEM:.LEVEL" The key is "nodename/username". Note that the "\" is necessary. The non-key portion of the record should contain the access level (0 means no access) for that node/user. Note that the record should contain a textual number (i.e. "0"), not a binary number (i.e. a longword 0). Note that I have written a very meager program for working with these files, called MANAGE. You can use this to create and modify the databases if you like, or you can use INDEXED.COM to create the databases. The IMAGE item checks for RTPAD (set host command), and displays where the outgoing connection is being made. If you have CMU TCP/IP (version 6.2?) then the same will happen for TELNET and FTP. There is also a WHO item, which can do an indexed file lookup if you set one up, followed by a call to SYS$GETUAI to retrieve the Owner field out of the authorization file if it doesn't succeed in the indexed file lookup. It builds an internal tree so that it doesn't have to repeatedly call SYS$GETUAI (because it's SO ssllooww!). You might consider disabling the SYSUAF search if you use the owner field for something else. To do this edit CONFIG.H, changing the line "#define WHO_SYSUAF 1" to "#define WHO_SYSUAF 0" A MAKEFILE is included. If you do not have MAKE, you can execute the COMPILE.COM procedure. If you just need to relink, you can execute the LINK.COM procedure. Note that if you change KEYWORDS.DAT you will need to recompile almost everything. Future enhancements: Add support for the /SORT qualifier. Add a /HIGHLIGHT option for enabling highlighting of changed items in a continuous display. At the same time, add support for bolding/reverse/flashing/underlining in the text via ^b, ^r, ^f, ^u, and ^n (for normal). Allow any of these to occur anywhere, plus allow the highlighting option to set of these to use. Only GETJPI items will support highlighting. Support for other networks: TCP/IP, BITNET etc. Note: If you are linking with an older version of the C run time library you may not have the mem functions (memcpy, memmove, memset), if you don't, you can compile (and link with) MEM.MAR, which will provide similar functionality. These aren't functionally equivalent to the Unix or the VMS run time library versions, but they are close enough for my use of them..