• * Makes a copy of the inserted string.
=
div>
• * Precondition: val is not NULL.
• * Postcondition: List is sorted in
<=
/div>
• *  =
;
alphabetical order
• * @param head : address of pointer to
• * the
first element in the list
• * @param val : new string to insert
<=
/div>
• * @return nothing
• */
• void insert(Node** head, char * val);
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0019_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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0009.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
Minimum Specification
• Describe what the f=
unction/method
does
• Describe parameters<=
/i>
(are they modified?)
• Describe what the func=
tion
returns
• State preconditions=
– Assumptions about
parameter values
• E.g., string not NULL,
units are inches, x > 0…
• Avoid trusting
callers. Check preconditions=
.
• Describe side effects&=
#13;
– E.g., modifies global
vars, reads/writes file
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0009_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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0021.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
Testing
• Goal: Verification and
validation
– Does the system work?&=
#13;
– Does it do what it is
supposed to do?
– Increase our confidenc=
e in
the system
• How do we know when we=
are
done?
– Coverage metrics
exist
• Execute each statement=
at
least once
• Execute each branch or
path at least once
– In Practice, you're ne=
ver
done testing
=
;
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0021_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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0022.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
Two Basic Types of Tests
• Black Box Tests
=
span>
– Test without looking at
implementation
– Design test cases in t=
erms
of specification
– Very useful in
practice
– Ideally, someone else
should write them
• White Box Tests (a.k.a.
"Glass Box" tests)
– Take implementation in=
to
account
– Easier to ensure good
coverage
– Common sense: Test all
branches once
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0022_image022.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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0023.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
More Types of Tests
=
8226; Unit
testing
&=
#8211; Test
one class at a time
=
8226; Integration
testing
&=
#8211; Test
a number of classes together
=
8226; System
testing
&=
#8211; Test
an entire working system
=
8226; Perform
them all as you develop
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0023_image023.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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0024.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
Regression Testing
=
8226; Save
tests as you develop
&=
#8211; Tests
exercise more and more features
=
8226; Run
all tests automatically
&=
#8211; Every
time you add a feature
&=
#8211; Every
time you fix a bug
=
8226; Helps
to verify that everything still works
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0024_image024.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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0025.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
Stubs
=
8226; How
test a class when it uses classes that…
&=
#8211; Do
not exist?
&=
#8211; Are
buggy?
&=
#8211; Are
too large and slow?
=
8226; Answer:
create "fake classes"
&=
#8211; One
for each class that doesn't exist
&=
#8211; Just
good enough for the tests
&=
#8211; As
small as possible, so often called a stub
–
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0025_image025.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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0020.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
Summary
=
8226; Software
devel. involves several steps
=
8211; Carefully
think about what you must build
&=
#8211; Carefully
think about how to build it
&=
#8211; Prepare
tests based on your specs
&=
#8211; Implement,
test, and document
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0020_image026.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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0003.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
11/13/2006
CSE 303 Lecture 17
24
Next Time
• Version Control Tools
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/slide0003_image027.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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_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
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQkINCgl7bXNvLXNwZWNp
YWwtZm9ybWF0OmJ1bGxldFwyMDIyO30NCi5IQg0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1m
YW1pbHk6QXJpYWw7DQoJY29sb3I6Izk5MDAwMDsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hh
ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIxDQoJe21zby1jaGFyLXdy
YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjINCgl7bXNvLWNoYXItd3JhcDox
Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMw0KCXttc28tY2hhci13cmFwOjE7DQoJ
bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEI0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQg0KCXtjb2xvcjojOTkwMDAwOw0KCW1zby1jaGFyLXdy
YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjENCgl7bXNvLWNoYXItd3JhcDox
Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMg0KCXttc28tY2hhci13cmFwOjE7DQoJ
bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjQNCgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5z
b2t1LW92ZXJmbG93OjE7fQ0KLlRibA0KCXtjb2xvcjojOTkwMDAwOw0KCW1zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwxDQoJe21zby1jaGFyLXdyYXA6MTsN
Cgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwyDQoJe21zby1jaGFyLXdyYXA6MTsNCglt
c28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmw0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5kZWZhdWx0Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6bm9idWxs
ZXRcMjAyMjt9DQouZGVmYXVsdA0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp
YWw7DQoJZm9udC13ZWlnaHQ6bm9ybWFsOw0KCWZvbnQtc3R5bGU6bm9ybWFsOw0KCXRleHQtZGVj
b3JhdGlvbjpub25lOw0KCXRleHQtc2hhZG93Om5vbmU7DQoJdGV4dC1lZmZlY3Q6bm9uZTsNCglt
c28tZmFyZWFzdC1oaW50Om5vOw0KCWxheW91dC1mbG93Omhvcml6b250YWw7DQoJY29sb3I6Ymxh
Y2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjg1JTsNCgltc28tdGV4dC1yYWlz
ZTowJTsNCgltc28tbGluZS1zcGFjaW5nOiIxMDAgMCAwIjsNCgltc28tbWFyZ2luLWxlZnQtYWx0
OjA7DQoJbXNvLXRleHQtaW5kZW50LWFsdDowOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxOw0KCWRpcmVjdGlvbjpsdHI7DQoJbXNvLXdvcmQtd3JhcDoxOw0KCW1z
by12ZXJ0aWNhbC1hbGlnbi1zcGVjaWFsOmJhc2VsaW5lOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVO
LVVTO30NCmE6bGluaw0KCXtjb2xvcjojMDA5OTk5ICFpbXBvcnRhbnQ7fQ0KYTphY3RpdmUNCgl7
Y29sb3I6IzMzMzM5OSAhaW1wb3J0YW50O30NCmE6dmlzaXRlZA0KCXtjb2xvcjojOTlDQzAwICFp
bXBvcnRhbnQ7fQ0K
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_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
aGFyLXdyYXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQkINCgl7bXNvLXNwZWNp
YWwtZm9ybWF0OmJ1bGxldFwyMDIyO30NCi5IQg0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1m
YW1pbHk6QXJpYWw7DQoJY29sb3I6IzAwMDA5OTsNCglmb250LXNpemU6MTMzJTsNCgltc28tY2hh
ci13cmFwOjE7DQoJbXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEIxDQoJe21zby1jaGFyLXdy
YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5IQjINCgl7bXNvLWNoYXItd3JhcDox
Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLkhCMw0KCXttc28tY2hhci13cmFwOjE7DQoJ
bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouSEI0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQg0KCXtjb2xvcjojMDAwMDk5Ow0KCW1zby1jaGFyLXdy
YXA6MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjENCgl7bXNvLWNoYXItd3JhcDox
Ow0KCW1zby1raW5zb2t1LW92ZXJmbG93OjE7fQ0KLlFCMg0KCXttc28tY2hhci13cmFwOjE7DQoJ
bXNvLWtpbnNva3Utb3ZlcmZsb3c6MTt9DQouUUIzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5RQjQNCgl7bXNvLWNoYXItd3JhcDoxOw0KCW1zby1raW5z
b2t1LW92ZXJmbG93OjE7fQ0KLlRibA0KCXtjb2xvcjojMDAwMDk5Ow0KCW1zby1jaGFyLXdyYXA6
MTsNCgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwxDQoJe21zby1jaGFyLXdyYXA6MTsN
Cgltc28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwyDQoJe21zby1jaGFyLXdyYXA6MTsNCglt
c28ta2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmwzDQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28t
a2luc29rdS1vdmVyZmxvdzoxO30NCi5UYmw0DQoJe21zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxO30NCi5kZWZhdWx0Qg0KCXttc28tc3BlY2lhbC1mb3JtYXQ6bm9idWxs
ZXRcMjAyMjt9DQouZGVmYXVsdA0KCXt0ZXh0LWFsaWduOmxlZnQ7DQoJZm9udC1mYW1pbHk6QXJp
YWw7DQoJZm9udC13ZWlnaHQ6bm9ybWFsOw0KCWZvbnQtc3R5bGU6bm9ybWFsOw0KCXRleHQtZGVj
b3JhdGlvbjpub25lOw0KCXRleHQtc2hhZG93Om5vbmU7DQoJdGV4dC1lZmZlY3Q6bm9uZTsNCglt
c28tZmFyZWFzdC1oaW50Om5vOw0KCWxheW91dC1mbG93Omhvcml6b250YWw7DQoJY29sb3I6Ymxh
Y2s7DQoJbXNvLWNvbG9yLWluZGV4OjE7DQoJZm9udC1zaXplOjg1JTsNCgltc28tdGV4dC1yYWlz
ZTowJTsNCgltc28tbGluZS1zcGFjaW5nOiIxMDAgMCAwIjsNCgltc28tbWFyZ2luLWxlZnQtYWx0
OjA7DQoJbXNvLXRleHQtaW5kZW50LWFsdDowOw0KCW1zby1jaGFyLXdyYXA6MTsNCgltc28ta2lu
c29rdS1vdmVyZmxvdzoxOw0KCWRpcmVjdGlvbjpsdHI7DQoJbXNvLXdvcmQtd3JhcDoxOw0KCW1z
by12ZXJ0aWNhbC1hbGlnbi1zcGVjaWFsOmJhc2VsaW5lOw0KCW1zby1hbnNpLWxhbmd1YWdlOkVO
LVVTO30NCmE6bGluaw0KCXtjb2xvcjojMDA5OTk5ICFpbXBvcnRhbnQ7fQ0KYTphY3RpdmUNCgl7
Y29sb3I6IzMzMzM5OSAhaW1wb3J0YW50O30NCmE6dmlzaXRlZA0KCXtjb2xvcjojOTlDQzAwICFp
bXBvcnRhbnQ7fQ0K
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_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=3D24, 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("slide0005.htm",1,-1,1),new hrefList("=
slide0016.htm",1,-1,1),new hrefList("slide0010.htm",1,-1,1),new hrefList("s=
lide0007.htm",1,-1,1),new hrefList("slide0002.htm",1,-1,1),new hrefList("sl=
ide0008.htm",1,-1,1),new hrefList("slide0011.htm",1,-1,1),new hrefList("sli=
de0012.htm",1,-1,1),new hrefList("slide0013.htm",1,-1,1),new hrefList("slid=
e0014.htm",1,-1,1),new hrefList("slide0015.htm",1,-1,1),new hrefList("slide=
0017.htm",1,-1,1),new hrefList("slide0018.htm",1,-1,1),new hrefList("slide0=
019.htm",1,-1,1),new hrefList("slide0009.htm",1,-1,1),new hrefList("slide00=
21.htm",1,-1,1),new hrefList("slide0022.htm",1,-1,1),new hrefList("slide002=
3.htm",1,-1,1),new hrefList("slide0024.htm",1,-1,1),new hrefList("slide0025=
.htm",1,-1,1),new hrefList("slide0020.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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/fullscreen.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_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_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/frame.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 17
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/outline.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
No=
tes
1
Richard C. Davis
UW CSE – 11/13/2006
Lecture 17 –
Specification and Testing
2
Lowest: 17.5 (30%)
Highest: 51.5 (89%)
Average: 36 (62%)
Std Dev: 9.6 (17%)
3
Don't Panic!
This was a very hard exam
It's only 20% of your grade
We'll adjust scores
4(b) will be extra credit
We'll make sure people who invested time won't be penalized
You can still pull up your score
Do well on homework
Final will be easier
4
Many used .c and .h files improperly
.h
Contain function prototypes & typedefs
For a set of related functions
In C++, contain class definitions
.c
These are the files you compile
They include the ".h" files needed
We won't count off much for this on homework
Hard for you to understand why we use this structure
You'll understand more when we cover build scripting
5
Struggled with C on midterm or HW4?
Come to study session tonight
Need to make sure you're not falling behind
We'll cover midterm and HW4 questions
Office hours today if you can't make it
6
Repeat: Choose a partner now!
Send e-mail with choice to Lincoln Ritter
Team project directories will be created
This will take a day after Lincoln gets e-mail
7
Up to Now
Getting around Unix
Shell Scripting
C
C++
From Now On
Good software development practices
Tools for managing larger projects
8
Basic Software Engineering
Development Process
Specification
Unit Testing and Stubs
9
Main steps in building a system
Requirements Analysis
Specification
Design
Implementation
Testing
Documentation
Maintenance
10
Requirements analysis
What are we supposed to build? What do our customers need?
Specification
Precise description of provided functionality
How Precise? Depends on what's being built
Design
Define the internal software architecture
Break system into components
Modules, interfaces, classes, etc.
11
Implementation
Write the code and perform simple tests
Testing
Extensive testing of parts and whole system
Documentation
All steps in the process must be documented
User guide, developer's guide, etc.
Maintenance
Fixing bugs, working on later releases
12
Main steps in building a system
Requirements Analysis
Specification
Design
Implementation
Testing
Documentation
Maintenance
Order of steps varies, frequent iteration
How formal? Depends on what you're building
13
Writing a complete specification is hard
Often as difficult as writing code
Even worse when specification is formal
Partial specification is better than none
Specification helps later parts of process
Implementation
Test Development
Maintenance
Iterating is normal! Often need to fix spec.
14
Let's write an informal specification for
void insert(Node** head, char * val);
15
/**
* Inserts a value into the list
* @param head : address of pointer to
*
the first element in the list
* @param val : new string to insert
* @return nothing
*/
void insert(Node** head, char * val);
16
/**
* Inserts a value into the list.
* Does not check for duplicates.
* Makes a copy of the inserted string.
* Precondition: val is not NULL.
* Postcondition: List is sorted in
*  =
;
alphabetical order
* @param head : address of pointer to
*
the first element in the list
* @param val : new string to insert
* @return nothing
*/
void insert(Node** head, char * val);
17
Describe what the function/method does
Describe parameters (are they modified?)
Describe what the function returns
State preconditions
Assumptions about parameter values
E.g., string not NULL, units are inches, x > 0…
Avoid trusting callers.
Check preconditions.
Describe side effects
E.g., modifies global vars, reads/writes file
18
Goal: Verification and validation
Does the system work?
Does it do what it is supposed to do?
Increase our confidence in the system
How do we know when we are done?
Coverage metrics exist
Execute each statement at least once
Execute each branch or path at least once
In Practice, you're never done testing
19
Black Box Tests
Test without looking at implementation
Design test cases in terms of specification
Very useful in practice
Ideally, someone else should write them
White Box Tests (a.k.a. "Glass Box" tests)
Take implementation into account
Easier to ensure good coverage
Common sense: Test all branches once
20
Unit testing
Integration testing
Test a number of classes together
System testing
Test an entire working system
Perform them all as you develop
21
Save tests as you develop
Tests exercise more and more features
Run all tests automatically
Every time you add a feature
Every time you fix a bug
Helps to verify that everything still works
22
How test a class when it uses classes that…
Do not exist?
Are buggy?
Are too large and slow?
Answer: create "fake classes"
One for each class that doesn't exist
Just good enough for the tests
As small as possible, so often called a stub
23
Software devel. involves several steps
Carefully think about what you must build
Carefully think about how to build it
Prepare tests based on your specs
Implement, test, and document
24
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/oledata.mso
Content-Transfer-Encoding: base64
Content-Type: application/x-mso
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA
EAAA/v///wAAAAD+////AAAAAAAAAAD/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////9
/////v///wMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8A
AAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAA
AB4AAAAfAAAAIAAAACEAAAAiAAAA/v//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////1IA
bwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAWSCsbCccB
/v///wAAAAAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAQAAgH///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAACAAAA8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPoA
AHic7Z0JeCRXdairWy2ptbf2XSrt+77bs0gzmt1jDx7jHeweqWbUI6l73JJmLBMewx4SSBwgQB4m
THgsIQSeIUBIgm2xJEDYHBJiExye2YxZAkMSHiQkzDvn3KXO7b6akcd8IX6ekm5316mqc6tu/XXu
uWs9/MXix//g/TVfd1KWHU6G84sLOU4WkwUgBNVKxHEypewXFy5cQFEGhAtXlmfUcr2TgL9Vx3X2
OHH4TjrrqShcdKkACpQuZKEpLAjZEJv38n0ffvWHGmpzPhXIUrDAchPEnnQWnWN0HotPKW5cSpxg
IMjY28oxYQgHvyN+B5zdEO+yc8q5Ds7h5GXFn+n43G/lmFwIMfk70znqrEH8y06U0v4A3IXjlCYo
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
5cwoTdFrDYTuYkfsK+QlWl5K8lEpxwmBkZwpihl9IT+eTva7nz4VOVNOLe0NywYjZwrVMHKmaE4V
Mf0K81imGDlTNGcHkjNFUy8Io7TLJ0folORMKXKmaJi7qNT8J67ZJ2eKRniee9Vrn/fmzt/zyZlC
cqYUOVM0iBDJmaJRWGkzZ2D0BjlTSM4UJ2fKJOdBZ5bGGae/+Htrf2JSpgZKwKtY9ZpDr4qly7xK
XiZic5UckosvB3kQ1q6+zKiroVyQD0fjbGMZUM5MnMEbfTXLfYb8Gx1AAjZqN3YFsug8ryYTQf0d
r/tb/3ZczW701dJEoE7fRPSYOuGymE4/3/nyzrCvU117Luwirr1J6k2fmFDqbd5oJr2YQNueRgIV
wNGYQCEoAsROLGCs21jj0AFbCmXT1WxjMxGxR2EbS6FtOoW2WYyokUJKJzefYV+nn0LbjBTaZvH3
jRTKphTa/rQQ2q4Qmjl9AiPd7uCExvc+vuMlPw/vMi9GJFAmXcx2UTB/65fO/94TbCK57SyBtkMC
VThCZwP82n+q8WMvfNnVtgRSOjGBrtr4wOffmPGEn0DbWQJtNxJoOyXQ+CNz7/6b5e/bEiiTEmjH
00igIji6hu6zc3R1ftY7jfHuoDQ6/Gsdr37+RIstjfLpenZQGj337O+G9oz+pZ9GO1ga7dBptIPS
6OzCX3fP51XZ0kjppFLlK65uPrLtE34a7WBptMNIox2URje/9f888o3dn7SlEb6m9RqaBuFy0ghr
uSrk7NLir9nBqUA+sRunArkzOBvcF7w9uB/+7gw+P3g0OB0chc/DsD4RnAtuDz4P/p4fPBKMBseD
M8HbglcFX+A0BZoDTYHWAE7PMI09s1OmbJixyHZZZLstslmLbI9Fttci22eR7bfIDlhkBy2yQyky
zPCntX3CtRm5VjaNa7vkWiut7ZZr/bQ2K9dGaW2PXJuitb1ybQet7RNrZ2dobb/cNktrB+S2vbR2
UG47QGuH5LZD048A128CX+kxeiFd+t8OcKEepEk7JMe0zNALiAPwh69sqBdGh65c7oAi+J2hRRkZ
KArK6T/oT+xFYyFQhN3enQs/cjALwqJprvNMXf4fWssdYXcJYWRvdGJlbG93CkFob29rYWJvdmUK
YWhvb2thYm92ZRBBY2lyY3VtZmxleGFjdXRlEGFjaXJjdW1mbGV4YWN1dGUQQWNpcmN1bWZsZXhn
cmF2ZRBhY2lyY3VtZmxleGdyYXZlFEFjaXJjdW1mbGV4aG9va2Fib3ZlFGFjaXJjdW1mbGV4aG9v
a2Fib3ZlEEFjaXJjdW1mbGV4dGlsZGUQYWNpcmN1bWZsZXh0aWxkZRNBY2lyY3VtZmxleGRvdGJl
bG93E2FjaXJjdW1mbGV4ZG90YmVsb3cLQWJyZXZlYWN1dGULYWJyZXZlYWN1dGULQWJyZXZlZ3Jh
dmULYWJyZXZlZ3JhdmUPQWJyZXZl
------=_NextPart_01C708D8.1CCA5A10
Content-Location: file:///C:/AF8A9A57/cse303-06au-lecture17_files/filelist.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C708D8.1CCA5A10--