	AnalytiCalc (PortaCalc)

	Brought to you courtesy of

	Glenn Everhart
	409 High St.
	Mt. Holly, NJ. 08060 USA

NOTICE:
	The best versions of AnalytiCalc to build are:
VAX: AnalytiCalc-PC, built with PCCMAKIVD.COM or other
	command files using the .F40 flavors of sources
	where there are multiple versions. Use PCCMAKIV.COM
	on your VAX if you don't have DTR.
	and
PDP11: AnalytiCalc-PC, built with PCCPDP.CMD in the UIC
	containing PCCPC.
Both of these are in the same area, named one of:
	[003205], [312371], [PCCPDP], or [PCCUNV]. This directory holds
	AnalytiCalc-VM, an acceptable but not quite as up-to-date
	VAX version, plus the documentation for the package.

Version 18.7B, Fall 1985
	This version of AnalytiCalc has greatly enhanced resistance to
crashes on erroneous user input and is far more bullet proof than
all earlier ones. It also implements some new functions to enhance
its programmability.
	It is now fully 3 dimensional as well (by a reasonable
definition of that.) Also, the keypad works on VAX as well as PDP11.
the supplied default command files for implementing keypad functions.
This spreadsheet finally can do matrix math and has (in the usrfct
module which may be optionally included) some routines for
iteratively searching up to 8 dimensional spaces for solutions to
problems. It is the first spreadsheet able to do really significant
math in addition to the simple routines needed for finance calculations.
There is also a word processing interface and date arithmetic, plus numerous
other goodies.
Directory [312,345] contains the basic AnalytiCalc submission with a major VAX
version, the documentation, and one of the sets of auxiliary keypad command
files. Directory [312,371] contains the PDP11 and VAX major version sources.
Directory [312,376] contains the second (and preferred) set of auxiliary
keypad files. Directory [312,366] is a version (now dated) of AnalytiCalc-XL
which uses virtual arrays. Normally this version should be ignored, but
is provided in case needed.

ABSTRACT:
	The AnalytiCalc spreadsheet is a FORTRAN written program able to
perform the usual "what if" types of calculations for anyone with a
compiler, 31KW of task space (more or less), and (in the present
version) an ANSI 3.64 terminal (e.g. VT100). The program is easily
recustomized for other terminals and designed for portability and
functionality. A data management system interface is built in, permitting
spreadsheets to access a potentially unlimited number of files and
records or parts of records in those files for user defined functions,
numbers, formulas, text, or whatnot. In fact it has many of the attributes
of a language.
	There are 2 major versions. AnalytiCalc for VMS uses demand
zero pages for storage and handles a large sheet. AnalytiCalc-PC for
PDP11 or VMS is a full functionality sheet for PDP11 or VAX which
will support a 16000 cell sheet even on a PDP11 with NO virtual
arrays, PLAS directives, or other tricks, and with the full VAX
functionality (except the *U XQTCM function, which only works in the
VMS flavor). There are a number of older versions provided also, of
more limited functionality. On PDP11 the F77 compiler is used, but
in F66 mode so tha F4P compiler may be substituted with little or
no change. AnalytiCalc-PC is now the standard version for both PDP11
and VAX and builds with:
	PCCMAKIVD.COM	-	VAX VMS with DTR interface
	PCCMAKIV.COM	-	VAX VMS without DTR present
	PCCPRON.COM	-	Compile PRO 3XX PDP11 version
				(PCCPRO.CMD taskbuilds after libs are
				built)
	PCCPDP.COM	-	Compile PDP11 RSX version
				(PCCPDP.CMD taskbuilds after libs are
				built)
	***************************************************
Please NOTE that the PDP11 or PRO versions will need minor edits to build
files, as the ones supplied have some device name dependences for our VAX,
and RSX users must take care to include the version of the system FCS
routines that does NOT have ANSI magtape support.
	***************************************************


	This is a FULL FUNCTION spreadsheet package now and has been
