[Scummvm-cvs-logs] SF.net SVN: scummvm:[42576] scummvm/branches/gsoc2009-16bit

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Sat Jul 18 02:53:32 CEST 2009


Revision: 42576
          http://scummvm.svn.sourceforge.net/scummvm/?rev=42576&view=rev
Author:   Kirben
Date:     2009-07-18 00:53:31 +0000 (Sat, 18 Jul 2009)

Log Message:
-----------
Merged revisions 42463,42468-42484,42486-42488,42490-42495,42498-42507,42510-42513,42516-42518,42521-42525,42527-42531,42533,42536-42540,42543,42545,42548,42551-42552,42558-42561,42563-42565,42570,42572 via svnmerge from 
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk

........
  r42463 | drmccoy | 2009-07-14 09:42:37 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Allow resource loading from EXT even if the TOT has none again
........
  r42468 | fingolfin | 2009-07-14 18:36:06 +1000 (Tue, 14 Jul 2009) | 1 line
  
  TINSEL: Don't use ioFailed to check if a file was opened succesfuly
........
  r42469 | drmccoy | 2009-07-14 18:57:55 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Removing ioFailed() usage and fixing a leak in case of error
........
  r42470 | joostp | 2009-07-14 19:44:56 +1000 (Tue, 14 Jul 2009) | 2 lines
  
  commit peres' patch for #2813472: BASS: "showgrid" enabled triggers an assert 
........
  r42471 | dreammaster | 2009-07-14 20:26:56 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Bugfix for player being able to walk through some objects against room walls
........
  r42472 | dreammaster | 2009-07-14 20:55:51 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Bugfix to cursor updates - it previously required that both X and Y positions had changed before a cursor change could occur
........
  r42473 | joostp | 2009-07-14 21:15:21 +1000 (Tue, 14 Jul 2009) | 2 lines
  
  add workaround for #2687172: BASS: Occasional loss of speech
........
  r42474 | Kirben | 2009-07-14 22:34:42 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Add workaround for bug #1538873 - SIMON1 (French): Text wrongly displayed.
........
  r42475 | vinterstum | 2009-07-14 22:55:54 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Updated xcode project
........
  r42476 | strangerke | 2009-07-14 23:25:38 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Add detection for Playtoons CK 3 (FR)
........
  r42477 | buddha_ | 2009-07-14 23:48:31 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Fix some typos and grammar in sword1's Sound::checkSpeechFileEndianness-function's comments.
........
  r42478 | Kirben | 2009-07-14 23:50:17 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Change key combination to dump all script, due to conflict.
........
  r42479 | vinterstum | 2009-07-14 23:52:11 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Split the iPhone OSystem class up into several files
........
  r42480 | Kirben | 2009-07-14 23:53:54 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Update workaround for bug #1538873, which effects the Polish version of Simon the Sorcerer 2 too.
........
  r42481 | Kirben | 2009-07-14 23:55:10 +1000 (Tue, 14 Jul 2009) | 1 line
  
  Remove last ioFailed() usage in AGOS game engine.
