[ver]
	4
[sty]
	
[files]
[charset]
	82
	ANSI (Windows, IBM CP 1252)
[revisions]
	0
[sequence]
	18
	0
	0
	0
	19
	8
	Numbered list
	0
	Bullet
	0
	Indnt bullet
	0
	Indnt caution
	0
	Indnt tip
	0
	Indnt note
	0
	Caution
	0
	Tip
	0
	Note
	0
	Browse
	0
	Keyword
	0
	Context
	0
	Title
	0
	Macros
	0
	Alink
	0
	Window
	0
	Win95 macros
	0
	Win31 macros
	0
	Build tag
[prn]
	Apple LaserWriter II NTX
[port]
	LPT1:
[lang]
	1
[fldnames]
	Field1
	Field2
	Field3
	Field4
	Field5
	Field6
	Field7
	Field8
[desc]
	
	
	
	
	
	801262603
	57
	780189382
	19886
	28
	0
	0
	0
	0
	
	
	
	
	
	
	1
[fopts]
	0
	1
	0
	0
	
	
[lnopts]
	2
	Body Text
	1
[docopts]
	5
	2
[GramStyle]
	
[ParaNum]
	1
[tag]
	Body Text
	2
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		100
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Body Text
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Ahead
	3
	[fnt]
		Arial
		220
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		240
		4
		79
		0
		3
		100
	[brk]
		112
	[line]
		16
		2160
		3
		0
		1
		1
		1
		65
		10
		1
	[spec]
		0
		1
		
		0
		1
		1
		0
		2
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		wr
	Body Text
	0
	0
[tag]
	Bhead title
	4
	[fnt]
		Arial
		200
		0
		16385
	[algn]
		1
		1
		0
		0
		0
	[spc]
		40
		220
		4
		79
		0
		3
		100
	[brk]
		80
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		2
		
		0
		1
		1
		0
		2
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		wr
	Body Text
	0
	0
[tag]
	Chead title
	5
	[fnt]
		Arial
		180
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		200
		4
		79
		0
		3
		100
	[brk]
		112
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		3
		
		0
		1
		1
		0
		2
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		wr
	Body Text
	0
	0
[tag]
	Bhead
	6
	[fnt]
		Arial
		200
		0
		16385
	[algn]
		1
		1
		0
		0
		0
	[spc]
		40
		220
		4
		180
		0
		3
		100
	[brk]
		68
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		2
		
		0
		1
		1
		0
		2
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Body Text
	0
	0
[tag]
	Chead
	7
	[fnt]
		Arial
		180
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		200
		4
		100
		0
		3
		100
	[brk]
		80
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		3
		
		0
		1
		1
		0
		2
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Body Text
	0
	0
[tag]
	Numbered list
	8
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		300
		300
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		5
		<*:>.
		0
		3
		1
		0
		2
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Numbered list
	0
	0
[tag]
	1st lev para
	9
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		300
		0
		0
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		68
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	1st lev para
	0
	0
[tag]
	Bullet
	11
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		120
		180
		180
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		</U>
		0
		3
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Bullet
	2
	1
	160
	1
	400
	0
[tag]
	Indnt bullet
	12
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		420
		180
		180
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		16
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		</U>
		0
		3
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Indnt bullet
	0
	0
[tag]
	2nd lev para
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		600
		0
		0
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	2nd lev para
	0
	0
[tag]
	See also prnt
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	See also prnt
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Book art
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Book art
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Callout text
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Callout text
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Figure title
	0
	[fnt]
		Arial
		180
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		200
		4
		40
		60
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Figure title
	0
	0
[tag]
	1st pg foot
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	1st pg foot
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Right pg foot
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Right pg foot
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Left pg foot
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Left pg foot
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Table title
	0
	[fnt]
		Arial
		180
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		200
		4
		60
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		7
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Table title
	0
	0
[tag]
	Table col hd
	0
	[fnt]
		Arial
		180
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		200
		4
		100
		0
		3
		100
	[brk]
		4
	[line]
		10
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		6
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		256
		1
		0
		
		
		
	Table col hd
	0
	0
[tag]
	Table Text
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		1
		0
		0
		0
	[spc]
		40
		200
		4
		79
		0
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		256
		1
		0
		
		
		
	Table Text
	0
	0
[tag]
	See also hlp
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		40
		4
		180
		0
		3
		100
	[brk]
		96
	[line]
		9
		0
		3
		0
		1
		1
		1
		70
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	See also btn
	0
	120
[tag]
	See also btn
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		240
	[spc]
		24
		200
		4
		0
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	See also btn
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Crossref
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		513
		3
		0
		300
		600
	[spc]
		24
		200
		4
		19
		0
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Crossref
	0
	0
[tag]
	Indnt caution
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		300
		720
		0
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		Caution
		0
		3
		1
		1
		0
		0
		0
	[nfmt]
		256
		1
		2
		.
		,
		$
	Indnt caution
	0
	0
[tag]
	Indnt tip
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		300
		324
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		Tip
		0
		3
		1
		1
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Indnt tip
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Indnt note
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		300
		468
		0
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		Note
		0
		3
		1
		1
		0
		0
		0
	[nfmt]
		256
		1
		2
		.
		,
		$
	Indnt note
	0
	0
[tag]
	Caution
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		720
		0
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		Caution
		0
		3
		1
		1
		0
		0
		0
	[nfmt]
		256
		1
		2
		.
		,
		$
	Caution
	0
	0
[tag]
	Tip
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		324
		0
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		Tip
		0
		3
		1
		1
		0
		0
		0
	[nfmt]
		256
		1
		2
		.
		,
		$
	Tip
	0
	0
[tag]
	Note
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		468
		0
	[spc]
		40
		200
		4
		19
		60
		3
		100
	[brk]
		4
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		Note
		0
		3
		1
		1
		0
		0
		0
	[nfmt]
		256
		1
		2
		.
		,
		$
	Note
	0
	0
[tag]
	Mono
	0
	[fnt]
		Courier New
		180
		0
		32768
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		48
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Mono
	15
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	1
	2880
	1
	3360
	1
	3840
	1
	4320
	1
	4800
	1
	5280
	1
	5760
	1
	6240
	1
	6720
	1
	7200
	0
[tag]
	Indnt mono
	0
	[fnt]
		Courier New
		180
		0
		32768
	[algn]
		1
		3
		300
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		32
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Indnt mono
	15
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	1
	2880
	1
	3360
	1
	3840
	1
	4320
	1
	4800
	1
	5280
	1
	5760
	1
	6240
	1
	6720
	1
	7200
	0
[tag]
	Dhead
	0
	[fnt]
		Arial
		180
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		200
		4
		100
		0
		3
		100
	[brk]
		68
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		4
		
		0
		1
		1
		0
		2
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		$
	Body Text
	0
	0
[tag]
	Parameter
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		0
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Parameter
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Formula
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Formula
	0
	0
[tag]
	Browse
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		+
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Browse
	0
	0
[tag]
	Keyword
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		K
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Keyword
	0
	0
[tag]
	Context
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		#
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Context
	0
	0
[tag]
	Title
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		$
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Title
	0
	0
[tag]
	Macros
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		!
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Macros
	0
	0
[tag]
	Footnote
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		244
		0
	[spc]
		40
		2400
		3
		0
		0
		1
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		256
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Footnote
	0
	0
[tag]
	Alink
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		A
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Alink
	0
	0
[tag]
	Butnbar
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		40
		200
		4
		0
		0
		3
		100
	[brk]
		48
	[line]
		16
		0
		3
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		\li-140 
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		272
		1
		2
		.
		,
		wr
	Butnbar
	0
	0
[tag]
	Window
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		>
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Window
	0
	0
[tag]
	Win95 macros
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		W
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Win95 macros
	0
	0
[tag]
	Win31 macros
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		X
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Win31 macros
	0
	0
[tag]
	Build tag
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		139
		139
	[spc]
		24
		200
		4
		0
		0
		3
		100
	[brk]
		4
	[line]
		16
		0
		3
		0
		1
		2
		2
		20
		20
		1
	[spec]
		0
		0
		*
		0
		3
		1
		256
		1
		0
		0
	[nfmt]
		280
		1
		3
		.
		,
		$
	Build tag
	0
	0
[tag]
	_COND_IF
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	_COND_IF
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	_COND_ELSE
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	_COND_ELSE
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	_COND_ENDIF
	0
	[fnt]
		Arial
		180
		0
		16384
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		0
		
		0
		1
		1
		0
		0
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	_COND_ENDIF
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[tag]
	Chapter title
	0
	[fnt]
		Arial
		280
		0
		16385
	[algn]
		1
		3
		0
		0
		0
	[spc]
		24
		200
		4
		19
		60
		3
		100
	[brk]
		36
	[line]
		8
		0
		1
		0
		1
		1
		1
		10
		10
		1
	[spec]
		0
		3
		
		0
		1
		1
		0
		2
		0
		0
	[nfmt]
		280
		1
		2
		.
		,
		$
	Chapter title
	5
	1
	480
	1
	960
	1
	1440
	1
	1920
	1
	2400
	0
[frm]
	25
	1573060
	960
	3623
	7792
	11254
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	13
	0
	0
	0 0
	[frmlay]
		5829
		6832
		1
		0
		0
		1
		3623
		0
		0
		2
		0
		0
		0
		0
		1
		1224
		5256
		0
	[tbl]
		 23 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 200 86 2 0 2 0
			 3 400 86 2 0 1 0
			 4 200 86 2 0 2 0
			 5 200 86 2 0 2 0
			 6 200 86 2 0 2 0
			 7 200 86 2 0 2 0
			 8 400 86 2 0 1 0
			 9 200 86 2 0 2 0
			 10 200 86 2 0 2 0
			 11 200 86 2 0 2 0
			 12 200 86 2 0 2 0
			 13 200 86 2 0 2 0
			 14 200 86 2 0 2 0
			 15 200 86 2 0 2 0
			 16 400 86 2 0 1 0
			 17 200 86 2 0 2 0
			 18 200 86 2 0 2 0
			 19 400 86 2 0 1 0
			 20 200 86 2 0 2 0
			 21 400 86 2 0 2 0
			 22 200 86 2 0 2 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4532 0 2 0
		[e]
		[data]
			 0 0 8 0 0 0 4352 1 0 0 0 0
@Table col hd@<+@>Function

>
			 0 1 8 0 0 0 4352 1 0 0 0 0
@Table col hd@<+@>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Created" #>@Created

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Determines when the document was created.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Accessed" #>@Accessed

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Determines when the document was last accessed.

>
			 3 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Modified" #>@Modified

>
			 3 1 0 0 0 0 0 1 0 0 0 0
Determines when the document was last edited and saved.

>
			 4 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Now" #>@Now

>
			 4 1 0 0 0 0 0 1 0 0 0 0
Determines the current time-date.

>
			 5 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Today" #>@Today

>
			 5 1 0 0 0 0 0 1 0 0 0 0
Determines today's date.

>
			 6 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Tomorrow" #>@Tomorrow

>
			 6 1 0 0 0 0 0 1 0 0 0 0
Determines tomorrow's date.

>
			 7 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Yesterday" #>@Yesterday

>
			 7 1 0 0 0 0 0 1 0 0 0 0
Determines yesterday's date.

>
			 8 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Weekday" #>@Weekday(time-date)

>
			 8 1 0 0 0 0 0 1 0 0 0 0
Determines the day of the week for a time-date as 1-7 (Sunday through Saturday).

>
			 9 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Day" #>@Day(time-date)

>
			 9 1 0 0 0 0 0 1 0 0 0 0
Extracts the day of the month from a time-date.

>
			 10 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Month" #>@Month(time-date)

>
			 10 1 0 0 0 0 0 1 0 0 0 0
Extracts the month from a time-date as 1-12.

>
			 11 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Year" #>@Year(time-date)

>
			 11 1 0 0 0 0 0 1 0 0 0 0
Extracts the year from a time-date.

>
			 12 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Hour" #>@Hour(time-date)

>
			 12 1 0 0 0 0 0 1 0 0 0 0
Extracts the hour from a time-date.

>
			 13 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Minute" #>@Minute(time-date)

>
			 13 1 0 0 0 0 0 1 0 0 0 0
Extracts the minute from a time-date.

>
			 14 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Second" #>@Second(time-date)

>
			 14 1 0 0 0 0 0 1 0 0 0 0
Extracts the seconds from a time-date.

>
			 15 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Date" #>@Date(y; m; d)

>
			 15 1 0 0 0 0 0 1 0 0 0 0
Determines the date for year, month, and day.

>
			 16 0 0 0 0 0 0 1 0 0 0 0
@@Date(y; m; d; h; m; s)

>
			 16 1 0 0 0 0 0 1 0 0 0 0
Determines the date for year, month, day, hour, minute, and second.

>
			 17 0 0 0 0 0 0 1 0 0 0 0
@@Date(time-date)

>
			 17 1 0 0 0 0 0 1 0 0 0 0
Determines the date for a time-date.

>
			 18 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Time" #>@Time(y; m; d)

>
			 18 1 0 0 0 0 0 1 0 0 0 0
Determines the time for year, month, and day.

>
			 19 0 0 0 0 0 0 1 0 0 0 0
@@Time(y; m; d; h; m; s)

>
			 19 1 0 0 0 0 0 1 0 0 0 0
Determines the time for year, month, day, hour, minute, and second.

>
			 20 0 0 0 0 0 0 1 0 0 0 0
@@Time(time-date)

>
			 20 1 0 0 0 0 0 1 0 0 0 0
Determines the time for a time-date.

>
			 21 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Adjust" #>@Adjust(time-date; y; m; d; h; m; s)

>
			 21 1 0 0 0 0 0 1 0 0 0 0
Adjusts a time-date by the negative or positive values of the remaining arguments.

>
			 22 0 0 0 0 0 4096 1 0 0 0 0
<:X8,0;Index "@Zone" #>@Zone

>
			 22 1 0 0 0 0 4096 1 0 0 0 0
<+"><+!>yyneed description - 2 forms<-!><-">

>
		[e]
	[tble]
[frm]
	24
	1573060
	960
	960
	7792
	3630
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	12
	1
	0
	0 0
	[frmlay]
		5829
		6832
		1
		0
		0
		1
		960
		0
		0
		2
		0
		0
		0
		0
		1
		1224
		5256
		0
	[tbl]
		 9 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 200 86 2 0 1 0
			 3 200 86 2 0 2 0
			 4 200 86 2 0 1 0
			 5 200 86 2 0 1 0
			 6 200 86 2 0 1 0
			 7 200 86 2 0 1 0
			 8 200 86 2 0 2 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4532 0 2 0
		[e]
		[data]
			 0 0 8 0 0 0 4352 1 0 0 0 0
@Table col hd@<+@>Function

>
			 0 1 8 0 0 0 4352 1 0 0 0 0
@Table col hd@<+@>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Abs" #>@UserName

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Determines the user name or server name.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
@@Name

>
			 3 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Sum" #>@UserRoles

>
			 3 1 16 0 0 0 0 1 0 0 0 0
<+A>

>
			 4 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Modulo" #>@MailDbName

>
			 5 0 0 0 0 0 0 1 0 0 0 0
@@OptimizeMailAddress

>
			 6 0 0 0 0 0 0 1 0 0 0 0
@@Platform

>
			 7 0 0 0 0 0 0 1 0 0 0 0
@@Version

>
			 8 0 0 0 0 0 4096 1 0 0 0 0
<:X8,0;Index "@Exp" #>@Password

>
			 8 1 0 0 0 0 4096 1 0 0 0 0

>
		[e]
	[tble]
[frm]
	9
	1573060
	720
	7415
	7536
	10956
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	5
	2
	10752
	64000 64255
	[frmlay]
		3636
		6816
		1
		0
		0
		1
		7415
		0
		0
		2
		0
		1
		0
		2286
		1
		1644
		5676
		0
	[tbl]
		 8 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 400 86 2 0 1 0
			 2 600 86 2 0 1 0
			 3 200 86 2 0 2 0
			 4 200 86 2 0 2 0
			 5 400 86 2 0 1 0
			 6 400 86 2 0 1 0
			 7 400 86 2 0 1 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4516 0 2 0
		[e]
		[data]
			 0 0 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Function

>
			 0 1 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Trim" #>@Trim(string)

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Removes leading, trailing, and redundant spaces from a string.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
@@Trim(list)

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Removes leading, trailing, and redundant spaces from each element of a string list, and removes blank elements from the list.

>
			 3 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Repeat" #>@Repeat(string, number)

>
			 3 1 0 0 0 0 0 1 0 0 0 0
Repeats a string a number of times.

>
			 4 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@NewLine" #>@NewLine

>
			 4 1 0 0 0 0 0 1 0 0 0 0