well hardened to resist crashes, however outrageous the user input
may be. There is very little any commercially sold product has that
is not supported in AnalytiCalc, and many features of AnalytiCalc are
unavailable in any commerical sheet.
	A separate graphics output task is documented in PCG.DOC
and provides histograms or scatterplots of any areas of the saved
spread sheets with a simple command syntax.

SPECIAL HARDWARE:
	The software must be built for the appropriate terminal. Versions
of the UVT100 subroutine for VT100, VT52, Datamedia Elite, and several 
other types of terminals including VT100 with Advanced Video and Colorscan 10
are supplied, with command files for most combinations. The VT52 version
will show what the minimum requirements are for control. Most any terminal
can be easily interfaced to the package by editing one of the UVT100 routines
to correspond to the terminal's control sequences, provided direct cursor
addressing is supported.
	The standard PDP11 version builds for VT100. The standard VAX version
builds for the SCRFT (screen independent terminals) handler and will work
on VT52 or VT100 as is. Use one of the UVT* routines instead of SCRIND
for the VAX to build for a particular terminal.

BUILD: (see also the PRIOR TO BUILD section)
	The major build files are:
	COMPILVMX.COM	Builds AnalytiCalc-VM for VMS, using native mode
			Fortran. Assumes VMS Fortran is correctly
			installed on your system.
	PCCPDP.COM	Builds AnalytiCalc-PC for PDP11. Needs to be edited
			into a .CMD file for use with MCR CLI and assumes
			the F77 compiler may be invoked as F77.
	PCCMAKIV.COM	Builds AnalytiCalc-PC on VMS.
	The following documents some build files.
		them over before proceeding.
	COMPIL.COM	Build for Vax/vms...only compiles. Concatinate
			the objects and link.
	     The next 2 files build 128 by 256 sheets by default.
	COMPILVM.COM	Builds a VAX/VMS version of the sheet that does
			not use a random access workfile on disk (and may
			run a bit faster than the standard one for that
			reason) but with all other capabilities.
	MAKE.CMD	Non-overlay I/D space build for RSX11M+ V2
			(uses F77 Compiler in non-F77 mode) (OBSOLETE)
Note: THERE ARE COMPILER WARNINGS (ABOUT FUNCTION "INDEX") WHICH SHOULD
	BE IGNORED DURING THE BUILDS.
		I ASSUME FORTRAN 77 IS INSTALLED AS ...F4P and that
	a truncate utility like TRU may be present for some RSX files.
	(The TRU commands can be omitted if TRUNC is unavailable). I also
	more or less assume that RSX sites have SRD. If you don't, it's
	not hard to omit the SRD lines, but SRD is a worthwhile thing to
	acquire. RSX SIG tapes from about 1984 on have good versions.

	PRIOR TO BUILD:
	You must be sure the final VKLUGPRM.FTN is as you will need it.
The PDP11 command files generally copy one of the template versions to
this file, but the parameter file may be edited as may any template.
The VAX versions of command files generally assume you know what you
have is right. READ the appropriate template.
	Supplied templates include:

	MVKLUGPRM.FTN	PDP11 version for RSX11M+ V2 I/D space, VT100
	MVKLUGPR5.FTN	PDP11 version for RSX11M+ V2 I/D space, VT52
	HVKLUGPRM.FTN   VAX really huge (80 by 400) version, VT100
	HVKLUGPR5.FTN   VAX really huge (80 by 400) version, VT52 or colorscan
			(note: these may need a bigger VIRTUALPAGECNT 
			parameter than the usual VMS default to link the
			program.)
			When building AnalytiCalc-PC for VAX, you probably
			won't need to modify VIRTUALPAGECNT.