........
  r42482 | buddha_ | 2009-07-15 01:02:17 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Partially fix automatic restarting of AGI games (Addresses bug #2798797 ('AGI: larry 1 doesn't restart after dying') but doesn't fully fix it. There seems to be more to the problem still. Automatic restarting after dying of an STD doesn't take away the STD-condition and Larry continues to die in a loop).
........
  r42483 | strangerke | 2009-07-15 01:48:05 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Add detection for Playtoons 4 EN_ANY as supplied by goodoldgeorg in bug #2820006
........
  r42484 | eriktorbjorn | 2009-07-15 02:45:18 +1000 (Wed, 15 Jul 2009) | 3 lines
  
  Got rid of ioFailed(). I haven't actually tested it, but we don't use the MPEG
  decoder at the moment, and it was only used in the BACKEND_8BIT case anyway.
........
  r42486 | lordhoto | 2009-07-15 04:14:20 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Got rid of ioFailed in font code, also added another check for err() when loading bdf fonts from text files.
........
  r42487 | lordhoto | 2009-07-15 04:15:07 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Fix possible memory leak.
........
  r42488 | fingolfin | 2009-07-15 04:24:20 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Got rid of some more ioFailed uses (also fixed a potential leak in graphics/font.cpp, and handle eos correctly in the FLAC code)
........
  r42490 | lordhoto | 2009-07-15 05:32:25 +1000 (Wed, 15 Jul 2009) | 2 lines
  
  Replaced char usage by int8, since char is unsigned on Linux/PPC by default.
........
  r42491 | fingolfin | 2009-07-15 07:46:23 +1000 (Wed, 15 Jul 2009) | 1 line
  
  AGOS: Cleanup PN code a bit, trying to make sense out of it
........
  r42492 | fingolfin | 2009-07-15 07:50:22 +1000 (Wed, 15 Jul 2009) | 1 line
  
  AGOS: Fixed potential OOBA crash in AGOSEngine_PN::opn_opcode26
........
  r42493 | lordhoto | 2009-07-15 08:47:33 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Fix graphics glitch in LoL PC98 intro.
........
  r42494 | fingolfin | 2009-07-15 09:03:25 +1000 (Wed, 15 Jul 2009) | 1 line
  
  AGOS: Some more cleanup and added some comments to the PN code
........
  r42495 | buddha_ | 2009-07-15 09:03:40 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Remove ioFailed() usage from AGI engine.
........
  r42498 | Kirben | 2009-07-15 12:06:26 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Fix bug #2821215 - DIG: Skipping planetarium animation disables F5 menu.
........
  r42499 | Kirben | 2009-07-15 15:00:59 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Hack is no longer required, due to revision 42498.
........
  r42500 | dreammaster | 2009-07-15 18:55:12 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Created a system for inserting arbitrary code fragments into game scripts, and added an initial fragment to fix the bug of being stuck in the past in the DW1 SCN version
........
  r42501 | fingolfin | 2009-07-15 20:04:50 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Got rid of two more ioFailed uses
........
  r42502 | buddha_ | 2009-07-15 23:04:17 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Remove ioFailed() usage from Cine engine.
........
  r42503 | buddha_ | 2009-07-15 23:10:29 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Fix some typos in TransactionError-enumeration's comments.
........
  r42504 | Kirben | 2009-07-15 23:19:49 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Fix recent PN regression in vc32_saveScreen().
........
  r42505 | Kirben | 2009-07-15 23:53:18 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Add Discworld 1/2.
........
  r42506 | Kirben | 2009-07-15 23:58:23 +1000 (Wed, 15 Jul 2009) | 1 line
  
  Add Cruise for a Corpse and games from MADE engine.
........
  r42507 | lordhoto | 2009-07-16 01:51:47 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Bugfix: Disallow GMM Save/Load while in kyragem scene.
........
  r42510 | lordhoto | 2009-07-16 03:07:45 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Fix "search" filter being settings lost in launcher, when using the "Edit Game..." menu for example.
........
  r42511 | lordhoto | 2009-07-16 03:23:27 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Fix bug, which caused the ListWidget to draw a widget background around the selected item, when the ListWidget had no focus.
........
  r42512 | lordhoto | 2009-07-16 04:05:37 +1000 (Thu, 16 Jul 2009) | 1 line
  
  For a smoother user experience, use different colors for inverted text of the ListWidget, depending on whether the widget has focus or not.
........
  r42513 | lordhoto | 2009-07-16 04:08:54 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Fix formatting of some switch statements.
........
  r42516 | robinwatts | 2009-07-16 06:51:31 +1000 (Thu, 16 Jul 2009) | 4 lines
  
  New ARM code blending Smartphone landscale scaler for WinCE port. Seems to work
  in my mockup - I don't have a smartphone resolution device to test it.
........
  r42517 | lordhoto | 2009-07-16 08:19:16 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Fix ugly spacing between tabs in classic theme (as reported by sunmax on -devel).
........
  r42518 | lordhoto | 2009-07-16 08:19:31 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Slightly brighten up the active tab color in the modern theme.
........
  r42521 | dreammaster | 2009-07-16 12:27:26 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Game script fix for bug #2525010 - in the GRA version, the luggage blocked Rincewind's exit from the Inn, leaving him in a non-walkable area
........
  r42522 | dreammaster | 2009-07-16 14:06:35 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Added no blocking fix for Present Outside Inn scene as well
........
  r42523 | thebluegr | 2009-07-16 18:13:08 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Added a detection entry for Pepper's Adventures in Time, and fixed an issue with _gfxop_set_pic(), which was causing crashes in that game
........
  r42524 | thebluegr | 2009-07-16 18:17:38 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Added the French version of KQ5 floppy (bug report #2812611)
........
  r42525 | thebluegr | 2009-07-16 18:21:06 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Added missing information for the newly-added version of Pepper
........
  r42527 | dreammaster | 2009-07-16 19:31:31 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Added game script fix for bug #2680397 - game hang when using the brochure on the Beekeeper
........
  r42528 | dreammaster | 2009-07-16 19:53:19 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Prior script fix also fixes bug #2820788, with stealing wizard's mallets
........
  r42529 | tanoku | 2009-07-16 21:37:36 +1000 (Thu, 16 Jul 2009) | 2 lines
  
  Fixed issue with beveled shapes being drawn outside their shapes. Possible regressions.
........
  r42530 | lordhoto | 2009-07-16 21:41:45 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Formatting.
........
  r42531 | lordhoto | 2009-07-16 21:42:07 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Update classic and builtin theme after r42529.
........
  r42533 | thebluegr | 2009-07-16 22:43:42 +1000 (Thu, 16 Jul 2009) | 1 line
  
  Added a proper fix for Pepper (the previous one caused regressions in KQ6)
........
  r42536 | eriktorbjorn | 2009-07-17 03:26:44 +1000 (Fri, 17 Jul 2009) | 2 lines
  
  Fixed GCC warning.
........
  r42537 | tanoku | 2009-07-17 03:29:31 +1000 (Fri, 17 Jul 2009) | 2 lines
  
  Fixed bug 2820514 ("Help dialog causes crash")
........
  r42538 | lordhoto | 2009-07-17 03:39:16 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Formatting fixes.
........
  r42539 | lordhoto | 2009-07-17 03:44:05 +1000 (Fri, 17 Jul 2009) | 1 line
  
  This commit is just for DrMcCoy. (forgot to fix two usages of whitespaces instead of tabs for indentation -.-)
........
  r42540 | tanoku | 2009-07-17 03:51:12 +1000 (Fri, 17 Jul 2009) | 2 lines
  
  Fixed bug: In-game console doesn't stay centered when switching resolutions on the fly.
........
  r42543 | lordhoto | 2009-07-17 07:47:57 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Fix bug in "KyraEngine_v2::runSceneScript6", fixes text line Zanthia says, when picking up the spellbook page in the town.
........
  r42545 | Kirben | 2009-07-17 10:10:10 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Fix using subtitles only setting in The Dig.
........
  r42548 | Kirben | 2009-07-17 10:25:27 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Fix bug #2821986 - COMI: setting to 'subtitles only' does not disable speech.
........
  r42551 | drmccoy | 2009-07-17 10:55:42 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Added some more debug warnings when resources can't be loaded
........
  r42552 | drmccoy | 2009-07-17 10:55:56 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Making TOTResourceItem::size unsigned, fixing a graphics bug that crept in
........
  r42558 | dreammaster | 2009-07-17 15:10:24 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Added an explicit break out of the event processing loop for mouse buttons and/or key-presses - this should allow stylus-based systems to properly process 'mouse down' events before the 'mouse up' is processed
........
  r42559 | Kirben | 2009-07-17 16:26:37 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Fix input glitch regression, after pausing in PN.
........
  r42560 | Kirben | 2009-07-17 19:56:03 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Fix bug #2822956 - ELVIRA2: Crash at the beginning (regression).
........
  r42561 | Kirben | 2009-07-17 20:48:30 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Correct error in saveBackGround.
........
  r42563 | lordhoto | 2009-07-17 23:35:56 +1000 (Fri, 17 Jul 2009) | 1 line
  
  Replace LGPL header by GPL header.
........
  r42564 | lordhoto | 2009-07-17 23:50:59 +1000 (Fri, 17 Jul 2009) | 3 lines
  
  - Moved SoundAdlibPC definition to new header file sound_adlib.h
  - Made the future versions of sound.h GPL only
  - sound_adlib.h is dual licensed under GPL and LGPL (so AdPlug can still benefit from future changes)
........
  r42565 | lordhoto | 2009-07-18 00:05:22 +1000 (Sat, 18 Jul 2009) | 1 line
  
  Cleanup.
........
  r42570 | drmccoy | 2009-07-18 05:22:12 +1000 (Sat, 18 Jul 2009) | 1 line
  
  Adding a workaround for the vanishing Coh Cott bug (#1972466), which is actually an error in that video file
........
  r42572 | drmccoy | 2009-07-18 06:03:41 +1000 (Sat, 18 Jul 2009) | 1 line
  
  /Finally/ fixing the longstanding flicker bug in Woodruff. I was completely mistaken about its cause, too
........

Revision Links:
--------------
    http://scummvm.svn.sourceforge.net/scummvm/?rev=42498&view=rev

Modified Paths:
--------------
    scummvm/branches/gsoc2009-16bit/README
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/module.mk
    scummvm/branches/gsoc2009-16bit/backends/platform/wince/CEScaler.cpp
    scummvm/branches/gsoc2009-16bit/backends/platform/wince/Makefile
    scummvm/branches/gsoc2009-16bit/backends/platform/wince/wince-sdl.cpp
    scummvm/branches/gsoc2009-16bit/common/system.h
    scummvm/branches/gsoc2009-16bit/common/xmlparser.cpp
    scummvm/branches/gsoc2009-16bit/dists/iphone/scummvm.xcodeproj/project.pbxproj
    scummvm/branches/gsoc2009-16bit/engines/agi/graphics.cpp
    scummvm/branches/gsoc2009-16bit/engines/agi/op_cmd.cpp
    scummvm/branches/gsoc2009-16bit/engines/agi/sound.cpp
    scummvm/branches/gsoc2009-16bit/engines/agi/wagparser.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/agos.h
    scummvm/branches/gsoc2009-16bit/engines/agos/draw.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/event.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/pn.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/res_snd.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/script_pn.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/string.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/vga.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/vga_e2.cpp
    scummvm/branches/gsoc2009-16bit/engines/agos/vga_pn.cpp
    scummvm/branches/gsoc2009-16bit/engines/cine/saveload.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/actor.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/cruise_main.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/ctp.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/menu.cpp
    scummvm/branches/gsoc2009-16bit/engines/gob/detection.cpp
    scummvm/branches/gsoc2009-16bit/engines/gob/resources.cpp
    scummvm/branches/gsoc2009-16bit/engines/gob/resources.h
    scummvm/branches/gsoc2009-16bit/engines/gob/videoplayer.cpp
    scummvm/branches/gsoc2009-16bit/engines/gob/videoplayer.h
    scummvm/branches/gsoc2009-16bit/engines/groovie/resource.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/kyra_lok.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/kyra_v1.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/saveload.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/scene_v2.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/script_lol.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/script_tim.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/sequences_lol.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/sound.h
    scummvm/branches/gsoc2009-16bit/engines/kyra/sound_intern.h
    scummvm/branches/gsoc2009-16bit/engines/kyra/sound_pcspk.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/detection.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/gfx/gfx_resmgr.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/gfx/gfx_resmgr.h
    scummvm/branches/gsoc2009-16bit/engines/sci/gfx/gfx_system.h
    scummvm/branches/gsoc2009-16bit/engines/sci/gfx/operations.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/gfx/res_pal.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/dialogs.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/dialogs.h
    scummvm/branches/gsoc2009-16bit/engines/scumm/imuse_digi/dimuse_track.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/input.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/player_v2.h
    scummvm/branches/gsoc2009-16bit/engines/scumm/script.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/script_v6.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/scumm.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/scumm_v6.h
    scummvm/branches/gsoc2009-16bit/engines/scumm/scumm_v7.h
    scummvm/branches/gsoc2009-16bit/engines/scumm/string.cpp
    scummvm/branches/gsoc2009-16bit/engines/sky/grid.cpp
    scummvm/branches/gsoc2009-16bit/engines/sky/logic.cpp
    scummvm/branches/gsoc2009-16bit/engines/sky/sky.cpp
    scummvm/branches/gsoc2009-16bit/engines/sword1/sound.cpp
    scummvm/branches/gsoc2009-16bit/engines/tinsel/handle.cpp
    scummvm/branches/gsoc2009-16bit/engines/tinsel/pcode.cpp
    scummvm/branches/gsoc2009-16bit/engines/tinsel/pcode.h
    scummvm/branches/gsoc2009-16bit/engines/touche/saveload.cpp
    scummvm/branches/gsoc2009-16bit/engines/tucker/saveload.cpp
    scummvm/branches/gsoc2009-16bit/graphics/VectorRendererSpec.cpp
    scummvm/branches/gsoc2009-16bit/graphics/font.cpp
    scummvm/branches/gsoc2009-16bit/graphics/video/coktelvideo/coktelvideo.cpp
    scummvm/branches/gsoc2009-16bit/graphics/video/mpeg_player.cpp
    scummvm/branches/gsoc2009-16bit/gui/EditTextWidget.cpp
    scummvm/branches/gsoc2009-16bit/gui/ListWidget.cpp
    scummvm/branches/gsoc2009-16bit/gui/PopUpWidget.cpp
    scummvm/branches/gsoc2009-16bit/gui/ThemeEngine.cpp
    scummvm/branches/gsoc2009-16bit/gui/ThemeEngine.h
    scummvm/branches/gsoc2009-16bit/gui/about.cpp
    scummvm/branches/gsoc2009-16bit/gui/console.cpp
    scummvm/branches/gsoc2009-16bit/gui/launcher.cpp
    scummvm/branches/gsoc2009-16bit/gui/themes/default.inc
    scummvm/branches/gsoc2009-16bit/gui/themes/scummclassic/classic_gfx.stx
    scummvm/branches/gsoc2009-16bit/gui/themes/scummclassic/classic_layout.stx
    scummvm/branches/gsoc2009-16bit/gui/themes/scummclassic/classic_layout_lowres.stx
    scummvm/branches/gsoc2009-16bit/gui/themes/scummclassic.zip
    scummvm/branches/gsoc2009-16bit/gui/themes/scummmodern/scummmodern_gfx.stx
    scummvm/branches/gsoc2009-16bit/gui/themes/scummmodern/scummmodern_layout_lowres.stx
    scummvm/branches/gsoc2009-16bit/gui/themes/scummmodern.zip
    scummvm/branches/gsoc2009-16bit/sound/aiff.cpp
    scummvm/branches/gsoc2009-16bit/sound/flac.cpp

Added Paths:
-----------
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_events.cpp
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.cpp
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.h
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_sound.cpp
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_video.cpp
    scummvm/branches/gsoc2009-16bit/backends/platform/wince/smartLandScale.s
    scummvm/branches/gsoc2009-16bit/engines/kyra/sound_adlib.h

Removed Paths:
-------------
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.cpp
    scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.h

Property Changed:
----------------
    scummvm/branches/gsoc2009-16bit/


Property changes on: scummvm/branches/gsoc2009-16bit
___________________________________________________________________
Modified: svnmerge-integrated
   - /scummvm/trunk:1-42461 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/branches/gsoc2008-gui:1-31703
   + /scummvm/trunk:1-42574 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/branches/gsoc2008-gui:1-31703

Modified: scummvm/branches/gsoc2009-16bit/README
===================================================================
--- scummvm/branches/gsoc2009-16bit/README	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/README	2009-07-18 00:53:31 UTC (rev 42576)
@@ -230,10 +230,19 @@
          and the Schnibble                       [woodruff]
      Ween: The Prophecy                          [ween]
 
+MADE Games by Activision:
+     Leather Goddesses of Phobos 2               [lgop2]
+     Return to Zork                              [rtz]
+     Rodney's Funscreen                          [rodney]
+     The Manhole                                 [manhole]
+
 Other Games:
      Beneath a Steel Sky                         [sky]
      Broken Sword 1: The Shadow of the Templars  [sword1]
      Broken Sword 2: The Smoking Mirror          [sword2]
+     Cruise for a Corpse                         [cruise]
+     Discworld                                   [dw]
+     Discworld 2: Missing Presumed ...!?         [dw2]
      Drascula: The Vampire Strikes Back          [drascula]
      Flight of the Amazon Queen                  [queen]
      Future Wars                                 [fw]
@@ -297,6 +306,7 @@
      Backyard Baseball                           [baseball]
      Backyard Soccer                             [soccer]
      Blue's Birthday Adventure                   [BluesBirthday]
+     Blue's Treasure Hunt                        [BluesTreasureHunt]
      SPY Fox 3: Operation Ozone                  [spyozon]
 
 The following games are based on the SCUMM engine, but NOT supported

Modified: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/module.mk
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/module.mk	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/module.mk	2009-07-18 00:53:31 UTC (rev 42576)
@@ -1,7 +1,10 @@
 MODULE := backends/platform/iphone
 
 MODULE_OBJS := \
-	osys_iphone.o \
+	osys_main.o \
+	osys_events.o \
+	osys_sound.o \
+	osys_video.o \
 	iphone_main.o \
 	iphone_video.o \
 	iphone_keyboard.o \

Copied: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_events.cpp (from rev 42572, scummvm/trunk/backends/platform/iphone/osys_events.cpp)
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_events.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_events.cpp	2009-07-18 00:53:31 UTC (rev 42576)
@@ -0,0 +1,514 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "gui/message.h"
+
+#include "osys_main.h"
+
+
+bool OSystem_IPHONE::pollEvent(Common::Event &event) {
+	//printf("pollEvent()\n");
+
+	long curTime = getMillis();
+
+	if (_timerCallback && (curTime >= _timerCallbackNext)) {
+		_timerCallback(_timerCallbackTimer);
+		_timerCallbackNext = curTime + _timerCallbackTimer;
+	}
+
+	if (_needEventRestPeriod) {
+		// Workaround: Some engines can't handle mouse-down and mouse-up events
+		// appearing right after each other, without a call returning no input in between.
+		_needEventRestPeriod = false;
+		return false;
+	}
+
+	if (_queuedInputEvent.type != (Common::EventType)0) {
+		event = _queuedInputEvent;
+		_queuedInputEvent.type = (Common::EventType)0;
+		return true;
+	}
+
+	int eventType;
+	float xUnit, yUnit;
+
+	if (iPhone_fetchEvent(&eventType, &xUnit, &yUnit)) {
+		int x = 0;
+		int y = 0;
+		switch (_screenOrientation) {
+			case kScreenOrientationPortrait:
+				x = (int)(xUnit * _screenWidth);
+				y = (int)(yUnit * _screenHeight);
+				break;
+			case kScreenOrientationLandscape:
+				x = (int)(yUnit * _screenWidth);
+				y = (int)((1.0 - xUnit) * _screenHeight);
+				break;
+			case kScreenOrientationFlippedLandscape:
+				x = (int)((1.0 - yUnit) * _screenWidth);
+				y = (int)(xUnit * _screenHeight);
+				break;
+		}
+
+		switch ((InputEvent)eventType) {
+			case kInputMouseDown:
+				if (!handleEvent_mouseDown(event, x, y))
+					return false;
+				break;
+
+			case kInputMouseUp:
+			if (!handleEvent_mouseUp(event, x, y))
+				return false;
+				break;
+
+			case kInputMouseDragged:
+				if (!handleEvent_mouseDragged(event, x, y))
+					return false;
+				break;
+			case kInputMouseSecondDragged:
+				if (!handleEvent_mouseSecondDragged(event, x, y))
+					return false;
+				break;
+			case kInputMouseSecondDown:
+				_secondaryTapped = true;
+				if (!handleEvent_secondMouseDown(event, x, y))
+					return false;
+				break;
+			case kInputMouseSecondUp:
+				_secondaryTapped = false;
+				if (!handleEvent_secondMouseUp(event, x, y))
+					return false;
+				break;
+			case kInputOrientationChanged:
+				handleEvent_orientationChanged((int)xUnit);
+				return false;
+				break;
+
+			case kInputApplicationSuspended:
+				suspendLoop();
+				return false;
+				break;
+
+			case kInputKeyPressed:
+				handleEvent_keyPressed(event, (int)xUnit);
+				break;
+
+			case kInputSwipe:
+				if (!handleEvent_swipe(event, (int)xUnit))
+					return false;
+				break;
+
+			default:
+				break;
+		}
+
+		return true;
+	}
+	return false;
+}
+
+bool OSystem_IPHONE::handleEvent_mouseDown(Common::Event &event, int x, int y) {
+	//printf("Mouse down at (%u, %u)\n", x, y);
+
+	// Workaround: kInputMouseSecondToggled isn't always sent when the
+	// secondary finger is lifted. Need to make sure we get out of that mode.
+	_secondaryTapped = false;
+
+	if (_touchpadModeEnabled) {
+		_lastPadX = x;
+		_lastPadY = y;
+	} else
+		warpMouse(x, y);
+
+	if (_mouseClickAndDragEnabled) {
+		event.type = Common::EVENT_LBUTTONDOWN;
+		event.mouse.x = _mouseX;
+		event.mouse.y = _mouseY;
+		return true;
+	} else {
+		_lastMouseDown = getMillis();
+	}
+	return false;
+}
+
+bool OSystem_IPHONE::handleEvent_mouseUp(Common::Event &event, int x, int y) {
+	//printf("Mouse up at (%u, %u)\n", x, y);
+
+	if (_secondaryTapped) {
+		_secondaryTapped = false;
+		if (!handleEvent_secondMouseUp(event, x, y))
+			return false;
+	}
+	else if (_mouseClickAndDragEnabled) {
+		event.type = Common::EVENT_LBUTTONUP;
+		event.mouse.x = _mouseX;
+		event.mouse.y = _mouseY;
+	} else {
+		if (getMillis() - _lastMouseDown < 250) {
+			event.type = Common::EVENT_LBUTTONDOWN;
+			event.mouse.x = _mouseX;
+			event.mouse.y = _mouseY;
+
+			_queuedInputEvent.type = Common::EVENT_LBUTTONUP;
+			_queuedInputEvent.mouse.x = _mouseX;
+			_queuedInputEvent.mouse.y = _mouseY;
+			_lastMouseTap = getMillis();
+			_needEventRestPeriod = true;
+		} else
+			return false;
+	}
+
+	return true;
+}
+
+bool OSystem_IPHONE::handleEvent_secondMouseDown(Common::Event &event, int x, int y) {
+	_lastSecondaryDown = getMillis();
+	_gestureStartX = x;
+	_gestureStartY = y;
+
+	if (_mouseClickAndDragEnabled) {
+		event.type = Common::EVENT_LBUTTONUP;
+		event.mouse.x = _mouseX;
+		event.mouse.y = _mouseY;
+
+		_queuedInputEvent.type = Common::EVENT_RBUTTONDOWN;
+		_queuedInputEvent.mouse.x = _mouseX;
+		_queuedInputEvent.mouse.y = _mouseY;
+	}
+	else
+		return false;
+
+	return true;
+}
+
+bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int y) {
+	int curTime = getMillis();
+
+	if (curTime - _lastSecondaryDown < 400 ) {
+		//printf("Right tap!\n");
+		if (curTime - _lastSecondaryTap < 400 && !_overlayVisible) {
+			//printf("Right escape!\n");
+			event.type = Common::EVENT_KEYDOWN;
+			_queuedInputEvent.type = Common::EVENT_KEYUP;
+
+			event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
+			event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_ESCAPE;
+			event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_ESCAPE;
+			_needEventRestPeriod = true;
+			_lastSecondaryTap = 0;
+		} else if (!_mouseClickAndDragEnabled) {
+			//printf("Rightclick!\n");
+			event.type = Common::EVENT_RBUTTONDOWN;
+			event.mouse.x = _mouseX;
+			event.mouse.y = _mouseY;
+			_queuedInputEvent.type = Common::EVENT_RBUTTONUP;
+			_queuedInputEvent.mouse.x = _mouseX;
+			_queuedInputEvent.mouse.y = _mouseY;
+			_lastSecondaryTap = curTime;
+			_needEventRestPeriod = true;
+		} else {
+			//printf("Right nothing!\n");
+			return false;
+		}
+	}
+	if (_mouseClickAndDragEnabled) {
+		event.type = Common::EVENT_RBUTTONUP;
+		event.mouse.x = _mouseX;
+		event.mouse.y = _mouseY;
+	}
+
+	return true;
+}
+
+bool OSystem_IPHONE::handleEvent_mouseDragged(Common::Event &event, int x, int y) {
+	if (_lastDragPosX == x && _lastDragPosY == y)
+		return false;
+
+	_lastDragPosX = x;
+	_lastDragPosY = y;
+
+	//printf("Mouse dragged at (%u, %u)\n", x, y);
+	int mouseNewPosX;
+	int mouseNewPosY;
+	if (_touchpadModeEnabled ) {
+		int deltaX = _lastPadX - x;
+		int deltaY = _lastPadY - y;
+		_lastPadX = x;
+		_lastPadY = y;
+
+		mouseNewPosX = (int)(_mouseX - deltaX / 0.5f);
+		mouseNewPosY = (int)(_mouseY - deltaY / 0.5f);
+
+		if (mouseNewPosX < 0)
+			mouseNewPosX = 0;
+		else if (mouseNewPosX > _screenWidth)
+			mouseNewPosX = _screenWidth;
+
+		if (mouseNewPosY < 0)
+			mouseNewPosY = 0;
+		else if (mouseNewPosY > _screenHeight)
+			mouseNewPosY = _screenHeight;
+
+	} else {
+		mouseNewPosX = x;
+		mouseNewPosY = y;
+	}
+
+	event.type = Common::EVENT_MOUSEMOVE;
+	event.mouse.x = mouseNewPosX;
+	event.mouse.y = mouseNewPosY;
+	warpMouse(mouseNewPosX, mouseNewPosY);
+
+	return true;
+}
+
+bool OSystem_IPHONE::handleEvent_mouseSecondDragged(Common::Event &event, int x, int y) {
+	if (_gestureStartX == -1 || _gestureStartY == -1) {
+		return false;
+	}
+
+	static const int kNeededLength = 100;
+	static const int kMaxDeviation = 20;
+
+	int vecX = (x - _gestureStartX);
+	int vecY = (y - _gestureStartY);
+	
+	int absX = abs(vecX);
+	int absY = abs(vecY);
+
+	//printf("(%d, %d)\n", vecX, vecY);
+
+	if (absX >= kNeededLength || absY >= kNeededLength) { // Long enough gesture to react upon.
+		_gestureStartX = -1;
+		_gestureStartY = -1;
+
+		if (absX < kMaxDeviation && vecY >= kNeededLength) {
+			// Swipe down
+			event.type = Common::EVENT_KEYDOWN;
+			_queuedInputEvent.type = Common::EVENT_KEYUP;
+
+			event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
+			event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_F5;
+			event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_F5;
+			_needEventRestPeriod = true;
+			return true;
+		}
+		
+		if (absX < kMaxDeviation && -vecY >= kNeededLength) {
+			// Swipe up
+			_mouseClickAndDragEnabled = !_mouseClickAndDragEnabled;
+			const char *dialogMsg;
+			if (_mouseClickAndDragEnabled) {
+				_touchpadModeEnabled = false;
+				dialogMsg = "Mouse-click-and-drag mode enabled.";
+			} else
+				dialogMsg = "Mouse-click-and-drag mode disabled.";
+			GUI::TimedMessageDialog dialog(dialogMsg, 1500);
+			dialog.runModal();
+			return false;
+		}
+		
+		if (absY < kMaxDeviation && vecX >= kNeededLength) {
+			// Swipe right
+			_touchpadModeEnabled = !_touchpadModeEnabled;
+			const char *dialogMsg;
+			if (_touchpadModeEnabled)
+				dialogMsg = "Touchpad mode enabled.";
+			else
+				dialogMsg = "Touchpad mode disabled.";
+			GUI::TimedMessageDialog dialog(dialogMsg, 1500);
+			dialog.runModal();
+			return false;
+
+		}
+		
+		if (absY < kMaxDeviation && -vecX >= kNeededLength) {
+			// Swipe left
+			return false;
+		}
+	}
+
+	return false;
+}
+
+void  OSystem_IPHONE::handleEvent_orientationChanged(int orientation) {
+	//printf("Orientation: %i\n", orientation);
+
+	ScreenOrientation newOrientation;
+	switch (orientation) {
+		case 1:
+			newOrientation = kScreenOrientationPortrait;
+			break;
+		case 3:
+			newOrientation = kScreenOrientationLandscape;
+			break;
+		case 4:
+			newOrientation = kScreenOrientationFlippedLandscape;
+			break;
+		default:
+			return;
+	}
+
+
+	if (_screenOrientation != newOrientation) {
+		_screenOrientation = newOrientation;
+		iPhone_initSurface(_screenWidth, _screenHeight);
+
+		dirtyFullScreen();
+		if (_overlayVisible)
+			dirtyFullOverlayScreen();
+		updateScreen();
+	}
+}
+
+void  OSystem_IPHONE::handleEvent_keyPressed(Common::Event &event, int keyPressed) {
+	int ascii = keyPressed;
+	//printf("key: %i\n", keyPressed);
+
+	// We remap some of the iPhone keyboard keys.
+	// The first ten here are the row of symbols below the numeric keys.
+	switch (keyPressed) {
+		case 45:
+			keyPressed = Common::KEYCODE_F1;
+			ascii = Common::ASCII_F1;
+			break;
+		case 47:
+			keyPressed = Common::KEYCODE_F2;
+			ascii = Common::ASCII_F2;
+			break;
+		case 58:
+			keyPressed = Common::KEYCODE_F3;
+			ascii = Common::ASCII_F3;
+			break;
+		case 59:
+			keyPressed = Common::KEYCODE_F4;
+			ascii = Common::ASCII_F4;
+			break;
+		case 40:
+			keyPressed = Common::KEYCODE_F5;
+			ascii = Common::ASCII_F5;
+			break;
+		case 41:
+			keyPressed = Common::KEYCODE_F6;
+			ascii = Common::ASCII_F6;
+			break;
+		case 36:
+			keyPressed = Common::KEYCODE_F7;
+			ascii = Common::ASCII_F7;
+			break;
+		case 38:
+			keyPressed = Common::KEYCODE_F8;
+			ascii = Common::ASCII_F8;
+			break;
+		case 64:
+			keyPressed = Common::KEYCODE_F9;
+			ascii = Common::ASCII_F9;
+			break;
+		case 34:
+			keyPressed = Common::KEYCODE_F10;
+			ascii = Common::ASCII_F10;
+			break;
+		case 10:
+			keyPressed = Common::KEYCODE_RETURN;
+			ascii = Common::ASCII_RETURN;
+			break;
+	}
+	event.type = Common::EVENT_KEYDOWN;
+	_queuedInputEvent.type = Common::EVENT_KEYUP;
+
+	event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
+	event.kbd.keycode = _queuedInputEvent.kbd.keycode = (Common::KeyCode)keyPressed;
+	event.kbd.ascii = _queuedInputEvent.kbd.ascii = ascii;
+	_needEventRestPeriod = true;
+}
+
+bool OSystem_IPHONE::handleEvent_swipe(Common::Event &event, int direction) {
+	Common::KeyCode keycode = Common::KEYCODE_INVALID;
+	switch (_screenOrientation) {
+		case kScreenOrientationPortrait:
+			switch ((UIViewSwipeDirection)direction) {
+				case kUIViewSwipeUp:
+					keycode = Common::KEYCODE_UP;
+					break;
+				case kUIViewSwipeDown:
+					keycode = Common::KEYCODE_DOWN;
+					break;
+				case kUIViewSwipeLeft:
+					keycode = Common::KEYCODE_LEFT;
+					break;
+				case kUIViewSwipeRight:
+					keycode = Common::KEYCODE_RIGHT;
+					break;
+				default:
+					return false;
+			}
+			break;
+		case kScreenOrientationLandscape:
+			switch ((UIViewSwipeDirection)direction) {
+				case kUIViewSwipeUp:
+					keycode = Common::KEYCODE_LEFT;
+					break;
+				case kUIViewSwipeDown:
+					keycode = Common::KEYCODE_RIGHT;
+					break;
+				case kUIViewSwipeLeft:
+					keycode = Common::KEYCODE_DOWN;
+					break;
+				case kUIViewSwipeRight:
+					keycode = Common::KEYCODE_UP;
+					break;
+				default:
+					return false;
+			}
+			break;
+		case kScreenOrientationFlippedLandscape:
+			switch ((UIViewSwipeDirection)direction) {
+				case kUIViewSwipeUp:
+					keycode = Common::KEYCODE_RIGHT;
+					break;
+				case kUIViewSwipeDown:
+					keycode = Common::KEYCODE_LEFT;
+					break;
+				case kUIViewSwipeLeft:
+					keycode = Common::KEYCODE_UP;
+					break;
+				case kUIViewSwipeRight:
+					keycode = Common::KEYCODE_DOWN;
+					break;
+				default:
+					return false;
+			}
+			break;
+	}
+
+	event.kbd.keycode = _queuedInputEvent.kbd.keycode = keycode;
+	event.kbd.ascii = _queuedInputEvent.kbd.ascii = 0;
+	event.type = Common::EVENT_KEYDOWN;
+	_queuedInputEvent.type = Common::EVENT_KEYUP;
+	event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
+	_needEventRestPeriod = true;
+
+	return true;
+}

Deleted: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.cpp	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.cpp	2009-07-18 00:53:31 UTC (rev 42576)
@@ -1,1303 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program 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 General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include <unistd.h>
-#include <pthread.h>
-
-#include <sys/time.h>
-
-#include "common/scummsys.h"
-#include "common/util.h"
-#include "common/rect.h"
-#include "common/file.h"
-#include "common/fs.h"
-
-#include "base/main.h"
-
-#include "backends/saves/default/default-saves.h"
-#include "backends/timer/default/default-timer.h"
-#include "sound/mixer.h"
-#include "sound/mixer_intern.h"
-#include "gui/message.h"
-
-#include "osys_iphone.h"
-
-
-const OSystem::GraphicsMode OSystem_IPHONE::s_supportedGraphicsModes[] = {
-	{0, 0, 0}
-};
-
-AQCallbackStruct OSystem_IPHONE::s_AudioQueue;
-SoundProc OSystem_IPHONE::s_soundCallback = NULL;
-void *OSystem_IPHONE::s_soundParam = NULL;
-
-OSystem_IPHONE::OSystem_IPHONE() :
-	_savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL),
-	_overlayVisible(false), _overlayBuffer(NULL), _fullscreen(NULL),
-	_mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0),
-	_secondaryTapped(false), _lastSecondaryTap(0), _screenOrientation(kScreenOrientationFlippedLandscape),
-	_needEventRestPeriod(false), _mouseClickAndDragEnabled(false), _touchpadModeEnabled(true),
-	_gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false),
-	_mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0)
-
-{
-	_queuedInputEvent.type = (Common::EventType)0;
-	_lastDrawnMouseRect = Common::Rect(0, 0, 0, 0);
-
-	_fsFactory = new POSIXFilesystemFactory();
-}
-
-OSystem_IPHONE::~OSystem_IPHONE() {
-	AudioQueueDispose(s_AudioQueue.queue, true);
-
-	delete _fsFactory;
-	delete _savefile;
-	delete _mixer;
-	delete _timer;
-	delete _offscreen;
-	delete _fullscreen;
-}
-
-int OSystem_IPHONE::timerHandler(int t) {
-	DefaultTimerManager *tm = (DefaultTimerManager *)g_system->getTimerManager();
-	tm->handler();
-	return t;
-}
-
-void OSystem_IPHONE::initBackend() {
-#ifdef IPHONE_OFFICIAL
-	_savefile = new DefaultSaveFileManager(iPhone_getDocumentsDir());
-#else
-	_savefile = new DefaultSaveFileManager(SCUMMVM_SAVE_PATH);
-#endif
-
-	_timer = new DefaultTimerManager();
-
-	gettimeofday(&_startTime, NULL);
-
-	setupMixer();
-
-	setTimerCallback(&OSystem_IPHONE::timerHandler, 10);
-
-	OSystem::initBackend();
-}
-
-bool OSystem_IPHONE::hasFeature(Feature f) {
-	return false;
-}
-
-void OSystem_IPHONE::setFeatureState(Feature f, bool enable) {
-}
-
-bool OSystem_IPHONE::getFeatureState(Feature f) {
-	return false;
-}
-
-const OSystem::GraphicsMode* OSystem_IPHONE::getSupportedGraphicsModes() const {
-	return s_supportedGraphicsModes;
-}
-
-
-int OSystem_IPHONE::getDefaultGraphicsMode() const {
-	return -1;
-}
-
-bool OSystem_IPHONE::setGraphicsMode(const char *mode) {
-	return true;
-}
-
-bool OSystem_IPHONE::setGraphicsMode(int mode) {
-	return true;
-}
-
-int OSystem_IPHONE::getGraphicsMode() const {
-	return -1;
-}
-
-void OSystem_IPHONE::initSize(uint width, uint height) {
-	//printf("initSize(%i, %i)\n", width, height);
-
-	_screenWidth = width;
-	_screenHeight = height;
-
-	free(_offscreen);
-
-	_offscreen = (byte *)malloc(width * height);
-	bzero(_offscreen, width * height);
-
-	free(_overlayBuffer);
-
-	int fullSize = _screenWidth * _screenHeight * sizeof(OverlayColor);
-	_overlayBuffer = (OverlayColor *)malloc(fullSize);
-	clearOverlay();
-
-	free(_fullscreen);
-
-	_fullscreen = (uint16 *)malloc(fullSize);
-	bzero(_fullscreen, fullSize);
-
-	iPhone_initSurface(width, height);
-
-	_fullScreenIsDirty = false;
-	dirtyFullScreen();
-	_mouseVisible = false;
-	_screenChangeCount++;
-	updateScreen();
-}
-
-int16 OSystem_IPHONE::getHeight() {
-	return _screenHeight;
-}
-
-int16 OSystem_IPHONE::getWidth() {
-	return _screenWidth;
-}
-
-void OSystem_IPHONE::setPalette(const byte *colors, uint start, uint num) {
-	//printf("setPalette()\n");
-	const byte *b = colors;
-
-	for (uint i = start; i < start + num; ++i) {
-		_palette[i] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(b[0], b[1], b[2]);
-		b += 4;
-	}
-
-	dirtyFullScreen();
-}
-
-void OSystem_IPHONE::grabPalette(byte *colors, uint start, uint num) {
-	//printf("grabPalette()\n");
-}
-
-void OSystem_IPHONE::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) {
-	//printf("copyRectToScreen(%i, %i, %i, %i)\n", x, y, w, h);
-	//Clip the coordinates
-	if (x < 0) {
-		w += x;
-		buf -= x;
-		x = 0;
-	}
-
-	if (y < 0) {
-		h += y;
-		buf -= y * pitch;
-		y = 0;
-	}
-
-	if (w > _screenWidth - x) {
-		w = _screenWidth - x;
-	}
-
-	if (h > _screenHeight - y) {
-		h = _screenHeight - y;
-	}
-
-	if (w <= 0 || h <= 0)
-		return;
-
-	if (!_fullScreenIsDirty) {
-		_dirtyRects.push_back(Common::Rect(x, y, x + w, y + h));
-	}
-
-
-	byte *dst = _offscreen + y * _screenWidth + x;
-	if (_screenWidth == pitch && pitch == w)
-		memcpy(dst, buf, h * w);
-	else {
-		do {
-			memcpy(dst, buf, w);
-			buf += pitch;
-			dst += _screenWidth;
-		} while (--h);
-	}
-}
-
-void OSystem_IPHONE::clipRectToScreen(int16 &x, int16 &y, int16 &w, int16 &h) {
-	if (x < 0) {
-		w += x;
-		x = 0;
-	}
-
-	if (y < 0) {
-		h += y;
-		y = 0;
-	}
-
-	if (w > _screenWidth - x)
-		w = _screenWidth - x;
-
-	if (h > _screenHeight - y)
-		h = _screenHeight - y;
-
-	if (w < 0) {
-		w = 0;
-	}
-
-	if (h < 0) {
-		h = 0;
-	}
-}
-
-void OSystem_IPHONE::updateScreen() {
-	//printf("updateScreen(): %i dirty rects.\n", _dirtyRects.size());
-
-	if (_dirtyRects.size() == 0 && _dirtyOverlayRects.size() == 0 && !_mouseDirty)
-		return;
-
-	internUpdateScreen();
-	_fullScreenIsDirty = false;
-	_fullScreenOverlayIsDirty = false;
-
-	iPhone_updateScreen();
-}
-
-void OSystem_IPHONE::internUpdateScreen() {
-	int16 mouseX = _mouseX - _mouseHotspotX;
-	int16 mouseY = _mouseY - _mouseHotspotY;
-	int16 mouseWidth = _mouseWidth;
-	int16 mouseHeight = _mouseHeight;
-
-	clipRectToScreen(mouseX, mouseY, mouseWidth, mouseHeight);
-
-	Common::Rect mouseRect(mouseX, mouseY, mouseX + mouseWidth, mouseY + mouseHeight);
-
-	if (_mouseDirty) {
-		if (!_fullScreenIsDirty) {
-			_dirtyRects.push_back(_lastDrawnMouseRect);
-			_dirtyRects.push_back(mouseRect);
-		}
-		if (!_fullScreenOverlayIsDirty && _overlayVisible) {
-			_dirtyOverlayRects.push_back(_lastDrawnMouseRect);
-			_dirtyOverlayRects.push_back(mouseRect);
-		}
-		_mouseDirty = false;
-		_lastDrawnMouseRect = mouseRect;
-	}
-
-	while (_dirtyRects.size()) {
-		Common::Rect dirtyRect = _dirtyRects.remove_at(_dirtyRects.size() - 1);
-
-		//printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
-
-		drawDirtyRect(dirtyRect);
-
-		if (_overlayVisible)
-			drawDirtyOverlayRect(dirtyRect);
-
-		drawMouseCursorOnRectUpdate(dirtyRect, mouseRect);
-		updateHardwareSurfaceForRect(dirtyRect);
-	}
-
-	if (_overlayVisible) {
-		while (_dirtyOverlayRects.size()) {
-			Common::Rect dirtyRect = _dirtyOverlayRects.remove_at(_dirtyOverlayRects.size() - 1);
-
-			//printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
-
-			drawDirtyOverlayRect(dirtyRect);
-			drawMouseCursorOnRectUpdate(dirtyRect, mouseRect);
-			updateHardwareSurfaceForRect(dirtyRect);
-		}
-	}
-}
-
-void OSystem_IPHONE::drawDirtyRect(const Common::Rect& dirtyRect) {
-	int h = dirtyRect.bottom - dirtyRect.top;
-	int w = dirtyRect.right - dirtyRect.left;
-
-	byte  *src = &_offscreen[dirtyRect.top * _screenWidth + dirtyRect.left];
-	uint16 *dst = &_fullscreen[dirtyRect.top * _screenWidth + dirtyRect.left];
-	for (int y = h; y > 0; y--) {
-		for (int x = w; x > 0; x--)
-			*dst++ = _palette[*src++];
-
-		dst += _screenWidth - w;
-		src += _screenWidth - w;
-	}
-}
-
-void OSystem_IPHONE::drawDirtyOverlayRect(const Common::Rect& dirtyRect) {
-	int h = dirtyRect.bottom - dirtyRect.top;
-
-	uint16 *src = (uint16 *)&_overlayBuffer[dirtyRect.top * _screenWidth + dirtyRect.left];
-	uint16 *dst = &_fullscreen[dirtyRect.top * _screenWidth + dirtyRect.left];
-	int x = (dirtyRect.right - dirtyRect.left) * 2;
-	for (int y = h; y > 0; y--) {
-		memcpy(dst, src, x);
-		src += _screenWidth;
-		dst += _screenWidth;
-	}
-}
-
-void OSystem_IPHONE::drawMouseCursorOnRectUpdate(const Common::Rect& updatedRect, const Common::Rect& mouseRect) {
-	//draw mouse on top
-	if (_mouseVisible && (updatedRect.intersects(mouseRect))) {
-		int srcX = 0;
-		int srcY = 0;
-		int left = _mouseX - _mouseHotspotX;
-		if (left < 0) {
-			srcX -= left;
-			left = 0;
-		}
-		int top = _mouseY - _mouseHotspotY;
-		if (top < 0) {
-			srcY -= top;
-			top = 0;
-		}
-			//int right = left + _mouseWidth;
-		int bottom = top + _mouseHeight;
-		if (bottom > _screenWidth)
-			bottom = _screenWidth;
-			int displayWidth = _mouseWidth;
-		if (_mouseWidth + left > _screenWidth)
-			displayWidth = _screenWidth - left;
-			int displayHeight = _mouseHeight;
-		if (_mouseHeight + top > _screenHeight)
-			displayHeight = _screenHeight - top;
-		byte *src = &_mouseBuf[srcY * _mouseWidth + srcX];
-		uint16 *dst = &_fullscreen[top * _screenWidth + left];
-		for (int y = displayHeight; y > srcY; y--) {
-			for (int x = displayWidth; x > srcX; x--) {
-				if (*src != _mouseKeyColour)
-					*dst = _palette[*src];
-				dst++;
-				src++;
-			}
-			dst += _screenWidth - displayWidth + srcX;
-			src += _mouseWidth - displayWidth + srcX;
-		}
-	}
-}
-
-void OSystem_IPHONE::updateHardwareSurfaceForRect(const Common::Rect& updatedRect) {
-	iPhone_updateScreenRect(_fullscreen, updatedRect.left, updatedRect.top, updatedRect.right, updatedRect.bottom );
-}
-
-Graphics::Surface *OSystem_IPHONE::lockScreen() {
-	//printf("lockScreen()\n");
-
-	_framebuffer.pixels = _offscreen;
-	_framebuffer.w = _screenWidth;
-	_framebuffer.h = _screenHeight;
-	_framebuffer.pitch = _screenWidth;
-	_framebuffer.bytesPerPixel = 1;
-
-	return &_framebuffer;
-}
-
-void OSystem_IPHONE::unlockScreen() {
-	//printf("unlockScreen()\n");
-	dirtyFullScreen();
-}
-
-void OSystem_IPHONE::setShakePos(int shakeOffset) {
-	//printf("setShakePos(%i)\n", shakeOffset);
-}
-
-void OSystem_IPHONE::showOverlay() {
-	//printf("showOverlay()\n");
-	_overlayVisible = true;
-	dirtyFullOverlayScreen();
-}
-
-void OSystem_IPHONE::hideOverlay() {
-	//printf("hideOverlay()\n");
-	_overlayVisible = false;
-	_dirtyOverlayRects.clear();
-	dirtyFullScreen();
-}
-
-void OSystem_IPHONE::clearOverlay() {
-	//printf("clearOverlay()\n");
-	bzero(_overlayBuffer, _screenWidth * _screenHeight * sizeof(OverlayColor));
-	dirtyFullOverlayScreen();
-}
-
-void OSystem_IPHONE::grabOverlay(OverlayColor *buf, int pitch) {
-	//printf("grabOverlay()\n");
-	int h = _screenHeight;
-	OverlayColor *src = _overlayBuffer;
-
-	do {
-		memcpy(buf, src, _screenWidth * sizeof(OverlayColor));
-		src += _screenWidth;
-		buf += pitch;
-	} while (--h);
-}
-
-void OSystem_IPHONE::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
-	//printf("copyRectToOverlay(buf, pitch=%i, x=%i, y=%i, w=%i, h=%i)\n", pitch, x, y, w, h);
-
-	//Clip the coordinates
-	if (x < 0) {
-		w += x;
-		buf -= x;
-		x = 0;
-	}
-
-	if (y < 0) {
-		h += y;
-		buf -= y * pitch;
-		y = 0;
-	}
-
-	if (w > _screenWidth - x)
-		w = _screenWidth - x;
-
-	if (h > _screenHeight - y)
-		h = _screenHeight - y;
-
-	if (w <= 0 || h <= 0)
-		return;
-
-	if (!_fullScreenOverlayIsDirty) {
-		_dirtyOverlayRects.push_back(Common::Rect(x, y, x + w, y + h));
-	}
-
-	OverlayColor *dst = _overlayBuffer + (y * _screenWidth + x);
-	if (_screenWidth == pitch && pitch == w)
-		memcpy(dst, buf, h * w * sizeof(OverlayColor));
-	else {
-		do {
-			memcpy(dst, buf, w * sizeof(OverlayColor));
-			buf += pitch;
-			dst += _screenWidth;
-		} while (--h);
-	}
-}
-
-int16 OSystem_IPHONE::getOverlayHeight() {
-	return _screenHeight;
-}
-
-int16 OSystem_IPHONE::getOverlayWidth() {
-	return _screenWidth;
-}
-
-bool OSystem_IPHONE::showMouse(bool visible) {
-	bool last = _mouseVisible;
-	_mouseVisible = visible;
-	_mouseDirty = true;
-
-	return last;
-}
-
-void OSystem_IPHONE::warpMouse(int x, int y) {
-	//printf("warpMouse()\n");
-
-	_mouseX = x;
-	_mouseY = y;
-	_mouseDirty = true;
-}
-
-void OSystem_IPHONE::dirtyFullScreen() {
-	if (!_fullScreenIsDirty) {
-		_dirtyRects.clear();
-		_dirtyRects.push_back(Common::Rect(0, 0, _screenWidth, _screenHeight));
-		_fullScreenIsDirty = true;
-	}
-}
-
-void OSystem_IPHONE::dirtyFullOverlayScreen() {
-	if (!_fullScreenOverlayIsDirty) {
-		_dirtyOverlayRects.clear();
-		_dirtyOverlayRects.push_back(Common::Rect(0, 0, _screenWidth, _screenHeight));
-		_fullScreenOverlayIsDirty = true;
-	}
-}
-
-void OSystem_IPHONE::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) {
-	//printf("setMouseCursor(%i, %i)\n", hotspotX, hotspotY);
-
-	if (_mouseBuf != NULL && (_mouseWidth != w || _mouseHeight != h)) {
-		free(_mouseBuf);
-		_mouseBuf = NULL;
-	}
-
-	if (_mouseBuf == NULL)
-		_mouseBuf = (byte *)malloc(w * h);
-
-	_mouseWidth = w;
-	_mouseHeight = h;
-
-	_mouseHotspotX = hotspotX;
-	_mouseHotspotY = hotspotY;
-
-	_mouseKeyColour = keycolor;
-
-	memcpy(_mouseBuf, buf, w * h);
-
-	_mouseDirty = true;
-}
-
-bool OSystem_IPHONE::pollEvent(Common::Event &event) {
-	//printf("pollEvent()\n");
-
-	long curTime = getMillis();
-
-	if (_timerCallback && (curTime >= _timerCallbackNext)) {
-		_timerCallback(_timerCallbackTimer);
-		_timerCallbackNext = curTime + _timerCallbackTimer;
-	}
-
-	if (_needEventRestPeriod) {
-		// Workaround: Some engines can't handle mouse-down and mouse-up events
-		// appearing right after each other, without a call returning no input in between.
-		_needEventRestPeriod = false;
-		return false;
-	}
-
-	if (_queuedInputEvent.type != (Common::EventType)0) {
-		event = _queuedInputEvent;
-		_queuedInputEvent.type = (Common::EventType)0;
-		return true;
-	}
-
-	int eventType;
-	float xUnit, yUnit;
-
-	if (iPhone_fetchEvent(&eventType, &xUnit, &yUnit)) {
-		int x = 0;
-		int y = 0;
-		switch (_screenOrientation) {
-			case kScreenOrientationPortrait:
-				x = (int)(xUnit * _screenWidth);
-				y = (int)(yUnit * _screenHeight);
-				break;
-			case kScreenOrientationLandscape:
-				x = (int)(yUnit * _screenWidth);
-				y = (int)((1.0 - xUnit) * _screenHeight);
-				break;
-			case kScreenOrientationFlippedLandscape:
-				x = (int)((1.0 - yUnit) * _screenWidth);
-				y = (int)(xUnit * _screenHeight);
-				break;
-		}
-
-		switch ((InputEvent)eventType) {
-			case kInputMouseDown:
-				if (!handleEvent_mouseDown(event, x, y))
-					return false;
-				break;
-
-			case kInputMouseUp:
-			if (!handleEvent_mouseUp(event, x, y))
-				return false;
-				break;
-
-			case kInputMouseDragged:
-				if (!handleEvent_mouseDragged(event, x, y))
-					return false;
-				break;
-			case kInputMouseSecondDragged:
-				if (!handleEvent_mouseSecondDragged(event, x, y))
-					return false;
-				break;
-			case kInputMouseSecondDown:
-				_secondaryTapped = true;
-				if (!handleEvent_secondMouseDown(event, x, y))
-					return false;
-				break;
-			case kInputMouseSecondUp:
-				_secondaryTapped = false;
-				if (!handleEvent_secondMouseUp(event, x, y))
-					return false;
-				break;
-			case kInputOrientationChanged:
-				handleEvent_orientationChanged((int)xUnit);
-				return false;
-				break;
-
-			case kInputApplicationSuspended:
-				suspendLoop();
-				return false;
-				break;
-
-			case kInputKeyPressed:
-				handleEvent_keyPressed(event, (int)xUnit);
-				break;
-
-			case kInputSwipe:
-				if (!handleEvent_swipe(event, (int)xUnit))
-					return false;
-				break;
-
-			default:
-				break;
-		}
-
-		return true;
-	}
-	return false;
-}
-
-bool OSystem_IPHONE::handleEvent_mouseDown(Common::Event &event, int x, int y) {
-	//printf("Mouse down at (%u, %u)\n", x, y);
-
-	// Workaround: kInputMouseSecondToggled isn't always sent when the
-	// secondary finger is lifted. Need to make sure we get out of that mode.
-	_secondaryTapped = false;
-
-	if (_touchpadModeEnabled) {
-		_lastPadX = x;
-		_lastPadY = y;
-	} else
-		warpMouse(x, y);
-
-	if (_mouseClickAndDragEnabled) {
-		event.type = Common::EVENT_LBUTTONDOWN;
-		event.mouse.x = _mouseX;
-		event.mouse.y = _mouseY;
-		return true;
-	} else {
-		_lastMouseDown = getMillis();
-	}
-	return false;
-}
-
-bool OSystem_IPHONE::handleEvent_mouseUp(Common::Event &event, int x, int y) {
-	//printf("Mouse up at (%u, %u)\n", x, y);
-
-	if (_secondaryTapped) {
-		_secondaryTapped = false;
-		if (!handleEvent_secondMouseUp(event, x, y))
-			return false;
-	}
-	else if (_mouseClickAndDragEnabled) {
-		event.type = Common::EVENT_LBUTTONUP;
-		event.mouse.x = _mouseX;
-		event.mouse.y = _mouseY;
-	} else {
-		if (getMillis() - _lastMouseDown < 250) {
-			event.type = Common::EVENT_LBUTTONDOWN;
-			event.mouse.x = _mouseX;
-			event.mouse.y = _mouseY;
-
-			_queuedInputEvent.type = Common::EVENT_LBUTTONUP;
-			_queuedInputEvent.mouse.x = _mouseX;
-			_queuedInputEvent.mouse.y = _mouseY;
-			_lastMouseTap = getMillis();
-			_needEventRestPeriod = true;
-		} else
-			return false;
-	}
-
-	return true;
-}
-
-bool OSystem_IPHONE::handleEvent_secondMouseDown(Common::Event &event, int x, int y) {
-	_lastSecondaryDown = getMillis();
-	_gestureStartX = x;
-	_gestureStartY = y;
-
-	if (_mouseClickAndDragEnabled) {
-		event.type = Common::EVENT_LBUTTONUP;
-		event.mouse.x = _mouseX;
-		event.mouse.y = _mouseY;
-
-		_queuedInputEvent.type = Common::EVENT_RBUTTONDOWN;
-		_queuedInputEvent.mouse.x = _mouseX;
-		_queuedInputEvent.mouse.y = _mouseY;
-	}
-	else
-		return false;
-
-	return true;
-}
-
-bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int y) {
-	int curTime = getMillis();
-
-	if (curTime - _lastSecondaryDown < 400 ) {
-		//printf("Right tap!\n");
-		if (curTime - _lastSecondaryTap < 400 && !_overlayVisible) {
-			//printf("Right escape!\n");
-			event.type = Common::EVENT_KEYDOWN;
-			_queuedInputEvent.type = Common::EVENT_KEYUP;
-
-			event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
-			event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_ESCAPE;
-			event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_ESCAPE;
-			_needEventRestPeriod = true;
-			_lastSecondaryTap = 0;
-		} else if (!_mouseClickAndDragEnabled) {
-			//printf("Rightclick!\n");
-			event.type = Common::EVENT_RBUTTONDOWN;
-			event.mouse.x = _mouseX;
-			event.mouse.y = _mouseY;
-			_queuedInputEvent.type = Common::EVENT_RBUTTONUP;
-			_queuedInputEvent.mouse.x = _mouseX;
-			_queuedInputEvent.mouse.y = _mouseY;
-			_lastSecondaryTap = curTime;
-			_needEventRestPeriod = true;
-		} else {
-			//printf("Right nothing!\n");
-			return false;
-		}
-	}
-	if (_mouseClickAndDragEnabled) {
-		event.type = Common::EVENT_RBUTTONUP;
-		event.mouse.x = _mouseX;
-		event.mouse.y = _mouseY;
-	}
-
-	return true;
-}
-
-bool OSystem_IPHONE::handleEvent_mouseDragged(Common::Event &event, int x, int y) {
-	if (_lastDragPosX == x && _lastDragPosY == y)
-		return false;
-
-	_lastDragPosX = x;
-	_lastDragPosY = y;
-
-	//printf("Mouse dragged at (%u, %u)\n", x, y);
-	int mouseNewPosX;
-	int mouseNewPosY;
-	if (_touchpadModeEnabled ) {
-		int deltaX = _lastPadX - x;
-		int deltaY = _lastPadY - y;
-		_lastPadX = x;
-		_lastPadY = y;
-
-		mouseNewPosX = (int)(_mouseX - deltaX / 0.5f);
-		mouseNewPosY = (int)(_mouseY - deltaY / 0.5f);
-
-		if (mouseNewPosX < 0)
-			mouseNewPosX = 0;
-		else if (mouseNewPosX > _screenWidth)
-			mouseNewPosX = _screenWidth;
-
-		if (mouseNewPosY < 0)
-			mouseNewPosY = 0;
-		else if (mouseNewPosY > _screenHeight)
-			mouseNewPosY = _screenHeight;
-
-	} else {
-		mouseNewPosX = x;
-		mouseNewPosY = y;
-	}
-
-	event.type = Common::EVENT_MOUSEMOVE;
-	event.mouse.x = mouseNewPosX;
-	event.mouse.y = mouseNewPosY;
-	warpMouse(mouseNewPosX, mouseNewPosY);
-
-	return true;
-}
-
-bool OSystem_IPHONE::handleEvent_mouseSecondDragged(Common::Event &event, int x, int y) {
-	if (_gestureStartX == -1 || _gestureStartY == -1) {
-		return false;
-	}
-
-	static const int kNeededLength = 100;
-	static const int kMaxDeviation = 20;
-
-	int vecX = (x - _gestureStartX);
-	int vecY = (y - _gestureStartY);
-	
-	int absX = abs(vecX);
-	int absY = abs(vecY);
-
-	//printf("(%d, %d)\n", vecX, vecY);
-
-	if (absX >= kNeededLength || absY >= kNeededLength) { // Long enough gesture to react upon.
-		_gestureStartX = -1;
-		_gestureStartY = -1;
-
-		if (absX < kMaxDeviation && vecY >= kNeededLength) {
-			// Swipe down
-			event.type = Common::EVENT_KEYDOWN;
-			_queuedInputEvent.type = Common::EVENT_KEYUP;
-
-			event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
-			event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_F5;
-			event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_F5;
-			_needEventRestPeriod = true;
-			return true;
-		}
-		
-		if (absX < kMaxDeviation && -vecY >= kNeededLength) {
-			// Swipe up
-			_mouseClickAndDragEnabled = !_mouseClickAndDragEnabled;
-			const char *dialogMsg;
-			if (_mouseClickAndDragEnabled) {
-				_touchpadModeEnabled = false;
-				dialogMsg = "Mouse-click-and-drag mode enabled.";
-			} else
-				dialogMsg = "Mouse-click-and-drag mode disabled.";
-			GUI::TimedMessageDialog dialog(dialogMsg, 1500);
-			dialog.runModal();
-			return false;
-		}
-		
-		if (absY < kMaxDeviation && vecX >= kNeededLength) {
-			// Swipe right
-			_touchpadModeEnabled = !_touchpadModeEnabled;
-			const char *dialogMsg;
-			if (_touchpadModeEnabled)
-				dialogMsg = "Touchpad mode enabled.";
-			else
-				dialogMsg = "Touchpad mode disabled.";
-			GUI::TimedMessageDialog dialog(dialogMsg, 1500);
-			dialog.runModal();
-			return false;
-
-		}
-		
-		if (absY < kMaxDeviation && -vecX >= kNeededLength) {
-			// Swipe left
-			return false;
-		}
-	}
-
-	return false;
-}
-
-void  OSystem_IPHONE::handleEvent_orientationChanged(int orientation) {
-	//printf("Orientation: %i\n", orientation);
-
-	ScreenOrientation newOrientation;
-	switch (orientation) {
-		case 1:
-			newOrientation = kScreenOrientationPortrait;
-			break;
-		case 3:
-			newOrientation = kScreenOrientationLandscape;
-			break;
-		case 4:
-			newOrientation = kScreenOrientationFlippedLandscape;
-			break;
-		default:
-			return;
-	}
-
-
-	if (_screenOrientation != newOrientation) {
-		_screenOrientation = newOrientation;
-		iPhone_initSurface(_screenWidth, _screenHeight);
-
-		dirtyFullScreen();
-		if (_overlayVisible)
-			dirtyFullOverlayScreen();
-		updateScreen();
-	}
-}
-
-void  OSystem_IPHONE::handleEvent_keyPressed(Common::Event &event, int keyPressed) {
-	int ascii = keyPressed;
-	//printf("key: %i\n", keyPressed);
-
-	// We remap some of the iPhone keyboard keys.
-	// The first ten here are the row of symbols below the numeric keys.
-	switch (keyPressed) {
-		case 45:
-			keyPressed = Common::KEYCODE_F1;
-			ascii = Common::ASCII_F1;
-			break;
-		case 47:
-			keyPressed = Common::KEYCODE_F2;
-			ascii = Common::ASCII_F2;
-			break;
-		case 58:
-			keyPressed = Common::KEYCODE_F3;
-			ascii = Common::ASCII_F3;
-			break;
-		case 59:
-			keyPressed = Common::KEYCODE_F4;
-			ascii = Common::ASCII_F4;
-			break;
-		case 40:
-			keyPressed = Common::KEYCODE_F5;
-			ascii = Common::ASCII_F5;
-			break;
-		case 41:
-			keyPressed = Common::KEYCODE_F6;
-			ascii = Common::ASCII_F6;
-			break;
-		case 36:
-			keyPressed = Common::KEYCODE_F7;
-			ascii = Common::ASCII_F7;
-			break;
-		case 38:
-			keyPressed = Common::KEYCODE_F8;
-			ascii = Common::ASCII_F8;
-			break;
-		case 64:
-			keyPressed = Common::KEYCODE_F9;
-			ascii = Common::ASCII_F9;
-			break;
-		case 34:
-			keyPressed = Common::KEYCODE_F10;
-			ascii = Common::ASCII_F10;
-			break;
-		case 10:
-			keyPressed = Common::KEYCODE_RETURN;
-			ascii = Common::ASCII_RETURN;
-			break;
-	}
-	event.type = Common::EVENT_KEYDOWN;
-	_queuedInputEvent.type = Common::EVENT_KEYUP;
-
-	event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
-	event.kbd.keycode = _queuedInputEvent.kbd.keycode = (Common::KeyCode)keyPressed;
-	event.kbd.ascii = _queuedInputEvent.kbd.ascii = ascii;
-	_needEventRestPeriod = true;
-}
-
-bool OSystem_IPHONE::handleEvent_swipe(Common::Event &event, int direction) {
-	Common::KeyCode keycode = Common::KEYCODE_INVALID;
-	switch (_screenOrientation) {
-		case kScreenOrientationPortrait:
-			switch ((UIViewSwipeDirection)direction) {
-				case kUIViewSwipeUp:
-					keycode = Common::KEYCODE_UP;
-					break;
-				case kUIViewSwipeDown:
-					keycode = Common::KEYCODE_DOWN;
-					break;
-				case kUIViewSwipeLeft:
-					keycode = Common::KEYCODE_LEFT;
-					break;
-				case kUIViewSwipeRight:
-					keycode = Common::KEYCODE_RIGHT;
-					break;
-				default:
-					return false;
-			}
-			break;
-		case kScreenOrientationLandscape:
-			switch ((UIViewSwipeDirection)direction) {
-				case kUIViewSwipeUp:
-					keycode = Common::KEYCODE_LEFT;
-					break;
-				case kUIViewSwipeDown:
-					keycode = Common::KEYCODE_RIGHT;
-					break;
-				case kUIViewSwipeLeft:
-					keycode = Common::KEYCODE_DOWN;
-					break;
-				case kUIViewSwipeRight:
-					keycode = Common::KEYCODE_UP;
-					break;
-				default:
-					return false;
-			}
-			break;
-		case kScreenOrientationFlippedLandscape:
-			switch ((UIViewSwipeDirection)direction) {
-				case kUIViewSwipeUp:
-					keycode = Common::KEYCODE_RIGHT;
-					break;
-				case kUIViewSwipeDown:
-					keycode = Common::KEYCODE_LEFT;
-					break;
-				case kUIViewSwipeLeft:
-					keycode = Common::KEYCODE_UP;
-					break;
-				case kUIViewSwipeRight:
-					keycode = Common::KEYCODE_DOWN;
-					break;
-				default:
-					return false;
-			}
-			break;
-	}
-
-	event.kbd.keycode = _queuedInputEvent.kbd.keycode = keycode;
-	event.kbd.ascii = _queuedInputEvent.kbd.ascii = 0;
-	event.type = Common::EVENT_KEYDOWN;
-	_queuedInputEvent.type = Common::EVENT_KEYUP;
-	event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
-	_needEventRestPeriod = true;
-
-	return true;
-}
-
-void OSystem_IPHONE::suspendLoop() {
-	bool done = false;
-	int eventType;
-	float xUnit, yUnit;
-	uint32 startTime = getMillis();
-
-	stopSoundsystem();
-
-	while (!done) {
-		if (iPhone_fetchEvent(&eventType, &xUnit, &yUnit))
-			if ((InputEvent)eventType == kInputApplicationResumed)
-				done = true;
-		usleep(100000);
-	}
-
-	startSoundsystem();
-
-	_timeSuspended += getMillis() - startTime;
-}
-
-uint32 OSystem_IPHONE::getMillis() {
-	//printf("getMillis()\n");
-
-	struct timeval currentTime;
-	gettimeofday(&currentTime, NULL);
-	return (uint32)(((currentTime.tv_sec - _startTime.tv_sec) * 1000) +
-	                ((currentTime.tv_usec - _startTime.tv_usec) / 1000)) - _timeSuspended;
-}
-
-void OSystem_IPHONE::delayMillis(uint msecs) {
-	//printf("delayMillis(%d)\n", msecs);
-	usleep(msecs * 1000);
-}
-
-OSystem::MutexRef OSystem_IPHONE::createMutex(void) {
-	pthread_mutexattr_t attr;
-	pthread_mutexattr_init(&attr);
-	pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-
-	pthread_mutex_t *mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
-	if (pthread_mutex_init(mutex, &attr) != 0) {
-		printf("pthread_mutex_init() failed!\n");
-		free(mutex);
-		return NULL;
-	}
-
-	return (MutexRef)mutex;
-}
-
-void OSystem_IPHONE::lockMutex(MutexRef mutex) {
-	if (pthread_mutex_lock((pthread_mutex_t *) mutex) != 0) {
-		printf("pthread_mutex_lock() failed!\n");
-	}
-}
-
-void OSystem_IPHONE::unlockMutex(MutexRef mutex) {
-	if (pthread_mutex_unlock((pthread_mutex_t *) mutex) != 0) {
-		printf("pthread_mutex_unlock() failed!\n");
-	}
-}
-
-void OSystem_IPHONE::deleteMutex(MutexRef mutex) {
-	if (pthread_mutex_destroy((pthread_mutex_t *) mutex) != 0) {
-		printf("pthread_mutex_destroy() failed!\n");
-	} else {
-		free(mutex);
-	}
-}
-
-void OSystem_IPHONE::AQBufferCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB) {
-	//printf("AQBufferCallback()\n");
-	if (s_AudioQueue.frameCount > 0 && s_soundCallback != NULL) {
-		outQB->mAudioDataByteSize = 4 * s_AudioQueue.frameCount;
-		s_soundCallback(s_soundParam, (byte *)outQB->mAudioData, outQB->mAudioDataByteSize);
-		AudioQueueEnqueueBuffer(inQ, outQB, 0, NULL);
-	} else {
-		AudioQueueStop(s_AudioQueue.queue, false);
-	}
-}
-
-void OSystem_IPHONE::mixCallback(void *sys, byte *samples, int len) {
-	OSystem_IPHONE *this_ = (OSystem_IPHONE *)sys;
-	assert(this_);
-
-	if (this_->_mixer) {
-		this_->_mixer->mixCallback(samples, len);
-	}
-}
-
-void OSystem_IPHONE::setupMixer() {
-	//printf("setSoundCallback()\n");
-	_mixer = new Audio::MixerImpl(this);
-
-	s_soundCallback = mixCallback;
-	s_soundParam = this;
-
-	startSoundsystem();
-}
-
-void OSystem_IPHONE::startSoundsystem() {
-	s_AudioQueue.dataFormat.mSampleRate = AUDIO_SAMPLE_RATE;
-	s_AudioQueue.dataFormat.mFormatID = kAudioFormatLinearPCM;
-	s_AudioQueue.dataFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
-	s_AudioQueue.dataFormat.mBytesPerPacket = 4;
-	s_AudioQueue.dataFormat.mFramesPerPacket = 1;
-	s_AudioQueue.dataFormat.mBytesPerFrame = 4;
-	s_AudioQueue.dataFormat.mChannelsPerFrame = 2;
-	s_AudioQueue.dataFormat.mBitsPerChannel = 16;
-	s_AudioQueue.frameCount = WAVE_BUFFER_SIZE;
-
-	if (AudioQueueNewOutput(&s_AudioQueue.dataFormat, AQBufferCallback, &s_AudioQueue, 0, kCFRunLoopCommonModes, 0, &s_AudioQueue.queue)) {
-		printf("Couldn't set the AudioQueue callback!\n");
-		_mixer->setReady(false);
-		return;
-	}
-
-	uint32 bufferBytes = s_AudioQueue.frameCount * s_AudioQueue.dataFormat.mBytesPerFrame;
-
-	for (int i = 0; i < AUDIO_BUFFERS; i++) {
-		if (AudioQueueAllocateBuffer(s_AudioQueue.queue, bufferBytes, &s_AudioQueue.buffers[i])) {
-			printf("Error allocating AudioQueue buffer!\n");
-			_mixer->setReady(false);
-			return;
-		}
-
-		AQBufferCallback(&s_AudioQueue, s_AudioQueue.queue, s_AudioQueue.buffers[i]);
-	}
-
-	AudioQueueSetParameter(s_AudioQueue.queue, kAudioQueueParam_Volume, 1.0);
-	if (AudioQueueStart(s_AudioQueue.queue, NULL)) {
-		printf("Error starting the AudioQueue!\n");
-		_mixer->setReady(false);
-		return;
-	}
-
-	_mixer->setOutputRate(AUDIO_SAMPLE_RATE);
-	_mixer->setReady(true);
-}
-
-void OSystem_IPHONE::stopSoundsystem() {
-	AudioQueueStop(s_AudioQueue.queue, true);
-
-	for (int i = 0; i < AUDIO_BUFFERS; i++) {
-		AudioQueueFreeBuffer(s_AudioQueue.queue, s_AudioQueue.buffers[i]);
-	}
-
-	AudioQueueDispose(s_AudioQueue.queue, true);
-	_mixer->setReady(false);
-}
-
-int OSystem_IPHONE::getOutputSampleRate() const {
-	return AUDIO_SAMPLE_RATE;
-}
-
-void OSystem_IPHONE::setTimerCallback(TimerProc callback, int interval) {
-	//printf("setTimerCallback()\n");
-
-	if (callback != NULL) {
-		_timerCallbackTimer = interval;
-		_timerCallbackNext = getMillis() + interval;
-		_timerCallback = callback;
-	} else
-		_timerCallback = NULL;
-}
-
-void OSystem_IPHONE::quit() {
-}
-
-void OSystem_IPHONE::getTimeAndDate(struct tm &t) const {
-	time_t curTime = time(0);
-	t = *localtime(&curTime);
-}
-
-Common::SaveFileManager *OSystem_IPHONE::getSavefileManager() {
-	assert(_savefile);
-	return _savefile;
-}
-
-Audio::Mixer *OSystem_IPHONE::getMixer() {
-	assert(_mixer);
-	return _mixer;
-}
-
-Common::TimerManager *OSystem_IPHONE::getTimerManager() {
-	assert(_timer);
-	return _timer;
-}
-
-OSystem *OSystem_IPHONE_create() {
-	return new OSystem_IPHONE();
-}
-
-Common::SeekableReadStream *OSystem_IPHONE::createConfigReadStream() {
-#ifdef IPHONE_OFFICIAL
-	char buf[256];
-	strncpy(buf, iPhone_getDocumentsDir(), 256);
-	strncat(buf, "/Preferences", 256 - strlen(buf) );
-	Common::FSNode file(buf);
-#else
-	Common::FSNode file(SCUMMVM_PREFS_PATH);
-#endif
-	return file.createReadStream();
-}
-
-Common::WriteStream *OSystem_IPHONE::createConfigWriteStream() {
-#ifdef IPHONE_OFFICIAL
-	char buf[256];
-	strncpy(buf, iPhone_getDocumentsDir(), 256);
-	strncat(buf, "/Preferences", 256 - strlen(buf) );
-	Common::FSNode file(buf);
-#else
-	Common::FSNode file(SCUMMVM_PREFS_PATH);
-#endif
-	return file.createWriteStream();
-}
-
-void OSystem_IPHONE::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
-	// Get URL of the Resource directory of the .app bundle
-	CFURLRef fileUrl = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
-	if (fileUrl) {
-		// Try to convert the URL to an absolute path
-		UInt8 buf[MAXPATHLEN];
-		if (CFURLGetFileSystemRepresentation(fileUrl, true, buf, sizeof(buf))) {
-			// Success: Add it to the search path
-			Common::String bundlePath((const char *)buf);
-			s.add("__OSX_BUNDLE__", new Common::FSDirectory(bundlePath), priority);
-		}
-		CFRelease(fileUrl);
-	}
-}
-
-void iphone_main(int argc, char *argv[]) {
-
-	//OSystem_IPHONE::migrateApp();
-
-	FILE *newfp = fopen("/var/mobile/.scummvm.log", "a");
-	if (newfp != NULL) {
-		fclose(stdout);
-		fclose(stderr);
-		*stdout = *newfp;
-		*stderr = *newfp;
-		setbuf(stdout, NULL);
-		setbuf(stderr, NULL);
-
-		//extern int gDebugLevel;
-		//gDebugLevel = 10;
-	}
-
-#ifdef IPHONE_OFFICIAL
-	chdir( iPhone_getDocumentsDir() );
-#else
-	system("mkdir " SCUMMVM_ROOT_PATH);
-	system("mkdir " SCUMMVM_SAVE_PATH);
-
-	chdir("/var/mobile/");
-#endif
-
-	g_system = OSystem_IPHONE_create();
-	assert(g_system);
-
-	// Invoke the actual ScummVM main entry point:
-	scummvm_main(argc, argv);
-	g_system->quit();       // TODO: Consider removing / replacing this!
-}

