<=
/div>
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/pres.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0001.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
CSE
303
Concepts and Tools for
Software Developme=
nt
Richard C. Davis
UW CSE – 12/6/2006
Lecture
24 – Profilers
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0001_image001.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhyAF2AHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADG
AXUAgAAAAJkAAAL/jI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8woMCBBAsaPIgwocKFDBs6fAgxosSJFCtavIgxo8aNNhw7evwIMqTIkSRLmjyJMqXK
lSxbunwJM6bMmTRr2ryJM6fOnTx7+vwJNKjQoUSLGj2KNOmkAgA7
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0004.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
2
Administravia
<=
span
class=3DBB style=3D'position:absolute;left:-4.43%'>• HW7 is due
today
<=
span
class=3DBB style=3D'position:absolute;left:-4.43%'>• Short Pap=
ers are
due Friday
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0004_image002.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0002.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
3
Last Time
=
8226; Wrap-up
software engineering
&=
#8211; Readability
&=
#8211; Robustness
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0002_image003.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0006.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Today
=
8226; Wrap-up
C++
&=
#8211; Generic
Programming
&=
#8211; Templates
&=
#8211; The
Standard Template Library
=
8226; Wrap
up Tools
&=
#8211; Profilers
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0006_image004.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0005.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Java Generics
<=
span
class=3DBB style=3D'position:absolute;left:-3.82%'>• Java with=
out
generics: less type checking
• ArrayLi=
st l =3D
new ArrayList();
• l.add(n=
ew
Foo());
• Foo f =
=3D
(Foo)l.get(0);
•
<=
span
class=3DBB style=3D'position:absolute;left:-3.75%'>• Generics =
add type
check and remove cast
• ArrayLi=
st<Foo>
l =3D new ArrayList<Foo>();
• l.add(n=
ew
Foo());
• Foo f =
=3D
l.get(0);
•
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0005_image005.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0007.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
C++ Templates
=
8226; Similar
to Java generics in purpose
=
8226; Can
be used for:
&=
#8211; Functions
&=
#8211; Classes
&=
#8211; Methods
of classes (on newer compilers)
=
8226; Question:
How to cope without templates?
&=
#8211; Answer:
Use void pointers
R=
11;
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0007_image006.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0008.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Template Syntax
=
8226; For
function declaration
&=
#8211; Definitions
similar
&=
#8211; Class
declarations/definitions similar
=
226;
=
226; template
<typename Comparable>
=
226; Compara=
ble
&findMax( vector<Comparable> &a);
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0008_image007.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0009.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Templates Are a Giant Hairball!
• Details vary from comp=
iler
to compiler
– Standard is very hard =
to
implement
– Leaves some questions
unanswered
• Problems with separate
compilation
– Compiler creates
implementation when needed
– Should it go in a .cpp or a =
.h file? N=
ot
clear.
• Warning: C++ templates=
vs.
Java generics
– Don't expect them to w=
ork
the same way
– They have rather diffe=
rent
semantics
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0009_image008.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0010.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Standard
Template Library (STL)
=
8226; Equivalent
of Java Collections API
&=
#8211; But
uses templates
&=
#8211; Strives
for flexibility and speed
&=
#8211; STL
stores copies instead of references
=
8226; Drawbacks
&=
#8211; Same
drawbacks as templates
&=
#8211; Can
really obfuscate your code
&=
#8226; Note
long compiler error messages
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0010_image009.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0011.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
That's all for Templates/STL
=
8226; Want
to learn more?
&=
#8211; Your
book is a good place to start
&=
#8211; Practice!
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0011_image010.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0012.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Profilers
=
8226; Monitors
running program
=
8226; Reports
detailed performance information
=
8226; See
where program uses most time/space
=
8226; "90/10
rule of programs"
&=
#8211; 90%
of time spent in 10% of the code
&=
#8211; Profilers
help you find the 10% (bottlenecks)
=
8226; Warning!
Profilers can be misleading!
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0012_image011.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0013.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Basic Features
=
8226; Different
profilers monitor different things
• gprof : pro=
filer
for code produced by gcc
• gprof is fairly typical and
reports
&=
#8211; #
times each function was called
&=
#8211; #
times function "A" called function "B"
&=
#8211; %
time spent in each function
&=
#8226; Estimated
based on samples
&=
#8226; Profiler
periodically checks where program is
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0013_image012.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0014.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Profiler Implementation Basics
=
8226; Call
counts
&=
#8211; Add
code to every function-call
&=
#8226; Updates
a table indexed by function pairs
&=
#8211; The
profiler instruments your code
=
8226; Time
samples
&=
#8211; Use
the processor's timer
&=
#8211; Wake-up
periodically
&=
#8211; Check
the value of the program counter
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0014_image013.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0015.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Using gprof
• C=
all gcc =
/ g++
with option -pg
– B=
oth
when compiling and linking
• C=
ompiler
will add code for storing call count info
• L=
inker
will add functions for getting time samples
• E=
xecute
the program to get file gmon.out
• R=
un gprof=
b> to analyze results
R=
11; gprof
profile-me gmon.out > results.txt
• E=
xamples:
– <=
i>primes-gprof.txt
– <=
i>polytest-gprof.txt &
polytest-gprof-abbrev.txt
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0015_image014.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0016.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Getting line-by-line results
=
8226; Compile
with option -g
-pg
=
8226; Run
gprof with
-l
option
=
211; gprof -l
profile-me gmon.out > results.txt
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0016_image015.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0017.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Profiler Gotchas
• Profiler is sampling=
13;
– Make sure there are en=
ough
samples
– Program must run for a
sufficiently long time
• Results depend on your
inputs
– For instance, imagine
array is already sorted
• Programs will run very
slow (~1/10 as fast)
– Profiler won't report
these times
– The clock will!
=
span>
• Cumulative times based=
on
estimation
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0017_image016.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0018.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
gprof
Estimation Problem Example
• int g =
=3D
0;
• void c(=
int i)
{
• if (i) return;
• for(; i<2000000000; ++i)
<=
/b>
• g++;
<=
/div>
• }
<=
/b>
•
• void a(=
) {
c(0); }
• void b(=
) {
c(1); }
• int mai=
n() {
a(); b(); return 0; }
<=
span
class=3DBB style=3D'position:absolute;left:-3.99%'>• See misle=
ading.c
& misleading-gprof.txt
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0018_image017.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0019.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Poor man's Profiling with
"time"
• Use to measure whole
program time
– Usage example: time program args
=
;
• Three types of time
reported
– real: roughly "wa=
ll
clock"
• Includes time used by
other programs
• Includes disk access
time
– user: time spent runni=
ng
code in the program
– system: time the O/S s=
pent
doing stuff
• Includes I/O (Note: gprof does=
n't
measure this)
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0019_image018.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0020.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Performance Tuning
•<=
/span> "First make it work, then make it fast"&=
#13;
•<=
/span> Steps in performance tuning
1. Get things to work well, write clean code
2. Locate bottlenecks and performance issues
–<=
/span> Sometimes they are obvious
–<=
/span> Otherwise, profiler can help
3. Optimize your overall program
=
div>
4. Use low-level tricks if you need to
•<=
/span> Try compiling with "optimization flags"&=
#13;
– gcc / g++
uses -O1 , -O2 , -O3 =
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0020_image019.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0021.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Summary
• Profilers help us
understand
– Where program spends m=
ost
time
– What parts of code are
executed most often
• We use gprof, but many
profilers exist
– Visual Studio 2005
includes one
– Similar goals and simi=
lar
basic functionality
• Implementation
– Instrument the code=
3;
– Perform extra work as
program runs
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0021_image020.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0022.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
Reading
=
8226; Optional
readings
&=
#8211; C++
for Java Programmers
&=
#8226; Chapter
7: Templates
&=
#8226; Chapter
10: STL
&=
#8211; gprof
manual
• http://www.gnu.org/software/binutils/manual/gpr=
of-2.9.1/gprof.html
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0022_image021.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAAAAmQLkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0003.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
12/6/2006
CSE 303 Lecture 24
22
Next Time
<=
span
class=3DBB style=3D'position:absolute;left:-4.43%'>• Concurren=
cy?
<=
span
class=3DBB style=3D'position:absolute;left:-4.43%'>• Wrap-up=
span>
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/slide0003_image022.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh4gFEAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADg
AUMAgAAAAJkAAALkjI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si
8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFho
eIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7
CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09fb3+P
n6+/z9/v/w8wYIgCADs=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/master01.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
<=
/div>
<=
/div>
<=
/div>
<=
/div>
Click to edit Master text styles
Second level
Third level
Fourth level
Fifth level
<=
/div>
<=
/div>
<=
/div>
<=
/div>
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/master03_stylesheet.css
Content-Transfer-Encoding: base64
Content-Type: text/css
Ym9keQ0KCXt3aWR0aDo1MzRweDsNCgloZWlnaHQ6NDAwcHg7fQ0KLlRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5UDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQt
ZmFtaWx5OkFyaWFsOw0KCWNvbG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQt
c2l6ZToyMDklOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5CQg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMjI7fQ0KLkINCgl7dGV4dC1hbGln
bjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOiM5OTAwMDA7DQoJZm9udC1zaXpl
OjE1MiU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkIx
Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMTM7fQ0KLkIxDQoJe3RleHQtYWxpZ246
bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5k
ZXg6MTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Ut
b3ZlcmZsb3c6MTt9DQouQjJCDQoJe21zby1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMjAyMjt9DQou
QjINCgl7dGV4dC1hbGlnbjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNr
Ow0KCW1zby1jb2xvci1pbmRleDoxOw0KCWZvbnQtc2l6ZToxMTQlOw0KCW1zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5CM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0
OmJ1bGxldFwyMDEzO30NCi5CMw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp
YWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjk1JTsN
Cgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQjRCDQoJe21z
by1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMDBCQjt9DQouQjQNCgl7dGV4dC1hbGlnbjpsZWZ0Ow0K
CWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNrOw0KCW1zby1jb2xvci1pbmRleDoxOw0K
CWZvbnQtc2l6ZTo5NSU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93
OjE7fQ0KLk5CDQoJe21zby1zcGVjaWFsLWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5ODQoJe3Rl
eHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28t
Y29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5OMUINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0
XDIwMjI7fQ0KLk4xDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCglj
b2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5OMkINCgl7bXNvLXNwZWNp
YWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4yDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250
LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250
LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5OM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4zDQoJe3RleHQt
YWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29s
b3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5ONE4NCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLk40DQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xv
cjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFy
LXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PQg0KCXttc28tc3BlY2lhbC1m
b3JtYXQ6bm9idWxsZXRcMjAyMjt9DQouTw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXpl
Ojg1JTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLk8yDQoJe21z
by1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PMw0KCXttc28tY2hh
ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCQg0KCXttc28tc3BlY2lhbC1mb3Jt
YXQ6bm9idWxsZXRcMjAyMjt9DQouQ0INCgl7dGV4dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6Izk5MDAwMDsNCglmb250LXNpemU6MTUyJTsNCgltc28tY2hhci13
cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0IxDQoJe21zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5DQjINCgl7bXNvLWNoYXItd3JhcDoxOw0K
CW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCMw0KCXttc28tY2hhci13cmFwOjE7DQoJbXNv
LWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0I0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5DVEINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLkNUDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNv
bG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQtc2l6ZToyMDklOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQg0KCXtjb2xvcjojOTkw
MDAwOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMg0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIzDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjQNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCDQoJe2NvbG9yOiM5OTAwMDA7
DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMQ0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIyDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCNA0KCXttc28tY2hhci13cmFw
OjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouVGJsDQoJe2NvbG9yOiM5OTAwMDA7DQoJ
bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDENCgl7bXNv
LWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDINCgl7bXNvLWNo
YXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLmRlZmF1bHRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5kZWZhdWx0DQoJe3RleHQtYWxpZ246bGVmdDsNCglm
b250LWZhbWlseTpBcmlhbDsNCglmb250LXdlaWdodDpub3JtYWw7DQoJZm9udC1zdHlsZTpub3Jt
YWw7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQoJdGV4dC1zaGFkb3c6bm9uZTsNCgl0ZXh0LWVm
ZmVjdDpub25lOw0KCW1zby1mYXJlYXN0LWhpbnQ6bm87DQoJbGF5b3V0LWZsb3c6aG9yaXpvbnRh
bDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6ODUlOw0K
CW1zby10ZXh0LXJhaXNlOjAlOw0KCW1zby1saW5lLXNwYWNpbmc6IjEwMCAwIDAiOw0KCW1zby1t
YXJnaW4tbGVmdC1hbHQ6MDsNCgltc28tdGV4dC1pbmRlbnQtYWx0OjA7DQoJbXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7DQoJZGlyZWN0aW9uOmx0cjsNCgltc28td29y
ZC13cmFwOjE7DQoJbXNvLXZlcnRpY2FsLWFsaWduLXNwZWNpYWw6YmFzZWxpbmU7DQoJbXNvLWFu
c2ktbGFuZ3VhZ2U6RU4tVVM7fQ0KYTpsaW5rDQoJe2NvbG9yOiMwMDk5OTkgIWltcG9ydGFudDt9
DQphOmFjdGl2ZQ0KCXtjb2xvcjojMzMzMzk5ICFpbXBvcnRhbnQ7fQ0KYTp2aXNpdGVkDQoJe2Nv
bG9yOiM5OUNDMDAgIWltcG9ydGFudDt9DQp=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/master04_stylesheet.css
Content-Transfer-Encoding: base64
Content-Type: text/css
Ym9keQ0KCXt3aWR0aDo1MzRweDsNCgloZWlnaHQ6NDAwcHg7fQ0KLlRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5UDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQt
ZmFtaWx5OkFyaWFsOw0KCWNvbG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQt
c2l6ZToyMDklOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5CQg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMjI7fQ0KLkINCgl7dGV4dC1hbGln
bjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOiMwMDAwOTk7DQoJZm9udC1zaXpl
OjE1MiU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkIx
Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6YnVsbGV0XDIwMTM7fQ0KLkIxDQoJe3RleHQtYWxpZ246
bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5k
ZXg6MTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Ut
b3ZlcmZsb3c6MTt9DQouQjJCDQoJe21zby1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMjAyMjt9DQou
QjINCgl7dGV4dC1hbGlnbjpsZWZ0Ow0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNr
Ow0KCW1zby1jb2xvci1pbmRleDoxOw0KCWZvbnQtc2l6ZToxMTQlOw0KCW1zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5CM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0
OmJ1bGxldFwyMDEzO30NCi5CMw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp
YWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjk1JTsN
Cgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQjRCDQoJe21z
by1zcGVjaWFsLWZvcm1hdDpidWxsZXRcMDBCQjt9DQouQjQNCgl7dGV4dC1hbGlnbjpsZWZ0Ow0K
CWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNvbG9yOmJsYWNrOw0KCW1zby1jb2xvci1pbmRleDoxOw0K
CWZvbnQtc2l6ZTo5NSU7DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93
OjE7fQ0KLk5CDQoJe21zby1zcGVjaWFsLWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5ODQoJe3Rl
eHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28t
Y29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5OMUINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0
XDIwMjI7fQ0KLk4xDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCglj
b2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5OMkINCgl7bXNvLXNwZWNp
YWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4yDQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250
LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250
LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30N
Ci5OM0INCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIwMjI7fQ0KLk4zDQoJe3RleHQt
YWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xvcjpibGFjazsNCgltc28tY29s
b3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5ONE4NCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLk40DQoJe3RleHQtYWxpZ246bGVmdDsNCglmb250LWZhbWlseTpBcmlhbDsNCgljb2xv
cjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6NTclOw0KCW1zby1jaGFy
LXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PQg0KCXttc28tc3BlY2lhbC1m
b3JtYXQ6bm9idWxsZXRcMjAyMjt9DQouTw0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6YmxhY2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXpl
Ojg1JTsNCgltc28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLk8yDQoJe21z
by1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5PMw0KCXttc28tY2hh
ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouTzQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCQg0KCXttc28tc3BlY2lhbC1mb3Jt
YXQ6bm9idWxsZXRcMjAyMjt9DQouQ0INCgl7dGV4dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1mYW1p
bHk6QXJpYWw7DQoJY29sb3I6IzAwMDA5OTsNCglmb250LXNpemU6MTUyJTsNCgltc28tY2hhci13
cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0IxDQoJe21zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5DQjINCgl7bXNvLWNoYXItd3JhcDoxOw0K
CW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkNCMw0KCXttc28tY2hhci13cmFwOjE7DQoJbXNv
LWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouQ0I0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5DVEINCgl7bXNvLXNwZWNpYWwtZm9ybWF0Om5vYnVsbGV0XDIw
MjI7fQ0KLkNUDQoJe3RleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQtZmFtaWx5OkFyaWFsOw0KCWNv
bG9yOndoaXRlOw0KCW1zby1jb2xvci1pbmRleDowOw0KCWZvbnQtc2l6ZToyMDklOw0KCW1zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQg0KCXtjb2xvcjojMDAw
MDk5Ow0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjEN
Cgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMg0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIzDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjQNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCDQoJe2NvbG9yOiMwMDAwOTk7
DQoJbXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMQ0KCXtt
c28tY2hhci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIyDQoJe21zby1j
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCNA0KCXttc28tY2hhci13cmFw
OjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouVGJsDQoJe2NvbG9yOiMwMDAwOTk7DQoJ
bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDENCgl7bXNv
LWNoYXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDINCgl7bXNvLWNo
YXItd3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDMNCgl7bXNvLWNoYXIt
d3JhcDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlRibDQNCgl7bXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLmRlZmF1bHRCDQoJe21zby1zcGVjaWFs
LWZvcm1hdDpub2J1bGxldFwyMDIyO30NCi5kZWZhdWx0DQoJe3RleHQtYWxpZ246bGVmdDsNCglm
b250LWZhbWlseTpBcmlhbDsNCglmb250LXdlaWdodDpub3JtYWw7DQoJZm9udC1zdHlsZTpub3Jt
YWw7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQoJdGV4dC1zaGFkb3c6bm9uZTsNCgl0ZXh0LWVm
ZmVjdDpub25lOw0KCW1zby1mYXJlYXN0LWhpbnQ6bm87DQoJbGF5b3V0LWZsb3c6aG9yaXpvbnRh
bDsNCgljb2xvcjpibGFjazsNCgltc28tY29sb3ItaW5kZXg6MTsNCglmb250LXNpemU6ODUlOw0K
CW1zby10ZXh0LXJhaXNlOjAlOw0KCW1zby1saW5lLXNwYWNpbmc6IjEwMCAwIDAiOw0KCW1zby1t
YXJnaW4tbGVmdC1hbHQ6MDsNCgltc28tdGV4dC1pbmRlbnQtYWx0OjA7DQoJbXNvLWNoYXItd3Jh
cDoxOw0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7DQoJZGlyZWN0aW9uOmx0cjsNCgltc28td29y
ZC13cmFwOjE7DQoJbXNvLXZlcnRpY2FsLWFsaWduLXNwZWNpYWw6YmFzZWxpbmU7DQoJbXNvLWFu
c2ktbGFuZ3VhZ2U6RU4tVVM7fQ0KYTpsaW5rDQoJe2NvbG9yOiMwMDk5OTkgIWltcG9ydGFudDt9
DQphOmFjdGl2ZQ0KCXtjb2xvcjojMzMzMzk5ICFpbXBvcnRhbnQ7fQ0KYTp2aXNpdGVkDQoJe2Nv
bG9yOiM5OUNDMDAgIWltcG9ydGFudDt9DQp=
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/script.js
Content-Transfer-Encoding: quoted-printable
Content-Type: application/javascript; charset="us-ascii"
function LoadSld()
{
var sld=3DGetObj("SlideObj")
if( !g_supportsPPTHTML ) { =09
sld.style.visibility=3D"visible"
return
}
if( MakeNotesVis() ) return
runAnimations =3D _InitAnimations();
=09
if( IsWin("PPTSld") )
parent.SldUpdated(GetSldId())
g_origSz=3DparseInt(SlideObj.style.fontSize)
g_origH=3Dsld.style.posHeight
g_origW=3Dsld.style.posWidth
g_scaleHyperlinks=3D(document.all.tags("AREA").length>0)
if( g_scaleHyperlinks )
InitHLinkArray()
if( g_scaleInFrame||(IsWin("PPTSld") && parent.IsFullScrMode() ) )
document.body.scroll=3D"no"
_RSW()
if( IsWin("PPTSld") && parent.IsFullScrMode() )
FullScrInit();
=09
MakeSldVis();
ChkAutoAdv()
if( runAnimations )
{
if( document.all("NSPlay") )
document.all("NSPlay").autoStart =3D false;
if( sld.filters && sld.filters.revealtrans )
setTimeout( "document.body.start()", sld.filters.revealtrans.duration * =
1000 );
else
document.body.start();
}
}
function MakeSldVis()=20
{
var fTrans=3Dg_showAnimation && SldHasTrans()
if( fTrans )=09
{
if( g_bgSound ) {
idx=3Dg_bgSound.indexOf(",");
pptSound.src=3Dg_bgSound.substr( 0, idx );
pptSound.loop=3D -(parseInt(g_bgSound.substr(idx+1)));
}
SlideObj.filters.revealtrans.Apply()=09
}
SlideObj.style.visibility=3D"visible"
if( fTrans )
SlideObj.filters.revealtrans.Play()
}
function MakeNotesVis()=20
{
if( !IsNts() ) return false=20
SlideObj.style.display=3D"none"
nObj =3D document.all.item("NotesObj")
parent.SetHasNts(0)
if( nObj ) {=20
nObj.style.display=3D""
parent.SetHasNts(1)
}
return 1
}
function ChkAutoAdv()
{
if(SldHasTrans())
SlideObj.onfilterchange=3DAutoAdv
else
AutoAdv()
}
function AutoAdv()
{
if(!IsWin("PPTSld") || !gUseSldTimings )return
var sld=3DGetCurSld()
if( (sld.mAdvDelay>0) && !parent.IsFramesMode() )
setTimeout("parent.GoToNextSld()",sld.mAdvDelay)
}
function GetObj(id)
{
if(g_supportsPPTHTML) return document.all(id);
else return document.getElementById(id);
}
function SldHasTrans() { return SlideObj.style.filter !=3D ""; }
function GetSldId()=20
{
var regExp =3D /file:\/\/\//i
var pos =3D location.href.search(regExp)
if (MHTMLPrefix !=3D "" && pos !=3D -1)
sId =3D location.href.substring(pos)
else
{
sId =3D RemoveFilePrefixFromHref(location.href);
var regExp =3D /\//
var fixedHref =3D sId
var pos =3D -1
=09
pos =3D fixedHref.search(regExp)
while (pos !=3D -1)
{
fixedHref =3D fixedHref.replace(regExp, "\\")
pos =3D fixedHref.search(regExp)
}
=09
if (g_fBaseHyperlink =3D=3D true)
sId =3D "file:///" + fixedHref;
else
sId =3D fixedHref.substring(fixedHref.lastIndexOf('\\') + 1)
}
=09
return sId
}
function HideMenu() { if( frames["PPTSld"] && PPTSld.document.all.item("ctx=
tmenu") && PPTSld.ctxtmenu.style.display!=3D"none" ) { PPTSld.ctxtmenu.styl=
e.display=3D'none'; return true } return false }
function IsWin( name ) { return window.name =3D=3D name }
function IsNts() { return IsWin("PPTNts") }
function IsSldOrNts() { return( IsWin("PPTSld")||IsWin("PPTNts") ) }
function SupportsPPTAnimation() { return( navigator.platform =3D=3D "Win32"=
&& navigator.appVersion.indexOf("Windows")>0 ) }
function SupportsPPTHTML()
{
var appVer=3Dnavigator.appVersion, msie=3DappVer.indexOf("MSIE "), ver=3D0
if( msie >=3D 0 )
ver=3DparseFloat( appVer.substring( msie+5, appVer.indexOf(";",msie) ) )
else
ver=3DparseInt(appVer)
return( ver >=3D 4 && msie >=3D 0 )
}
function _RSW()
{
if( !g_supportsPPTHTML || IsNts() ||
( !g_scaleInFrame && (!IsWin("PPTSld") || !parent.IsFullScrMode()) ) )
return
var padding=3D0;
if( IsWin("PPTSld") && parent.IsFramesMode() ) padding=3D6
cltWidth=3Ddocument.body.clientWidth-padding
cltHeight=3Ddocument.body.clientHeight-padding
factor=3D(1.0*cltWidth)/g_origW
if( cltHeight < g_origH*factor )
factor=3D(1.0*cltHeight)/g_origH
newSize =3D g_origSz * factor
if( newSize < 1 ) newSize=3D1
s=3DSlideObj.style
s.fontSize=3DnewSize+"px"
s.posWidth=3Dg_origW*factor
s.posHeight=3Dg_origH*factor
s.posLeft=3D(cltWidth-s.posWidth+padding)/2
s.posTop=3D(cltHeight-s.posHeight+padding)/2
if( g_scaleHyperlinks )
ScaleHyperlinks( factor )
}
function _InitAnimations()
{
animRuntimeInstalled =3D ''+document.body.localTime !=3D 'undefined';
isFullScreen =3D (window.name =3D=3D "PPTSld") && !parent.IsFramesMode();
g_animUseRuntime =3D g_showAnimation && animRuntimeInstalled && !(isFullSc=
reen && parent.IsSldVisited());
if( g_animUseRuntime ) {
collSeq =3D document.all.tags("seq");
if( collSeq !=3D null ) {
for(ii=3D0;ii
numSlds )
gSldJumpIdx =3D numSlds;
if ( gSldJumpIdx >=3D 0 ) {
if ( gSldJumpIdx =3D=3D 0 )
gSldJumpIdx =3D 1;
var jumpTo =3D parseInt(gSldJumpIdx);
gSldJump =3D 0; gSldJumpIdx =3D "";
win.GoToSld( parent.GetSldList().mList[jumpTo-1].mSldHref )
}
}
}
function _KDH()
{
if( event.keyCode =3D=3D 8 ) {
event.returnValue =3D 0;
parent.GoToPrevSld();
}
}
function DocumentOnClick()
{
if( IsNts() || parent.HideMenu() ) return;
if( ( g_allowAdvOnClick && !parent.IsFramesMode() ) ||
(event && (event.keyCode=3D=3D32) ) )
parent.GoToNextSld();
}
var g_supportsPPTHTML =3D SupportsPPTHTML(), g_scaleInFrame =3D 1, gId=3D""=
, g_bgSound=3D"",
g_scaleHyperlinks =3D false, g_allowAdvOnClick =3D 1, g_showInBrowser =
=3D 0, gLoopCont =3D 0, gUseSldTimings =3D 1;
var g_showAnimation =3D g_supportsPPTHTML && SupportsPPTAnimation() && ( (w=
indow.name=3D=3D"PPTSld" && !parent.IsFramesMode()) || g_showInBrowser );va=
r g_animManager =3D null;
var g_animUseRuntime =3D false;
var g_animItemsToHide, g_animInteractiveItems, g_animSlideTime;
var g_animMainSequence =3D null;
var ENDSHOW_MESG=3D"End of slide show, click to exit.", SCREEN_MODE=3D"Fram=
es", gIsEndShow=3D0, NUM_VIS_SLDS=3D22, SCRIPT_HREF=3D"script.js", FULLSCR_=
HREF=3D"fullscreen.htm";
var gCurSld =3D gPrevSld =3D 1, g_offset =3D 0, gNtsOpen =3D gHasNts =3D gO=
tlTxtExp =3D 0, gHasNarration =3D 0, gOtlOpen =3D true
window.gPPTHTML=3DSupportsPPTHTML()
var g_fBaseHyperlink =3D false;
var gMainDoc=3Dnew Array(new hrefList("slide0001.htm",1,-1,1),new hrefList(=
"slide0004.htm",1,-1,1),new hrefList("slide0002.htm",1,-1,1),new hrefList("=
slide0006.htm",1,-1,1),new hrefList("slide0005.htm",1,-1,1),new hrefList("s=
lide0007.htm",1,-1,1),new hrefList("slide0008.htm",1,-1,1),new hrefList("sl=
ide0009.htm",1,-1,1),new hrefList("slide0010.htm",1,-1,1),new hrefList("sli=
de0011.htm",1,-1,1),new hrefList("slide0012.htm",1,-1,1),new hrefList("slid=
e0013.htm",1,-1,1),new hrefList("slide0014.htm",1,-1,1),new hrefList("slide=
0015.htm",1,-1,1),new hrefList("slide0016.htm",1,-1,1),new hrefList("slide0=
017.htm",1,-1,1),new hrefList("slide0018.htm",1,-1,1),new hrefList("slide00=
19.htm",1,-1,1),new hrefList("slide0020.htm",1,-1,1),new hrefList("slide002=
1.htm",1,-1,1),new hrefList("slide0022.htm",1,-1,1),new hrefList("slide0003=
.htm",1,-1,1));
/*********************************************
Frameset functions
These functions control slide navigation
and state of the frameset.
**********************************************/
function RemoveFilePrefixFromHref(href)
{
var regExp =3D /^file:\/\/\//i;
return href.replace(regExp, "")
}
function FullScrInit()
{
g_allowAdvOnClick =3D GetCurSld().mAdvOnClk
document.body.style.backgroundColor=3D"black"
document.oncontextmenu=3Dparent._CM;
document.onkeydown =3D _KDH;
document.ondragstart=3DCancel
document.onselectstart=3DCancel
self.focus()
}
function Redirect( frmId )
{=09
var str=3Ddocument.location.hash,idx=3Dstr.indexOf('#'), sId=3DGetSldId()
if(idx>=3D0) str=3Dstr.substr(1);
if( window.name !=3D frmId && ( sId !=3D str) ) {
obj =3D GetObj("Main-File")
window.location.href=3Dobj.href+"#"+sId
return 1
}
return 0
}
var MHTMLPrefix =3D CalculateMHTMLPrefix();=20
function CalculateMHTMLPrefix()
{
if ( document.location.protocol =3D=3D 'mhtml:') {=20
href=3Dnew String(document.location.href)=20
Start=3Dhref.indexOf('!')+1=20
End=3Dhref.lastIndexOf('/')+1=20
if (End < Start)=20
return href.substring(0, Start)=20
else=20
return href.substring(0, End)=20
}
return '';
}
function GetTags(base,tag)
{
if(g_supportsPPTHTML) return base.all.tags(tag);
else return base.getElementsByTagName(tag);
}
function UpdNtsPane(){ if(frames["PPTNts"]) PPTNts.location.replace( MHTMLP=
refix+GetHrefObj( gCurSld ).mNtsHref ) }
function UpdNavPane( sldIndex ){ if(gNavLoaded) PPTNav.UpdNav() }
function UpdOtNavPane(){ if(gOtlNavLoaded) PPTOtlNav.UpdOtlNav() }
function UpdOtlPane(){ if(gOtlLoaded) PPTOtl.UpdOtl() }
function SetHasNts( fVal )
{
if( gHasNts !=3D fVal ) {
gHasNts=3DfVal
UpdNavPane()
}
}
function ToggleOtlText()
{
gOtlTxtExp=3D!gOtlTxtExp
UpdOtlPane()
}
function ClearMedia()
{
// Clear any sounds playing before launching another browser window. Other=
wise,
// in fullscreen mode, you'll continue to hear the sound in the frames mod=
e.
if (PPTSld.pptSound) PPTSld.pptSound.loop =3D 0;
}
function FullScreen()
{=20
if ( PPTSld.g_animUseRuntime )
PPTSld.document.body.pause();
ClearMedia();
var href =3D ( document.location.protocol =3D=3D 'mhtml:') ? FULLSCR_HREF =
: FULLSCR_HREF+"#"+GetHrefObj(gCurSld).mSldHref;
if (MHTMLPrefix !=3D "")
href =3D RemoveFilePrefixFromHref(href)
if(PPTNav.event.ctrlKey) {
var w =3D (window.screen.availWidth * 1.0) / 2.0
var h =3D w * (PPTSld.g_origH * 1.0) / PPTSld.g_origW
win =3D window.open( MHTMLPrefix+href,null,"toolbar=3D0,resizable=3D1,top=
=3D0,left=3D0," + "width=3D"+ w + ",height=3D" + h );
if( win.document.body && PPTSld.g_animUseRuntime )
win.document.body.PPTSldFrameset=3Dwindow;
}
else
{
win =3D window.open( MHTMLPrefix+href,null,"fullscreen=3Dyes" );
if( win.document.body && PPTSld.g_animUseRuntime )
win.document.body.PPTSldFrameset=3Dwindow;
}
}
function ToggleVNarration()
{
rObj=3DPPTSld.document.all("NSPlay")
if( rObj && !PPTSld.g_animUseRuntime ) {
if( (rObj.playState =3D=3D 1)||(rObj.playState =3D=3D 0) )
rObj.Play()
else if( rObj.playState =3D=3D 2 )
rObj.Pause()
else
return;
}
else if( PPTSld.g_animUseRuntime )
{
narObj =3D PPTSld.document.all("narrationID")
if( narObj )
narObj.togglePause()
}
}
function GetCurSldNum()
{ =20
obj=3DGetHrefObj(gCurSld)
if( obj.mOrigVis =3D=3D 1 )
return obj.mSldIdx
else =20
return gCurSld
}
function GetNumSlds()
{ =20
if( GetHrefObj(gCurSld).mOrigVis =3D=3D 1 )
return GetSldList().mNumVisSlds;
else
return GetSldList().mList.length
}
function GetSldNum( href )
{
for(ii=3D0; ii 1 )
PopSldList();
else if( !IsFramesMode() ) {
if( gLoopCont )
GoToFirst()
else
EndShow()
}
}
function GoToPrevSld()
{
ii=3DgCurSld-1
if( ii > 0 ) {
obj=3DGetHrefObj(ii)
while ( obj && ( obj.mVis =3D=3D 0 ) && ( ii>0 ) )
obj=3DGetHrefObj(--ii)
if( ii =3D=3D 0 ) ii=3D1
GoToSldNum(ii)
}
}
function GoToFirst(){ GoToSld( GetHrefObj(1).mSldHref ) }
function GoToLast()
{
ii=3DGetSldList().mList.length
if( ii !=3D gCurSld )
GoToSld( GetHrefObj(ii).mSldHref )
}
function GoToSldNum( num )
{
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
obj =3D GetHrefObj( num )
obj.mVis=3D1
gPrevSld=3DgCurSld
gCurSld =3D num;
=09
if (MHTMLPrefix !=3D "")
PPTSld.location.replace(MHTMLPrefix+RemoveFilePrefixFromHref(obj.mSldHref=
))
else
PPTSld.location.replace(obj.mSldHref)
=09
if( IsFramesMode() ) {
UpdNavPane(); UpdOtlPane(); UpdNtsPane()
}
}
function GoToSld( href )
{
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
GetHrefObj( GetSldNum(href) ).mVis=3D1
if (MHTMLPrefix !=3D "")
PPTSld.location.replace(MHTMLPrefix+RemoveFilePrefixFromHref(href))
else
PPTSld.location.replace(href)
}
function SldUpdated( id )
{
if( id =3D=3D GetHrefObj(gCurSld).mSldHref ) return
gPrevSld=3DgCurSld
gCurSld=3DGetSldNum(id)
if( IsFramesMode() ) {
UpdNavPane(); UpdOtlPane(); UpdNtsPane()
}
}
function PrevSldViewed(){ GoToSld( GetHrefObj(gPrevSld).mSldHref ) }
function HasPrevSld() { return ( gIsEndShow || ( gCurSld !=3D 1 && GetHrefO=
bj( gCurSld-1 ).mVis =3D=3D 1 )||( GetCurSldNum() > 1 ) ) }
function HasNextSld() { return (GetCurSldNum() !=3D GetNumSlds()) }
function CloseWindow() {
if( HideMenu() ) return;
=09
var event =3D PPTSld.event;
if( !IsFramesMode() && event && (event.keyCode=3D=3D27 || event.keyCode=3D=
=3D32 || event.type=3D=3D"click" ) )
window.close( self );
CatchNumKeys( self, event );
}
function Unload() { gIsEndShow=3D0; }
function SetupEndShow() {
gIsEndShow=3D1;
PPTSld.document.body.scroll=3D"no";
PPTSld.document.onkeypress=3DCloseWindow;
PPTSld.document.onclick=3DCloseWindow;
PPTSld.document.oncontextmenu=3D_CM;
}
function EndShow()
{
if( IsFramesMode() ) return
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
doc=3DPPTSld.document
var dir =3D doc.body.dir
if( dir !=3D "rtl" ) dir =3D "ltr";
doc.open()
doc.writeln('' + ENDSHOW_MESG + '
=
body>')
doc.close()
}
function SetSldVisited(){ GetSldList().mList[gCurSld-1].mVisited=3Dtrue }
function IsSldVisited(){ return GetSldList().mList[gCurSld-1].mVisited }
function hrefList( sldHref, visible, advDelay, advClk )
{
this.mSldHref=3D this.mNtsHref =3D sldHref
this.mOrigVis=3D this.mVis =3D visible
this.mVisited=3D false
this.mAdvDelay=3D advDelay
this.mAdvOnClk=3D advClk
}
function SldList(arr,curSld,fEnd)
{
this.mCurSld =3D curSld;
this.mList =3D new Array();
var idx =3D 1;
for(ii=3D0;ii 0) {
PushSldList(sldList,fEnd);
gCurSld =3D 1;
}
else
if( PPTSld.event ) PPTSld.event.cancelBubble=3Dtrue
}
function PushSldList(arr,fEnd) {
var ii =3D gSldStack.length;
gSldStack[ii] =3D new SldList(arr,gCurSld,fEnd);
GoToSld( gSldStack[ii].mList[0].mSldHref );
}
function PopSldList() {
if (gSldStack[gSldStack.length-1].fEndShow)
EndShow()
else {
gCurSld =3D gSldStack[gSldStack.length-1].mCurSld;
gSldStack[gSldStack.length-1] =3D null;
gSldStack.length--;
var sldList =3D gSldStack[gSldStack.length-1];
GoToSld( sldList.mList[gCurSld - 1].mSldHref );
}
}
var custShowList=3Dnew Array();
/*********************************************
Navigation button implementation
There are 2 types of buttons: ImgBtn, TxtBtn
implemented as function objects. They share
a similiar interface so the event handlers
can call SetActive, for example, on a button=20
object without needing to know exactly=20
what type of button it is.
**********************************************/
//----------------------------------
function ImgBtn( oId,bId,w,action )
//----------------------------------
{
var t=3Dthis
t.Perform =3D _IBP
t.SetActive =3D _IBSetA
t.SetInactive=3D _IBSetI
t.SetPressed =3D _IBSetP
t.SetDisabled=3D _IBSetD
t.Enabled =3D _IBSetE
t.ChangeIcon =3D null
t.UserAction =3D action
t.ChgState =3D _IBUI
t.mObjId =3D oId
t.mBorderId=3D bId
t.mWidth =3D w
t.mIsOn =3D t.mCurState =3D 0
}
function _IBSetA()
{
if( this.mIsOn ) {
obj=3Dthis.ChgState( gHiliteClr,gShadowClr,2 )
obj.style.posTop=3D0
}
}
function _IBSetI()
{
if( this.mIsOn ) {
obj=3Dthis.ChgState( gFaceClr,gFaceClr,1 )
obj.style.posTop=3D0=20
}
}
function _IBSetP()
{
if( this.mIsOn ) {
obj=3Dthis.ChgState( gShadowClr,gHiliteClr,2 )
obj.style.posLeft+=3D1; obj.style.posTop+=3D1
}
}
function _IBSetD()
{ =20
obj=3Dthis.ChgState( gFaceClr,gFaceClr,0 )
obj.style.posTop=3D0=20
}
function _IBSetE( state )
{
var t=3Dthis
GetObj( t.mBorderId ).style.visibility=3D"visible"
if( state !=3D t.mIsOn ) {
t.mIsOn=3Dstate
if( state )
t.SetInactive()
else
t.SetDisabled()
}
}
function _IBP()
{
var t=3Dthis
if( t.mIsOn ) {
if( t.UserAction !=3D null )
t.UserAction()
if( t.ChangeIcon ) {
obj=3DGetObj(t.mObjId)
if( t.ChangeIcon() )
obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-4)*t.mWidth
else
obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-0)*t.mWidth
}
t.SetActive()
} =20
}
function _IBUI( clr1,clr2,nextState )
{
var t=3Dthis
SetBorder( GetObj( t.mBorderId ),clr1,clr2 )
obj=3DGetObj( t.mObjId )
obj.style.posLeft=3Dobj.style.posLeft+(t.mCurState-nextState)*t.mWidth-obj=
.style.posTop
t.mCurState=3DnextState
return obj
}
//-----------------------------------------
function TxtBtn( oId,oeId,action,chkState )
//-----------------------------------------
{
var t=3Dthis
t.Perform =3D _TBP
t.SetActive =3D _TBSetA
t.SetInactive=3D _TBSetI
t.SetPressed =3D _TBSetP
t.SetDisabled=3D _TBSetD
t.SetEnabled =3D _TBSetE
t.GetState =3D chkState
t.UserAction =3D action
t.ChgState =3D _TBUI
t.mObjId =3D oId
t.m_elementsId=3D oeId
t.mIsOn =3D 1
}
function _TBSetA()
{
var t=3Dthis
if( t.mIsOn && !t.GetState() )
t.ChgState( gHiliteClr,gShadowClr,0,0 )
}
function _TBSetI()
{
var t=3Dthis
if( t.mIsOn && !t.GetState() )
t.ChgState( gFaceClr,gFaceClr,0,0 )
}
function _TBSetP()
{
if( this.mIsOn )
this.ChgState( gShadowClr,gHiliteClr,1,1 )
}
function _TBSetD()
{ =20
this.ChgState( gFaceClr,gFaceClr,0,0 )
this.mIsOn =3D 0
}
function _TBSetE()
{
var t=3Dthis
if( !t.GetState() )
t.ChgState( gFaceClr,gFaceClr,0,0 )
else
t.ChgState( gShadowClr,gHiliteClr,1,1 )
t.mIsOn =3D 1
}
function _TBP()
{
var t=3Dthis
if( t.mIsOn ) {=20
if( t.UserAction !=3D null )
t.UserAction()
if( !t.GetState )
return
if( t.GetState() )
t.SetPressed()
else
t.SetActive()
} =20
}
function _TBUI( clr1,clr2,lOffset,tOffset )
{
SetBorder( GetObj( this.mObjId ),clr1,clr2 )
Offset( GetObj( this.m_elementsId ),lOffset,tOffset )
}
function Offset( obj, top, left ){ obj.style.top=3Dtop; obj.style.left=3Dle=
ft }
function SetBorder( obj, upperLeft, lowerRight )
{
s=3Dobj.style;
s.borderStyle =3D "solid"
s.borderWidth =3D 1=20
s.borderLeftColor =3D s.borderTopColor =3D upperLeft
s.borderBottomColor=3D s.borderRightColor =3D lowerRight
}
function GetBtnObj(){ return gBtnArr[window.event.srcElement.id] }
function BtnOnOver(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetActive() }
function BtnOnDown(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetPressed() }
function BtnOnOut(){ b=3DGetBtnObj(); if( b !=3D null ) b.SetInactive() }
function BtnOnUp()
{
b=3DGetBtnObj()
if( b !=3D null )
b.Perform()
else
Upd()
}
function GetNtsState(){ return parent.gNtsOpen }
function GetOtlState(){ return parent.gOtlOpen }
function GetOtlTxtState(){ return parent.gOtlTxtExp }
function NtsBtnSetFlag( fVal )
{
s=3Ddocument.all.item( this.m_flagId ).style
s.display=3D"none"
if( fVal )
s.display=3D""
else
s.display=3D"none"
}
function _BSetA_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S=
etActive() }
function _BSetI_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S=
etInactive() }
function _BSetP_Border(){ b =3D gBtnArr[this.mObjId]; if( b !=3D null ) b.S=
etPressed() }
function _BSetA_BorderImg()
{=20
b =3D gBtnArr[this.mBorderId]=20
if( b !=3D null && this.mIsOn && !b.GetState() ) {
obj=3Dthis.ChgState( gHiliteClr,gShadowClr,2 )
obj.style.posTop=3D0
}
}
function _BSetI_BorderImg()
{=20
b =3D gBtnArr[this.mBorderId]
if( b !=3D null && this.mIsOn && !b.GetState() ) {
obj=3Dthis.ChgState( gFaceClr,gFaceClr,1 )
obj.style.posTop=3D0
}
}
var gHiliteClr=3D"THREEDHIGHLIGHT",gShadowClr=3D"THREEDSHADOW",gFaceClr=3D"=
THREEDFACE"
var gBtnArr =3D new Array()
gBtnArr["nb_otl"] =3D new TxtBtn( "nb_otl","nb_otlElem",parent.ToggleOtlPan=
e,GetOtlState )
gBtnArr["nb_otlElem"] =3D new TxtBtn( "nb_otl","nb_otlElem",parent.ToggleOt=
lPane,GetOtlState )
gBtnArr["nb_nts"] =3D new ImgBtn( "nb_nts","nb_ntsBorder",10,parent.ToggleN=
tsPane )
gBtnArr["nb_nts"].SetActive =3D _BSetA_BorderImg;
gBtnArr["nb_nts"].SetInactive =3D _BSetI_BorderImg;
gBtnArr["nb_ntsBorder"] =3D new TxtBtn( "nb_ntsBorder","nb_ntsElem",parent.=
ToggleNtsPane,GetNtsState )
gBtnArr["nb_ntsElem"] =3D new TxtBtn( "nb_ntsBorder","nb_ntsElem",parent.To=
ggleNtsPane,GetNtsState )
gBtnArr["nb_prevBorder"] =3D gBtnArr["nb_prev"]=3D new ImgBtn( "nb_prev","n=
b_prevBorder",30,parent.GoToPrevSld )
gBtnArr["nb_nextBorder"] =3D gBtnArr["nb_next"]=3D new ImgBtn( "nb_next","n=
b_nextBorder",30,parent.GoToNextSld )
gBtnArr["nb_sldshw"]=3D new ImgBtn( "nb_sldshw","nb_sldshwBorder",18,parent=
.FullScreen )
gBtnArr["nb_sldshwBorder"] =3D new TxtBtn( "nb_sldshw","nb_sldshwBorder",pa=
rent.FullScreen,null )
gBtnArr["nb_sldshwBorder"].SetActive =3D _BSetA_Border;
gBtnArr["nb_sldshwBorder"].SetInactive =3D _BSetI_Border;
gBtnArr["nb_sldshwText"] =3D new TxtBtn( "nb_sldshw","nb_sldshwText",parent=
.FullScreen,null )
gBtnArr["nb_sldshwText"].SetActive =3D _BSetA_Border;
gBtnArr["nb_sldshwText"].SetInactive =3D _BSetI_Border;
gBtnArr["nb_voice"] =3D gBtnArr["nb_voiceBorder"] =3D new ImgBtn( "nb_voice=
","nb_voiceBorder",18,parent.ToggleVNarration )
gBtnArr["nb_otlTxtBorder"] =3D gBtnArr["nb_otlTxt"]=3D new ImgBtn( "nb_otlT=
xt","nb_otlTxtBorder",23,parent.ToggleOtlText )
gBtnArr["nb_ntsBorder"].m_flagId=3D "nb_nts"
gBtnArr["nb_ntsBorder"].SetFlag =3D NtsBtnSetFlag
gBtnArr["nb_otlTxt"].ChangeIcon=3D GetOtlTxtState
/*********************************************
Context menu implementation
_CM() is the function that's hooked up to
the oncontextmenu event. Once we're asked to
show the menu, we first build it by creating
DIVs on-the-fly. Then we position it=20
within the screen area so it doesn't get
clipped.
Creating the DIVs using createElement() means
we don't have to write out any extra HTML
into the slide HTML files.
**********************************************/
var sNext=3D"Next",sPrev=3D"Previous",sEnd=3D"End Show",sFont=3D"Arial",sAr=
row=3D"Arrow",sFreeform=3D"Freeform",sRect=3D"Rectangle",sOval=3D"Oval"
function ShowMenu()
{
BuildMenu();
var doc=3DPPTSld.document.body,x=3DPPTSld.event.clientX+doc.scrollLeft,y=
=3DPPTSld.event.clientY+doc.scrollTop
m =3D PPTSld.document.all.item("ctxtmenu")
m.style.pixelLeft=3Dx
if( (x+m.scrollWidth > doc.clientWidth)&&(x-m.scrollWidth > 0) )
m.style.pixelLeft=3Dx-m.scrollWidth
m.style.pixelTop=3Dy
if( (y+m.scrollHeight > doc.clientHeight)&&(y-m.scrollHeight > 0) )
m.style.pixelTop=3Dy-m.scrollHeight
m.style.display=3D""
}
function _CM()
{
if( !parent.IsFullScrMode() ) return;
if(!PPTSld.event.ctrlKey) {
ShowMenu()
return false
} else
HideMenu()
}
function BuildMenu()
{
if( PPTSld.document.all.item("ctxtmenu") ) return
var mObj=3DCreateItem( PPTSld.document.body )
mObj.id=3D"ctxtmenu"
mObj.style.visibility=3D"hidden"
var s=3DmObj.style
s.position=3D"absolute"
s.cursor=3D"default"
s.width=3D"120px"
SetCMBorder(mObj,"menu","black")
var iObj=3DCreateItem( mObj )
SetCMBorder( iObj, "threedhighlight","threedshadow" )
iObj.style.padding=3D2
CreateMenuItem( iObj,sNext,M_GoNextSld,M_True )
CreateMenuItem( iObj,sPrev,M_GoPrevSld,M_HasPrevSld )
=09
CreateSeparator( iObj )
CreateMenuItem( iObj,sEnd,M_End,M_True )
mObj.style.visibility=3D"visible"
}
function Cancel() { window.event.cancelBubble=3Dtrue; window.event.returnVa=
lue=3Dfalse }
function Highlight() { ChangeClr("activecaption","threedhighlight") }
function Deselect() { ChangeClr("threedface","menutext") }
function Perform()
{
e=3DPPTSld.event.srcElement
if( e.type=3D=3D"menuitem" && e.IsActive() )
e.Action()
else
PPTSld.event.cancelBubble=3Dtrue
}
function ChangeClr( bg,clr )
{
e=3DPPTSld.event.srcElement
if( e.type=3D=3D"menuitem" && e.IsActive() ) {
e.style.backgroundColor=3Dbg
e.style.color=3Dclr
}
}
function M_HasPrevSld() { return( parent.HasPrevSld() ) }
function M_GoNextSld() { if( gIsEndShow ) M_End(); else GoToNextSld() }
function M_GoPrevSld() { if( gIsEndShow ) { gIsEndShow=3D0; history.back();=
PPTSld.event.cancelBubble=3Dtrue; } else GoToPrevSld() }
function M_True() { return true }
function M_End() { window.close( self ) }
function CreateMenuItem( node,text,action,eval )
{
var e=3DCreateItem( node )
e.type=3D"menuitem"
e.Action=3Daction
e.IsActive=3Deval
e.innerHTML=3Dtext
if( !e.IsActive() )
e.style.color=3D"threedshadow"
e.onclick=3DPerform
e.onmouseover=3DHighlight
e.onmouseout=3DDeselect
s=3De.style;
s.fontFamily=3DsFont
s.fontSize=3D"9pt"
s.paddingLeft=3D2
}
function CreateSeparator( node )
{
var sObj=3DCreateItem( node )
SetCMBorder(sObj,"menu","menu")
var s=3DsObj.style
s.borderTopColor=3D"threedshadow"
s.borderBottomColor=3D"threedhighlight"
s.height=3D1
s.fontSize=3D"0px"
}
function CreateItem( node )
{
var elem=3DPPTSld.document.createElement("DIV")
node.insertBefore( elem )
return elem
}
function SetCMBorder( o,ltClr,rbClr )
{
var s=3Do.style
s.backgroundColor=3D"menu"
s.borderStyle=3D"solid"
s.borderWidth=3D1
s.borderColor=3DltClr+" "+rbClr+" "+rbClr+" "+ltClr
}
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/fullscreen.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/buttons.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhWAESAPf4AAAAAIAAAACAAICAAAAAgIAAgACAgICAgAQEBISEBASEBISEhAQEhMTExAQE
/KTM9Pz8/ERERPz8BAT8/KSkpGRkhMTcxCRkxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAMDAwP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAPgALAAAAABYARIA
QAj/APEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGCEiQKCRo8YDIEHig2DxAD4LKD1avDDhgUuV
GUOGbHBR5QGYFBG4fHAB58EKECJEwCfUYAWPFGAygLCRKQIIUKM6WAohKUGgCikcFWh1INWoYKVS
7SrQ41GbIhGYLAuVQVOoC+IyXUuUAkG1HE3KFDhAwkgJc5/qDZmxsOHDiBMrXsy4sePDGyP7lChT
5MULmDPnlDw5YmW6FTNrfgi0aNGEZPEtbfo2bNTUpYeeRph69dPWrqvCNFuBIGG1A59CYPAVQtwF
cw0OxWdTIOiBCQAjaAB17fOFII8voGmRc+eOkilm/z9OvTtnjN4hYk1YoT3H2rnBOphPAB9skgq3
2lcaX/5YnJVt9BloAar12UEIRGCZdQghMABI1Tn32IQUVthYexhmqGGGMBHAgIfEhSiiiATAtOGJ
GnYI4ogsEldicAYOGNJGZaml3Y0L3NTZUBz1xlB0PUoUI0jlVWRSVN89xBKSGB1YU1TMoRfVBEle
hR9HQs1GEHxQ3RZZbveZthxt/LEmXHyp5XWABSCpaRJwbM13gAACPHVccgJFgF+NEhqUAEkQSCfc
ddhVhh5dVTaEAEsTUNlkZUWKN9BNGDE6QU8OrSdbllzpxyVTTrU21Uj3scfhp7nNpyoDaTIEJ3P9
If8J2kbLNYegg9JRBwGhFvbq66+ZUiDssMQWK2yHxiZLrInKNotss8l+B5yBrr5p2UIJvortANoC
6+234IbLla/elRtZjeamh5CC3Sb0YLvixivvYkDFGlZqBNh7r4n6goVvv6/ZlCicN+kL71ALTnpQ
dCIZp7CihkLA3UQmoWRBogyxtBPGCTnZncVR1rSTo5nuydC/Eo8kUH+lOoTyyvjoCuZu+PjYIKLD
rZybtrM1d10C0QXKEVz48GrQkEeWdFJKlbb0UmEeV0SzyC6RvNB646LWIVjUNeC1zAFb+RDKXksM
9r531bwmpQW9+hQDDsx5pqwDRWBXcFES2hc+gEn/wJGdEEWdE6LoWcoxQweaTNmkhydkKaYMYY2Q
p1unbLl/pPKbn3v7EZRvrKvqlja2ONvrtoIw9tn2g32/tQBlhtYkU+MNikZ7QYlPDPuMldpOmuJX
nVo5VF3HjI+q89mteX5IDd/fVFClma5kiE4f2XUJhlz09gj2NbTDRifkmu7zXjR++RVJ/lPznuvr
QH2iD6S+UewP9Dnon6d2NLwN8n90BB6hC68cFMCHoe+ACASP9c4DowUyEF0OPFcDI0ij/VXPaAKC
UfhS95AKGoQ7IBRICI1HwhGaUIQoLGEKT6jCFrLwhSuMoQtlCMMZ2rCGOKShDm+4wxzy8Ic+DGIP
B4cIRCKGMCAAOy==
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/frame.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 24
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/outline.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
No=
tes
------=_NextPart_01C71956.BFFCDC10
Content-Location: file:///C:/AF8A9A74/cse303-06au-lecture24_files/filelist.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C71956.BFFCDC10--