Inserts a new line (carriage return) into a string.

>
			 5 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@LowerCase" #>@LowerCase(string)

>
			 5 1 0 0 0 0 0 1 0 0 0 0
Converts all uppercase characters in a string to lowercase.

>
			 6 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@UpperCase" #>@UpperCase(string)

>
			 6 1 0 0 0 0 0 1 0 0 0 0
Converts all lowercase characters in a string to uppercase.

>
			 7 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@ProperCase" #>@ProperCase

>
			 7 1 0 0 0 0 0 1 0 0 0 0
Converts the first character of each word in a string to uppercase and the remaining characters to lowercase.

>
		[e]
	[tble]
[frm]
	8
	1573060
	960
	960
	7776
	4058
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	6
	3
	10752
	64000 64255
	[frmlay]
		3456
		6816
		1
		0
		0
		1
		960
		0
		0
		2
		0
		1
		0
		2286
		1
		1464
		5496
		0
	[tbl]
		 18 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 400 86 2 0 1 0
			 3 200 86 2 0 2 0
			 4 200 86 2 0 2 0
			 5 200 86 2 0 2 0
			 6 400 86 2 0 1 0
			 7 400 86 2 0 1 0
			 8 400 86 2 0 1 0
			 9 200 86 2 0 2 0
			 10 400 86 2 0 1 0
			 11 400 86 2 0 1 0
			 12 400 86 2 0 1 0
			 13 200 86 2 0 2 0
			 14 400 86 2 0 1 0
			 15 400 86 2 0 1 0
			 16 400 86 2 0 1 0
			 17 400 86 2 0 1 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4516 0 2 0
		[e]
		[data]
			 0 0 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Function

>
			 0 1 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Contains" #>@Contains(string; sub)

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Determines whether a string contains a substring.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
@@Contains(string; list)

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Determines whether a string contains any substring in a list.

>
			 3 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Begins" #>@Begins(string; sub)

>
			 3 1 0 0 0 0 0 1 0 0 0 0
Determines whether a string begins with a substring.

>
			 4 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Ends" #>@Ends(string; sub)

>
			 4 1 0 0 0 0 0 1 0 0 0 0
Determines whether a string ends with a substring.

>
			 5 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Left" #>@Left(string; n)

>
			 5 1 0 0 0 0 0 1 0 0 0 0
Extracts the leftmost n characters from a string.

>
			 6 0 0 0 0 0 0 1 0 0 0 0
@@Left(string; sub)

>
			 6 1 0 0 0 0 0 1 0 0 0 0
Extracts the leftmost characters from a string up to a substring, searching left to right.

>
			 7 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@LeftBack" #>@LeftBack(string; n)

>
			 7 1 0 0 0 0 0 1 0 0 0 0
Extracts the leftmost characters from a string up to n characters from the right.

>
			 8 0 0 0 0 0 0 1 0 0 0 0
@@LeftBack(string; sub)

>
			 8 1 0 0 0 0 0 1 0 0 0 0
Extracts the leftmost characters from a string up to a substring, searching right to left.

>
			 9 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Right" #>@Right(string; n)

>
			 9 1 0 0 0 0 0 1 0 0 0 0
Extracts the rightmost n characters from a string.

>
			 10 0 0 0 0 0 0 1 0 0 0 0
@@Right(string; sub)

>
			 10 1 0 0 0 0 0 1 0 0 0 0
Extracts the rightmost characters from a string up to a substring, searching left to right.

>
			 11 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@RightBack" #>@RightBack(string; n)

>
			 11 1 0 0 0 0 0 1 0 0 0 0
Extracts the rightmost characters from a string up to n characters from the left.

>
			 12 0 0 0 0 0 0 1 0 0 0 0
@@RightBack(string; sub)

>
			 12 1 0 0 0 0 0 1 0 0 0 0
Extracts the leftmost characters from a string up to a substring, searching right to left.

>
			 13 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Middle" #>@Middle(string; off; n)

>
			 13 1 0 0 0 0 0 1 0 0 0 0
Extracts n characters from a string starting at an offset.

>
			 14 0 0 0 0 0 0 1 0 0 0 0
@@Middle(string; sub; n)

>
			 14 1 0 0 0 0 0 1 0 0 0 0
Extracts n characters from a string starting at a substring, searching left to right.

>
			 15 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@MiddleBack" #>@MiddleBack(str; sub; n)

>
			 15 1 0 0 0 0 0 1 0 0 0 0
Extracts n characters from a string starting at a substring, searching right to left.

>
			 16 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Word" #>@Word(string; sep; n)

>
			 16 1 0 0 0 0 0 1 0 0 0 0
Extracts word n from a string where words are the text between specified separators.

>
			 17 0 0 0 0 0 4096 1 0 0 0 0
@@Word(list; sep; n)

>
			 17 1 0 0 0 0 4096 1 0 0 0 0
Extracts word n from each string in a list where words are the text between specified separators.

>
		[e]
	[tble]
[frm]
	5
	1573060
	960
	3887
	7776
	7514
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	7
	4
	10752
	64000 64255
	[frmlay]
		3276
		6816
		1
		0
		0
		1
		3887
		0
		0
		2
		0
		1
		0
		2286
		1
		1284
		5316
		0
	[tbl]
		 9 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 400 86 2 0 1 0
			 3 200 86 2 0 2 0
			 4 200 86 2 0 2 0
			 5 400 86 2 0 1 0
			 6 400 86 2 0 1 0
			 7 400 86 2 0 1 0
			 8 400 86 2 0 1 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4516 0 2 0
		[e]
		[data]
			 0 0 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Function

>
			 0 1 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Text" #>@Text(value)

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Converts a value to a text string.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
@@Text(value; format)

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Converts a numeric or date-time value to a text string according to a specified format.

>
			 3 0 0 0 0 0 0 1 0 0 0 0
@@TextToNumber(string)

>
			 3 1 0 0 0 0 0 1 0 0 0 0
Converts a text string to a number.

>
			 4 0 0 0 0 0 0 1 0 0 0 0
@@TextToTime(string)

>
			 4 1 0 0 0 0 0 1 0 0 0 0
Converts a text string to a date-time value.

>
			 5 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsText" #>@IsText(value)

>
			 5 1 0 0 0 0 0 1 0 0 0 0
Determines if a value is a text string or text string list. Returns true (1) or false (0).

>
			 6 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsNumber" #>@IsNumber(value)

>
			 6 1 0 0 0 0 0 1 0 0 0 0
Determines if a value is a number or number list. Returns true (1) or false (0).

>
			 7 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsTime" #>@IsTime(value)

>
			 7 1 0 0 0 0 0 1 0 0 0 0
Determines if a value is a time-date or time-date list. Returns true (1) or false (0).

>
			 8 0 0 0 0 0 4096 1 0 0 0 0
<:X8,0;Index "@Char" #>@Char(number)

>
			 8 1 0 0 0 0 4096 1 0 0 0 0
Converts an IBM Code Page 850 code number to its corresponding character.

>
		[e]
	[tble]
[frm]
	6
	1573060
	720
	7331
	7536
	9700
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	8
	5
	10752
	64000 64255
	[frmlay]
		3456
		6816
		1
		0
		0
		1
		7331
		0
		0
		2
		0
		1
		0
		2286
		1
		1464
		5496
		0
	[tbl]
		 6 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 400 86 2 0 1 0
			 3 400 86 2 0 1 0
			 4 400 86 2 0 1 0
			 5 200 86 2 0 2 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4516 0 2 0
		[e]
		[data]
			 0 0 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Function

>
			 0 1 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Length" #>@Length(string)

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Determines the length of a string in characters.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
@@Length(stringlist)

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Determines the length of each element of a string list in characters.

>
			 3 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Matches" #>@Matches(string; pattern)

>
			 3 1 0 0 0 0 0 1 0 0 0 0
Determines whether two strings match. Wildcards can be used to expand the scope of the comparison.

>
			 4 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Like" #>@Like(string; pattern)

>
			 4 1 0 0 0 0 0 1 0 0 0 0
Determines whether two strings match. Conforms to ANSI SQL standard.

>
			 5 0 0 0 0 0 0 1 0 0 0 0
@@Like(string; pattern; esc)

>
			 5 1 0 0 0 0 0 1 0 0 0 0
Same as above with an escape character.

>
		[e]
	[tble]
[frm]
	11
	1573060
	720
	960
	7552
	8176
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	9
	6
	0
	0 0
	[frmlay]
		5649
		6832
		1
		0
		0
		1
		960
		0
		0
		2
		0
		0
		0
		0
		1
		1044
		5076
		0
	[tbl]
		 21 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 200 86 2 0 2 0
			 3 200 86 2 0 2 0
			 4 200 86 2 0 2 0
			 5 200 86 2 0 2 0
			 6 200 86 2 0 2 0
			 7 200 86 2 0 2 0
			 8 400 86 2 0 1 0
			 9 200 86 2 0 2 0
			 10 400 86 2 0 1 0
			 11 200 86 2 0 2 0
			 12 400 86 2 0 1 0
			 13 400 86 2 0 1 0
			 14 400 86 2 0 1 0
			 15 400 86 2 0 1 0
			 16 200 86 2 0 2 0
			 17 200 86 2 0 2 0
			 18 400 86 2 0 1 0
			 19 200 86 2 0 2 0
			 20 200 86 2 0 2 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4532 0 2 0
		[e]
		[data]
			 0 0 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Function

>
			 0 1 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Abs" #>@Abs(number)

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Calculates the absolute (unsigned) value of a number.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Sum" #>@Sum(num; num; ...)

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Calculates the sum of numbers and number lists.

>
			 3 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Integer" #>@Integer(number)

>
			 3 1 0 0 0 0 0 1 0 0 0 0
Truncates a number to an integer.

>
			 4 0 0 0 0 0 0 1 0 0 0 0
@@Integer(numberlist)

>
			 4 1 0 0 0 0 0 1 0 0 0 0
Truncates the elements of a number list to integers.

>
			 5 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Round" #>@Round(number)

>
			 5 1 0 0 0 0 0 1 0 0 0 0
Rounds a number to the nearest integer.

>
			 6 0 0 0 0 0 0 1 0 0 0 0
@@Round(number; factor)

>
			 6 1 0 0 0 0 0 1 0 0 0 0
Rounds a number to the nearest specified factor.

>
			 7 0 0 0 0 0 0 1 0 0 0 0
@@Round(numberlist)

>
			 7 1 0 0 0 0 0 1 0 0 0 0
Rounds each number in a list  to the nearest integer.

>
			 8 0 0 0 0 0 0 1 0 0 0 0
@@Round(numlist; factor)

>
			 8 1 0 0 0 0 0 1 0 0 0 0
Rounds each number in a list  to the nearest specified factor.

>
			 9 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Max" #>@Max(number; number)

>
			 9 1 0 0 0 0 0 1 0 0 0 0
Calculates the larger of two numbers.

>
			 10 0 0 0 0 0 0 1 0 0 0 0
@@Max(numlist; numlist)

>
			 10 1 0 0 0 0 0 1 0 0 0 0
In a pairwise list operation, calculates the larger of two numbers.

>
			 11 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Min" #>@Min(number; number)

>
			 11 1 0 0 0 0 0 1 0 0 0 0
Calculates the smaller of two numbers.

>
			 12 0 0 0 0 0 0 1 0 0 0 0
@@Min(numlist; numlist)

>
			 12 1 0 0 0 0 0 1 0 0 0 0
In a pairwise list operation, calculates the smaller of two numbers.

>
			 13 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Modulo" #>@Modulo(number; number)

>
			 13 1 0 0 0 0 0 1 0 0 0 0
Calculates the remainder of a number divided by a second number.

>
			 14 0 0 0 0 0 0 1 0 0 0 0
@@Modulo(numlist; numlist)

>
			 14 1 0 0 0 0 0 1 0 0 0 0
In a pairwise list operation, calculates the remainder of a number divided by a second number.

>
			 15 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Power" #>@Power(base; exp)

>
			 15 1 0 0 0 0 0 1 0 0 0 0
Calculates the value of a base raised to the power of an exponent.

>
			 16 0 0 0 0 0 0 1 0 0 0 0
@@Sqrt(number)

>
			 16 1 0 0 0 0 0 1 0 0 0 0
Calculates the square root of a number.

>
			 17 0 0 0 0 0 0 1 0 0 0 0
@@Pi

>
			 17 1 0 0 0 0 0 1 0 0 0 0
Calculates the value of Pi.

>
			 18 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Log" #>@Log(number)

>
			 18 1 0 0 0 0 0 1 0 0 0 0
Calculates the common (base 10) logarithm of a number.

>
			 19 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Ln" #>@Ln(number)

>
			 19 1 0 0 0 0 0 1 0 0 0 0
Calculates the natural (base <+">e<-">) logarithm of a number.

>
			 20 0 0 0 0 0 4096 1 0 0 0 0
<:X8,0;Index "@Exp" #>@Exp(number)

>
			 20 1 0 0 0 0 4096 1 0 0 0 0
Calculates <+">e<-"> raised to the power of a number.

>
		[e]
	[tble]
[frm]
	3
	1573060
	720
	960
	7536
	6088
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	10
	7
	10752
	64000 64255
	[frmlay]
		3276
		6816
		1
		0
		0
		1
		960
		0
		0
		2
		0
		1
		0
		2286
		1
		1284
		5316
		0
	[tbl]
		 19 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 400 86 2 0 1 0
			 3 400 86 2 0 2 0
			 4 400 86 2 0 1 0
			 5 200 86 2 0 2 0
			 6 400 86 2 0 1 0
			 7 400 86 2 0 1 0
			 8 400 86 2 0 1 0
			 9 400 86 2 0 1 0
			 10 400 86 2 0 1 0
			 11 400 86 2 0 1 0
			 12 400 86 2 0 1 0
			 13 400 86 2 0 2 0
			 14 200 86 2 0 2 0
			 15 400 86 2 0 1 0
			 16 400 86 2 0 1 0
			 17 200 86 2 0 2 0
			 18 200 86 2 0 2 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4516 0 2 0
		[e]
		[data]
			 0 0 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Function

>
			 0 1 24 0 0 0 4352 1 0 0 0 0
@Table col hd@<+B>Description

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Elements" #>@Elements(list)

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Determines the number of elements in a list.

>
			 2 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Explode" #>@Explode(string)

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Converts a text string into a text list. Spaces, commas, and semicolons separate elements in the string.

>
			 3 0 0 0 0 0 0 1 0 0 0 0
@@Explode(string; separator)

>
			 3 1 0 0 0 0 0 1 0 0 0 0
As above but the second parameter specifies the separators for elements in the string.

>
			 4 0 0 0 0 0 0 1 0 0 0 0
@@Explode(string; separator; eachSeparator)

>
			 4 1 0 0 0 0 0 1 0 0 0 0
As above but ...<+"><+!>yyneed to complete<-!><-">

>
			 5 0 0 0 0 0 0 1 0 0 0 0
@@Explode(date-range)

>
			 5 1 0 0 0 0 0 1 0 0 0 0
Converts a date range into a list of dates.

>
			 6 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Implode" #>@Implode(list)

>
			 6 1 0 0 0 0 0 1 0 0 0 0
Converts a text list to a text string using spaces to separate elements.

>
			 7 0 0 0 0 0 0 1 0 0 0 0
@@Implode(list; separator)

>
			 7 1 0 0 0 0 0 1 0 0 0 0
As above but the second parameter specifies the separator for elements in the string.

>
			 8 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsMember" #>@IsMember(string; list)

>
			 8 1 0 0 0 0 0 1 0 0 0 0
Determines if a string is a member of a list. Returns true (1) or false (0).

>
			 9 0 0 0 0 0 0 1 0 0 0 0
@@IsMember(list1; list2)

>
			 9 1 0 0 0 0 0 1 0 0 0 0
Determines if a list is contained in another list. Returns true (1) or false (0).

>
			 10 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsNotMember" #>@IsNotMember(string; list)

>
			 10 1 0 0 0 0 0 1 0 0 0 0
Determines if a string is not a member of a list. Returns true (1) or false (0).

>
			 11 0 0 0 0 0 0 1 0 0 0 0
@@IsNotMember(list1; list2)

>
			 11 1 0 0 0 0 0 1 0 0 0 0
Determines if a list is not contained in another list. Returns true (1) or false (0).

>
			 12 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Keywords" #>@Keywords(list1; list2)

>
			 12 1 0 0 0 0 0 1 0 0 0 0
Locates words in the second list that match the first list. Word separators are " , ? ! ; : <[> ] { } << <;>

>
			 13 0 0 0 0 0 0 1 0 0 0 0
@@Keywords(list1; list2; separator)

>
			 13 1 0 0 0 0 0 1 0 0 0 0
As above but the second parameter specifies the word separators.