Deleted: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.h	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_iphone.h	2009-07-18 00:53:31 UTC (rev 42576)
@@ -1,209 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program 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 General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "graphics/surface.h"
-#include "iphone_common.h"
-#include "backends/base-backend.h"
-#include "common/events.h"
-#include "sound/mixer_intern.h"
-#include "backends/fs/posix/posix-fs-factory.h"
-#include "graphics/colormasks.h"
-
-#include <AudioToolbox/AudioQueue.h>
-
-#define AUDIO_BUFFERS 3
-#define WAVE_BUFFER_SIZE 2048
-#define AUDIO_SAMPLE_RATE 44100
-
-#define SCUMMVM_ROOT_PATH "/var/mobile/Library/ScummVM"
-#define SCUMMVM_SAVE_PATH SCUMMVM_ROOT_PATH "/Savegames"
-#define SCUMMVM_PREFS_PATH SCUMMVM_ROOT_PATH "/Preferences"
-
-typedef void (*SoundProc)(void *param, byte *buf, int len);
-typedef int (*TimerProc)(int interval);
-
-typedef struct AQCallbackStruct {
-    AudioQueueRef queue;
-    uint32 frameCount;
-    AudioQueueBufferRef buffers[AUDIO_BUFFERS];
-    AudioStreamBasicDescription dataFormat;
-} AQCallbackStruct;
-
-class OSystem_IPHONE : public BaseBackend {
-protected:
-
-	static const OSystem::GraphicsMode s_supportedGraphicsModes[];
-	static AQCallbackStruct s_AudioQueue;
-	static SoundProc s_soundCallback;
-	static void *s_soundParam;
-
-	Common::SaveFileManager *_savefile;
-	Audio::MixerImpl *_mixer;
-	Common::TimerManager *_timer;
-
-	Graphics::Surface _framebuffer;
-	byte *_offscreen;
-	OverlayColor  *_overlayBuffer;
-	uint16 *_fullscreen;
-
-	uint16  _palette[256];
-	bool _overlayVisible;
-	uint16 _screenWidth;
-	uint16 _screenHeight;
-
-	struct timeval _startTime;
-	uint32 _timeSuspended;
-
-	bool _mouseVisible;
-	byte *_mouseBuf;
-	byte _mouseKeyColour;
-	uint _mouseWidth, _mouseHeight;
-	uint _mouseX, _mouseY;
-	int _mouseHotspotX, _mouseHotspotY;
-	bool _mouseDirty;
-	long _lastMouseDown;
-	long _lastMouseTap;
-	Common::Rect _lastDrawnMouseRect;
-	Common::Event _queuedInputEvent;
-	bool _needEventRestPeriod;
-	bool _secondaryTapped;
-	long _lastSecondaryDown;
-	long _lastSecondaryTap;
-	int _gestureStartX, _gestureStartY;
-	bool _mouseClickAndDragEnabled;
-	bool _touchpadModeEnabled;
-	int _lastPadX;
-	int _lastPadY;
-	int _lastDragPosX;
-	int _lastDragPosY;
-
-	int _timerCallbackNext;
-	int _timerCallbackTimer;
-	TimerProc _timerCallback;
-
-	Common::Array<Common::Rect> _dirtyRects;
-	Common::Array<Common::Rect> _dirtyOverlayRects;
-	ScreenOrientation _screenOrientation;
-	bool _fullScreenIsDirty;
-	bool _fullScreenOverlayIsDirty;
-	int _screenChangeCount;
-	FilesystemFactory *_fsFactory;
-
-public:
-
-	OSystem_IPHONE();
-	virtual ~OSystem_IPHONE();
-
-	virtual void initBackend();
-
-	virtual bool hasFeature(Feature f);
-	virtual void setFeatureState(Feature f, bool enable);
-	virtual bool getFeatureState(Feature f);
-	virtual const GraphicsMode *getSupportedGraphicsModes() const;
-	virtual int getDefaultGraphicsMode() const;
-	bool setGraphicsMode(const char *name);
-	virtual bool setGraphicsMode(int mode);
-	virtual int getGraphicsMode() const;
-	virtual void initSize(uint width, uint height);
-	virtual int16 getHeight();
-	virtual int16 getWidth();
-	virtual void setPalette(const byte *colors, uint start, uint num);
-	virtual void grabPalette(byte *colors, uint start, uint num);
-	virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
-	virtual void updateScreen();
-	virtual Graphics::Surface *lockScreen();
-	virtual void unlockScreen();
-	virtual void setShakePos(int shakeOffset);
-
-	virtual void showOverlay();
-	virtual void hideOverlay();
-	virtual void clearOverlay();
-	virtual void grabOverlay(OverlayColor *buf, int pitch);
-	virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
-	virtual int16 getOverlayHeight();
-	virtual int16 getOverlayWidth();
-	virtual Graphics::PixelFormat getOverlayFormat() const { return Graphics::createPixelFormat<565>(); }
-
-	virtual bool showMouse(bool visible);
-
-	virtual void warpMouse(int x, int y);
-	virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1);
-
-	virtual bool pollEvent(Common::Event &event);
-	virtual uint32 getMillis();
-	virtual void delayMillis(uint msecs);
-
-	virtual MutexRef createMutex(void);
-	virtual void lockMutex(MutexRef mutex);
-	virtual void unlockMutex(MutexRef mutex);
-	virtual void deleteMutex(MutexRef mutex);
-
-	static void mixCallback(void *sys, byte *samples, int len);
-	virtual void setupMixer(void);
-	virtual int getOutputSampleRate() const;
-	virtual void setTimerCallback(TimerProc callback, int interval);
- 	virtual int getScreenChangeID() const { return _screenChangeCount; }
-	virtual void quit();
-
-	FilesystemFactory *getFilesystemFactory() { return _fsFactory; }
-	virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
-	virtual void getTimeAndDate(struct tm &t) const;
-
-	virtual Common::SaveFileManager *getSavefileManager();
-	virtual Audio::Mixer *getMixer();
-	virtual Common::TimerManager *getTimerManager();
-
-	void startSoundsystem();
-	void stopSoundsystem();
-
-	virtual Common::SeekableReadStream *createConfigReadStream();
-	virtual Common::WriteStream *createConfigWriteStream();
-
-protected:
-	void internUpdateScreen();
-	void dirtyFullScreen();
-	void dirtyFullOverlayScreen();
-	void clipRectToScreen(int16 &x, int16 &y, int16 &w, int16 &h);
-	void suspendLoop();
-	void drawDirtyRect(const Common::Rect& dirtyRect);
-	void drawDirtyOverlayRect(const Common::Rect& dirtyRect);
-	void drawMouseCursorOnRectUpdate(const Common::Rect& updatedRect, const Common::Rect& mouseRect);
-	void updateHardwareSurfaceForRect(const Common::Rect& updatedRect);
-	static void AQBufferCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB);
-	static int timerHandler(int t);
-
-	bool handleEvent_swipe(Common::Event &event, int direction);
-	void handleEvent_keyPressed(Common::Event &event, int keyPressed);
-	void handleEvent_orientationChanged(int orientation);
-
-	bool handleEvent_mouseDown(Common::Event &event, int x, int y);
-	bool handleEvent_mouseUp(Common::Event &event, int x, int y);
-
-	bool handleEvent_secondMouseDown(Common::Event &event, int x, int y);
-	bool handleEvent_secondMouseUp(Common::Event &event, int x, int y);
-
-	bool handleEvent_mouseDragged(Common::Event &event, int x, int y);
-	bool handleEvent_mouseSecondDragged(Common::Event &event, int x, int y);
-};

