This directory contains the code to create the S functions.
There should be no subdirectories other than those corresponding to
S functions, except for directories that contain 
"lib" in their name.  These create libraries used by the functions
and are made before any of the functions.

To modify and test an S function:
1) Update the source code (and Smakefile if necessary).
2) Load the function as an external function by using
   S MAKE
3) Test the external version of the function.
4) Update $M/ILIST.a with the modified .o, .x files
   (the dependencies for internal: in the Smakefile).
5) cd $M; MAKE NEW.S  and test the new internal version.


___________________________________________________________________________

The proper form for Smakefiles for the function directories is:

The first line containing a colon should be the list of things to make
for creating external versions of everything in the directory.

There should be a line
	internal: ... object files needed if this function is in the executive
		  echo INTERNALS $?

Functions that cannot be part of the executive should have
	internal:
		echo cannot be internal; exit 1


The following is a simple version of a makefile:

stem: interface.o stem.x
	f77 $(LDFLAGS) $(STRIP) -o stem interface.o stem.x $(LIBR)
	@echo stem loaded
interface.c: ; echo 'INCLUDE(u/cinter)CINTER(stem,r)' >interface.c
internal: stem.x
	echo INTERNALS $?

It is important for the interface.o routine to have "inter"
in its name (the $A/INTERNAL program uses this to find a list of
aliases for functions which are internal to the executive).
This in NOT the form that an Smakefile will have if generated
by the S FUNCTION utility.

_________________________________________________________

The following list should help you to find the directory which contains
source code for various S functions:
(Functions not listed are in a directory identical with their function name)

FUNCTION	DIRECTORY

!		not
%*		matp
%c		crossprod
%m		coerce
%o		outer
+ - *		infixo (Infix operators)
-		uminus
:		seq
<-		assign
[		subset
abs		sin
acos		sin
again		edit
all		sum
any 		sum
arrows		segments
asin		sin
boot		sys.boot
call		help
cbind		rbind
ceiling		sin
col		nrow
comic		stare
cos		sin
cycle 		time
dbeta		rnorm
dcauchy		rnorm
dchisq		rnorm
df		rnorm
dgamma		rnorm
dlnorm		rnorm
dlogis		rnorm
dnorm		rnorm
dt		rnorm
dunif		rnorm
end 		time
exp		sin
floor		sin
hp2623		hp2648
hp2647		hp2648
hp72 		hp7221
hp7220h 	hpgl
hp7220v		hpgl
hp7221h		hp7221
hp7221v 	hp7221
hp7225 		hpgl
hp7225v		hpglv
hp72h 		hp7221
hp72s 		hp7221
hp72v 		hp7221
hp7470 		hpgl
hp7470v		hpglv
hp7475 		hpgl
hp7475v		hpglv
hp7550 		hpgl
hp7550v		hpglv
len		mode
lgamma		gamma
log		sin
log10		sin
ls		list
matlines	matplot
matpoints	matplot
max		min
max		min
medit		mprint
message		fatal
na		mode
NA		mode
ncol		nrow
ncomp		compname
nper		time
optinit		optiter
options		option
pbeta		rnorm
pcauchy		rnorm
pchisq		rnorm
pf		rnorm
pgamma		rnorm
photo		stare
plnorm		rnorm
plogis		rnorm
pmax		pmin
pnorm		rnorm
points		lines
prism 		stare
prod 		sum
pt		rnorm
punif		rnorm
qbeta		rnorm
qcauchy		rnorm
qchisq		rnorm
qf		rnorm
qgamma		rnorm
qlnorm		rnorm
qlogis		rnorm
qnorm		rnorm
qt		rnorm
qunif		rnorm
range		min
rbeta		rnorm
rcauchy		rnorm
rchisq		rnorm
regress		reg
restore		dget
rf		rnorm
rgamma		rnorm
rlnorm		rnorm
rlogis		rnorm
round		sin
row		nrow
rstab		rnorm
rt		rnorm
runif		rnorm
sqrt		sin
start 		time
tek10 		tek4010
tek12		tek4010
tek14		tek4014
tek14q		tek4014
tek4112		tek4110
tek46		tek4662
tek46h 		tek4662
tek46v		tek4662
title		axes
trunc		sin
tspoints	tslines
tty5620		blit
tty5620		tty5620
uniq		unique
var		cor
warning		fatal