Note that several variants of UVT100 exist too. The ones presently
included are:

	UVT100.FTN (.FOR for VAX)	VT100 control, no Advanced
				Video Option (AVO) assumed. Many entries
				are not called by AnalytiCalc. The ones
				that are used are:
					CUP	Cursor Position
					ED	Erase Display
					SGR	Set Graphics Rendition
					EL	Erase Line
					ANSI	set ANSI mode (may be nooped)
	UVTAVO.FTN	VT100 control with AVO terminal support. Includes only
				entries needed. Also uses underline to
				underline alternate rows and will display
				display-sheet row numbers as well as physical
				ones.
				This version will also highlight negative
				values in intensified video.
				By editing to change how NUL is set in the
				CUP entry, this could be set to highlite
				entries over/under a fixed amount (put the
				amount in one of the letter accumulators).
	UVT52.FTN	VT52 control. Since VT52 terminals have no reverse
				video, draws a ">" character in first col. of
				cell pointed at to indicate cursor location.
	UVTDM.FTN	Datamedia Elite 1500 control. Similar to UVT52 but
				cursor controls for Datamedia.
	UVTCS.FTN	Datamedia Colorscan-10 control. This terminal uses
				VT100 sequences, but UVTCS will use some of
				the color setup sequences to create a
				multicolor spread sheet. Colors are now used
				for showing negative numbers and work in a
				sensible screen design now. Negative numbers
				appear in red; positive ones in yellow.
	UVTTV925.FTN	Televideo 925 experimental version. This version
				has not been well tested but is intended
				for Televideo 925 terminals.
	UVTPC.FTN	IBM PC color mode and probably Intecolor terminals
				using ANSI escape sequences. This routine
				generates the necessary escape sequences
				to use the MSDOS ANSI.SYS driver from a
				suitable communications program to allow
				an IBM PC to run AnalytiCalc from a Vax
				or PDP11, using a color display. The Intecolor
				escape sequences seem to be the same (they
				differ from the Colorscan ones), so this
				may allow use from an Intecolor terminal. Note
				wide screen display is impossible on the IBM
				PC and its lookalikes.
				Note that a native MSDOS AnalytiCalc is
				available ($49.95+$5 Shipping/handling) from
				General Cybernetic Engineering, POB 748,
				Mt. Holly, NJ 08060 also. It is similar to
				the VAX flavor but has 18,000 by 18,000
				sheet limits.
	SCRIND.FOR	VAX Screen independent version using screen independent
				cursor controls. Normal VAX builds use this.
You may easily adapt the UVT100 subroutine from any of these to handle
whatever terminal you have using these routines as examples. Note the
parameter JVTINC in the VKLUGPRM.FTN which adjusts for the backspace
generated by UVT100 on SGR calls needs to be set correctly.
	NOTE that most command files copy one of the template files to
VKLUGPRM.FTN, so edit the TEMPLATE, NOT VKLUGPRM.FTN.
	Adapting UVT100 to your terminal and setting up VKLUGPRM.FTN
correctly are the necessary setup actions needed prior to compiling
and building AnalytiCalc. You may of course get UVT100 to determine
what terminal type is there itself, or use the VMS terminal independent
cursor positioning logic, if you wish. On a VAX you may also want to
inhibit scrolling. The normal PDP11 builds will make a version which
attaches the terminal so no funny modes need be set.
	The RSX and VMS flavors of AnalytiCalc can use escape sequences and
now recognize VT100 arrow keys (VT52 too) and also that PF2 means "help".
Remember under VMS to copy the desired file to VKLUGPRM.FTN before
compiling, unless the build file does (MOST DO!) Have a look at CMDMUN.*
if desired to see how the VT200 keys are handled...
	***************************************************
	Ignore compiler/linker errors in RSX or VMS. They are harmless
warnings. It develops that a few compilers treat the INDEX errors as
errors, not warnings. Inserting a statement like
	EXTERNAL *INDEX
into offending programs will get them to compile however. F77 V4.0 is
one that seems to mess this up.
	***************************************************
	Note that in VMS you may want to run AnalytiCalc from a command
file to set the terminal /NOESCAPE after AnalytiCalc exits. Otherwise
EDT gets VERY unhappy (not to mention screwed up).
	In VMS V4.X and later you must also set your terminal to
