<=
/div>
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/pres.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0001.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
CSE
303
Concepts and Tools for
Software Developme=
nt
Richard C. Davis
UW CSE – 12/1/2006
Lecture
22 – Linkers
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0004.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
2
Administravia
• Any questions on HW7?
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
3
The Build Process
Pre- =
processor
Preprocessed
Source Files
Executable
Library
Library
Pre- processor
Pre- processor
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_image003.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhKgBeAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAwAl
AFkAgAAAAAAAAALMhI+pEboOF4tmUsgy1Vdy/HVVZjlkeZ0hojZi6yaweKieTY8re+aAhXrsNrRg
MZZC5pRE3+jorCyZHWOEmpxGrSAnF7P1fbvLsNiLJZfP4rTJLUG3vfN6cQvnme9yaP8V9aP1l4Xn
R/eS98ZnWKVowkgYWDXJVul4CZhZuHn1WPk5OdY5uhkaWJqZenna2Kn2+hC7OCtbK3Mr04qYW9Nb
s2vZuwoavPZLLGocmZuMuqyJDI35K1jtvIdc/TOdsm0tvd3tfT1+JW4OG1sAADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_image004.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhAwAJAXcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAEAAQAB
AAYBgAAAAAAAAAIkTGAIytfrIpzvpXswynx7DVJSNZbiBHbpp7bfScJmrKy2e38FADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_image005.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhAwAJAXcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAEAAQAB
AAYBgAAAAAAAAAIkDGB4yeuqgpFo2oqpvju/BoHiR3Ymh2apRobt6MbrrNan/L4FADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_image006.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhAgAJAXcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAEAAQAB
AAYBgAAAAAAAAAIkTGB4yQv4Dpyyxkuxbarzv4Sek5WWqaUQOLbsS56yOqOwK74FADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_image008.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
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
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_image009.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhRAAuAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAQAAAA7
ACwAgQAAAAAAALvg4wECAwKkhI8Jwe0PoZo0QYGz3pzLqjjdSJabUzXmyppM2MZy9xrBjOdCsOi+
zPgJV6qh8RQMHofJG0a5nBV3zowoWppaq57H8jKCEiPkstjFxTLT6t+57XvDc/K5lG2/5934favu
NxZI1zeYVWgYhpjYxRgD6IgUyQI5+bRoWZmJOanZyRnpGQrKyNNjGXYg6leDoJXYALLw2vYgOxEh
9HHLq2r2a9prUAAAOw==
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0007_image010.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
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
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
=
The Build Process
Pre- =
processor
Preprocessed
Source Files
Executable
Library
Library
Pre- processor
Pre- processor
Today
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_image011.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhKgBeAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAwAl
AFkAgAAAAAAAAALMhI+pEboOF4tmUsgy1Vdy/HVVZjlkeZ0hojZi6yaweKieTY8re+aAhXrsNrRg
MZZC5pRE3+jorCyZHWOEmpxGrSAnF7P1fbvLsNiLJZfP4rTJLUG3vfN6cQvnme9yaP8V9aP1l4Xn
R/eS98ZnWKVowkgYWDXJVul4CZhZuHn1WPk5OdY5uhkaWJqZenna2Kn2+hC7OCtbK3Mr04qYW9Nb
s2vZuwoavPZLLGocmZuMuqyJDI35K1jtvIdc/TOdsm0tvd3tfT1+JW4OG1sAADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_image012.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhAwAJAXcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAEAAQAB
AAYBgAAAAAAAAAIkTGAIytfrIpzvpXswynx7DVJSNZbiBHbpp7bfScJmrKy2e38FADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_image013.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhAwAJAXcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAEAAQAB
AAYBgAAAAAAAAAIkDGB4yeuqgpFo2oqpvju/BoHiR3Ymh2apRobt6MbrrNan/L4FADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_image014.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhAgAJAXcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAEAAQAB
AAYBgAAAAAAAAAIkTGB4yQv4Dpyyxkuxbarzv4Sek5WWqaUQOLbsS56yOqOwK74FADs=
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_image016.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlh5wHtAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAAAAADm
AewAgQAAAAAAALvg48DAwAL/hI9pwe2sopy02ouz3us9DobiSFqeV6bqyrbUKcTyHJ/ujecwTdv5
D+TseDNf8IhMRhrEprMGUUqPjqe12JhqW8yr17ENizddr1mWHavJjLMbuo6/2u9zVI7X0uv1e/4f
wMfn96cWKPhGWLjIhYgYwHYiOUlZaXkJSeY4KITp+Qn6obmZyGjaSFqqETDQ6voKGys7S1trC5uZ
cZjqlovBehssPGzre7HLa2Z8yiyUrPpLLD1NPbBcgfxsdf1S7f3tyi2Rrf0k3ow+V36l2A3+Dn6u
sLfuJD8Pnz98j0BfT8QvncAO/+wFXKAvIbGDAPwVRMOwocKJshg6fCig3cCN//0ykqvXxiLFkbMs
esQIJSMZkiRNXlwXkqPMJRAL7hHJMqe1VRA/8rq5UqdCkyn/AZ2JdEGPMpuqFFkllCVRLD4H+YsI
LGq+qVBeWs0WMSkgg07ZPbAHVStFrkvLmnX7NK3ad2ypMjXnoUlYsXiq8sBkR+5cfXXJWlIWdPC3
wnovBeYr069NwYrp8kT5N3Flaowx7oW8RrJRypu9dX6ItXS105NBbxQNkrTqaaxHy55d7DLmuK4F
woa5ZBzuxcFp7ubdb0LW4cGucftd7nPvMNC1OVe0nPnCJdiPIz+QJkF27bSuL6v+TPp0Pd7RcA8v
kbw0837QJ6NvbLz8WPg7tv9XuR469v30Hhjx7ScMflEMmIqCueiHYDgFpsEgKeoFqESFTYESYYKg
/OeRJwd2iMuH/12IIRIaOhIKibeEAiIoI7rYCownpsjMio9MuCCNtTio1I3zoICQjxIOKYqOgmiE
YxxKcoJkfUaWNKF/7fXXz5Q1VglejCg2qUOM7+GjJS5jiicmkkuUad48Xn4JpgtP9lEcmWUeKd44
aeYpnJbO6Xkik3FSt+cxd75SW2y3dZgocHAOusKc0Bh66Ja6FErplI1G19CjkJYgaS+L+ripdZqR
qpt3kAj6aYaYYlOppb+8CqufqR6XiaetihDqY9HEWmp6p9IY7H0d7DpGr4j/6RLrTpcKyaytz14J
HrJiKPvFqMTeultq0s4KLavWhgltpocWS6C2+6HbIHi6jgsutdFWyq6Fw7pYb1PJwSsFtuyoSyJW
5ZqL6rSq9vMuv9jIO++5oxwMMHkCM7yAwq7iilUoGm8s4sOYhQUho87gOqTFSXhlqskLoyTumt9y
C9J1Kp+MMostq3xXetKFHOFnOf8kaMIzz1HzF/ANfczPfRwtBJskwLVkyzcjzcIQABFJNa95GWZg
Cjwj+KjVfxnxS9bJTmI2EJSozXHbbgvdgSRep0133XbLMfXdeu/Ndwhw9w144FTnLXjhht9N+OGK
Lz7034w/DrlriUdOeeU4/zpueeaaMzL55p5/nk7noI9OOiCln476QKKnznrrarsOe+xny0577VRg
bnvusOOue++or+578LYDL3zxsfNufPKUE69886Qj73z0hTMvffXLQ2999nZjr333WVPvffiAcy9+
+fxCwLT56i8uyvruK072+/L3Lff89tOP9f36b9/+/v6n3b//CRBpXWsSxwbov/RJTmlGUyACxQe+
PDDwEeR7oAWf5i84XHCDnMvgUjgIQrwNLIQk7NcIS4jCIHhQLylsoYpO6MIYRqpo94mgDG8YJBra
rAY47KEKkDHBr3zHh0T0WE8qBDUAFXGJMLOLidDCxCgeA4ZSrGKQIGbFLP9aiWRa7GJDqOjFIq4Q
IGHU4hgzU0YrnrEHaVQjGNt4wzUOEY4+lKN76MhEO/IQj0vUoxL5WMc3AhKFfqzgIKtXyEMGkmKK
jGEiGxlHQUJyg4+cpAsrackUYjKTJdwkJ0PoyU9yMJSipCQWS9nJbqHykh604SrVF8SlGfKV0TuL
LF1JywSGIpe87KUvfwnMYApzmMQspjGPicxkKnOZzGymM58JzWhKc5rUrKY1r4nNbGpzm9zspje/
Cc5winOc5CynOc+JznSqc53sbKc73wnPeMpznvSspz3vic986nOf/OynP/8J0IAKdKAELahBD4rQ
hCp0oQxtqEMfCtGISnT/ohStqEUvitGManSjHO2oRz8K0pCKdKQkLalJT4rSlKp0pXWTEUtxJra3
BPClKbIlTApIU8jE8qazzOkP/Tg2n3JEh93qqVCbCKI5HrUQQM3WUk/R1G0Y9anYIOrHcEnVSBUl
qUWZalYB1ZVAAfGri/iITaOTRK+SFU1S3ZodYorGtfYlap5YklwlyNVt3HWueYXiXkPTV7/+NVmB
ZeFgDVFYMh6WsIll42Kv1VjHPnYLUdXrZCkbWaVeVoWZveNmTdjZP372haFV614ra47Rgrazpr0r
agWrWs6WNrYnC61oaUsu1uKWCrZtrVxfa9jd/gC4ihVubjPr27USN67GKr3BcjXb3J9GNrl/tapR
qHvYnVrHgdFV4VlryN3uUnYSbY2feEO3tuAVAAA7
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_image017.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
R0lGODlhRAAuAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAQAAAA7
ACwAgQAAAAAAALvg4wECAwKkhI8Jwe0PoZo0QYGz3pzLqjjdSJabUzXmyppM2MZy9xrBjOdCsOi+
zPgJV6qh8RQMHofJG0a5nBV3zowoWppaq57H8jKCEiPkstjFxTLT6t+57XvDc/K5lG2/5934favu
NxZI1zeYVWgYhpjYxRgD6IgUyQI5+bRoWZmJOanZyRnpGQrKyNNjGXYg6leDoJXYALLw2vYgOxEh
9HHLq2r2a9prUAAAOw==
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0006_image018.gif
Content-Transfer-Encoding: base64
Content-Type: image/gif
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
Tr/618/+9ru/OBhIAAA7
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0005.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
The Goal of the Linker
=
8226; Compiled
code (.o
file) is not "runnable"
=
8226; Link
with other code to make executable
&=
#8211; Where
is the code for printf
and new ?
&=
#8211; We
only included the header files…
&=
#8211; Need
to find that code and put in executable
=
8226; Normally
gcc /=
g++ hides =
this
from you
=
8226; Use
-c o=
ption
to stop right before linking
&=
#8211; We
use this to produce .o
files
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0005_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0008.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Linking Overview
=
8226; C/C++
file uses undefined func./global var.
&=
#8211; The
.o f=
ile
has "undefined references"
&=
#8211; Note:
declarations don't count, only definitions
=
8226; Linker
"patches" .o
files to resolve refs.
=
8226; Executable
has no unresolved refs.
=
8226; Ways
to invoke linker
– <=
span
style=3D'font-family:"Courier New";color:#339933'>ld command=
=
8211; Implicitly
through gcc =
/g++ (we'll=
do
this)
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0008_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0009.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Static Linking
=
8226; Static
Linking: use option -static
&=
#8211; Put
all necessary code into executable
=
8226; Example:
"math" example program
&=
#8211; Step
1: Compile source files
&=
#8226; create
Main.o
=
• <=
span
style=3D'font-family:"Courier New";color:#339933'>g++ -Wall -g -c Main.=
o
&=
#8211; Step
2: Link files together
• <=
span
style=3D'font-family:"Courier New";color:#339933'>g++ -static -o math -=
L.
Main.o -lpoly
•
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0009_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0012.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Creating a Static Library
• Create with ar (stands=
for
"archiver")
– ar rc libpoly.a Polygon.o Point.o
=
– Creates a static libra=
ry
named libpoly.a=
• Containing copies of t=
he
two object files
– libpoly.a existsà adds/replaces files inside
• Index the archive: ranlib libpoly.a
=
– Same as running ar with op=
tion -s
– Performance during
linking
– Order inside the archi=
ve
will no longer matter
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0012_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0011.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Other linker options
=
226; g++ -st=
atic
-o math -L. Main.o -lpoly
R=
11; -lpoly : li=
nks
with libpoly.a&=
#13;
R=
11; -L : Specif=
ies a
directory containing libraries
R=
11; -v : See
details
=
8226; gcc/g++
automatically links executables with
– <=
span
style=3D'font-family:"Courier New";color:#339933'>libgcc.a
– <=
span
style=3D'font-family:"Courier New";color:#339933'>libc.a for
C
– <=
span
style=3D'font-family:"Courier New";color:#339933'>libstdc++.a for
C++
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0011_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0010.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Static Linking Step-by-Step
•<=
/span> Begin
–<=
/span> UD ß=
Empty Set &=
nbsp;
(No u nresolved definitions yet)
–<=
/span> Executable ß Empty (No code yet)
•<=
/span> For each file :
– .o file? Executable ß code
– .a file?
Executable ß=
code for needed definitions only
–<=
/span> Fix references in Executable to funcs/objects defined in new file
<=
/span>
–<=
/span> Remove newly resolved funcs/objects from UD
–<=
/span> Add any other unresolved funcs/objects from this f=
ile to
UD
=
div>
•<=
/span> End:
–<=
/span> UD empty?
•<=
/span> Yes à output executable
•<=
/span> No à =
span>error
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0010_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0013.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Conseq=
uences
of Linking Process
=
226; Position
of libs on command line matters
&=
#8211; Discover
and resolve references in order
&=
#8211; So
typically list libraries after object files
&=
#8211; Example:
switch -lpoint<=
/b>
and -lpoly <=
/span>
in math
=
8226; Cycles
– If
two .a files need each other, you might need -lfoo -lbar -lfoo =
…
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0013_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0014.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Dynamic Linking
•<=
/span> Static linking has disadvantages
–<=
/span> More disk space
•<=
/span> Copy portions of library for every application
=
;
–<=
/span> More memory when programs are running
<=
/span>
•<=
/span> Instead, can do dynamic linking at runtime
–<=
/span> Shared libraries (extension .so)
–<=
/span> Saves disk space
–<=
/span> OS can even share memory pages
<=
/div>
•<=
/span> Most linking is done this way now
–<=
/span> Avoid using -static
option
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0014_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0016.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Linking in Java
=
8226; Java
has the same problems a C/C++
&=
#8211; Must
resolving undefined symbols
=
8226; Java
has a dynamic class loader
&=
#8211; Loads
each file when needed
&=
#8226; From
class path
&=
#8226; From
jar files
&=
#8226; From
the web
&=
#8211; Very
complicated system
–
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0016_image027.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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0015.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
Summary
=
8226; Main
steps when building executable
&=
#8211; Preprocessing
(specific to C)
&=
#8211; Compiling
&=
#8211; Linking
=
8226; Process
gets complex for large systems
&=
#8211; Automate
the process with Makefiles
=
8226; Know
about potential problems
&=
#8211; Learn
how to solve as you encounter them
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0015_image028.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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0003.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
12/1/2006
CSE 303 Lecture 22
15
Next Time
<=
span
class=3DBB style=3D'position:absolute;left:-4.43%'>• Readabili=
ty and
Robustness
<=
span
class=3DBB style=3D'position:absolute;left:-4.43%'>• STL?
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/slide0003_image029.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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_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=3D15, 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("slide0007.htm",1,-1,1),new hrefList("=
slide0006.htm",1,-1,1),new hrefList("slide0005.htm",1,-1,1),new hrefList("s=
lide0008.htm",1,-1,1),new hrefList("slide0009.htm",1,-1,1),new hrefList("sl=
ide0012.htm",1,-1,1),new hrefList("slide0011.htm",1,-1,1),new hrefList("sli=
de0010.htm",1,-1,1),new hrefList("slide0013.htm",1,-1,1),new hrefList("slid=
e0014.htm",1,-1,1),new hrefList("slide0016.htm",1,-1,1),new hrefList("slide=
0015.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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/fullscreen.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_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_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/frame.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
CSE 303 - Autum 2006 - Lecture 22
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/outline.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
No=
tes
1
Richard C. Davis
UW CSE – 12/1/2006
Lecture 22 – Linkers
2
3
4
5
Compiled code (.o file) is not "runnable"
Link with other code to make executable
Where is the code for printf and new?
We only included the header files…
Need to find that code and put in executable
Normally gcc/g++ hides this from you
Use -c option to stop right before linking
We use this to produce .o files
6
C/C++ file uses undefined func./global var.
The .o file has "undefined references"
Note: declarations don't count, only definitions
Linker "patches" .o files to resolve refs.
Executable has no unresolved refs.
Ways to invoke linker
ld command
Implicitly through gcc/g++ (we'll do this)
7
Static Linking: use option -static
Put all necessary code into executable
Example: "math" example program
Step 1: Compile source files
create Main.o
g++ -Wall -g -c Main.o
Step 2: Link files together
g++ -static -o math -L. Main.o -lpoly
8
Create with ar (stands for "archiver")
ar rc libpoly.a Polygon.o Point.o
Creates a static library named libpoly.a
Containing copies of the two object files
libpoly.a existsà adds/replaces
files inside
Index the archive: ranlib libpoly.a
Same as running ar with option -s
Performance during linking
Order inside the archive will no longer matter
9
g++ -static -o math -L. Main.o -lpoly
-lpoly: links with libpoly.a
-L: Specifies a directory containing libraries
-v: See details
gcc/g++ automatically links executables with
libgcc.a
libc.a for C
libstdc++.a for C++
10
Begin
UD ß Empty S=
et (No unresolved
definitions yet)
Executable ß
Empty (No code yet)
For each file :
.o file? Executable <=
font
face=3DWingdings>ß code
.a file? Executable ß code for needed definitions only
Fix references in Executable to funcs/objects defined in new file=
li>
Remove newly resolved funcs/objects from UD
Add any other unresolved funcs/objects from this file to UD
End:
UD empty?
Yes à outp=
ut
executable
No à error=
11
Position of libs on command line matters
Discover and resolve references in order
So typically list libraries after object files
Example: switch -lpoint and -lpoly in math
Cycles
If two .a files need each other, you might need -lfoo -lbar -lfoo
…
12
Static linking has disadvantages
More disk space
Copy portions of library for every application
More memory when programs are running
Instead, can do dynamic linking at runtime
Shared libraries (extension .so)
Saves disk space
OS can even share memory pages
Most linking is done this way now
Avoid using -static option
13
Java has the same problems a C/C++
Must resolving undefined symbols
Java has a dynamic class loader
Loads each file when needed
From class path
From jar files
From the web
Very complicated system
14
Main steps when building executable
Preprocessing (specific to C)
Compiling
Linking
Process gets complex for large systems
Automate the process with Makefiles
Know about potential problems
Learn how to solve as you encounter them
15
Readability and Robustness
STL?
------=_NextPart_01C71568.3C0E7130
Content-Location: file:///C:/AF8A9A72/cse303-06au-lecture22_files/filelist.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/xml; charset="utf-8"
------=_NextPart_01C71568.3C0E7130--