Copied: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.cpp (from rev 42572, scummvm/trunk/backends/platform/iphone/osys_main.cpp)
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.cpp	2009-07-18 00:53:31 UTC (rev 42576)
@@ -0,0 +1,296 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include <unistd.h>
+#include <pthread.h>
+
+#include <sys/time.h>
+
+#include "common/scummsys.h"
+#include "common/util.h"
+#include "common/rect.h"
+#include "common/file.h"
+#include "common/fs.h"
+
+#include "base/main.h"
+
+#include "backends/saves/default/default-saves.h"
+#include "backends/timer/default/default-timer.h"
+#include "sound/mixer.h"
+#include "sound/mixer_intern.h"
+
+#include "osys_main.h"
+
+
+const OSystem::GraphicsMode OSystem_IPHONE::s_supportedGraphicsModes[] = {
+	{0, 0, 0}
+};
+
+AQCallbackStruct OSystem_IPHONE::s_AudioQueue;
+SoundProc OSystem_IPHONE::s_soundCallback = NULL;
+void *OSystem_IPHONE::s_soundParam = NULL;
+
+OSystem_IPHONE::OSystem_IPHONE() :
+	_savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL),
+	_overlayVisible(false), _overlayBuffer(NULL), _fullscreen(NULL),
+	_mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0),
+	_secondaryTapped(false), _lastSecondaryTap(0), _screenOrientation(kScreenOrientationFlippedLandscape),
+	_needEventRestPeriod(false), _mouseClickAndDragEnabled(false), _touchpadModeEnabled(true),
+	_gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false),
+	_mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0)
+
+{
+	_queuedInputEvent.type = (Common::EventType)0;
+	_lastDrawnMouseRect = Common::Rect(0, 0, 0, 0);
+
+	_fsFactory = new POSIXFilesystemFactory();
+}
+
+OSystem_IPHONE::~OSystem_IPHONE() {
+	AudioQueueDispose(s_AudioQueue.queue, true);
+
+	delete _fsFactory;
+	delete _savefile;
+	delete _mixer;
+	delete _timer;
+	delete _offscreen;
+	delete _fullscreen;
+}
+
+int OSystem_IPHONE::timerHandler(int t) {
+	DefaultTimerManager *tm = (DefaultTimerManager *)g_system->getTimerManager();
+	tm->handler();
+	return t;
+}
+
+void OSystem_IPHONE::initBackend() {
+#ifdef IPHONE_OFFICIAL
+	_savefile = new DefaultSaveFileManager(iPhone_getDocumentsDir());
+#else
+	_savefile = new DefaultSaveFileManager(SCUMMVM_SAVE_PATH);
+#endif
+
+	_timer = new DefaultTimerManager();
+
+	gettimeofday(&_startTime, NULL);
+
+	setupMixer();
+
+	setTimerCallback(&OSystem_IPHONE::timerHandler, 10);
+
+	OSystem::initBackend();
+}
+
+bool OSystem_IPHONE::hasFeature(Feature f) {
+	return false;
+}
+
+void OSystem_IPHONE::setFeatureState(Feature f, bool enable) {
+}
+
+bool OSystem_IPHONE::getFeatureState(Feature f) {
+	return false;
+}
+
+void OSystem_IPHONE::suspendLoop() {
+	bool done = false;
+	int eventType;
+	float xUnit, yUnit;
+	uint32 startTime = getMillis();
+
+	stopSoundsystem();
+
+	while (!done) {
+		if (iPhone_fetchEvent(&eventType, &xUnit, &yUnit))
+			if ((InputEvent)eventType == kInputApplicationResumed)
+				done = true;
+		usleep(100000);
+	}
+
+	startSoundsystem();
+
+	_timeSuspended += getMillis() - startTime;
+}
+
+uint32 OSystem_IPHONE::getMillis() {
+	//printf("getMillis()\n");
+
+	struct timeval currentTime;
+	gettimeofday(&currentTime, NULL);
+	return (uint32)(((currentTime.tv_sec - _startTime.tv_sec) * 1000) +
+	                ((currentTime.tv_usec - _startTime.tv_usec) / 1000)) - _timeSuspended;
+}
+
+void OSystem_IPHONE::delayMillis(uint msecs) {
+	//printf("delayMillis(%d)\n", msecs);
+	usleep(msecs * 1000);
+}
+
+OSystem::MutexRef OSystem_IPHONE::createMutex(void) {
+	pthread_mutexattr_t attr;
+	pthread_mutexattr_init(&attr);
+	pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+
+	pthread_mutex_t *mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
+	if (pthread_mutex_init(mutex, &attr) != 0) {
+		printf("pthread_mutex_init() failed!\n");
+		free(mutex);
+		return NULL;
+	}
+
+	return (MutexRef)mutex;
+}
+
+void OSystem_IPHONE::lockMutex(MutexRef mutex) {
+	if (pthread_mutex_lock((pthread_mutex_t *) mutex) != 0) {
+		printf("pthread_mutex_lock() failed!\n");
+	}
+}
+
+void OSystem_IPHONE::unlockMutex(MutexRef mutex) {
+	if (pthread_mutex_unlock((pthread_mutex_t *) mutex) != 0) {
+		printf("pthread_mutex_unlock() failed!\n");
+	}
+}
+
+void OSystem_IPHONE::deleteMutex(MutexRef mutex) {
+	if (pthread_mutex_destroy((pthread_mutex_t *) mutex) != 0) {
+		printf("pthread_mutex_destroy() failed!\n");
+	} else {
+		free(mutex);
+	}
+}
+
+
+void OSystem_IPHONE::setTimerCallback(TimerProc callback, int interval) {
+	//printf("setTimerCallback()\n");
+
+	if (callback != NULL) {
+		_timerCallbackTimer = interval;
+		_timerCallbackNext = getMillis() + interval;
+		_timerCallback = callback;
+	} else
+		_timerCallback = NULL;
+}
+
+void OSystem_IPHONE::quit() {
+}
+
+void OSystem_IPHONE::getTimeAndDate(struct tm &t) const {
+	time_t curTime = time(0);
+	t = *localtime(&curTime);
+}
+
+Common::SaveFileManager *OSystem_IPHONE::getSavefileManager() {
+	assert(_savefile);
+	return _savefile;
+}
+
+Audio::Mixer *OSystem_IPHONE::getMixer() {
+	assert(_mixer);
+	return _mixer;
+}
+
+Common::TimerManager *OSystem_IPHONE::getTimerManager() {
+	assert(_timer);
+	return _timer;
+}
+
+OSystem *OSystem_IPHONE_create() {
+	return new OSystem_IPHONE();
+}
+
+Common::SeekableReadStream *OSystem_IPHONE::createConfigReadStream() {
+#ifdef IPHONE_OFFICIAL
+	char buf[256];
+	strncpy(buf, iPhone_getDocumentsDir(), 256);
+	strncat(buf, "/Preferences", 256 - strlen(buf) );
+	Common::FSNode file(buf);
+#else
+	Common::FSNode file(SCUMMVM_PREFS_PATH);
+#endif
+	return file.createReadStream();
+}
+
+Common::WriteStream *OSystem_IPHONE::createConfigWriteStream() {
+#ifdef IPHONE_OFFICIAL
+	char buf[256];
+	strncpy(buf, iPhone_getDocumentsDir(), 256);
+	strncat(buf, "/Preferences", 256 - strlen(buf) );
+	Common::FSNode file(buf);
+#else
+	Common::FSNode file(SCUMMVM_PREFS_PATH);
+#endif
+	return file.createWriteStream();
+}
+
+void OSystem_IPHONE::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
+	// Get URL of the Resource directory of the .app bundle
+	CFURLRef fileUrl = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
+	if (fileUrl) {
+		// Try to convert the URL to an absolute path
+		UInt8 buf[MAXPATHLEN];
+		if (CFURLGetFileSystemRepresentation(fileUrl, true, buf, sizeof(buf))) {
+			// Success: Add it to the search path
+			Common::String bundlePath((const char *)buf);
+			s.add("__OSX_BUNDLE__", new Common::FSDirectory(bundlePath), priority);
+		}
+		CFRelease(fileUrl);
+	}
+}
+
+void iphone_main(int argc, char *argv[]) {
+
+	//OSystem_IPHONE::migrateApp();
+
+	FILE *newfp = fopen("/var/mobile/.scummvm.log", "a");
+	if (newfp != NULL) {
+		fclose(stdout);
+		fclose(stderr);
+		*stdout = *newfp;
+		*stderr = *newfp;
+		setbuf(stdout, NULL);
+		setbuf(stderr, NULL);
+
+		//extern int gDebugLevel;
+		//gDebugLevel = 10;
+	}
+
+#ifdef IPHONE_OFFICIAL
+	chdir( iPhone_getDocumentsDir() );
+#else
+	system("mkdir " SCUMMVM_ROOT_PATH);
+	system("mkdir " SCUMMVM_SAVE_PATH);
+
+	chdir("/var/mobile/");
+#endif
+
+	g_system = OSystem_IPHONE_create();
+	assert(g_system);
+
+	// Invoke the actual ScummVM main entry point:
+	scummvm_main(argc, argv);
+	g_system->quit();       // TODO: Consider removing / replacing this!
+}

