[Scummvm-cvs-logs] SF.net SVN: scummvm:[33450] scummvm/branches/gsoc2008-vkeybd

kenny-d at users.sourceforge.net kenny-d at users.sourceforge.net
Wed Jul 30 16:41:22 CEST 2008


Revision: 33450
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33450&view=rev
Author:   kenny-d
Date:     2008-07-30 14:40:54 +0000 (Wed, 30 Jul 2008)

Log Message:
-----------
Merged revisions 33188-33189,33191-33193,33196,33198,33202-33203,33206,33210,33212,33218-33220,33222,33224-33226,33229-33243,33246,33248-33250,33252,33258-33261,33263,33266,33270,33272-33283,33285,33287-33290,33295-33298,33321,33325-33330,33332-33335,33337-33340,33342,33345,33347,33349-33350,33352-33357,33359-33367,33369-33371,33373,33375-33377,33379-33380,33383-33385,33387-33389,33392-33394,33400-33402,33404-33405,33407-33410,33412-33416,33418-33419,33425-33427,33432,33436-33438,33444,33446 via svnmerge from 
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk

Modified Paths:
--------------
    scummvm/branches/gsoc2008-vkeybd/AUTHORS
    scummvm/branches/gsoc2008-vkeybd/NEWS
    scummvm/branches/gsoc2008-vkeybd/backends/fs/windows/windows-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/blit_arm.s
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.m
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_main.m
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.m
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/sdl.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/SymbianOS.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/plugins/win32/win32-provider.cpp
    scummvm/branches/gsoc2008-vkeybd/base/commandLine.cpp
    scummvm/branches/gsoc2008-vkeybd/base/game.h
    scummvm/branches/gsoc2008-vkeybd/base/main.cpp
    scummvm/branches/gsoc2008-vkeybd/base/plugins.cpp
    scummvm/branches/gsoc2008-vkeybd/common/advancedDetector.cpp
    scummvm/branches/gsoc2008-vkeybd/common/algorithm.h
    scummvm/branches/gsoc2008-vkeybd/common/config-file.cpp
    scummvm/branches/gsoc2008-vkeybd/common/config-manager.cpp
    scummvm/branches/gsoc2008-vkeybd/common/file.cpp
    scummvm/branches/gsoc2008-vkeybd/common/file.h
    scummvm/branches/gsoc2008-vkeybd/common/func.h
    scummvm/branches/gsoc2008-vkeybd/common/hashmap.h
    scummvm/branches/gsoc2008-vkeybd/common/ptr.h
    scummvm/branches/gsoc2008-vkeybd/common/rect.h
    scummvm/branches/gsoc2008-vkeybd/common/str.cpp
    scummvm/branches/gsoc2008-vkeybd/common/str.h
    scummvm/branches/gsoc2008-vkeybd/common/stream.cpp
    scummvm/branches/gsoc2008-vkeybd/common/stream.h
    scummvm/branches/gsoc2008-vkeybd/common/unarj.cpp
    scummvm/branches/gsoc2008-vkeybd/common/unarj.h
    scummvm/branches/gsoc2008-vkeybd/configure
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.sln
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.sln
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.sln
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/scummvm.sln
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/engines/agos/agos.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/debug.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/anim.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/anim.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/bg.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/bg.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/bg_list.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/bg_list.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/cine.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/gfx.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/gfx.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/main_loop.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/object.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/part.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/script.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/script_fw.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/script_os.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/various.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/various.h
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/volume.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/engines.mk
    scummvm/branches/gsoc2008-vkeybd/engines/gob/dataio.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/dataio.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/gob.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/gob.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/saveload.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/saveload_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/saveload_v3.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/saveload_v4.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen_v2.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/script_hof.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/wsamovie.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/balloons.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/callables_ns.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/dialogue.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/disk.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/disk_br.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/exec.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/exec_br.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/exec_ns.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/font.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/gfxbase.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/graphics.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/graphics.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/gui_br.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/gui_ns.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/input.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/input.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/inventory.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/inventory.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/module.mk
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/objects.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/objects.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/parallaction.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/parallaction.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/parallaction_br.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/parallaction_ns.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/parser.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/parser_br.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/parser_ns.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/walk.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/walk.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/font.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/font.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/font_map.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/charset.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/debugger.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/file.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/file.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/file_nes.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/file_nes.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/script_v60he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/script_v72he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/script_v80he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/wiz_he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/imuse_digi/dimuse.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/resource.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/scumm-md5.h
    scummvm/branches/gsoc2008-vkeybd/engines/sky/disk.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/resman.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/resman.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/font.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/credits.h
    scummvm/branches/gsoc2008-vkeybd/gui/launcher.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/massadd.cpp
    scummvm/branches/gsoc2008-vkeybd/ports.mk
    scummvm/branches/gsoc2008-vkeybd/sound/softsynth/mt32.cpp
    scummvm/branches/gsoc2008-vkeybd/test/common/ptr.h
    scummvm/branches/gsoc2008-vkeybd/test/common/seekablesubreadstream.h
    scummvm/branches/gsoc2008-vkeybd/test/common/str.h
    scummvm/branches/gsoc2008-vkeybd/test/common/subreadstream.h
    scummvm/branches/gsoc2008-vkeybd/tools/credits.pl
    scummvm/branches/gsoc2008-vkeybd/tools/scumm-md5.txt

Added Paths:
-----------
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/tinsel.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/tinsel.vcproj
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/gui.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/gui.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/actors.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/actors.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/anim.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/anim.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/background.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/background.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/bg.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cliprect.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cliprect.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/config.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/config.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/coroutine.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cursor.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cursor.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/debugger.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/debugger.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/dw.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/effect.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/events.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/events.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/faders.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/faders.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/film.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/font.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/font.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/graphics.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/graphics.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/handle.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/handle.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/heapmem.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/heapmem.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/inventory.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/inventory.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/mareels.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/module.mk
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/move.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/move.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/multiobj.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/multiobj.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/music.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/music.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/object.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/object.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/palette.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/palette.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pcode.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pcode.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pdisplay.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pid.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/play.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/polygons.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/polygons.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/rince.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/rince.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/savescn.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/savescn.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scene.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scene.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sched.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sched.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scn.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scn.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scroll.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scroll.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/serializer.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/strres.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/strres.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/text.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/text.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/timers.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/timers.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinlib.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinlib.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinsel.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinsel.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/token.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/token.h
    scummvm/branches/gsoc2008-vkeybd/test/common/bufferedreadstream.h
    scummvm/branches/gsoc2008-vkeybd/test/common/bufferedseekablereadstream.h

Removed Paths:
-------------
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/actors.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/actors.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/anim.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/anim.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/background.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/background.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/bg.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cliprect.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cliprect.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/config.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/config.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/coroutine.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cursor.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cursor.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/debugger.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/debugger.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/dw.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/effect.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/events.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/events.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/faders.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/faders.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/film.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/font.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/font.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/graphics.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/graphics.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/handle.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/handle.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/heapmem.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/heapmem.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/inventory.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/inventory.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/mareels.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/module.mk
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/move.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/move.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/multiobj.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/multiobj.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/music.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/music.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/object.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/object.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/palette.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/palette.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pcode.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pcode.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pdisplay.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/pid.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/play.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/polygons.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/polygons.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/rince.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/rince.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/savescn.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/savescn.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scene.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scene.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sched.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sched.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scn.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scn.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scroll.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scroll.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/serializer.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/strres.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/strres.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/text.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/text.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/timers.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/timers.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinlib.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinlib.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinsel.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinsel.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/token.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/token.h

Property Changed:
----------------
    scummvm/branches/gsoc2008-vkeybd/
    scummvm/branches/gsoc2008-vkeybd/tools/create_drascula/


Property changes on: scummvm/branches/gsoc2008-vkeybd
___________________________________________________________________
Modified: svnmerge-integrated
   - /scummvm/branches/gsoc2008-gui:1-31703 /scummvm/branches/gsoc2008-rtl:1-32741 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/trunk:1-33184
   + /scummvm/branches/gsoc2008-gui:1-31703 /scummvm/branches/gsoc2008-rtl:1-32741 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/trunk:1-33448
Modified: svn:mergeinfo
   - /scummvm/trunk:32879-33169
   + /scummvm/trunk:32879-33169,33188-33446

Modified: scummvm/branches/gsoc2008-vkeybd/AUTHORS
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/AUTHORS	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/AUTHORS	2008-07-30 14:40:54 UTC (rev 33450)
@@ -94,10 +94,19 @@
 
     SAGA:
        Torbjorn Andersson   
+       Sven Hesse           
        Filippos Karapetis   
        Andrew Kurushin      
        Eugene Sandulenko    
 
+    Tinsel;:
+       Torbjorn Andersson   
+       Paul Gilbert         
+       Sven Hesse           
+       Max Horn             
+       Filippos Karapetis   
+       Joost Peters         
+
     Touche:
        Gregory Montoir      
 

Modified: scummvm/branches/gsoc2008-vkeybd/NEWS
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/NEWS	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/NEWS	2008-07-30 14:40:54 UTC (rev 33450)
@@ -1,6 +1,10 @@
 For a more comprehensive changelog for the latest experimental SVN code, see:
         http://scummvm.sourceforge.net/daily/ChangeLog
 
+0.13.0 (????-??-??)
+ New Games:
+   - Added support for Discworld.
+
 0.12.0 (????-??-??)
  New Games:
    - Added support for The Legend of Kyrandia: Book Two: Hand of Fate.
@@ -22,11 +26,15 @@
      on Mac OS X).
 
  AGOS:
+   - Fixed crashes during certain music in Amiga versions of Elvira 1 and
+     Simon the Sorcerer 1.
    - Fixed palette issues in Amiga versions of Simon the Sorcerer 1.
 
  SCUMM:
    - Rewrote parts of Digital iMUSE, fixing some bugs.
    - Rewrote the internal timer code, fixing some speed issues in e.g. COMI.
+   - Improved support for sound effects in Amiga version of Zak McKracken.
+   - Added support for mixed Adlib/MIDI mode in Monkey Island 1 (Floppy).
 
 0.11.1 (2008-02-29)
  SCUMM:
@@ -678,9 +686,10 @@
   OS X.
 - Loading COMI savegames for disk 2 doesn't anymore require disk 1 first.
 - Rewritten iMUSE engine, and many Music fixes (exp. Monkey Island 2).
