SUBMISSION: VARIOUS SOFTWARE ITEMS FROM COMPASSION INTERNATIONAL Submitted by: Ken Richardson Compassion International PO Box 7000 Colorado Springs, CO 80933 (303) 594-9900 This software is made available to the public with no warranties, guarantees, or liability for its use or any consequences thereof. After all, it's free. However, I wouldn't submit it if I didn't think it worked correctly. And the code written at our site tends to be well-structured, efficient, clean, and debugged. If you have any questions or comments, you can find me at the address or phone number listed above. I'd cheerfully discuss any questions or comments you may have. However, I'm not easy to get by phone, nor am I likely to return a call if there's no message; (I'd assume it was a sales call, and I always let salesmen do the calling). This submission contains my "standard" DECUS contribution. Many of the items have been upgraded since the last Fall DECUS tape. A few have not. CLOSE_VMS_ACCT.COM We use this command procedure to close our VMS accounting files every month. This facilitates usage analysis and archiving of accounting data by month. Nothing fancy, but if you don't have it, here it is. COUNTREC.EXE I got tired of copying files to the null device in order to find out how many records they contain (copy/log file.dat nl:), which can be quite slow and resource-intensive with large files, so I wrote this simple record-counting program. If you define it as a foreign command, you can specify the input file on the command line. Otherwise, it prompts you. COUNT_RECORDS.COM This procedure allows wild-carded counting with COUNTREC.EXE. We have a COUNT command defined as @CI$COMMAND:COUNT_RECORDS.COM, which lets us type "COUNT filespec" to count records in a bunch of files. DIALUPINI.EXE We use US-ROBOTICS hayes-compatible modems on our dialups (the kind that use the AT command set). They work fine, and we use the same lines both for dialing in and for dialing out (I only mention that because I saw someone complain in the pageswapper that you can't do it). However, when the modems power up, they default to sending useful information to VMS (like "RING" and "CONNECT") every time someone dials in. The only problem is that VMS doesn't find it all that useful. So we run DIALUPINI.EXE to tell the modems not to be quite so useful; they're much more useful that way. DIALUPINI.EXE expects a logical name (DIALUP) to point to the port that needs to be reset, and it expects you to already have allocated the port and set the appropriate speed (assuming you are using autobaud on the port). You might need a privilege to allocate the dialup port, depending on how your ports and system parameters are set. I think it's SYSPRV. For more info about DIALUPINI.EXE, see INIT_DIALUPS.COM. DROIDS.EXE This game lets you get chased by robots on a 24x40 field. Only in a weak moment will I confess who wrote it. (I'm also not telling which language it's written in; no, it's not BASIC.) However, it runs quite efficiently, using only one QIO per screen update and one per input. It requires write access to a ci$games directory, which is where it stores the "droids champions" list (droids.dat). If more than one player will be using the same droids.dat file, you need to SET FILE/PROT=W:RW to the file after the first player creates it. ENPAGE.DOC This documentation file describes the ENPAGE utility to some non-zero degree. For more info, see ENPAGE.EXE or read ENPAGE.DOC. (I just realized that I'm documenting documentation. This might be the first meta-documentation that I've ever written.) ENPAGE.EXE When we got our nifty new LN03 laser printers, we needed a way to put all that power in the hands of our office staff. ENPAGE is how we did it. In naming ENPAGE, I was inspired by the writer of that venerable and ever-useful ENTAB utility, which we use extensively for on-line reports. ENPAGE reformats a text document, adjusting margins (left, right, top, & bottom), pitch (both vertical & horizontal), orientation (portrait or landscape), point-size, and stuff like that. It compensates for imbedded tabs regardless of the left margin you specify. If you've never encountered that problem, please ignore the previous sentence. For people who write letters, ENPAGE can optionally output the first page separately from the rest of the document (we have a dedicated letterhead printer). ENPAGE output can be directed either to devices or to files. ENPAGE output is suitable primarily for LN03 laser printers (it inserts LN03 control sequences into the results). To use the output on some other printer, you'd probably have to edit the device control sequences out of the first and last lines of the output files. FORCEX.EXE Have you ever had a program get into an infinite loop? Well, neither have I, but just in case it ever happens, this program will exercise the VMS system services just enough to list out all the processes on the system and ask you if you want to force-exit any of them. It's not any fantastic new discovery, but it does have the advantage of stopping just the current image rather than the entire process. The process returns to the $ if it's interactive, or to the next line in the command procedure if it's batch. FORCEX requires WORLD privilege, GROUP privilege, or the same username, depending on the target process. INIT_DIALUPS.COM We have three dialup lines; they are known by system-wide logicals ci$dialup_1, ci$dialup_2, and ci$dialup_3. We initialize the modems on those lines during system startup and once per hour (in case someone has been using a modem and left it an a non-standard condition). The INIT_DIALUPS.COM command procedure looks for all devices pointed to by ci$dialup_n. For each such unallocated device, INIT_DIALUPS.COM allocates the device, sets the speed, initializes the modem (using DIALUPINI.EXE), and deallocates the device. LASER2.COM This is the procedure that drives the ENPAGE utility. Actually, at our site we have another procedure that provides novice users with somewhat simple access to rather sophisticated printer characteristics on several printers throughout the office, including our plain-bond laser printer. However, LASER2.COM shows the basics of using ENPAGE.EXE when driving a letterhead/plain-bond printer combination. LOCK_TERMINAL.EXE This is a simple program that accepts and verifies a password, then locks your terminal until you type the password again. Useful for leaving an account logged in while you go away for a couple of minutes. It traps CONTROL-C and CONTROL-Y. However, if you are logged-in remotely using $SET HOST, CONTROL-Y could still be used by a malicious user to return to your original process on the local node. For this reason, I use it mainly on local nodes. REMINDPRT.COM This is a simple command procedure to provide access to REMINDPRT.EXE. REMINDPRT.EXE Are you using the REMINDER utility that has been on recent DECUS tapes? (If so, there's a rumor that you'd better patch out the timebomb that limits the useful life of REMINDER to about one year). Well, we needed more flexibility in printing out reminders, so we wrote a program to print simple calendars from the reminder file. No REMINDER user should be without it. Output goes to CI$OUTPUT. REMRESCHD.EXE One of the annoying things about REMINDER is that it deletes old reminders automatically, even if you never got to see it. Well, every night right after midnight I run REMRESCHD.EXE to reschedule old reminders up to today. That way REMINDER becomes a to-do list that won't let me forget a reminder unless I explicitly delete it. Caution: If your login.com automatically displays your reminders ($REMIND ME) like mine does, you need to jump over that line when f$mode is "BATCH" so your midnight rescheduling job can run REMRESCHD on your reminder file before REMINDER gets to it. SYSTATUS.EXE Here's SYSTATUS version 4.7. It's a somewhat flexible system status monitor. We'd be lost without it. To use it, you just type RUN SYSTATUS at the $. All commands are one-character (no ). On-line help is available by typing the letter "H" while it is running. Changes since version 4.4 (on the Fall '86 DECUS tape): Automatic sensing of your terminal width and height. If your terminal is in 132-column mode, you get more info than in 80-column mode. If you have a terminal with more or fewer than 24 lines, the display will scroll correctly. This all assumes that you have done a $SET TERMINAL/WIDTH=n/PAGE=n type of command. At program initialization, an internal table of process info is initialized more efficiently than before. This is done by relying on the maximum process count that you have specified in SYSGEN. The highest MAXPROCESSCNT that SYSTATUS can handle is 256. The ability to process commands before displaying the first screen of info. One way that I use this feature is when I dial into the system and just want to see the "active" processes (command "A"). By typing the "A" before the first screen of info, I avoid seeing the other umpteen inactive processes at 1200 baud. New DEBUG messages. You won't ever see them unless you toggle debug mode on. I rarely do. If SYSTATUS can't display its buffer with one QIO, it tells you why and exits. It used to ignore the problem. The reason for the QIO failure is usually EXQUOTA. This can be corrected by increasing the SYSGEN parameter MAXBUF, which I have set at something like 6000 for our systems. The ability to get a clean display of your own processes without GROUP or WORLD privilege. Also, the ability to display other processes in your group with GROUP privilege. Originally, SYSTATUS was designed to require WORLD privilege for a clean display. New PAGEFILE/SWAPFILE/NODE info. Also, a new "P" command to toggle this info on/off. We have SYSTATUS installed shared. It needs GROUP or WORLD privilege to look at processes other than your own. We install it without these, so that only users with these privileges can watch other users' processes. If you also give it ALTPRI, it temporarily boosts its own priority to 16 during each brief data-collection interval, thus improving the accuracy of the results. It disables control-y before boosting the priority, and restores the previous state of control-y (usually enabled) after dropping back down to the original base priority. If you're running any realtime stuff on your system at priority 16, I suppose you wouldn't want to install SYSTATUS with ALTPRI (nor run it from an account with ALTPRI turned on). For the other 99% of VAX sites, I do recommend that you install it with ALTPRI for the most accurate results. SYSTATUS3.EXE This is an older version of SYSTATUS for VMS version 3. VMSDOWN.COM VMSDOWNUP.COM We run a fairly secure site. For example, the computer operators don't have many privileges. They do backups from a captive account. They can't read system backup tapes without a special captive account that restores files back where they came from originally. And as a side effect of this kind of security, they can't take VMS down. (Actually, this is a side effect of the granularity of privileges granted by VMS privilege bits, but that's another story.) However, I want my underprivileged operators to be able to take VMS down, or to take VMS down and bring it right back up. This is useful when I've changed a system parameter during prime-time and I want it to take effect ASAP, but the first window for downtime is after my bedtime. VMSDOWN.COM and VMSDOWNUP.COM satisfy this need. They are submitted to a batch queue on hold (submit/hold), and the operator releases them when it is convenient (set queue/entry=#/release). USING COMPASSION INTERNATIONAL SOFTWARE If you use any of the software in this submission, you will probably need to edit our command procedures or define logical names to account for the conventions that we use at Compassion. The items you will probably need to change or define include: LOGICAL NAMES: ci$command The directory that holds our local command procedures. ci$dialup_n The dialup ports at our site (n = 1, 2, 3, etc.). ci$games The directory that holds games and related files. ci$images The directory that holds our local images. ci$input The primary input device for a program. ci$output The primary output device for a program. ci$output_2 The secondary output device for a program. ci$workfiles The intermediate directory commonly used at our site. QUEUE NAMES: laser$print_1 The name of our plain-bond print queue. laser$print_2 The name of our letterhead print queue. FORM NAMES: letter1 The form type normally mounted on laser$print_2. plain_bond The form type normally mounted on laser$print_1.