>
			 14 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Member" #>@Member(value; list)

>
			 14 1 0 0 0 0 0 1 0 0 0 0
Determines the position of a value in a string list.

>
			 15 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Replace" #>@Replace(list1; list2; list3) 

>
			 15 1 0 0 0 0 0 1 0 0 0 0
Replaces values in list1 that match values in list2 with the corresponding values in list3.

>
			 16 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Subset" #>@Subset(list; n)

>
			 16 1 0 0 0 0 0 1 0 0 0 0
Extracts n number of values from the list. Use -n to extract right to left.

>
			 17 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Unique" #>@Unique(list)

>
			 17 1 0 0 0 0 0 1 0 0 0 0
Removes duplicate values from a string list.

>
			 18 0 0 0 0 0 4096 1 0 0 0 0
@@Unique

>
			 18 1 0 0 0 0 4096 1 0 0 0 0
<+"><+!>yyneed description<-!><-">

>
		[e]
	[tble]
[frm]
	11
	1573060
	720
	960
	7536
	4802
	0
	1
	1
	1 0 0 0 0 0 0
	0
	16777215
	11
	8
	10752
	64000 64255
	[frmlay]
		3456
		6816
		1
		0
		0
		1
		960
		0
		0
		2
		0
		1
		0
		2286
		1
		1464
		5496
		0
	[tbl]
		 34 2 0 86 1440 0 1 43 43
		[h]
			 0 210 86 18 0 2 0
			 1 200 86 2 0 2 0
			 2 200 86 2 0 2 0
			 3 200 86 2 0 2 0
			 4 200 86 2 0 2 0
			 5 400 86 2 0 1 0
			 6 400 86 2 0 1 0
			 7 200 86 2 0 2 0
			 8 200 86 2 0 2 0
			 9 200 86 2 0 2 0
			 10 200 86 2 0 2 0
			 11 200 86 2 0 2 0
			 12 200 86 2 0 2 0
			 13 200 86 2 0 2 0
			 14 200 86 2 0 2 0
			 15 200 86 2 0 2 0
			 16 200 86 2 0 2 0
			 17 200 86 2 0 2 0
			 18 200 86 2 0 2 0
			 19 200 86 2 0 2 0
			 20 200 86 2 0 2 0
			 21 200 86 2 0 2 0
			 22 200 86 2 0 2 0
			 23 400 86 2 0 1 0
			 24 200 86 2 0 2 0
			 25 600 86 2 0 1 0
			 26 400 86 2 0 1 0
			 27 200 86 2 0 2 0
			 28 200 86 2 0 2 0
			 29 200 86 2 0 2 0
			 30 200 86 2 0 2 0
			 31 200 86 2 0 2 0
			 32 200 86 2 0 2 0
			 33 200 86 2 0 2 0
		[e]
		[w]
			 0 2257 0 2 0
			 1 4516 0 2 0
		[e]
		[data]
			 0 0 8 0 0 0 4352 1 0 0 0 0
@Table col hd@<+@>Restricted function

>
			 0 1 8 0 0 0 4352 1 0 0 0 0
@Table col hd@<+@>Notes objects that function is effective in

>
			 1 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@All" #>@All

>
			 1 1 0 0 0 0 0 1 0 0 0 0
Replication formula, agent, view selection formula

>
			 2 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@AllChildren" #>@AllChildren

>
			 2 1 0 0 0 0 0 1 0 0 0 0
Replication formula, view selection formula

>
			 3 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@AllDescendants" #>@AllDescendants

>
			 3 1 0 0 0 0 0 1 0 0 0 0
Replication formula, view selection formula

>
			 4 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Command" #>@Command

>
			 4 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, manual agent, button, hotspot

>
			 5 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DbColumn" #>@DbColumn

>
			 5 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, agent except mail, action, button, hotspot, field design

>
			 6 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DbLookup" #>@DbLookup

>
			 6 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, agent except mail, action, button, hotspot, field design

>
			 7 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DeleteDocument" #>@DeleteDocument

>
			 7 1 0 0 0 0 0 1 0 0 0 0
Agent

>
			 8 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DeleteField" #>@DeleteField

>
			 8 1 0 0 0 0 0 1 0 0 0 0
Agent

>
			 9 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DocChildren" #>@DocChildren

>
			 9 1 0 0 0 0 0 1 0 0 0 0
Column formula, window title formula

>
			 10 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DocDescendants" #>@DocDescendants

>
			 10 1 0 0 0 0 0 1 0 0 0 0
Column formula, window title formula

>
			 11 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DocLevel" #>@DocLevel

>
			 11 1 0 0 0 0 0 1 0 0 0 0
Column formula, window title formula

>
			 12 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DocMark" #>@DocMark

>
			 12 1 0 0 0 0 0 1 0 0 0 0
Agent

>
			 13 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DocNumber" #>@DocNumber

>
			 13 1 0 0 0 0 0 1 0 0 0 0
Column formula, window title formula

>
			 14 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DocParentNumber" #>@DocParentNumber

>
			 14 1 0 0 0 0 0 1 0 0 0 0
Column formula, window title formula

>
			 15 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@DocSiblings" #>@DocSiblings

>
			 15 1 0 0 0 0 0 1 0 0 0 0
Column formula, window title formula

>
			 16 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Failure" #>@Failure

>
			 16 1 0 0 0 0 0 1 0 0 0 0
Field validation formula

>
			 17 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsCategory" #>@IsCategory

>
			 17 1 0 0 0 0 0 1 0 0 0 0
Column formula

>
			 18 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsDocBeingLoaded" #>@IsDocBeingLoaded

>
			 18 1 0 0 0 0 0 1 0 0 0 0
Form design, field design

>
			 19 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsDocBeingMailed" #>@IsDocBeingMailed

>
			 19 1 0 0 0 0 0 1 0 0 0 0
Button, hotspot, field design

>
			 20 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsDocBeingRecalculated" #>@IsDocBeingRecalculated

>
			 20 1 0 0 0 0 0 1 0 0 0 0
Button, hotspot, field design

>
			 21 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsDocBeingSaved" #>@IsDocBeingSaved

>
			 21 1 0 0 0 0 0 1 0 0 0 0
Button, hotspot, field design

>
			 22 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsExpandable" #>@IsExpandable

>
			 22 1 0 0 0 0 0 1 0 0 0 0
Column formula

>
			 23 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@IsNewDoc" #>@IsNewDoc

>
			 23 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, button, window title formula, form design, field design

>
			 24 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@MailSend" #>@MailSend

>
			 24 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, agent, button

>
			 25 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Platform" #>@Platform

>
			 25 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, manual agent, button, hotspot, view design except selection and column formulas, form design, field design

>
			 26 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Prompt" #>@Prompt

>
			 26 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, manual agent, button, hotspot, field design

>
			 27 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Responses" #>@Responses

>
			 27 1 0 0 0 0 0 1 0 0 0 0
Window title formula, field design

>
			 28 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Return" #>@Return

>
			 28 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, agent, button, hotspot, field design

>
			 29 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "SELECT keyword" #>SELECT keyword

>
			 29 1 0 0 0 0 0 1 0 0 0 0
Replication formula, agent, view selection formula

>
			 30 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@SetField" #>@SetField

>
			 30 1 0 0 0 0 0 1 0 0 0 0
SmartIcons formula, agent, button, hotspot, field design

>
			 31 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Success" #>@Success

>
			 31 1 0 0 0 0 0 1 0 0 0 0
Validation formula

>
			 32 0 0 0 0 0 0 1 0 0 0 0
<:X8,0;Index "@Unavailable" #>@Unavailable

>
			 32 1 0 0 0 0 0 1 0 0 0 0
Agent

>
			 33 0 0 0 0 0 4096 1 0 0 0 0
<:X8,0;Index "@ViewTitle" #>@ViewTitle

>
			 33 1 0 0 0 0 4096 1 0 0 0 0
Agent

>
		[e]
	[tble]
[lay]
	Standard
	3079
	[rght]
		12960
		10166
		1
		960
		1200
		3
		960
		720
		0
		1
		0
		1
		0
		2
		1
		960
		9446
		1
		1
		3120
	[lft]
		12960
		10166
		1
		720
		1200
		3
		960
		960
		0
		1
		0
		1
		0
		2
		1
		720
		9206
		1
		1
		3120
	[hlft]
	[lyfrm]
		1
		3008
		0
		0
		10166
		960
		0
		1
		3
		1 0 0 0 0 0 0
		0
		0
		3
	[frmlay]
		960
		10166
		1
		720
		180
		3
		0
		960
		0
		1
		0
		1
		1
		0
		1
		720
		9206
		1
		2
		4674
	[txt]
>
	[hrght]
	[lyfrm]
		1
		11200
		0
		0
		10166
		960
		0
		1
		3
		1 0 0 0 0 0 0
		0
		0
		1
	[frmlay]
		960
		10166
		1
		960
		180
		3
		0
		720
		0
		1
		0
		1
		1
		0
		1
		960
		9446
		1
		2
		4674
	[txt]
>
	[flft]
	[lyfrm]
		1
		5056
		0
		11760
		10166
		12960
		0
		1
		3
		1 0 0 0 0 0 0
		0
		0
		4
	[frmlay]
		12960
		10166
		1
		720
		480
		3
		11940
		960
		0
		1
		0
		1
		1
		0
		1
		720
		9206
		1
		3
		9900
	[txt]
@Left pg foot@<:R1,1,3,8486,><:P19999,0,6-> Programmer's Guide	Lotus Confidential

>
	[frght]
	[lyfrm]
		1
		13248
		0
		11760
		10166
		12960
		0
		1
		3
		1 0 0 0 0 0 0
		0
		0
		2
	[frmlay]
		12960
		10166
		1
		960
		480
		3
		11940
		720
		0
		1
		0
		1
		1
		0
		1
		960
		9446
		1
		3
		9900
	[txt]
@Right pg foot@<:R1,1,3,8486,>Lotus Confidential	Formulas: Using the Notes Formula Language <:P19999,0,6->

>
[elay]
[l1]
	0
[pg]
	28
	31 0 96 32 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	54 0 2 0 64 0 0 40 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	72 0 5 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 8 0 0
	85 0 20 0 1 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	110 0 22 0 1 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	133 0 52 0 0 0 0 200 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	160 320 63 32 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	186 215 55 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	208 343 33 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	234 180 16 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	262 0 75 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	282 113 39 32 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	287 0 5 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 24 0 0
	305 0 22 0 0 0 0 200 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	322 99 101 32 0 0 0 65535 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	341 28 71 32 0 0 0 200 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	365 212 34 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	377 0 5 0 0 0 0 200 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 12 0 0
	391 0 69 32 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	405 0 2 32 64 0 0 40 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	433 0 5 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 2 0 0
	442 37 71 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	467 0 20 0 1 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	490 87 48 32 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	497 65534 4 0 64 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	519 0 5 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 1 0 0
	547 0 9 0 0 0 0 194 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
	574 0 20 1025 3 0 0 200 65535 Standard	65535 0 0	0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
[edoc]
@Ahead@<:S+194><:#194,8486><:f280,BArial,0,0,0>6. <:f><+!><:f280,,>Formulas: Using<-!><:f><+!><:f280,,> the Notes Formula Language<-!><:f>

<:S+194><:#194,8486>

<:S+194><:#582,8486>Notes formulas are expressions that have program-like attributes. For example, you can assign values to variables and use a limited control logic. The formula language interface to Notes is through calls to @functions. @Commands, a subset of the @functions,
 provide access to the user interface.

@Ahead@<:S+194><:#194,8486><-!>Ways to write formulas

<:S+194><:#582,8486>A formula consists of one or more statements that are executed in order. Depending on the object associated with the formula and other criteria, the formula may execute once or it may execute multiple times on selected documents (one execution per document)
.

<:S+194><:#388,8486>Formulas do not have language elements for loop iteration and transfers of control except for returning from the formula. Conditional path execution is limited.

<:S+194><:#388,8486>Agent formulas execute multiple times on selected documents giving the effect of conditional, iterative execution. Data can be processed in lists giving the effect of conditional, iterative execution.

<:S+194><:#194,8486>You can:

@Bullet@<:#400,8486><+)>Write formulas that evaluate to a result<-)><+*>H_WRITING_FORMULAS_THAT_EVALUATE_TO_A_RESULT<-*>

@Bullet@<:#200,8486><+)>Write formulas that perform actions<-)><+*>H_WRITING_FORMULAS_THAT_PERFORM_ACTIONS<-*>

@Bullet@<:#200,8486><+)>Work with lists<-)><+*>H_WORKING_WITH_LISTS<-*>

@Bullet@<:#200,8486><+)>Use conditional statement<-)><+)>s<-)><+*>H_USING_CONDITIONAL_STATEMENTS<-*>

@Bullet@<:#400,8486><+)>W<-)><+)>rite<-)><+)> messages and solicit user input<-)><+*>H_WAYS_TO_WRITE_MESSAGES_AND_ GET_USER_INPUT<-*>

@Bullet@<:#200,8486><+)>Handle errors<-)><+*>H_HANDLING_ERRORS<-*>

@Bullet@<:#200,8486><+)>Work with @commands<-)><+*>H_WORKING_WITH_@COMMANDS<-*>

@Bhead title@<:S+194><:#194,8486>Writing formulas that evaluate to a result

<:S+194><:#194,8486><:X8,-32768;Index "formula" # "that evaluates to a result">The final statement of the following formulas must evaluate to a result:

@Bullet@<:S+194><:#388,8486>Replication formula<:X8,-32768;Index "Replication formula" #>--must evaluate to true (1) or false (0), and is applied to each document in the database.

@Bullet@<:S+194><:#194,8486>Form formula<:X8,-32768;Index "Form formula" #>--must evaluate to the name of a form.

@Bullet@<:S+194><:#194,8486>Selection formula<:X8,-32768;Index "Selection formula" #>--must evaluate to true (1) or false (0), and is applied to each document in the view.

@Bullet@<:S+194><:#194,8486>Column formula<:X8,-32768;Index "Column formula" #>--must evaluate to a value that can be converted to a text string.

@Bullet@<:S+194><:#194,8486>Show action formula<:X8,-32768;Index "Show action formula" #>--must evaluate to true (1) or false (0).

@Bullet@<:S+194><:#194,8486>Hotspot pop-up text from a formula<:X8,-32768;Index "Hotspot pop-up text from a formula" #>--must evaluate to a text string.

@Bullet@<:S+194><:#388,8486>Window title formula<:X8,-32768;Index "Window title formula" #>--must evaluate to a text or numeric value except that the formula can consist of a single field of any type.

@Bullet@<:S+194><:#194,8486>Section access formula<:X8,-32768;Index "Section access formula" #>--must evaluate to a name or list of names.

@Bullet@<:S+194><:#388,8486>Section title formula<:X8,-32768;Index "Section title formula" #>--must evaluate to a text or numeric value except that the formula can consist of a single field of any type.

@Bullet@<:S+194><:#194,8486>Hidden paragraph formula<:X8,-32768;Index "Hidden paragraph formula" #>--must evaluate to true (1) or false (0).

@Bullet@<:S+194><:#194,8486>Default value formula<:X8,-32768;Index "Default value formula" #>--must evaluate to a value suitable for storage in the current field.

@Bullet@<:S+194><:#194,8486>Input translation formula<:X8,-32768;Index "Input translation formula" #>--must evaluate to a value suitable for storage in the current field.

@Bullet@<:S+194><:#194,8486>Default validation formula<:X8,-32768;Index "Default validation formula" #>--must evaluate to success (1) or failure (0).

@Bullet@<:S+194><:#194,8486>Computed field formula<:X8,-32768;Index "Computed field formula" #>--must evaluate to a value suitable for storage in the current field.

@Bullet@<:S+194><:#388,8486>Keyword field formula<:X8,-32768;Index "Keyword field formula" #>--must evaluate to a value or list of values suitable for storage in the current field.

<:S+194><:#582,8486>These formulas may be as simple as a single field, constant, or @function, or may contain multiple statements, use temporary variables, modify fields, and produce side-effects. In all cases, however,  their final statement must be a value suitable for the r
esult.

<:S+194><:#970,8486>The keyword SELECT<:X8,-32768;Index "SELECT keyword" #> is prepended to the logical statement that terminates a replication or selection formula if SELECT is not explicitly specified. These formulas run against every document in the database (replication fo
rmula) or view (selection formula) to determine their inclusion or exclusion in the replication process or the view. The @All function<:X8,-32768;Index "@All function" #> returns the value true so the formula "SELECT @All" includes all documents.

@See also hlp@<:#110,8486>

@See also btn@<:S+194><:#388,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_WRITING_FORMULAS_THAT_EVALUATE_TO_A_RESULT<-*>