-- Support for music in Humongous games and simon2dos/simon2talkie (XMIDI
+- Support for music in DOS versions of Humongous Entertainment games and
+  Simon the Sorcerer 2 (XMIDI format).
+- Support for music in floppy demo of Simon the Sorcerer 1 (Proprietary
   format).
-- Support for music in simon1demo (Proprietary format).
 - Complete music support for Simon the Sorcerer 2.
 - Improved music and sound support in Zak256.
 - Added Aspect Ratio option.

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/windows/windows-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/windows/windows-fs.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/windows/windows-fs.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -245,7 +245,7 @@
 		_isDirectory = ((fileAttribs & FILE_ATTRIBUTE_DIRECTORY) != 0);
 		_isValid = true;
 		// Add a trailing slash, if necessary.
-		if (_path.lastChar() != '\\') {
+		if (_isDirectory && _path.lastChar() != '\\') {
 			_path += '\\';
 		}
 	}

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/blit_arm.s
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/blit_arm.s	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/blit_arm.s	2008-07-30 14:40:54 UTC (rev 33450)
@@ -36,47 +36,47 @@
 	@ r3 = h
 	@ <> = _screenWidth
 	@ <> = _screenHeight
-	MOV	r12,r13
-	STMFD	r13!,{r4-r11,r14}
-	LDMFD	r12,{r12,r14}		@ r12 = _screenWidth
+	mov		r12,r13
+	stmfd	r13!,{r4-r11,r14}
+	ldmfd	r12,{r12,r14}		@ r12 = _screenWidth
 					@ r14 = _screenHeight
-	ADD	r14,r14,r3		@ r14 = _screenHeight + h
-	MVN	r11,#0
-	MLA	r11,r3,r12,r11		@ r11= _screenWidth*h-1
-	ADD	r12,r12,r12
+	add	r14,r14,r3		@ r14 = _screenHeight + h
+	mvn	r11,#0
+	mla	r11,r3,r12,r11		@ r11= _screenWidth*h-1
+	add	r12,r12,r12
 xloop:
-	SUBS	r4,r3,#5		@ r4 = y = h
-	BLE	thin
+	subs	r4,r3,#5		@ r4 = y = h
+	ble		thin
 yloop:
-	LDRH	r5, [r1],r12		@ r5 = *src    src += _screenWidth
-	LDRH	r6, [r1],r12		@ r6 = *src    src += _screenWidth
-	LDRH	r7, [r1],r12		@ r7 = *src    src += _screenWidth
-	LDRH	r8, [r1],r12		@ r8 = *src    src += _screenWidth
-	LDRH	r9, [r1],r12		@ r9 = *src    src += _screenWidth
-	LDRH	r10,[r1],r12		@ r10= *src    src += _screenWidth
-	SUBS	r4,r4,#6
-	STRH	r5, [r0],#2		@ *dst++ = r5
-	STRH	r6, [r0],#2		@ *dst++ = r6
-	STRH	r7, [r0],#2		@ *dst++ = r7
-	STRH	r8, [r0],#2		@ *dst++ = r8
-	STRH	r9, [r0],#2		@ *dst++ = r9
-	STRH	r10,[r0],#2		@ *dst++ = r10
-	BGT	yloop
+	ldrh	r5, [r1],r12		@ r5 = *src    src += _screenWidth
+	ldrh	r6, [r1],r12		@ r6 = *src    src += _screenWidth
+	ldrh	r7, [r1],r12		@ r7 = *src    src += _screenWidth
+	ldrh	r8, [r1],r12		@ r8 = *src    src += _screenWidth
+	ldrh	r9, [r1],r12		@ r9 = *src    src += _screenWidth
+	ldrh	r10,[r1],r12		@ r10= *src    src += _screenWidth
+	subs	r4,r4,#6
+	strh	r5, [r0],#2		@ *dst++ = r5
+	strh	r6, [r0],#2		@ *dst++ = r6
+	strh	r7, [r0],#2		@ *dst++ = r7
+	strh	r8, [r0],#2		@ *dst++ = r8
+	strh	r9, [r0],#2		@ *dst++ = r9
+	strh	r10,[r0],#2		@ *dst++ = r10
+	bgt		yloop
 thin:
-	ADDS	r4,r4,#5
-	BEQ	lineend
+	adds	r4,r4,#5
+	beq		lineend
 thin_loop:
-	LDRH	r5,[r1],r12		@ r5 = *src    src += _screenWidth
-	SUBS	r4,r4,#1
-	STRH	r5,[r0],#2		@ *dst++ = r5
-	BGT	thin_loop
+	ldrh	r5,[r1],r12		@ r5 = *src    src += _screenWidth
+	subs	r4,r4,#1
+	strh	r5,[r0],#2		@ *dst++ = r5
+	bgt	thin_loop
 lineend:
-	SUB	r0,r0,r14,LSL #1	@ dst -= _screenHeight + h
-	SUB	r1,r1,r11,LSL #1	@ src += 1-_screenWidth*h
-	SUBS	r2,r2,#1
-	BGT	xloop
+	sub	r0,r0,r14,LSL #1	@ dst -= _screenHeight + h
+	sub	r1,r1,r11,LSL #1	@ src += 1-_screenWidth*h
+	subs	r2,r2,#1
+	bgt	xloop
 
-	LDMFD	r13!,{r4-r11,PC}
+	ldmfd	r13!,{r4-r11,PC}
 
 _blitLandscapeScreenRect8bpp:
 	@ r0 = dst
@@ -86,55 +86,55 @@
 	@ <> = _palette
 	@ <> = _screenWidth
 	@ <> = _screenHeight
-	MOV	r12,r13
-	STMFD	r13!,{r4-r11,r14}
-	LDMFD	r12,{r11,r12,r14}	@ r11 = _palette
+	mov		r12,r13
+	stmfd	r13!,{r4-r11,r14}
+	ldmfd	r12,{r11,r12,r14}	@ r11 = _palette
 					@ r12 = _screenWidth
 					@ r14 = _screenHeight
-	ADD	r14,r14,r3		@ r14 = _screenHeight + h
-	MVN	r6,#0
-	MLA	r6,r3,r12,r6		@ r6 = _screenWidth*h-1
+	add		r14,r14,r3		@ r14 = _screenHeight + h
+	mvn		r6,#0
+	mla		r6,r3,r12,r6		@ r6 = _screenWidth*h-1
 xloop8:
-	MOV	r4,r3			@ r4 = y = h
-	SUBS	r4,r3,#4		@ r4 = y = h
-	BLE	thin8
+	mov		r4,r3			@ r4 = y = h
+	subs	r4,r3,#4		@ r4 = y = h
+	ble		thin8
 yloop8:
-	LDRB	r5, [r1],r12		@ r5 = *src    src += _screenWidth
-	LDRB	r7, [r1],r12		@ r7 = *src    src += _screenWidth
-	LDRB	r8, [r1],r12		@ r8 = *src    src += _screenWidth
-	LDRB	r9, [r1],r12		@ r9 = *src    src += _screenWidth
-	LDRB	r10,[r1],r12		@ r10= *src    src += _screenWidth
-	ADD	r5, r5, r5
-	ADD	r7, r7, r7
-	ADD	r8, r8, r8
-	ADD	r9, r9, r9
-	ADD	r10,r10,r10
-	LDRH	r5, [r11,r5]
-	LDRH	r7, [r11,r7]
-	LDRH	r8, [r11,r8]
-	LDRH	r9, [r11,r9]
-	LDRH	r10,[r11,r10]
-	SUBS	r4,r4,#5
-	STRH	r5, [r0],#2		@ *dst++ = r5
-	STRH	r7, [r0],#2		@ *dst++ = r7
-	STRH	r8, [r0],#2		@ *dst++ = r8
-	STRH	r9, [r0],#2		@ *dst++ = r9
-	STRH	r10,[r0],#2		@ *dst++ = r10
-	BGT	yloop8
+	ldrb	r5, [r1],r12		@ r5 = *src    src += _screenWidth
+	ldrb	r7, [r1],r12		@ r7 = *src    src += _screenWidth
+	ldrb	r8, [r1],r12		@ r8 = *src    src += _screenWidth
+	ldrb	r9, [r1],r12		@ r9 = *src    src += _screenWidth
+	ldrb	r10,[r1],r12		@ r10= *src    src += _screenWidth
+	add	r5, r5, r5
+	add	r7, r7, r7
+	add	r8, r8, r8
+	add	r9, r9, r9
+	add	r10,r10,r10
+	ldrh	r5, [r11,r5]
+	ldrh	r7, [r11,r7]
+	ldrh	r8, [r11,r8]
+	ldrh	r9, [r11,r9]
+	ldrh	r10,[r11,r10]
+	subs	r4,r4,#5
+	strh	r5, [r0],#2		@ *dst++ = r5
+	strh	r7, [r0],#2		@ *dst++ = r7
+	strh	r8, [r0],#2		@ *dst++ = r8
+	strh	r9, [r0],#2		@ *dst++ = r9
+	strh	r10,[r0],#2		@ *dst++ = r10
+	bgt	yloop8
 thin8:
-	ADDS	r4,r4,#4
-	BEQ	lineend8
+	adds	r4,r4,#4
+	beq		lineend8
 thin_loop8:
-	LDRB	r5,[r1],r12		@ r5 = *src    src += _screenWidth
-	ADD	r5,r5,r5
-	LDRH	r5,[r11,r5]
-	SUBS	r4,r4,#1
-	STRH	r5,[r0],#2		@ *dst++ = r5
-	BGT	thin_loop8
+	ldrb	r5,[r1],r12		@ r5 = *src    src += _screenWidth
+	add	r5,r5,r5
+	ldrh	r5,[r11,r5]
+	subs	r4,r4,#1
+	strh	r5,[r0],#2		@ *dst++ = r5
+	bgt	thin_loop8
 lineend8:
-	SUB	r0,r0,r14,LSL #1	@ dst -= _screenHeight + h
-	SUB	r1,r1,r6		@ src += 1-_screenWidth*h
-	SUBS	r2,r2,#1
-	BGT	xloop8
+	sub	r0,r0,r14,LSL #1	@ dst -= _screenHeight + h
+	sub	r1,r1,r6		@ src += 1-_screenWidth*h
+	subs	r2,r2,#1
+	bgt	xloop8
 
-	LDMFD	r13!,{r4-r11,PC}
+	ldmfd	r13!,{r4-r11,PC}

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -26,11 +26,7 @@
 #import <UIKit/UIKit.h>
 #import <UIKit/UITextView.h>
 
- at protocol KeyboardInputProtocol
-- (void)handleKeyPress:(unichar)c;
- at end
-
- at interface SoftKeyboard : UIKeyboard<KeyboardInputProtocol> {
+ at interface SoftKeyboard : UIView {
 	id inputDelegate;
 	UITextView* inputView;
 }

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.m
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.m	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_keyboard.m	2008-07-30 14:40:54 UTC (rev 33450)
@@ -25,19 +25,6 @@
 
 #import "iphone_keyboard.h"
 
-// Override settings of the default keyboard implementation
- at implementation UIKeyboardImpl (DisableFeatures)
-
-- (BOOL)autoCapitalizationPreference {
-	return false;
-}
-
-- (BOOL)autoCorrectionPreference {
-	return false;
-}
-
- at end
-
 @implementation TextInputHandler
 
 - (id)initWithKeyboard:(SoftKeyboard*)keyboard; {
@@ -67,7 +54,8 @@
 @implementation SoftKeyboard
 
 - (id)initWithFrame:(CGRect)frame {
-	self = [super initWithFrame:frame];
+	//self = [super initWithFrame:frame];
+	self = [super initWithFrame:CGRectMake(0.0f, 0.0f, 0.0f, 0.0f)];
 	inputDelegate = nil;
 	inputView = [[TextInputHandler alloc] initWithKeyboard:self];
 	return self;

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_main.m
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_main.m	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_main.m	2008-07-30 14:40:54 UTC (rev 33450)
@@ -46,9 +46,14 @@
 	gArgc = argc;
 	gArgv = argv;
 
-	[[NSAutoreleasePool alloc] init];
+    NSAutoreleasePool *autoreleasePool = [ 
+        [ NSAutoreleasePool alloc ] init
+    ];
 
-    return UIApplicationMain(argc, argv, [iPhoneMain class]);
+    UIApplicationUseLegacyEvents(1);
+    int returnCode = UIApplicationMain(argc, argv, [iPhoneMain class]);
+    [ autoreleasePool release ];
+    return returnCode;
 }
 
 @implementation iPhoneMain
@@ -74,8 +79,11 @@
 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
 	// hide the status bar
 	[UIHardware _setStatusBarHeight:0.0f];
-	[self setStatusBarMode:2 orientation:0 duration:0.0f fenceID:0];
+	//[self setStatusBarMode:2 orientation:0 duration:0.0f fenceID:0];
 
+	//[self setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:NO];
+	[self setStatusBarHidden:YES animated:YES];
+
 	_window = [[UIWindow alloc] initWithContentRect:  [UIHardware fullScreenApplicationContentRect]];
 	[_window retain];
 
@@ -96,7 +104,7 @@
 - (void)applicationResume:(GSEventRef)event {
 	[self removeApplicationBadge];
 	[UIHardware _setStatusBarHeight:0.0f];
-	[self setStatusBarMode:2 orientation:0 duration:0.0f fenceID:0];
+	[self setStatusBarHidden:YES animated:YES];
 	[_view applicationResume];
 }
 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -27,12 +27,11 @@
 #define _IPHONE_VIDEO__H
 
 #import <UIKit/UIKit.h>
-#import <UIKit/UIView-Geometry.h>
 #import <GraphicsServices/GraphicsServices.h>
 #import <Foundation/Foundation.h>
 #import <CoreSurface/CoreSurface.h>
-#import <LayerKit/LKLayer.h>
 
+#import <QuartzCore/QuartzCore.h>
 #import "iphone_keyboard.h"
 
 @interface iPhoneView : UIView
@@ -41,7 +40,7 @@
 	NSMutableArray* _events;
 	NSLock* _lock;
 	SoftKeyboard* _keyboardView;
-	LKLayer* _screenLayer;
+	CALayer* _screenLayer;
 
 	int _fullWidth;
 	int _fullHeight;

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.m
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.m	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/iphone_video.m	2008-07-30 14:40:54 UTC (rev 33450)
@@ -31,8 +31,8 @@
 #import <GraphicsServices/GraphicsServices.h>
 #import <Foundation/Foundation.h>
 #import <CoreSurface/CoreSurface.h>
-#import <LayerKit/LKLayer.h>
 #import <UIKit/UIKeyboardLayoutQWERTY.h>
+#import <QuartzCore/QuartzCore.h>
 
 static iPhoneView *sharedInstance = nil;
 static int _width = 0;
@@ -53,8 +53,8 @@
 }
 
 void iPhone_updateScreenRect(int x1, int y1, int x2, int y2) {
-	NSRect rect = NSMakeRect(x1, y1, x2, y2);
-	[sharedInstance performSelectorOnMainThread:@selector(updateScreenRect:) withObject: [NSValue valueWithRect:rect] waitUntilDone: NO];
+	//CGRect rect = CGRectMake(x1, y1, x2, y2);
+	//[sharedInstance performSelectorOnMainThread:@selector(updateScreenRect:) withObject: [NSValue valueWithRect:rect] waitUntilDone: NO];
 }
 
 void iPhone_lockSurface() {
@@ -146,9 +146,9 @@
 }
 
 - (void)updateScreenRect:(id)rect {
-	NSRect nsRect = [rect rectValue];
-	CGRect cgRect = CGRectMake(nsRect.origin.x, nsRect.origin.y, nsRect.size.width, nsRect.size.height);
-	[sharedInstance setNeedsDisplayInRect: cgRect];
+	// NSRect nsRect = [rect rectValue];
+	// CGRect cgRect = CGRectMake(nsRect.origin.x, nsRect.origin.y, nsRect.size.width, nsRect.size.height);
+	// [sharedInstance setNeedsDisplayInRect: cgRect];
 }
 
 - (void)initSurface {
@@ -178,7 +178,7 @@
 	//printf("Surface created.\n");
 	CoreSurfaceBufferLock(_screenSurface, 3);
 
-	LKLayer* screenLayer = [[LKLayer layer] retain];
+	CALayer* screenLayer = [[CALayer layer] retain];
 
 	if (_keyboardView != nil) {
 		[_keyboardView removeFromSuperview];
@@ -213,7 +213,7 @@
 			_keyboardView = [[SoftKeyboard alloc] initWithFrame:keyFrame];
 			[_keyboardView setInputDelegate:self];
 		}
-
+		
 		[self addSubview:[_keyboardView inputView]];
 		[self addSubview: _keyboardView];
 		[[_keyboardView inputView] becomeFirstResponder];
@@ -283,11 +283,13 @@
 }
 
 - (void)mouseDown:(GSEvent*)event {
-	struct CGPoint point = GSEventGetLocationInWindow(event);
-
+	//printf("mouseDown()\n");
+	CGRect rect = GSEventGetLocationInWindow(event);
+	CGPoint point = CGPointMake(rect.origin.x, rect.origin.y);
+	
 	if (!getLocalMouseCoords(&point))
 		return;
-
+	
 	[self addEvent:
 		[[NSDictionary alloc] initWithObjectsAndKeys:
 		 [NSNumber numberWithInt:kInputMouseDown], @"type",
@@ -298,12 +300,18 @@
 	];
 }
 
+- (void)touchesBegan {
+	//printf("touchesBegan()\n");	
+}
+	
 - (void)mouseUp:(GSEvent*)event {
-	struct CGPoint point = GSEventGetLocationInWindow(event);
-
+	//printf("mouseUp()\n");
+	CGRect rect = GSEventGetLocationInWindow(event);
+	CGPoint point = CGPointMake(rect.origin.x, rect.origin.y);
+	
 	if (!getLocalMouseCoords(&point))
 		return;
-
+	
 	[self addEvent:
 		[[NSDictionary alloc] initWithObjectsAndKeys:
 		 [NSNumber numberWithInt:kInputMouseUp], @"type",
@@ -316,11 +324,12 @@
 
 - (void)mouseDragged:(GSEvent*)event {
 	//printf("mouseDragged()\n");
-	struct CGPoint point = GSEventGetLocationInWindow(event);
-
+	CGRect rect = GSEventGetLocationInWindow(event);
+	CGPoint point = CGPointMake(rect.origin.x, rect.origin.y);
+	
 	if (!getLocalMouseCoords(&point))
 		return;
-
+	
 	[self addEvent:
 		[[NSDictionary alloc] initWithObjectsAndKeys:
 		 [NSNumber numberWithInt:kInputMouseDragged], @"type",
@@ -333,19 +342,21 @@
 
 - (void)mouseEntered:(GSEvent*)event {
 	//printf("mouseEntered()\n");
-	// struct CGPoint point = GSEventGetLocationInWindow(event);
-	//
-	// if (!getLocalMouseCoords(&point))
-	//	return;
-	//
-	// [self addEvent:
-	//	[[NSDictionary alloc] initWithObjectsAndKeys:
-	//	 [NSNumber numberWithInt:kInputMouseSecondToggled], @"type",
-	//	 [NSNumber numberWithFloat:point.x], @"x",
-	//	 [NSNumber numberWithFloat:point.y], @"y",
-	//	 nil
-	//	]
-	// ];
+	CGRect rect = GSEventGetLocationInWindow(event);
+	CGPoint point = CGPointMake(rect.origin.x, rect.origin.y);
+
+	
+	if (!getLocalMouseCoords(&point))
+		return;
+	
+	[self addEvent:
+		[[NSDictionary alloc] initWithObjectsAndKeys:
+		 [NSNumber numberWithInt:kInputMouseSecondToggled], @"type",
+		 [NSNumber numberWithFloat:point.x], @"x",
+		 [NSNumber numberWithFloat:point.y], @"y",
+		 nil
+		]
+	];
 }
 
 - (void)mouseExited:(GSEvent*)event {
@@ -361,19 +372,19 @@
 - (void)mouseMoved:(GSEvent*)event
 {
 	//printf("mouseMoved()\n");
-	struct CGPoint point = GSEventGetLocationInWindow(event);
-
-	if (!getLocalMouseCoords(&point))
-		return;
-
-	[self addEvent:
-		[[NSDictionary alloc] initWithObjectsAndKeys:
-		 [NSNumber numberWithInt:kInputMouseSecondToggled], @"type",
-		 [NSNumber numberWithFloat:point.x], @"x",
-		 [NSNumber numberWithFloat:point.y], @"y",
-		 nil
-		]
-	];
+	// struct CGPoint point = GSEventGetLocationInWindow(event);
+	// 
+	// if (!getLocalMouseCoords(&point))
+	// 	return;
+	// 
+	// [self addEvent:
+	// 	[[NSDictionary alloc] initWithObjectsAndKeys:
+	// 	 [NSNumber numberWithInt:kInputMouseSecondToggled], @"type",
+	// 	 [NSNumber numberWithFloat:point.x], @"x",
+	// 	 [NSNumber numberWithFloat:point.y], @"y",
+	// 	 nil
+	// 	]
+	// ];
 }
 
 - (void)handleKeyPress:(unichar)c {
@@ -391,7 +402,7 @@
 	return TRUE;
 }
 
-- (int)swipe:(UIViewSwipeDirection)num withEvent:(GSEvent*)event {
+- (int)swipe:(int)num withEvent:(GSEvent*)event {
 	//printf("swipe: %i\n", num);
 
 	[self addEvent:

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -25,8 +25,6 @@
 
 #if defined(IPHONE_BACKEND)
 
-#include <CoreGraphics/CGDirectDisplay.h>
-#include <CoreSurface/CoreSurface.h>
 #include <unistd.h>
 #include <pthread.h>
 
@@ -41,11 +39,16 @@
 #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"
 #include "blit_arm.h"
+#include <sys/time.h>
 
+#include <CoreGraphics/CGDirectDisplay.h>
+#include <CoreSurface/CoreSurface.h>
+
 const OSystem::GraphicsMode OSystem_IPHONE::s_supportedGraphicsModes[] = {
 	{0, 0, 0}
 };
@@ -86,12 +89,12 @@
 
 void OSystem_IPHONE::initBackend() {
 	_savefile = new DefaultSaveFileManager();
-	_mixer = new Audio::Mixer();
 	_timer = new DefaultTimerManager();
 
 	gettimeofday(&_startTime, NULL);
 
-	setSoundCallback(Audio::Mixer::mixCallback, _mixer);
+	setupMixer();
+
 	setTimerCallback(&OSystem_IPHONE::timerHandler, 10);
 
 	OSystem::initBackend();
@@ -871,7 +874,7 @@
 				suspendLoop();
 				break;
 
-			case kInputKeyPressed:
+			case kInputKeyPressed: {
 				int keyPressed = (int)xUnit;
 				int ascii = keyPressed;
 				//printf("key: %i\n", keyPressed);
@@ -932,6 +935,7 @@
 				event.kbd.ascii = _queuedInputEvent.kbd.ascii = ascii;
 				_needEventRestPeriod = true;
 				break;
+			}
 
 			case kInputSwipe: {
 				Common::KeyCode keycode = Common::KEYCODE_INVALID;
@@ -1088,11 +1092,22 @@
 		AudioQueueStop(s_AudioQueue.queue, false);
 }
 
-bool OSystem_IPHONE::setSoundCallback(SoundProc proc, void *param) {
+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");
-	s_soundCallback = proc;
-	s_soundParam = param;
+	_mixer = new Audio::MixerImpl(this);
 
+	s_soundCallback = mixCallback;
+	s_soundParam = this;
+
+
 	s_AudioQueue.dataFormat.mSampleRate = AUDIO_SAMPLE_RATE;
 	s_AudioQueue.dataFormat.mFormatID = kAudioFormatLinearPCM;
 	s_AudioQueue.dataFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
@@ -1105,7 +1120,8 @@
 
 	if (AudioQueueNewOutput(&s_AudioQueue.dataFormat, AQBufferCallback, &s_AudioQueue, 0, kCFRunLoopCommonModes, 0, &s_AudioQueue.queue)) {
 		printf("Couldn't set the AudioQueue callback!\n");
-		return false;
+		_mixer->setReady(false);
+		return;
 	}
 
 	uint32 bufferBytes = s_AudioQueue.frameCount * s_AudioQueue.dataFormat.mBytesPerFrame;
@@ -1113,7 +1129,8 @@
 	for (int i = 0; i < AUDIO_BUFFERS; i++) {
 		if (AudioQueueAllocateBuffer(s_AudioQueue.queue, bufferBytes, &s_AudioQueue.buffers[i])) {
 			printf("Error allocating AudioQueue buffer!\n");
-			return false;
+			_mixer->setReady(false);		
+			return;
 		}
 
 		AQBufferCallback(&s_AudioQueue, s_AudioQueue.queue, s_AudioQueue.buffers[i]);
@@ -1122,10 +1139,12 @@
 	AudioQueueSetParameter(s_AudioQueue.queue, kAudioQueueParam_Volume, 1.0);
 	if (AudioQueueStart(s_AudioQueue.queue, NULL)) {
 		printf("Error starting the AudioQueue!\n");
-		return false;
+		_mixer->setReady(false);		
+		return;
 	}
-
-	return true;
+	
+	_mixer->setOutputRate(AUDIO_SAMPLE_RATE);
+	_mixer->setReady(true);
 }
 
 int OSystem_IPHONE::getOutputSampleRate() const {
@@ -1146,6 +1165,11 @@
 void OSystem_IPHONE::quit() {
 }
 
+void OSystem_IPHONE::getTimeAndDate(struct tm &t) const {
+	time_t curTime = time(0);
+	t = *localtime(&curTime);
+}
+
 void OSystem_IPHONE::setWindowCaption(const char *caption) {
 }
 
@@ -1169,17 +1193,11 @@
 }
 
 const char* OSystem_IPHONE::getConfigPath() {
-	if (s_is113OrHigher)
-		return SCUMMVM_PREFS_PATH;
-	else
-		return SCUMMVM_OLD_PREFS_PATH;
+	return SCUMMVM_PREFS_PATH;
 }
 
 const char* OSystem_IPHONE::getSavePath() {
-	if (s_is113OrHigher)
-		return SCUMMVM_SAVE_PATH;
-	else
-		return SCUMMVM_OLD_SAVE_PATH;
+	return SCUMMVM_SAVE_PATH;
 }
 
 void OSystem_IPHONE::migrateApp() {
@@ -1193,7 +1211,7 @@
 		if (!file.exists()) {
 			system("mkdir " SCUMMVM_ROOT_PATH);
 			system("mkdir " SCUMMVM_SAVE_PATH);
-
+			
 			// Copy over the prefs file
 			system("cp " SCUMMVM_OLD_PREFS_PATH " " SCUMMVM_PREFS_PATH);
 
@@ -1207,24 +1225,24 @@
 
 void iphone_main(int argc, char *argv[]) {
 
-	OSystem_IPHONE::migrateApp();
+	//OSystem_IPHONE::migrateApp();
 
-	// Redirect stdout and stderr if we're launching from the Springboard.
-	if (argc == 2 && strcmp(argv[1], "--launchedFromSB") == 0) {
-		FILE *newfp = fopen("/tmp/scummvm.log", "a");
-		if (newfp != NULL) {
-			fclose(stdout);
-			fclose(stderr);
-			*stdout = *newfp;
-			*stderr = *newfp;
-			setbuf(stdout, NULL);
-			setbuf(stderr, NULL);
+	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;
-		}
+		//extern int gDebugLevel;
+		//gDebugLevel = 10;
 	}
 
+	system("mkdir " SCUMMVM_ROOT_PATH);
+	system("mkdir " SCUMMVM_SAVE_PATH);
+
 	g_system = OSystem_IPHONE_create();
 	assert(g_system);
 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/iphone/osys_iphone.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -29,6 +29,8 @@
 #include "iphone_common.h"
 #include "common/system.h"
 #include "common/events.h"
+#include "sound/mixer_intern.h"
+#include "backends/fs/posix/posix-fs-factory.h"
 
 #include <AudioToolbox/AudioQueue.h>
 
@@ -62,7 +64,7 @@
 	static bool s_is113OrHigher;
 
 	Common::SaveFileManager *_savefile;
-	Audio::Mixer *_mixer;
+	Audio::MixerImpl *_mixer;
 	Common::TimerManager *_timer;
 
 	Graphics::Surface _framebuffer;
@@ -152,12 +154,16 @@
 	virtual void unlockMutex(MutexRef mutex);
 	virtual void deleteMutex(MutexRef mutex);
 
-	virtual bool setSoundCallback(SoundProc proc, void *param);
+	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 void quit();
 
+	FilesystemFactory *getFilesystemFactory() { return &POSIXFilesystemFactory::instance(); }
+	virtual void getTimeAndDate(struct tm &t) const;
+
 	virtual void setWindowCaption(const char *caption);
 
 	virtual Common::SaveFileManager *getSavefileManager();

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/sdl.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/sdl.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/sdl.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -170,6 +170,10 @@
 	_joystick(0),
 	_currentShakePos(0), _newShakePos(0),
 	_paletteDirtyStart(0), _paletteDirtyEnd(0),
+#ifdef MIXER_DOUBLE_BUFFERING
+	_soundMutex(0), _soundCond(0), _soundThread(0),
+	_soundThreadIsRunning(false), _soundThreadShouldQuit(false),
+#endif
 	_savefile(0),
 	_mixer(0),
 	_timer(0),

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl	2008-07-30 14:40:54 UTC (rev 33450)
@@ -29,7 +29,7 @@
 	);
 	
 	# these are normally enabled for each variation
-	$DefaultFeatures = qw(zlib tremor);
+	$DefaultFeatures = qw(zlib mad tremor);
 	#$DefaultFeatures = qw(zlib mad tremor);
 
 	

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/SymbianOS.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/SymbianOS.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/SymbianOS.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -617,9 +617,13 @@
 
 long int symbian_ftell(FILE* handle) {
 	TInt pos = 0;
+	TSymbianFileEntry* entry = ((TSymbianFileEntry*)(handle));
 
-	((TSymbianFileEntry*)(handle))->iFileHandle.Seek(ESeekCurrent, pos);
-
+	entry->iFileHandle.Seek(ESeekCurrent, pos);
+	if(entry->iInputPos != KErrNotFound)
+		{
+		pos+=(entry->iInputPos - entry->iInputBufferLen);
+		}
 	return pos;
 }
 
@@ -627,6 +631,7 @@
 
 	TSeek seekMode = ESeekStart;
 	TInt pos = offset;
+	TSymbianFileEntry* entry = ((TSymbianFileEntry*)(handle));
 
 	switch(whence) {
 	case SEEK_SET:
@@ -634,6 +639,9 @@
 		break;
 	case SEEK_CUR:
 		seekMode = ESeekCurrent;
+		if(entry->iInputPos != KErrNotFound) {
+			pos+=(entry->iInputPos - entry->iInputBufferLen);
+		}
 		break;
 	case SEEK_END:
 		seekMode = ESeekEnd;
@@ -641,9 +649,9 @@
 
 	}
 	
-	((TSymbianFileEntry*)(handle))->iInputPos = KErrNotFound;
+	entry->iInputPos = KErrNotFound;
 
-	return ((TSymbianFileEntry*)(handle))->iFileHandle.Seek(seekMode, pos);
+	return entry->iFileHandle.Seek(seekMode, pos);
 }
 
 void symbian_clearerr(FILE* /*handle*/) {

Modified: scummvm/branches/gsoc2008-vkeybd/backends/plugins/win32/win32-provider.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/plugins/win32/win32-provider.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/backends/plugins/win32/win32-provider.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -50,21 +50,14 @@
 
 	virtual VoidFunc findSymbol(const char *symbol) {
 		#ifndef _WIN32_WCE
-		void *func = (void *)GetProcAddress((HMODULE)_dlHandle, symbol);
+		FARPROC func = GetProcAddress((HMODULE)_dlHandle, symbol);
 		#else
-		void *func = (void *)GetProcAddress((HMODULE)_dlHandle, toUnicode(symbol));
+		FARPROC func = GetProcAddress((HMODULE)_dlHandle, toUnicode(symbol));
 		#endif
 		if (!func)
 			debug("Failed loading symbol '%s' from plugin '%s'", symbol, _filename.c_str());
 
-		// FIXME HACK: This is a HACK to circumvent a clash between the ISO C++
-		// standard and POSIX: ISO C++ disallows casting between function pointers
-		// and data pointers, but dlsym always returns a void pointer. For details,
-		// see e.g. <http://www.trilithium.com/johan/2004/12/problem-with-dlsym/>.
-		assert(sizeof(VoidFunc) == sizeof(func));
-		VoidFunc tmp;
-		memcpy(&tmp, &func, sizeof(VoidFunc));
-		return tmp;
+		return (void (*)())func;
 	}
 
 public:

Modified: scummvm/branches/gsoc2008-vkeybd/base/commandLine.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/base/commandLine.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/base/commandLine.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -228,6 +228,7 @@
 #elif defined(__SYMBIAN32__)
 	strcpy(savePath, Symbian::GetExecutablePath());
 	strcat(savePath, DEFAULT_SAVE_PATH);
+	strcat(savePath, "\\");
 	ConfMan.registerDefault("savepath", savePath);
 #elif defined (IPHONE)
 	ConfMan.registerDefault("savepath", OSystem_IPHONE::getSavePath());
@@ -684,9 +685,9 @@
 			failure++;
 		} else if (candidates.size() > 1) {
 			if (gameidDiffers) {
-				printf(" FAILURE: Multiple games detected, some/all with wrong gameid\n");
+				printf(" WARNING: Multiple games detected, some/all with wrong gameid\n");
 			} else {
-				printf(" FAILURE: Multiple games detected, but all have the same gameid\n");
+				printf(" WARNING: Multiple games detected, but all have the same gameid\n");
 			}
 			failure++;
 		} else if (gameidDiffers) {

Modified: scummvm/branches/gsoc2008-vkeybd/base/game.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/base/game.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/base/game.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -92,6 +92,10 @@
 	const Common::String &description() const { return getVal("description"); }
 	Common::Language language() const { return contains("language") ? Common::parseLanguage(getVal("language")) : Common::UNK_LANG; }
 	Common::Platform platform() const { return contains("platform") ? Common::parsePlatform(getVal("platform")) : Common::kPlatformUnknown; }
+	
+	const Common::String &preferredtarget() const {
+		return contains("preferredtarget") ? getVal("preferredtarget") : getVal("gameid");
+	}
 };
 
 /** List of games. */

Modified: scummvm/branches/gsoc2008-vkeybd/base/main.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/base/main.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/base/main.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -110,36 +110,9 @@
 
 // TODO: specify the possible return values here
 static int runGame(const EnginePlugin *plugin, OSystem &system, const Common::String &edebuglevels) {
-	Common::String gameDataPath(ConfMan.get("path"));
-	if (gameDataPath.empty()) {
-	} else if (gameDataPath.lastChar() != '/'
-#if defined(__MORPHOS__) || defined(__amigaos4__)
-					&& gameDataPath.lastChar() != ':'
-#endif
-					&& gameDataPath.lastChar() != '\\') {
-		gameDataPath += '/';
-		ConfMan.set("path", gameDataPath, Common::ConfigManager::kTransientDomain);
-	}
+	// Query  the game data path, for messages
+	Common::String path = ConfMan.hasKey("path") ? ConfMan.get("path") : ".";
 
-	// We add the game "path" to the file search path via File::addDefaultDirectory(),
-	// so that MD5-based detection will be able to properly find files with mixed case
-	// filenames.
-	// FIXME/TODO: Fingolfin still doesn't like this; if those MD5-based detectors used
-	// FSNodes instead of File::open, they wouldn't have to do this.
-	Common::String path;
-	if (ConfMan.hasKey("path")) {
-		path = ConfMan.get("path");
-		FilesystemNode dir(path);
-		if (!dir.isDirectory()) {
-			warning("Game directory does not exist (%s)", path.c_str());
-			return 0;
-		}
-	} else {
-		path = ".";
-		warning("No path was provided. Assuming the data files are in the current directory");
-	}
-	Common::File::addDefaultDirectory(path);
-
 	// Create the game engine
 	Engine *engine = 0;
 	PluginError err = (*plugin)->createInstance(&system, &engine);
@@ -181,15 +154,14 @@
 		system.setWindowCaption(caption.c_str());
 	}
 
-	if (ConfMan.hasKey("path"))
-		Common::File::addDefaultDirectory(ConfMan.get("path"));
-	else
-		Common::File::addDefaultDirectory(".");
+	// Add the game path to the directory search list
+	Common::File::addDefaultDirectory(path);
 
 	// Add extrapath (if any) to the directory search list
 	if (ConfMan.hasKey("extrapath"))
 		Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath"));
 
+	// If a second extrapath is specified on the app domain level, add that as well.
 	if (ConfMan.hasKey("extrapath", Common::ConfigManager::kApplicationDomain))
 		Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath", Common::ConfigManager::kApplicationDomain));
 

Modified: scummvm/branches/gsoc2008-vkeybd/base/plugins.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/base/plugins.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/base/plugins.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -140,6 +140,9 @@
 		#if PLUGIN_ENABLED_STATIC(SWORD2)
 		LINK_PLUGIN(SWORD2)
 		#endif
+		#if PLUGIN_ENABLED_STATIC(TINSEL)
+		LINK_PLUGIN(TINSEL)
+		#endif
 		#if PLUGIN_ENABLED_STATIC(TOUCHE)
 		LINK_PLUGIN(TOUCHE)
 		#endif

Modified: scummvm/branches/gsoc2008-vkeybd/common/advancedDetector.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/advancedDetector.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/advancedDetector.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -48,7 +48,7 @@
  * @param platform	restrict results to specified platform only
  * @return	list of ADGameDescription (or subclass) pointers corresponding to matched games
  */
-static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &params, Language language, Platform platform, const Common::String extra);
+static ADGameDescList detectGame(const FSList &fslist, const Common::ADParams &params, Language language, Platform platform, const Common::String extra);
 
 
 /**
@@ -194,7 +194,7 @@
 }
 
 GameList AdvancedMetaEngine::detectGames(const FSList &fslist) const {
-	ADGameDescList matches = detectGame(&fslist, params, Common::UNK_LANG, Common::kPlatformUnknown, "");
+	ADGameDescList matches = detectGame(fslist, params, Common::UNK_LANG, Common::kPlatformUnknown, "");
 	GameList detectedGames;
 
 	// Use fallback detector if there were no matches by other means
@@ -233,8 +233,22 @@
 
 	Common::String gameid = ConfMan.get("gameid");
 
-	ADGameDescList matches = detectGame(0, params, language, platform, extra);
+	Common::String path;
+	if (ConfMan.hasKey("path")) {
+		path = ConfMan.get("path");
+	} else {
+		path = ".";
+		warning("No path was provided. Assuming the data files are in the current directory");
+	}
+	FilesystemNode dir(path);
+	FSList files;
+	if (!dir.isDirectory() || !dir.getChildren(files, FilesystemNode::kListAll)) {
+		warning("Game data path does not exist or is not a directory (%s)", path.c_str());
+		return kNoGameDataFoundError;
+	}
 
+	ADGameDescList matches = detectGame(files, params, language, platform, extra);
+
 	if (params.singleid == NULL) {
 		for (uint i = 0; i < matches.size(); i++) {
 			if (matches[i]->gameid == gameid) {
@@ -287,7 +301,7 @@
 	printf("\n");
 }
 
-static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &params, Language language, Platform platform, const Common::String extra) {
+static ADGameDescList detectGame(const FSList &fslist, const Common::ADParams &params, Language language, Platform platform, const Common::String extra) {
 	StringSet filesList;
 
 	StringMap filesMD5;
@@ -319,57 +333,35 @@
 		}
 	}
 
-	// TODO/FIXME: Fingolfin says: It's not good that we have two different code paths here,
-	// one using a FSList, one using File::open, as that will lead to discrepancies and subtle
-	// problems caused by those.
-	if (fslist != 0) {
-		// Get the information of the existing files
-		for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
-			if (file->isDirectory()) continue;
-			tstr = file->getName();
-			tstr.toLowercase();
+	// Get the information of the existing files
+	for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
+		if (file->isDirectory()) continue;
+		tstr = file->getName();
+		tstr.toLowercase();
 
-			// Strip any trailing dot
-			if (tstr.lastChar() == '.')
-				tstr.deleteLastChar();
+		// Strip any trailing dot
+		if (tstr.lastChar() == '.')
+			tstr.deleteLastChar();
 
-			allFiles[tstr] = true;
+		allFiles[tstr] = true;
 
-			debug(3, "+ %s", tstr.c_str());
+		debug(3, "+ %s", tstr.c_str());
 
-			if (!filesList.contains(tstr)) continue;
+		if (!filesList.contains(tstr)) continue;
 
-			if (!md5_file_string(*file, md5str, params.md5Bytes))
-				continue;
-			filesMD5[tstr] = md5str;
+		if (!md5_file_string(*file, md5str, params.md5Bytes))
+			continue;
+		filesMD5[tstr] = md5str;
 
-			debug(3, "> %s: %s", tstr.c_str(), md5str);
+		debug(3, "> %s: %s", tstr.c_str(), md5str);
 
-			if (testFile.open(file->getPath())) {
-				filesSize[tstr] = (int32)testFile.size();
-				testFile.close();
-			}
+		if (testFile.open(file->getPath())) {
+			filesSize[tstr] = (int32)testFile.size();
+			testFile.close();
 		}
-	} else {
-		// Get the information of the requested files
-		for (StringSet::const_iterator file = filesList.begin(); file != filesList.end(); ++file) {
-			tstr = file->_key;
-
-			debug(3, "+ %s", tstr.c_str());
-			if (!filesMD5.contains(tstr)) {
-				if (testFile.open(tstr) || testFile.open(tstr + ".")) {
-					filesSize[tstr] = (int32)testFile.size();
-					testFile.close();
-
-					if (md5_file_string(file->_key.c_str(), md5str, params.md5Bytes)) {
-						filesMD5[tstr] = md5str;
-						debug(3, "> %s: %s", tstr.c_str(), md5str);
-					}
-				}
-			}
-		}
 	}
 
+
 	ADGameDescList matched;
 	int maxFilesMatched = 0;
 

Modified: scummvm/branches/gsoc2008-vkeybd/common/algorithm.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/algorithm.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/algorithm.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -29,6 +29,11 @@
 
 namespace Common {
 
+/**
+ * Copies data from the range [first, last) to [dst, dst + (last - first)).
+ * It requires the range [dst, dst + (last - first)) to be valid.
+ * It also requires dst not to be in the range [first, last).
+ */
 template<class In, class Out>
 Out copy(In first, In last, Out dst) {
 	while (first != last)
@@ -36,6 +41,13 @@
 	return dst;
 }
 
+/**
+ * Copies data from the range [first, last) to [dst - (last - first), dst).
+ * It requires the range [dst - (last - first), dst) to be valid.
+ * It also requires dst not to be in the range [first, last).
+ * 
+ * Unlike copy copy_backward copies the data from the end to the beginning.
+ */
 template<class In, class Out>
 Out copy_backward(In first, In last, Out dst) {
 	while (first != last)
@@ -43,6 +55,15 @@
 	return dst;
 }
 
+/**
+ * Copies data from the range [first, last) to [dst, dst + (last - first)).
+ * It requires the range [dst, dst + (last - first)) to be valid.
+ * It also requires dst not to be in the range [first, last).
+ *
+ * Unlike copy or copy_backward it does not copy all data. It only copies
+ * a data element when operator() of the op parameter returns true for the
+ * passed data element.
+ */
 template<class In, class Out, class Op>
 Out copy_if(In first, In last, Out dst, Op op) {
 	while (first != last) {
@@ -76,6 +97,9 @@
 	return last;
 }
 
+/**
+ * Sets all elements in the range [first, last) to val.
+ */
 template<class In, class Value>
 In set_to(In first, In last, Value val) {
 	while (first != last)
@@ -83,6 +107,10 @@
 	return first;
 }
 
+/**
+ * Finds the first data value in the range [first, last) matching v.
+ * For data comperance it uses operator == of the data elements.
+ */
 template<class In, class T>
 In find(In first, In last, const T &v) {
 	while (first != last) {
@@ -93,6 +121,10 @@
 	return last;
 }
 
+/**
+ * Finds the first data value in the range [first, last) for which
+ * the specified predicate p returns true.
+ */
 template<class In, class Pred>
 In find_if(In first, In last, Pred p) {
 	while (first != last) {
@@ -103,15 +135,22 @@
 	return last;
 }
 
+/**
+ * Applies the function f on all elements of the range [first, last).
+ * The processing order is from beginning to end.
+ */
 template<class In, class Op>
 Op for_each(In first, In last, Op f) {
 	while (first != last) f(*first++);
 	return f;
 }
 
-// Simple sort function, modeled after std::sort.
-// Use it like this:  sort(container.begin(), container.end()).
-// Also work on plain old int arrays etc.
+/**
+ * Simple sort function, modeled after std::sort.
+ * Use it like this: sort(container.begin(), container.end()).
+ * Also works on plain old i.e. int arrays etc. For comperance
+ * operator < is used.
+ */
 template<class T>
 void sort(T first, T last) {
 	if (first == last)
@@ -131,8 +170,13 @@
 	}
 }
 
-// Using this with: Common::Less from common/func.h
-// will give the same results as the function above.
+/**
+ * Simple sort function, modeled after std::sort.
+ * It compares data with the given comparator object comp.
+ *
+ * Note: Using this with: Common::Less from common/func.h
+ * will give the same results as the plain sort function.
+ */
 template<class T, class StrictWeakOrdering>
 void sort(T first, T last, StrictWeakOrdering comp) {
 	if (first == last)

Modified: scummvm/branches/gsoc2008-vkeybd/common/config-file.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/config-file.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/config-file.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -58,7 +58,7 @@
 
 bool ConfigFile::loadFromFile(const String &filename) {
 	File file;
-	if (file.open(filename, File::kFileReadMode))
+	if (file.open(filename))
 		return loadFromStream(file);
 	else
 		return false;
@@ -171,8 +171,8 @@
 }
 
 bool ConfigFile::saveToFile(const String &filename) {
-	File file;
-	if (file.open(filename, File::kFileWriteMode))
+	DumpFile file;
+	if (file.open(filename))
 		return saveToStream(file);
 	else
 		return false;

Modified: scummvm/branches/gsoc2008-vkeybd/common/config-manager.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/config-manager.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/config-manager.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -289,13 +289,9 @@
 
 void ConfigManager::flushToDisk() {
 #ifndef __DC__
-	File cfg_file;
+	DumpFile cfg_file;
 
-// TODO
-//	if (!willwrite)
-//		return;
-
-	if (!cfg_file.open(_filename, File::kFileWriteMode)) {
+	if (!cfg_file.open(_filename)) {
 		warning("Unable to write configuration file: %s", _filename.c_str());
 	} else {
 		// First write the domains in _domainSaveOrder, in that order.
@@ -642,6 +638,10 @@
 	// the given name already exists?
 
 	_gameDomains[domName];
+
+	// Add it to the _domainSaveOrder, if it's not already in there
+	if (find(_domainSaveOrder.begin(), _domainSaveOrder.end(), domName) == _domainSaveOrder.end())
+		_domainSaveOrder.push_back(domName);
 }
 
 void ConfigManager::removeGameDomain(const String &domName) {

Modified: scummvm/branches/gsoc2008-vkeybd/common/file.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/file.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/file.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -104,7 +104,7 @@
 	//#define fgets(str, size, file)				DS::std_fgets(str, size, file)	// not used
 	//#define getc(handle)						DS::std_getc(handle)	// not used
 	//#define getcwd(dir, dunno)					DS::std_getcwd(dir, dunno)	// not used
-	//#define ferror(handle)						DS::std_ferror(handle)	// not used
+	#define ferror(handle)						DS::std_ferror(handle)
 
 #endif
 
@@ -273,59 +273,44 @@
 	: _handle(0), _ioFailed(false) {
 }
 
-//#define DEBUG_FILE_REFCOUNT
-
 File::~File() {
-#ifdef DEBUG_FILE_REFCOUNT
-	warning("File::~File on file '%s'", _name.c_str());
-#endif
 	close();
 }
 
 
-bool File::open(const String &filename, AccessMode mode) {
-	assert(mode == kFileReadMode || mode == kFileWriteMode);
+bool File::open(const String &filename) {
+	assert(!filename.empty());
+	assert(!_handle);
 
-	if (filename.empty()) {
-		error("File::open: No filename was specified");
-	}
-
-	if (_handle) {
-		error("File::open: This file object already is opened (%s), won't open '%s'", _name.c_str(), filename.c_str());
-	}
-
 	_name.clear();
 	clearIOFailed();
 
 	String fname(filename);
 	fname.toLowercase();
 
-	const char *modeStr = (mode == kFileReadMode) ? "rb" : "wb";
-	if (mode == kFileWriteMode) {
-		_handle = fopenNoCase(filename, "", modeStr);
-	} else if (_filesMap && _filesMap->contains(fname)) {
+	if (_filesMap && _filesMap->contains(fname)) {
 		fname = (*_filesMap)[fname];
 		debug(3, "Opening hashed: %s", fname.c_str());
-		_handle = fopen(fname.c_str(), modeStr);
+		_handle = fopen(fname.c_str(), "rb");
 	} else if (_filesMap && _filesMap->contains(fname + ".")) {
 		// WORKAROUND: Bug #1458388: "SIMON1: Game Detection fails"
 		// sometimes instead of "GAMEPC" we get "GAMEPC." (note trailing dot)
 		fname = (*_filesMap)[fname + "."];
 		debug(3, "Opening hashed: %s", fname.c_str());
-		_handle = fopen(fname.c_str(), modeStr);
+		_handle = fopen(fname.c_str(), "rb");
 	} else {
 
 		if (_defaultDirectories) {
 			// Try all default directories
 			StringIntMap::const_iterator x(_defaultDirectories->begin());
 			for (; _handle == NULL && x != _defaultDirectories->end(); ++x) {
-				_handle = fopenNoCase(filename, x->_key, modeStr);
+				_handle = fopenNoCase(filename, x->_key, "rb");
 			}
 		}
 
 		// Last resort: try the current directory
 		if (_handle == NULL)
-			_handle = fopenNoCase(filename, "", modeStr);
+			_handle = fopenNoCase(filename, "", "rb");
 
 		// Last last (really) resort: try looking inside the application bundle on Mac OS X for the lowercase file.
 #if defined(MACOSX) || defined(IPHONE)
@@ -335,7 +320,7 @@
 			if (fileUrl) {
 				UInt8 buf[256];
 				if (CFURLGetFileSystemRepresentation(fileUrl, false, (UInt8 *)buf, 256)) {
-					_handle = fopen((char *)buf, modeStr);
+					_handle = fopen((char *)buf, "rb");
 				}
 				CFRelease(fileUrl);
 			}
@@ -345,26 +330,15 @@
 
 	}
 
-	if (_handle == NULL) {
-		if (mode == kFileReadMode)
-			debug(2, "File %s not found", filename.c_str());
-		else
-			debug(2, "File %s not opened", filename.c_str());
-		return false;
-	}
+	if (_handle == NULL)
+		debug(2, "File %s not opened", filename.c_str());
+	else
+		_name = filename;
 
-
-	_name = filename;
-
-#ifdef DEBUG_FILE_REFCOUNT
-	warning("File::open on file '%s'", _name.c_str());
-#endif
-
-	return true;
+	return _handle != NULL;
 }
 
-bool File::open(const FilesystemNode &node, AccessMode mode) {
-	assert(mode == kFileReadMode || mode == kFileWriteMode);
+bool File::open(const FilesystemNode &node) {
 
 	if (!node.exists()) {
 		warning("File::open: Trying to open a FilesystemNode which does not exist");
@@ -389,25 +363,14 @@
 	clearIOFailed();
 	_name.clear();
 
-	const char *modeStr = (mode == kFileReadMode) ? "rb" : "wb";
+	_handle = fopen(node.getPath().c_str(), "rb");
 
-	_handle = fopen(node.getPath().c_str(), modeStr);
+	if (_handle == NULL)
+		debug(2, "File %s not found", filename.c_str());
+	else
+		_name = filename;
 
-	if (_handle == NULL) {
-		if (mode == kFileReadMode)
-			debug(2, "File %s not found", filename.c_str());
-		else
-			debug(2, "File %s not opened", filename.c_str());
-		return false;
-	}
-
-	_name = filename;
-
-#ifdef DEBUG_FILE_REFCOUNT
-	warning("File::open on file '%s'", _name.c_str());
-#endif
-
-	return true;
+	return _handle != NULL;
 }
 
 bool File::exists(const String &filename) {
@@ -438,7 +401,7 @@
 
 	//Try opening the file inside the local directory as a last resort
 	File tmp;
-	return tmp.open(filename, kFileReadMode);
+	return tmp.open(filename);
 }
 
 void File::close() {
@@ -462,28 +425,19 @@
 }
 
 bool File::eof() const {
-	if (_handle == NULL) {
-		error("File::eof: File is not open!");
-		return false;
-	}
+	assert(_handle);
 
 	return feof((FILE *)_handle) != 0;
 }
 
 uint32 File::pos() const {
-	if (_handle == NULL) {
-		error("File::pos: File is not open!");
-		return 0;
-	}
+	assert(_handle);
 
 	return ftell((FILE *)_handle);
 }
 
 uint32 File::size() const {
-	if (_handle == NULL) {
-		error("File::size: File is not open!");
-		return 0;
-	}
+	assert(_handle);
 
 	uint32 oldPos = ftell((FILE *)_handle);
 	fseek((FILE *)_handle, 0, SEEK_END);
@@ -494,10 +448,7 @@
 }
 
 void File::seek(int32 offs, int whence) {
-	if (_handle == NULL) {
-		error("File::seek: File is not open!");
-		return;
-	}
+	assert(_handle);
 
 	if (fseek((FILE *)_handle, offs, whence) != 0)
 		clearerr((FILE *)_handle);
@@ -507,10 +458,7 @@
 	byte *ptr2 = (byte *)ptr;
 	uint32 real_len;
 
-	if (_handle == NULL) {
-		error("File::read: File is not open!");
-		return 0;
-	}
+	assert(_handle);
 
 	if (len == 0)
 		return 0;
@@ -523,20 +471,62 @@
 	return real_len;
 }
 
-uint32 File::write(const void *ptr, uint32 len) {
-	if (_handle == NULL) {
-		error("File::write: File is not open!");
-		return 0;
-	}
 
+DumpFile::DumpFile() : _handle(0) {
+}
+
+DumpFile::~DumpFile() {
+	close();
+}
+
+bool DumpFile::open(const String &filename) {
+	assert(!filename.empty());
+	assert(!_handle);
+
+	String fname(filename);
+	fname.toLowercase();
+	
+	_handle = fopenNoCase(filename, "", "wb");
+
+	if (_handle == NULL)
+		debug(2, "Failed to open '%s' for writing", filename.c_str());
+
+	return _handle != NULL;
+}
+
+void DumpFile::close() {
+	if (_handle)
+		fclose((FILE *)_handle);
+	_handle = NULL;
+}
+
+bool DumpFile::isOpen() const {
+	return _handle != NULL;
+}
+
+bool DumpFile::ioFailed() const {
+	assert(_handle);
+	return ferror((FILE *)_handle) != 0;
+}
+
+void DumpFile::clearIOFailed() {
+	assert(_handle);
+	clearerr((FILE *)_handle);
+}
+
+bool DumpFile::eof() const {
+	assert(_handle);
+	return feof((FILE *)_handle) != 0;
+}
+
+uint32 DumpFile::write(const void *ptr, uint32 len) {
+	assert(_handle);
+
 	if (len == 0)
 		return 0;
 
-	if ((uint32)fwrite(ptr, 1, len, (FILE *)_handle) != len) {
-		_ioFailed = true;
-	}
-
-	return len;
+	return (uint32)fwrite(ptr, 1, len, (FILE *)_handle);
 }
 
+
 }	// End of namespace Common

Modified: scummvm/branches/gsoc2008-vkeybd/common/file.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/file.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/file.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -27,6 +27,7 @@
 #define COMMON_FILE_H
 
 #include "common/scummsys.h"
+#include "common/noncopyable.h"
 #include "common/str.h"
 #include "common/stream.h"
 
@@ -34,7 +35,10 @@
 
 namespace Common {
 
-class File : public SeekableReadStream, public WriteStream {
+/**
+ * TODO: vital to document this core class properly!!! For both users and implementors
+ */
+class File : public SeekableReadStream, public NonCopyable {
 protected:
 	/** File handle to the actual file; 0 if no file is open. */
 	void *_handle;
@@ -45,19 +49,7 @@
 	/** The name of this file, for debugging. */
 	String _name;
 
-private:
-	// Disallow copying File objects. There is not strict reason for this,
-	// except that so far we never had real need for such a feature, and
-	// code that accidentally copied File objects tended to break in strange
-	// ways.
-	File(const File &f);
-	File &operator =(const File &f);
-
 public:
-	enum AccessMode {
-		kFileReadMode = 1,
-		kFileWriteMode = 2
-	};
 
 	static void addDefaultDirectory(const String &directory);
 	static void addDefaultDirectoryRecursive(const String &directory, int level = 4, const String &prefix = "");
@@ -80,8 +72,8 @@
 	 */
 	static bool exists(const String &filename);
 
-	virtual bool open(const String &filename, AccessMode mode = kFileReadMode);
-	virtual bool open(const FilesystemNode &node, AccessMode mode = kFileReadMode);
+	virtual bool open(const String &filename);
+	virtual bool open(const FilesystemNode &node);
 
 	virtual void close();
 
@@ -114,9 +106,52 @@
 	virtual uint32 size() const;
 	void seek(int32 offs, int whence = SEEK_SET);
 	uint32 read(void *dataPtr, uint32 dataSize);
+};
+
+
+/**
+ * TODO: document this class
+ *
+ * Some design ideas:
+ *  - automatically drop all files into dumps/ dir? Might not be desired in all cases
+ */
+class DumpFile : public WriteStream, public NonCopyable {
+protected:
+	/** File handle to the actual file; 0 if no file is open. */
+	void *_handle;
+
+public:
+	DumpFile();
+	virtual ~DumpFile();
+
+	virtual bool open(const String &filename);
+	//virtual bool open(const FilesystemNode &node);
+
+	virtual void close();
+
+	/**
+	 * Checks if the object opened a file successfully.
+	 *
+	 * @return: true if any file is opened, false otherwise.
+	 */
+	bool isOpen() const;
+
+
+	bool ioFailed() const;
+	void clearIOFailed();
+	bool eos() const { return eof(); }
+
+	/**
+	 * Checks for end of file.
+	 *
+	 * @return: true if the end of file is reached, false otherwise.
+	 */
+	virtual bool eof() const;
+
 	uint32 write(const void *dataPtr, uint32 dataSize);
 };
 
+
 } // End of namespace Common
 
 #endif

Modified: scummvm/branches/gsoc2008-vkeybd/common/func.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/func.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/func.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -29,12 +29,18 @@
 
 namespace Common {
 
+/**
+ * Generic unary function.
+ */
 template<class Arg, class Result>
 struct UnaryFunction {
 	typedef Arg ArgumenType;
 	typedef Result ResultType;
 };
 
+/**
+ * Generic binary function.
+ */
 template<class Arg1, class Arg2, class Result>
 struct BinaryFunction {
 	typedef Arg1 FirstArgumentType;
@@ -42,16 +48,25 @@
 	typedef Result ResultType;
 };
 
+/**
+ * Predicate to check for equallity of two data elements.
+ */
 template<class T>
 struct EqualTo : public BinaryFunction<T, T, bool> {
 	bool operator()(const T &x, const T &y) const { return x == y; }
 };
 
+/**
+ * Predicate to check for x being less than y.
+ */
 template<class T>
 struct Less : public BinaryFunction<T, T, bool> {
 	bool operator()(const T &x, const T &y) const { return x < y; }
 };
 
+/**
+ * Predicate to check for x being greater than y.
+ */
 template<class T>
 struct Greater : public BinaryFunction<T, T, bool> {
 	bool operator()(const T &x, const T &y) const { return x > y; }
@@ -70,6 +85,10 @@
 	}
 };
 
+/**
+ * Transforms a binary function object into an unary function object.
+ * To achieve that the first parameter is bound to the passed value t.
+ */
 template<class Op, class T>
 inline Binder1st<Op> bind1st(const Op &op, const T &t) {
 	return Binder1st<Op>(op, t);
@@ -88,6 +107,10 @@
 	}
 };
 
+/**
+ * Transforms a binary function object into an unary function object.
+ * To achieve that the second parameter is bound to the passed value t.
+ */
 template<class Op, class T>
 inline Binder2nd<Op> bind2nd(const Op &op, const T &t) {
 	return Binder2nd<Op>(op, t);
@@ -119,11 +142,17 @@
 	}
 };
 
+/**
+ * Creates an unary function object from a function pointer.
+ */
 template<class Arg, class Result>
 inline PointerToUnaryFunc<Arg, Result> ptr_fun(Result (*func)(Arg)) {
 	return PointerToUnaryFunc<Arg, Result>(func);
 }
 
+/**
+ * Creates an binary function object from a function pointer.
+ */
 template<class Arg1, class Arg2, class Result>
 inline PointerToBinaryFunc<Arg1, Arg2, Result> ptr_fun(Result (*func)(Arg1, Arg2)) {
 	return PointerToBinaryFunc<Arg1, Arg2, Result>(func);
@@ -143,7 +172,7 @@
 };
 
 template<class Result, class T>
-class ConstMemFunc0 : public UnaryFunction<T*, Result> {
+class ConstMemFunc0 : public UnaryFunction<T *, Result> {
 private:
 	Result (T::*_func)() const;
 public:
@@ -156,7 +185,7 @@
 };
 
 template<class Result, class Arg, class T>
-class MemFunc1 : public BinaryFunction<T*, Arg, Result> {
+class MemFunc1 : public BinaryFunction<T *, Arg, Result> {
 private:
 	Result (T::*_func)(Arg);
 public:
@@ -169,7 +198,7 @@
 };
 
 template<class Result, class Arg, class T>
-class ConstMemFunc1 : public BinaryFunction<T*, Arg, Result> {
+class ConstMemFunc1 : public BinaryFunction<T *, Arg, Result> {
 private:
 	Result (T::*_func)(Arg) const;
 public:
@@ -181,21 +210,43 @@
 	}
 };
 
+/**
+ * Creates a unary function object from a class member function pointer.
+ * The parameter passed to the function object is the 'this' pointer to
+ * be used for the function call.
+ */
 template<class Result, class T>
 inline MemFunc0<Result, T> mem_fun(Result (T::*f)()) {
 	return MemFunc0<Result, T>(f);
 }
 
+/**
+ * Creates a unary function object from a class member function pointer.
+ * The parameter passed to the function object is the 'this' pointer to
+ * be used for the function call.
+ */
 template<class Result, class T>
 inline ConstMemFunc0<Result, T> mem_fun(Result (T::*f)() const) {
 	return ConstMemFunc0<Result, T>(f);
 }
 
+/**
+ * Creates a binary function object from a class member function pointer.
+ * The first parameter passed to the function object is the 'this' pointer to
+ * be used for the function call.
+ * The second one is the parameter passed to the member function.
+ */
 template<class Result, class Arg, class T>
 inline MemFunc1<Result, Arg, T> mem_fun(Result (T::*f)(Arg)) {
 	return MemFunc1<Result, Arg, T>(f);
 }
 
+/**
+ * Creates a binary function object from a class member function pointer.
+ * The first parameter passed to the function object is the 'this' pointer to
+ * be used for the function call.
+ * The second one is the parameter passed to the member function.
+ */
 template<class Result, class Arg, class T>
 inline ConstMemFunc1<Result, Arg, T> mem_fun(Result (T::*f)(Arg) const) {
 	return ConstMemFunc1<Result, Arg, T>(f);
@@ -203,6 +254,11 @@
 
 // functor code
 
+/**
+ * Generic functor object for function objects without parameters.
+ *
+ * @see Functor1
+ */
 template<class Res>
 struct Functor0 {
 	virtual ~Functor0() {}
@@ -211,6 +267,18 @@
 	virtual Res operator()() const = 0;
 };
 
+/**
+ * Functor object for a class member function without parameter.
+ *
+ * Example creation:
+ *
+ * Foo bar;
+ * Functor0Men<void, Foo> myFunctor(&bar, &Foo::myFunc);
+ *
+ * Example usage:
+ *
+ * myFunctor();
+ */
 template<class Res, class T>
 class Functor0Mem : public Functor0<Res> {
 public:
@@ -218,7 +286,7 @@
 
 	Functor0Mem(T *t, const FuncType &func) : _t(t), _func(func) {}
 
-	bool isValid() const { return _func != 0; }
+	bool isValid() const { return _func != 0 && _t != 0; }
 	Res operator()() const {
 		return (_t->*_func)();
 	}
@@ -227,6 +295,38 @@
 	const FuncType _func;
 };
 
+/**
+ * Generic functor object for unary function objects.
+ *
+ * A typical usage for an unary function object is for executing opcodes
+ * in a script interpreter. To achieve that one can create an Common::Array
+ * object with 'Functor1<Arg, Res> *' as type. Now after the right engine version
+ * has been determined and the opcode table to use is found one could easily
+ * add the opcode implementations like this:
+ *
+ * Common::Array<Functor1<ScriptState, void> *> opcodeTable;
+ * opcodeTable[0] = new Functor1Mem<ScriptState, void, MyEngine_v1>(&myEngine, &MyEngine_v1::o1_foo);
+ * opcodeTable[1] = new Functor1Mem<ScriptState, void, MyEngine_v2>(&myEngine, &MyEngine_v2::o2_foo);
+ * // unimplemented/unused opcode
+ * opcodeTable[2] = 0;
+ * etc.
+ *
+ * This makes it easy to add member functions of different classes as
+ * opcode functions to the function table. Since with the generic
+ * Functor1<ScriptState, void> object the only requirement for an
+ * function to be used is 'ScriptState' as argument and 'void' as return
+ * value.
+ *
+ * Now for calling the opcodes one has simple to do:
+ * if (opcodeTable[opcodeNum] && opcodeTable[opcodeNum]->isValid())
+ *     (*opcodeTable[opcodeNum])(scriptState);
+ * else
+ *     warning("Unimplemented opcode %d", opcodeNum);
+ *
+ * If you want to see an real world example check the kyra engine.
+ * Files: engines/kyra/script.cpp and .h and engine/kyra/script_*.cpp
+ * are interesting for that matter.
+ */
 template<class Arg, class Res>
 struct Functor1 : public Common::UnaryFunction<Arg, Res> {
 	virtual ~Functor1() {}
@@ -235,6 +335,13 @@
 	virtual Res operator()(Arg) const = 0;
 };
 
+/**
+ * Functor object for an unary class member function.
+ * Usage is like with Functor0Mem. The resulting functor object
+ * will take one parameter though.
+ *
+ * @see Functor0Men
+ */
 template<class Arg, class Res, class T>
 class Functor1Mem : public Functor1<Arg, Res> {
 public:
@@ -242,7 +349,7 @@
 
 	Functor1Mem(T *t, const FuncType &func) : _t(t), _func(func) {}
 
-	bool isValid() const { return _func != 0; }
+	bool isValid() const { return _func != 0 && _t != 0; }
 	Res operator()(Arg v1) const {
 		return (_t->*_func)(v1);
 	}
@@ -251,6 +358,11 @@
 	const FuncType _func;
 };
 
+/**
+ * Generic functor object for binary function objects.
+ *
+ * @see Functor1
+ */
 template<class Arg1, class Arg2, class Res>
 struct Functor2 : public Common::BinaryFunction<Arg1, Arg2, Res> {
 	virtual ~Functor2() {}
@@ -259,6 +371,13 @@
 	virtual Res operator()(Arg1, Arg2) const = 0;
 };
 
+/**
+ * Functor object for a binary class member function.
+ * Usage is like with Functor0Mem. The resulting functor object
+ * will take two parameter though.
+ *
+ * @see Functor0Men
+ */
 template<class Arg1, class Arg2, class Res, class T>
 class Functor2Mem : public Functor2<Arg1, Arg2, Res> {
 public:
@@ -266,7 +385,7 @@
 
 	Functor2Mem(T *t, const FuncType &func) : _t(t), _func(func) {}
 
-	bool isValid() const { return _func != 0; }
+	bool isValid() const { return _func != 0 && _t != 0; }
 	Res operator()(Arg1 v1, Arg2 v2) const {
 		return (_t->*_func)(v1, v2);
 	}

Modified: scummvm/branches/gsoc2008-vkeybd/common/hashmap.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/hashmap.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/hashmap.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -58,7 +58,13 @@
 #include "common/str.h"
 #include "common/util.h"
 
+// FIXME: Since this define is very system dependant, 
+// it should be moved to the appropriate H file instead.
+// Portdefs might be a good location for example
+#if !defined(__SYMBIAN32__)
 #define USE_HASHMAP_MEMORY_POOL
+#endif
+
 #ifdef USE_HASHMAP_MEMORY_POOL
 #include "common/memorypool.h"
 // FIXME: we sadly can't assume standard C++ to be present

Modified: scummvm/branches/gsoc2008-vkeybd/common/ptr.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/ptr.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/ptr.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -121,7 +121,7 @@
 
 	~SharedPtr() { decRef(); }
 
-	SharedPtr &operator =(const SharedPtr &r) {
+	SharedPtr &operator=(const SharedPtr &r) {
 		if (r._refCount)
 			++(*r._refCount);
 		decRef();
@@ -134,7 +134,7 @@
 	}
 
 	template<class T2>
-	SharedPtr &operator =(const SharedPtr<T2> &r) {
+	SharedPtr &operator=(const SharedPtr<T2> &r) {
 		if (r._refCount)
 			++(*r._refCount);
 		decRef();
@@ -146,8 +146,8 @@
 		return *this;
 	}
 
-	ValueType &operator *() const { assert(_pointer); return *_pointer; }
-	Pointer operator ->() const { assert(_pointer); return _pointer; }
+	ValueType &operator*() const { assert(_pointer); return *_pointer; }
+	Pointer operator->() const { assert(_pointer); return _pointer; }
 
 	/**
 	 * Returns the plain pointer value. Be sure you know what you
@@ -171,6 +171,16 @@
 	bool unique() const { return refCount() == 1; }
 
 	/**
+	 * Resets the SharedPtr object to a NULL pointer.
+	 */
+	void reset() {
+		decRef();
+		_deletion = 0;
+		_refCount = 0;
+		_pointer = 0;
+	}
+
+	/**
 	 * Returns the number of references to the assigned pointer.
 	 * This should just be used for debugging purposes.
 	 */
@@ -199,12 +209,12 @@
 } // end of namespace Common
 
 template<class T1, class T2>
-bool operator ==(const Common::SharedPtr<T1> &l, const Common::SharedPtr<T2> &r) {
+bool operator==(const Common::SharedPtr<T1> &l, const Common::SharedPtr<T2> &r) {
 	return l.get() == r.get();
 }
 
 template<class T1, class T2>
-bool operator !=(const Common::SharedPtr<T1> &l, const Common::SharedPtr<T2> &r) {
+bool operator!=(const Common::SharedPtr<T1> &l, const Common::SharedPtr<T2> &r) {
 	return l.get() != r.get();
 }
 

Modified: scummvm/branches/gsoc2008-vkeybd/common/rect.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/rect.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/rect.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -144,6 +144,10 @@
 		clip(Rect(0, 0, maxw, maxh));
 	}
 
+	bool isEmpty() const {
+		return (left >= right || top >= bottom);
+	}
+
 	bool isValidRect() const {
 		return (left <= right && top <= bottom);
 	}

Modified: scummvm/branches/gsoc2008-vkeybd/common/str.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/str.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/str.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -111,6 +111,74 @@
 	decRefCount(_extern._refCount);
 }
 
+void String::makeUnique() {
+	ensureCapacity(_len, true);
+}
+
+/**
+ * Ensure that enough storage is available to store at least new_len
+ * characters plus a null byte. In addition, if we currently share
+ * the storage with another string, unshare it, so that we can safely
+ * write to the storage.
+ */
+void String::ensureCapacity(uint32 new_len, bool keep_old) {
+	bool isShared;
+	uint32 curCapacity, newCapacity;
+	char *newStorage;
+	int *oldRefCount = _extern._refCount;
+
+	if (isStorageIntern()) {
+		isShared = false;
+		curCapacity = _builtinCapacity - 1;
+	} else {
+		isShared = (oldRefCount && *oldRefCount > 1);
+		curCapacity = _extern._capacity;
+	}
+
+	// Special case: If there is enough space, and we do not share
+	// the storage, then there is nothing to do.
+	if (!isShared && new_len <= curCapacity)
+		return;
+
+	if (isShared && new_len <= _builtinCapacity - 1) {
+		// We share the storage, but there is enough internal storage: Use that.
+		newStorage = _storage;
+		newCapacity = _builtinCapacity - 1;
+	} else {
+		// We need to allocate storage on the heap!
+
+		// Compute a suitable new capacity limit
+		newCapacity = computeCapacity(new_len);
+
+		// Allocate new storage
+		newStorage = (char *)malloc(newCapacity+1);
+		assert(newStorage);
+	}
+
+	// Copy old data if needed, elsewise reset the new storage.
+	if (keep_old) {
+		assert(_len <= newCapacity);
+		memcpy(newStorage, _str, _len + 1);
+	} else {
+		_len = 0;
+		newStorage[0] = 0;
+	}
+
+	// Release hold on the old storage ...
+	decRefCount(oldRefCount);
+
+	// ... in favor of the new storage
+	_str = newStorage;
+
+	if (!isStorageIntern()) {
+		// Set the ref count & capacity if we use an external storage.
+		// It is important to do this *after* copying any old content,
+		// else we would override data that has not yet been copied!
+		_extern._refCount = 0;
+		_extern._capacity = newCapacity;
+	}
+}
+
 void String::incRefCount() const {
 	assert(!isStorageIntern());
 	if (_extern._refCount == 0) {
@@ -170,7 +238,8 @@
 }
 
 String& String::operator  =(char c) {
-	ensureCapacity(1, false);
+	decRefCount(_extern._refCount);
+	_str = _storage;
 	_len = 1;
 	_str[0] = c;
 	_str[1] = 0;
@@ -253,10 +322,7 @@
 void String::deleteChar(uint32 p) {
 	assert(p < _len);
 
-	// Call ensureCapacity to make sure we actually *own* the storage
-	// to which _str points to -- we wouldn't want to modify a storage
-	// which other string objects are sharing, after all.
-	ensureCapacity(_len, true);
+	makeUnique();
 	while (p++ < _len)
 		_str[p-1] = _str[p];
 	_len--;
@@ -273,7 +339,7 @@
 void String::setChar(char c, uint32 p) {
 	assert(p <= _len);
 
-	ensureCapacity(_len, true);
+	makeUnique();
 	_str[p] = c;
 }
 
@@ -288,79 +354,37 @@
 }
 
 void String::toLowercase() {
-	ensureCapacity(_len, true);
+	makeUnique();
 	for (uint32 i = 0; i < _len; ++i)
 		_str[i] = tolower(_str[i]);
 }
 
 void String::toUppercase() {
-	ensureCapacity(_len, true);
+	makeUnique();
 	for (uint32 i = 0; i < _len; ++i)
 		_str[i] = toupper(_str[i]);
 }
 
-/**
- * Ensure that enough storage is available to store at least new_len
- * characters plus a null byte. In addition, if we currently share
- * the storage with another string, unshare it, so that we can safely
- * write to the storage.
- */
-void String::ensureCapacity(uint32 new_len, bool keep_old) {
-	bool isShared;
-	uint32 curCapacity, newCapacity;
-	char *newStorage;
-	int *oldRefCount = _extern._refCount;
-
-	if (isStorageIntern()) {
-		isShared = false;
-		curCapacity = _builtinCapacity - 1;
-	} else {
-		isShared = (oldRefCount && *oldRefCount > 1);
-		curCapacity = _extern._capacity;
-	}
-
-	// Special case: If there is enough space, and we do not share
-	// the storage, then there is nothing to do.
-	if (!isShared && new_len <= curCapacity)
+void String::trim() {
+	if (_len == 0)
 		return;
 
-	if (isShared && new_len <= _builtinCapacity - 1) {
-		// We share the storage, but there is enough internal storage: Use that.
-		newStorage = _storage;
-		newCapacity = _builtinCapacity - 1;
-	} else {
-		// We need to allocate storage on the heap!
+	makeUnique();
 
-		// Compute a suitable new capacity limit
-		newCapacity = computeCapacity(new_len);
+	// Trim trailing whitespace
+	while (_len >= 1 && isspace(_str[_len-1]))
+		_len--;
+	_str[_len] = 0;
 
-		// Allocate new storage
-		newStorage = (char *)malloc(newCapacity+1);
-		assert(newStorage);
-	}
+	// Trim leading whitespace
+	char *t = _str;
+	while (isspace(*t))
+		t++;
 
-	// Copy old data if needed, elsewise reset the new storage.
-	if (keep_old) {
-		assert(_len <= newCapacity);
-		memcpy(newStorage, _str, _len + 1);
-	} else {
-		_len = 0;
-		newStorage[0] = 0;
+	if (t != _str) {
+		_len -= t - _str;
+		memmove(_str, t, _len + 1);
 	}
-
-	// Release hold on the old storage ...
-	decRefCount(oldRefCount);
-
-	// ... in favor of the new storage
-	_str = newStorage;
-
-	if (!isStorageIntern()) {
-		// Set the ref count & capacity if we use an external storage.
-		// It is important to do this *after* copying any old content,
-		// else we would override data that has not yet been copied!
-		_extern._refCount = 0;
-		_extern._capacity = newCapacity;
-	}
 }
 
 uint String::hash() const {

Modified: scummvm/branches/gsoc2008-vkeybd/common/str.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/str.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/str.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -177,6 +177,8 @@
 	void toLowercase();
 	void toUppercase();
 	
+	void trim();
+
 	uint hash() const;
 
 public:
@@ -200,6 +202,7 @@
 	}
 
 protected:
+	void makeUnique();
 	void ensureCapacity(uint32 new_len, bool keep_old);
 	void incRefCount() const;
 	void decRefCount(int *oldRefCount);

Modified: scummvm/branches/gsoc2008-vkeybd/common/stream.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/stream.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/stream.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -242,4 +242,83 @@
 	_parentStream->seek(_pos);
 }
 
+BufferedReadStream::BufferedReadStream(ReadStream *parentStream, uint32 bufSize, bool disposeParentStream)
+	: _parentStream(parentStream),
+	_disposeParentStream(disposeParentStream),
+	_pos(0),
+	_bufSize(0),
+	_realBufSize(bufSize) {
+
+	assert(parentStream);
+	_buf = new byte[bufSize];
+	assert(_buf);
+}
+
+BufferedReadStream::~BufferedReadStream() {
+	if (_disposeParentStream)
+		delete _parentStream;
+	delete _buf;
+}
+
+uint32 BufferedReadStream::read(void *dataPtr, uint32 dataSize) {
+	uint32 alreadyRead = 0;
+	const uint32 bufBytesLeft = _bufSize - _pos;
+
+	// Check whether the data left in the buffer suffices....
+	if (dataSize > bufBytesLeft) {
+		// Nope, we need to read more data
+
+		// First, flush the buffer, if it is non-empty
+		if (0 < bufBytesLeft) {
+			memcpy(dataPtr, _buf + _pos, bufBytesLeft);
+			_pos = _bufSize;
+			alreadyRead += bufBytesLeft;
+			dataPtr = (byte *)dataPtr + bufBytesLeft;
+			dataSize -= bufBytesLeft;
+		}
+			
+		// At this point the buffer is empty. Now if the read request
+		// exceeds the buffer size, just satisfy it directly.
+		if (dataSize > _bufSize)
+			return alreadyRead + _parentStream->read(dataPtr, dataSize);
+
+		// Refill the buffer.
+		// If we didn't read as many bytes as requested, the reason
+		// is EOF or an error. In that case we truncate the buffer
+		// size, as well as the number of  bytes we are going to
+		// return to the caller.
+		_bufSize = _parentStream->read(_buf, _realBufSize);
+		_pos = 0;
+		if (dataSize > _bufSize)
+			dataSize = _bufSize;
+	}
+
+	// Satisfy the request from the buffer
+	memcpy(dataPtr, _buf + _pos, dataSize);
+	_pos += dataSize;
+	return alreadyRead + dataSize;
+}
+
+BufferedSeekableReadStream::BufferedSeekableReadStream(SeekableReadStream *parentStream, uint32 bufSize, bool disposeParentStream)
+	: BufferedReadStream(parentStream, bufSize, disposeParentStream),
+	_parentStream(parentStream) {
+}
+
+void BufferedSeekableReadStream::seek(int32 offset, int whence) {
+	// If it is a "local" seek, we may get away with "seeking" around
+	// in the buffer only.
+	// Note: We could try to handle SEEK_END and SEEK_SET, too, but
+	// since they are rarely used, it seems not worth the effort.
+	if (whence == SEEK_CUR && (int)_pos + offset >= 0 && _pos + offset <= _bufSize) {
+		_pos += offset;
+	} else {
+		// Seek was not local enough, so we reset the buffer and
+		// just seeks normally in the parent stream.
+		if (whence == SEEK_CUR)
+			offset -= (_bufSize - _pos);
+		_pos = _bufSize;
+		_parentStream->seek(offset, whence);
+	}
+}
+
 }	// End of namespace Common

Modified: scummvm/branches/gsoc2008-vkeybd/common/stream.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/stream.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/stream.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -350,15 +350,17 @@
 class SubReadStream : virtual public ReadStream {
 protected:
 	ReadStream *_parentStream;
+	bool _disposeParentStream;
 	uint32 _pos;
 	uint32 _end;
-	bool _disposeParentStream;
 public:
 	SubReadStream(ReadStream *parentStream, uint32 end, bool disposeParentStream = false)
 		: _parentStream(parentStream),
 		  _pos(0),
 		  _end(end),
-		  _disposeParentStream(disposeParentStream) {}
+		  _disposeParentStream(disposeParentStream) {
+		assert(parentStream);
+	}
 	~SubReadStream() {
 		if (_disposeParentStream) delete _parentStream;
 	}
@@ -414,8 +416,50 @@
 	}
 };
 
+/**
+ * Wrapper class which adds buffering to any given ReadStream.
+ * Users can specify how big the buffer should be, and whether the
+ * wrapped stream should be disposed when the wrapper is disposed.
+ */
+class BufferedReadStream : virtual public ReadStream {
+protected:
+	ReadStream *_parentStream;
+	bool _disposeParentStream;
+	byte *_buf;
+	uint32 _pos;
+	uint32 _bufSize;
+	uint32 _realBufSize;
 
+public:
+	BufferedReadStream(ReadStream *parentStream, uint32 bufSize, bool disposeParentStream = false);
+	~BufferedReadStream();
+
+	virtual bool eos() const { return (_pos == _bufSize) && _parentStream->eos(); }
+	virtual bool ioFailed() const { return _parentStream->ioFailed(); }
+	virtual void clearIOFailed() { _parentStream->clearIOFailed(); }
+
+	virtual uint32 read(void *dataPtr, uint32 dataSize);
+};
+
 /**
+ * Wrapper class which adds buffering to any given SeekableReadStream.
+ * @see BufferedReadStream
+ */
+class BufferedSeekableReadStream : public BufferedReadStream, public SeekableReadStream {
+protected:
+	SeekableReadStream *_parentStream;
+public:
+	BufferedSeekableReadStream(SeekableReadStream *parentStream, uint32 bufSize, bool disposeParentStream = false);
+
+	virtual uint32 pos() const { return _parentStream->pos() - (_bufSize - _pos); }
+	virtual uint32 size() const { return _parentStream->size(); }
+
+	virtual void seek(int32 offset, int whence = SEEK_SET);
+};
+
+
+
+/**
  * Simple memory based 'stream', which implements the ReadStream interface for
  * a plain memory block.
  */

Modified: scummvm/branches/gsoc2008-vkeybd/common/unarj.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/unarj.cpp	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/unarj.cpp	2008-07-30 14:40:54 UTC (rev 33450)
@@ -231,7 +231,7 @@
 }
 
 
-bool ArjFile::open(const Common::String &filename, AccessMode mode) {
+bool ArjFile::open(const Common::String &filename) {
 	if (_isOpen)
 		error("Attempt to open another instance of archive");
 

Modified: scummvm/branches/gsoc2008-vkeybd/common/unarj.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/common/unarj.h	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/common/unarj.h	2008-07-30 14:40:54 UTC (rev 33450)
@@ -110,7 +110,7 @@
 
 	void registerArchive(const String &filename);
 
-	bool open(const Common::String &filename, AccessMode mode = kFileReadMode);
+	bool open(const Common::String &filename);
 	void close();
 
 	uint32 read(void *dataPtr, uint32 dataSize);

Modified: scummvm/branches/gsoc2008-vkeybd/configure
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/configure	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/configure	2008-07-30 14:40:54 UTC (rev 33450)
@@ -100,6 +100,7 @@
 add_engine sky "Beneath a Steel Sky" yes
 add_engine sword1 "Broken Sword 1" yes
 add_engine sword2 "Broken Sword 2" yes
+add_engine tinsel "Tinsel" no
 add_engine touche "Touche: The Adventures of the Fifth Musketeer" yes
 
 _endian=unknown
@@ -810,6 +811,10 @@
 	_host_os=iphone
 	_host_cpu=arm
 	;;
+neuros)
+	_host_os=linux
+	_host_cpu=arm
+	;;
 *)
 	if test -z "$_host"; then
 		guessed_host=`$_srcdir/config.guess`
@@ -1122,6 +1127,19 @@
 			_backend="gp2x"
 			_build_hq_scalers="no"
 			;;
+		neuros)
+			echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
+			DEFINES="$DEFINES -DUNIX"
+			_endian=little
+			_need_memalign=yes
+			add_line_to_config_h "#define NEUROS"
+			type_1_byte='char'
+			type_2_byte='short'
+			type_4_byte='int'
+			_backend='null'
+			_build_hq_scalers="no"
+			_mt32emu="no"
+			;;
 		ppc-amigaos)
 			echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
 			_endian=big
@@ -1628,7 +1646,7 @@
 	fi
 
 	# Save the settings
-	defname="ENABLE_`echo $engine | tr [a-z] [A-Z]`"
+	defname="ENABLE_`echo $engine | tr '[a-z]' '[A-Z]'`"
 	if test "$isbuilt" = "no" ; then
 		add_line_to_config_mk "# $defname"
 	else

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc7/parallaction.vcproj
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc7/parallaction.vcproj	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc7/parallaction.vcproj	2008-07-30 14:40:54 UTC (rev 33450)
@@ -148,6 +148,12 @@
 			RelativePath="..\..\engines\parallaction\graphics.h">
 		</File>
 		<File
+			RelativePath="..\..\engines\parallaction\gui.cpp">
+		</File>
+		<File
+			RelativePath="..\..\engines\parallaction\gui.h">
+		</File>
+		<File
 			RelativePath="..\..\engines\parallaction\gui_br.cpp">
 		</File>
 		<File

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.sln
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.sln	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.sln	2008-07-30 14:40:54 UTC (rev 33450)
@@ -60,6 +60,8 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "made", "made.vcproj", "{E29B5D40-08F7-11DD-BD0B-0800200C9A66}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinsel", "tinsel.vcproj", "{22AA7760-2C91-11DD-BD0B-0800200C9A66}"
+EndProject
 Global
 	GlobalSection(SolutionConfiguration) = preSolution
 		Debug = Debug
@@ -146,6 +148,10 @@
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.vcproj
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.vcproj	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.vcproj	2008-07-30 14:40:54 UTC (rev 33450)
@@ -21,7 +21,7 @@
 				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702"
 				Optimization="0"
 				AdditionalIncludeDirectories="../..;../../engines"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_NASM;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_NASM;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE;ENABLE_TINSEL"
 				MinimalRebuild="TRUE"
 				ExceptionHandling="TRUE"
 				BasicRuntimeChecks="3"
@@ -38,7 +38,7 @@
 				Name="VCCustomBuildTool"/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib igor_debug/igor.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib drascula_debug/drascula.lib sky_debug/sky.lib parallaction_debug/parallaction.lib m4_debug/m4.lib made_debug/made.lib"
+				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib igor_debug/igor.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib drascula_debug/drascula.lib sky_debug/sky.lib parallaction_debug/parallaction.lib m4_debug/m4.lib made_debug/made.lib tinsel_Debug/tinsel.lib"
 				OutputFile="$(OutDir)/scummvm.exe"
 				LinkIncremental="2"
 				IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
@@ -76,7 +76,7 @@
 				InlineFunctionExpansion="1"
 				OmitFramePointers="TRUE"
 				AdditionalIncludeDirectories="../..;../../engines"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE;ENABLE_TINSEL"
 				StringPooling="TRUE"
 				MinimalRebuild="FALSE"
 				ExceptionHandling="TRUE"

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc71/parallaction.vcproj
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc71/parallaction.vcproj	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc71/parallaction.vcproj	2008-07-30 14:40:54 UTC (rev 33450)
@@ -162,6 +162,12 @@
 			RelativePath="..\..\engines\parallaction\graphics.h">
 		</File>
 		<File
+			RelativePath="..\..\engines\parallaction\gui.cpp">
+		</File>
+		<File
+			RelativePath="..\..\engines\parallaction\gui.h">
+		</File>
+		<File
 			RelativePath="..\..\engines\parallaction\gui_br.cpp">
 		</File>
 		<File

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.sln
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.sln	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.sln	2008-07-30 14:40:54 UTC (rev 33450)
@@ -98,6 +98,10 @@
 	ProjectSection(ProjectDependencies) = postProject
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinsel", "tinsel.vcproj", "{22AA7760-2C91-11DD-BD0B-0800200C9A66}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfiguration) = preSolution
 		Debug = Debug
@@ -184,6 +188,10 @@
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.vcproj
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.vcproj	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.vcproj	2008-07-30 14:40:54 UTC (rev 33450)
@@ -21,7 +21,7 @@
 				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702"
 				Optimization="0"
 				AdditionalIncludeDirectories="../..;../../engines"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_NASM;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_NASM;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE;ENABLE_TINSEL"
 				MinimalRebuild="TRUE"
 				ExceptionHandling="TRUE"
 				BasicRuntimeChecks="3"
@@ -38,7 +38,7 @@
 				Name="VCCustomBuildTool"/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib igor_debug/igor.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib drascula_debug/drascula.lib sky_debug/sky.lib parallaction_debug/parallaction.lib m4_debug/m4.lib made_debug/made.lib"
+				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib igor_debug/igor.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib drascula_debug/drascula.lib sky_debug/sky.lib parallaction_debug/parallaction.lib m4_debug/m4.lib made_debug/made.lib tinsel_Debug/tinsel.lib"
 				OutputFile="$(OutDir)/scummvm.exe"
 				LinkIncremental="2"
 				IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
@@ -82,7 +82,7 @@
 				InlineFunctionExpansion="1"
 				OmitFramePointers="TRUE"
 				AdditionalIncludeDirectories="../..;../../engines"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE;ENABLE_TINSEL"
 				StringPooling="TRUE"
 				MinimalRebuild="FALSE"
 				ExceptionHandling="TRUE"

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc8/parallaction.vcproj
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc8/parallaction.vcproj	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc8/parallaction.vcproj	2008-07-30 14:40:54 UTC (rev 33450)
@@ -229,6 +229,14 @@
 			>
 		</File>
 		<File
+			RelativePath="..\..\engines\parallaction\gui.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\engines\parallaction\gui.h"
+			>
+		</File>
+		<File
 			RelativePath="..\..\engines\parallaction\gui_br.cpp"
 			>
 		</File>

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.sln
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.sln	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.sln	2008-07-30 14:40:54 UTC (rev 33450)
@@ -61,6 +61,8 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "made", "made.vcproj", "{E29B5D40-08F7-11DD-BD0B-0800200C9A66}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinsel", "tinsel.vcproj", "{22AA7760-2C91-11DD-BD0B-0800200C9A66}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -147,6 +149,10 @@
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
 		{E29B5D40-08F7-11DD-BD0B-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Debug|Win32.ActiveCfg = Debug|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Debug|Win32.Build.0 = Debug|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Release|Win32.ActiveCfg = Release|Win32
+		{22AA7760-2C91-11DD-BD0B-0800200C9A66}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj	2008-07-30 14:08:07 UTC (rev 33449)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj	2008-07-30 14:40:54 UTC (rev 33450)
@@ -42,7 +42,7 @@
 				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
 				Optimization="0"
 				AdditionalIncludeDirectories="../..;../../engines"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_NASM;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_NASM;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE;ENABLE_TINSEL"
 				MinimalRebuild="true"
 				ExceptionHandling="1"
 				BasicRuntimeChecks="3"
@@ -68,7 +68,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib igor_debug/igor.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib drascula_debug/drascula.lib sky_debug/sky.lib parallaction_debug/parallaction.lib m4_debug/m4.lib made_debug/made.lib"
+				AdditionalDependencies="winmm.lib sdl.lib zlib.lib libmad.lib vorbisfile_static.lib vorbis_static.lib ogg_static.lib libmpeg2.lib sword1_debug/sword1.lib sword2_debug/sword2.lib lure_debug/lure.lib cine_debug/cine.lib cruise_debug/cruise.lib igor_debug/igor.lib kyra_debug/kyra.lib gob_debug/gob.lib queen_debug/queen.lib saga_debug/saga.lib agi_debug/agi.lib scumm_debug/scumm.lib agos_debug/agos.lib drascula_debug/drascula.lib sky_debug/sky.lib parallaction_debug/parallaction.lib m4_debug/m4.lib made_debug/made.lib tinsel_Debug/tinsel.lib"
 				OutputFile="$(OutDir)/scummvm.exe"
 				LinkIncremental="2"
 				IgnoreDefaultLibraryNames="libc.lib;libcmt.lib"
@@ -133,7 +133,7 @@
 				InlineFunctionExpansion="1"
 				OmitFramePointers="true"
 				AdditionalIncludeDirectories="../..;../../engines"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;USE_ZLIB;USE_MAD;USE_VORBIS;USE_MPEG2;USE_MT32EMU;ENABLE_AGI;ENABLE_AGOS;ENABLE_CINE;ENABLE_CRUISE;ENABLE_DRASCULA;ENABLE_GOB;ENABLE_IGOR;ENABLE_KYRA;ENABLE_LURE;ENABLE_M4;ENABLE_MADE;ENABLE_PARALLACTION;ENABLE_QUEEN;ENABLE_SAGA;ENABLE_SCUMM;ENABLE_SKY;ENABLE_SWORD1;ENABLE_SWORD2;ENABLE_TOUCHE;ENABLE_SCUMM_7_8;ENABLE_HE;ENABLE_TINSEL"
 				StringPooling="true"
 				MinimalRebuild="false"
 				ExceptionHandling="1"

Copied: scummvm/branches/gsoc2008-vkeybd/dists/msvc8/tinsel.vcproj (from rev 33446, scummvm/trunk/dists/msvc8/tinsel.vcproj)
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc8/tinsel.vcproj	                        (rev 0)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc8/tinsel.vcproj	2008-07-30 14:40:54 UTC (rev 33450)
@@ -0,0 +1,486 @@
+<?xml version="1.0" encoding="windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="tinsel"
+	ProjectGUID="{22AA7760-2C91-11DD-BD0B-0800200C9A66}"
+	RootNamespace="tinsel"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="tinsel_Debug"
+			IntermediateDirectory="tinsel_Debug"
+			ConfigurationType="4"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="0"
+				AdditionalIncludeDirectories="../..;../../engines"
+				PreprocessorDefinitions="WIN32;_DEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				MinimalRebuild="true"
+				ExceptionHandling="1"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				BufferSecurityCheck="true"
+				EnableFunctionLevelLinking="true"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="false"
+				SuppressStartupBanner="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/tinsel.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="tinsel_Release"
+			IntermediateDirectory="tinsel_Release"
+			ConfigurationType="4"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/wd4201 /wd4512 /wd4511 /wd4100 /wd4121 /wd4310 /wd4706 /wd4127 /wd4189 /wd4702 /wd4996"
+				Optimization="3"
+				InlineFunctionExpansion="2"
+				OmitFramePointers="true"
+				AdditionalIncludeDirectories="../../;../../engines"
+				PreprocessorDefinitions="WIN32;NDEBUG;USE_ZLIB;USE_MAD;USE_VORBIS"
+				StringPooling="true"
+				ExceptionHandling="1"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				EnableFunctionLevelLinking="false"
+				ForceConformanceInForLoopScope="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="4"
+				WarnAsError="true"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/tinsel.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>

@@ 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