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 salesman do the calling).


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<CR>" and "CONNECT<CR>") 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.
[ editor's note: moved to [.games.ci]droids.exe... ]

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 not stopping
	the entire process; just the current image.  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, I think; anyway, my plane
	leaves for DECUS tomorrow, so you'll just have to take my best guess.

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 complex, including our plain-bond laser printer.
	However, LASER2.COM shows the basics of using ENPAGE.EXE when driving a
	letterhead/plain-bond printer combination.

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

	Ahem, well, uh . . . for anyone who saw the disappointing release of
	SYSTATUS4 that I allowed to get on the fall '85 tape, I apologize.  We
	didn't have version 4 running yet, and I tried to throw together
	something from our version 3 SYSTATUS without adequate testing.  I
	shouldn't have let it get on the tape; it's my fault.

	Anyway, here's SYSTATUS.  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 <CR>).  On-line
	help is available by typing the letter "H" while it is running.

We have SYSTATUS installed shared (or is it shareable; I never remember
which is which).  It needs WORLD privilege to look at other processes,
but it doesn't do anything to anybody.

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 don't recommend you
install SYSTATUS with ALTPRI (also don't 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.

SYSTATUS3.EXE

	This is 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.