Copied: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.h (from rev 42572, scummvm/trunk/backends/platform/iphone/osys_main.h)
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.h	                        (rev 0)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_main.h	2009-07-18 00:53:31 UTC (rev 42576)
@@ -0,0 +1,209 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "graphics/surface.h"
+#include "iphone_common.h"
+#include "backends/base-backend.h"
+#include "common/events.h"
+#include "sound/mixer_intern.h"
+#include "backends/fs/posix/posix-fs-factory.h"
+#include "graphics/colormasks.h"
+
+#include <AudioToolbox/AudioQueue.h>
+
+#define AUDIO_BUFFERS 3
+#define WAVE_BUFFER_SIZE 2048
+#define AUDIO_SAMPLE_RATE 44100
+
+#define SCUMMVM_ROOT_PATH "/var/mobile/Library/ScummVM"
+#define SCUMMVM_SAVE_PATH SCUMMVM_ROOT_PATH "/Savegames"
+#define SCUMMVM_PREFS_PATH SCUMMVM_ROOT_PATH "/Preferences"
+
+typedef void (*SoundProc)(void *param, byte *buf, int len);
+typedef int (*TimerProc)(int interval);
+
+typedef struct AQCallbackStruct {
+    AudioQueueRef queue;
+    uint32 frameCount;
+    AudioQueueBufferRef buffers[AUDIO_BUFFERS];
+    AudioStreamBasicDescription dataFormat;
+} AQCallbackStruct;
+
+class OSystem_IPHONE : public BaseBackend {
+protected:
+
+	static const OSystem::GraphicsMode s_supportedGraphicsModes[];
+	static AQCallbackStruct s_AudioQueue;
+	static SoundProc s_soundCallback;
+	static void *s_soundParam;
+
+	Common::SaveFileManager *_savefile;
+	Audio::MixerImpl *_mixer;
+	Common::TimerManager *_timer;
+
+	Graphics::Surface _framebuffer;
+	byte *_offscreen;
+	OverlayColor  *_overlayBuffer;
+	uint16 *_fullscreen;
+
+	uint16  _palette[256];
+	bool _overlayVisible;
+	uint16 _screenWidth;
+	uint16 _screenHeight;
+
+	struct timeval _startTime;
+	uint32 _timeSuspended;
+
+	bool _mouseVisible;
+	byte *_mouseBuf;
+	byte _mouseKeyColour;
+	uint _mouseWidth, _mouseHeight;
+	uint _mouseX, _mouseY;
+	int _mouseHotspotX, _mouseHotspotY;
+	bool _mouseDirty;
+	long _lastMouseDown;
+	long _lastMouseTap;
+	Common::Rect _lastDrawnMouseRect;
+	Common::Event _queuedInputEvent;
+	bool _needEventRestPeriod;
+	bool _secondaryTapped;
+	long _lastSecondaryDown;
+	long _lastSecondaryTap;
+	int _gestureStartX, _gestureStartY;
+	bool _mouseClickAndDragEnabled;
+	bool _touchpadModeEnabled;
+	int _lastPadX;
+	int _lastPadY;
+	int _lastDragPosX;
+	int _lastDragPosY;
+
+	int _timerCallbackNext;
+	int _timerCallbackTimer;
+	TimerProc _timerCallback;
+
+	Common::Array<Common::Rect> _dirtyRects;
+	Common::Array<Common::Rect> _dirtyOverlayRects;
+	ScreenOrientation _screenOrientation;
+	bool _fullScreenIsDirty;
+	bool _fullScreenOverlayIsDirty;
+	int _screenChangeCount;
+	FilesystemFactory *_fsFactory;
+
+public:
+
+	OSystem_IPHONE();
+	virtual ~OSystem_IPHONE();
+
+	virtual void initBackend();
+
+	virtual bool hasFeature(Feature f);
+	virtual void setFeatureState(Feature f, bool enable);
+	virtual bool getFeatureState(Feature f);
+	virtual const GraphicsMode *getSupportedGraphicsModes() const;
+	virtual int getDefaultGraphicsMode() const;
+	bool setGraphicsMode(const char *name);
+	virtual bool setGraphicsMode(int mode);
+	virtual int getGraphicsMode() const;
+	virtual void initSize(uint width, uint height);
+	virtual int16 getHeight();
+	virtual int16 getWidth();
+	virtual void setPalette(const byte *colors, uint start, uint num);
+	virtual void grabPalette(byte *colors, uint start, uint num);
+	virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
+	virtual void updateScreen();
+	virtual Graphics::Surface *lockScreen();
+	virtual void unlockScreen();
+	virtual void setShakePos(int shakeOffset);
+
+	virtual void showOverlay();
+	virtual void hideOverlay();
+	virtual void clearOverlay();
+	virtual void grabOverlay(OverlayColor *buf, int pitch);
+	virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
+	virtual int16 getOverlayHeight();
+	virtual int16 getOverlayWidth();
+	virtual Graphics::PixelFormat getOverlayFormat() const { return Graphics::createPixelFormat<565>(); }
+
+	virtual bool showMouse(bool visible);
+
+	virtual void warpMouse(int x, int y);
+	virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1);
+
+	virtual bool pollEvent(Common::Event &event);
+	virtual uint32 getMillis();
+	virtual void delayMillis(uint msecs);
+
+	virtual MutexRef createMutex(void);
+	virtual void lockMutex(MutexRef mutex);
+	virtual void unlockMutex(MutexRef mutex);
+	virtual void deleteMutex(MutexRef mutex);
+
+	static void mixCallback(void *sys, byte *samples, int len);
+	virtual void setupMixer(void);
+	virtual int getOutputSampleRate() const;
+	virtual void setTimerCallback(TimerProc callback, int interval);
+ 	virtual int getScreenChangeID() const { return _screenChangeCount; }
+	virtual void quit();
+
+	FilesystemFactory *getFilesystemFactory() { return _fsFactory; }
+	virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
+	virtual void getTimeAndDate(struct tm &t) const;
+
+	virtual Common::SaveFileManager *getSavefileManager();
+	virtual Audio::Mixer *getMixer();
+	virtual Common::TimerManager *getTimerManager();
+
+	void startSoundsystem();
+	void stopSoundsystem();
+
+	virtual Common::SeekableReadStream *createConfigReadStream();
+	virtual Common::WriteStream *createConfigWriteStream();
+
+protected:
+	void internUpdateScreen();
+	void dirtyFullScreen();
+	void dirtyFullOverlayScreen();
+	void clipRectToScreen(int16 &x, int16 &y, int16 &w, int16 &h);
+	void suspendLoop();
+	void drawDirtyRect(const Common::Rect& dirtyRect);
+	void drawDirtyOverlayRect(const Common::Rect& dirtyRect);
+	void drawMouseCursorOnRectUpdate(const Common::Rect& updatedRect, const Common::Rect& mouseRect);
+	void updateHardwareSurfaceForRect(const Common::Rect& updatedRect);
+	static void AQBufferCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB);
+	static int timerHandler(int t);
+
+	bool handleEvent_swipe(Common::Event &event, int direction);
+	void handleEvent_keyPressed(Common::Event &event, int keyPressed);
+	void handleEvent_orientationChanged(int orientation);
+
+	bool handleEvent_mouseDown(Common::Event &event, int x, int y);
+	bool handleEvent_mouseUp(Common::Event &event, int x, int y);
+
+	bool handleEvent_secondMouseDown(Common::Event &event, int x, int y);
+	bool handleEvent_secondMouseUp(Common::Event &event, int x, int y);
+
+	bool handleEvent_mouseDragged(Common::Event &event, int x, int y);
+	bool handleEvent_mouseSecondDragged(Common::Event &event, int x, int y);
+};

