New and modified material from KMS Fusion:

The following is not guaranteed in any way.  All the rights to
the source code are owned by KMS Fusion, Inc.  Anyone may use the
programs, but not for resale, and please include a copywrite notice
from Robert Hays, KMS Fusion, Inc., 1986 and from any other original
authors as noted in the code comments.

The subdirectories on this tape are:

[344,1] -	Various stuff, many SLP files, etc.
[344,2] -	CHCKPM
[344,3] -	Small library of subroutines.
[344,4] -	SBT, code to submit print jobs to a VAX
[344,5] -	MOVE, a SET DEFAULT program in FORTRAN
[344,6] -	RPTBLD, a command file to create RPT reports

[344,1]IDLE --

	The January, 1987 Multi-tasker ran an article on Idle Loop Lights
	for PDP-11/84s.  There may be a better way....

	When the 11/84 arrived, Jim Downward and I read through the 11/84
	owners manual (or whatever its called).  It turns out that the value
	displayed on the front panel is the octal value from the byte
	at address 177524, the Display register.  The following code fragment
	increments this register every 25 ticks.  You can reset the values
	for the MRKT$S call as you want.  The Macro code, written by Jim
	Downward, follows:

	.mcall	MRKT$S,WTSE$S
DspReg=177524
START:
	MOV	#77,R0