@Chead title@<:#200,8486>Examples: writing formulas that evaluate to a result

@Dhead@<:#200,8486>Example 1

<:#400,8486>This example is the default value formula for the From field in a standard discussion database. It consists of a single @function that returns the user's name.

@Mono@<:#200,8486>@UserName

@Dhead@<:#200,8486>Example 2

<:#800,8486>This example is an adaptation of the input validation formula for the Subject field in a standard discussion database. It consists of an @If function that returns failure if the Subject field is blank (the user did not enter a value) and success if the Subj
ect field contains something. The failure condition has the side-effect of printing a message.

@Mono@<:#400,8486>@If(Subject = ""; @Failure("You must enter a subject for your document."); @Success)

@Dhead@<:#200,8486>Example 3

<:#1200,8486>This example is an adaptation of the window title formula for the Memo form in a standard discussion database. It is a single statement but contains embedded @If commands. If the current document is new, the window title becomes "New Memo." If the current d
ocument already existed and the Subject field exists and is not blank, the window title becomes the value of the Subject field, prepended by "<;><;> " if it has attachments. If the Subject field does not exist or is blank, the window title becomes the creat
ion date.

@Mono@<:#400,8486>@If(@IsNewDoc; "New Memo"; @If(@IsAvailable(Subject) & Subject != ""; @If(@Attachments; "</{> "; "") + Subject; @Text(@Created)))

@Bhead title@<:#220,8486>Writing formulas that perform actions

<:S+194><:#388,8486><:X8,-32768;Index "formula" # "that performs an action">The following formulas do not evaluate to a final, usable result but depend on their field assignments and side-effects for function:

@Bullet@<:S+194><:#194,8486>SmartIcons formula<:X8,-32768;Index "SmartIcons formula" #>--executes once on the workspace when triggered.

@Bullet@<:S+194><:#582,8486>Agent formula<:X8,-32768;Index "Agent formula" #>--executes on a database when triggered. An agent formula executes once on each selected document as determined by criteria specified in the UI and a SELECT statement included in the formula. The SELECT state
ment defaults to SELECT @All.

@Bullet@<:S+194><:#194,8486>Action formula<:X8,-32768;Index "Action formula" #>--executes on a view or form when triggered.

@Bullet@<:S+194><:#194,8486>Button formula<:X8,-32768;Index "Button formula" #>--executes on a form, navigator, or rich text field when triggered.

@Bullet@<:S+194><:#194,8486>Hotspot formula<:X8,-32768;Index "Hotspot formula" #>--executes on a form, navigator, or rich text field when triggered.

@See also hlp@<:#110,8486><+)>

@See also btn@<:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See e<-)><+)>xamples<-)><+*>H_EXAMPLE_WRITING_FORMULAS_THAT_PERFORM_ACTIONS<-*>

@Chead title@<:#200,8486>Examples: writing formulas that perform actions

@Dhead@<:#200,8486>Example 1

<:#1000,8486>This agent example substitutes "Wayside Drive" for "Wayside Street" in the Address field of documents based on Main Form. The effective action is the FIELD Address assignment. If Address contains "Wayside Street," the new Address consists of the characters 
to the left of "Wayside Street," the string "Wayside Drive," and the characters to the right of "Wayside Street." Otherwise, Address is reset to its current value.

@Mono@<:#1000,8486><**>SELECT Form = "Main Form";<**>ws := "Wayside Street";<**>wd := "Wayside Drive";<**>FIELD Address := @If(@Contains(Address; ws); @Left(Address; ws) + wd +<**>@Right(Address; ws); Address)

@Dhead@<:#200,8486>Example 2

<:#200,8486><+"><+!>get button-mail example from time-out database<-!><-">

@Mono@<:#200,8486>

@Bhead title@<+C><:S+194><:#194,8486>Working with lists

<+C><:S+194><:#194,8486>A list<:X8,-32768;Index "List" # "in formula"> is a named entity that can contain multiple values of the same type. Lists occur as follows:

@Bullet@<+C><:S+194><:#194,8486>A field that allows multiple values may contain a list rather than a scalar value.

@Bullet@<+C><:S+194><:#194,8486>Some @functions return a list.

@Bullet@<+C><:S+194><:#582,8486>Constants can be specified as lists as well as scalar values. The syntax is multiple scalar constants separated by colons; for example, "London" : "New York" : "Tokyo" is a string list constant of three elements.

@Bullet@<:#200,8486><+)>Operators<-)><+*>H_OPERATIONS_ON_LISTS<-*> combine lists on a pair-wise or permuted basis.

@See also prnt@<:#200,8486>See "Operations on lists" in Chapter 5.

<+C><:S+194><:#388,8486>Lists provide limited iteration because a list operation applies the operation to each element of the list, like processing an array in a loop.

<+C><:S+194><:#194,8486>The following @functions deal specifically with lists.

<+C><:S+194><:t7>

@See also hlp@<+@><:#110,8486><+)>

@See also btn@<+@><:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_WORKING_WITH_LISTS<-*>

@Chead title@<:S+194><:#194,8486>Examples: working with lists

@Dhead@<:S+194><:#194,8486>Example 1 (pair-wise operation)

<:S+194><:#388,8486>This example adds two numeric lists in a pair-wise operation. The resulting list has the 4 values 11, 22, 33, and 44.

@Mono@<:S+194><:#970,8486>list1 := 10 : 20 : 30 : 40;<**>list2 := 1 : 2 : 3 : 4;<**>list3 := list1 + list2;<**>result := @Text(list1) + " + " + @Text(list2) + " = " + @Text(list3);<**>@Prompt(<[>OKCANCELLIST]; "Result"; ""; ""; result)

@Dhead@<:S+194><:#194,8486>Example 2 (permuted operation)

This example concatenates two lists in a permuted operation. The resulting list has the 12 values Blue Sedan, Blue Coupe, Blue Van, Blue Truck, Red Sedan, and so on through Yellow Truck.<-!>

@Mono@<:S+194><:#776,8486>cars := "Sedan" : "Coupe" : "Van" : "Truck";<**>colors := "Blue" : "Red" : "Yellow";<**>result := colors + " " *+ cars;<**>@Prompt(<[>OKCANCELLIST]; "Result"; ""; ""; result)

@Dhead@<:S+194><:#194,8486>Example 3 (@Elements)

<:S+194><:#194,8486>This example prints a message if the Categories field has no elements and prints the list if it does.

@Mono@<:S+194><:#388,8486>@If(@Elements(Categories) = 0; @Prompt(<[>OK]; "Categories"; "No categories");<**>@Prompt(<[>OKCANCELLIST]; "Categories"; ""; ""; Categories))

@Dhead@<:S+194><:#194,8486>Example 4 (@Explode)

<:S+194><:#388,8486>This example explodes a string constant into a list using the default separators space, comma, and semicolon. The resulting list has the values Paris, London, Chicago, and Seoul.

@Mono@<:S+194><:#388,8486>cityList := @Explode("Paris London,Chicago;Seoul");<**>@Prompt(<[>OKCANCELLIST]; "List of cities"; ""; ""; cityList)

@Dhead@<:S+194><:#194,8486>Example 5 (@Explode)

<:S+194><:#582,8486>This example explodes a string constant into a list using the separators comma and semicolon. The resulting list has the values Paris, London, New York, and Hong Kong. New York and Hong Kong are kept intact because the space is not included as a separator.

@Mono@<:S+194><:#388,8486>cityList := @Explode("Paris,London,New York;Hong Kong"; ",;");<**>@Prompt(<[>OKCANCELLIST]; "List of cities"; ""; ""; cityList)

@Dhead@<:S+194><:#194,8486>Example 6 (@Explode)

<:S+194><:#194,8486><+"><+!>yyneed explode with 3 params<-!><-">

@Dhead@<:S+194><:#194,8486>Example 7 (@Explode)

<:S+194><:#194,8486><+"><+!>yyneed explode time-date<-!><-">

@Dhead@<:S+194><:#194,8486>Example 8 (@Implode)

<:S+194><:#388,8486>This example implodes a list constant into a string variable using a space (the default) to separate the values. The resulting string has the value: Minneapolis Detroit Chicago.

@Mono@<:S+194><:#582,8486>city := "Minneapolis" : "Detroit" : "Chicago";<**>cityString := @Implode(city);<**>@Prompt(<[>OK]; "Imploded string"; cityString)

@Dhead@<:S+194><:#194,8486>Example 9 (@Implode)

<:S+194><:#388,8486>This example implodes a list constant into a string variable using a comma and a space to separate the values. The resulting string has the value: Minneapolis, Detroit, Chicago.

@Mono@<:S+194><:#582,8486>city := "Minneapolis" : "Detroit" : "Chicago";<**>cityString := @Implode(city; ", ");<**>@Prompt(<[>OK]; "Imploded string"; cityString)

@Dhead@<:S+194><:#194,8486>Example 10 (@Implode)

<:S+194><:#388,8486>This example implodes a list field into a string using a colon to separate the values. If the Categories field is entered as Minneapolis, Detroit, Chicago, the resulting string is Minneapolis:Detroit:Chicago.

@Mono@<:S+194><:#194,8486>@Prompt(<[>OK]; "Categories"; @Implode(Categories; ":"))

@Dhead@<:S+194><:#194,8486>Example 11 (IsMember)

<:S+194><:#388,8486>This agent example checks the selected documents to see if Adjusted is in the Categories list. If  it is, Categories remains the same. If it is not, Adjusted is added to the Categories list.

@Mono@<:S+194><:#582,8486>FIELD Categories := @If(@IsMember("Adjusted"; Categories); Categories; @Explode(@Implode(Categories; ";") + ";Adjusted"; ";"));<**>SELECT @All

@Dhead@<:S+194><:#194,8486>Example 12 (@IsNotMember)

<:S+194><:#388,8486>This example checks the selected documents to see if Adjusted and Signed off are in the Categories list. If both are not, both are added to the Categories list. If both are, Categories remains the same.

@Mono@<:S+194><:#776,8486>FIELD Categories := @If(@IsNotMember("Adjusted" : "Signed off"; Categories); @Explode(@Implode(Categories; ";") + ";Adjusted;Signed off"; ";"); Categories);<**>SELECT @All

@Dhead@<:S+194><:#194,8486>Example 13 (@Keywords)

<:S+194><:#194,8486>This example finds which keywords are used in a list.<+"><+!>yychange example<-!><-">

@Mono@<:S+194><:#1164,8486>list := "EPA head speaks at Harvard, Yale" : "UCLA Chancellor Retires" : "Ohio State wins big game" : "Reed and University of Oregon share research facilities";<**>keywords := "Harvard" : "Brown" : "Stanford" : "Yale" : "Vassar" : "UCLA"; values := @Keyword
s(list; keywords);<**>@Prompt(<[>OKCANCELLIST]; "Keywords found"; ""; ""; values)

@Dhead@<:S+194><:#194,8486>Example 14 (@Member)

<:S+194>This example has the user pick a value from a list and displays the number of that value within the list.<-!>

@Mono@<:S+194><:#776,8486>cars := "Sedan" : "Coupe" : "Van" : "Truck";<**>car := @Prompt(<[>OKCANCELLIST]; "Cars"; "Pick one"; "Sedan"; cars);<**>n := @Member(car; cars);<**>@Prompt(<[>OK]; "Your selection is ..."; "Number " + @Text(n))

@Dhead@<:S+194><:#194,8486>Example 15 (@Replace)

<:S+194><:#194,8486>This example replaces red with scarlet and blue with turquoise in the list derived from colors.

@Mono@<:S+194><:#970,8486>colors := "red" : "blue" : "yellow" : "blue" : "black" : "red";<**>from := "red" : "blue";<**>to := "scarlet" : "turquoise";<**>result := @Replace(colors; from; to);<**>@Prompt(<[>OKCANCELLIST] : <[>NoSort]; "Replacement list"; ""; ""; result)

@Dhead@<:S+194><:#194,8486>Example 16 (@Subset)

<:S+194><:#388,8486>This example places New Orleans, London, and Frankfurt into first3, and Singapore and Sydney into last2.

@Mono@<:S+194><:#970,8486>cities := "New Orleans" : "London" : "Frankfurt" : "Singapore" :"Sydney";<**>first3 := @Subset(cities; 3);<**>last2 := @Subset(cities; -2);<**>@Prompt(<[>OKCANCELLIST] : <[>NoSort]; "First three"; ""; ""; first3);<**>@Prompt(<[>OKCANCELLIST] : <[>NoSort]; "
Last two"; ""; ""; last2)

@Dhead@<:S+194><:#194,8486>Example 17 (@Unique)

<:S+194><:#194,8486>This example returns a list with four elements: red, blue, yellow, and black.

@Mono@<:S+194><:#582,8486>colors := "red" : "blue" : "yellow" : "blue" : "black" : "red";<**>result := @Unique(colors);<**>@Prompt(<[>OKCANCELLIST] : <[>NoSort]; "Unique list"; ""; ""; result)

@Bhead title@<+C><:S+194><:#194,8486>Using conditional statements

<+C><:S+194><:#582,8486><:X8,-32768;Index "Conditional statement" #><:X8,-32768;Index "@If" #>@If lets you execute one statement or another depending on whether a condition is true or false. A condition is typically the comparison of values, but can also be a constant, a variable,
 or the result of an @function. For example:

@Bullet@<+C><:S+194><:#194,8486>@ViewTitle = "By Author" is true if the name of the current view is "By Author."

@Bullet@<:S+194><:#194,8486>@Elements(Categories) <;> 0 is true if Categories has at least one element.

@Bullet@<:S+194><:#388,8486>1 used as a condition means true. @True and @Yes return 1. Comparisons and @functions that evaluate to a condition return 1 if the condition is true.

@Bullet@<:S+194><:#388,8486>0 used as a condition means false. @False and @No return 0. Comparisons and @functions that evaluate to a condition return 0 if the condition is false.

@See also prnt@<:#200,8486>See "Ways to use operators" in Chapter 5 for more information on conditional operators.

@See also btn@<:#200,8486>

@Crossref@<:#200,8486><+)>Ways to use operators<-)><+*>H_WAYS_TO_USE_OPERATORS<-*>

<+@><:S+194><:#194,8486>The @If statement has an odd number of parameters with a minimum of three, as follows:

@Bullet@<+@><:S+194><:#388,8486>The condition is the first parameter and every other parameter thereafter if the @If statement has multiple conditions.

@Bullet@<+@><:S+194><:#388,8486>The statement that is executed if the condition is true is the second parameter and every other parameter thereafter if the @If statement has multiple conditions.

@Bullet@<+@><:S+194><:#194,8486>The statement that is executed if the condition is false is the last parameter.

<+@><:S+194><:#194,8486>The simplest @If statement has the following syntax:

@1st lev para@<+@><:S+194><:#194,8486>@If(<+">condition<-">; <+">true statement<-">; <+">false statement<-">)

<+@><:S+194><:#194,8486>An @If statement with three conditions has the following syntax:

@1st lev para@<+@><:S+194><:#194,8486>@If(<+">condition1<-">; <+">true1<-">; <+">condition<-"><+">2<-">; 
<+">true2<-">; <+">condition3<-">; <+">true3<-">; <+">false<-">)

<+@><:S+194><:#776,8486>@@If is evaluated left to right and the first condition that is true causes its corresponding true statement (that is, the next parameter) to be processed. No further evaluation or processing within the @If statement takes place. If none of the conditions ar
e true, the false statement (that is, the last parameter) is processed.

<+@><:S+194><:#194,8486>The true and false statements take various forms depending on  their context:

@Bullet@<+@><:S+194><:#388,8486>If the @If statement is the last statement in a formula that evaluates to a result, the true and false statements must evaluate to a result.

@Bullet@<+@><:S+194><:#388,8486>If the @If statement is the righthand side of an assignment, the true and false statements must evaluate to a value suitable to assignment to the field or temporary variable on the lefthand side.

@Bullet@<+@><:S+194><:#194,8486>Otherwise, the true and false statements must cause an action.

<+@><:S+194><:#388,8486>A true or false statement in @If cannot contain an assignment. The lefthand side of an assignment can occur only at the beginning of an outermost statement in a formula. The following syntax is illegal:

@1st lev para@<+@><:S+194><:#194,8486><+%>@If(<+">condition<-">; <+">variable<-"> := <+">value1<-">; <+">variable<-"> := 
<+">value2<-">)<-%>

<+@><:S+194><:#194,8486>You must rewrite it as:

@1st lev para@<+@><:S+194><:#194,8486><+">variable<-"> := @If(<+">condition<-">; <+">value1<-">; <+">value2<-">)

<+@><:S+194><:#388,8486>The parameters of @If can themselves be @If statements. <:X8,-32768;Index "Nested @If" #>Nested @If statements are useful to work around the limited logic constructs in the formula language but make for complicated syntax.