Copied: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_sound.cpp (from rev 42572, scummvm/trunk/backends/platform/iphone/osys_sound.cpp)
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_sound.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_sound.cpp	2009-07-18 00:53:31 UTC (rev 42576)
@@ -0,0 +1,111 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "osys_main.h"
+
+void OSystem_IPHONE::AQBufferCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB) {
+	//printf("AQBufferCallback()\n");
+	if (s_AudioQueue.frameCount > 0 && s_soundCallback != NULL) {
+		outQB->mAudioDataByteSize = 4 * s_AudioQueue.frameCount;
+		s_soundCallback(s_soundParam, (byte *)outQB->mAudioData, outQB->mAudioDataByteSize);
+		AudioQueueEnqueueBuffer(inQ, outQB, 0, NULL);
+	} else {
+		AudioQueueStop(s_AudioQueue.queue, false);
+	}
+}
+
+void OSystem_IPHONE::mixCallback(void *sys, byte *samples, int len) {
+	OSystem_IPHONE *this_ = (OSystem_IPHONE *)sys;
+	assert(this_);
+
+	if (this_->_mixer) {
+		this_->_mixer->mixCallback(samples, len);
+	}
+}
+
+void OSystem_IPHONE::setupMixer() {
+	//printf("setSoundCallback()\n");
+	_mixer = new Audio::MixerImpl(this);
+
+	s_soundCallback = mixCallback;
+	s_soundParam = this;
+
+	startSoundsystem();
+}
+
+void OSystem_IPHONE::startSoundsystem() {
+	s_AudioQueue.dataFormat.mSampleRate = AUDIO_SAMPLE_RATE;
+	s_AudioQueue.dataFormat.mFormatID = kAudioFormatLinearPCM;
+	s_AudioQueue.dataFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
+	s_AudioQueue.dataFormat.mBytesPerPacket = 4;
+	s_AudioQueue.dataFormat.mFramesPerPacket = 1;
+	s_AudioQueue.dataFormat.mBytesPerFrame = 4;
+	s_AudioQueue.dataFormat.mChannelsPerFrame = 2;
+	s_AudioQueue.dataFormat.mBitsPerChannel = 16;
+	s_AudioQueue.frameCount = WAVE_BUFFER_SIZE;
+
+	if (AudioQueueNewOutput(&s_AudioQueue.dataFormat, AQBufferCallback, &s_AudioQueue, 0, kCFRunLoopCommonModes, 0, &s_AudioQueue.queue)) {
+		printf("Couldn't set the AudioQueue callback!\n");
+		_mixer->setReady(false);
+		return;
+	}
+
+	uint32 bufferBytes = s_AudioQueue.frameCount * s_AudioQueue.dataFormat.mBytesPerFrame;
+
+	for (int i = 0; i < AUDIO_BUFFERS; i++) {
+		if (AudioQueueAllocateBuffer(s_AudioQueue.queue, bufferBytes, &s_AudioQueue.buffers[i])) {
+			printf("Error allocating AudioQueue buffer!\n");
+			_mixer->setReady(false);
+			return;
+		}
+
+		AQBufferCallback(&s_AudioQueue, s_AudioQueue.queue, s_AudioQueue.buffers[i]);
+	}
+
+	AudioQueueSetParameter(s_AudioQueue.queue, kAudioQueueParam_Volume, 1.0);
+	if (AudioQueueStart(s_AudioQueue.queue, NULL)) {
+		printf("Error starting the AudioQueue!\n");
+		_mixer->setReady(false);
+		return;
+	}
+
+	_mixer->setOutputRate(AUDIO_SAMPLE_RATE);
+	_mixer->setReady(true);
+}
+
+void OSystem_IPHONE::stopSoundsystem() {
+	AudioQueueStop(s_AudioQueue.queue, true);
+
+	for (int i = 0; i < AUDIO_BUFFERS; i++) {
+		AudioQueueFreeBuffer(s_AudioQueue.queue, s_AudioQueue.buffers[i]);
+	}
+
+	AudioQueueDispose(s_AudioQueue.queue, true);
+	_mixer->setReady(false);
+}
+
+int OSystem_IPHONE::getOutputSampleRate() const {
+	return AUDIO_SAMPLE_RATE;
+}

