Platform_Win32_Screen.cpp
Go to the documentation of this file.00001 //*** Platform_Win32_Screen.cpp *** 00002 00003 #include "Platform_Win32_Screen.h" 00004 #include "Platform_Win32_Screen_Technology.h" 00005 #include "Platform_Win32_Screen_D3D9.h" 00006 #include "Platform_Win32_Screen_DDraw.h" 00007 #include "Platform_Win32_Screen_GDI.h" 00008 #include "Platform_Win32_OS.h" 00009 #include "Platform_Time.h" 00010 00011 #define WIN32_LEAN_AND_MEAN 00012 #define VC_EXTRALEAN 00013 #include <string.h> 00014 #include <malloc.h> 00015 #include <stdio.h> 00016 00017 00018 //*** Constructor *** 00019 00020 Platform_Win32_Screen::Platform_Win32_Screen(Platform_Win32_OS* os): 00021 windowHandle_(os->GetWindowHandle()), 00022 technology_(Technology_Undefined), 00023 technologyInstance_(0), 00024 fullscreen_(true), 00025 fullscreenWidth_(0), 00026 fullscreenHeight_(0), 00027 showfps_(false), 00028 interpolationMode_(true), 00029 disableOnWmSize_(0), 00030 ignoreNextOnWmSize_(false), 00031 firstTimeInitializeCalled_(false), 00032 forceddraw_(false), 00033 forcegdi_(false) 00034 { 00035 Platform::RegisterEventListener(this); 00036 00037 // Check commandline flags 00038 if (os->GetCommandLineString()) 00039 { 00040 char* cmdline=strdup(os->GetCommandLineString()); 00041 char* token=strtok(cmdline," "); 00042 while (token) 00043 { 00044 if (stricmp(token,"-window")==0) 00045 { 00046 fullscreen_=false; 00047 } 00048 if (stricmp(token,"-showfps")==0) 00049 { 00050 showfps_=true; 00051 } 00052 if (stricmp(token,"-forceddraw")==0) 00053 { 00054 forceddraw_=true; 00055 } 00056 if (stricmp(token,"-forcegdi")==0) 00057 { 00058 forcegdi_=true; 00059 } 00060 00061 token=strtok(0," "); 00062 } 00063 free(cmdline); 00064 } 00065 00066 // Determine default screen size 00067 HWND desktopWindow=GetDesktopWindow(); 00068 RECT desktopRect; 00069 BOOL result=GetWindowRect(desktopWindow,&desktopRect); 00070 if (result) 00071 { 00072 fullscreenWidth_=desktopRect.right-desktopRect.left; 00073 fullscreenHeight_=desktopRect.bottom-desktopRect.top; 00074 00075 windowedWidth_=fullscreenWidth_-fullscreenWidth_/6; 00076 windowedHeight_=fullscreenHeight_-fullscreenHeight_/6; 00077 windowedX_=fullscreenWidth_-windowedWidth_; 00078 windowedY_=fullscreenHeight_-windowedHeight_; 00079 windowedX_/=2; 00080 windowedY_/=2; 00081 } 00082 00083 00084 00085 } 00086 00087 00088 //*** Destructor *** 00089 00090 Platform_Win32_Screen::~Platform_Win32_Screen() 00091 { 00092 disableOnWmSize_++; 00093 00094 if (technologyInstance_) 00095 { 00096 delete technologyInstance_; 00097 } 00098 00099 disableOnWmSize_--; 00100 00101 Platform::UnregisterEventListener(this); 00102 } 00103 00104 00105 //*** FirstTimeInitialize *** 00106 00107 void Platform_Win32_Screen::FirstTimeInitialize() 00108 { 00109 disableOnWmSize_++; 00110 00111 00112 // Initialize window size 00113 if (!GetFullscreen()) 00114 { 00115 SetWindowSize(); 00116 } 00117 00118 if (forceddraw_ || IsRunningOnWine()) 00119 { 00120 SetTechnology(Technology_DDraw); 00121 } 00122 else if (forcegdi_) 00123 { 00124 SetTechnology(Technology_GDI); 00125 } 00126 else 00127 { 00128 SetTechnology(Technology_D3D9); 00129 } 00130 00131 // Show window 00132 ShowWindow(windowHandle_,SW_SHOW); 00133 00134 disableOnWmSize_--; 00135 } 00136 00137 //*** Present *** 00138 00139 void Platform_Win32_Screen::Present(unsigned short* bitmapData, int bitmapWidth, int bitmapHeight, unsigned short modulate, unsigned short backgroundColor) 00140 { 00141 if (!firstTimeInitializeCalled_) 00142 { 00143 FirstTimeInitialize(); 00144 firstTimeInitializeCalled_=true; 00145 } 00146 00147 if (!technologyInstance_) 00148 { 00149 return; 00150 } 00151 00152 // Framerate counter 00153 if (showfps_ && Platform::GetPlatform_Time()) 00154 { 00155 00156 static float previousTime=Platform::GetPlatform_Time()->GetTime(); 00157 static float accumulatedTime=0; 00158 static int currentFrameCount=0; 00159 static int frames=0; 00160 float newTime=Platform::GetPlatform_Time()->GetTime(); 00161 float deltaTime=newTime-previousTime; 00162 accumulatedTime+=deltaTime; 00163 frames++; 00164 if (accumulatedTime>=1) 00165 { 00166 accumulatedTime-=1; 00167 currentFrameCount=frames; 00168 frames=0; 00169 } 00170 previousTime=newTime; 00171 static char fps[20]; 00172 _snprintf(fps,20,"%02d",currentFrameCount); 00173 unsigned short color=0xffff; // White 00174 if (technology_==Technology_DDraw) 00175 { 00176 color=0xf81f; // Magenta 00177 } 00178 if (technology_==Technology_GDI) 00179 { 00180 color=0x07ff; // Cyan 00181 } 00182 DebugText(bitmapData,bitmapWidth,bitmapHeight,6,6,fps,0); 00183 DebugText(bitmapData,bitmapWidth,bitmapHeight,5,5,fps,color); 00184 00185 } 00186 00187 00188 bool result=technologyInstance_->Present(bitmapData,bitmapWidth,bitmapHeight,modulate,backgroundColor); 00189 if (!result) 00190 { 00191 DowngradeTechnology(); 00192 Present(bitmapData,bitmapWidth,bitmapHeight,modulate,backgroundColor); 00193 } 00194 } 00195 00196 //*** SetTechnology *** 00197 00198 void Platform_Win32_Screen::SetTechnology(Platform_Win32_Screen::Technology technology) 00199 { 00200 disableOnWmSize_++; 00201 00202 if (technologyInstance_) 00203 { 00204 delete technologyInstance_; 00205 technologyInstance_=0; 00206 } 00207 00208 technology_=technology; 00209 00210 if (technology_>=Technology_Undefined) 00211 { 00212 return; 00213 } 00214 00215 switch(technology_) 00216 { 00217 case Technology_D3D9: 00218 { 00219 technologyInstance_=new Platform_Win32_Screen_D3D9(windowHandle_, GetFullscreen(), GetWidth(), GetHeight(), GetInterpolationMode()); 00220 } break; 00221 00222 case Technology_DDraw: 00223 { 00224 technologyInstance_=new Platform_Win32_Screen_DDraw(windowHandle_, GetFullscreen(), GetWidth(), GetHeight()); 00225 technologyInstance_->SetInterpolationMode(GetInterpolationMode()); 00226 } break; 00227 00228 case Technology_GDI: 00229 { 00230 technologyInstance_=new Platform_Win32_Screen_GDI(windowHandle_, GetFullscreen(), GetWidth(), GetHeight()); 00231 technologyInstance_->SetInterpolationMode(GetInterpolationMode()); 00232 } break; 00233 } 00234 00235 if (!technologyInstance_->Setup()) 00236 { 00237 DowngradeTechnology(); 00238 } 00239 00240 disableOnWmSize_--; 00241 } 00242 00243 00244 //*** DowngradeTechnology *** 00245 00246 void Platform_Win32_Screen::DowngradeTechnology() 00247 { 00248 disableOnWmSize_++; 00249 00250 Platform::GetPlatform_OS()->OutputDebugText("Method failed for technology %d, falling back on technology %d\n",technology_,technology_+1); 00251 00252 if (technologyInstance_) 00253 { 00254 delete technologyInstance_; 00255 technologyInstance_=0; 00256 } 00257 00258 Technology newTechnology=(Technology)(technology_+1); 00259 00260 if (newTechnology<Technology_Undefined) 00261 { 00262 SetTechnology(newTechnology); 00263 disableOnWmSize_--; 00264 return; 00265 } 00266 00267 technology_=Technology_Undefined; 00268 technologyInstance_=0; 00269 00270 disableOnWmSize_--; 00271 } 00272 00273 00274 //*** SetInterpolationMode *** 00275 00276 void Platform_Win32_Screen::SetInterpolationMode(bool enabled) 00277 { 00278 if (interpolationMode_==enabled) 00279 { 00280 return; 00281 } 00282 00283 interpolationMode_=enabled; 00284 00285 if (technologyInstance_) 00286 { 00287 technologyInstance_->SetInterpolationMode(interpolationMode_); 00288 } 00289 } 00290 00291 00292 //*** GetInterpolationMode *** 00293 00294 bool Platform_Win32_Screen::GetInterpolationMode() 00295 { 00296 return interpolationMode_; 00297 } 00298 00299 00300 //*** SetFullscreen *** 00301 00302 void Platform_Win32_Screen::SetFullscreen(bool fullscreen) 00303 { 00304 if (fullscreen_==fullscreen) 00305 { 00306 return; 00307 } 00308 00309 fullscreen_=fullscreen; 00310 00311 if (technologyInstance_) 00312 { 00313 disableOnWmSize_++; 00314 00315 delete technologyInstance_; 00316 technologyInstance_=0; 00317 00318 if (!GetFullscreen()) 00319 { 00320 SetWindowSize(); 00321 } 00322 00323 SetTechnology(technology_); 00324 00325 if (technology_==Technology_DDraw && !GetFullscreen()) 00326 { 00327 SetWindowSize(); 00328 } 00329 00330 disableOnWmSize_--; 00331 } 00332 } 00333 00334 00335 //*** GetFullscreen *** 00336 00337 bool Platform_Win32_Screen::GetFullscreen() 00338 { 00339 return fullscreen_; 00340 } 00341 00342 00343 //*** SetSize *** 00344 00345 void Platform_Win32_Screen::SetSize(int width, int height) 00346 { 00347 windowedWidth_=width; 00348 windowedHeight_=height; 00349 00350 if (technologyInstance_) 00351 { 00352 disableOnWmSize_++; 00353 00354 delete technologyInstance_; 00355 technologyInstance_=0; 00356 00357 if (!GetFullscreen()) 00358 { 00359 SetWindowSize(); 00360 } 00361 00362 SetTechnology(technology_); 00363 00364 disableOnWmSize_--; 00365 00366 } 00367 00368 } 00369 00370 00371 //*** GetWidth *** 00372 00373 int Platform_Win32_Screen::GetWidth() 00374 { 00375 if (fullscreen_) 00376 { 00377 return fullscreenWidth_; 00378 } 00379 00380 return windowedWidth_; 00381 } 00382 00383 00384 //*** GetHeight *** 00385 00386 int Platform_Win32_Screen::GetHeight() 00387 { 00388 if (fullscreen_) 00389 { 00390 return fullscreenHeight_; 00391 } 00392 00393 return windowedHeight_; 00394 } 00395 00396 00397 //*** TransformCursorCoordinates *** 00398 00399 void Platform_Win32_Screen::TransformCursorCoordinates(float& x, float& y) 00400 { 00401 if (technologyInstance_) 00402 { 00403 technologyInstance_->TransformCursorCoordinates(x,y); 00404 } 00405 } 00406 00407 00408 //*** OnCustomEvent *** 00409 00410 void Platform_Win32_Screen::OnCustomEvent(const char* eventId, void* userData) 00411 { 00412 if (stricmp(eventId,"OnGainFocus")==0) 00413 { 00414 OnGainFocus(); 00415 return; 00416 } 00417 00418 if (stricmp(eventId,"OnLoseFocus")==0) 00419 { 00420 OnLoseFocus(); 00421 return; 00422 } 00423 00424 if (stricmp(eventId,"OnRestore")==0) 00425 { 00426 OnRestore(); 00427 return; 00428 } 00429 00430 if (stricmp(eventId,"OnMinimize")==0) 00431 { 00432 OnMinimize(); 00433 return; 00434 } 00435 00436 if (stricmp(eventId,"OnWmSize")==0) 00437 { 00438 int width=*(static_cast<int*>(userData)); 00439 int height=*((static_cast<int*>(userData))+1); 00440 OnWmSize(width,height); 00441 return; 00442 } 00443 } 00444 00445 00446 //*** OnRestore *** 00447 00448 void Platform_Win32_Screen::OnRestore() 00449 { 00450 ignoreNextOnWmSize_=true; 00451 } 00452 00453 00454 //*** OnWmSize *** 00455 00456 void Platform_Win32_Screen::OnWmSize(int width, int height) 00457 { 00458 if (disableOnWmSize_ || fullscreen_ || ignoreNextOnWmSize_) 00459 { 00460 Platform::GetPlatform_OS()->OutputDebugText("OnWmSize(%d,%d) - DISABLED\n",width,height); 00461 ignoreNextOnWmSize_=false; 00462 return; 00463 } 00464 00465 disableOnWmSize_++; 00466 00467 Platform::GetPlatform_OS()->OutputDebugText("OnWmSize(%d,%d) fullscreen_=%d\n",width,height,fullscreen_); 00468 00469 if (technology_==Technology_DDraw && !technologyInstance_) 00470 { 00471 SetTechnology(technology_); 00472 } 00473 00474 windowedWidth_=width; 00475 windowedHeight_=height; 00476 00477 if (!fullscreen_ && technologyInstance_) 00478 { 00479 delete technologyInstance_; 00480 technologyInstance_=0; 00481 00482 SetTechnology(technology_); 00483 } 00484 00485 disableOnWmSize_--; 00486 } 00487 00488 00489 00490 //*** OnMinimize *** 00491 00492 void Platform_Win32_Screen::OnMinimize() 00493 { 00494 /* DebugPrint(("OnMinimize\n")); 00495 if (technologyInstance_) 00496 { 00497 delete technologyInstance_; 00498 technologyInstance_=0; 00499 } 00500 */ } 00501 00502 00503 //*** OnLoseFocus *** 00504 00505 void Platform_Win32_Screen::OnLoseFocus() 00506 { 00507 disableOnWmSize_++; 00508 00509 if (fullscreen_ && technologyInstance_) 00510 { 00511 disableOnWmSize_++; 00512 Platform::GetPlatform_OS()->OutputDebugText("OnLoseFocus\n"); 00513 delete technologyInstance_; 00514 technologyInstance_=0; 00515 disableOnWmSize_--; 00516 } 00517 } 00518 00519 00520 //*** OnGainFocus *** 00521 00522 void Platform_Win32_Screen::OnGainFocus() 00523 { 00524 if (fullscreen_ && !technologyInstance_) 00525 { 00526 disableOnWmSize_++; 00527 Platform::GetPlatform_OS()->OutputDebugText("OnGainFocus\n"); 00528 SetTechnology(technology_); 00529 disableOnWmSize_--; 00530 } 00531 00532 disableOnWmSize_--; 00533 } 00534 00535 00536 //*** SetWindowSize *** 00537 00538 void Platform_Win32_Screen::SetWindowSize() 00539 { 00540 Platform::GetPlatform_OS()->OutputDebugText("SetWindowSize\n"); 00541 00542 // Get the whole window area 00543 RECT rect1; 00544 BOOL ret=GetWindowRect(windowHandle_,&rect1); 00545 rect1.right-=rect1.left; 00546 rect1.bottom-=rect1.top; 00547 00548 // Get the client area 00549 RECT rect2; 00550 ret=GetClientRect(windowHandle_,&rect2); 00551 rect2.right-=rect2.left; 00552 rect2.bottom-=rect2.top; 00553 00554 // Calculate the size of the windows borders/title bar etc. 00555 int sx=rect1.right-rect2.right; 00556 int sy=rect1.bottom-rect2.bottom; 00557 00558 // Set the window to the required dimensions 00559 MoveWindow(windowHandle_,windowedX_,windowedY_,windowedWidth_+sx,windowedHeight_+sy,TRUE); 00560 } 00561 00562 00563 //*** IsRunningOnWine *** 00564 00565 bool Platform_Win32_Screen::IsRunningOnWine() 00566 { 00567 HMODULE module=LoadLibrary("ntdll"); 00568 if (!module) 00569 { 00570 return false; 00571 } 00572 00573 FARPROC proc=GetProcAddress(module, "wine_get_unix_file_name"); 00574 FreeLibrary(module); 00575 00576 return proc!=0; 00577 } 00578 00579 00580 //*** DebugText *** 00581 00582 void Platform_Win32_Screen::DebugText(unsigned short* colorData, int hPitch, int vPitch, int x, int y, const char* text, unsigned short color) 00583 { 00584 // Draw text 00585 int xp=x; 00586 for (unsigned int i=0; i<strlen(text); i++) 00587 { 00588 char c=text[i]; 00589 if (c>=32 && c<=192) 00590 { 00591 c-=32; 00592 00593 // Source coordinates 00594 int sx=((c%14)*9); 00595 int sy=((c/14)*16); 00596 00597 // Destination coordinates 00598 int dx=xp; 00599 int dy=y; 00600 00601 // Render 00602 BlitCharacter(colorData,hPitch,vPitch,sx,sy,dx,dy,color); 00603 00604 // Increase draw position 00605 xp=xp+8; 00606 } 00607 } 00608 } 00609 00610 00611 //*** BlitCharacter *** 00612 00613 void Platform_Win32_Screen::BlitCharacter(unsigned short* colorData, int hPitch, int vPitch, int sx, int sy, int dx, int dy, unsigned short color) 00614 { 00615 for (int y=0; y<16; y++) 00616 { 00617 for (int x=0; x<8; x++) 00618 { 00619 int u=(sx+x)/32; 00620 int l=(sx+x)-u*32; 00621 unsigned int h=DebugFontData[u+(sy+y)*4]; 00622 if (h & (1<<l)) 00623 { 00624 int xp=dx+x; 00625 int yp=dy+y; 00626 if (xp>=0 && xp<hPitch && yp>=0 && yp<vPitch) 00627 { 00628 colorData[xp+yp*hPitch]=color; 00629 } 00630 } 00631 } 00632 } 00633 } 00634 00635 //*** DebugFontData *** 00636 00637 unsigned int Platform_Win32_Screen::DebugFontData[] = 00638 { 00639 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000180,0x00000000,0x00000000,0x00000000,0x0001c180,0x00000000,0x00000000,0x61983000,0x070363c3,0x0018300c,0x00000000, 00640 0x61987800,0x0d8b6663,0x0030180c,0x00000000,0xf1987800,0x0d8dc067,0xb030180c,0x000000c1,0x60007800,0x070600c3,0xe0600c00,0x000000c0,0x60003000,0x01830183,0xf8600c00,0x0fc003f3, 00641 0x60003000,0x3d818303,0xe0600c00,0x000000c0,0xf0000000,0x198ec607,0xb0600c00,0x000000c1,0x60003000,0x199b4663,0x00600c00,0x00038000,0x60003000,0x371b03c3,0x00301800,0x00038000, 00642 0x00000000,0x000e0180,0x00301800,0x00030000,0x00000000,0x00000180,0x00183000,0x00018000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00643 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x81e0c000,0x030783c1,0xf0fc383f,0x000001e0, 00644 0xc330c000,0x030cc661,0x98c01803,0x00000331,0xf3b06000,0x1b0cc661,0x98600c03,0x07038331,0x83b06000,0x1b0c0601,0xb8603e03,0x07038331,0x83303000,0x1b070301,0xf030661f,0x00000330, 00645 0x83703000,0x198c0181,0xd8306630,0x000003e1,0x83701800,0x3f8cc0c1,0x98186630,0x00000181,0x83301838,0x180cc061,0x98186618,0x070380c1,0x81e00c38,0x180787e1,0xf0183c0f,0x070380e0, 00646 0x00000c00,0x00000000,0x00000000,0x06000000,0x00000000,0x00000000,0x00000000,0x03000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00647 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xe0180060,0x0f8307e1,0xf8fc1e1e,0x078661e1, 00648 0x30300030,0x19878c33,0x180c3633,0x03066330,0x30600018,0x198ccc33,0x180c6633,0x03066330,0x80c0fc0c,0x198ccf31,0x180c6603,0x03066030,0xc1800006,0x0f8ccdb0,0xf87c6603,0x0307e030, 00649 0xc0c0fc0c,0x198fcdb0,0x180c6603,0x030663b0,0x00600018,0x198ccf30,0x180c6633,0x03066330,0xc0300030,0x198cc030,0x180c3633,0x03066330,0xc0180060,0x0f8ccfe0,0x18fc1e1e,0x078663e0, 00650 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00651 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x3018cc60,0x0f878c66,0xf8783e1e,0x18c66331, 00652 0x3018cc60,0x198ccc66,0x60cc6633,0x18c66330,0x70186c60,0x198ccce7,0x600c6633,0x18c66330,0xb0186c60,0x198ccde6,0x60186633,0x1ac66330,0xb0183c60,0x0f8ccf66,0x60303e33,0x1ac66330, 00653 0xb0186c60,0x018cce66,0x60603633,0x1ac66330,0x30186c66,0x018ccc66,0x60c06633,0x0d866330,0x3018cc66,0x018ccc66,0x60cc6633,0x0d83c330,0x31f8cc3c,0x01878c66,0x6078661e,0x0d8181e0, 00654 0x00000000,0x00000000,0x00000018,0x00000000,0x00000000,0x00000000,0x00000030,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00655 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x06000000,0x00001c00,0x00000000,0x00000000,0x0f000000,0x00001800,0x00000000,0xe1f8cc66,0x19878061,0x18003000,0x00060000, 00656 0x6180cc66,0x00060060,0x18000000,0x00060000,0x6180cc2c,0x000600c0,0xf8780000,0x0787c1e0,0x60c0cc18,0x000600c0,0x98c00000,0x0cc66331,0x60607818,0x00060180,0x98c00000,0x0cc66031, 00657 0x60303034,0x00060180,0x98f80000,0x0fc66031,0x60183066,0x00060300,0x98cc0000,0x00c66031,0x60183066,0x00060300,0x98cc0000,0x00c66331,0x61f83066,0x00060600,0xf8f80000,0x0787c1e0, 00658 0x60000000,0x00060600,0x00000000,0x00000000,0x60000000,0x00060000,0x00000000,0x00000000,0xe0000000,0x80078001,0x0000007f,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00659 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xc0000000,0x00000300,0x00000000,0x00000000,0xc0180078,0x0780c300,0x00000000,0x00000000, 00660 0x0018000c,0x0600c000,0x00000000,0x00000000,0xf0f8f80c,0x060cc3c0,0xf8783e3f,0x0f8663e0,0xc198cc0c,0x060cc300,0x98cc666b,0x00c76331,0xc198cc7e,0x0606c300,0x98cc666b,0x00c0e331, 00661 0xc198cc0c,0x0603c300,0x98cc666b,0x07806331,0xc198cc0c,0x0606c300,0x98cc666b,0x0c006331,0xc198cc0c,0x060cc300,0x98cc666b,0x0c006331,0xf198f80c,0x1f8cc303,0xf8786663,0x07c063e0, 00662 0x0000c000,0x00000300,0x18000000,0x00000300,0x0000c000,0x00000300,0x18000000,0x00000300,0x00007c00,0x000001e0,0x18000000,0x00000300,0x00000000,0x00000000,0x00000000,0x00000000, 00663 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0000000c,0x00000000,0x38181818,0x000003f2, 00664 0x0000000c,0x00000000,0x6c30180c,0x000003f3,0x3198cc7e,0x1f8cc666,0xc430180c,0x000003f1,0xb198cc0c,0x180cc666,0x0030180c,0x000003f0,0xb198cc0c,0x0c0cc3c6,0x00601806,0x000003f0, 00665 0xb198cc0c,0x060cc186,0x00c01803,0x000003f0,0xb198cc0c,0x030cc3c6,0x00601806,0x000003f0,0x60f0cc0c,0x018cc663,0x0030180c,0x000003f0,0x6060f878,0x1f878663,0x0030180c,0x000003f0, 00666 0x00000000,0x00060000,0x0030180c,0x00000000,0x00000000,0x00030000,0x00181818,0x00000000,0x00000000,0x0001e000,0x00001800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00667 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00668 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00669 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 00670 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 00671 };
Reproduction/republishing of any material on this site without permission is strictly prohibited.