10$:	MOVB	R0,@#DspReg
	MRKT$S	#1,#25,#1
	WTSE$S	#1
	SOB	R0,10$
	BR	Start
	.END START

	Note that your service people may not like you playing with their
	(huh??? Didn't we pay for this box...) diagnostic display.

	This seems like an easier way to do it than patching SYSXT and
	reGENning the system.

[344,1]DVCDAT --

	DVCDAT dumps V3.0A, B, C, and D device data bases.  This is a
	modification of an old utility written by J. Neeland.  Please
	note that, due to the use of certain Files-11 utilities in the
	code, the program is not vectorable yet.  Also, the program works
	off of fixed length offsets and addresses;  if the device data
	bases change a bit, the program will not work.  It would be nice
	if it were written with DEC-defined named offsets instead....

	To build DVCDAT, make sure that SY: is locally pointing to the
	location of DVCDAT.MAC and DVCDAT.CMD, and make sure that
	LB:[1,24]MCR.OLB is around, and just invoke @DVCDAT.

	To use, copy DVCDAT.TSK to your local library UIC and just
	type either:

	> DVC

	- or -

	> DVC device:

	where device: is the device whose data base you want to see.

[344,1]CKPVEC --

	This is a modification of a program written by Jim Downward, I
	think, but I cannot be sure;  there is no author mentioned in my
	source version.  This version runs on V3.0B, C, and D
	systems, and the task image is vectored, so that you should
	be able to use the task image on any 3.0 system.  Of course, I will
	not guarantee this...  I have copied the task from a 3.0B system to
	a 3.0C and D system successfully.

	A major change in RSX-11/M-PLUS V 2 or 3, I don't know which,
	was to checkpoint subpartitions, not tasks.  Therefore, instead of
	pointing to the task header before calling the system routine
	to checkpoint an image, you point to the partition header.

	To build, just point SY: to the source UIC and invoke @CKPVEC.

	Copy CKPVEC.TSK to the library UIC and then, perhaps, include the
	following lines in your STARTUP.CMD file:

	.IFNINS CKP... INS $CKPVEC/TASK=CKP...
	RUN CKP... 0/RSI=20M

	This will clear out high memory at this point and will reschedule
	the task to clean out dead wood every 20 minutes.  Make sure that
	your STARTUP.CMD file has used ACS to set up checkpoint space
	before running CKPVEC!  The resulting mess if you don't is quite
	interesting from an S/M point of view....

	We run the program initially in the startup file so that AT. is
	forced into low memory, allowing partition setting and loading of
	drivers, etc. into high memory contiguously.  Of course, DECs answer
	is buy more memory, but this is cheaper and more consistent....

	For those of you interested, I've also included CKP that
	works on V3.0B but is not vectored.

	For those interested, see the release notes for more information
	on vectoring tasks.  BE CAREFUL, THOUGH, as not all symbols are
	defined in the RSXVEC.STB file.

[344,5]OLDMOVE.CMD --

	For those of you with CCL and V3.0, MOVE.CMD uses MCR and Indirect
	commands to parse a command of the form:

	>MOV string

	into device and/or UIC, and will set SY: to the device given,
	if one is entered, and the UIC to the UIC given, if any.  No
	support is given for named directories, but if someone is
	enterprising...  Also, if a command is entered with a number
	and a comma, such as:

	>MOV 5,

	- or -

	>MOV ,5

	the user UIC or group UIC is changed only.  Logical names are
	translated.

	Include in your SYSCCL.CCL file the following:

	$3400MOVE
	*@LB:[1,5]OLDMOVE %A%

[344,5]MOVE --

	After writing OLDMOVE.CMD, I desired something that finished executing
	today.  Therefore, I wrote a FORTRAN equivalent.  Well, almost.

	The code checks for a mounted device, and it will mount it
	/OVR/LOCK=N if the device is not mounted.  The subroutine CHKMOU
	performs this which is called by CHKDEV.  If the user
	is not privileged, the device is not mounted.  You can edit this
	one up if you don't want to mount devices, or desire a differant
	set of switches.  There is a character constant and integer length
	defining the switch string.  See the inline comments.

	Also, $ and HOME take you back to your login UIC and device and
	. or PRE take you back to your last UIC and device.  The logical
	name KMS$LAST and KMS$CURRENT are defined by MOVE as your last and
	current locations, respectively.  I will replace the $ with _ when
	DEC decides how underscores should be dealt with;  right now its
	not too good an idea to use underscores....  NOTE:  if you don't log
	your console off after startup, the $ cannot work, since SYS$LOGIN
	is not defined for that terminal.

	Also added the * item, which lists UICs from the master file directory,
	prompting to set default there one at a time.

	An informational message, %DEF-I-NOEXIST, Directory does not exist,
	is displayed if the destination does not exist.  If you don't want
	to change directory in this case, modify the code at the call to
	MCRCMD to change UIC in MOVE.FTN.  To defeat the message and gain
	speed, comment out the call to DIRUIC in CHKUIC and set EXISTS to
	logical value .TRUE..

	MOVEBLD.CMD rebuilds MOVE.TSK.  The default name for the task is
	...DEF.  The command file can automatically install this if you
	uncomment the lines near the end of the command file.

	If you have CCL, you might try setting the following:

	$1700DEFAULT
	*DEF %A%

	This way D will display your default directory if you slip the MCR
	dispatcher (see later)....  Otherwise just install it as ...DEF or
	whatever you like.

[344,2]CHCKPM -

	After seeing a notice on December 16 that our system would be
	down for PM on November 18, I decided to try to decrease the
	margin for error in PM notices on our systems.

	This program uses the following files:

		KMS$COMMAND:PM.TXT
		KMS$COMMAND:NOTICE.TXT
		KMS$COMMAND:DATTIM.DAT

	to insert and delete a PM notice for user logins.  The format for
	the DATTIM file is:

		dd-mmm-yy hh:mm

	for as many dates and times as you have.  The program goes down the
	list and sees if any are within 7 days of the current day.  If so,
	the file NOTICE.TXT is checked for the string PM NOTICE:, and if the
	string is not found, appends PM.TXT, inserting the date and time from
	DATTIM.DAT into the symbols <TIM> and <DATExxx> in PM.TXT.  This file
	has not been tested at the end of year or end of century fully, so
	be careful.

	You would need to edit your SYSLOGIN.CMD file to type out the
	notice file.  Notes on SYSLOGIN.CMD can be found in the SYSGEN
	manual under pre-genned kits or what to do when you are done and
	before the first beer at the bar....

	This program would run each morning at say 3 AM.  This way, resources
	aren't tied up, and the checks are done.  If your PMs are always
	done in the morning, you could schedule it to run every 12 hours
	and your notice will disappear sometime during the day.  I'm working
	on a better version for the VAX;  if you're interested, let me know
	what YOU would like it to do....  I won't promise inclusion of ideas,
	but I will listen and think about it.

	Warning: I just found out that CHCKPM is NOT correct, and I don't have
	time to fix it now.  It seems to fail checking the month vs. the
	day.  If anyone wants to, go for it, otherwise, when I get to it,
	I will fix it.

[344,1]CHK.MAC -

	This is built on a task assigned at DEC's RSX Internals class.
	It just lists checkpointed tasks by name.  It would probably be
	easy to vector....

[344,4]SBT --

	This is a FORTRAN program that uses DECnet-RSX calls to communicate
	with a VMS command file and program to print files on the remote
	node.  The non-privileged DECnet account user name and password
	must be coded into the communication subroutine.  The files
	PRNTER.COM and PRNTER.EXE(FORTRAN source provided) are needed on
	the VAX side.  We use
	the NCP SET OBJECT command on the VAX to reset our target task
	object to a directory differant than the non-privileged one.
	This gets around needing to know the password and username for
	FTSing files and assuring deletion at the remote VMS node.
	Also, if you've never used DECnet calls, check it out;  its not
	impossible, but tranparent DECnet (see VMS) is soooooo much better.

[344,1]SYSBRU --

	This is a modification of the BRU.CMD file by T. Wyant on the Spring
	1985 tape.  I have added default devices and an automatic label
	creator (which only works with DECwriters currently).

	You will need to build LABEL to use the labelling facility.  I have
	included a version, modified from the Spring 1985 tape, that has
	been editted so that it builds on any RSX-11/M+ system and cannot
	write over device labels.  The hooks remain for the original
	code (I commented a bunch of stuff out...).

[344,6]RPTBLD --

	A command file to interface to RPT.  It prompts for the format,
	device, and date range for the RPT call, and then stops ELI
	from logging errors, executes RPT, and can delete the LOG.ERR
	files if desired and restart ELI logging.  I did this because,
	in my infinite disability, I cannot remember to restart ELI,
	I can't remember the RPT switches, and I like to kill off old
	.ERR files occasionally.  It uses the default file created by
	the APPNDFILE command file unless you edit the RPTBLD command file
	and change the initial setting of INFILE.

	RPTBLD uses the files created by APPNDFILE for searches in the past.

[344,1]APPNDFILE.CMD and APPNDSUB.BAT --

	APPNDFILE.CMD will merge your accounting and error logging files
	to a destination directory.  APPNDSUB.BAT is a batch file that
	executes APPNDFILE, waits 3 minutes, and then resubmits itself
	for 23:58.  We use the following commands for doing this in 
	our STARTUP.CMD file:

	.SETT QueStr
	@LB:[1,5]KMSQMGSRT.CMD			! Start the queue manager.
	.IF <EXSTAT> = <SUCCES> .GOTO DONE
.;
.; An error was encountered in starting the Queue Manager and
.; associated tasks. Nest to the Queue Manager stop proceedure
.; to back out of the startup.
.;
	.DISABLE QUIET
	;
	; The queue manager could not be started properly, and
	; it is being removed.  Please see Bob Hays, X458.
	;
	.ENABLE QUIET
	.SETF QueStr				! Set queue start error flag.
	@LB:[1,5]KMSQMGSTP.CMD			! Shut queues on error.
.DONE:
.;
.; RLH09 -- Start up accounting and error logging merge file routine on
.;          the batch queue.
.;
	.IFF QueStr .GOTO NoBat			! Skip on queue start error.
	.SETS uictmp <uic>			! Save current UIC.
	SET /UIC=[1,6]				! Move to [1,6], keep running
.;						! it there.
	QUE BATCH:APPNDF/DEL			! If one is there, zap it.
	SUB APPNDF/AF:23:58=LB:[1,5]APPNDSUB.BAT ! Submit job.
	SET /UIC='uictmp'			! Go back where ya came from.
.NoBat:

	Notice that you should only submit the job if the queues start.
	Please read the command files first to recognize needed logicals.
	Also note that the UIC selected should be a privileged UIC and
	should only be used for this purpose, I think.

OTHER NOTES:

	The SLP files for SHT.MAC, AUXSUB.MAC and VTLSUB.MAC should allow
	correct use of VT2xx terminals.

	Also, a modification of the MCR dispatcher courtesy of Tony Scandorra.
	If the enclosed file MCRDIS.SLP is applied to the updated version
	of the RSX-11/M-PLUS V 3.0D kit, it should allow fewer than three
	character commands to pass to the catch-all task.  Tony came up with
	the patch;  I thought others might want to try it, as it is soooo nice.

	In all SLP cases above, rename the virgin source file .VGN.  A .MAC
	file will be created by SLP.  Then assemble and build the tasks.
	Remember, in the case of MCRDIS, that you must re-VMR your system
	for the new MCR... task, and FIX it, also.  If you don't FIX it,
	you're system will boot and go to never, never land ( I wonder how
	he found that one out... ).

	Modified VT200SET also, so that it checks the TI: terminal type
	for a VT2xx.  Very helpful for people with Tektronix, GraphOn,
	and other assorted terminals in-house and in-use.  I've included
	a new copy of the source macro program and a build file that works
	at our site.

	There are two modules I've modified (hacked) for AUX:

		AUXIO and AUXKEY

	The changes allow VT2xx function key definition.  The bad news is
	that you cannot hold down the right and left arrow keys any more.
	The IO system in AUX might require a rewrite to allow for the longer
	length of function escape sequences, and I don't want to take that
	on, as I find the cursor key restriction not as bad...

