]> git.lyx.org Git - features.git/commitdiff
Convert files to unix line ends in the repo
authorGeorg Baum <baum@lyx.org>
Tue, 28 Jun 2016 19:25:18 +0000 (21:25 +0200)
committerGeorg Baum <baum@lyx.org>
Tue, 28 Jun 2016 19:25:18 +0000 (21:25 +0200)
These files were aded with windows line ends before we did set the text=auto
attribute for all files in .gitattributes, and this caused phantom changes on
linux workspaces after .gitattributes was introduced.
Now these files appear with linux line ends on linux workspaces and with
windows line ends on windows workspaces, like all source files.

development/Win32/packaging/installer/information/WinLangCode.htm
development/Win32/vld/src/crtmfcpatch.h
development/Win32/vld/src/resource.h
development/Win32/vld/src/vld.h

index 9660cebe6fd39f35089f8ecc5a5db85bea05c2ba..c30e0702d84f2a45eb7efe2603a3faaec4e983b5 100644 (file)
-<html dir="ltr"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="assetid" content="SP01019690"><title>Regional and Language Settings</title><link rel="stylesheet" type="text/css" href="stsk09-Dateien/ont.css"><script type="text/javascript" language="Javascript" src="stsk09-Dateien/sExpCollapse.js"></script><script type="text/javascript" language="JavaScript" src="stsk09-Dateien/backgo.js"></script><script>\r
-       var strShow = 'Show';\r
-       var strHide = 'Hide';\r
-\r
-       function go(url)\r
-       {\r
-               navigate(url);          \r
-       }\r
-</script><style type="text/CSS">\r
-       .ACICollapsed\r
-       {\r
-               display: none;\r
-       }\r
-\r
-       .ACECollapsed\r
-       {\r
-               display: none;\r
-       }\r
-</style><style type="text/CSS">\r
-               .ACICollapsed\r
-               {\r
-                       display: inline;\r
-               }\r
-\r
-               .ACECollapsed\r
-               {\r
-                       display: block;\r
-               }\r
-       </style><meta http-equiv="assetid" content="SP01019690"></head><noscript></noscript><body><table border="0" cellpadding="0" cellspacing="0" width="200"><tbody><tr><td colspan="6"><img src="stsk09-Dateien/psLogo.gif" alt="Microsoft Office SharePoint Portal Server 2003" border="0" height="31" width="202"></td></tr><tr><td><a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/sharepointhelp.htm" title="Home button"><img src="stsk09-Dateien/home.gif" alt="Home" border="0" height="32" width="69"></a><a href="javascript:myBack()" title="Back button"><img src="stsk09-Dateien/back.gif" alt="Back" border="0" height="32" width="24"></a><a href="javascript:myForward()" title="Forward button"><img src="stsk09-Dateien/forward.gif" alt="Forward" border="0" height="32" width="23"></a><a href="javascript:self.print();" title="Print button"><img src="stsk09-Dateien/print.gif" alt="Print" border="0" height="32" width="59"></a><img src="stsk09-Dateien/bar.gif" border="0" height="32" width="1200"></td></tr></tbody></table><br><h1>Regional and Language Settings</h1>\r
-\r
-\r
\r
-\r
-\r
-\r
-<p>This topic lists the regional and language settings you can specify\r
-from the command line by using operations in Stsadm.exe and by using\r
-HTML Administration pages. For more information about specifying\r
-regional and language settings, see <a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/stsb05.htm" id="SP01019676" lcid=" ">Language Considerations</a>. For more information about the syntax for command-line operations, see <a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/stsk01.htm" id="SP01019625" lcid=" ">Command-Line Operations</a>.\r
-</p><p>The following types of regional and language settings are used in Microsoft Windows SharePoint Services:</p>\r
-\r
-\r
-<ul><li><a href="#language">Language IDs</a></li><li><a href="#locale">Locale IDs</a></li><li><a href="#Time">Time zones</a></li><li><a href="#currency">Currency IDs</a></li></ul><h2><a id="Language" name="Language">Language IDs</a></h2><p>The\r
-Language ID determines the language used for text on pages in the Web\r
-site (such as the text on the Site Settings page). The languages\r
-available for site creation depend on the language template packs you\r
-have installed to your server or server farm. Web sites based on\r
-Windows SharePoint Services can be created in the following languages. </p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>\r
-</td><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>\r
-</td></tr><tr><td>1025</td><td>Arabic\r
-</td><td>1041\r
-</td><td>Japanese\r
-</td></tr><tr><td>1028\r
-</td><td>Chinese - Traditional\r
-</td><td>1042\r
-</td><td>Korean</td></tr><tr><td>1029\r
-</td><td>Czech</td><td>1043</td><td>Dutch\r
-</td></tr><tr><td>1030\r
-</td><td>Danish\r
-</td><td>1044\r
-</td><td>Norwegian\r
-</td></tr><tr><td>1031\r
-</td><td>German\r
-</td><td>1045\r
-</td><td>Polish\r
-</td></tr><tr><td>1032\r
-</td><td>Greek\r
-</td><td>1046\r
-</td><td>Portuguese - Brazilian\r
-</td></tr><tr><td>1033\r
-</td><td>English\r
-</td><td>1049\r
-</td><td>Russian\r
-</td></tr><tr><td>1034\r
-</td><td>Spanish\r
-</td><td>1053\r
-</td><td>Swedish\r
-</td></tr><tr><td>1035\r
-</td><td>Finnish\r
-</td><td>1054\r
-</td><td>Thai\r
-</td></tr><tr><td>1036\r
-</td><td>French\r
-</td><td>1055\r
-</td><td>Turkish\r
-</td></tr><tr><td>1037\r
-</td><td>Hebrew\r
-</td><td>2052\r
-</td><td>Chinese - Simplified\r
-</td></tr><tr><td>1038\r
-</td><td>Hungarian\r
-</td><td>2070\r
-</td><td>Portuguese\r
-</td></tr><tr><td>1040\r
-</td><td>Italian\r
-</td><td>3076</td><td>Chinese - Hong Kong</td></tr></tbody></table><p>Windows SharePoint Services also supports  input and display of text in the following languages, but not site creation.</p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>\r
-</td><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>\r
-</td></tr><tr><td>1026</td><td>Bulgarian</td><td>1048</td><td>Romanian</td></tr><tr><td>1050</td><td>Croatian\r
-</td><td>2074</td><td>Serbian</td></tr><tr><td>1061</td><td>Estonian\r
-</td><td>1051</td><td>Slovak</td></tr><tr><td>1081</td><td>Hindi with Indic PT</td><td>1060</td><td>Slovenian</td></tr><tr><td>1062</td><td>Latvian</td><td>1058</td><td>Ukrainian</td></tr><tr><td>1063</td><td>Lithuanian</td><td></td><td></td></tr></tbody></table><h2><a id="Locale" name="Locale">Locale IDs</a></h2><p>The\r
-Locale ID controls the numbering, sorting, calendar, and time\r
-formatting for the Web site. You can change the locale for a Web site\r
-by using the Regional Settings page. Web sites based on Windows\r
-SharePoint Services can be set to the following Locale IDs. </p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Locale</b></td><td><b class="bterm">ID</b></td><td><b class="bterm">Locale</b></td></tr><tr><td>1078</td><td>Afrikaans\r
-</td><td>1037\r
-</td><td>Hebrew \r
-</td></tr><tr><td>1052\r
-</td><td>Albanian\r
-</td><td>1081\r
-</td><td>Hindi\r
-</td></tr><tr><td>5121\r
-</td><td>Arabic (Algeria) \r
-</td><td>1038\r
-</td><td>Hungarian\r
-</td></tr><tr><td>15361\r
-</td><td>Arabic (Bahrain) \r
-</td><td>1039\r
-</td><td>Icelandic\r
-</td></tr><tr><td>3073\r
-</td><td>Arabic (Egypt) \r
-</td><td>1057\r
-</td><td>Indonesian\r
-</td></tr><tr><td>2049\r
-</td><td>Arabic (Iraq) \r
-</td><td>1040\r
-</td><td>Italian (Italy)\r
-</td></tr><tr><td>11265\r
-</td><td>Arabic (Jordan) \r
-</td><td>2064\r
-</td><td>Italian (Switzerland)\r
-</td></tr><tr><td>13313\r
-</td><td>Arabic (Kuwait) \r
-</td><td>1041\r
-</td><td>Japanese\r
-</td></tr><tr><td>12289\r
-</td><td>Arabic (Lebanon) \r
-</td><td>1099\r
-</td><td>Kannada\r
-</td></tr><tr><td>4097\r
-</td><td>Arabic (Libya) \r
-</td><td>1087\r
-</td><td>Kazakh\r
-</td></tr><tr><td>6145\r
-</td><td>Arabic (Morocco) \r
-</td><td>1111\r
-</td><td>Konkani\r
-</td></tr><tr><td>8193\r
-</td><td>Arabic (Oman) \r
-</td><td>1042\r
-</td><td>Korean\r
-</td></tr><tr><td>16385\r
-</td><td>Arabic (Qatar) \r
-</td><td>1088\r
-</td><td>Kyrgyz (Cyrillic)\r
-</td></tr><tr><td>1025\r
-</td><td>Arabic (Saudi Arabia) \r
-</td><td>1062</td><td>Latvian\r
-</td></tr><tr><td>10241\r
-</td><td>Arabic (Syria) \r
-</td><td>1063\r
-</td><td>Lithuanian\r
-</td></tr><tr><td>7169\r
-</td><td>Arabic (Tunisia) \r
-</td><td>1071\r
-</td><td>Macedonian (FYROM)\r
-</td></tr><tr><td>14337\r
-</td><td>Arabic (U.A.E.) \r
-</td><td>2110\r
-</td><td>Malay (Brunei Darussalam)\r
-</td></tr><tr><td>9217\r
-</td><td>Arabic (Yemen) \r
-</td><td>1086\r
-</td><td>Malay (Malaysia)\r
-</td></tr><tr><td>1067\r
-</td><td>Armenian\r
-</td><td>1102\r
-</td><td>Marathi\r
-</td></tr><tr><td>2092\r
-</td><td>Azeri (Cyrillic)\r
-</td><td>1104\r
-</td><td>Mongolian (Cyrillic)\r
-</td></tr><tr><td>1068\r
-</td><td>Azeri (Latin)\r
-</td><td>1044\r
-</td><td>Norwegian (Bokmal)\r
-</td></tr><tr><td>1069\r
-</td><td>Basque\r
-</td><td>2068\r
-</td><td>Norwegian (Nynorsk)\r
-</td></tr><tr><td>1059\r
-</td><td>Belarusian\r
-</td><td>1045\r
-</td><td>Polish\r
-</td></tr><tr><td>1026\r
-</td><td>Bulgarian\r
-</td><td>1046\r
-</td><td>Portuguese (Brazil)\r
-</td></tr><tr><td>1027\r
-</td><td>Catalan\r
-</td><td>2070\r
-</td><td>Portuguese (Portugal)\r
-</td></tr><tr><td>3076\r
-</td><td>Chinese (Hong Kong)\r
-</td><td>1094\r
-</td><td>Punjabi\r
-</td></tr><tr><td>5124\r
-</td><td>Chinese (Macau)\r
-</td><td>1048\r
-</td><td>Romanian\r
-</td></tr><tr><td>2052\r
-</td><td>Chinese (PRC)\r
-</td><td>1049\r
-</td><td>Russian\r
-</td></tr><tr><td>4100\r
-</td><td>Chinese (Singapore)\r
-</td><td>1103\r
-</td><td>Sanskrit\r
-</td></tr><tr><td>1028\r
-</td><td>Chinese (Taiwan)\r
-</td><td>3098\r
-</td><td>Serbian (Cyrillic)\r
-</td></tr><tr><td>1050\r
-</td><td>Croatian\r
-</td><td>2074\r
-</td><td>Serbian (Latin)\r
-</td></tr><tr><td>1029\r
-</td><td>Czech\r
-</td><td>1051\r
-</td><td>Slovak\r
-</td></tr><tr><td>1030\r
-</td><td>Danish\r
-</td><td>1060\r
-</td><td>Slovenian\r
-</td></tr><tr><td>1125\r
-</td><td>Divehi\r
-</td><td>11274\r
-</td><td>Spanish (Argentina)\r
-</td></tr><tr><td>2067\r
-</td><td>Dutch (Belgium)\r
-</td><td>16394\r
-</td><td>Spanish (Bolivia)\r
-</td></tr><tr><td>1043\r
-</td><td>Dutch (Netherlands)\r
-</td><td>13322\r
-</td><td>Spanish (Chile)\r
-</td></tr><tr><td>3081\r
-</td><td>English (Australia)\r
-</td><td>9226\r
-</td><td>Spanish (Colombia)\r
-</td></tr><tr><td>10249\r
-</td><td>English (Belize)\r
-</td><td>5130\r
-</td><td>Spanish (Costa Rica)\r
-</td></tr><tr><td>4105\r
-</td><td>English (Canada)\r
-</td><td>7178\r
-</td><td>Spanish (Dominican Republic)\r
-</td></tr><tr><td>9225\r
-</td><td>English (Caribbean)\r
-</td><td>12298\r
-</td><td>Spanish (Ecuador)\r
-</td></tr><tr><td>6153\r
-</td><td>English (Ireland)\r
-</td><td>17418\r
-</td><td>Spanish (El Salvador)\r
-</td></tr><tr><td>8201\r
-</td><td>English (Jamaica)\r
-</td><td>4106</td><td>Spanish (Guatemala)\r
-</td></tr><tr><td>5129\r
-</td><td>English (New Zealand)\r
-</td><td>18442\r
-</td><td>Spanish (Honduras)\r
-</td></tr><tr><td>13321\r
-</td><td>English (Philippines)\r
-</td><td>2058\r
-</td><td>Spanish (Mexico)\r
-</td></tr><tr><td>7177\r
-</td><td>English (South Africa)\r
-</td><td>19466\r
-</td><td>Spanish (Nicaragua)\r
-</td></tr><tr><td>11273\r
-</td><td>English (Trinidad)\r
-</td><td>6154\r
-</td><td>Spanish (Panama)\r
-</td></tr><tr><td>2057\r
-</td><td>English (United Kingdom)\r
-</td><td>15370\r
-</td><td>Spanish (Paraguay)\r
-</td></tr><tr><td>1033\r
-</td><td>English (United States) &nbsp;\r
-</td><td>10250\r
-</td><td>Spanish (Peru)\r
-</td></tr><tr><td>12297\r
-</td><td>English (Zimbabwe)\r
-</td><td>20490\r
-</td><td>Spanish (Puerto Rico)\r
-</td></tr><tr><td>1061\r
-</td><td>Estonian\r
-</td><td>3082\r
-</td><td>Spanish (Spain)\r
-</td></tr><tr><td>1080\r
-</td><td>Faeroese\r
-</td><td>1034\r
-</td><td>Spanish (Traditional)\r
-</td></tr><tr><td>1065\r
-</td><td>Farsi \r
-</td><td>14346\r
-</td><td>Spanish (Uruguay)\r
-</td></tr><tr><td>1035\r
-</td><td>Finnish\r
-</td><td>8202\r
-</td><td>Spanish (Venezuela)\r
-</td></tr><tr><td>2060\r
-</td><td>French (Belgium)\r
-</td><td>1089\r
-</td><td>Swahili\r
-</td></tr><tr><td>3084\r
-</td><td>French (Canada)\r
-</td><td>1053\r
-</td><td>Swedish\r
-</td></tr><tr><td>1036\r
-</td><td>French (France)\r
-</td><td>2077\r
-</td><td>Swedish (Finland)\r
-</td></tr><tr><td>5132\r
-</td><td>French (Luxembourg)\r
-</td><td>1114\r
-</td><td>Syriac\r
-</td></tr><tr><td>6156\r
-</td><td>French (Monaco)\r
-</td><td>1097\r
-</td><td>Tamil\r
-</td></tr><tr><td>4108\r
-</td><td>French (Switzerland)\r
-</td><td>1092\r
-</td><td>Tatar\r
-</td></tr><tr><td>1110\r
-</td><td>Galician\r
-</td><td>1098\r
-</td><td>Telugu\r
-</td></tr><tr><td>1079\r
-</td><td>Georgian\r
-</td><td>1054\r
-</td><td>Thai \r
-</td></tr><tr><td>3079\r
-</td><td>German (Austria) \r
-</td><td>1055\r
-</td><td>Turkish\r
-</td></tr><tr><td>1031\r
-</td><td>German (Germany) \r
-</td><td>1058\r
-</td><td>Ukrainian\r
-</td></tr><tr><td>5127\r
-</td><td>German (Liechtenstein) \r
-</td><td>1056\r
-</td><td>Urdu\r
-</td></tr><tr><td>4103\r
-</td><td>German (Luxembourg) \r
-</td><td>2115\r
-</td><td>Uzbek (Cyrillic)\r
-</td></tr><tr><td>2055\r
-</td><td>German (Switzerland) \r
-</td><td>1091\r
-</td><td>Uzbek (Latin)\r
-</td></tr><tr><td>1032\r
-</td><td>Greek\r
-</td><td>1066\r
-</td><td>Vietnamese\r
-</td></tr><tr><td>1095\r
-</td><td>Gujarati\r
-</td><td></td><td></td></tr></tbody></table><h2><a id="Time" name="Time">Time Zones</a></h2><p>Web\r
-sites based on Windows SharePoint Services can be set to any of the\r
-time zones recognized by Microsoft Windows Server&nbsp;2003.</p><table><tbody><tr><td><b class="bterm">Code</b>\r
-</td><td><b class="bterm">Time zone</b></td><td><b class="bterm">Code</b></td><td><b class="bterm">Time zone</b></td></tr><tr><td>39</td><td>(GMT-12:00) Eniwetok, Kwajalein</td><td>59</td><td>(GMT+02:00) Helsinki, Riga, Tallinn\r
-</td></tr><tr><td>16</td><td>(GMT-11:00) Midway Island, Samoa\r
-</td><td>27</td><td>(GMT+02:00) Jerusalem 26 (GMT+03:00) Baghdad\r
-</td></tr><tr><td>15</td><td>(GMT-10:00) Hawaii\r
-</td><td>74</td><td>(GMT+03:00) Kuwait, Riyadh\r
-</td></tr><tr><td>14</td><td>(GMT-09:00) Alaska\r
-</td><td>51</td><td>(GMT+03:00) Moscow, St. Petersburg, Volgograd\r
-</td></tr><tr><td>13</td><td>(GMT-08:00) Pacific Time (US and Canada); Tijuana\r
-</td><td>56</td><td>(GMT+03:00) Nairobi\r
-</td></tr><tr><td>38</td><td>(GMT-07:00) Arizona\r
-</td><td>25</td><td>(GMT+03:30) Tehran</td></tr><tr><td>12</td><td>(GMT-07:00) Mountain Time (US and Canada)\r
-</td><td>24</td><td>(GMT+04:00) Abu Dhabi, Muscat\r
-</td></tr><tr><td>55</td><td>(GMT-06:00) Central America\r
-</td><td>54</td><td>(GMT+04:00) Baku, Tbilisi, Yerevan 48 (GMT+04:30) Kabul\r
-</td></tr><tr><td>11</td><td>(GMT-06:00) Central Time (US and Canada)\r
-</td><td>58</td><td>(GMT+05:00) Ekaterinburg\r
-</td></tr><tr><td>37</td><td>(GMT-06:00) Mexico City\r
-</td><td>47\r
-</td><td>(GMT+05:00) Islamabad, Karachi, Tashkent\r
-</td></tr><tr><td>36</td><td>(GMT-06:00) Saskatchewan\r
-</td><td>23</td><td>(GMT+05:30) Calcutta, Chennai, Mumbai, New Delhi\r
-</td></tr><tr><td>35</td><td>(GMT-05:00) Bogota, Lima, Quito\r
-</td><td>62</td><td>(GMT+05:45) Kathmandu 46 (GMT+06:00) Almaty, Novosibirsk\r
-</td></tr><tr><td>10</td><td>(GMT-05:00) Eastern Time (US and Canada)\r
-</td><td>71</td><td>(GMT+06:00) Astana, Dhaka\r
-</td></tr><tr><td>34\r
-</td><td>(GMT-05:00) Indiana (East)\r
-</td><td>66</td><td>(GMT+06:00) Sri Jayawardenepura\r
-</td></tr><tr><td>9\r
-</td><td>(GMT-04:00) Atlantic Time (Canada)\r
-</td><td>61</td><td>(GMT+06:30) Rangoon\r
-</td></tr><tr><td>33</td><td>(GMT-04:00) Caracas, La Paz\r
-</td><td>22</td><td>(GMT+07:00) Bangkok, Hanoi, Jakarta\r
-</td></tr><tr><td>65</td><td>(GMT-04:00) Santiago\r
-</td><td>64</td><td>(GMT+07:00) Krasnoyarsk\r
-</td></tr><tr><td>28</td><td>(GMT-03:30) Newfoundland 8 (GMT-03:00) Brasilia\r
-</td><td>45</td><td>(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi\r
-</td></tr><tr><td>32</td><td>(GMT-03:00) Buenos Aires, Georgetown\r
-</td><td>63</td><td>(GMT+08:00) Irkutsk, Ulaan Bataar\r
-</td></tr><tr><td>60</td><td>(GMT-03:00) Greenland\r
-</td><td>21</td><td>(GMT+08:00) Kuala Lumpur, Singapore\r
-</td></tr><tr><td>30</td><td>(GMT-02:00) Mid-Atlantic\r
-</td><td>73</td><td>(GMT+08:00) Perth 75 (GMT+08:00) Taipei\r
-</td></tr><tr><td>29</td><td>(GMT-01:00) Azores\r
-</td><td>20</td><td>(GMT+09:00) Osaka, Sapporo, Tokyo 72 (GMT+09:00) Seoul\r
-</td></tr><tr><td>53</td><td>(GMT-01:00) Cape Verde Is.</td><td>70</td><td>(GMT+09:00) Yakutsk 19 (GMT+09:30) Adelaide\r
-</td></tr><tr><td>31</td><td>(GMT) Casablanca, Monrovia\r
-</td><td>44</td><td>(GMT+09:30) Darwin\r
-</td></tr><tr><td>2</td><td>(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London\r
-</td><td>18</td><td>(GMT+10:00) Brisbane\r
-</td></tr><tr><td>4</td><td>(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\r
-</td><td>76</td><td>(GMT+10:00) Canberra, Melbourne, Sydney\r
-</td></tr><tr><td>6</td><td>(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague\r
-</td><td>43</td><td>(GMT+10:00) Guam, Port Moresby\r
-</td></tr><tr><td>3</td><td>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris\r
-</td><td>42</td><td>(GMT+10:00) Hobart</td></tr><tr><td>57</td><td>(GMT+01:00) Sarajevo, Skopje, Sofija, Vilnius, Warsaw, Zagreb\r
-</td><td>68</td><td>(GMT+10:00) Vladivostok\r
-</td></tr><tr><td>69</td><td>(GMT+01:00) West Central Africa\r
-</td><td>41</td><td>(GMT+11:00) Magadan, Solomon Is., New Caledonia\r
-</td></tr><tr><td>7</td><td>(GMT+02:00) Athens, Istanbul, Minsk\r
-</td><td>17</td><td>(GMT+12:00) Auckland, Wellington\r
-</td></tr><tr><td>5</td><td>(GMT+02:00) Bucharest</td><td>40\r
-</td><td>(GMT+12:00) Fiji, Kamchatka, Marshall Is.\r
-</td></tr><tr><td>49\r
-</td><td>(GMT+02:00) Cairo\r
-</td><td>67\r
-</td><td>(GMT+13:00) Nuku'alofa\r
-</td></tr><tr><td>50\r
-</td><td>(GMT+02:00) Harare, Pretoria\r
-</td><td></td><td></td></tr></tbody></table><h2><a id="Currency" name="Currency">Currency IDs</a></h2><p>Web sites based on Windows SharePoint Services can be set to use the following currencies.\r
-</p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Currency</b>\r
-</td><td><b class="bterm">ID</b></td><td><b class="bterm">Currency</b>\r
-</td></tr><tr><td>5121</td><td>1,254 .ج.د (Arabic-Algeria)\r
-</td><td>4106\r
-</td><td>Q1,254 (Guatemala)\r
-</td></tr><tr><td>15361\r
-</td><td>1,254 .ب.د (Arabic-Bahrain)\r
-</td><td>18442\r
-</td><td>L. 1254 (Honduras)\r
-</td></tr><tr><td>3073\r
-</td><td>1,254 .م.ج (Arabic-Egypt)</td><td>3076\r
-</td><td>HK$1,254 (Hong Kong)\r
-</td></tr><tr><td>2049\r
-</td><td>1,254 .ع.د (Arabic-Iraq)\r
-</td><td>1038\r
-</td><td>1 254 Ft (Hungary)\r
-</td></tr><tr><td>11265\r
-</td><td>1,254 .ا.د (Arabic-Jordan)\r
-</td><td>1081\r
-</td><td>रु 1,254 (India)\r
-</td></tr><tr><td>13313\r
-</td><td>1,254 .ك.د (Arabic-Kuwait)\r
-</td><td>6153\r
-</td><td>IR£1,254 (Ireland)\r
-</td></tr><tr><td>12289\r
-</td><td>1,254 .ل.ل (Arabic-Lebanon)\r
-</td><td>1037\r
-</td><td>₪1,254 (Israel)\r
-</td></tr><tr><td>4097\r
-</td><td>1,254 .ل.د (Arabic-Libya)\r
-</td><td>1041\r
-</td><td>¥1,254 (Japan)\r
-</td></tr><tr><td>6145\r
-</td><td>1,254 .م.د (Arabic-Morocco)\r
-</td><td>1042\r
-</td><td>₩1,254 (Korea)\r
-</td></tr><tr><td>8193\r
-</td><td>1,254 .ع.ر (Arabic-Oman)\r
-</td><td>2058\r
-</td><td>$1,254 (Mexico)\r
-</td></tr><tr><td>16385\r
-</td><td>1,254 .ق.ر (Arabic-Qatar)\r
-</td><td>5129\r
-</td><td>$1,254 (New Zealand)\r
-</td></tr><tr><td>1025\r
-</td><td>1,254 .س.ر (Arabic-Saudi Arabia)\r
-</td><td>19466\r
-</td><td>C$ 1254 (Nicaragua)\r
-</td></tr><tr><td>10241\r
-</td><td>1,254 .س.ل (Arabic-Syria)\r
-</td><td>1044\r
-</td><td>kr 1 254 (Norway)\r
-</td></tr><tr><td>7169\r
-</td><td>1,254 .ت.د (Arabic-Tunisia)\r
-</td><td>1056\r
-</td><td>Rs 1,254 (Pakistan)\r
-</td></tr><tr><td>14337\r
-</td><td>1,254 .إ.د (Arabic-U.A.E)\r
-</td><td>6154\r
-</td><td>B/. 1,254 (Panama)\r
-</td></tr><tr><td>9217\r
-</td><td>1,254 .ي.ر (Arabic-Yemen)\r
-</td><td>15370\r
-</td><td>Gs 1.254 (Paraguay)\r
-</td></tr><tr><td>11274\r
-</td><td>$ 1.254 (Argentina)\r
-</td><td>2052\r
-</td><td>¥1,254 (People's Republic of China)\r
-</td></tr><tr><td>3081\r
-</td><td>$1,254 (Australia)\r
-</td><td>10250\r
-</td><td>S/. 1,254 (Peru)\r
-</td></tr><tr><td>3079\r
-</td><td>öS 1.254 (Austria)\r
-</td><td>1045\r
-</td><td>1 254 zł (Poland)\r
-</td></tr><tr><td>16394\r
-</td><td>$b 1.254 (Bolivia)\r
-</td><td>1049\r
-</td><td>1 254р. (Russia)\r
-</td></tr><tr><td>1046\r
-</td><td>R$ 1.254 (Brazil)\r
-</td><td>4100\r
-</td><td>$1,254 (Singapore)\r
-</td></tr><tr><td>3084\r
-</td><td>1 254 $ (Canada)\r
-</td><td>1051\r
-</td><td>1 254 Sk (Slovakia)\r
-</td></tr><tr><td>4105\r
-</td><td>$1,254 (Canada)\r
-</td><td>1060\r
-</td><td>1.254 SIT (Slovenia)\r
-</td></tr><tr><td>13322\r
-</td><td>$ 1.254 (Chile)\r
-</td><td>7177\r
-</td><td>R 1,254 (South Africa)\r
-</td></tr><tr><td>9226\r
-</td><td>$ 1.254 (Colombia)\r
-</td><td>1053\r
-</td><td>1.254 kr (Sweden)\r
-</td></tr><tr><td>5130\r
-</td><td>C1.254 (Costa Rica)\r
-</td><td>2055\r
-</td><td>SFr. 1'254 (Switzerland)\r
-</td></tr><tr><td>1029\r
-</td><td>1 254 Kč (Czech Republic)\r
-</td><td>1028\r
-</td><td>NT$1,254 (Taiwan)\r
-</td></tr><tr><td>1030\r
-</td><td>kr 1.254 (Denmark)\r
-</td><td>1054\r
-</td><td>฿1,254 (Thai)\r
-</td></tr><tr><td>7178\r
-</td><td>RD$1,254 (Dominican Republic)\r
-</td><td>1055\r
-</td><td>1.254 TL (Turkey)\r
-</td></tr><tr><td>17418\r
-</td><td>C1254 (El Salvador)\r
-</td><td>2057\r
-</td><td>£1,254 (United Kingdom)\r
-</td></tr><tr><td>-2\r
-</td><td>1,254 € (European Union)\r
-</td><td>1033\r
-</td><td>$1,254 (United States)\r
-</td></tr><tr><td>-1\r
-</td><td>€ 1,254 (European Union)\r
-</td><td>14346\r
-</td><td>$U 1.254 (Uruguay)\r
-</td></tr><tr><td>1065\r
-</td><td>1,254 ريال (Farsi)\r
-</td><td>8202\r
-</td><td>Bs 1.254 (Venezuela)\r
-</td></tr><tr><td>1032\r
-</td><td>1.254 Δρχ (Greece)\r
-</td><td>1066\r
-</td><td>1,254 ₫ (Vietnamese)\r
-</td></tr></tbody></table><center><a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/SPSAdmincopyright.htm">©2003 Microsoft Corporation. All rights reserved.</a></center></body></html>
\ No newline at end of file
+<html dir="ltr"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="assetid" content="SP01019690"><title>Regional and Language Settings</title><link rel="stylesheet" type="text/css" href="stsk09-Dateien/ont.css"><script type="text/javascript" language="Javascript" src="stsk09-Dateien/sExpCollapse.js"></script><script type="text/javascript" language="JavaScript" src="stsk09-Dateien/backgo.js"></script><script>
+       var strShow = 'Show';
+       var strHide = 'Hide';
+
+       function go(url)
+       {
+               navigate(url);          
+       }
+</script><style type="text/CSS">
+       .ACICollapsed
+       {
+               display: none;
+       }
+
+       .ACECollapsed
+       {
+               display: none;
+       }
+</style><style type="text/CSS">
+               .ACICollapsed
+               {
+                       display: inline;
+               }
+
+               .ACECollapsed
+               {
+                       display: block;
+               }
+       </style><meta http-equiv="assetid" content="SP01019690"></head><noscript></noscript><body><table border="0" cellpadding="0" cellspacing="0" width="200"><tbody><tr><td colspan="6"><img src="stsk09-Dateien/psLogo.gif" alt="Microsoft Office SharePoint Portal Server 2003" border="0" height="31" width="202"></td></tr><tr><td><a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/sharepointhelp.htm" title="Home button"><img src="stsk09-Dateien/home.gif" alt="Home" border="0" height="32" width="69"></a><a href="javascript:myBack()" title="Back button"><img src="stsk09-Dateien/back.gif" alt="Back" border="0" height="32" width="24"></a><a href="javascript:myForward()" title="Forward button"><img src="stsk09-Dateien/forward.gif" alt="Forward" border="0" height="32" width="23"></a><a href="javascript:self.print();" title="Print button"><img src="stsk09-Dateien/print.gif" alt="Print" border="0" height="32" width="59"></a><img src="stsk09-Dateien/bar.gif" border="0" height="32" width="1200"></td></tr></tbody></table><br><h1>Regional and Language Settings</h1>
+
+
+
+
+
+<p>This topic lists the regional and language settings you can specify
+from the command line by using operations in Stsadm.exe and by using
+HTML Administration pages. For more information about specifying
+regional and language settings, see <a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/stsb05.htm" id="SP01019676" lcid=" ">Language Considerations</a>. For more information about the syntax for command-line operations, see <a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/stsk01.htm" id="SP01019625" lcid=" ">Command-Line Operations</a>.
+</p><p>The following types of regional and language settings are used in Microsoft Windows SharePoint Services:</p>
+
+
+<ul><li><a href="#language">Language IDs</a></li><li><a href="#locale">Locale IDs</a></li><li><a href="#Time">Time zones</a></li><li><a href="#currency">Currency IDs</a></li></ul><h2><a id="Language" name="Language">Language IDs</a></h2><p>The
+Language ID determines the language used for text on pages in the Web
+site (such as the text on the Site Settings page). The languages
+available for site creation depend on the language template packs you
+have installed to your server or server farm. Web sites based on
+Windows SharePoint Services can be created in the following languages. </p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>
+</td><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>
+</td></tr><tr><td>1025</td><td>Arabic
+</td><td>1041
+</td><td>Japanese
+</td></tr><tr><td>1028
+</td><td>Chinese - Traditional
+</td><td>1042
+</td><td>Korean</td></tr><tr><td>1029
+</td><td>Czech</td><td>1043</td><td>Dutch
+</td></tr><tr><td>1030
+</td><td>Danish
+</td><td>1044
+</td><td>Norwegian
+</td></tr><tr><td>1031
+</td><td>German
+</td><td>1045
+</td><td>Polish
+</td></tr><tr><td>1032
+</td><td>Greek
+</td><td>1046
+</td><td>Portuguese - Brazilian
+</td></tr><tr><td>1033
+</td><td>English
+</td><td>1049
+</td><td>Russian
+</td></tr><tr><td>1034
+</td><td>Spanish
+</td><td>1053
+</td><td>Swedish
+</td></tr><tr><td>1035
+</td><td>Finnish
+</td><td>1054
+</td><td>Thai
+</td></tr><tr><td>1036
+</td><td>French
+</td><td>1055
+</td><td>Turkish
+</td></tr><tr><td>1037
+</td><td>Hebrew
+</td><td>2052
+</td><td>Chinese - Simplified
+</td></tr><tr><td>1038
+</td><td>Hungarian
+</td><td>2070
+</td><td>Portuguese
+</td></tr><tr><td>1040
+</td><td>Italian
+</td><td>3076</td><td>Chinese - Hong Kong</td></tr></tbody></table><p>Windows SharePoint Services also supports  input and display of text in the following languages, but not site creation.</p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>
+</td><td><b class="bterm">ID</b></td><td><b class="bterm">Language</b>
+</td></tr><tr><td>1026</td><td>Bulgarian</td><td>1048</td><td>Romanian</td></tr><tr><td>1050</td><td>Croatian
+</td><td>2074</td><td>Serbian</td></tr><tr><td>1061</td><td>Estonian
+</td><td>1051</td><td>Slovak</td></tr><tr><td>1081</td><td>Hindi with Indic PT</td><td>1060</td><td>Slovenian</td></tr><tr><td>1062</td><td>Latvian</td><td>1058</td><td>Ukrainian</td></tr><tr><td>1063</td><td>Lithuanian</td><td></td><td></td></tr></tbody></table><h2><a id="Locale" name="Locale">Locale IDs</a></h2><p>The
+Locale ID controls the numbering, sorting, calendar, and time
+formatting for the Web site. You can change the locale for a Web site
+by using the Regional Settings page. Web sites based on Windows
+SharePoint Services can be set to the following Locale IDs. </p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Locale</b></td><td><b class="bterm">ID</b></td><td><b class="bterm">Locale</b></td></tr><tr><td>1078</td><td>Afrikaans
+</td><td>1037
+</td><td>Hebrew 
+</td></tr><tr><td>1052
+</td><td>Albanian
+</td><td>1081
+</td><td>Hindi
+</td></tr><tr><td>5121
+</td><td>Arabic (Algeria) 
+</td><td>1038
+</td><td>Hungarian
+</td></tr><tr><td>15361
+</td><td>Arabic (Bahrain) 
+</td><td>1039
+</td><td>Icelandic
+</td></tr><tr><td>3073
+</td><td>Arabic (Egypt) 
+</td><td>1057
+</td><td>Indonesian
+</td></tr><tr><td>2049
+</td><td>Arabic (Iraq) 
+</td><td>1040
+</td><td>Italian (Italy)
+</td></tr><tr><td>11265
+</td><td>Arabic (Jordan) 
+</td><td>2064
+</td><td>Italian (Switzerland)
+</td></tr><tr><td>13313
+</td><td>Arabic (Kuwait) 
+</td><td>1041
+</td><td>Japanese
+</td></tr><tr><td>12289
+</td><td>Arabic (Lebanon) 
+</td><td>1099
+</td><td>Kannada
+</td></tr><tr><td>4097
+</td><td>Arabic (Libya) 
+</td><td>1087
+</td><td>Kazakh
+</td></tr><tr><td>6145
+</td><td>Arabic (Morocco) 
+</td><td>1111
+</td><td>Konkani
+</td></tr><tr><td>8193
+</td><td>Arabic (Oman) 
+</td><td>1042
+</td><td>Korean
+</td></tr><tr><td>16385
+</td><td>Arabic (Qatar) 
+</td><td>1088
+</td><td>Kyrgyz (Cyrillic)
+</td></tr><tr><td>1025
+</td><td>Arabic (Saudi Arabia) 
+</td><td>1062</td><td>Latvian
+</td></tr><tr><td>10241
+</td><td>Arabic (Syria) 
+</td><td>1063
+</td><td>Lithuanian
+</td></tr><tr><td>7169
+</td><td>Arabic (Tunisia) 
+</td><td>1071
+</td><td>Macedonian (FYROM)
+</td></tr><tr><td>14337
+</td><td>Arabic (U.A.E.) 
+</td><td>2110
+</td><td>Malay (Brunei Darussalam)
+</td></tr><tr><td>9217
+</td><td>Arabic (Yemen) 
+</td><td>1086
+</td><td>Malay (Malaysia)
+</td></tr><tr><td>1067
+</td><td>Armenian
+</td><td>1102
+</td><td>Marathi
+</td></tr><tr><td>2092
+</td><td>Azeri (Cyrillic)
+</td><td>1104
+</td><td>Mongolian (Cyrillic)
+</td></tr><tr><td>1068
+</td><td>Azeri (Latin)
+</td><td>1044
+</td><td>Norwegian (Bokmal)
+</td></tr><tr><td>1069
+</td><td>Basque
+</td><td>2068
+</td><td>Norwegian (Nynorsk)
+</td></tr><tr><td>1059
+</td><td>Belarusian
+</td><td>1045
+</td><td>Polish
+</td></tr><tr><td>1026
+</td><td>Bulgarian
+</td><td>1046
+</td><td>Portuguese (Brazil)
+</td></tr><tr><td>1027
+</td><td>Catalan
+</td><td>2070
+</td><td>Portuguese (Portugal)
+</td></tr><tr><td>3076
+</td><td>Chinese (Hong Kong)
+</td><td>1094
+</td><td>Punjabi
+</td></tr><tr><td>5124
+</td><td>Chinese (Macau)
+</td><td>1048
+</td><td>Romanian
+</td></tr><tr><td>2052
+</td><td>Chinese (PRC)
+</td><td>1049
+</td><td>Russian
+</td></tr><tr><td>4100
+</td><td>Chinese (Singapore)
+</td><td>1103
+</td><td>Sanskrit
+</td></tr><tr><td>1028
+</td><td>Chinese (Taiwan)
+</td><td>3098
+</td><td>Serbian (Cyrillic)
+</td></tr><tr><td>1050
+</td><td>Croatian
+</td><td>2074
+</td><td>Serbian (Latin)
+</td></tr><tr><td>1029
+</td><td>Czech
+</td><td>1051
+</td><td>Slovak
+</td></tr><tr><td>1030
+</td><td>Danish
+</td><td>1060
+</td><td>Slovenian
+</td></tr><tr><td>1125
+</td><td>Divehi
+</td><td>11274
+</td><td>Spanish (Argentina)
+</td></tr><tr><td>2067
+</td><td>Dutch (Belgium)
+</td><td>16394
+</td><td>Spanish (Bolivia)
+</td></tr><tr><td>1043
+</td><td>Dutch (Netherlands)
+</td><td>13322
+</td><td>Spanish (Chile)
+</td></tr><tr><td>3081
+</td><td>English (Australia)
+</td><td>9226
+</td><td>Spanish (Colombia)
+</td></tr><tr><td>10249
+</td><td>English (Belize)
+</td><td>5130
+</td><td>Spanish (Costa Rica)
+</td></tr><tr><td>4105
+</td><td>English (Canada)
+</td><td>7178
+</td><td>Spanish (Dominican Republic)
+</td></tr><tr><td>9225
+</td><td>English (Caribbean)
+</td><td>12298
+</td><td>Spanish (Ecuador)
+</td></tr><tr><td>6153
+</td><td>English (Ireland)
+</td><td>17418
+</td><td>Spanish (El Salvador)
+</td></tr><tr><td>8201
+</td><td>English (Jamaica)
+</td><td>4106</td><td>Spanish (Guatemala)
+</td></tr><tr><td>5129
+</td><td>English (New Zealand)
+</td><td>18442
+</td><td>Spanish (Honduras)
+</td></tr><tr><td>13321
+</td><td>English (Philippines)
+</td><td>2058
+</td><td>Spanish (Mexico)
+</td></tr><tr><td>7177
+</td><td>English (South Africa)
+</td><td>19466
+</td><td>Spanish (Nicaragua)
+</td></tr><tr><td>11273
+</td><td>English (Trinidad)
+</td><td>6154
+</td><td>Spanish (Panama)
+</td></tr><tr><td>2057
+</td><td>English (United Kingdom)
+</td><td>15370
+</td><td>Spanish (Paraguay)
+</td></tr><tr><td>1033
+</td><td>English (United States) &nbsp;
+</td><td>10250
+</td><td>Spanish (Peru)
+</td></tr><tr><td>12297
+</td><td>English (Zimbabwe)
+</td><td>20490
+</td><td>Spanish (Puerto Rico)
+</td></tr><tr><td>1061
+</td><td>Estonian
+</td><td>3082
+</td><td>Spanish (Spain)
+</td></tr><tr><td>1080
+</td><td>Faeroese
+</td><td>1034
+</td><td>Spanish (Traditional)
+</td></tr><tr><td>1065
+</td><td>Farsi 
+</td><td>14346
+</td><td>Spanish (Uruguay)
+</td></tr><tr><td>1035
+</td><td>Finnish
+</td><td>8202
+</td><td>Spanish (Venezuela)
+</td></tr><tr><td>2060
+</td><td>French (Belgium)
+</td><td>1089
+</td><td>Swahili
+</td></tr><tr><td>3084
+</td><td>French (Canada)
+</td><td>1053
+</td><td>Swedish
+</td></tr><tr><td>1036
+</td><td>French (France)
+</td><td>2077
+</td><td>Swedish (Finland)
+</td></tr><tr><td>5132
+</td><td>French (Luxembourg)
+</td><td>1114
+</td><td>Syriac
+</td></tr><tr><td>6156
+</td><td>French (Monaco)
+</td><td>1097
+</td><td>Tamil
+</td></tr><tr><td>4108
+</td><td>French (Switzerland)
+</td><td>1092
+</td><td>Tatar
+</td></tr><tr><td>1110
+</td><td>Galician
+</td><td>1098
+</td><td>Telugu
+</td></tr><tr><td>1079
+</td><td>Georgian
+</td><td>1054
+</td><td>Thai 
+</td></tr><tr><td>3079
+</td><td>German (Austria) 
+</td><td>1055
+</td><td>Turkish
+</td></tr><tr><td>1031
+</td><td>German (Germany) 
+</td><td>1058
+</td><td>Ukrainian
+</td></tr><tr><td>5127
+</td><td>German (Liechtenstein) 
+</td><td>1056
+</td><td>Urdu
+</td></tr><tr><td>4103
+</td><td>German (Luxembourg) 
+</td><td>2115
+</td><td>Uzbek (Cyrillic)
+</td></tr><tr><td>2055
+</td><td>German (Switzerland) 
+</td><td>1091
+</td><td>Uzbek (Latin)
+</td></tr><tr><td>1032
+</td><td>Greek
+</td><td>1066
+</td><td>Vietnamese
+</td></tr><tr><td>1095
+</td><td>Gujarati
+</td><td></td><td></td></tr></tbody></table><h2><a id="Time" name="Time">Time Zones</a></h2><p>Web
+sites based on Windows SharePoint Services can be set to any of the
+time zones recognized by Microsoft Windows Server&nbsp;2003.</p><table><tbody><tr><td><b class="bterm">Code</b>
+</td><td><b class="bterm">Time zone</b></td><td><b class="bterm">Code</b></td><td><b class="bterm">Time zone</b></td></tr><tr><td>39</td><td>(GMT-12:00) Eniwetok, Kwajalein</td><td>59</td><td>(GMT+02:00) Helsinki, Riga, Tallinn
+</td></tr><tr><td>16</td><td>(GMT-11:00) Midway Island, Samoa
+</td><td>27</td><td>(GMT+02:00) Jerusalem 26 (GMT+03:00) Baghdad
+</td></tr><tr><td>15</td><td>(GMT-10:00) Hawaii
+</td><td>74</td><td>(GMT+03:00) Kuwait, Riyadh
+</td></tr><tr><td>14</td><td>(GMT-09:00) Alaska
+</td><td>51</td><td>(GMT+03:00) Moscow, St. Petersburg, Volgograd
+</td></tr><tr><td>13</td><td>(GMT-08:00) Pacific Time (US and Canada); Tijuana
+</td><td>56</td><td>(GMT+03:00) Nairobi
+</td></tr><tr><td>38</td><td>(GMT-07:00) Arizona
+</td><td>25</td><td>(GMT+03:30) Tehran</td></tr><tr><td>12</td><td>(GMT-07:00) Mountain Time (US and Canada)
+</td><td>24</td><td>(GMT+04:00) Abu Dhabi, Muscat
+</td></tr><tr><td>55</td><td>(GMT-06:00) Central America
+</td><td>54</td><td>(GMT+04:00) Baku, Tbilisi, Yerevan 48 (GMT+04:30) Kabul
+</td></tr><tr><td>11</td><td>(GMT-06:00) Central Time (US and Canada)
+</td><td>58</td><td>(GMT+05:00) Ekaterinburg
+</td></tr><tr><td>37</td><td>(GMT-06:00) Mexico City
+</td><td>47
+</td><td>(GMT+05:00) Islamabad, Karachi, Tashkent
+</td></tr><tr><td>36</td><td>(GMT-06:00) Saskatchewan
+</td><td>23</td><td>(GMT+05:30) Calcutta, Chennai, Mumbai, New Delhi
+</td></tr><tr><td>35</td><td>(GMT-05:00) Bogota, Lima, Quito
+</td><td>62</td><td>(GMT+05:45) Kathmandu 46 (GMT+06:00) Almaty, Novosibirsk
+</td></tr><tr><td>10</td><td>(GMT-05:00) Eastern Time (US and Canada)
+</td><td>71</td><td>(GMT+06:00) Astana, Dhaka
+</td></tr><tr><td>34
+</td><td>(GMT-05:00) Indiana (East)
+</td><td>66</td><td>(GMT+06:00) Sri Jayawardenepura
+</td></tr><tr><td>9
+</td><td>(GMT-04:00) Atlantic Time (Canada)
+</td><td>61</td><td>(GMT+06:30) Rangoon
+</td></tr><tr><td>33</td><td>(GMT-04:00) Caracas, La Paz
+</td><td>22</td><td>(GMT+07:00) Bangkok, Hanoi, Jakarta
+</td></tr><tr><td>65</td><td>(GMT-04:00) Santiago
+</td><td>64</td><td>(GMT+07:00) Krasnoyarsk
+</td></tr><tr><td>28</td><td>(GMT-03:30) Newfoundland 8 (GMT-03:00) Brasilia
+</td><td>45</td><td>(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
+</td></tr><tr><td>32</td><td>(GMT-03:00) Buenos Aires, Georgetown
+</td><td>63</td><td>(GMT+08:00) Irkutsk, Ulaan Bataar
+</td></tr><tr><td>60</td><td>(GMT-03:00) Greenland
+</td><td>21</td><td>(GMT+08:00) Kuala Lumpur, Singapore
+</td></tr><tr><td>30</td><td>(GMT-02:00) Mid-Atlantic
+</td><td>73</td><td>(GMT+08:00) Perth 75 (GMT+08:00) Taipei
+</td></tr><tr><td>29</td><td>(GMT-01:00) Azores
+</td><td>20</td><td>(GMT+09:00) Osaka, Sapporo, Tokyo 72 (GMT+09:00) Seoul
+</td></tr><tr><td>53</td><td>(GMT-01:00) Cape Verde Is.</td><td>70</td><td>(GMT+09:00) Yakutsk 19 (GMT+09:30) Adelaide
+</td></tr><tr><td>31</td><td>(GMT) Casablanca, Monrovia
+</td><td>44</td><td>(GMT+09:30) Darwin
+</td></tr><tr><td>2</td><td>(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London
+</td><td>18</td><td>(GMT+10:00) Brisbane
+</td></tr><tr><td>4</td><td>(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
+</td><td>76</td><td>(GMT+10:00) Canberra, Melbourne, Sydney
+</td></tr><tr><td>6</td><td>(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
+</td><td>43</td><td>(GMT+10:00) Guam, Port Moresby
+</td></tr><tr><td>3</td><td>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris
+</td><td>42</td><td>(GMT+10:00) Hobart</td></tr><tr><td>57</td><td>(GMT+01:00) Sarajevo, Skopje, Sofija, Vilnius, Warsaw, Zagreb
+</td><td>68</td><td>(GMT+10:00) Vladivostok
+</td></tr><tr><td>69</td><td>(GMT+01:00) West Central Africa
+</td><td>41</td><td>(GMT+11:00) Magadan, Solomon Is., New Caledonia
+</td></tr><tr><td>7</td><td>(GMT+02:00) Athens, Istanbul, Minsk
+</td><td>17</td><td>(GMT+12:00) Auckland, Wellington
+</td></tr><tr><td>5</td><td>(GMT+02:00) Bucharest</td><td>40
+</td><td>(GMT+12:00) Fiji, Kamchatka, Marshall Is.
+</td></tr><tr><td>49
+</td><td>(GMT+02:00) Cairo
+</td><td>67
+</td><td>(GMT+13:00) Nuku'alofa
+</td></tr><tr><td>50
+</td><td>(GMT+02:00) Harare, Pretoria
+</td><td></td><td></td></tr></tbody></table><h2><a id="Currency" name="Currency">Currency IDs</a></h2><p>Web sites based on Windows SharePoint Services can be set to use the following currencies.
+</p><table><tbody><tr><td><b class="bterm">ID</b></td><td><b class="bterm">Currency</b>
+</td><td><b class="bterm">ID</b></td><td><b class="bterm">Currency</b>
+</td></tr><tr><td>5121</td><td>1,254 .ج.د (Arabic-Algeria)
+</td><td>4106
+</td><td>Q1,254 (Guatemala)
+</td></tr><tr><td>15361
+</td><td>1,254 .ب.د (Arabic-Bahrain)
+</td><td>18442
+</td><td>L. 1254 (Honduras)
+</td></tr><tr><td>3073
+</td><td>1,254 .م.ج (Arabic-Egypt)</td><td>3076
+</td><td>HK$1,254 (Hong Kong)
+</td></tr><tr><td>2049
+</td><td>1,254 .ع.د (Arabic-Iraq)
+</td><td>1038
+</td><td>1 254 Ft (Hungary)
+</td></tr><tr><td>11265
+</td><td>1,254 .ا.د (Arabic-Jordan)
+</td><td>1081
+</td><td>रु 1,254 (India)
+</td></tr><tr><td>13313
+</td><td>1,254 .ك.د (Arabic-Kuwait)
+</td><td>6153
+</td><td>IR£1,254 (Ireland)
+</td></tr><tr><td>12289
+</td><td>1,254 .ل.ل (Arabic-Lebanon)
+</td><td>1037
+</td><td>₪1,254 (Israel)
+</td></tr><tr><td>4097
+</td><td>1,254 .ل.د (Arabic-Libya)
+</td><td>1041
+</td><td>¥1,254 (Japan)
+</td></tr><tr><td>6145
+</td><td>1,254 .م.د (Arabic-Morocco)
+</td><td>1042
+</td><td>₩1,254 (Korea)
+</td></tr><tr><td>8193
+</td><td>1,254 .ع.ر (Arabic-Oman)
+</td><td>2058
+</td><td>$1,254 (Mexico)
+</td></tr><tr><td>16385
+</td><td>1,254 .ق.ر (Arabic-Qatar)
+</td><td>5129
+</td><td>$1,254 (New Zealand)
+</td></tr><tr><td>1025
+</td><td>1,254 .س.ر (Arabic-Saudi Arabia)
+</td><td>19466
+</td><td>C$ 1254 (Nicaragua)
+</td></tr><tr><td>10241
+</td><td>1,254 .س.ل (Arabic-Syria)
+</td><td>1044
+</td><td>kr 1 254 (Norway)
+</td></tr><tr><td>7169
+</td><td>1,254 .ت.د (Arabic-Tunisia)
+</td><td>1056
+</td><td>Rs 1,254 (Pakistan)
+</td></tr><tr><td>14337
+</td><td>1,254 .إ.د (Arabic-U.A.E)
+</td><td>6154
+</td><td>B/. 1,254 (Panama)
+</td></tr><tr><td>9217
+</td><td>1,254 .ي.ر (Arabic-Yemen)
+</td><td>15370
+</td><td>Gs 1.254 (Paraguay)
+</td></tr><tr><td>11274
+</td><td>$ 1.254 (Argentina)
+</td><td>2052
+</td><td>¥1,254 (People's Republic of China)
+</td></tr><tr><td>3081
+</td><td>$1,254 (Australia)
+</td><td>10250
+</td><td>S/. 1,254 (Peru)
+</td></tr><tr><td>3079
+</td><td>öS 1.254 (Austria)
+</td><td>1045
+</td><td>1 254 zł (Poland)
+</td></tr><tr><td>16394
+</td><td>$b 1.254 (Bolivia)
+</td><td>1049
+</td><td>1 254р. (Russia)
+</td></tr><tr><td>1046
+</td><td>R$ 1.254 (Brazil)
+</td><td>4100
+</td><td>$1,254 (Singapore)
+</td></tr><tr><td>3084
+</td><td>1 254 $ (Canada)
+</td><td>1051
+</td><td>1 254 Sk (Slovakia)
+</td></tr><tr><td>4105
+</td><td>$1,254 (Canada)
+</td><td>1060
+</td><td>1.254 SIT (Slovenia)
+</td></tr><tr><td>13322
+</td><td>$ 1.254 (Chile)
+</td><td>7177
+</td><td>R 1,254 (South Africa)
+</td></tr><tr><td>9226
+</td><td>$ 1.254 (Colombia)
+</td><td>1053
+</td><td>1.254 kr (Sweden)
+</td></tr><tr><td>5130
+</td><td>C1.254 (Costa Rica)
+</td><td>2055
+</td><td>SFr. 1'254 (Switzerland)
+</td></tr><tr><td>1029
+</td><td>1 254 Kč (Czech Republic)
+</td><td>1028
+</td><td>NT$1,254 (Taiwan)
+</td></tr><tr><td>1030
+</td><td>kr 1.254 (Denmark)
+</td><td>1054
+</td><td>฿1,254 (Thai)
+</td></tr><tr><td>7178
+</td><td>RD$1,254 (Dominican Republic)
+</td><td>1055
+</td><td>1.254 TL (Turkey)
+</td></tr><tr><td>17418
+</td><td>C1254 (El Salvador)
+</td><td>2057
+</td><td>£1,254 (United Kingdom)
+</td></tr><tr><td>-2
+</td><td>1,254 € (European Union)
+</td><td>1033
+</td><td>$1,254 (United States)
+</td></tr><tr><td>-1
+</td><td>€ 1,254 (European Union)
+</td><td>14346
+</td><td>$U 1.254 (Uruguay)
+</td></tr><tr><td>1065
+</td><td>1,254 ريال (Farsi)
+</td><td>8202
+</td><td>Bs 1.254 (Venezuela)
+</td></tr><tr><td>1032
+</td><td>1.254 Δρχ (Greece)
+</td><td>1066
+</td><td>1,254 ₫ (Vietnamese)
+</td></tr></tbody></table><center><a href="http://www.greatwesthealthcare.com/_vti_bin/help/1033/sps/html/SPSAdmincopyright.htm">©2003 Microsoft Corporation. All rights reserved.</a></center></body></html>
index addcacd6b1c6acde317f28d9a5bcceaff4b0bcaa..e412fa0ce496ebd6ec1bf9f6bbba1317da29901f 100644 (file)
-////////////////////////////////////////////////////////////////////////////////\r
-//\r
-//  Visual Leak Detector - CRT and MFC IAT Patch Functions Header\r
-//  Copyright (c) 2009 Dan Moulding\r
-//\r
-//  This library is free software; you can redistribute it and/or\r
-//  modify it under the terms of the GNU Lesser General Public\r
-//  License as published by the Free Software Foundation; either\r
-//  version 2.1 of the License, or (at your option) any later version.\r
-//\r
-//  This library is distributed in the hope that it will be useful,\r
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-//  Lesser General Public License for more details.\r
-//\r
-//  You should have received a copy of the GNU Lesser General Public\r
-//  License along with this library; if not, write to the Free Software\r
-//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
-//\r
-//  See COPYING.txt for the full terms of the GNU Lesser General Public License.\r
-//\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-#pragma once\r
-\r
-#ifndef VLDBUILD\r
-#error \\r
-"This header should only be included by Visual Leak Detector when building it from source. \\r
-Applications should never include this header."\r
-#endif\r
-\r
-#include "vldint.h"\r
-extern __declspec(dllexport) VisualLeakDetector vld;\r
-\r
-#define TEMPLATE_HEADER \\r
-template<wchar_t const *crtddll, wchar_t const *mfcddll, wchar_t const *mfcuddll,\\r
-    char const *crtd_vector_new_name, char const *crtd_vector_new_dbg_name,\\r
-    char const *crtd_scalar_new_name, char const *crtd_scalar_new_dbg_name,\\r
-    int mfcd_vector_new_ordinal, int mfcd_vector_new_dbg_4p_ordinal, int mfcd_vector_new_dbg_3p_ordinal,\\r
-    int mfcd_scalar_new_ordinal, int mfcd_scalar_new_dbg_4p_ordinal, int mfcd_scalar_new_dbg_3p_ordinal,\\r
-    int mfcud_vector_new_ordinal, int mfcud_vector_new_dbg_4p_ordinal, int mfcud_vector_new_dbg_3p_ordinal,\\r
-    int mfcud_scalar_new_ordinal, int mfcud_scalar_new_dbg_4p_ordinal, int mfcud_scalar_new_dbg_3p_ordinal>\r
-\r
-#define TEMPLATE_ARGS \\r
-    crtddll, mfcddll, mfcuddll,\\r
-    crtd_vector_new_name, crtd_vector_new_dbg_name,\\r
-    crtd_scalar_new_name, crtd_scalar_new_dbg_name,\\r
-    mfcd_vector_new_ordinal, mfcd_vector_new_dbg_4p_ordinal, mfcd_vector_new_dbg_3p_ordinal,\\r
-    mfcd_scalar_new_ordinal, mfcd_scalar_new_dbg_4p_ordinal, mfcd_scalar_new_dbg_3p_ordinal,\\r
-    mfcud_vector_new_ordinal, mfcud_vector_new_dbg_4p_ordinal, mfcud_vector_new_dbg_3p_ordinal,\\r
-    mfcud_scalar_new_ordinal, mfcud_scalar_new_dbg_4p_ordinal, mfcud_scalar_new_dbg_3p_ordinal\r
-\r
-TEMPLATE_HEADER\r
-class CrtMfcPatch\r
-{\r
-public:\r
-    static void* __cdecl crtd__calloc_dbg (size_t num, size_t size, int type, char const *file, int line);\r
-    static void* __cdecl crtd__malloc_dbg (size_t size, int type, const char *file, int line);\r
-    static void* __cdecl crtd__realloc_dbg (void *mem, size_t size, int type, char const *file, int line);\r
-    static void* __cdecl crtd__scalar_new_dbg (size_t size, int type, char const *file, int line);\r
-    static void* __cdecl crtd__vector_new_dbg (size_t size, int type, char const *file, int line);\r
-    static void* __cdecl crtd_calloc (size_t num, size_t size);\r
-    static void* __cdecl crtd_malloc (size_t size);\r
-    static void* __cdecl crtd_realloc (void *mem, size_t size);\r
-    static void* __cdecl crtd_scalar_new (size_t size);\r
-    static void* __cdecl crtd_vector_new (size_t size);\r
-\r
-    template<char const *procname>\r
-    static void* __cdecl crtd_new_dbg (SIZE_T fp, size_t size, int type, char const *file, int line);\r
-    template<char const *procname>\r
-    static void* __cdecl crtd_new (SIZE_T fp, size_t size);\r
-\r
-    static void* __cdecl mfcd_vector_new (size_t size);\r
-    static void* __cdecl mfcd__vector_new_dbg_4p (size_t size, int type, char const *file, int line);\r
-    static void* __cdecl mfcd__vector_new_dbg_3p (size_t size, char const *file, int line);\r
-    static void* __cdecl mfcd_scalar_new (size_t size);\r
-    static void* __cdecl mfcd__scalar_new_dbg_4p (size_t size, int type, char const *file, int line);\r
-    static void* __cdecl mfcd__scalar_new_dbg_3p (size_t size, char const *file, int line);\r
-    static void* __cdecl mfcud_vector_new (size_t size);\r
-    static void* __cdecl mfcud__vector_new_dbg_4p (size_t size, int type, char const *file, int line);\r
-    static void* __cdecl mfcud__vector_new_dbg_3p (size_t size, char const *file, int line);\r
-    static void* __cdecl mfcud_scalar_new (size_t size);\r
-    static void* __cdecl mfcud__scalar_new_dbg_4p (size_t size, int type, char const *file, int line);\r
-    static void* __cdecl mfcud__scalar_new_dbg_3p (size_t size, char const *file, int line);\r
-\r
-    template<wchar_t const *mfcdll, int ordinal>\r
-    static void* __cdecl mfcd_new_dbg (SIZE_T fp, size_t size, int type, char const *file, int line);\r
-    template<wchar_t const *mfcdll, int ordinal>\r
-    static void* __cdecl mfcd_new_dbg (SIZE_T fp, size_t size, char const *file, int line);\r
-    template<wchar_t const *mfcdll, int ordinal>\r
-    static void* __cdecl mfcd_new (SIZE_T fp, size_t size);\r
-};\r
-\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Visual Studio DLLs\r
-//\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-// crtd__calloc_dbg - Calls to _calloc_dbg from msvcrXXd.dll are patched\r
-//   through to this function.\r
-//\r
-//  - mem (IN): Pointer to the memory block to be reallocated.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The CRT "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by _calloc_dbg.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__calloc_dbg (size_t      num,\r
-                                                    size_t      size,\r
-                                                    int         type,\r
-                                                    char const *file,\r
-                                                    int         line)\r
-{\r
-    static _calloc_dbg_t pcrtxxd__calloc_dbg = NULL;\r
-\r
-    SIZE_T  fp;\r
-    HMODULE msvcrxxd;\r
-\r
-    FRAMEPOINTER(fp);\r
-\r
-    if (pcrtxxd__calloc_dbg == NULL) {\r
-        // This is the first call to this function. Link to the real\r
-        // _calloc_dbg.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd__calloc_dbg = (_calloc_dbg_t)GetProcAddress(msvcrxxd, "_calloc_dbg");\r
-    }\r
-\r
-    return vld.__calloc_dbg(pcrtxxd__calloc_dbg, fp, num, size, type, file, line);\r
-}\r
-\r
-// crtd__malloc_dbg - Calls to _malloc_dbg from msvcrXXd.dll are patched\r
-//   through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The CRT "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by _malloc_dbg.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__malloc_dbg (size_t      size,\r
-                                                    int         type,\r
-                                                    char const *file,\r
-                                                    int         line)\r
-{\r
-    static _malloc_dbg_t pcrtxxd__malloc_dbg = NULL;\r
-\r
-    SIZE_T  fp;\r
-    HMODULE msvcrxxd;\r
-\r
-    FRAMEPOINTER(fp);\r
-\r
-    if (pcrtxxd__malloc_dbg == NULL) {\r
-        // This is the first call to this function. Link to the real\r
-        // _malloc_dbg.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd__malloc_dbg = (_malloc_dbg_t)GetProcAddress(msvcrxxd, "_malloc_dbg");\r
-    }\r
-\r
-    return vld.__malloc_dbg(pcrtxxd__malloc_dbg, fp, size, type, file, line);\r
-}\r
-\r
-// crtd__realloc_dbg - Calls to _realloc_dbg from msvcrXXd.dll are patched\r
-//   through to this function.\r
-//\r
-//  - mem (IN): Pointer to the memory block to be reallocated.\r
-//\r
-//  - size (IN): The size of the memory block to reallocate.\r
-//\r
-//  - type (IN): The CRT "use type" of the block to be reallocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by _realloc_dbg.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__realloc_dbg (void       *mem,\r
-                                                     size_t     size,\r
-                                                     int        type,\r
-                                                     char const *file,\r
-                                                     int        line)\r
-{\r
-    static _realloc_dbg_t pcrtxxd__realloc_dbg = NULL;\r
-\r
-    SIZE_T fp;\r
-    HMODULE msvcrxxd;\r
-\r
-    FRAMEPOINTER(fp);\r
-\r
-    if (pcrtxxd__realloc_dbg == NULL) {\r
-        // This is the first call to this function. Link to the real\r
-        // _realloc_dbg.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd__realloc_dbg = (_realloc_dbg_t)GetProcAddress(msvcrxxd, "_realloc_dbg");\r
-    }\r
-\r
-    return vld.__realloc_dbg(pcrtxxd__realloc_dbg, fp, mem, size, type, file, line);\r
-}\r
-\r
-// crtd__scalar_new_dbg - Calls to the CRT's debug scalar new operator from\r
-//   msvcrXXd.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The CRT "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the CRT debug scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__scalar_new_dbg (size_t      size,\r
-                                                        int         type,\r
-                                                        char const *file,\r
-                                                        int         line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return crtd_new_dbg<crtd_scalar_new_dbg_name>(fp, size, type, file, line);\r
-}\r
-\r
-// crtd__vector_new_dbg - Calls to the CRT's debug vector new operator from\r
-//   msvcrXXd.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The CRT "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the CRT debug vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__vector_new_dbg (size_t      size,\r
-                                                        int         type,\r
-                                                        char const *file,\r
-                                                        int         line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return crtd_new_dbg<crtd_vector_new_dbg_name>(fp, size, type, file, line);\r
-}\r
-\r
-// crtd_calloc - Calls to calloc from msvcrXXd.dll are patched through to\r
-//   this function.\r
-//\r
-//  - dll (IN): The name of the dll\r
-//\r
-//  - num (IN): The number of blocks, of size 'size', to be allocated.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the valued returned from calloc.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_calloc (size_t num, size_t size)\r
-{\r
-    static calloc_t pcrtxxd_calloc = NULL;\r
-\r
-    SIZE_T  fp;\r
-    HMODULE msvcrxxd;\r
-\r
-    FRAMEPOINTER(fp);\r
-\r
-    if (pcrtxxd_calloc == NULL) {\r
-        // This is the first call to this function. Link to the real malloc.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd_calloc = (calloc_t)GetProcAddress(msvcrxxd, "calloc");\r
-    }\r
-\r
-    return vld._calloc(pcrtxxd_calloc, fp, num, size);\r
-}\r
-\r
-// crtd_malloc - Calls to malloc from msvcrXXd.dll are patched through to\r
-//   this function.\r
-//\r
-//  - dll (IN): The name of the dll\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the valued returned from malloc.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_malloc (size_t size)\r
-{\r
-    static malloc_t pcrtxxd_malloc = NULL;\r
-\r
-    SIZE_T  fp;\r
-    HMODULE msvcrxxd;\r
-\r
-    FRAMEPOINTER(fp);\r
-\r
-    if (pcrtxxd_malloc == NULL) {\r
-        // This is the first call to this function. Link to the real malloc.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd_malloc = (malloc_t)GetProcAddress(msvcrxxd, "malloc");\r
-    }\r
-\r
-    return vld._malloc(pcrtxxd_malloc, fp, size);\r
-}\r
-\r
-// crtd_realloc - Calls to realloc from msvcrXXd.dll are patched through to\r
-//   this function.\r
-//\r
-//  - dll (IN): The name of the dll\r
-//\r
-//  - mem (IN): Pointer to the memory block to reallocate.\r
-//\r
-//  - size (IN): Size of the memory block to reallocate.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned from realloc.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_realloc (void *mem, size_t size)\r
-{\r
-    static realloc_t pcrtxxd_realloc = NULL;\r
-\r
-    SIZE_T  fp;\r
-    HMODULE msvcrxxd;\r
-\r
-    FRAMEPOINTER(fp);\r
-\r
-    if (pcrtxxd_realloc == NULL) {\r
-        // This is the first call to this function. Link to the real realloc.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd_realloc = (realloc_t)GetProcAddress(msvcrxxd, "realloc");\r
-    }\r
-\r
-    return vld._realloc(pcrtxxd_realloc, fp, mem, size);\r
-}\r
-\r
-// crtd_scalar_new - Calls to the CRT's scalar new operator from msvcrXXd.dll\r
-//   are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the CRT scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_scalar_new (size_t size)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return crtd_new<crtd_scalar_new_name>(fp, size);\r
-}\r
-\r
-// crtd_vector_new - Calls to the CRT's vector new operator from msvcrXXd.dll\r
-//   are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the CRT vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_vector_new (size_t size)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return crtd_new<crtd_vector_new_name>(fp, size);\r
-}\r
-\r
-// crtd_new_dbg - A template function for implementation of patch functions to\r
-//   the CRT's debug new operator from msvcrXXd.dll\r
-//\r
-//  - procname (IN): The debug new operator's name\r
-//\r
-//  - fp (IN): Frame pointer from the call that initiated this allocation.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The CRT "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the CRT debug new operator.\r
-//\r
-TEMPLATE_HEADER\r
-template<char const *procname>\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_new_dbg (SIZE_T      fp,\r
-                                                size_t      size,\r
-                                                int         type,\r
-                                                char const *file,\r
-                                                int         line)\r
-{\r
-    static new_dbg_crt_t pcrtxxd_new_dbg = NULL;\r
-\r
-    HMODULE msvcrxxd;\r
-\r
-    if (pcrtxxd_new_dbg == NULL) {\r
-        // This is the first call to this function. Link to the real CRT debug\r
-        // new operator.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd_new_dbg = (new_dbg_crt_t)GetProcAddress(msvcrxxd, procname);\r
-    }\r
-\r
-    return vld.new_dbg_crt(pcrtxxd_new_dbg, fp, size, type, file, line);\r
-}\r
-\r
-// crt_new - A template function for implementing patch functions to the\r
-//   CRT's new operator from msvcrXXd.dll\r
-//\r
-//  - dll (IN): The name of the dll\r
-//\r
-//  - procname (IN): The debug new operator's name\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the CRT new operator.\r
-//\r
-TEMPLATE_HEADER\r
-template<char const *procname>\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_new (SIZE_T fp, size_t size)\r
-{\r
-    static new_t pcrtxxd_scalar_new = NULL;\r
-\r
-    HMODULE msvcrxxd;\r
-\r
-    if (pcrtxxd_scalar_new == NULL) {\r
-        // This is the first call to this function. Link to the real CRT new\r
-        // operator.\r
-        msvcrxxd = GetModuleHandle(crtddll);\r
-        pcrtxxd_scalar_new = (new_t)GetProcAddress(msvcrxxd, procname);\r
-    }\r
-\r
-    return vld._new(pcrtxxd_scalar_new, fp, size);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-//\r
-// MFC DLLs\r
-//\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-// mfcd__scalar_new_dbg_3p - Calls to the MFC debug scalar new operator from\r
-//   mfcXXd.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__scalar_new_dbg_4p (size_t       size,\r
-                                                           int          type,\r
-                                                           char const  *file,\r
-                                                           int          line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcddll, mfcd_scalar_new_dbg_4p_ordinal>\r
-                       (fp, size, type, file, line);\r
-}\r
-\r
-// mfcd__scalar_new_dbg_3p - Calls to the MFC debug scalar new operator from\r
-//   mfcXXd.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__scalar_new_dbg_3p (size_t       size,\r
-                                                           char const  *file,\r
-                                                           int          line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcddll, mfcd_scalar_new_dbg_3p_ordinal>\r
-                       (fp, size, file, line);\r
-}\r
-\r
-// mfcd__vector_new_dbg_4p - Calls to the MFC debug vector new operator from\r
-//   mfcXXd.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__vector_new_dbg_4p (size_t       size,\r
-                                                           int          type,\r
-                                                           char const  *file,\r
-                                                           int          line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcddll, mfcd_vector_new_dbg_4p_ordinal>\r
-                       (fp, size, type, file, line);\r
-}\r
-\r
-// mfcd__vector_new_dbg_3p - Calls to the MFC debug vector new operator from\r
-//   mfcXXd.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__vector_new_dbg_3p (size_t       size,\r
-                                                           char const  *file,\r
-                                                           int          line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcddll, mfcd_vector_new_dbg_3p_ordinal>\r
-                       (fp, size, file, line);\r
-}\r
-\r
-// mfcd_scalar_new - Calls to the MFC scalar new operator from mfcXXd.dll are\r
-//   patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_scalar_new (size_t size)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new<mfcddll, mfcd_scalar_new_ordinal>(fp, size);\r
-}\r
-\r
-// mfcd_vector_new - Calls to the MFC vector new operator from mfcXXd.dll are\r
-//   patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_vector_new (size_t size)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new<mfcddll, mfcd_vector_new_ordinal>(fp, size);\r
-}\r
-\r
-// mfcud__scalar_new_dbg_4p - Calls to the MFC debug scalar new operator from\r
-//   mfcXXud.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__scalar_new_dbg_4p (size_t      size,\r
-                                                            int         type,\r
-                                                            char const *file,\r
-                                                            int         line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcuddll, mfcud_scalar_new_dbg_4p_ordinal>\r
-                       (fp, size, type, file, line);\r
-}\r
-\r
-// mfcud__scalar_new_dbg_3p - Calls to the MFC debug scalar new operator from\r
-//   mfcXXud.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__scalar_new_dbg_3p (size_t      size,\r
-                                                            char const *file,\r
-                                                            int         line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcuddll, mfcud_scalar_new_dbg_3p_ordinal>\r
-                       (fp, size, file, line);\r
-}\r
-\r
-// mfcud__vector_new_dbg_4p - Calls to the MFC debug vector new operator from\r
-//   mfcXXud.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - type (IN): The "use type" of the block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__vector_new_dbg_4p (size_t      size,\r
-                                                            int         type,\r
-                                                            char const *file,\r
-                                                            int         line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcuddll, mfcud_vector_new_dbg_4p_ordinal>\r
-                       (fp, size, type, file, line);\r
-}\r
-\r
-// mfcud__vector_new_dbg_3p - Calls to the MFC debug vector new operator from\r
-//   mfcXXud.dll are patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__vector_new_dbg_3p (size_t      size,\r
-                                                            char const *file,\r
-                                                            int         line)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new_dbg<mfcuddll, mfcud_vector_new_dbg_3p_ordinal>\r
-                       (fp, size, file, line);\r
-}\r
-\r
-// mfcud_scalar_new - Calls to the MFC scalar new operator from mfcXXud.dll are\r
-//   patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC scalar new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud_scalar_new (size_t size)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new<mfcuddll, mfcud_scalar_new_ordinal>(fp, size);\r
-}\r
-\r
-// mfcud_vector_new - Calls to the MFC vector new operator from mfcXXud.dll are\r
-//   patched through to this function.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC vector new operator.\r
-//\r
-TEMPLATE_HEADER\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud_vector_new (size_t size)\r
-{\r
-    SIZE_T  fp;\r
-    FRAMEPOINTER(fp);\r
-\r
-    return mfcd_new<mfcuddll, mfcud_vector_new_ordinal>(fp, size);\r
-}\r
-\r
-// mfcd_new_dbg - A generic function for implementing patch functions to the MFC\r
-//   debug new operators:\r
-//   void* __cdecl operator new[](size_t size, int type, char const *file, int line)\r
-//   void* __cdecl operator new(size_t size, int type, char const *file, int line)\r
-//\r
-//  - mfcdll (IN): The name of the MFC DLL\r
-//\r
-//  - ordinal (IN): The debug new operator's ordinal value\r
-//\r
-//  - type (IN): The "use type" of the block to be allocated.\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug new operator.\r
-//\r
-TEMPLATE_HEADER\r
-template<wchar_t const *mfcdll, int ordinal>\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_new_dbg (SIZE_T      fp,\r
-                                                size_t      size,\r
-                                                int         type,\r
-                                                char const *file,\r
-                                                int         line)\r
-{\r
-    static new_dbg_crt_t pmfcxxd__new_dbg = NULL;\r
-\r
-    HMODULE mfcxxd;\r
-\r
-    if (pmfcxxd__new_dbg == NULL) {\r
-        // This is the first call to this function. Link to the real MFC debug\r
-        // new operator.\r
-        mfcxxd = GetModuleHandle(mfcdll);\r
-        pmfcxxd__new_dbg = (new_dbg_crt_t)GetProcAddress(mfcxxd, (LPCSTR)ordinal);\r
-    }\r
-\r
-    return vld.new_dbg_mfc(pmfcxxd__new_dbg, fp, size, type, file, line);\r
-}\r
-\r
-// mfcd_new_dbg - A generic function for implementing patch functions to the MFC\r
-//   debug new operators:\r
-//   void* __cdecl operator new[](size_t size, char const *file, int line)\r
-//   void* __cdecl operator new(size_t size, char const *file, int line)\r
-//\r
-//  - mfcdll (IN): The name of the MFC DLL\r
-//\r
-//  - ordinal (IN): The debug new operator's ordinal value\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  - file (IN): The name of the file from which this function is being called.\r
-//\r
-//  - line (IN): The line number, in the above file, at which this function is\r
-//      being called.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC debug new operator.\r
-//\r
-TEMPLATE_HEADER\r
-template<wchar_t const *mfcdll, int ordinal>\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_new_dbg (SIZE_T      fp,\r
-                                                size_t      size,\r
-                                                char const *file,\r
-                                                int         line)\r
-{\r
-    static new_dbg_mfc_t pmfcxxd__new_dbg = NULL;\r
-\r
-    HMODULE mfcxxd;\r
-\r
-    if (pmfcxxd__new_dbg == NULL) {\r
-        // This is the first call to this function. Link to the real MFC debug\r
-        // new operator.\r
-        mfcxxd = GetModuleHandle(mfcdll);\r
-        pmfcxxd__new_dbg = (new_dbg_mfc_t)GetProcAddress(mfcxxd, (LPCSTR)ordinal);\r
-    }\r
-\r
-    return vld.new_dbg_mfc(pmfcxxd__new_dbg, fp, size, file, line);\r
-}\r
-\r
-// mfcd_new - A generic function for implementing patch functions to the MFC new\r
-//   operators.\r
-//\r
-//  - mfcdll (IN): The name of the MFC DLL\r
-//\r
-//  - ordinal (IN): The new operator's ordinal value\r
-//\r
-//  - size (IN): The size, in bytes, of the memory block to be allocated.\r
-//\r
-//  Return Value:\r
-//\r
-//    Returns the value returned by the MFC new operator.\r
-//\r
-TEMPLATE_HEADER\r
-template<wchar_t const *mfcdll, int ordinal>\r
-void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_new (SIZE_T fp, size_t size)\r
-{\r
-    static new_t pmfcxxd_new = NULL;\r
-\r
-    HMODULE mfcxxd;\r
-\r
-    if (pmfcxxd_new == NULL) {\r
-        // This is the first call to this function. Link to the real CRT new\r
-        // operator.\r
-        mfcxxd = GetModuleHandle(mfcdll);\r
-        pmfcxxd_new = (new_t)GetProcAddress(mfcxxd, (LPCSTR)ordinal);\r
-    }\r
-\r
-    return vld._new(pmfcxxd_new, fp, size);\r
-}\r
-\r
-#undef TEMPLATE_HEADER\r
-#undef TEMPLATE_ARGS\r
-\r
-const extern char    scalar_new_dbg_name[] = "??2@YAPAXIHPBDH@Z";\r
-const extern char    vector_new_dbg_name[] = "??_U@YAPAXIHPBDH@Z";\r
-const extern char    scalar_new_name[] = "??2@YAPAXI@Z";\r
-const extern char    vector_new_name[] = "??_U@YAPAXI@Z";\r
-const extern wchar_t msvcrtd_dll[]  = L"msvcrtd.dll";\r
-const extern wchar_t mfc42d_dll[]   = L"mfc42d.dll";\r
-const extern wchar_t mfc42ud_dll[]  = L"mfc42ud.dll";\r
-const extern wchar_t msvcr70d_dll[] = L"msvcr70d.dll";\r
-const extern wchar_t mfc70d_dll[]   = L"mfc70d.dll";\r
-const extern wchar_t mfc70ud_dll[]  = L"mfc70ud.dll";\r
-const extern wchar_t msvcr71d_dll[] = L"msvcr71d.dll";\r
-const extern wchar_t mfc71d_dll[]   = L"mfc71d.dll";\r
-const extern wchar_t mfc71ud_dll[]  = L"mfc71ud.dll";\r
-const extern wchar_t msvcr80d_dll[] = L"msvcr80d.dll";\r
-const extern wchar_t mfc80d_dll[]   = L"mfc80d.dll";\r
-const extern wchar_t mfc80ud_dll[]  = L"mfc80ud.dll";\r
-const extern wchar_t msvcr90d_dll[] = L"msvcr90d.dll";\r
-const extern wchar_t mfc90d_dll[]   = L"mfc90d.dll";\r
-const extern wchar_t mfc90ud_dll[]  = L"mfc90ud.dll";\r
-const extern wchar_t msvcr100d_dll[] = L"msvcr100d.dll";\r
-const extern wchar_t mfc100d_dll[]   = L"mfc100d.dll";\r
-const extern wchar_t mfc100ud_dll[]  = L"mfc100ud.dll";\r
-\r
-// Visual Studio 6.0\r
-typedef CrtMfcPatch<msvcrtd_dll, mfc42d_dll, mfc42ud_dll,\r
-                    vector_new_name, vector_new_dbg_name,\r
-                    scalar_new_name, scalar_new_dbg_name,\r
-                    0, 0, 0, 711, 712, 714,\r
-                    0, 0, 0, 711, 712, 714>\r
-        VS60;\r
-// Visual Studio .NET 2002\r
-typedef CrtMfcPatch<msvcr70d_dll, mfc70d_dll, mfc70ud_dll,\r
-                    vector_new_name, vector_new_dbg_name,\r
-                    scalar_new_name, scalar_new_dbg_name,\r
-                    257, 258, 259, 832, 833, 834,\r
-                    258, 259, 260, 833, 834, 835>\r
-        VS70;\r
-// Visual Studio .NET 2003\r
-typedef CrtMfcPatch<msvcr71d_dll, mfc71d_dll, mfc71ud_dll,\r
-                    vector_new_name, vector_new_dbg_name,\r
-                    scalar_new_name, scalar_new_dbg_name,\r
-                    267, 268, 269, 893, 894, 895,\r
-                    267, 268, 269, 893, 894, 895>\r
-        VS71;\r
-// Visual Studio 2005\r
-typedef CrtMfcPatch<msvcr80d_dll, mfc80d_dll, mfc80ud_dll,\r
-                    vector_new_name, vector_new_dbg_name,\r
-                    scalar_new_name, scalar_new_dbg_name,\r
-                    267, 268, 269, 893, 894, 895,\r
-                    267, 268, 269, 893, 894, 895>\r
-        VS80;\r
-// Visual Studio 2008\r
-typedef CrtMfcPatch<msvcr90d_dll, mfc90d_dll, mfc90ud_dll,\r
-                    vector_new_name, vector_new_dbg_name,\r
-                    scalar_new_name, scalar_new_dbg_name,\r
-                    267, 268, 269, 931, 932, 933,\r
-                    267, 268, 269, 935, 936, 937>\r
-        VS90;\r
-\r
-// Visual Studio 2010\r
-typedef CrtMfcPatch<msvcr100d_dll, mfc100d_dll, mfc100ud_dll,\r
-                    vector_new_name, vector_new_dbg_name,\r
-                                       scalar_new_name, scalar_new_dbg_name,\r
-                                       267, 268, 269, 1405, 1406, 1407,\r
-                                       267, 268, 269, 1412, 1413, 1414>\r
-        VS100;
\ No newline at end of file
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Visual Leak Detector - CRT and MFC IAT Patch Functions Header
+//  Copyright (c) 2009 Dan Moulding
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+//  See COPYING.txt for the full terms of the GNU Lesser General Public License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#ifndef VLDBUILD
+#error \
+"This header should only be included by Visual Leak Detector when building it from source. \
+Applications should never include this header."
+#endif
+
+#include "vldint.h"
+extern __declspec(dllexport) VisualLeakDetector vld;
+
+#define TEMPLATE_HEADER \
+template<wchar_t const *crtddll, wchar_t const *mfcddll, wchar_t const *mfcuddll,\
+    char const *crtd_vector_new_name, char const *crtd_vector_new_dbg_name,\
+    char const *crtd_scalar_new_name, char const *crtd_scalar_new_dbg_name,\
+    int mfcd_vector_new_ordinal, int mfcd_vector_new_dbg_4p_ordinal, int mfcd_vector_new_dbg_3p_ordinal,\
+    int mfcd_scalar_new_ordinal, int mfcd_scalar_new_dbg_4p_ordinal, int mfcd_scalar_new_dbg_3p_ordinal,\
+    int mfcud_vector_new_ordinal, int mfcud_vector_new_dbg_4p_ordinal, int mfcud_vector_new_dbg_3p_ordinal,\
+    int mfcud_scalar_new_ordinal, int mfcud_scalar_new_dbg_4p_ordinal, int mfcud_scalar_new_dbg_3p_ordinal>
+
+#define TEMPLATE_ARGS \
+    crtddll, mfcddll, mfcuddll,\
+    crtd_vector_new_name, crtd_vector_new_dbg_name,\
+    crtd_scalar_new_name, crtd_scalar_new_dbg_name,\
+    mfcd_vector_new_ordinal, mfcd_vector_new_dbg_4p_ordinal, mfcd_vector_new_dbg_3p_ordinal,\
+    mfcd_scalar_new_ordinal, mfcd_scalar_new_dbg_4p_ordinal, mfcd_scalar_new_dbg_3p_ordinal,\
+    mfcud_vector_new_ordinal, mfcud_vector_new_dbg_4p_ordinal, mfcud_vector_new_dbg_3p_ordinal,\
+    mfcud_scalar_new_ordinal, mfcud_scalar_new_dbg_4p_ordinal, mfcud_scalar_new_dbg_3p_ordinal
+
+TEMPLATE_HEADER
+class CrtMfcPatch
+{
+public:
+    static void* __cdecl crtd__calloc_dbg (size_t num, size_t size, int type, char const *file, int line);
+    static void* __cdecl crtd__malloc_dbg (size_t size, int type, const char *file, int line);
+    static void* __cdecl crtd__realloc_dbg (void *mem, size_t size, int type, char const *file, int line);
+    static void* __cdecl crtd__scalar_new_dbg (size_t size, int type, char const *file, int line);
+    static void* __cdecl crtd__vector_new_dbg (size_t size, int type, char const *file, int line);
+    static void* __cdecl crtd_calloc (size_t num, size_t size);
+    static void* __cdecl crtd_malloc (size_t size);
+    static void* __cdecl crtd_realloc (void *mem, size_t size);
+    static void* __cdecl crtd_scalar_new (size_t size);
+    static void* __cdecl crtd_vector_new (size_t size);
+
+    template<char const *procname>
+    static void* __cdecl crtd_new_dbg (SIZE_T fp, size_t size, int type, char const *file, int line);
+    template<char const *procname>
+    static void* __cdecl crtd_new (SIZE_T fp, size_t size);
+
+    static void* __cdecl mfcd_vector_new (size_t size);
+    static void* __cdecl mfcd__vector_new_dbg_4p (size_t size, int type, char const *file, int line);
+    static void* __cdecl mfcd__vector_new_dbg_3p (size_t size, char const *file, int line);
+    static void* __cdecl mfcd_scalar_new (size_t size);
+    static void* __cdecl mfcd__scalar_new_dbg_4p (size_t size, int type, char const *file, int line);
+    static void* __cdecl mfcd__scalar_new_dbg_3p (size_t size, char const *file, int line);
+    static void* __cdecl mfcud_vector_new (size_t size);
+    static void* __cdecl mfcud__vector_new_dbg_4p (size_t size, int type, char const *file, int line);
+    static void* __cdecl mfcud__vector_new_dbg_3p (size_t size, char const *file, int line);
+    static void* __cdecl mfcud_scalar_new (size_t size);
+    static void* __cdecl mfcud__scalar_new_dbg_4p (size_t size, int type, char const *file, int line);
+    static void* __cdecl mfcud__scalar_new_dbg_3p (size_t size, char const *file, int line);
+
+    template<wchar_t const *mfcdll, int ordinal>
+    static void* __cdecl mfcd_new_dbg (SIZE_T fp, size_t size, int type, char const *file, int line);
+    template<wchar_t const *mfcdll, int ordinal>
+    static void* __cdecl mfcd_new_dbg (SIZE_T fp, size_t size, char const *file, int line);
+    template<wchar_t const *mfcdll, int ordinal>
+    static void* __cdecl mfcd_new (SIZE_T fp, size_t size);
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Visual Studio DLLs
+//
+////////////////////////////////////////////////////////////////////////////////
+
+// crtd__calloc_dbg - Calls to _calloc_dbg from msvcrXXd.dll are patched
+//   through to this function.
+//
+//  - mem (IN): Pointer to the memory block to be reallocated.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The CRT "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by _calloc_dbg.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__calloc_dbg (size_t      num,
+                                                    size_t      size,
+                                                    int         type,
+                                                    char const *file,
+                                                    int         line)
+{
+    static _calloc_dbg_t pcrtxxd__calloc_dbg = NULL;
+
+    SIZE_T  fp;
+    HMODULE msvcrxxd;
+
+    FRAMEPOINTER(fp);
+
+    if (pcrtxxd__calloc_dbg == NULL) {
+        // This is the first call to this function. Link to the real
+        // _calloc_dbg.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd__calloc_dbg = (_calloc_dbg_t)GetProcAddress(msvcrxxd, "_calloc_dbg");
+    }
+
+    return vld.__calloc_dbg(pcrtxxd__calloc_dbg, fp, num, size, type, file, line);
+}
+
+// crtd__malloc_dbg - Calls to _malloc_dbg from msvcrXXd.dll are patched
+//   through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The CRT "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by _malloc_dbg.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__malloc_dbg (size_t      size,
+                                                    int         type,
+                                                    char const *file,
+                                                    int         line)
+{
+    static _malloc_dbg_t pcrtxxd__malloc_dbg = NULL;
+
+    SIZE_T  fp;
+    HMODULE msvcrxxd;
+
+    FRAMEPOINTER(fp);
+
+    if (pcrtxxd__malloc_dbg == NULL) {
+        // This is the first call to this function. Link to the real
+        // _malloc_dbg.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd__malloc_dbg = (_malloc_dbg_t)GetProcAddress(msvcrxxd, "_malloc_dbg");
+    }
+
+    return vld.__malloc_dbg(pcrtxxd__malloc_dbg, fp, size, type, file, line);
+}
+
+// crtd__realloc_dbg - Calls to _realloc_dbg from msvcrXXd.dll are patched
+//   through to this function.
+//
+//  - mem (IN): Pointer to the memory block to be reallocated.
+//
+//  - size (IN): The size of the memory block to reallocate.
+//
+//  - type (IN): The CRT "use type" of the block to be reallocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by _realloc_dbg.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__realloc_dbg (void       *mem,
+                                                     size_t     size,
+                                                     int        type,
+                                                     char const *file,
+                                                     int        line)
+{
+    static _realloc_dbg_t pcrtxxd__realloc_dbg = NULL;
+
+    SIZE_T fp;
+    HMODULE msvcrxxd;
+
+    FRAMEPOINTER(fp);
+
+    if (pcrtxxd__realloc_dbg == NULL) {
+        // This is the first call to this function. Link to the real
+        // _realloc_dbg.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd__realloc_dbg = (_realloc_dbg_t)GetProcAddress(msvcrxxd, "_realloc_dbg");
+    }
+
+    return vld.__realloc_dbg(pcrtxxd__realloc_dbg, fp, mem, size, type, file, line);
+}
+
+// crtd__scalar_new_dbg - Calls to the CRT's debug scalar new operator from
+//   msvcrXXd.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The CRT "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the CRT debug scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__scalar_new_dbg (size_t      size,
+                                                        int         type,
+                                                        char const *file,
+                                                        int         line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return crtd_new_dbg<crtd_scalar_new_dbg_name>(fp, size, type, file, line);
+}
+
+// crtd__vector_new_dbg - Calls to the CRT's debug vector new operator from
+//   msvcrXXd.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The CRT "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the CRT debug vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd__vector_new_dbg (size_t      size,
+                                                        int         type,
+                                                        char const *file,
+                                                        int         line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return crtd_new_dbg<crtd_vector_new_dbg_name>(fp, size, type, file, line);
+}
+
+// crtd_calloc - Calls to calloc from msvcrXXd.dll are patched through to
+//   this function.
+//
+//  - dll (IN): The name of the dll
+//
+//  - num (IN): The number of blocks, of size 'size', to be allocated.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the valued returned from calloc.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_calloc (size_t num, size_t size)
+{
+    static calloc_t pcrtxxd_calloc = NULL;
+
+    SIZE_T  fp;
+    HMODULE msvcrxxd;
+
+    FRAMEPOINTER(fp);
+
+    if (pcrtxxd_calloc == NULL) {
+        // This is the first call to this function. Link to the real malloc.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd_calloc = (calloc_t)GetProcAddress(msvcrxxd, "calloc");
+    }
+
+    return vld._calloc(pcrtxxd_calloc, fp, num, size);
+}
+
+// crtd_malloc - Calls to malloc from msvcrXXd.dll are patched through to
+//   this function.
+//
+//  - dll (IN): The name of the dll
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the valued returned from malloc.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_malloc (size_t size)
+{
+    static malloc_t pcrtxxd_malloc = NULL;
+
+    SIZE_T  fp;
+    HMODULE msvcrxxd;
+
+    FRAMEPOINTER(fp);
+
+    if (pcrtxxd_malloc == NULL) {
+        // This is the first call to this function. Link to the real malloc.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd_malloc = (malloc_t)GetProcAddress(msvcrxxd, "malloc");
+    }
+
+    return vld._malloc(pcrtxxd_malloc, fp, size);
+}
+
+// crtd_realloc - Calls to realloc from msvcrXXd.dll are patched through to
+//   this function.
+//
+//  - dll (IN): The name of the dll
+//
+//  - mem (IN): Pointer to the memory block to reallocate.
+//
+//  - size (IN): Size of the memory block to reallocate.
+//
+//  Return Value:
+//
+//    Returns the value returned from realloc.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_realloc (void *mem, size_t size)
+{
+    static realloc_t pcrtxxd_realloc = NULL;
+
+    SIZE_T  fp;
+    HMODULE msvcrxxd;
+
+    FRAMEPOINTER(fp);
+
+    if (pcrtxxd_realloc == NULL) {
+        // This is the first call to this function. Link to the real realloc.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd_realloc = (realloc_t)GetProcAddress(msvcrxxd, "realloc");
+    }
+
+    return vld._realloc(pcrtxxd_realloc, fp, mem, size);
+}
+
+// crtd_scalar_new - Calls to the CRT's scalar new operator from msvcrXXd.dll
+//   are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the CRT scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_scalar_new (size_t size)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return crtd_new<crtd_scalar_new_name>(fp, size);
+}
+
+// crtd_vector_new - Calls to the CRT's vector new operator from msvcrXXd.dll
+//   are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the CRT vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_vector_new (size_t size)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return crtd_new<crtd_vector_new_name>(fp, size);
+}
+
+// crtd_new_dbg - A template function for implementation of patch functions to
+//   the CRT's debug new operator from msvcrXXd.dll
+//
+//  - procname (IN): The debug new operator's name
+//
+//  - fp (IN): Frame pointer from the call that initiated this allocation.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The CRT "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the CRT debug new operator.
+//
+TEMPLATE_HEADER
+template<char const *procname>
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_new_dbg (SIZE_T      fp,
+                                                size_t      size,
+                                                int         type,
+                                                char const *file,
+                                                int         line)
+{
+    static new_dbg_crt_t pcrtxxd_new_dbg = NULL;
+
+    HMODULE msvcrxxd;
+
+    if (pcrtxxd_new_dbg == NULL) {
+        // This is the first call to this function. Link to the real CRT debug
+        // new operator.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd_new_dbg = (new_dbg_crt_t)GetProcAddress(msvcrxxd, procname);
+    }
+
+    return vld.new_dbg_crt(pcrtxxd_new_dbg, fp, size, type, file, line);
+}
+
+// crt_new - A template function for implementing patch functions to the
+//   CRT's new operator from msvcrXXd.dll
+//
+//  - dll (IN): The name of the dll
+//
+//  - procname (IN): The debug new operator's name
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the CRT new operator.
+//
+TEMPLATE_HEADER
+template<char const *procname>
+void* CrtMfcPatch<TEMPLATE_ARGS>::crtd_new (SIZE_T fp, size_t size)
+{
+    static new_t pcrtxxd_scalar_new = NULL;
+
+    HMODULE msvcrxxd;
+
+    if (pcrtxxd_scalar_new == NULL) {
+        // This is the first call to this function. Link to the real CRT new
+        // operator.
+        msvcrxxd = GetModuleHandle(crtddll);
+        pcrtxxd_scalar_new = (new_t)GetProcAddress(msvcrxxd, procname);
+    }
+
+    return vld._new(pcrtxxd_scalar_new, fp, size);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// MFC DLLs
+//
+////////////////////////////////////////////////////////////////////////////////
+
+// mfcd__scalar_new_dbg_3p - Calls to the MFC debug scalar new operator from
+//   mfcXXd.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__scalar_new_dbg_4p (size_t       size,
+                                                           int          type,
+                                                           char const  *file,
+                                                           int          line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcddll, mfcd_scalar_new_dbg_4p_ordinal>
+                       (fp, size, type, file, line);
+}
+
+// mfcd__scalar_new_dbg_3p - Calls to the MFC debug scalar new operator from
+//   mfcXXd.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__scalar_new_dbg_3p (size_t       size,
+                                                           char const  *file,
+                                                           int          line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcddll, mfcd_scalar_new_dbg_3p_ordinal>
+                       (fp, size, file, line);
+}
+
+// mfcd__vector_new_dbg_4p - Calls to the MFC debug vector new operator from
+//   mfcXXd.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__vector_new_dbg_4p (size_t       size,
+                                                           int          type,
+                                                           char const  *file,
+                                                           int          line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcddll, mfcd_vector_new_dbg_4p_ordinal>
+                       (fp, size, type, file, line);
+}
+
+// mfcd__vector_new_dbg_3p - Calls to the MFC debug vector new operator from
+//   mfcXXd.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd__vector_new_dbg_3p (size_t       size,
+                                                           char const  *file,
+                                                           int          line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcddll, mfcd_vector_new_dbg_3p_ordinal>
+                       (fp, size, file, line);
+}
+
+// mfcd_scalar_new - Calls to the MFC scalar new operator from mfcXXd.dll are
+//   patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_scalar_new (size_t size)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new<mfcddll, mfcd_scalar_new_ordinal>(fp, size);
+}
+
+// mfcd_vector_new - Calls to the MFC vector new operator from mfcXXd.dll are
+//   patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_vector_new (size_t size)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new<mfcddll, mfcd_vector_new_ordinal>(fp, size);
+}
+
+// mfcud__scalar_new_dbg_4p - Calls to the MFC debug scalar new operator from
+//   mfcXXud.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__scalar_new_dbg_4p (size_t      size,
+                                                            int         type,
+                                                            char const *file,
+                                                            int         line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcuddll, mfcud_scalar_new_dbg_4p_ordinal>
+                       (fp, size, type, file, line);
+}
+
+// mfcud__scalar_new_dbg_3p - Calls to the MFC debug scalar new operator from
+//   mfcXXud.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__scalar_new_dbg_3p (size_t      size,
+                                                            char const *file,
+                                                            int         line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcuddll, mfcud_scalar_new_dbg_3p_ordinal>
+                       (fp, size, file, line);
+}
+
+// mfcud__vector_new_dbg_4p - Calls to the MFC debug vector new operator from
+//   mfcXXud.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - type (IN): The "use type" of the block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__vector_new_dbg_4p (size_t      size,
+                                                            int         type,
+                                                            char const *file,
+                                                            int         line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcuddll, mfcud_vector_new_dbg_4p_ordinal>
+                       (fp, size, type, file, line);
+}
+
+// mfcud__vector_new_dbg_3p - Calls to the MFC debug vector new operator from
+//   mfcXXud.dll are patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud__vector_new_dbg_3p (size_t      size,
+                                                            char const *file,
+                                                            int         line)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new_dbg<mfcuddll, mfcud_vector_new_dbg_3p_ordinal>
+                       (fp, size, file, line);
+}
+
+// mfcud_scalar_new - Calls to the MFC scalar new operator from mfcXXud.dll are
+//   patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC scalar new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud_scalar_new (size_t size)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new<mfcuddll, mfcud_scalar_new_ordinal>(fp, size);
+}
+
+// mfcud_vector_new - Calls to the MFC vector new operator from mfcXXud.dll are
+//   patched through to this function.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC vector new operator.
+//
+TEMPLATE_HEADER
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcud_vector_new (size_t size)
+{
+    SIZE_T  fp;
+    FRAMEPOINTER(fp);
+
+    return mfcd_new<mfcuddll, mfcud_vector_new_ordinal>(fp, size);
+}
+
+// mfcd_new_dbg - A generic function for implementing patch functions to the MFC
+//   debug new operators:
+//   void* __cdecl operator new[](size_t size, int type, char const *file, int line)
+//   void* __cdecl operator new(size_t size, int type, char const *file, int line)
+//
+//  - mfcdll (IN): The name of the MFC DLL
+//
+//  - ordinal (IN): The debug new operator's ordinal value
+//
+//  - type (IN): The "use type" of the block to be allocated.
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug new operator.
+//
+TEMPLATE_HEADER
+template<wchar_t const *mfcdll, int ordinal>
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_new_dbg (SIZE_T      fp,
+                                                size_t      size,
+                                                int         type,
+                                                char const *file,
+                                                int         line)
+{
+    static new_dbg_crt_t pmfcxxd__new_dbg = NULL;
+
+    HMODULE mfcxxd;
+
+    if (pmfcxxd__new_dbg == NULL) {
+        // This is the first call to this function. Link to the real MFC debug
+        // new operator.
+        mfcxxd = GetModuleHandle(mfcdll);
+        pmfcxxd__new_dbg = (new_dbg_crt_t)GetProcAddress(mfcxxd, (LPCSTR)ordinal);
+    }
+
+    return vld.new_dbg_mfc(pmfcxxd__new_dbg, fp, size, type, file, line);
+}
+
+// mfcd_new_dbg - A generic function for implementing patch functions to the MFC
+//   debug new operators:
+//   void* __cdecl operator new[](size_t size, char const *file, int line)
+//   void* __cdecl operator new(size_t size, char const *file, int line)
+//
+//  - mfcdll (IN): The name of the MFC DLL
+//
+//  - ordinal (IN): The debug new operator's ordinal value
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  - file (IN): The name of the file from which this function is being called.
+//
+//  - line (IN): The line number, in the above file, at which this function is
+//      being called.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC debug new operator.
+//
+TEMPLATE_HEADER
+template<wchar_t const *mfcdll, int ordinal>
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_new_dbg (SIZE_T      fp,
+                                                size_t      size,
+                                                char const *file,
+                                                int         line)
+{
+    static new_dbg_mfc_t pmfcxxd__new_dbg = NULL;
+
+    HMODULE mfcxxd;
+
+    if (pmfcxxd__new_dbg == NULL) {
+        // This is the first call to this function. Link to the real MFC debug
+        // new operator.
+        mfcxxd = GetModuleHandle(mfcdll);
+        pmfcxxd__new_dbg = (new_dbg_mfc_t)GetProcAddress(mfcxxd, (LPCSTR)ordinal);
+    }
+
+    return vld.new_dbg_mfc(pmfcxxd__new_dbg, fp, size, file, line);
+}
+
+// mfcd_new - A generic function for implementing patch functions to the MFC new
+//   operators.
+//
+//  - mfcdll (IN): The name of the MFC DLL
+//
+//  - ordinal (IN): The new operator's ordinal value
+//
+//  - size (IN): The size, in bytes, of the memory block to be allocated.
+//
+//  Return Value:
+//
+//    Returns the value returned by the MFC new operator.
+//
+TEMPLATE_HEADER
+template<wchar_t const *mfcdll, int ordinal>
+void* CrtMfcPatch<TEMPLATE_ARGS>::mfcd_new (SIZE_T fp, size_t size)
+{
+    static new_t pmfcxxd_new = NULL;
+
+    HMODULE mfcxxd;
+
+    if (pmfcxxd_new == NULL) {
+        // This is the first call to this function. Link to the real CRT new
+        // operator.
+        mfcxxd = GetModuleHandle(mfcdll);
+        pmfcxxd_new = (new_t)GetProcAddress(mfcxxd, (LPCSTR)ordinal);
+    }
+
+    return vld._new(pmfcxxd_new, fp, size);
+}
+
+#undef TEMPLATE_HEADER
+#undef TEMPLATE_ARGS
+
+const extern char    scalar_new_dbg_name[] = "??2@YAPAXIHPBDH@Z";
+const extern char    vector_new_dbg_name[] = "??_U@YAPAXIHPBDH@Z";
+const extern char    scalar_new_name[] = "??2@YAPAXI@Z";
+const extern char    vector_new_name[] = "??_U@YAPAXI@Z";
+const extern wchar_t msvcrtd_dll[]  = L"msvcrtd.dll";
+const extern wchar_t mfc42d_dll[]   = L"mfc42d.dll";
+const extern wchar_t mfc42ud_dll[]  = L"mfc42ud.dll";
+const extern wchar_t msvcr70d_dll[] = L"msvcr70d.dll";
+const extern wchar_t mfc70d_dll[]   = L"mfc70d.dll";
+const extern wchar_t mfc70ud_dll[]  = L"mfc70ud.dll";
+const extern wchar_t msvcr71d_dll[] = L"msvcr71d.dll";
+const extern wchar_t mfc71d_dll[]   = L"mfc71d.dll";
+const extern wchar_t mfc71ud_dll[]  = L"mfc71ud.dll";
+const extern wchar_t msvcr80d_dll[] = L"msvcr80d.dll";
+const extern wchar_t mfc80d_dll[]   = L"mfc80d.dll";
+const extern wchar_t mfc80ud_dll[]  = L"mfc80ud.dll";
+const extern wchar_t msvcr90d_dll[] = L"msvcr90d.dll";
+const extern wchar_t mfc90d_dll[]   = L"mfc90d.dll";
+const extern wchar_t mfc90ud_dll[]  = L"mfc90ud.dll";
+const extern wchar_t msvcr100d_dll[] = L"msvcr100d.dll";
+const extern wchar_t mfc100d_dll[]   = L"mfc100d.dll";
+const extern wchar_t mfc100ud_dll[]  = L"mfc100ud.dll";
+
+// Visual Studio 6.0
+typedef CrtMfcPatch<msvcrtd_dll, mfc42d_dll, mfc42ud_dll,
+                    vector_new_name, vector_new_dbg_name,
+                    scalar_new_name, scalar_new_dbg_name,
+                    0, 0, 0, 711, 712, 714,
+                    0, 0, 0, 711, 712, 714>
+        VS60;
+// Visual Studio .NET 2002
+typedef CrtMfcPatch<msvcr70d_dll, mfc70d_dll, mfc70ud_dll,
+                    vector_new_name, vector_new_dbg_name,
+                    scalar_new_name, scalar_new_dbg_name,
+                    257, 258, 259, 832, 833, 834,
+                    258, 259, 260, 833, 834, 835>
+        VS70;
+// Visual Studio .NET 2003
+typedef CrtMfcPatch<msvcr71d_dll, mfc71d_dll, mfc71ud_dll,
+                    vector_new_name, vector_new_dbg_name,
+                    scalar_new_name, scalar_new_dbg_name,
+                    267, 268, 269, 893, 894, 895,
+                    267, 268, 269, 893, 894, 895>
+        VS71;
+// Visual Studio 2005
+typedef CrtMfcPatch<msvcr80d_dll, mfc80d_dll, mfc80ud_dll,
+                    vector_new_name, vector_new_dbg_name,
+                    scalar_new_name, scalar_new_dbg_name,
+                    267, 268, 269, 893, 894, 895,
+                    267, 268, 269, 893, 894, 895>
+        VS80;
+// Visual Studio 2008
+typedef CrtMfcPatch<msvcr90d_dll, mfc90d_dll, mfc90ud_dll,
+                    vector_new_name, vector_new_dbg_name,
+                    scalar_new_name, scalar_new_dbg_name,
+                    267, 268, 269, 931, 932, 933,
+                    267, 268, 269, 935, 936, 937>
+        VS90;
+
+// Visual Studio 2010
+typedef CrtMfcPatch<msvcr100d_dll, mfc100d_dll, mfc100ud_dll,
+                    vector_new_name, vector_new_dbg_name,
+                                       scalar_new_name, scalar_new_dbg_name,
+                                       267, 268, 269, 1405, 1406, 1407,
+                                       267, 268, 269, 1412, 1413, 1414>
+        VS100;
index c6b72e6ec84f7ff09136617e38405369bd45cce1..c210abbbf800f4a8e7f9080e4479ca952c96fc42 100644 (file)
@@ -1,14 +1,14 @@
-//{{NO_DEPENDENCIES}}\r
-// Microsoft Visual C++ generated include file.\r
-// Used by vld.rc\r
-\r
-// Next default values for new objects\r
-// \r
-#ifdef APSTUDIO_INVOKED\r
-#ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NEXT_RESOURCE_VALUE        101\r
-#define _APS_NEXT_COMMAND_VALUE         40001\r
-#define _APS_NEXT_CONTROL_VALUE         1001\r
-#define _APS_NEXT_SYMED_VALUE           101\r
-#endif\r
-#endif\r
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by vld.rc
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
index 234c87f3ed7b2da097a45d8921b350f58e8ed980..27d7b142d4598551f037b5a599c7f0b07aa326fb 100644 (file)
@@ -1,97 +1,97 @@
-////////////////////////////////////////////////////////////////////////////////\r
-//\r
-//  Visual Leak Detector - Import Library Header\r
-//  Copyright (c) 2006 Dan Moulding\r
-//\r
-//  This library is free software; you can redistribute it and/or\r
-//  modify it under the terms of the GNU Lesser General Public\r
-//  License as published by the Free Software Foundation; either\r
-//  version 2.1 of the License, or (at your option) any later version.\r
-//\r
-//  This library is distributed in the hope that it will be useful,\r
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-//  Lesser General Public License for more details.\r
-//\r
-//  You should have received a copy of the GNU Lesser General Public\r
-//  License along with this library; if not, write to the Free Software\r
-//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
-//\r
-//  See COPYING.txt for the full terms of the GNU Lesser General Public License.\r
-//\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-#pragma once\r
-\r
-#ifdef _DEBUG\r
-\r
-#pragma comment(lib, "vld.lib")\r
-\r
-// Force a symbolic reference to the global VisualLeakDetector class object from\r
-// the DLL. This enusres that the DLL is loaded and linked with the program,\r
-// even if no code otherwise imports any of the DLL's exports.\r
-#pragma comment(linker, "/include:__imp_?vld@@3VVisualLeakDetector@@A")\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-//\r
-//  Visual Leak Detector APIs\r
-//\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif // __cplusplus\r
-\r
-// VLDDisable - Disables Visual Leak Detector's memory leak detection at\r
-//   runtime. If memory leak detection is already disabled, then calling this\r
-//   function has no effect.\r
-//\r
-//  Note: In multithreaded programs, this function operates on a per-thread\r
-//    basis. In other words, if you call this function from one thread, then\r
-//    memory leak detection is only disabled for that thread. If memory leak\r
-//    detection is enabled for other threads, then it will remain enabled for\r
-//    those other threads. It was designed to work this way to insulate you,\r
-//    the programmer, from having to ensure thread synchronization when calling\r
-//    VLDEnable() and VLDDisable(). Without this, calling these two functions\r
-//    unsychronized could result in unpredictable and unintended behavior.\r
-//    But this also means that if you want to disable memory leak detection\r
-//    process-wide, then you need to call this function from every thread in\r
-//    the process.\r
-//\r
-//  Return Value:\r
-//\r
-//    None.\r
-//\r
-__declspec(dllimport) void VLDDisable ();\r
-\r
-// VLDEnable - Enables Visual Leak Detector's memory leak detection at runtime.\r
-//   If memory leak detection is already enabled, which it is by default, then\r
-//   calling this function has no effect.\r
-//\r
-//  Note: In multithreaded programs, this function operates on a per-thread\r
-//    basis. In other words, if you call this function from one thread, then\r
-//    memory leak detection is only enabled for that thread. If memory leak\r
-//    detection is disabled for other threads, then it will remain disabled for\r
-//    those other threads. It was designed to work this way to insulate you,\r
-//    the programmer, from having to ensure thread synchronization when calling\r
-//    VLDEnable() and VLDDisable(). Without this, calling these two functions\r
-//    unsychronized could result in unpredictable and unintended behavior.\r
-//    But this also means that if you want to enable memory leak detection\r
-//    process-wide, then you need to call this function from every thread in\r
-//    the process.\r
-//\r
-//  Return Value:\r
-//\r
-//    None.\r
-//\r
-__declspec(dllimport) void VLDEnable ();\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif // __cplusplus\r
-\r
-#else // !_DEBUG\r
-\r
-#define VLDEnable()\r
-#define VLDDisable()\r
-\r
-#endif // _DEBUG\r
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Visual Leak Detector - Import Library Header
+//  Copyright (c) 2006 Dan Moulding
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+//  See COPYING.txt for the full terms of the GNU Lesser General Public License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#ifdef _DEBUG
+
+#pragma comment(lib, "vld.lib")
+
+// Force a symbolic reference to the global VisualLeakDetector class object from
+// the DLL. This enusres that the DLL is loaded and linked with the program,
+// even if no code otherwise imports any of the DLL's exports.
+#pragma comment(linker, "/include:__imp_?vld@@3VVisualLeakDetector@@A")
+
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Visual Leak Detector APIs
+//
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// VLDDisable - Disables Visual Leak Detector's memory leak detection at
+//   runtime. If memory leak detection is already disabled, then calling this
+//   function has no effect.
+//
+//  Note: In multithreaded programs, this function operates on a per-thread
+//    basis. In other words, if you call this function from one thread, then
+//    memory leak detection is only disabled for that thread. If memory leak
+//    detection is enabled for other threads, then it will remain enabled for
+//    those other threads. It was designed to work this way to insulate you,
+//    the programmer, from having to ensure thread synchronization when calling
+//    VLDEnable() and VLDDisable(). Without this, calling these two functions
+//    unsychronized could result in unpredictable and unintended behavior.
+//    But this also means that if you want to disable memory leak detection
+//    process-wide, then you need to call this function from every thread in
+//    the process.
+//
+//  Return Value:
+//
+//    None.
+//
+__declspec(dllimport) void VLDDisable ();
+
+// VLDEnable - Enables Visual Leak Detector's memory leak detection at runtime.
+//   If memory leak detection is already enabled, which it is by default, then
+//   calling this function has no effect.
+//
+//  Note: In multithreaded programs, this function operates on a per-thread
+//    basis. In other words, if you call this function from one thread, then
+//    memory leak detection is only enabled for that thread. If memory leak
+//    detection is disabled for other threads, then it will remain disabled for
+//    those other threads. It was designed to work this way to insulate you,
+//    the programmer, from having to ensure thread synchronization when calling
+//    VLDEnable() and VLDDisable(). Without this, calling these two functions
+//    unsychronized could result in unpredictable and unintended behavior.
+//    But this also means that if you want to enable memory leak detection
+//    process-wide, then you need to call this function from every thread in
+//    the process.
+//
+//  Return Value:
+//
+//    None.
+//
+__declspec(dllimport) void VLDEnable ();
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#else // !_DEBUG
+
+#define VLDEnable()
+#define VLDDisable()
+
+#endif // _DEBUG