/NOLINE mode to turn off line editing. Otherwise the TT driver eats
the escape sequences, preventing AnalytiCalc from using them for their
intended purposes.

	You should be able to build AnalytiCalc with regular old F4P
but you may need minor changes to some OPEN statements.
To handle the program with another Fortran version, use the
LBL Tools INCL and MACRO processors to handle the parameter
statements and expand them inline. You'll need to edit the include
files into the form MACRO needs, but it can be made to work (I've done
it).
	Note too the CMDMUN and TTYINI routines to set up the console.
The supplied versions implement case translation and enable the arrow
keys.

	You will find 4 user function routine areas too:
	USRFCT.FTN	Version supporting return of system date
	USRFCT.FOR	Supports also matrix equation solution
	USRFCT.F40	Full capability USRFCT supporting all kinds of
			extra functions, date arithmetic, etc. etc.
Note the USRFCT programs are designed to be points for you to plug in
your favorite statistical subroutines. They'll need extra routines
which you'll find sources for here (things like MTXEQU, MDET, GMSUBS)
which may not be well included into command files. However, they may
be linked together and used to support functionality far beyond that
of conventional sheets.

WRITEUP:

(Note: This hasn't been updated for awhile.)

	This is a spreadsheet written in Fortran (the only universal
assembler) for portability. Its functions are described in the separate
document file; the UVT100 routines are the
only places the VT100 is actually handled in screen mode, and may be
altered for other machines.
	The spreadsheet sizes may be defined by editing the parameter
file Vklugprm.ftn (caveats and restrictions are listed there). There
are 2 sheets -- a big physical sheet and a small display sheet which
is what's really shown on screen. Sheets may be saved/merged/restored/
linked (via saved files)/printed or hardcopy made onto files. Numerous
other functions exist.
	The sheet's physical size can be tailored to any desired size
(subject to memory constraints) by editing VKLUGPRM.FTN and recompiling.

	WHEN BUILDING ANALYTICALC, YOU MAY ENCOUNTER FORTRAN WARNINGS
ABOUT THE INDEX FUNCTION BEING ASSUMED USER SUPPLIED. IGNORE THESE;
THERE IS AN INDEX FUNCTION SUPPLIED HERE, AND THE WARNINGS ARE OF
NO CONSEQUENCE, EITHER ON PDP11 OR VAX.

	Several ODL files exist. Examine the command files to see
which is which.

		NOTE:
	If you get this program working on a non-PDP11, non-
VAX, the author would appreciate a (machine readable) copy of
the modified version.

BUGS:
	The functions here are mostly tested, but some bugs may remain.
	Fortran formats are used and any format entered will be used.
You can use things like O or Z formats for octal/hex
or whatever you like. Formats A and L by themselves mean "display the
formula itself"; anything else means "display the number". On entering
numbers, any formula containing the characters ".","[","+", "(", or "-" is
treated as a numeric; anything else is treated as a formula, unless the
string contains the double quote (") character, which forces it to be
treated as a literal rather than a number regardless of what else it has.
The DF command can fix up this if it's not what you want. Note too that the
multi-argument functions:
	SUM[args]	Sum
	MAX[args]	Maximum
	MIN[args]	Minimum
	AVG[args]	Average
	STD[args]	Standard Deviation
	AND[args]	Boolean AND (args treated as integer)
	IOR[args]	Boolean inclusive OR
	NOT[arg]	Complement of arg. Treated as integer.
	CNT[args]	Number of nonzero arguments.
	LKP[val,range]	Lookup
(and several more)
and the statement
	IF [v1.RL.v2]true-statement |false-statement \more statements
must appear at the start of a formula or formula substatement (substate-
ments are delimited by \ characters) and the value goes into the
current variable cell (which is universally named P## if you want something
location independent). It's a good idea to include an else statement in
IFs since something gets put in otherwise.
	Note that the DEFAULT format is for a REAL (not integer) number
and must be appropriate. The sheet can be converted to integer format,
but will start as real (floating point) numbers, the most generally
useful sort. Double precision is used, so about 17 digits of precision
are available.
			Glenn Everhart