Copied: scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_video.cpp (from rev 42572, scummvm/trunk/backends/platform/iphone/osys_video.cpp)
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_video.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/iphone/osys_video.cpp	2009-07-18 00:53:31 UTC (rev 42576)
@@ -0,0 +1,463 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "osys_main.h"
+
+const OSystem::GraphicsMode* OSystem_IPHONE::getSupportedGraphicsModes() const {
+	return s_supportedGraphicsModes;
+}
+
+
+int OSystem_IPHONE::getDefaultGraphicsMode() const {
+	return -1;
+}
+
+bool OSystem_IPHONE::setGraphicsMode(const char *mode) {
+	return true;
+}
+
+bool OSystem_IPHONE::setGraphicsMode(int mode) {
+	return true;
+}
+
+int OSystem_IPHONE::getGraphicsMode() const {
+	return -1;
+}
+
+void OSystem_IPHONE::initSize(uint width, uint height) {
+	//printf("initSize(%i, %i)\n", width, height);
+
+	_screenWidth = width;
+	_screenHeight = height;
+
+	free(_offscreen);
+
+	_offscreen = (byte *)malloc(width * height);
+	bzero(_offscreen, width * height);
+
+	free(_overlayBuffer);
+
+	int fullSize = _screenWidth * _screenHeight * sizeof(OverlayColor);
+	_overlayBuffer = (OverlayColor *)malloc(fullSize);
+	clearOverlay();
+
+	free(_fullscreen);
+
+	_fullscreen = (uint16 *)malloc(fullSize);
+	bzero(_fullscreen, fullSize);
+
+	iPhone_initSurface(width, height);
+
+	_fullScreenIsDirty = false;
+	dirtyFullScreen();
+	_mouseVisible = false;
+	_screenChangeCount++;
+	updateScreen();
+}
+
+int16 OSystem_IPHONE::getHeight() {
+	return _screenHeight;
+}
+
+int16 OSystem_IPHONE::getWidth() {
+	return _screenWidth;
+}
+
+void OSystem_IPHONE::setPalette(const byte *colors, uint start, uint num) {
+	//printf("setPalette()\n");
+	const byte *b = colors;
+
+	for (uint i = start; i < start + num; ++i) {
+		_palette[i] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(b[0], b[1], b[2]);
+		b += 4;
+	}
+
+	dirtyFullScreen();
+}
+
+void OSystem_IPHONE::grabPalette(byte *colors, uint start, uint num) {
+	//printf("grabPalette()\n");
+}
+
+void OSystem_IPHONE::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) {
+	//printf("copyRectToScreen(%i, %i, %i, %i)\n", x, y, w, h);
+	//Clip the coordinates
+	if (x < 0) {
+		w += x;
+		buf -= x;
+		x = 0;
+	}
+
+	if (y < 0) {
+		h += y;
+		buf -= y * pitch;
+		y = 0;
+	}
+
+	if (w > _screenWidth - x) {
+		w = _screenWidth - x;
+	}
+
+	if (h > _screenHeight - y) {
+		h = _screenHeight - y;
+	}
+
+	if (w <= 0 || h <= 0)
+		return;
+
+	if (!_fullScreenIsDirty) {
+		_dirtyRects.push_back(Common::Rect(x, y, x + w, y + h));
+	}
+
+
+	byte *dst = _offscreen + y * _screenWidth + x;
+	if (_screenWidth == pitch && pitch == w)
+		memcpy(dst, buf, h * w);
+	else {
+		do {
+			memcpy(dst, buf, w);
+			buf += pitch;
+			dst += _screenWidth;
+		} while (--h);
+	}
+}
+
+void OSystem_IPHONE::clipRectToScreen(int16 &x, int16 &y, int16 &w, int16 &h) {
+	if (x < 0) {
+		w += x;
+		x = 0;
+	}
+
+	if (y < 0) {
+		h += y;
+		y = 0;
+	}
+
+	if (w > _screenWidth - x)
+		w = _screenWidth - x;
+
+	if (h > _screenHeight - y)
+		h = _screenHeight - y;
+
+	if (w < 0) {
+		w = 0;
+	}
+
+	if (h < 0) {
+		h = 0;
+	}
+}
+
+void OSystem_IPHONE::updateScreen() {
+	//printf("updateScreen(): %i dirty rects.\n", _dirtyRects.size());
+
+	if (_dirtyRects.size() == 0 && _dirtyOverlayRects.size() == 0 && !_mouseDirty)
+		return;
+
+	internUpdateScreen();
+	_fullScreenIsDirty = false;
+	_fullScreenOverlayIsDirty = false;
+
+	iPhone_updateScreen();
+}
+
+void OSystem_IPHONE::internUpdateScreen() {
+	int16 mouseX = _mouseX - _mouseHotspotX;
+	int16 mouseY = _mouseY - _mouseHotspotY;
+	int16 mouseWidth = _mouseWidth;
+	int16 mouseHeight = _mouseHeight;
+
+	clipRectToScreen(mouseX, mouseY, mouseWidth, mouseHeight);
+
+	Common::Rect mouseRect(mouseX, mouseY, mouseX + mouseWidth, mouseY + mouseHeight);
+
+	if (_mouseDirty) {
+		if (!_fullScreenIsDirty) {
+			_dirtyRects.push_back(_lastDrawnMouseRect);
+			_dirtyRects.push_back(mouseRect);
+		}
+		if (!_fullScreenOverlayIsDirty && _overlayVisible) {
+			_dirtyOverlayRects.push_back(_lastDrawnMouseRect);
+			_dirtyOverlayRects.push_back(mouseRect);
+		}
+		_mouseDirty = false;
+		_lastDrawnMouseRect = mouseRect;
+	}
+
+	while (_dirtyRects.size()) {
+		Common::Rect dirtyRect = _dirtyRects.remove_at(_dirtyRects.size() - 1);
+
+		//printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
+
+		drawDirtyRect(dirtyRect);
+
+		if (_overlayVisible)
+			drawDirtyOverlayRect(dirtyRect);
+
+		drawMouseCursorOnRectUpdate(dirtyRect, mouseRect);
+		updateHardwareSurfaceForRect(dirtyRect);
+	}
+
+	if (_overlayVisible) {
+		while (_dirtyOverlayRects.size()) {
+			Common::Rect dirtyRect = _dirtyOverlayRects.remove_at(_dirtyOverlayRects.size() - 1);
+
+			//printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
+
+			drawDirtyOverlayRect(dirtyRect);
+			drawMouseCursorOnRectUpdate(dirtyRect, mouseRect);
+			updateHardwareSurfaceForRect(dirtyRect);
+		}
+	}
+}
+
+void OSystem_IPHONE::drawDirtyRect(const Common::Rect& dirtyRect) {
+	int h = dirtyRect.bottom - dirtyRect.top;
+	int w = dirtyRect.right - dirtyRect.left;
+
+	byte  *src = &_offscreen[dirtyRect.top * _screenWidth + dirtyRect.left];
+	uint16 *dst = &_fullscreen[dirtyRect.top * _screenWidth + dirtyRect.left];
+	for (int y = h; y > 0; y--) {
+		for (int x = w; x > 0; x--)
+			*dst++ = _palette[*src++];
+
+		dst += _screenWidth - w;
+		src += _screenWidth - w;
+	}
+}
+
+void OSystem_IPHONE::drawDirtyOverlayRect(const Common::Rect& dirtyRect) {
+	int h = dirtyRect.bottom - dirtyRect.top;
+
+	uint16 *src = (uint16 *)&_overlayBuffer[dirtyRect.top * _screenWidth + dirtyRect.left];
+	uint16 *dst = &_fullscreen[dirtyRect.top * _screenWidth + dirtyRect.left];
+	int x = (dirtyRect.right - dirtyRect.left) * 2;
+	for (int y = h; y > 0; y--) {
+		memcpy(dst, src, x);
+		src += _screenWidth;
+		dst += _screenWidth;
+	}
+}
+
+void OSystem_IPHONE::drawMouseCursorOnRectUpdate(const Common::Rect& updatedRect, const Common::Rect& mouseRect) {
+	//draw mouse on top
+	if (_mouseVisible && (updatedRect.intersects(mouseRect))) {
+		int srcX = 0;
+		int srcY = 0;
+		int left = _mouseX - _mouseHotspotX;
+		if (left < 0) {
+			srcX -= left;
+			left = 0;
+		}
+		int top = _mouseY - _mouseHotspotY;
+		if (top < 0) {
+			srcY -= top;
+			top = 0;
+		}
+			//int right = left + _mouseWidth;
+		int bottom = top + _mouseHeight;
+		if (bottom > _screenWidth)
+			bottom = _screenWidth;
+			int displayWidth = _mouseWidth;
+		if (_mouseWidth + left > _screenWidth)
+			displayWidth = _screenWidth - left;
+			int displayHeight = _mouseHeight;
+		if (_mouseHeight + top > _screenHeight)
+			displayHeight = _screenHeight - top;
+		byte *src = &_mouseBuf[srcY * _mouseWidth + srcX];
+		uint16 *dst = &_fullscreen[top * _screenWidth + left];
+		for (int y = displayHeight; y > srcY; y--) {
+			for (int x = displayWidth; x > srcX; x--) {
+				if (*src != _mouseKeyColour)
+					*dst = _palette[*src];
+				dst++;
+				src++;
+			}
+			dst += _screenWidth - displayWidth + srcX;
+			src += _mouseWidth - displayWidth + srcX;
+		}
+	}
+}
+
+void OSystem_IPHONE::updateHardwareSurfaceForRect(const Common::Rect& updatedRect) {
+	iPhone_updateScreenRect(_fullscreen, updatedRect.left, updatedRect.top, updatedRect.right, updatedRect.bottom );
+}
+
+Graphics::Surface *OSystem_IPHONE::lockScreen() {
+	//printf("lockScreen()\n");
+
+	_framebuffer.pixels = _offscreen;
+	_framebuffer.w = _screenWidth;
+	_framebuffer.h = _screenHeight;
+	_framebuffer.pitch = _screenWidth;
+	_framebuffer.bytesPerPixel = 1;
+
+	return &_framebuffer;
+}
+
+void OSystem_IPHONE::unlockScreen() {
+	//printf("unlockScreen()\n");
+	dirtyFullScreen();
+}
+
+void OSystem_IPHONE::setShakePos(int shakeOffset) {
+	//printf("setShakePos(%i)\n", shakeOffset);
+}
+
+void OSystem_IPHONE::showOverlay() {
+	//printf("showOverlay()\n");
+	_overlayVisible = true;
+	dirtyFullOverlayScreen();
+}
+
+void OSystem_IPHONE::hideOverlay() {
+	//printf("hideOverlay()\n");
+	_overlayVisible = false;
+	_dirtyOverlayRects.clear();
+	dirtyFullScreen();
+}
+
+void OSystem_IPHONE::clearOverlay() {
+	//printf("clearOverlay()\n");
+	bzero(_overlayBuffer, _screenWidth * _screenHeight * sizeof(OverlayColor));
+	dirtyFullOverlayScreen();
+}
+
+void OSystem_IPHONE::grabOverlay(OverlayColor *buf, int pitch) {
+	//printf("grabOverlay()\n");
+	int h = _screenHeight;
+	OverlayColor *src = _overlayBuffer;
+
+	do {
+		memcpy(buf, src, _screenWidth * sizeof(OverlayColor));
+		src += _screenWidth;
+		buf += pitch;
+	} while (--h);
+}
+
+void OSystem_IPHONE::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
+	//printf("copyRectToOverlay(buf, pitch=%i, x=%i, y=%i, w=%i, h=%i)\n", pitch, x, y, w, h);
+
+	//Clip the coordinates
+	if (x < 0) {
+		w += x;
+		buf -= x;
+		x = 0;
+	}
+
+	if (y < 0) {
+		h += y;
+		buf -= y * pitch;
+		y = 0;
+	}
+
+	if (w > _screenWidth - x)
+		w = _screenWidth - x;
+
+	if (h > _screenHeight - y)
+		h = _screenHeight - y;
+
+	if (w <= 0 || h <= 0)
+		return;
+
+	if (!_fullScreenOverlayIsDirty) {
+		_dirtyOverlayRects.push_back(Common::Rect(x, y, x + w, y + h));
+	}
+
+	OverlayColor *dst = _overlayBuffer + (y * _screenWidth + x);
+	if (_screenWidth == pitch && pitch == w)
+		memcpy(dst, buf, h * w * sizeof(OverlayColor));
+	else {
+		do {
+			memcpy(dst, buf, w * sizeof(OverlayColor));
+			buf += pitch;
+			dst += _screenWidth;
+		} while (--h);
+	}
+}
+
+int16 OSystem_IPHONE::getOverlayHeight() {
+	return _screenHeight;
+}
+
+int16 OSystem_IPHONE::getOverlayWidth() {
+	return _screenWidth;
+}
+
+bool OSystem_IPHONE::showMouse(bool visible) {
+	bool last = _mouseVisible;
+	_mouseVisible = visible;
+	_mouseDirty = true;
+
+	return last;
+}
+
+void OSystem_IPHONE::warpMouse(int x, int y) {
+	//printf("warpMouse()\n");
+
+	_mouseX = x;
+	_mouseY = y;
+	_mouseDirty = true;
+}
+
+void OSystem_IPHONE::dirtyFullScreen() {
+	if (!_fullScreenIsDirty) {
+		_dirtyRects.clear();
+		_dirtyRects.push_back(Common::Rect(0, 0, _screenWidth, _screenHeight));
+		_fullScreenIsDirty = true;
+	}
+}
+
+void OSystem_IPHONE::dirtyFullOverlayScreen() {
+	if (!_fullScreenOverlayIsDirty) {
+		_dirtyOverlayRects.clear();
+		_dirtyOverlayRects.push_back(Common::Rect(0, 0, _screenWidth, _screenHeight));
+		_fullScreenOverlayIsDirty = true;
+	}
+}
+
+void OSystem_IPHONE::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) {
+	//printf("setMouseCursor(%i, %i)\n", hotspotX, hotspotY);
+
+	if (_mouseBuf != NULL && (_mouseWidth != w || _mouseHeight != h)) {
+		free(_mouseBuf);
+		_mouseBuf = NULL;
+	}
+
+	if (_mouseBuf == NULL)
+		_mouseBuf = (byte *)malloc(w * h);
+
+	_mouseWidth = w;
+	_mouseHeight = h;
+
+	_mouseHotspotX = hotspotX;
+	_mouseHotspotY = hotspotY;
+
+	_mouseKeyColour = keycolor;
+
+	memcpy(_mouseBuf, buf, w * h);
+
+	_mouseDirty = true;
+}