Some general and perhaps useless notes on M-PLUS 3.0*:

	1)	Extended logical names are really neat in M-PLUS.
		If you have a VMS environment, you can almost make
		folks feel at home on the PDP.  However, all tasks
		do not yet work with extended logicals, and the afor-
		mentioned underscore problem is not resolved.  Some
		way of controlling extended logicals, like company
		identifier-underscore-logical, is needed.  Perhaps
		our RSX NLO should get involved....

	2)	Read and use disk caching.  Your disk accesses will
		speed up IF you use sequential files OR you access
		random access files sequentially most of the time.
		Directory lists will go faster.  And, it seems to work well
		IF you follow the directions in the system management manual
		and the release notes VERY carefully.

	3)	The GIN directive, while not supported, must be used to
		vector tasks.  Much of the functions in GIN would be highly
		useful from other programming languages.  I think DEC should
		consider supporting and documenting GIN in the future.
		PS - GIN may be supported in V4.0....

	4)	While we're on the subject of vectoring (???), make sure
		to dump the RSXVEC.STB file with the program STB, released
		on an RSX DECUS symposium tape a year or two ago.  Not all
		system symbols are in the vector table.  This will save you
		time pouring over maps only to find that the symbol you want
		isn't there....

Requests:

	Finally, a request:  someone, please make AUX work in named directory
	mode!  I want to convert wholesale over to named directories
	for a number of reasons, but I want command line editting,
	especially with the extra bells and whistles that AUX gives.
	What a great program!!!  If anyone can give me info on what
	might need changing, I would be interested in doing it, also.
	I tried changing the SPWN call, but that
	had no effect whatsoever....  Also, could someone tell me why
	ACNT can't act right when AUX is running?  It must have to do with
	AUX trapping I/O from an installed task or locking out terminal I/O....

	I need a way to tell, from a program in FORTRAN or
	a command file, if a given job (APPNDF) is on the BATCH queue.
	I've submitted an SPR on this;  please feel free to add your
	voice if you'd like to.

Good luck with all the above.  I can be reached most daylight
hours at (313) 769-8500 extension 458, or you can write (ugh) to

		Robert Hays
		KMS Fusion, Inc.
		3621 South State Road
		Ann Arbor, MI  48106

If anyone has any problems with the programs in this directory,
I can't promise to fix them, but I will try to answer the phone...
And remember, nothing included here is guarenteed to work, and nothing included
here can be sold for profit.