<+@><:S+194><:#194,8486>@@Do provides a means to execute multiple statements on a true or false condition.

@See also hlp@<+@><:S+194><:#264,8486><+)>

@See also btn@<+@><:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_USING_CONDITIONAL_STATEMENTS<-*>

@Chead title@<:S+194><:#194,8486>Examples: using conditional statements

@Dhead@<:S+194><:#194,8486>Example 1

<:S+194><:#388,8486>This agent example compares the number of elements in Categories to 0. If the field has elements, it is not changed (it is set to itself). If the field does not have elements, it is set to a constant string.

@Mono@<:S+194><:#582,8486>FIELD Categories := @If(@Elements(Categories) <;> 0; Categories; "To be supplied ...");<**>SELECT @All

@Dhead@<:S+194><:#194,8486>Example 2

<:S+194><:#776,8486>This window title example first checks the return value of @IsNewDoc. If the document is new, the window title is set to the text constant "New Topic." If the document already exists, the window title is set to the Subject field if the current view is Autho
rView. Otherwise, the window title is set to the Subject field followed by a string denoting the number of response documents.

@Mono@<:S+194><:#776,8486>StandardTitle := Subject + @DocDescendants(" (No Responses)"; " (1 Response)"; " (% Responses)");<**>@If(@IsNewDoc; "New Topic"; @ViewTitle = "AuthorView"; Subject; StandardTitle)

@Dhead@<:S+194><:#194,8486>Example 3

<:S+194><:#194,8486><+"><+!>yyNEED MORE EXAMPLES: WITH LOGICAL OR OR AND; NESTED @IF; @DO<-!><-">

@Bhead title@<+C><:S+194><:#194,8486>Ways to write messages and get user input

<+C><:S+194><:#194,8486><+"><+!>yyneed intro<-!><-">

@Bullet@<:#200,8486><+)>Write messages with @Prompt<-)><+*>H_WRITING_MESSAGES_WITH_PROMPT<-*>

@Bullet@<:#200,8486><+)>Get user input with @Prompt<-)><+*>H_GETTING_USER_INPUT_WITH_PROMPT<-*>

@Bullet@<:#200,8486><+)>Get and set environment variables<-)><+*>H_GETTING_AND_SETTING_ENVIRONMENT_VARIABLES<-*>

@Chead title@<+C><:S+194><:#194,8486>Writing messages with @Prompt

<+C><:S+194><:#194,8486><:X8,-32768;Index "Write message" # "in formula"><:X8,-32768;Index "@Prompt" #>Use the following forms of @Prompt to write messages to an interactive user:

@Bullet@<+C><:S+194><:#388,8486><:X8,-32768;Index "@Prompt([OK]" #>@Prompt(<[>OK]; <+">title<-">; 
<+">prompt<-">) displays an informational dialog box with the title text at the top of the box and the prompt text in the body of the box.

@Bullet@<+C><:S+194><:#1164,8486><:X8,-32768;Index "@Prompt([OKCANCELLIST]" #>@Prompt(<[>OKCANCELLIST] : <[>NOSORT]; 
<+">title<-">; <+">prompt<-">; <+">default<-">; <+">choices<-">) displays a box with the title text at the top of the box, the prompt text in the body of the box, and the choices text list below the prompt text. This form of @Prompt is primarily for getting
 input but can be used for display purposes. The last parameter must be a text list. The prompt and default parameters can be empty. However, if this statement is not the last statement in the formula and the user selects the Cancel button, the rest of the 
formula is not executed. Do not specify <[>NOSORT] if you want the list sorted.

<+C><:S+194><:#388,8486>Non-text values must be converted with @Text to be used as @Prompt parameters. The text values can be constants, temporary variables, fields, or expressions.

@See also hlp@<+@><:S+194><:#264,8486><+)>

@See also btn@<+@><:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_WRITING_MESSAGES_WITH_PROMPT<-*>

@Chead title@<:S+194><:#194,8486>Examples: writing messages with @Prompt

@Dhead@<:S+194><:#194,8486>Example 1

<+@><:S+194><:#388,8486>This example writes a text constant as the title and a text expression in the dialog box. The expression is a concatenation of text constants and time-date values converted to text.

@Mono@<+@><:S+194><:#388,8486>@Prompt(<[>OK]; "Current time and date"; "The date is " + @Text(@Now; "D0S0") + ". " + "The time is " + @Text(@Now; "T0S1") + ".")

@Dhead@<+@><:S+194><:#194,8486>Example 2

<+@><:S+194><:#388,8486>This example writes a text constant as the title. The content of the box is a text constant followed by the value of a multi-value field.

@Mono@<+@><:S+194><:#388,8486>@Prompt(<[>OKCANCELLIST] : <[>NoSort]; "Field offices"; "Current field offices are located in the following cities:"; ""; Field_offices)

@Chead title@<+C><:S+194><:#194,8486>Getting user input with @Prompt

<+C><:S+194><:#194,8486><:X8,-32768;Index "Get user input" # "in formula"><:X8,-32768;Index "Input from user" # "in formula">Use the following forms of @Prompt to get input from an interactive user:

@Bullet@<+C><:S+194><:#388,8486><:X8,-32768;Index "@Prompt([YESNO]" #>@Prompt(<[>YESNO]; <+">title<-">; 
<+">prompt<-">) displays a dialog box with title text,  prompt text, and Yes and No buttons. @Prompt returns true (1) if the user clicks Yes and false (0) if the user clicks No.

@Bullet@<+C><:S+194><:#582,8486><:X8,-32768;Index "@Prompt([OKCANCELEDIT]" #>@Prompt(<[>OKCANCELEDIT]; 
<+">title<-">; <+">prompt<-">, <+">default<-">) displays a dialog box with title text, prompt text, and a box in which the user can type. @Prompt returns what the user types as a text value. If the user clicks Cancel, the formula terminates immediately.

@Bullet@<+C><:S+194><:#970,8486><:X8,-32768;Index "@Prompt([OKCANCELLIST]" #>@Prompt(<[>OKCANCELLIST] : <[>NOSORT]; 
<+">title<-">; <+">prompt<-">; <+">default<-">; <+">choices<-">) displays a box with the title text at the top of the box, the prompt text in the body of the box, and the choices text list below the prompt text, with the default highlighted. The last parame
ter must be a text list. @Prompt returns the list element the user selects. If the user clicks Cancel, the formula terminates immediately. Do not specify <[>NOSORT] if you want the list sorted.

@Bullet@<+C><:S+194><:#388,8486><:X8,-32768;Index "@Prompt([OKCANCELCOMBO]" #>@Prompt(<[>OKCANCELCOMBO]; 
<+">title<-">; <+">prompt<-">; <+">default<-">; <+">choices<-">) is as above but uses a drop-down list with the default in the box above the list.

@Bullet@<+C><:S+194><:#388,8486><:X8,-32768;Index "@Prompt([OKCANCELEDITCOMBO]" #>@Prompt(<[>OKCANCELEDITCOMBO]; 
<+">title<-">; <+">prompt<-">; <+">default<-">; <+">choices<-">) is as above but lets the user enter a value in the box above the list or select a value from the list.

@Bullet@<+C><:S+194><:#388,8486><:X8,-32768;Index "@Prompt([OKCANCELLISTMULT]" #>@Prompt(<[>OKCANCELLISTMULT]; 
<+">title<-">; <+">prompt<-">; <+">default<-">; <+">choices<-">) is like OKCANCELLIST but allows the user to select multiple list elements and returns a list.

@Bullet@<+C><:I0,360,360,0><:R1,2,1,720,1,1080,><:#200,8486><:X8,-32768;Index "@Prompt([PASSWORD]" #>@Prompt(<[>PASSWORD]; <+">title<-">; 
<+">prompt<-">) <+"><+!>yyhave to test<-!><-">.

<+C><:S+194><:R><:#388,8486>Non-text values must be converted with @Text to be used as @Prompt parameters. The text values can be constants, temporary variables, fields, or expressions.

<+C><:S+194><:#194,8486>The return value must be converted if it is to be used as a non-text value.

@See also hlp@<+@><:S+194><:#264,8486><+)>

@See also btn@<+@><:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_GETTING_USER_INPUT_WITH_PROMPT<-*>

@Chead title@<:S+194><:#194,8486>Examples: getting user input with @Prompt

@Dhead@<:S+194><:#194,8486>Example 1 (YESNO)

<:S+194><:#388,8486>This validation formula queries the user concerning the TotalAmount field. If the user clicks No, a failure message is posted.

@Mono@<+@><:S+194><:#388,8486>@If(@Prompt(<[>YESNO]; "Is this total within budget?"; @Text(TotalAmount; "C")); @Success; @Failure("Total not within budget"))

@Dhead@<+@><:S+194><:#194,8486>Example 2 (OKCANCELEDIT)

<+@><:S+194><:#388,8486>This button formula queries the user for a server and database, and opens the database. If the user clicks Yes without first entering a value in the edit box, the value returned is an empty string.

@Mono@<:S+194><:#1164,8486>server := @Prompt(<[>OKCANCELEDIT]; "Server"; "Enter the name of a server"; "");<**>database0 := @Prompt(<[>OKCANCELEDIT]; "Database"; "Enter the name of a database on " + @If(server = ""; "your workstation"; server); "");<**>database := @If(@Contains(datab
ase0; "."); database0; database0 + ".nsf");<**>@Command(<[>FileOpenDatabase]; server : database)

@Dhead@<:S+194><:#194,8486>Example 3 (OKCANCELLIST)

<:S+194><:#194,8486><+"><+!>yyput in open db from catalog.nsf example<-!><-">

<:S+194><:#194,8486>

@Dhead@<:S+194><:#194,8486>Example 4 (OKCANCELLISTMULT)

<:S+194><:#388,8486>This button formula presents the user a list of department names and sales totals. The user selects any number of elements from the list and formula calculates a grand total.

@Mono@<:S+194><:#1358,8486>departments := @DbColumn(""; "" : "sales.nsf"; "Main View"; 1);<**>totalSales := @DbColumn(""; "" : "sales.nsf"; "Main View"; 2);<**>totalsList := @Text(totalSales; "C") + "   " + departments;<**>sumList := @Prompt(<[>OKCANCELLISTMULT]; "Total sales by depa
rtment"; "Select the ones you want to sum"; ""; totalsList);<**>sum := @Sum(@TextToNumber(sumList));<**>@Prompt(<[>OK]; "Sum"; @Text(sum))

@Chead title@<+C><:S+194><:#194,8486><-!>Getting and setting environment variables

<+C><:S+194><:#388,8486><:X8,-32768;Index "Environment variable" # "in formula">You can set and retrieve the values of the environment variables in the 
<:X8,-32768;Index "NOTES.INI file" #>NOTES.INI (Windows, OS/2, and UNIX) or Notes<:X8,-32768;Index "Preferences file" #> Preferences (Macintosh) file.

@Bullet@<+C><:S+194><:#388,8486><:X8,-32768;Index "@SetEnvironment" #>@SetEnvironment(<+">variable<-">; 
<+">value<-">) sets a named variable to the specified value. You can also use the ENVIRONMENT keyword and the two-parameter form of @Environment.

@Bullet@<+C><:S+194><:#194,8486><:X8,-32768;Index "@Environment" #>@Environment(<+">variable<-">) retrieves the value of a named variable.

<+C><:S+194><:#388,8486>Environment values are text. Non-text values must be converted before being set and after being retrieved.

<+C><:S+194><:#582,8486>User environment variables are prepended with the $ character. If you add an environment variable with an editor or LotusScript, for example, and want to be able to retrieve it with @Environment, the first character must be $.

<+C><:S+194><:#970,8486>Be sure you know which NOTES.INI file is affected by your formula. If the formula is in a database on a server, the formula runs on the server in the following cases: replication formula, agent whose trigger is If New Mail Has Arrived or On Schedule, select
ion formula, or column formula. Otherwise the formula runs on the user's workstation. Replica copies access different NOTES.INI files depending on which server or workstation the replica copy is on.<-!>

<+C><:S+194><:#194,8486>Some uses for environment variables are:

@Bullet@<+C><:S+194><:#194,8486>Pass temporary data among different formulas and databases

@Bullet@<+C><:S+194><:#194,8486>Generate sequential numbers for one user

@See also hlp@<+@><:S+194><:#264,8486><+)>

@See also btn@<+@><:S+194><:#388,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_GETTING_AND_SETTING_ENVIRONMENT_VARIABLES<-*>

@Chead title@<:S+194><:#194,8486>Examples: getting and setting environment variables

@Dhead@<:S+194><:#194,8486>Example 1

<:S+194><:#194,8486>This example converts a number to text and saves it as an environment variable.

@Mono@<:S+194><:#194,8486>ENVIRONMENT OrderNumber := @Text(NewOrderNumber);

<:S+194><:#194,8486>The following formula is equivalent.

@Mono@<:S+194><:#194,8486>@Environment("OrderNumber"; @Text(NewOrderNumber);

<:S+194><:#194,8486>The following formula is also equivalent.

@Mono@<:S+194><:#194,8486>@SetEnvironment("OrderNumber"; @Text(NewOrderNumber);

@Chead@<:S+194><:#194,8486>Example 2

<:S+194><:#388,8486>This example retrieves the value of an environment variable, converts it to a number, and stores it in a local variable.

@Mono@<:S+194><:#194,8486>OldOrderNumber := @TextToNumber(@Environment("OrderNumber");

@Chead@<:S+194><:#194,8486>Example 3

<:S+194><:#776,8486>This Example is for a Computed when composed field. The formula maintains an environment variable named OrderNumber. When a new document is created, the formula retrieves the environment variable and increments it by 1. This algorithm does not work for data
bases that are replicated--the database must exist on a single server or workstation and the formula must run on that same machine.

@Mono@<:S+194><:#970,8486>OldOrderNumber := @Environment("OrderNumber");<**>NewOrderNumber := @TextToNumber(@If(OldOrderNumber = ""; "0"; OldOrderNumber)) + 1;<**>ENVIRONMENT OrderNumber := @Text(NewOrderNumber);<**>NewOrderNumber;

@Chead@<:S+194><:#194,8486>Example 4

<:S+194><:#970,8486>The first formula is run once by each sales person. This formula prompts for the sales area and makes it the value of an environment variable named SalesArea. In the form for the sales documents, you make the second formula the default value formula for the
 SalesArea field. This formula retrieves the value of the environment variable. The sales person does not have to enter the sales area for each new document, and neither is a particular sales area hard-coded into the default value formula.

@Mono@<:S+194><:#388,8486>ENVIRONMENT SalesArea := @Prompt(<[>OKCANCELLIST]; "Sales Area"; "What is your sales area?"; "Central"; "East" : "Central" : "West");

@Mono@<:S+194><:#194,8486>@Environment("SalesArea");

@Bhead title@<+@><:S+194><:#194,8486>Ways to handle errors

<+@><:S+194><:#194,8486>Errors are of two types:

@Bullet@<:#200,8486><+)>Syntax errors<-)><+*>H_SYNTAX_ERRORS<-*>

@1st lev para@<+C><:#200,8486><:X8,-32768;Index "Syntax error" # "in formula"><:X8,-32768;Index "Error" # "syntax in formula">Syntax errors are reported when you check or attempt to exit the formula you are writing.

@Bullet@<:#200,8486><+)>Run-time errors<-)><+*>H_RUNTIME_ERRORS<-*>

@1st lev para@<+C><:#200,8486>Run-time errors occur when the formula runs.

@Chead title@<+@><:S+194><:#194,8486>Syntax errors

<+C><:S+194><:#582,8486><:X8,-32768;Index "Syntax error" # "in formula"><:X8,-32768;Index "Error" # "syntax in formula">Syntax errors are reported when you check or attempt to exit the formula you are writing. You receive the message "Formula Error" or sometimes a more specific me
ssage. You must determine and correct the error before proceeding. The common syntax errors include:

@Bullet@<+C><:S+194><:#194,8486>Incorrectly spelled @function name or keyword

@Bullet@<+C><:S+194><:#194,8486>Missing or excessive parentheses

@Bullet@<+C><:S+194><:#194,8486>Missing quotation mark on a string constant

@Bullet@<+C><:S+194><:#194,8486>No semicolon between statements

<+C><:S+194><:#582,8486>You should write a formula a bit at a time and check it often as you go along. You may not receive specific error messages and errors are not highlighted. Formula syntax tends to be complex due to nesting. For these reasons.

@Chead title@<+C><:S+194><:#194,8486>Run-time errors

<+C><:S+194><:#194,8486><:X8,-32768;Index "Run-time error" # "in formula"><:X8,-32768;Index "Error" # "run-time in formula">Run-time errors occur when the formula runs. These errors can be categorized as:

@Bullet@<+C><:S+194><:#582,8486>Unexpected--These are development errors that your users should never see. For example, if you forget an @function parameter, the following message appears at run-time: "Insufficient arguments for @function." You should test your formula and attempt to corr
ect all unexpected errors. 

@Bullet@<+C><:S+194><:#776,8486>Unreported--These are results that are incorrect but are not reported as errors. For example, if you try to display a numeric value with @Prompt, @Prompt works but displays a blank. Again your user should never see these errors. You should test your formula
 and ensure that all results are as expected.

@Bullet@<+C><:S+194><:#582,8486>Expected--These are errors that the user might cause at run-time. For example, if you prompt for the name of a database, the user might enter the name of a non-existent database. You cannot prevent these errors but you can test for them in the formula and t
ake appropriate actions.

<+C><:S+194><:#194,8486>The following @functions help you deal with run-time errors:

@Bullet@<+C><:S+194><:#194,8486><:X8,-32768;Index "@IsError" #>@IsError(<+">value<-">) returns 1 if a field, temporary variable, or expression contains an error.

@Bullet@<+C><:S+194><:#194,8486><:X8,-32768;Index "@Error" #>@Error generates an error.

@Bullet@<+C><:S+194><:#194,8486><:X8,-32768;Index "@Failure" #>@Failure(<+">message<-">) displays a message.

@Bullet@<+C><:S+194><:#194,8486><:X8,-32768;Index "@Success" #>@Success returns the value 1.

@Bullet@<+C><:S+194><:#194,8486><:X8,-32768;Index "@Return" #>@Return(<+">value<-">) stops execution of the formula and returns a value.

<+C><:S+194><:#582,8486>Notes generates an error for a field if the built-in validation checking fails. For example, if you specify a field as numeric and the user enters a non-numeric value, Notes makes the value of the field an error. You can generate an error for a field by set
ting its value to @Error.

<+C><:S+194><:#582,8486>Notes reports errors in fields when the user attempts to save the document. For example, if a numeric field contains an non-numeric value, Notes generates the message "Cannot convert text to a number" when the user attempts to save a document.

<+C><:S+194><:#388,8486>To change the message or perform another action when an error occurs, test the field for an error with @IsError in the field validation formula. You can generate your own error message with @Failure.

<+C><:S+194><:#388,8486>To incorporate your own error conditions for a field, test the value of the field in the field translation formula and return @Error if you detect an error condition.

<+C><:S+194><:#1164,8486>Outside field formulas, for example in an agent, button, or hotspot, you can check the contents of a field and react immediately to an error condition. For example, if you check a field with a button, you can change the field value or report the error befor
e the user attempts to save the document. In checking for errors, be aware that the built-in validation checking generates an error as soon as the user enters a value in a field, but that a translation formula using @Error does not generate an error until t
he user attempts to save the document.

@See also hlp@<+@><:S+194><:#264,8486><+)>

@See also btn@<+@><:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_RUNTIME_ERRORS<-*>

@Chead title@<:S+194><:#194,8486>Examples: run-time errors

@Dhead@<:S+194><:#194,8486>Example 1

<:S+194><:#388,8486>This validation formula for the Price field causes a save operation for the document to fail with the specified message if the Price field contains an error.

@Mono@<:S+194><:#194,8486>@If(@IsError(Price); @Failure("The Price field must be numeric"); @Success)

@Dhead@<:S+194><:#194,8486>Example 2

<:S+194><:#582,8486>This example contains input translation and input validation formulas. The input translation formula puts an error in the Price field if its value is greater than 14.99. The input validation formula causes a save operation for the document to fail with the 
specified message if the Price field contains an error.

@Mono@<:S+194><:#388,8486><**>REM "Input translation formula for Price field";<**>@If(Price <;> 14.99; @ERROR; Price)

@Mono@<:S+194><:#582,8486><**>REM "Input validation formula for Price field";<**>@If(@IsError(Price); @Failure("The Price field must be numeric and 14.99 or less"); @Success)

@Dhead@<:S+194><:#194,8486>Example 3

<:S+194><:#388,8486>This button formula checks the Price field for an error before applying a discount. If the field contains an error, the formula returns first giving the user a message.

@Mono@<:S+194><:#776,8486>FIELD Price := @If(!@IsError(Price) & @IsNumber(Price) & Price << 15; Price * 0.85; @Return(@Prompt(<[>OK]; "Error in price field"; "Must be numeric and less than 15.00"; "")));<**>@All

@Dhead@<:S+194><:#194,8486>Example 4

<:S+194><:#388,8486>This button formula tests the Price field for an error. If the field contains an error, the formula resets it to a value taken from the user by @Prompt.

@Mono@<:S+194><:#776,8486>FIELD Price := @If(!@IsError(Price) & @IsNumber(Price) & Price << 15; Price; @TextToNumber(@Prompt(<[>OKCANCELEDIT]; "Error in price field"; "Enter a number under $15.00"; "")));<**>@All

@Bhead title@<+C><:S+194><:#194,8486>Working with @functions

<+C><:S+194><:#776,8486>All @functions<:X8,-32768;Index "@functions" # "Notes object limits"> evaluate to a value and can be placed in a formula anywhere a value of that type can be placed. When the formula executes, the value of the formula takes the formula's place. Some formula
s also have side-effects, that is, cause actions to occur. For example, @Prompt causes a message box to be displayed.

<+C><:S+194><:#970,8486>Most @functions can be used in formulas for any Notes object, but some @functions are restricted in their applicability. The following table lists the @functions that are restricted and lists the Notes objects in which they can be used effectively. In addit
ion, you must be in the appropriate context for an @function that returns information on the current database, view, document, or field--that is, such an object must be current.

<+C><:S+194><:t8>

@Bhead title@<+C><:S+194><:#194,8486>Working with @commands

<+C><:S+194><:#582,8486>@@Commands are special @functions that perform actions in the user interface. Most @commands mimic Notes menu commands. For example, the following formula, if executed from a button, puts the current document in edit mode and moves the insertion point down t
wice:

@Mono@<:S+194><:#388,8486>@Command(<[>EditDocument]; "1");<**>@Command(<[>EditDown]; "2")

<:S+194><:#194,8486>The syntax for an @command is one of the following:

@1st lev para@<:S+194><:#194,8486><+!>@V4Command<-!><+!>(<[><-!><+">command-name<-"><+!>];<-!> <+">arg1<-"><+!>;<-!> 
<+">arg2<-"><+!>;<-!> ... <+">argn<-"><+!>)<-!>

@1st lev para@<:S+194><:#194,8486><+!>@Command<-!><+!>(<[><-!><+">command-name<-"><+!>];<-!> <+">arg1<-"><+!>;<-!> 
<+">arg2<-"><+!>;<-!> ... <+">argn<-"><+!>)<-!>

<:S+194><:#388,8486>The name of the @function is @Command or @V3Command. The first argument is the name of the @command enclosed in brackets. The remaining arguments are the arguments to the @command.

<:S+194><:#388,8486>You cannot use an @command in a formula that does not interact with the user such as a scheduled agent or a field formula.

<:S+194><:#582,8486>@@V4Command @functions executes in sequence with other @functions, with some exceptions. @Command @functions execute in sequence with each other after all other @functions execute. For example, the following formula executes the @command first:

@Mono@<:S+194><:#388,8486>@V4Command(<[>EditDocument]; "1");<**>@Prompt(<[>OK]; "Edit mode"; "The document is now in edit mode.")

<:S+194><:#194,8486>But the following formula executes the @command last:

@Mono@<:S+194><:#388,8486><-!>@Command(<[>EditDocument]; "1");<**>@Prompt(<[>OK]; "Edit mode"; "The document is now in edit mode.")

<+C><:S+194><:#194,8486><+!><+">yyneed to spell out rules for @Command sequencing and @V4Command exceptions<-!><-"><:X8,-32768;Index "@Command" #><:X8,-32768;Index "@V3Command" #>

@Ahead@<:S+194><:#194,8486>Ways to perform string operations

<:#400,8486><:X8,-32768;Index "String operations" #>Formula language @functions support data type conversion, string length, string comparison, substring, case, and trim operations.

<:#200,8486><+"><+!>yyneed a home<-!><-">

<+C><:I0,720,720,0><:#200,8486><+!><+">@Keywords, @Unique w/no args (NEW), @ReplaceSubstring(NEW)<-!><-">

<+C><:I0,720,720,0><:#200,8486><+"><+!>@Abstract(NEW)<-"><-!>

<+C><:I0,720,720,0><:#200,8486><+"><+!>@Ascii(string)   @Ascii(string; <[>AllInRange])   character in range 32-127 + ?<-!><-">

<+C><:#200,8486>You can:

@Bullet@<:#200,8486><+)>Convert data types<-)><+*>H_CONVERTING_DATA_TYPES<-*>

@Bullet@<:#400,8486><+)>Concatenate, compare, and determine length<-)><+*>H_CONCATENATING_COMPARING_AND_DETERMINING_LENGTH<-*>

@Bullet@<:#200,8486><+)>Locate and extract substrings<-)><+*>H_LOCATING_AND_EXTRACTING_SUBSTRINGS<-*>

@Bullet@<:#400,8486><+)>Trim, repeat, add a new line, and change case<-)><+*>H_TRIMMING_REPEATING_ADDING_A_NEW_LINE_AND_CHANGING_CASE<-*>

@Bhead@<:S+194><:#194,8486>Converting data types

<:#400,8486>Data must be the correct type for the operation involved. The following @functions convert data, and test for type.

@1st Paragraph@<:S+194><:t4>

@See also hlp@<+@><:#110,8486><+)>

@See also btn@<+@><:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_CONVERTING_DATA_TYPES<-*>

@Chead title@<:S+194><:#194,8486>Examples: converting data types

@Dhead@<:S+194><:#194,8486>Example 1 (@TextToNumber, @Text)

<:#800,8486>This example reads a number interactively using @Prompt, calculates its logarithm, and displays the answer interactively using @Prompt. @Prompt works only with text values so the input value i must be converted to a number before its log can be calculated, 
and the answer n must be converted to a text string before it can be displayed.

@Mono@<:#1000,8486><:f180,QCourier,0,0,0>i := @Prompt(<[>OKCANCELEDIT]; "@Log Test"; "Enter a number"; "");<**><:f180,QCourier,0,0,0>n := @Log(@TextToNumber(i));<**><:f180,QCourier,0,0,0>@If(@IsError(n); @Return(@Prompt(<[>OK]; "@Log Test"; i + " is not a number")); "");<**><:f180,QCourier,0,0,0>
@Prompt(<[>OK]; "@Log Test"; "The  logarithm of " + i + " is " + @Text(n)<:f180,QCourier,0,0,0>)<:f>

@Dhead@<:I0,0,0,0><:S+-1><:#221,8486>Example 2 (@Text)

<:I0,0,0,0><:S+-1><:#844,8486>This example converts the current date-time as returned by @Now to text according to the date-time format T1S1 and displays it. T1 means the time only and S1 means the hour and minute only. At six in the evening, the user sees an information box with "The t
ime is ..." as the header and "06:00 PM" as the contents.

@Mono@<+@><:I0,0,0,0><:S+-1><:#182,8486><:f,QCourier,>@Prompt(<[>OK]; "The time is ..."; @Text(@Now; "T1S1"))<:f><:>

@Dhead@<:I0,0,0,0><:S+-1><:#221,8486>Example 3 (@Text)

<:I0,0,0,0><:S+-1><:#633,8486>This example converts the number 800 to text according to the number format C,2 and displays it. C means the currency format (leading dollar sign) and 2 means two decimcal places. The user sees an information box with "800 dollars" as the header and "$800.0
0" as the contents.

@Mono@<+@><:I0,0,0,0><:S+-1><:#182,8486><:f,QCourier,>@Prompt(<[>OK]; "800 dollars<:f><:f,QCourier,>"; @Text(800; "C,2"))<:f>

@Dhead@<:I0,0,0,0><:S+-1><:#221,8486>Example 4 (@Text, @TextToTime)

<:I0,0,0,0><:S+-1><:#633,8486><:>This example converts the text string "Today" to today's date, then converts it to a text string for @Prompt. For example, if today is July 8, 1995, the user would see an information box with "Today's Date" as the header and "07/08/95" as the contents.

@Mono@<+@><:I0,0,0,0><:S+-1><:#182,8486><:f180,QCourier,0,0,0>@Prompt(<[>OK]; "Today's Date"; @Text(@TextToTime("Today")))<:f>

@Dhead@<:S+194><:#194,8486><:>Example 5 (@IsNumber)

<:S+194><:#776,8486>This example adds Fields A and B. If either field is not numeric, it is first converted to the numeric value 0. While a user cannot enter a non-numeric value into a numeric field, a numeric field that is left blank and has no default value formula defaults 
to a null text string. The @IsNumber function in this formula traps such an occurrence.

@Mono@<:S+194><:#194,8486><:f,QCourier,>@If(@IsNumber(A); A; 0) + @If(@IsNumber(B); B; 0)<:f>

@Dhead@<:S+194><:#194,8486>Example 6 (@Char)

<:S+194><:#194,8486>This example converts the integer 65 to an uppercase A.

@Mono@<:S+194><:#194,8486><:f180,QCourier,0,0,0>@Prompt(<[>OK]; "IBM Code Page 850 code 65"; @Char(65))<:f>

@Bhead title@<:#220,8486>Concatenating, comparing, and determining length

<:#400,8486><:X8,-32768;Index "Concatenate strings" #><:X8,-32768;Index "Compare strings" #><:X8,-32768;Index "Length of string" #>The + operator concatenates strings. The =, <<<;>, !=, =!, <;><<, <<, <;>, <<=, and <;>= operators compare strings. The following @functio
ns determine length and compare strings:

<:S+194><:t5>

<:#600,8486>@@Matches uses ? to match any single character and * to match any sequence of characters, plus a number of other wildcards. @Like uses - to match any single character and % to match any sequence of characters in accordance with ANSI standard X3.135-1992. @Ma
tches uses \ as an escape character.

@See also hlp@<:#110,8486><+)>

@See also btn@<:#400,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_CONCATENATING_COMPARING_AND_DETERMINING_LENGTH<-*>

@Chead title@<:S+194><:#194,8486>Examples: concatenating, comparing, and determining length

@Dhead@<:S+194><:#194,8486>Example 1 (+)

<:S+194><:#194,8486>This example concatenates the two strings to form ABCDEF.

@Mono@<:S+194><:#194,8486><:f,QCourier,>@Prompt(<[>OK]; "Concatenation"; "ABC" + "DEF")<:f>

@Dhead@<:S+194><:#194,8486>Example 2 (+)

<:S+194><:#194,8486>This example concatenates the two input strings.

@Mono@<:S+194><:#970,8486><:f180,QCourier,>Input1 := @Prompt(<[>OKCANCELEDIT]; "Concatenation - first element"; "Enter any text in the box"; "ABC");<**><:f><:f180,QCourier,>Input2 := @Prompt(<[>OKCANCELEDIT]; "Concatenation - second element"; "Enter any text in the box"; "DEF");<**>
<:f><:f180,QCourier,>@Prompt(<[>OK]; "Concatenation - result"; Input1 + Input2)<:f>

@Dhead@<:S+194><:#194,8486>Example 3 (=)

<:S+194><:#194,8486>This example returns TRUE to YesNo if the two input strings are equal, FALSE if they are not equal.

@Mono@<:S+194><:#1358,8486><:f180,QCourier,0,0,0>Input1 := @Prompt(<[>OKCANCELEDIT]; "Comparison - first element"; "Enter any text in the box"; "ABC");<**><:f><:f180,QCourier,0,0,0>Input2 := @Prompt(<[>OKCANCELEDIT]; "Comparison - second element"; "Enter any text in the box"; "DEF");
<**><:f><:f180,QCourier,0,0,0>YesNO := @If(Input1 = Input2; "The strings are equal"; "The strings are not equal");<**><:f><:f180,QCourier,0,0,0>@Prompt(<[>OK]; "Comparison - result"; YesNo)<:f>

@Dhead@<:S+194><:#194,8486>Example 4 (@Length)

<:S+194><:#194,8486>This example displays 9, the length of abcdefghi.

@Mono@<:S+194><:#194,8486><:f,QCourier,>@Prompt(<[>OK]; "Length of abcdefghi"; @Text(@Length("abcdefghi")))<:f>

@Dhead@<:S+194><:#194,8486>Example 5 (@Length)

<:S+194><:#388,8486>This example creates a number list. Each element of this list contains the length of the corresponding element in TextList.

@Mono@<:S+194><:#194,8486><:f,QCourier,>@Length(TextList)<:>

@Dhead@<:S+194><:#194,8486>Example 6 (@Matches)