Modified: scummvm/branches/gsoc2009-16bit/backends/platform/wince/CEScaler.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/wince/CEScaler.cpp	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/wince/CEScaler.cpp	2009-07-18 00:53:31 UTC (rev 42576)
@@ -53,6 +53,15 @@
 }
 MAKE_WRAPPER(PocketPCPortrait)
 
+void PocketPCRawPortrait(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
+
+	while (height--) {
+		memcpy(dstPtr, srcPtr, width*sizeof(uint16_t));
+		srcPtr += srcPitch;
+		dstPtr += dstPitch;
+	}
+}
+
 // Our version of an aspect scaler. Main difference is the out-of-place
 // operation, omitting a straight blit step the sdl backend does. Also,
 // tests show unaligned access errors with the stock aspect scaler.
@@ -117,6 +126,7 @@
 #ifdef ARM
 extern "C" {
 	void PocketPCHalfARM(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height, int mask, int round);
+	void SmartphoneLandscapeARM(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height, int mask);
 	// Rounding constants and masks used for different pixel formats
 	int roundingconstants[] = { 0x00200802, 0x00201002 };
 	int redbluegreenMasks[] = { 0x03E07C1F, 0x07E0F81F };
@@ -156,7 +166,7 @@
 	if (gBitFormat == 565)
 		PocketPCHalfTemplate<565>(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
 	else
-		PocketPCHalfTemplate<565>(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
+		PocketPCHalfTemplate<555>(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
 #endif
 }
 
@@ -217,4 +227,15 @@
 		}
 	}
 }
-MAKE_WRAPPER(SmartphoneLandscape)
+
+void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
+#ifdef ARM
+	int maskUsed = (gBitFormat == 565);
+	SmartphoneLandscapeARM(srcPtr, srcPitch, dstPtr, dstPitch, width, height, redbluegreenMasks[maskUsed]);
+#else
+	if (gBitFormat == 565)
+		SmartphoneLandscape<565>(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
+	else
+		SmartphoneLandscape<555>(srcPtr, srcPitch, dstPtr, dstPitch, width, height);
+#endif
+}

Modified: scummvm/branches/gsoc2009-16bit/backends/platform/wince/Makefile
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/wince/Makefile	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/wince/Makefile	2009-07-18 00:53:31 UTC (rev 42576)
@@ -186,6 +186,7 @@
 OBJS += ../sdl/sdl.o ../sdl/graphics.o ../sdl/events.o ../sdl/hardwarekeys.o
 OBJS += missing/missing.o
 OBJS += ARMscaler.o
+OBJS += smartLandScale.o
 ifndef DYNAMIC_MODULES
 OBJS += PocketSCUMM.o
 endif

Copied: scummvm/branches/gsoc2009-16bit/backends/platform/wince/smartLandScale.s (from rev 42572, scummvm/trunk/backends/platform/wince/smartLandScale.s)
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/wince/smartLandScale.s	                        (rev 0)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/wince/smartLandScale.s	2009-07-18 00:53:31 UTC (rev 42576)
@@ -0,0 +1,187 @@
+@ ScummVM Scumm Interpreter
+@ Copyright (C) 2009 The ScummVM project
+@
+@ This program is free software; you can redistribute it and/or
+@ modify it under the terms of the GNU General Public License
+@ as published by the Free Software Foundation; either version 2
+@ of the License, or (at your option) any later version.
+@
+@ This program 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 General Public License for more details.
+@
+@ You should have received a copy of the GNU General Public License
+@ along with this program; if not, write to the Free Software
+@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+@
+@ $URL$
+@ $Id$
+@
+@ @author Robin Watts (robin at wss.co.uk)
+
+	@ For 16 source pixels 0123456789ABCDEF, we want to produce 11 output
+	@ pixels.
+
+	@0000000000011111111111222222222223333333333344444444444555555555
+	@<------||------><------||------><------||------><------||------>
+
+	@5566666666666777777777778888888888899999999999AAAAAAAAAAABBBBBBB
+	@<------||------><------||------><------||------><------||------>
+
+	@BBBBCCCCCCCCCCCDDDDDDDDDDDEEEEEEEEEEEFFFFFFFFFFF
+	@<------||------><------||------><------||------>
+
+	@ So, use the following weights (approximately right)
+
+	@ d0 = (3*s0 + 1*s1)>>2                Every source pixel constitutes
+	@ d1 = (2*s1 + 2*s2)>>2                3/4 of a destination pixel,
+	@ d2 = (1*s2 + 3*s3)>>2                except for s4,s5,sA and sB which
+	@ d3 = (2*s4 + 2*s5)>>2                constitute 1/2 each.
+	@ d4 = (3*s6 + 1*s7)>>2
+	@ d5 = (2*s7 + 2*s8)>>2
+	@ d6 = (1*s8 + 3*s9)>>2
+	@ d7 = (2*sA + 2*sB)>>2
+	@ d8 = (3*sC + 1*sD)>>2
+	@ d9 = (2*sD + 2*sE)>>2
+	@ dA = (1*sE + 3*sF)>>2
+
+	.text
+
+	.global	SmartphoneLandscapeARM
+
+	@ scales a width x height block of 16bpp pixels from srcPtr to dstPtr,
+	@ scaling each scanline down by 11/16ths. Every 8th scanline is dropped
+	@ srcPitch and dstPitch identify how to reach subsequent lines.
+	@ mask allows for one routine to do both 565 and 565 formats.
+
+SmartphoneLandscapeARM:
+	@ r0 = srcPtr
+	@ r1 = srcSpan
+	@ r2 = dstPtr
+	@ r3 = dstSpan
+	@ <> = width
+	@ <> = height
+	@ <> = mask
+	MOV	r12,r13
+	STMFD	r13!,{r4-r11,r14}
+	LDMFD	r12,{r4,r5,r11}		@ r4 = width
+					@ r5 = height
+					@ r11= mask
+	MOV	r7, #7			@ r7 = line
+	SUB	r8, r1, r4, LSL #1	@ r8 = srcSpan - width*2
+y_loop:
+	MOV	r6, r4			@ r6 = i
+	MOV	r9, r2			@ r9 = dstPtr
+x_loop:
+	LDRH	r14,[r0],#2		@ r14 = s0
+	LDRH	r12,[r0],#2		@ r12 = s1
+	LDRH	r10,[r0],#2		@ r10 = s2
+	ORR	r14,r14,r14,LSL #16	@ r14 = s0s0
+	ORR	r12,r12,r12,LSL #16	@ r12 = s1s1
+	AND	r14,r14,r11		@ r14 = s0 as g_b_r
+	AND	r12,r12,r11		@ r12 = s1 as g_b_r
+	ADD	r14,r14,r14,LSL #1	@ r14 = s0*3 as g_b_r
+	ORR	r10,r10,r10,LSL #16	@ r10 = s2s2
+	ADD	r14,r14,r12		@ r14 = (s0*3 + s1) as g_b_r
+	AND	r10,r10,r11		@ r10 = s2 as g_b_r
+	AND	r14,r11,r14,LSR #2	@ r14 = d0 as g_b_r
+	ORR	r14,r14,r14,LSR #16	@ r14 = d0
+	STRH	r14,[r9],#2		@ store d0
+	ADD	r12,r12,r10		@ r12 = (s1 + s2) as g_b_r
+	LDRH	r14,[r0],#2		@ r14 = s3
+	AND	r12,r11,r12,LSR #1	@ r12 = d1 as g_b_r
+	ORR	r12,r12,r12,LSR #16	@ r12 = d1
+	STRH	r12,[r9],#2		@ store d1
+	ORR	r14,r14,r14,LSL #16	@ r14 = s3s3
+	AND	r14,r14,r11		@ r14 = s3 as g_b_r
+	ADD	r10,r10,r14		@ r10 = (s2 + s3) as g_b_r
+	ADD	r10,r10,r14,LSL #1	@ r10 = (s2 + s3*3) as g_b_r
+	LDRH	r14,[r0],#2		@ r14 = s4
+	LDRH	r12,[r0],#2		@ r12 = s5
+	AND	r10,r11,r10,LSR #2	@ r10 = d2 as g_b_r
+	ORR	r10,r10,r10,LSR #16	@ r10 = d2
+	STRH	r10,[r9],#2		@ store d2
+	ORR	r14,r14,r14,LSL #16	@ r14 = s4s4
+	ORR	r12,r12,r12,LSL #16	@ r12 = s5s5
+	AND	r14,r14,r11		@ r14 = s4 as g_b_r
+	AND	r12,r12,r11		@ r12 = s5 as g_b_r
+	ADD	r14,r14,r12		@ r14 = (s4 + s5) as g_b_r
+	LDRH	r12,[r0],#2		@ r12 = s6
+	LDRH	r10,[r0],#2		@ r10 = s7
+	AND	r14,r11,r14,LSR #1	@ r14 = d3 as g_b_r
+	ORR	r14,r14,r14,LSR #16	@ r14 = d3
+	STRH	r14,[r9],#2		@ store d3
+	ORR	r12,r12,r12,LSL #16	@ r12 = s6s6
+	ORR	r10,r10,r10,LSL #16	@ r10 = s7s7
+	LDRH	r14,[r0],#2		@ r14 = s8
+	AND	r12,r12,r11		@ r12 = s6 as g_b_r
+	AND	r10,r10,r11		@ r10 = s7 as g_b_r
+	ORR	r14,r14,r14,LSL #16	@ r14 = s8s8
+	ADD	r12,r12,r12,LSL #1	@ r12 = 3*s6 as g_b_r
+	AND	r14,r14,r11		@ r14 = s8 as g_b_r
+	ADD	r12,r12,r10		@ r12 = (3*s6+s7) as g_b_r
+	AND	r12,r11,r12,LSR #2	@ r12 = d4 as g_b_r
+	ORR	r12,r12,r12,LSR #16	@ r12 = d4
+	STRH	r12,[r9],#2		@ store d4
+	ADD	r10,r10,r14		@ r10 = (s7+s8) as g_b_r
+	AND	r10,r11,r10,LSR #1	@ r10 = d5 as g_b_r
+	LDRH	r12,[r0],#2		@ r12 = s9
+	ORR	r10,r10,r10,LSR #16	@ r10 = d5
+	STRH	r10,[r9],#2		@ store d5
+	ORR	r12,r12,r12,LSL #16	@ r12 = s9s9
+	AND	r12,r12,r11		@ r12 = s9 as g_b_r
+	ADD	r12,r12,r12,LSL #1	@ r12 = s9*3 as g_b_r
+	ADD	r12,r12,r14		@ r12 = (s8+s9*3) as g_b_r
+	AND	r12,r11,r12,LSR #2	@ r12 = d6 as g_b_r
+	LDRH	r14,[r0],#2		@ r14 = sA
+	LDRH	r10,[r0],#2		@ r10 = sB
+	ORR	r12,r12,r12,LSR #16	@ r12 = d6
+	STRH	r12,[r9],#2		@ store d6
+	ORR	r14,r14,r14,LSL #16	@ r14 = sAsA
+	ORR	r10,r10,r10,LSL #16	@ r10 = sBsB
+	LDRH	r12,[r0],#2		@ r12 = sC
+	AND	r14,r14,r11		@ r14 = sA as g_b_r
+	AND	r10,r10,r11		@ r10 = sB as g_b_r
+	ORR	r12,r12,r12,LSL #16	@ r12 = sCsC
+	ADD	r14,r14,r10		@ r14 = (sA + sB) as g_b_r
+	LDRH	r10,[r0],#2		@ r10 = sD
+	AND	r14,r11,r14,LSR #1	@ r14 = d7 as g_b_r
+	AND	r12,r12,r11		@ r12 = sC as g_b_r
+	ORR	r14,r14,r14,LSR #16	@ r14 = d7
+	ORR	r10,r10,r10,LSL #16	@ r10 = sDsD
+	STRH	r14,[r9],#2		@ store d7
+	AND	r10,r10,r11		@ r10 = sD as g_b_r
+	ADD	r12,r12,r12,LSL #1	@ r12 = 3*sC as g_b_r
+	LDRH	r14,[r0],#2		@ r14 = sE
+	ADD	r12,r12,r10		@ r12 = (3*sC+sD) as g_b_r
+	AND	r12,r11,r12,LSR #2	@ r12 = d8 as g_b_r
+	ORR	r14,r14,r14,LSL #16	@ r14 = sEsE
+	ORR	r12,r12,r12,LSR #16	@ r12 = d8
+	AND	r14,r14,r11		@ r14 = sE as g_b_r
+	STRH	r12,[r9],#2		@ store d8
+	ADD	r10,r10,r14		@ r10 = (sD+sE) as g_b_r
+	LDRH	r12,[r0],#2		@ r12 = sF
+	AND	r10,r11,r10,LSR #1	@ r10 = d9 as g_b_r
+	ORR	r10,r10,r10,LSR #16	@ r10 = d9
+	STRH	r10,[r9],#2		@ store d9
+	ORR	r12,r12,r12,LSL #16	@ r12 = sFsF
+	AND	r12,r12,r11		@ r12 = sF as g_b_r
+	ADD	r12,r12,r12,LSL #1	@ r12 = 3*sF as g_b_r
+	ADD	r12,r12,r14		@ r12 = (sE+3*sF) as g_b_r
+	AND	r12,r11,r12,LSR #2	@ r12 = dA as g_b_r
+	ORR	r12,r12,r12,LSR #16	@ r12 = dA
+	SUBS	r6,r6,#16		@ width -= 16
+	STRH	r12,[r9],#2		@ store dA
+	BGT	x_loop
+	
+	ADD	r0, r0, r8		@ srcPtr += srcSpan
+	ADD	r2, r2, r3		@ dstPtr += dstSpan
+	SUBS	r7, r7, #1
+	ADDEQ	r0, r0, r1
+	MOVEQ	r7, #7
+	SUBEQ	r5, r5, #1
+	SUBS	r5, r5, #1
+	BGT	y_loop
+
+	LDMFD	r13!,{r4-r11,PC}

Modified: scummvm/branches/gsoc2009-16bit/backends/platform/wince/wince-sdl.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/wince/wince-sdl.cpp	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/wince/wince-sdl.cpp	2009-07-18 00:53:31 UTC (rev 42576)
@@ -1209,8 +1209,13 @@
 	if (CEDevice::hasSmartphoneResolution()) {
 		if (_videoMode.screenWidth > 320)
 			error("Game resolution not supported on Smartphone");
+#ifdef ARM
+		_scaleFactorXm = 11;
+		_scaleFactorXd = 16;
+#else
 		_scaleFactorXm = 2;
 		_scaleFactorXd = 3;
+#endif
 		_scaleFactorYm = 7;
 		_scaleFactorYd = 8;
 		_scalerProc = SmartphoneLandscape;

Modified: scummvm/branches/gsoc2009-16bit/common/system.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/common/system.h	2009-07-18 00:04:28 UTC (rev 42575)
+++ scummvm/branches/gsoc2009-16bit/common/system.h	2009-07-18 00:53:31 UTC (rev 42576)
@@ -466,10 +466,10 @@
 	 */
 	enum TransactionError {
 		kTransactionSuccess = 0,					/**< Everything fine (use EQUAL check for this one!) */
-		kTransactionAspectRatioFailed = (1 << 0),	/**< Failed switchting aspect ratio correction mode */
-		kTransactionFullscreenFailed = (1 << 1),	/**< Failed switchting fullscreen mode */
-		kTransactionModeSwitchFailed = (1 << 2),	/**< Failed switchting the GFX graphics mode (setGraphicsMode) */
-		kTransactionSizeChangeFailed = (1 << 3),	/**< Failed switchting the screen dimensions (initSize) */
+		kTransactionAspectRatioFailed = (1 << 0),	/**< Failed switching aspect ratio correction mode */
+		kTransactionFullscreenFailed = (1 << 1),	/**< Failed switching fullscreen mode */
+		kTransactionModeSwitchFailed = (1 << 2),	/**< Failed switching the GFX graphics mode (setGraphicsMode) */
+		kTransactionSizeChangeFailed = (1 << 3),	/**< Failed switching the screen dimensions (initSize) */
 		kTransactionFormatNotSupported = (1 << 4)	/**< Failed setting the color format */
 	};
 


@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list