<:S+194><:#194,8486>This example returns true to YesNo if Input equals abc.

@Mono@<+@><:S+194><:#776,8486><:f180,QCourier,0,0,0>Input := @Prompt(<[>OKCANCELLIST]; "@Matches Input"; "Choose one"; "abc"; "abc" : "bcd" : "cde" : "xyz" : "123");<**><:f><:f180,QCourier,0,0,0>YesNo := @If(@Matches(Input; "abc"); " matches abc"; " does not match abc");<**><:f><:f180,QCourier,0,0,0>
@Prompt(<[>OK]; "@Matches Result"; Input + YesNo)<:f>

@Dhead@<:S+194><:#194,8486>Example 7 (@Matches)

<:S+194><:#388,8486>This example returns true to YesNo if every character in Input is alphabetic, that is, in the range a-z.The set {a-z} specifies the character range and the preceding + means any number of occurrences of the set.

@Mono@<:S+194><:#970,8486><:f180,QCourier,0,0,0>Input := @Prompt(<[>OKCANCELLIST]; "@Matches Input"; "Choose one"; "abc"; "abc" : "bcd" : "cde" : "xyz" : "123");<**><:f><:f180,QCourier,0,0,0>YesNo := @If(@Matches(Input; "+{a-z}"); " matches +{a-z}"; " does not match +{a-z}");<**><:f>
<:f180,QCourier,0,0,0>@Prompt(<[>OK]; "@Matches Result"; Input + YesNo)<:f>

@Dhead@<:S+194><:#194,8486>Example 8 (@Matches)

<:S+194><:#582,8486>This example returns true to YesNo if every character in Input is not alphabetic, that is, is outside the set {a-z}. The specification {!a-z} means not in the set of characters a-z, and the preceding + means any number of occurrences of that set.

@Mono@<:S+194><:#970,8486><:f180,QCourier,0,0,0>Input := @Prompt(<[>OKCANCELLIST]; "@Matches Input"; "Choose one"; "abc"; "abc" : "bcd" : "cde" : "xyz" : "123");<**><:f><:f180,QCourier,0,0,0>YesNo := @If(@Matches(Input; "<:f><:f180,QCourier,0,0,0>+{<:f><:f180,QCourier,0,0,0>!<:f><:f180,QCourier,0,0,0>
a-z}"); " matches <:f><:f180,QCourier,0,0,0>+{<:f><:f180,QCourier,0,0,0>!<:f><:f180,QCourier,0,0,0>a-z}"; " does not match 
<:f><:f180,QCourier,0,0,0>+{<:f><:f180,QCourier,0,0,0>!<:f><:f180,QCourier,0,0,0>a-z}");<**><:f><:f180,QCourier,0,0,0>@Prompt(<[>OK]; "@Matches Result"; Input + YesNo)<:f>

@Dhead@<:S+194><:#194,8486>Example 9 (@Matches)

<:S+194><:#388,8486>This Example returns true to YesNo if Input contains the characters bc in sequence surrounded by any number of any characters.

@Mono@<:S+194><:#970,8486><:f180,QCourier,0,0,0>Input := @Prompt(<[>OKCANCELLIST]; "@Matches Input"; "Choose one"; "abc"; "abc" : "bcd" : "cde" : "xyz" : "123");<**><:f><:f180,QCourier,0,0,0>YesNo := @If(@Matches(Input; "*bc*"); " matches*bc*"; " does not match *bc*");<**><:f><:f180,QCourier,0,0,0>
@Prompt(<[>OK]; "@Matches Result"; Input + YesNo)<:f>

@Dhead@<:S+194><:#194,8486>Example 10 (@Matches)

<:S+194><:#388,8486>This Example returns true to YesNo if Input starts with a and is three characters long or starts with 1 and is three characters long.

@Mono@<:S+194><:#970,8486><:f180,QCourier,0,0,0>Input := @Prompt(<[>OKCANCELLIST]; "@Matches Input"; "Choose one"; "abc"; "abc" : "bcd" : "cde" : "xyz" : "123");<**><:f><:f180,QCourier,0,0,0>YesNo := @If(@Matches(Input; "a??|1??"); " matches a??|1??"; " does not match a??|1??");<**>
<:f><:f180,QCourier,0,0,0>@Prompt(<[>OK]; "@Matches Result"; Input + YesNo)<:f>

<:S+194><:#194,8486><+"><+!>yyNEED EXAMPLES FOR LIKE<-!><-">

@Bhead title@<:S+194><:#194,8486>Locating and extracting substrings

<:#200,8486><:X8,-32768;Index "Substring" #>The following @functions for locate and extract substrings:

<:#200,8486><+"><+!>@Middle & @MiddleBack (string; offset; endstring)<-!><-">

<:t3>

@See also hlp@<:#110,8486><+)>

@See also btn@<:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_LOCATING_AND_EXTRACTING_SUBSTRINGS<-*>

@Chead title@<:S+194><:#194,8486>Examples: locating and extracting substrings

@Dhead@<:S+194><:#194,8486>Example 1 (@Contains)

<:I0,0,0,0><:S+-1><:#211,8486>This example returns true to R if Substring is anywhere in String. The search is case-sensitive.

@Mono@<+@><:I0,0,0,0><:S+-1><:#1274,8486><:f180,QCourier,0,0,0>String := @Prompt(<[>OKCANCELEDIT]; "String"; "Enter a string"; "");<**><:f><:f180,QCourier,0,0,0>Substring := @Prompt(<[>OKCANCELEDIT]; "Substring"; "Enter a beginning substring"; "");<**><:f><:f180,QCourier,0,0,0>Yes := Substring + "
 is in " + String;<**><:f><:f180,QCourier,0,0,0>No := Substring + " is not in " + String;<**><:f><:f180,QCourier,0,0,0>R := @Contains(String; Substring);<**><:f180,QCourier,0,0,0>@If(R; @Prompt(<[>OK]; "Yes"; Yes); @Prompt(<[>OK]; "No"; No))<:f><:>

@Dhead@<:S+194><:#194,8486>Example 2 (@Contains)

<:S+194><:#388,8486>This Example returns true to R if Substring1 or Substring2 is anywhere in String. The search is case sensitive.

@Mono@<:S+194><:#1358,8486><:f180,QCourier,0,0,0>String := @Prompt(<[>OKCANCELEDIT]; "String"; "Enter a string"; "");<**><:f180,QCourier,0,0,0>Substring1 := @Prompt(<[>OKCANCELEDIT]; "Substring"; "Enter substring 1"; "");<**><:f180,QCourier,0,0,0>Substring2 := @Prompt(<[>OKCANCELEDIT
]; "Substring"; "Enter substring 2"; "");<**><:f180,QCourier,0,0,0>Yes := Substring1 + " or " + Substring2 + " is in " + String;<**><:f180,QCourier,0,0,0>No := Substring1 + " and " + Substring2 + " are not in " + String;<**><:f180,QCourier,0,0,0>R := @Conta
ins(String; Substring1 : Substring2);<**><:f180,QCourier,0,0,0>@If(R; @Prompt(<[>OK]; "Yes"; Yes); @Prompt(<[>OK]; "No"; No))<:f>

@Dhead@<:S+194><:#194,8486>Example 3 (@Left)

<:S+194><:#194,8486>This example returns to R the leftmost N characters in String.

@Mono@<:S+194><:#1164,8486><:f,QCourier,>String := @Prompt(<[>OKCANCELEDIT]; "String"; "Enter a string"; "");<**>Number := @Prompt(<[>OKCANCELEDIT]; "Number of characters"; "Enter a number of characters"; "");<**>N := @TextToNumber(Number);<**>R := @Left(String; N);<**>@Prompt(<[>OK]
; "Leftmost characters"<:f><:f,QCourier,>; R)<:f>

@Dhead@<:S+194><:#194,8486>Example 4 (@Left)

<:S+194><:#194,8486>This example returns to R the characters left of Substring in String.

@Mono@<:S+194><:#776,8486><:f180,QCourier,0,0,0>String := @Prompt(<[>OKCANCELEDIT]; "String"; "Enter a string"; "");<**><:f180,QCourier,0,0,0>Substring := @Prompt(<[>OKCANCELEDIT]; "Substring"; "Enter a substring"; "");<**><:f180,QCourier,0,0,0>R := @Left(String; Substring);<**><:f180,QCourier,0,0,0>
@Prompt(<[>OK]; "Characters left of " + Substring; R)<:f>

@Dhead@<:S+194><:#194,8486>Example 5 (@RightBack, @Left)

<:S+194><:#388,8486>If the common name in the ComposedBy field is "Judith Woo," this formula calculates "Woo, Judith." @RightBack returns the last name and @Left returns the first name.

@Mono@<:S+194><:#388,8486><:f180,QCourier,0,0,0>@RightBack(@Name(<[>CN]; ComposedBy); " ") + ", " + @Left(@Name(<[>CN]; ComposedBy); " ")<:f>

@Dhead@<:S+194><:#194,8486>Example 6 (@Middle)

<:S+194><:#194,8486>This example returns N characters to R from String starting after Substring.

@Mono@<:S+194><:#1358,8486><:f,QCourier,>String := @Prompt(<[>OKCANCELEDIT]; "String"; "Enter a string"; "");<**>Substr<:f><:f,QCourier,>ing := @Prompt(<[>OKCANCELEDIT]; "Substring"; "Enter a substring"; "");<**>Number := @Prompt(<[>OKCANCELEDIT]; "Number of Characters"; "Enter the n
umber of characters"; "");<**>N := @TextToNumber(Number);<**>R := @Middle(String; Substring; N);<**>@Prompt(<[>OK]; Number + "  characters starting after " + Substring; R)<:f>

@Dhead@<:S+194><:#194,8486>Example 7 (@Word)

<:S+194><:#194,8486>This example extracts word n from string s using a space as the word separator.

@Mono@<:S+194><:#970,8486><:f180,QCourier,0,0,0>s := @Prompt(<[>OKCANCELEDIT]; "String"; "Enter a string of words"; "");<**><:f180,QCourier,0,0,0>n := @Prompt(<[>OKCANCELEDIT]; "Word"; "Enter the number of the word to extract"; "");<**><:f180,QCourier,0,0,0>ss := @Word(s; " "; @Text
ToNumber(n));<**><:f180,QCourier,0,0,0>@Prompt(<[>OK]; "Substring"; "Word " + n + " is \"" + ss + "\"")<:f>

@Bhead title@<:S+194><:#194,8486>Trimming, repeating, adding a new line, and changing case

<:#400,8486><:X8,-32768;Index "Case" #>The following @functions trim strings, repeat characters, add a new line (carriage return), and change case:

<:S+194><:t2>

@See also hlp@<:#110,8486><+)>

@See also btn@<:S+194><:#582,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)>H_EXAMPLES_TRIMMING_REPEATING_ADDING_A_NEW_LINE_AND_CHANGING_CASE

@Chead title@<:S+194><:#194,8486>Examples: trimming, repeating, adding a new line, and changing case

@Dhead@<:S+194><:#194,8486>Example 1 (@Trim)

<:S+194><:#194,8486>This example returns <[>Now is the time], removing all extraneous spaces.

@Mono@<:S+194><:#776,8486><:f,QCourier,>Untrimmed := "    Now   is   the   time     ";<**>Trimmed := @Trim(Untrimmed);<**>@Prompt(<[>OK]; "Untrimmed"; "<[>" + Untrimmed + "]");<**>@Prompt(<[>OK]; "Trimmed"; "<[>" + Trimmed + "]")<:f>

@Dhead@<:S+194><:#194,8486>Example 2 (@Trim, @ProperCase)

<:S+194><:#582,8486>This example converts the words in Name to initial uppercase characters and deletes leading, trailing, and extraneous spaces. If Name "  jane  j  smith" is entered for Name, this formula converts it to "Jane J Smith."

@Mono@<:S+194><:#194,8486><:f180,QCourier,0,0,0>@Trim(@ProperCase(Name))<:f>

@Dhead@<:S+194><:#194,8486>Example 3 (@Repeat)

<:S+194><:#388,8486>This example returns "Great Month! Great Month! Great Month!" in the Comments field if the Sales field is 100,000 or greater.

@Mono@<:S+194><:#582,8486><:f180,QCourier,0,0,0>FIELD Comments := @If(Sales <;>= 100000; @Repeat("Great Month! "; 3); Sales <;>= 50000; "Good Month"; "I want to see you in my office");<**><:f><:f180,QCourier,0,0,0>SELECT @All<:f>

@Dhead@<:S+194><:#194,8486>Example 4 (@NewLine)

<:S+194><:#194,8486>This example returns the user name and the date separated by a newline.

@Mono@<:S+194><:#194,8486><:f180,QCourier,0,0,0>@UserName + @NewLine + @Text(@Now)<:f>

@Dhead@<:S+194><:#194,8486>Example 5 (@LowerCase)

<:S+194><:#194,8486>This example returns the user name in lowercase.

@Mono@<:S+194><:#194,8486><:f180,QCourier,0,0,0>@LowerCase(@UserName)<:f>

@Dhead@<:S+194><:#194,8486>Example 6 (@UpperCase)

<:S+194><:#194,8486>This example returns the user name in uppercase.

@Mono@<:S+194><:#194,8486><:f180,QCourier,0,0,0>@Upper<:f><:f180,QCourier,0,0,0>Case(@UserName)<:f>

@Chead@<:S+194><:#194,8486>

@Ahead@<:S+194><:#194,8486>Performing arithmetic operations

<:S+194><:#194,8486><+"><+!>need a home<-!><-">

<+C><:I0,720,720,0><:#200,8486><+"><+!>@Sign(NEW)<-"><-!>

<+C><:I0,720,720,0><:#200,8486><+!><+">@Random(NEW)<-"><-!>

<+C><:I0,360,360,0><:#200,8486><+!><+">	(ALL NEW)@ACos, @ASin, @ATan, @ATan2, @Cos, @Sin, @Tan<-!><-">

<:#600,8486><:X8,-32768;Index "Arithmetic operations" #>The * / + - operators 
<:X8,-32768;Index "Multiply" #>multiply, <:X8,-32768;Index "Divide" #>divide, 
<:X8,-32768;Index "Add" #>add, and <:X8,-32768;Index "Subtract" #>subtract. Multiplication and division have precedence over addition and subtraction; otherwise, evaluation is left to right. Parentheses can be used to change the order of evaluation. The fol
lowing are the arithmetic @functions.

<:S+194><:t6>

@See also hlp@<:#110,8486><+)>

@See also btn@<:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_PERFORMING_ARITHMETIC_OPERATIONS<-*>

@Chead title@<:S+194><:#194,8486>Examples: performing arithmetic operations

@Dhead@<:S+194><:#194,8486>Example 1 (*, precedence)

<:S+194><:#388,8486>This example prints 15 for the first @Prompt because the multiplication 4 * 3 is evaluated first. It prints 21 for the second @Prompt because the parentheses forces the evaluation of 3 + 4 first.

@Mono@<:S+194><:#388,8486>@Prompt(<[>OK]; "3 + 4 * 3"; @Text(3 + 4 * 3));<**>@Prompt(<[>OK]; "(3 + 4) * 3"; @Text((3 + 4) * 3))

@Dhead@<:S+194><:#194,8486>Example 2 (/ *)

<:S+194><:#582,8486>This example prints 0.333333333333333 for the first @Prompt, performing the division and rounding the result to 15 decimal positions. It prints 1.2635268885E+17 for the second @Prompt, presenting the 11 most significant digits of the result as a fraction mu
ltiplied by 10<+&>17<-&>.

@Mono@<:S+194><:#388,8486>@Prompt(<[>OK]; "1 / 3"; @Text(1 / 3));<**>@Prompt(<[>OK]; "123456789 * 1023456789"; @Text(123456789 * 1023456789))

@Dhead@<:S+194><:#194,8486>Example 3 (@Abs)

<:S+194><:#388,8486><:f180,BArial,0,0,0>This example c<:f><:f180,BArial,0,0,0>alculates the difference between Score1 and Score2 as an unsigned number no matter which is larger.<:f>

@Mono@<:S+194><:#194,8486><:f180,QCourier New,0,0,0>@Abs(Score1 - Score2)<:f>

@Dhead@<:S+194><:#194,8486>Example 4 (@Abs)

<:#400,8486>This example calculates the absolute difference between Sales and CostOfSales, and formats it in a text field placing parentheses around a negative result.

@Mono@<:#400,8486>GP := @Abs(Sales - CostOfSales);<**>@If(Sales <;>= CostOfSales; @Text(GP); "(" + @Text(GP) + ")")

@Dhead@<:S+194><:#194,8486>Example 5 (@Sum)

<:S+194><:#194,8486>This example prints 15, the sum of the list One23, the variable Four, and the constant 5.

@Mono@<:S+194><:#776,8486>One23 := 1 : 2 : 3;<**>Four := 4;<**>S := @Sum(One23; Four; 5);<**>@Prompt(<[>OK]; "Sum of 1-5"; @Text(S))

@Dhead@<:S+194><:#194,8486>Example 6 (@Integer)

<:S+194><:#194,8486>This example truncates 3.12 to 3 and 6.735 to 6.

@Mono@<:S+194><:#388,8486>@Prompt(<[>OK]; "@Integer(3.12)"; @Text(@Integer(3.12)));<**>@Prompt(<[>OK]; "@Integer(6.735)"; @Text(@Integer(6.735)))

@Dhead@<:S+194><:#194,8486>Example 7 (@Integer)

<:S+194><:#194,8486>This example truncates Sales and Commission to integers in a list.

@Mono@<:S+194><:#194,8486>@Integer(Sales : Commission)

@Dhead@<:S+194><:#194,8486>Example 8 (@Round)

<:S+194><:#388,8486>This example rounds 3.12 to 3, 6.735 to 7, and 7.5 to 8; 753 by tens to 750; and the list elements 3.12, 6.735, and 7.5 to 3, 6, and 7 (converting them to a text string for display).

@Mono@<:S+194><:#1164,8486>@Prompt(<[>OK]; "@Round(3.12)"; @Text(@Round(3.12)));<**>@Prompt(<[>OK]; "@Round(6.735)"; @Text(@Round(6.735)));<**>@Prompt(<[>OK]; "@Round(7.5)"; @Text(@Round(7.5)));<**>@Prompt(<[>OK]; "@Round(753; 10)"; @Text(@Round(753; 10)));<**>@Prompt(<[>OK]; "@Round
(3.12 : 6.735 : 7.5)"; @Implode(@Text(@Round(3.12 : 6.735 : 7.5))))

@Dhead@<:S+194><:#194,8486>Example 9 (@Max)

<:S+194><:#388,8486>This example prints 3, the maximum of 1 and 3, and 99 6 7 8, the maximum of the pairwise elements in the two lists.

@Mono@<:S+194><:#582,8486>@Prompt(<[>OK]; "@Max(1; 3)"; @Text(@Max(1; 3)));<**>@Prompt(<[>OK]; "@Max(99 : 2 : 3; 5 : 6 : 7 : 8)"; @Implode(@Text(@Max(99 : 2 : 3; 5 : 6 : 7 : 8))))

@Dhead@<:S+194><:#194,8486>Example 10 (@Min)

<:S+194><:#388,8486>This example prints 1, the minimum of 1 and 3, and 5 2 3 3, the minimum of the pairwise elements in the two lists  in the second example.

@Mono@<:S+194><:#582,8486>@Prompt(<[>OK]; "@Min(1; 3)"; @Text(@Min(1; 3)));<**>@Prompt(<[>OK]; "@Min(99 : 2 : 3; 5 : 6 : 7 : 8)"; @Implode(@Text(@Min(99 : 2 : 3; 5 : 6 : 7 : 8))))

@Dhead@<:S+194><:#194,8486>Example 11 (@Modulo)

<:S+194><:#582,8486>This example prints 1, the remainder of 4/3; -2, the remainder of -14/3 (the remainder is negative when the dividend is negative); and 1 2 3 3, the remainders of the pairwise division of the first list by the second in the third line.

@Mono@<:S+194><:#776,8486>@Prompt(<[>OK]; "@Modulo(4; 3)"; @Text(@Modulo(4; 3)));<**>@Prompt(<[>OK]; "@Modulo(-14; 3)"; @Text(@Modulo(-14; 3)));<**>@Prompt(<[>OK]; "@Modulo(4 : 6 : 8 : 9; 3 : 4 : 5 : 6)"; @Implode(@Text(@Modulo(4 : 6 : 8 : 9; 3 : 4 : 5 : 6))))

@Dhead@<:S+194><:#194,8486>Example 12 (@Modulo)

<:S+194><:#194,8486>This example determines if the input number is even (division by 2 leaves a remainder of 0) or odd.

@Mono@<:S+194><:#582,8486>n := @TextToNumber(@Prompt(<[>OKCANCELEDIT]; "Input Number"; "Type a number"; ""));<**>@Prompt(<[>OK]; "The number is ..."; @If(@Modulo(n; 2) = 0; "Even"; "Odd"))

@Dhead@<:S+194><:#194,8486>Example 13 (@Power)

<:S+194><:#388,8486>This example prints 8, 2 raised to the power of 3; -8, -2 raised to the power of 3; and 0.125, 2 raised to the power of -3.

@Mono@<:S+194><:#582,8486>@Prompt(<[>OK]; "@Power(2; 3)"; @Text(@Power(2; 3)));<**>@Prompt(<[>OK]; "@Power(-2; 3)"; @Text(@Power(-2; 3)));<**>@Prompt(<[>OK]; "@Power(2; -3)"; @Text(@Power(2; -3)))

@Dhead@<:S+194><:#194,8486>Example 14 (@Sqrt, @Power)

<:S+194><:#388,8486>This example, which is the value formula for a computed field, calculates the diagonal of a rectangle whose sides are specified in the Length and Width fields.

@Mono@<:S+194><:#388,8486>@If(Length = "" | Width = ""; ""; @Sqrt(@Power(Length; 2) + @Power(Width; 2)))

@Dhead@<:S+194><:#194,8486>Example 15 (@Pi, @Power)

<:S+194><:#388,8486>This example, which is the value formula for a computed field, calculates the area of a circle whose radius is specified in the Radius field.

@Mono@<:S+194><:#194,8486>@If(Radius = ""; ""; @Pi * @Power(Radius; 2))

@Dhead@<:S+194><:#194,8486>Example 16 (@Log)

<:S+194><:#388,8486>This example prints 0.602059991327962, the common logarithm of 4; and 14, the common logarithm of 10<+&>14<-&>.

@Mono@<:S+194><:#388,8486>@Prompt(<[>OK]; "Common log of 4"; @Text(@Log(4)));<**>@Prompt(<[>OK]; "Common log of 1.0E+14"; @Text(@Log(1.0E+14)))

@Dhead@<:S+194><:#194,8486>Example 15 (@Ln)

<:#200,8486>This example prints 0.693147180559945, the natural logarithm of 2.

@Mono@<:#200,8486>@Prompt(<[>OK]; "Natural log of 2"; @Text(@Ln(2)))

@Dhead@<:S+194><:#194,8486>Example 16 (@Exp)

<:S+194><:#582,8486>This example calculates 2.71828182845904 (the value of <+">e<-">) for the first @Exp function, 3.49034295746184 (the value of 
<+">e<-"> to the 1.25) for the second @Exp function, and 0.28650479686019  (the value of 
<+">e<-"> to the -1.25) for the third @Exp function.

@Mono@<:S+194><:#582,8486>@Prompt(<[>OK]; "e to 1"; @Text(@Exp(1)));<**>@Prompt(<[>OK]; "e to 1.25"; @Text(@Exp(1.25)));<**>@Prompt(<[>OK]; "e to -1.25"; @Text(@Exp(-1.25)))

@Ahead@<:S+194><:#194,8486>Performing date-time operations

<:S+194><:#582,8486><:X8,-32768;Index "Time-date operation" #><:X8,-32768;Index "Time operation" #>A time-date value consists of a year, month, day, hour, minute, and second. You can use a time-date value "as is" in a time-date field, but must convert it with @Text to use it a
s a string. You can convert a string to a date-time value with @TimeToText.

<:S+194><:#1164,8486><:X8,-32768;Index "Constant" # "time-date">A time-date constant is a date, a time, or both in brackets. The date is the month, day, and year (optional; defaults to the current year; a 2-digit year means the current century) separated by a slash (/) or a hyp
hen (-) for OS/2. The time is the hour, minute, and second (optional; defaults to 0) separated by colons. You can used 24-hour time or add "PM" for afternoon hours. You can add the time zone to indicate another time zone. Separate the components with spaces
. Some examples of time-date constants are <[>6/30/95], <[>5:30:00 PM], <[>17:30:00], <[>17:30 EST], and <[>6/30 5:30 PM].

<:S+194><:#194,8486>Dates can be compared and subtracted. Subtraction yields a numeric value representing seconds.

<:S+194><:#194,8486>The following @functions determine and manipulate time-date values.

<+C><:S+194><:t0>

@See also hlp@<:S+194><+)>

@See also btn@<:S+194><:#194,8486><+)>{bmc 1details.bmp}<-)><+)>See examples<-)><+*>H_EXAMPLES_PERFORMING_DATE_TIME_OPERATIONS<-*>

@Chead title@<:S+194><:#194,8486>Examples: performing date-time operations

@Dhead@<:S+194><:#194,8486>Example 1 (@Created)

<:S+194><:#388,8486>This agent example writes "Archive" to the Status field if the current document was created before 1995, and writes "Current" otherwise.

@Mono@<:S+194><:#582,8486>SELECT @All;<**>FIELD Status := @If(@Created << <[>01/01/95 12:00:00 AM]; "Archive"; "Current");

@Dhead@<:S+194><:#194,8486>Example 2 (@Modified, @Date, @Today, @Yesterday)

<:S+194><:#388,8486>This agent example writes "Today," "Yesterday," or "Old" to the ViewStatus field depending on the date that the current document was last modified.

@Mono@<:S+194><:#582,8486>FIELD ViewStatus := @If(@Date(@Modified) = @Today; "Today"; @Date(@Modified) = @Yesterday; "Yesterday"; "Old");<**>SELECT @All

@Dhead@<:S+194><:#194,8486>Example 3 (@Modified, @Date, @Weekday, @Today, @Adjust, @Yesterday)

<:S+194><:#582,8486>This agent example modifies the preceding example to exclude weekends in assigning "Yesterday.' If today is Monday, y is set to today's date minus 3 days; otherwise y is set to yesterday's date. Then y instead of @Yesterday is tested against the @Modified d
ate.

@Mono@<:S+194><:#970,8486>d := @Date(@Modified);<**>y := @If(@Weekday(@Today) = 2; @Adjust(@Today; 0; 0; -3; 0; 0; 0); @Yesterday);<**>FIELD ViewStatus := @If(d = @Today; "Today"; d = y; "Yesterday"; "Old");<**>SELECT @All

@Dhead@<:S+194><:#194,8486>Example 4 (@Now, @Month, @Year, @Day)

<:S+194><:#388,8486>This example of a computed text field displays today's date in letterhead form. For example, 6/30/95 displays as "June 30, 1995."

@Mono@<:S+194><:#1164,8486>months := "January" : "February" : "March" : "April" : "May" : "June" : "July" : "August" : "September" : "October" : "November" : "December";<**>month := @Subset(@Subset(months; @Month(@Now)); -1);<**>year := @Year(@Now);<**>day := @Day (@Now);<**>month + 
" " + @Text(day) + ", " + @Text(year)

@Dhead@<:S+194><:#194,8486>Example 5 (@Adjust, @Weekday, @Created)

<:S+194><:#388,8486>This example of a computed time field displays a date two days from the creation date for the document. The calculation eliminates the weekend by adding 4 days if the creation date is a Friday.

@Mono@<:S+194><:#388,8486>increment := @If(@Weekday(@Created) = 6; 4; 2);<**>@Date(@Adjust(@Created; 0; 0; increment; 0; 0; 0))

@Ahead@<+C><-!>Accessing the user environment

<+C><:S+194><:#582,8486>The user environment is the server or workstation containing the formula's database in the following cases: replication formula, agent whose trigger is If New Mail Has Arrived or On Schedule, selection formula, or column formula. Otherwise the user environm
ent is the Notes workstation.

<:S+194><:#388,8486>User names can be either distinguished or non-distinguished. To change a name from distinguished to non-distinguished, strip off everything starting with the first slash (/).

<:S+194><:#194,8486>The following @functions return or process information on the user environment<:X8,-32768;Index "Arithmetic operations" #>.

<:S+194><:t1>

@Ahead@<+C><:S+194><:#194,8486>Accessing the current database and view

<+C><:S+194><:#194,8486>@@DbManager, @DbName, @DbTitle

<+C><:I0,720,720,0><:#200,8486>Passwords. Forcing passwords, eg, ToolsUserLogoff the DbLookup to N&A on server

<+C><:S+194><:#194,8486>Accessing the Name & Address Book

<+C><:I0,720,720,0><:#200,8486>How to do it

<+C><:S+194><:#194,8486>@@ViewTitle, @DocChildren (2 forms), @DocDescendants (2), @DocLevel, @DocNumber

<+C><:I0,720,720,0><:#200,8486>@@DocParentNumber, @DocSiblings, @IsCategory (2), @IsExpandable, @DbColumn

<+C><:I0,720,720,0><:#400,8486>Sorting on alpha fields, names, numbers, alphanu, dates - for mixed, used 2 fields or can right justify, eg, @Left("     "; 5-@Length(Room)) + Room

<+C><:S+194><:#194,8486>

@Ahead@<+C><:S+194><:#194,8486>Accessing the current document

<:S+194><:#194,8486>

<+C><:S+194><:#194,8486>@@Author, @Attachments, @DeleteDocument, @Response, @DocLength

<+C><:I0,720,720,0><:#200,8486>@@IsDocBeingLoaded, @IsDocBeingMailed, @IsDocBeingRecalculated

<+C><:I0,720,720,0><:#200,8486>@@IsDocBeingSaved, @IsNewDoc, @IsResponseDoc, @All

<+C><:I0,720,720,0><:#200,8486><+"><+!>@IsDocBeingEdited<-!><-">

<+C><:I0,720,720,0><:#200,8486>SELECT, @AttachmentNames, @AttachmentLengths

<+C><:I0,720,720,0><:#200,8486><+"><+!>@AllChildren(NEW), @AllDescendants(NEW)<-!><-">

<+C><:I0,720,720,0><:#200,8486>@@MailSend (2)

<+C><:I0,720,720,0><:#200,8486><+"><+!>@DocumentUniqueID(ND), @InheritedDocumentUniqueID(ND), @NoteID(ND)<-!><-">

<+C><:I0,720,720,0><:#200,8486><+"><+!>@DocMark(<[>Update])   or   <[>NoUpdate]<-!><-">

<+C><:I0,720,720,0><:#200,8486><+"><+!>response hierarchy enhancements<-!><-">

<+C><:S+194><:#194,8486>@@IsAvailable, @IsUnavailable, @DeleteField, @SetField

<+C><:I0,630,630,0><-!>@Unavailable, FIELD, DEFAULT

<+C><:S+194><:#194,8486>

@Ahead@<+C><:S+194><:#194,8486>Accessing other than the current document

<:S+194><:#194,8486>file specifications

<+C><:S+194><:#194,8486>@@DbLookup

<+C><:S+194><:#194,8486>@@DbLookup

<+C><:S+194><+"><+!>@GetDocField(docUNID; "fieldName")<-"><-!>   NEW

<+C><:S+194><:#194,8486><+!><+">@SetDocField(docUNID; "fieldName"; value)<-!><-">   NEW

<+C><:S+194><:#194,8486><+"><+!>@DocFields   NEW<-!><-">

<+C><:S+194><:#194,8486>

@Ahead@<+C><:S+194><:#194,8486>Performing operations outside of Notes

<:S+194><:#194,8486>

<+C><:I0,720,720,0><:#400,8486>@@DDEExecute, @DDEInitiate, @DDEPoke, @DDETerminate, @DbCommand  (with non-Notes databases), @DbColumn (with non-Notes databases), @DbLookup (with non-Notes databases)

<+C><:I0,720,720,0><:#200,8486><[>Execute]

<+C><:I0,720,720,0><:#200,8486>

<+C><:I0,720,720,0><:#200,8486>

<+C><:I0,720,720,0><:#200,8486><+!><+">unassigned<-"><-!>

<+C><:I0,720,720,0><:#200,8486><+!><+">@Abstract

<+C><:I0,720,720,0><:#200,8486><+!><+">@Certificate

<+C><:I0,720,720,0><:#200,8486><+!><+">@ChooseFolders

<+C><:I0,720,720,0><:#200,8486><+!><+">@Domain

<+C><:I0,720,720,0><:#200,8486><+!><+">@IsDocTruncated

<+C><:I0,720,720,0><:#200,8486><+!><+">@MailEncryptSavedPreference

<+C><:I0,720,720,0><:#200,8486><+!><+">@MailEncryptSentPreference

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">MailSavePreference

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">MailSignPreference

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">OpenURL (2)

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">PickList

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">REM

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">ReplaceSubstring

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">Select

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">Set

<+C><:I0,720,720,0><:#200,8486><+!><+">@<-!><-"><+!><+">Soundex

>

[Embedded]
00132790
