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

kenny-d at users.sourceforge.net kenny-d at users.sourceforge.net
Fri Sep 26 23:53:39 CEST 2008


Revision: 34654
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34654&view=rev
Author:   kenny-d
Date:     2008-09-26 21:53:08 +0000 (Fri, 26 Sep 2008)

Log Message:
-----------
Merged revisions 33452-33453,33455-33459,33463-33464,33466-33471,33473-33474,33478,33490,33492,33495-33496,33509-33512,33518-33519,33522-33527,33529-33530,33537,33541,33544,33546,33550,33552-33554,33556,33558,33561-33562,33565,33568,33570,33574,33576,33578-33581,33584-33587,33590,33596,33604-33611,33614-33615,33617-33618,33620-33621,33623,33626-33627,33632-33633,33635,33637,33639-33640,33642-33645,33648,33654-33655,33664,33667-33670,33673-33674,33678,33682,33686-33691,33693,33696,33698,33700,33703,33708,33710,33712-33714,33716,33719,33721-33723,33725-33727,33729-33730,33733,33736,33742,33754,33756,33758,33761,33763,33766,33777,33781-33788,33790,33792-33793,33795,33797,33805,33807-33812,33815-33817,33819,33822,33826,33829,33837,33839,33844,33847,33858-33861,33864,33871-33873,33875,33877-33879,33886,33889-33892,33894,33896,33900,33902-33903,33919,33928,33930,33932-33936,33938-33940,33942-33943,33948,33950,33953,33967,33973,33976,33978,33980,33985,33991,33993,33999-34000,34006,34009,34011,34013,34015,34019,34021-34023,34025,34027-34028,34030,34032-34034,34036,34038-34039,34041,34046-34048,34050-34055,34057,34059-34065,34067,34072,34074,34076,34078-34081,34084,34086-34087,34089-34090,34093,34096-34102,34104,34107,34113,34116,34119,34122,34124,34126,34128,34131-34132,34135,34138,34141,34144,34146,34149,34152-34154,34156-34157,34160,34163-34164,34169,34173,34179-34194,34196-34198,34200-34201,34205-34206,34208-34217,34219-34225,34227-34228,34234-34237,34239-34249,34251-34279,34281-34284,34286-34288,34290-34320,34323-34324,34326,34328-34329,34332,34334,34336,34338-34340,34343-34353,34356-34357,34359-34371,34373,34375,34378,34381-34382,34384-34385,34389-34391,34393-34394,34396-34397,34399-34405,34407-34409,34411,34413,34415,34417-34420,34423-34426,34428-34438,34440-34454,34456-34458,34460,34462-34469,34472,34474,34479-34481,34483-34498,34501-34505,34508,34511-34518,34520-34524,34526-34563,34566-34569,34571-34590,34592,34595-34599,34602-34603,34605,34613-34615,34617,34619-34624,34627-34628,34630-34639,34642-34649 via svnmerge from 
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk

Modified Paths:
--------------
    scummvm/branches/gsoc2008-vkeybd/AUTHORS
    scummvm/branches/gsoc2008-vkeybd/COPYRIGHT
    scummvm/branches/gsoc2008-vkeybd/NEWS
    scummvm/branches/gsoc2008-vkeybd/README
    scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/wii/wii-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/wii/wii-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/wii/wii-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/windows/windows-fs-factory.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/windows/windows-fs-factory.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/windows/windows-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/midi/alsa.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/midi/seq.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/module.mk
    scummvm/branches/gsoc2008-vkeybd/backends/platform/PalmOS/Src/be_base.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/dc/dc-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/dc/selector.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/dc/vmsave.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm7/Makefile
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm7/source/main.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/makefile
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/blitters_arm.s
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/cdaudio.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/dsmain.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/dsmain.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/dsoptions.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/dsoptions.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/gbampsave.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/gbampsave.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/osystem_ds.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/osystem_ds.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/portdefs.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/ramsave.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/ramsave.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/touchkeyboard.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/source/touchkeyboard.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/makefile
    scummvm/branches/gsoc2008-vkeybd/backends/platform/gp2x/gp2x.cpp
    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.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/null/null.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ps2/rawsavefile.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ps2/rawsavefile.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ps2/savefile.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ps2/savefile.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/psp/osys_psp.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/psp/osys_psp_gu.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/psp/portdefs.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/psp/psp_main.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/graphics.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/sdl.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/sdl.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/AdaptAllMMPs.pl
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/BuildPackageUpload_AllVersions.pl
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/README
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S60/ScummVM_S60.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S80/ScummVM_S80.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S90/Scummvm_S90.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/mmp/scummvm_base.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/SymbianActions.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/SymbianOS.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/SymbianOS.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/portdefs.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wii/Makefile
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wii/gx_supp.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wii/gx_supp.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wii/main.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wii/osystem.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wii/osystem.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wii/osystem_gfx.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/CEActionsPocket.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/CEActionsSmartphone.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/CELauncherDialog.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/CELauncherDialog.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/CEkeys/EventsBuffer.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/Makefile
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/README-WinCE.txt
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/missing/missing.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/wince-sdl.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/wince/wince-sdl.h
    scummvm/branches/gsoc2008-vkeybd/backends/saves/compressed/compressed-saves.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/saves/default/default-saves.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/saves/default/default-saves.h
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard.cpp
    scummvm/branches/gsoc2008-vkeybd/base/commandLine.cpp
    scummvm/branches/gsoc2008-vkeybd/base/main.cpp
    scummvm/branches/gsoc2008-vkeybd/base/module.mk
    scummvm/branches/gsoc2008-vkeybd/base/plugins.cpp
    scummvm/branches/gsoc2008-vkeybd/base/plugins.h
    scummvm/branches/gsoc2008-vkeybd/base/version.cpp
    scummvm/branches/gsoc2008-vkeybd/common/advancedDetector.cpp
    scummvm/branches/gsoc2008-vkeybd/common/advancedDetector.h
    scummvm/branches/gsoc2008-vkeybd/common/array.h
    scummvm/branches/gsoc2008-vkeybd/common/config-file.cpp
    scummvm/branches/gsoc2008-vkeybd/common/config-manager.cpp
    scummvm/branches/gsoc2008-vkeybd/common/config-manager.h
    scummvm/branches/gsoc2008-vkeybd/common/events.h
    scummvm/branches/gsoc2008-vkeybd/common/file.cpp
    scummvm/branches/gsoc2008-vkeybd/common/file.h
    scummvm/branches/gsoc2008-vkeybd/common/fs.cpp
    scummvm/branches/gsoc2008-vkeybd/common/fs.h
    scummvm/branches/gsoc2008-vkeybd/common/func.h
    scummvm/branches/gsoc2008-vkeybd/common/hash-str.h
    scummvm/branches/gsoc2008-vkeybd/common/hashmap.cpp
    scummvm/branches/gsoc2008-vkeybd/common/hashmap.h
    scummvm/branches/gsoc2008-vkeybd/common/iff_container.h
    scummvm/branches/gsoc2008-vkeybd/common/keyboard.h
    scummvm/branches/gsoc2008-vkeybd/common/md5.cpp
    scummvm/branches/gsoc2008-vkeybd/common/md5.h
    scummvm/branches/gsoc2008-vkeybd/common/memorypool.cpp
    scummvm/branches/gsoc2008-vkeybd/common/memorypool.h
    scummvm/branches/gsoc2008-vkeybd/common/module.mk
    scummvm/branches/gsoc2008-vkeybd/common/ptr.h
    scummvm/branches/gsoc2008-vkeybd/common/queue.h
    scummvm/branches/gsoc2008-vkeybd/common/savefile.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/system.cpp
    scummvm/branches/gsoc2008-vkeybd/common/system.h
    scummvm/branches/gsoc2008-vkeybd/common/unarj.cpp
    scummvm/branches/gsoc2008-vkeybd/common/unarj.h
    scummvm/branches/gsoc2008-vkeybd/common/unzip.cpp
    scummvm/branches/gsoc2008-vkeybd/common/unzip.h
    scummvm/branches/gsoc2008-vkeybd/common/util.cpp
    scummvm/branches/gsoc2008-vkeybd/common/util.h
    scummvm/branches/gsoc2008-vkeybd/common/xmlparser.cpp
    scummvm/branches/gsoc2008-vkeybd/common/xmlparser.h
    scummvm/branches/gsoc2008-vkeybd/configure
    scummvm/branches/gsoc2008-vkeybd/dists/engine-data/drascula.dat
    scummvm/branches/gsoc2008-vkeybd/dists/engine-data/kyra.dat
    scummvm/branches/gsoc2008-vkeybd/dists/macosx/Info.plist.in
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/agi.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/agos.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/cine.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/cruise.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/drascula.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/gob.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/igor.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/kyra.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/lure.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/m4.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/made.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/queen.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/saga.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scumm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/sky.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/sword1.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/sword2.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/touche.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/agi.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/agos.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/cine.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/cruise.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/drascula.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/gob.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/igor.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/kyra.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/lure.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/m4.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/made.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/queen.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/saga.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scumm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/sky.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/sword1.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/sword2.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/touche.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/agi.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/agos.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/cine.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/cruise.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/drascula.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/gob.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/igor.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/kyra.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/lure.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/m4.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/made.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/queen.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/saga.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scumm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/sky.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/sword1.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/sword2.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/tinsel.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/touche.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8_to_msvc7_71.bat
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/agi.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/agos.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/cine.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/cruise.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/drascula.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/gob.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/igor.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/kyra.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/lure.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/m4.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/made.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/parallaction.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/queen.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/saga.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/scumm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/sky.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/sword1.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/sword2.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/tinsel.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/touche.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/redhat/scummvm-tools.spec
    scummvm/branches/gsoc2008-vkeybd/dists/scummvm.6
    scummvm/branches/gsoc2008-vkeybd/dists/scummvm.rc
    scummvm/branches/gsoc2008-vkeybd/dists/scummvm.rc.in
    scummvm/branches/gsoc2008-vkeybd/dists/wii/READMII
    scummvm/branches/gsoc2008-vkeybd/engines/agi/agi.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/agi.h
    scummvm/branches/gsoc2008-vkeybd/engines/agi/cycle.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/loader_v3.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/op_cmd.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/op_test.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/preagi.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/preagi.h
    scummvm/branches/gsoc2008-vkeybd/engines/agi/preagi_common.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/preagi_mickey.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/preagi_mickey.h
    scummvm/branches/gsoc2008-vkeybd/engines/agi/preagi_troll.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/preagi_winnie.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agi/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/agi/wagparser.h
    scummvm/branches/gsoc2008-vkeybd/engines/agos/agos.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/agos.h
    scummvm/branches/gsoc2008-vkeybd/engines/agos/animation.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/event.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/gfx.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/input.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/midi.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/midi.h
    scummvm/branches/gsoc2008-vkeybd/engines/agos/oracle.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/res.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/script.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/script_e1.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/script_e2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/script_s1.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/script_ww.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/subroutine.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/verb.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/agos/window.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/cine.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/cine.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/detection.cpp
    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/main_loop.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/msg.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/object.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/object.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/pal.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/pal.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/part.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/part.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/prc.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/script_fw.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/script_os.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/texte.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/texte.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/unpack.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/unpack.h
    scummvm/branches/gsoc2008-vkeybd/engines/cine/various.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cine/various.h
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/cruise_main.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/ctp.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/dataLoader.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/object.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/overlay.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/overlay.h
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/vars.h
    scummvm/branches/gsoc2008-vkeybd/engines/cruise/volume.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/actors.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/animation.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/converse.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/drascula.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/drascula.h
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/graphics.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/interface.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/objects.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/palette.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/rooms.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/drascula/talk.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/engine.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/engine.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/dataio.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/dataio.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/draw.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/draw.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/game_v1.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/game_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/gob.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/gob.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/goblin.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter_bargon.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter_v1.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/map.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/map.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/module.mk
    scummvm/branches/gsoc2008-vkeybd/engines/gob/mult.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/mult_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/palanim.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/parse.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/parse_v1.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/parse_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/sound/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/util.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/video.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/videoplayer.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/igor/parts/part_22.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_hof.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_hof.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_lok.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_lok.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_mr.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_mr.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/gui_v2.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_hof.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_hof.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_lok.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_lok.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_mr.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_mr.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_v1.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_v1.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_v2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/kyra_v2.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/module.mk
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/resource.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/resource.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/saveload_hof.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/saveload_lok.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/saveload_mr.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/scene_hof.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/scene_mr.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen_lok.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen_lok.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.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/script.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/script_lok.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/script_mr.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/script_tim.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/script_tim.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sequences_hof.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sequences_lok.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sound_adlib.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sound_towns.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/sprites.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/staticres.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/text.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/text_hof.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/text_lok.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/text_mr.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/timer_mr.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/vqa.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/vqa.h
    scummvm/branches/gsoc2008-vkeybd/engines/lure/animseq.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/events.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/events.h
    scummvm/branches/gsoc2008-vkeybd/engines/lure/fights.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/game.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/game.h
    scummvm/branches/gsoc2008-vkeybd/engines/lure/intro.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/lure.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/lure.h
    scummvm/branches/gsoc2008-vkeybd/engines/lure/menu.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/scripts.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/lure/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/lure/surface.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/m4/converse.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/m4/globals.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/m4/m4.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/m4/mads_anim.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/m4/midi.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/m4/resource.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/made/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/made/music.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/made/pmvplayer.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/made/redreader.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/made/screen.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/made/screenfx.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/metaengine.h
    scummvm/branches/gsoc2008-vkeybd/engines/module.mk
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/balloons.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/callables_br.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/callables_ns.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/debug.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/disk_ns.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/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.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/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/staticres.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/walk.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/input.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/journal.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/logic.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/midiadlib.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/queen.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/queen.h
    scummvm/branches/gsoc2008-vkeybd/engines/queen/resource.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/queen/talk.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/animation.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/displayinfo.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/input.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/interface.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/interface.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/introproc_ihnm.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/itedata.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/itedata.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/music.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/music.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/rscfile.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/saga.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/saga.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/scene.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/sfuncs.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/sndres.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/sndres.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/saga/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/saga/sprite.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/actor.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/actor.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/akos.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/boxes.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/charset-fontdata.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/charset.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/charset.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/detection_tables.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/dialogs.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/dialogs.h
    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/gfx.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/gfx.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/gfxARM.s
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/cup_player_he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/intern_he.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/script_v100he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/script_v60he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/script_v70he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/he/script_v71he.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/script_v90he.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/input.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/insane/insane.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/insane/insane.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/insane/insane_iact.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/module.mk
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/object.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/resource.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/resource_v4.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/saveload.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/script.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/script_v5.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/script_v6.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/script_v8.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/scumm-md5.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/scumm.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/scumm.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/smush/channel.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/smush/imuse_channel.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/smush/saud_channel.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/smush/smush_player.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/smush/smush_player.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/string.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sky/control.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sky/intro.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sky/intro.h
    scummvm/branches/gsoc2008-vkeybd/engines/sky/logic.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sky/mouse.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sky/sky.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sky/sky.h
    scummvm/branches/gsoc2008-vkeybd/engines/sky/skydefs.h
    scummvm/branches/gsoc2008-vkeybd/engines/sky/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sky/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/animation.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/control.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/control.h
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/credits.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/logic.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/music.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/sword1.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword1/sword1.h
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/animation.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/controls.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/function.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/palette.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/resman.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/screen.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/startup.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/sword2.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/sword2/sword2.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/config.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/config.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/cursor.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/dw.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/inventory.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/music.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/music.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/scn.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sound.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/sound.h
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinlib.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinsel.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/tinsel/tinsel.h
    scummvm/branches/gsoc2008-vkeybd/engines/touche/detection.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/touche/graphics.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/touche/graphics.h
    scummvm/branches/gsoc2008-vkeybd/engines/touche/menu.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/touche/opcodes.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/touche/saveload.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/touche/staticres.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/touche/touche.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/touche/touche.h
    scummvm/branches/gsoc2008-vkeybd/graphics/dxa_player.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/dxa_player.h
    scummvm/branches/gsoc2008-vkeybd/graphics/font.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/iff.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/imageman.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/imageman.h
    scummvm/branches/gsoc2008-vkeybd/graphics/module.mk
    scummvm/branches/gsoc2008-vkeybd/graphics/scaler/hq2x_i386.asm
    scummvm/branches/gsoc2008-vkeybd/graphics/scaler/hq3x_i386.asm
    scummvm/branches/gsoc2008-vkeybd/graphics/scaler.h
    scummvm/branches/gsoc2008-vkeybd/graphics/surface.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/surface.h
    scummvm/branches/gsoc2008-vkeybd/gui/ThemeModern.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/ThemeModern.h
    scummvm/branches/gsoc2008-vkeybd/gui/about.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/browser.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/browser.h
    scummvm/branches/gsoc2008-vkeybd/gui/credits.h
    scummvm/branches/gsoc2008-vkeybd/gui/launcher.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/launcher.h
    scummvm/branches/gsoc2008-vkeybd/gui/massadd.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/massadd.h
    scummvm/branches/gsoc2008-vkeybd/gui/newgui.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/options.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/theme-config.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/theme.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/theme.h
    scummvm/branches/gsoc2008-vkeybd/gui/themebrowser.cpp
    scummvm/branches/gsoc2008-vkeybd/gui/themebrowser.h
    scummvm/branches/gsoc2008-vkeybd/gui/themes/classic080.ini
    scummvm/branches/gsoc2008-vkeybd/gui/themes/modern.ini
    scummvm/branches/gsoc2008-vkeybd/gui/themes/modern.zip
    scummvm/branches/gsoc2008-vkeybd/gui/widget.cpp
    scummvm/branches/gsoc2008-vkeybd/ports.mk
    scummvm/branches/gsoc2008-vkeybd/sound/adpcm.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/audiocd.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/flac.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/flac.h
    scummvm/branches/gsoc2008-vkeybd/sound/mididrv.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/mididrv.h
    scummvm/branches/gsoc2008-vkeybd/sound/midiparser.h
    scummvm/branches/gsoc2008-vkeybd/sound/midiparser_xmidi.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/mixer.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/mods/infogrames.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/mods/infogrames.h
    scummvm/branches/gsoc2008-vkeybd/sound/mp3.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/mp3.h
    scummvm/branches/gsoc2008-vkeybd/sound/softsynth/mt32/mt32_file.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/softsynth/mt32/mt32_file.h
    scummvm/branches/gsoc2008-vkeybd/sound/softsynth/mt32/partial.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/softsynth/mt32/synth.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/softsynth/mt32/tables.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/softsynth/mt32.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/vorbis.cpp
    scummvm/branches/gsoc2008-vkeybd/sound/vorbis.h
    scummvm/branches/gsoc2008-vkeybd/sound/wave.cpp
    scummvm/branches/gsoc2008-vkeybd/test/common/bufferedreadstream.h
    scummvm/branches/gsoc2008-vkeybd/test/common/bufferedseekablereadstream.h
    scummvm/branches/gsoc2008-vkeybd/test/common/hashmap.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/create_drascula/create_drascula.cpp
    scummvm/branches/gsoc2008-vkeybd/tools/create_drascula/create_drascula.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_drascula/staticdata.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/create_kyradat.cpp
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/create_kyradat.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/hof_cd.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/hof_demo.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/hof_floppy.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/misc.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/pak.h
    scummvm/branches/gsoc2008-vkeybd/tools/credits.pl
    scummvm/branches/gsoc2008-vkeybd/tools/md5table.c
    scummvm/branches/gsoc2008-vkeybd/tools/scumm-md5.txt

Added Paths:
-----------
    scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.h
    scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbianstream.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbianstream.h
    scummvm/branches/gsoc2008-vkeybd/backends/midi/stmidi.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/dist/
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/dist/readme_ds.txt
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/logog.bmp
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/mmp/scummvm_tinsel.mmp.in
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/vsnprintf.h
    scummvm/branches/gsoc2008-vkeybd/common/archive.cpp
    scummvm/branches/gsoc2008-vkeybd/common/archive.h
    scummvm/branches/gsoc2008-vkeybd/common/zlib.cpp
    scummvm/branches/gsoc2008-vkeybd/common/zlib.h
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/tinsel.vcproj
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/tinsel.vcproj
    scummvm/branches/gsoc2008-vkeybd/engines/dialogs.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/dialogs.h
    scummvm/branches/gsoc2008-vkeybd/engines/game.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/game.h
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter_v5.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/inter_v6.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/gob/video_v6.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/lol.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/lol.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/resource_intern.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/resource_intern.h
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen_lol.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/kyra/screen_lol.h
    scummvm/branches/gsoc2008-vkeybd/engines/parallaction/saveload.h
    scummvm/branches/gsoc2008-vkeybd/graphics/scaler/thumbnail_intern.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/thumbnail.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/thumbnail.h
    scummvm/branches/gsoc2008-vkeybd/test/common/func.h
    scummvm/branches/gsoc2008-vkeybd/test/common/queue.h
    scummvm/branches/gsoc2008-vkeybd/test/common/stream.h
    scummvm/branches/gsoc2008-vkeybd/tools/create_kyradat/lol_demo.h

Removed Paths:
-------------
    scummvm/branches/gsoc2008-vkeybd/backends/platform/ds/arm9/dist/readme_ds.txt
    scummvm/branches/gsoc2008-vkeybd/backends/platform/symbian/src/main_features.inl
    scummvm/branches/gsoc2008-vkeybd/base/game.cpp
    scummvm/branches/gsoc2008-vkeybd/base/game.h
    scummvm/branches/gsoc2008-vkeybd/common/zlib.cpp
    scummvm/branches/gsoc2008-vkeybd/common/zlib.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/smush/chunk.cpp
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/smush/chunk.h
    scummvm/branches/gsoc2008-vkeybd/engines/scumm/thumbnail.cpp
    scummvm/branches/gsoc2008-vkeybd/graphics/scaler/thumbnail.cpp

Property Changed:
----------------
    scummvm/branches/gsoc2008-vkeybd/
    scummvm/branches/gsoc2008-vkeybd/dists/
    scummvm/branches/gsoc2008-vkeybd/dists/macosx/
    scummvm/branches/gsoc2008-vkeybd/dists/msvc7/
    scummvm/branches/gsoc2008-vkeybd/dists/msvc71/
    scummvm/branches/gsoc2008-vkeybd/dists/msvc9/
    scummvm/branches/gsoc2008-vkeybd/test/


Property changes on: scummvm/branches/gsoc2008-vkeybd
___________________________________________________________________
Modified: svn:ignore
   - config.log
scummvm
scummvm-static
config.h
config.mk
.gdb_history
dumps
Credits.rtf
*.mshark

   + config.log
scummvm
scummvm-static
config.h
config.mk
.gdb_history
dumps
Credits.rtf
*.mshark
*.dSYM

Modified: svnmerge-integrated
   - /scummvm/branches/gsoc2008-gui:1-31703 /scummvm/branches/gsoc2008-rtl:1-32741 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/trunk:1-33448
   + /scummvm/branches/gsoc2008-gui:1-31703 /scummvm/branches/gsoc2008-rtl:1-32741 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/trunk:1-34651

Modified: scummvm/branches/gsoc2008-vkeybd/AUTHORS
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/AUTHORS	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/AUTHORS	2008-09-26 21:53:08 UTC (rev 34654)
@@ -6,6 +6,11 @@
      Max Horn             
      Eugene Sandulenko    
 
+  Retired Project Leaders
+  -----------------------
+     Vincent Hamm          - ScummVM co-founder, Original Cruise/CinE author
+     Ludvig Strigeus       - Original ScummVM and SimonVM author
+
   Engine Teams
   ------------
     SCUMM:
@@ -134,7 +139,6 @@
        Kostas Nakos         
 
     PlayStation 2:
-       Robert Goeffringmann 
        Max Lingua           
 
     PSP (PlayStation Portable):
@@ -163,9 +167,12 @@
        Johannes Schickel    
 
     Miscellaneous:
-       David Corrales-Lopez  - Filesystem access improvements
+       David Corrales-Lopez  - Filesystem access improvements (GSoC 2007
+                               task)
        Jerome Fisher         - MT-32 emulator
        Jochen Hoenicke       - Speaker & PCjr sound support, Adlib work
+       Chris Page            - Return to launcher, savestate improvements,
+                               leak fixes, ... (GSoC 2008 task)
        Robin Watts           - ARM assembly routines for nice speedups on
                                several ports; improvements to the sound mixer
 
@@ -184,13 +191,14 @@
      Nicolas Bacca         - Former WinCE porter
      Ralph Brorsen         - Help with GUI implementation
      Jamieson Christian    - iMUSE, MIDI, all things musical
+     Hans-Jorg Frieden     - Former AmigaOS 4 packager
+     Robert Goeffringmann  - Original PS2 porter
      Ruediger Hanke        - Port: MorphOS
-     Vincent Hamm          - ScummVM co-founder, Original Cruise/CinE author
      Felix Jakschitsch     - Zak256 reverse engineering
      Mutwin Kraus          - Original MacOS porter
      Peter Moraliyski      - Port: GP32
+     Juha Niemimaki        - Formaer AmigaOS 4 packager
      Jeremy Newman         - Former webmaster
-     Ludvig Strigeus       - Original ScummVM and SimonVM author
      Lionel Ulmer          - Port: X11
      Won Star              - Former GP32 porter
 
@@ -199,9 +207,7 @@
   Packages
   --------
     AmigaOS 4:
-       Hans-Jorg Frieden    
        Hubert Maier         
-       Juha Niemimaki       
 
     Atari/FreeMiNT:
        Keith Scroggins      
@@ -260,6 +266,7 @@
      Stuart Caie           - Decoders for Simon 1 Amiga data files
      Paolo Costabel        - PSP port contributions
      Thierry Crozat        - Support for Broken Sword 1 Macintosh version
+     Martin Doucha         - CinE engine objectification
      Thomas Fach-Pedersen  - ProTracker module player
      Benjamin Haisch       - Heavily improved de-/encoder for DXA videos
      Janne Huttunen        - V3 actor mask support, Dig/FT SMUSH audio
@@ -289,15 +296,18 @@
    Sander Buskens   - For his work on the initial reversing of Monkey2
    Canadacow        - For the original MT-32 emulator
    Kevin Carnes     - For Scumm16, the basis of ScummVM's older gfx codecs
+   Curt Coder       - For the original TrollVM (preAGI) code
    Patrick Combet   - For the original Gobliiins ADL player
    Ivan Dubrov      - For contributing the initial version of the Gobliiins
                       engine
+   Till Kresslein   - For design of modern ScummVM GUI
    Jezar            - For his freeverb filter implementation
    Jim Leiterman    - Various info on his FM-TOWNS/Marty SCUMM ports
    lloyd            - For deep tech details about C64 Zak & MM
    Sarien Team      - Original AGI engine code
    Jimmi Thogersen  - For ScummRev, and much obscure code/documentation
    Tristan          - For additional work on the original MT-32 emulator
+   James Woodcock   - Soundtrack enhancements
 
    Tony Warriner and everyone at Revolution Software Ltd. for sharing with us
    the source of some of their brilliant games, allowing us to release

Modified: scummvm/branches/gsoc2008-vkeybd/COPYRIGHT
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/COPYRIGHT	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/COPYRIGHT	2008-09-26 21:53:08 UTC (rev 34654)
@@ -60,6 +60,7 @@
 Johannes Schickel
 Won Star
 Ludvig Strigeus
+Keith Scroggins
 David Symonds
 Jordi Vilalta
 Robin Watts
@@ -74,23 +75,34 @@
 
 Laura Abbott "sageofminerva"
 Vikram Aggarwal "youngelf"
+the rara avis "theraraavis"
 Dieter Baron "dillo"
 Alban Bedel "albeu"
 Bodo Bellut "bellut"
+Bramvandijk "bramvandijk"
 Andreas Bierfert "awjb"
 Elio Blanca "eblanca76"
+Bastien Bouclet "bgk"
 David Breakey "dbreakey"
 Robert Buchholz "prendi"
-Rainer Canavan
+Rainer Canavan "canavan"
 Mathieu Carot "yokna"
 Stefano Ceccherini "jackburton"
 Travis S Coady "theealien"
 Josh Coalson "jcoalson"
 Thomas Combeleran "hibernatus"
+Kees Cook "keescook"
 Carlos Corbacho "cathectic"
 Roberto Costa "fiix76"
+Thiery Crozat "criezy"
+dc france "erwan2004"
+dewt "mncl"
+Martin Doucha "next_ghost"
 Michael Drueing "doc_wagon"
+dubsdj
 Matthew Duggan "stauff1"
+Olivier Duverne "richiefs"
+Andrei Dziahel "develop7"
 John Eckerdal "johneck"
 Thomas Fach-Pedersen "madm00se"
 Florent "flobo"
@@ -109,6 +121,7 @@
 Alexander Holler "holler"
 Falk Hueffner "mellum"
 Casey Hutchinson "nnooiissee"
+j0tt
 Gregor Jasny "gjasny"
 Jellby "jellby"
 Joerg "macdrega"
@@ -122,38 +135,49 @@
 Jay Lanagan "r0ni"
 Norbert Lange "nolange"
 Manuel Lauss "mlau2"
+Rolf Leggewie "leggewie"
 Duncan Lock "dflock"
 Mark Lodato "itsr0y"
 Fridvin Logi "phillip_j_fry"
+Lostech "lostech"
 Georg Lukas "ge0rg"
 Dmitry Marakasov "amdmi3"
-Markus "meist3r"
 Connor McLeod "mcleod2032"
 Mickey McMurray "metafox"
 Vladimir Menshakov "megath"
+Adam Metcalf "gamblore"
 Frank Meyering "frank_m24"
 Gael Le Migno "kilobug"
 Alyssa Anne Milburn "fuzzie"
 Andy Molloy "maloi"
+Sean Murrau "lightcast"
 Armin Mueller "arm_in"
 Andrea Musuruane "musuruan"
 KO Myung-Hun "lvzuufx"
+Markus Napp "meist3r"
 Peter Naulls "pnaulls"
 Christian Neumair "mannythegnome"
 Nicos "anarxia"
 Juha Niemimaki "capehill"
 Markus Niemisto "niemisto"
+ole
 Chris Paras "paras_rasmatazz"
 Aubin Paul "outlyer"
+Vincent Pelletier "subdino"
+phi1
+Pix2 "pix2"
 Carsten Pohl "carstenpohl"
 Markus Pyykko "mankeli"
 Richard "trinity78"
 Felix Riemann "kirschsaft"
+Thomas Richter "thorfdbg"
 Timo Roehling "t1m0"
 Andreas Roever "roever"
 Jonathan Rogers "jonner"
 Marek Roth "logicdeluxe"
+Uwe Ryssel "uweryssel"
 Simon Sawatzki "simsaw"
+Scarlatti "escarlate"
 Daniel Schepler "dschepler"
 Florian Schmitt "fatpenguin"
 Mark Schreiber "mark7"
@@ -161,12 +185,17 @@
 Jean-Yves Simon "lethalwp"
 Andrej Sinicyn "andrej4000"
 Andre Souza "luke_br"
+spookypeanut "spookypeanut"
 Steve Stavropoulos "isnothere"
 Daniel Steinberger "amorphousshape"
 Sven Strothoff "dataslayer"
 Andrea Suatoni "mrhandler"
+tbcarey
+Tim "tipabu"
+Tobigun "tobigun"
 Luigi Toscano "ltosky"
 Xavier Trochu "xtrochu"
+Michal Tulacek "tutchek"
 Michael Udaltsov "cccp99"
 Kristof Vansant "lupusbe"
 Tim Walters "realmz"
@@ -174,16 +203,6 @@
 Eric A. Welsh "eweish42"
 Yudhi Widyatama "yudhi97"
 Robert Wohlrab "moshroum"
+Xanathar "xanathar"
+Grant Yeager "glo_kidd"
 Benjamin W. Zale "junior_aepi"
-the rara avis "theraraavis"
-dewt "mncl"
-dubsdj
-exo "exofreeze"
-dc france "erwan2004"
-j0tt
-glo kidd "glo_kidd"
-ole
-phi1
-spookypeanut "spookypeanut"
-tbcarey
-Tim "tipabu"

Modified: scummvm/branches/gsoc2008-vkeybd/NEWS
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/NEWS	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/NEWS	2008-09-26 21:53:08 UTC (rev 34654)
@@ -2,10 +2,22 @@
         http://scummvm.sourceforge.net/daily/ChangeLog
 
 0.13.0 (????-??-??)
+ General:
+   - Added MIDI driver for Atari ST / FreeMint.
+   - Added a 'Load' button to the Launcher (not supported by all engines).
+   - Added a new global main menu (GMM) dialog usable from all engines.
+   - Added the ability to return to the launcher from running games (via the GMM).
+
  New Games:
    - Added support for Discworld.
 
-0.12.0 (????-??-??)
+ KYRA:
+   - Added support for Auto-save feature.
+
+ SCUMM:
+   - Fixed a long-time bug which caused talkspeed and talkdelay to be mixed up.
+
+0.12.0 (2008-08-31)
  New Games:
    - Added support for The Legend of Kyrandia: Book Two: Hand of Fate.
    - Added support for The Legend of Kyrandia: Book Three: Malcolm's Revenge.
@@ -30,6 +42,10 @@
      Simon the Sorcerer 1.
    - Fixed palette issues in Amiga versions of Simon the Sorcerer 1.
 
+ Queen:
+   - Speech is played at the correct sample rate. (It used to be pitched a bit
+     too low.)
+
  SCUMM:
    - Rewrote parts of Digital iMUSE, fixing some bugs.
    - Rewrote the internal timer code, fixing some speed issues in e.g. COMI.

Modified: scummvm/branches/gsoc2008-vkeybd/README
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/README	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/README	2008-09-26 21:53:08 UTC (rev 34654)
@@ -39,10 +39,12 @@
  * 5.1 Command Line Options
  * 5.2 Language Options
  * 5.3 Graphics Filters
- * 5.4 Hotkeys
+ * 5.4 Global Menu
+ * 5.5 Hotkeys
 6.0) Savegames
  * 6.1 Autosaves
  * 6.2 Converting savegames
+ * 6.3 Viewing/Loading savegames from the command line
 7.0) Music and Sound
  * 7.1 Adlib emulation
  * 7.2 FluidSynth MIDI emulation
@@ -182,17 +184,23 @@
      Gobliiins                                   [gob1]
      Gobliins 2                                  [gob2]
      Goblins 3                                   [gob3]
+     Lost in Time                                [lostintime]
+     The Bizarre Adventures of Woodruff
+         and the Schnibble                       [woodruff]
      Ween: The Prophecy                          [ween]
 
 Other Games:
      Beneath a Steel Sky                         [sky]
      Broken Sword 1: The Shadow of the Templars  [sword1]
      Broken Sword 2: The Smoking Mirror          [sword2]
+     Drascula: The Vampire Strikes Back          [drascula]
      Flight of the Amazon Queen                  [queen]
      Future Wars                                 [fw]
      Inherit the Earth: Quest for the Orb        [ite]
      Nippon Safes Inc.                           [nippon]
      The Legend of Kyrandia                      [kyra1]
+     The Legend of Kyrandia: The Hand of Fate    [kyra2]
+     The Legend of Kyrandia: Malcolm's Revenge   [kyra3]
      Touche: The Adventures of the Fifth
          Musketeer                               [touche]
 
@@ -781,6 +789,7 @@
   -h, --help               Display a brief help text and exit
   -z, --list-games         Display list of supported games and exit
   -t, --list-targets       Display list of configured targets and exit
+  --list-saves=TARGET      Display a list of savegames for the game (TARGET) specified
 
   -c, --config=CONFIG      Use alternate configuration file
   -p, --path=PATH          Path to where the game is installed
@@ -968,7 +977,38 @@
 will be scaled to 1280x960 and 1920x1440.
 
 
-5.4) Hot Keys:
+5.4) Global Menu:
+---- ------------
+
+The Global Menu is a general menu which is available to all of the game engines 
+by pressing F6.  From this menu there are the following buttons: Resume, 
+Options, About, Return to Launcher, and Quit. Selecting 'Options' will display 
+a dialog where basic audio settings, such as volume levels, can be adjusted.  
+Selecting 'Return to Launcher' will close the current game and return the user 
+back to the ScummVM Launcher, where another game may be selected to play.
+
+Note: Returning to the Launcher is not supported by all of the engines, 
+     and the button will be disabled in the Global Menu if it is not supported.
+
+Engines which currently support Returning to the Launcher are:
+
+        AGI
+        AGOS
+        CINE
+        GOB
+        KYRA
+        LURE
+        PARALLACTION
+        QUEEN
+        SAGA
+        SCUMM
+        SKY
+        SWORD1
+        SWORD2
+        TOUCHE
+
+
+5.5) Hot Keys:
 ---- ---------
 TODO
 TODO: Rework this section to clearly state which hotkeys are implemented in *all*
@@ -982,6 +1022,7 @@
 other games.
 
     Common:
+        F6                     - Displays the Global Menu
         Cmd-q                  - Quit (Mac OS X)
         Ctrl-q                 - Quit (other unices including Linux)
         Ctrl-z OR Alt-x        - Quit (other platforms)
@@ -1138,45 +1179,93 @@
 
 6.1) Autosaves:
 ---- ----------
-For some games (namely "Beneath a Steel Sky", "Flight of the Amazon
-Queen" and all SCUMM games), ScummVM will by default automatically
-save the current state every five minutes (adjustable via the
-"autosave_period" config setting). For the SCUMM engine, it will save
-in Slot 0. This savestate can then be loaded again via Ctrl-0, or the
-F5 menu.
+For some games, (namely "Beneath a Steel Sky", "Flight of the Amazon Queen", 
+all AGI games, and all SCUMM games), ScummVM will by default automatically
+save the current state every five minutes (adjustable via the "autosave_period"
+config setting). For the AGI and SCUMM engines, it will save in Slot 0. For the
+SCUMM engine, this savestate can then be loaded again via Ctrl-0, or the F5
+menu.
 
 
 6.2) Converting Savegames:
----- ----------
-Using savegames from original versions, isn't supported by all game engines. Only
-the following games, can use savedgames from their original versions.
+---- ---------------------
+Using savegames from original versions, isn't supported by all game engines. 
+Only the following games, can use savegames from their original versions.
 
      Elvira 1
-          - Add 8 bytes (savedgame name) to the start of the savegame file
-          - Rename the savedgame to 'elvira1.xxx'
+          - Add 8 bytes (savegame name) to the start of the savegame file
+          - Rename the savegame to 'elvira1.xxx'
 
      Elvira 2
-          - Add 8 bytes (savedgame name) to the start of the savegame file
-          - Rename the savedgame to 'elvira2-pc.xxx' (DOS version) or
+          - Add 8 bytes (savegame name) to the start of the savegame file
+          - Rename the savegame to 'elvira2-pc.xxx' (DOS version) or
             'elvira2.xxx' (Other versions)
 
     Waxworks
-          - Add 8 bytes (savedgame name) to the start of the savegame file
-          - Rename the savedgame to 'waxworks-pc.xxx' (DOS version) or
+          - Add 8 bytes (savegame name) to the start of the savegame file
+          - Rename the savegame to 'waxworks-pc.xxx' (DOS version) or
             'waxworks.xxx' (Other versions)
 
      Simon the Sorcerer 1
-          - Rename the savedgame to 'simon1.xxx'
+          - Rename the savegame to 'simon1.xxx'
  
     Simon the Sorcerer 1
-          - Rename the savedgame to 'simon2.xxx'
+          - Rename the savegame to 'simon2.xxx'
  
     The Feeble Files
-          - Rename the savedgame to 'feeble.xxx'
+          - Rename the savegame to 'feeble.xxx'
 
 Where 'xxx' is exact the saved game slot (ie 001) under ScummVM
 
 
+6.3) Viewing/Loading savegames from the command line:
+---- ------------------------------------------------
+
+--list-saves:
+
+     This switch may be used to display a list of the current savegames
+     of the specified target game and their corresponding save slots.
+
+     Usage: --list-saves=[TARGET], where [TARGET] is the target game.
+
+     Engines which currently support --list-saves are:
+
+             AGI
+             AGOS
+             CINE
+             KYRA
+             LURE
+             PARALLACTION
+             QUEEN
+             SAGA
+             SCUMM
+             SKY
+             SWORD1
+             SWORD2
+             TOUCHE
+
+--save-slot/-x:
+
+     This switch may be used to load a savegame directly from the command line.
+
+     Usage: --save-slot[SLOT] or -x[SLOT], where [SLOT] is the save slot number.
+
+     Engines which currently support --save-slot/-x are:
+
+             AGI
+             CINE
+             KYRA
+             LURE
+             PARALLACTION
+             QUEEN
+             SAGA
+             SCUMM
+             SKY
+             SWORD1
+             SWORD2
+             TOUCHE
+
+
 7.0) Music and Sound:
 ---- ----------------
 
@@ -1322,34 +1411,39 @@
 
 7.6.1) Playing sound with ALSA sequencer:                        [UNIX ONLY]
 ------ ----------------------------------
-If you have installed the ALSA driver with the sequencer support, then
-set the environment variable SCUMMVM_PORT or the config file parameter
-alsa_port to your sequencer port. The default is "65:0".
+If you have installed the ALSA driver with the sequencer support, then set the
+environment variable SCUMMVM_PORT or the config file parameter alsa_port to
+your sequencer port. The default is to try both "65:0" and "17:0".
 
 Here is a little howto on how to use the ALSA sequencer with your soundcard.
 In all cases, to have a list of all the sequencer ports you have, try the
 command "aconnect -o -l". This should give output similar to:
-client 64: 'External MIDI 0' [type=kernel]
-    0 'MIDI 0-0        '
-client 65: 'Emu10k1 WaveTable' [type=kernel]
+
+client 14: 'Midi Through' [type=kernel]
+    0 'Midi Through Port-0'
+client 16: 'SBLive! Value [CT4832]' [type=kernel]
+    0 'EMU10K1 MPU-401 (UART)'
+client 17: 'Emu10k1 WaveTable' [type=kernel]
     0 'Emu10k1 Port 0  '
     1 'Emu10k1 Port 1  '
     2 'Emu10k1 Port 2  '
     3 'Emu10k1 Port 3  '
-client 128: 'Client-128' [type=user]
+client 128: 'TiMidity' [type=user]
     0 'TiMidity port 0 '
     1 'TiMidity port 1 '
+    2 'TiMidity port 2 '
+    3 'TiMidity port 3 '
 
-This means the external MIDI output of the sound card is located on the
-port 64:0, four WaveTable MIDI outputs in 65:0, 65:1, 65:2
-and 65:3, and two TiMidity ports, located at 128:0 and 128:1.
+The most important bit here is that there are four WaveTable MIDI outputs
+located at 17:0, 17:1, 17:2 and 17:3, and four TiMidity ports located at 128:0,
+128:1, 128:2 and 128:3.
 
 If you have a FM-chip on your card, like the SB16, then you have to load
 the SoundFonts using the sbiload software. Example:
-  sbiload -p 65:0 /etc/std.o3 /etc/drums.o3
+  sbiload -p 17:0 /etc/std.o3 /etc/drums.o3
 
 If you have a WaveTable capable sound card, you have to load a sbk or sf2
-SoundFont using the sfxload software. Example:
+SoundFont using the sfxload or asfxload software. Example:
   sfxload /path/to/8mbgmsfx.sf2
 
 If you don't have a MIDI capable soundcard, there are two options: FluidSynth

Modified: scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -96,7 +96,8 @@
 	_boss(boss),
 	_buttonState(0),
 	_modifierState(0),
-	_shouldQuit(false) {
+	_shouldQuit(false),
+	_shouldRTL(false) {
 
 	assert(_boss);
 
@@ -211,6 +212,9 @@
 	_boss->unlockMutex(_timeMutex);
 	_boss->unlockMutex(_recorderMutex);
 
+	if (!artificialEventQueue.empty())
+		artificialEventQueue.clear();
+
 	if (_playbackFile != NULL) {
 		delete _playbackFile;
 	}
@@ -372,10 +376,8 @@
 	if (!_artificialEventQueue.empty()) {
 		event = _artificialEventQueue.pop();
 		result = true;
-	}
-	
-	// poll for event from backend
-	if (!result) {
+	} else {
+		// poll for event from backend
 		result = _boss->pollEvent(event);
 		if (result) {
 			// send key press events to keymapper
@@ -415,7 +417,6 @@
 		switch (event.type) {
 		case Common::EVENT_KEYDOWN:
 			_modifierState = event.kbd.flags;
-
 			// init continuous event stream
 			// not done on PalmOS because keyboard is emulated and keyup is not generated
 #if !defined(PALMOS_MODE)
@@ -424,8 +425,39 @@
 			_currentKeyDown.flags = event.kbd.flags;
 			_keyRepeatTime = time + kKeyRepeatInitialDelay;
 #endif
+			// Global Main Menu
+			// FIXME: F6 is not the best trigger, it conflicts with some games!!!
+			if (event.kbd.keycode == Common::KEYCODE_F6) {
+				if (g_engine && !g_engine->isPaused()) {
+					Common::Event menuEvent;
+					menuEvent.type = Common::EVENT_MAINMENU;
+					
+					// FIXME: GSoC RTL branch passes the F6 key event to the
+					// engine, and also enqueues a EVENT_MAINMENU. For now,
+					// we just drop the key event and return an EVENT_MAINMENU
+					// instead. This way, we don't have to add special cases
+					// to engines (like it was the case for LURE in the RTL branch).
+					//
+					// However, this has other consequences, possibly negative ones.
+					// Like, what happens with key repeat for the trigger key?
+					
+					//pushEvent(menuEvent);
+					event = menuEvent;
 
-			if (event.kbd.keycode == Common::KEYCODE_F6 && event.kbd.flags == 0) {
+					// FIXME: Since now we do not push another MAINMENU event onto
+					// our event stack, the GMM would never open, so we have to do
+					// that here. Of course when the engine would handle MAINMENU
+					// as an event now and open up the GMM itself it would open the
+					// menu twice.
+					if (g_engine && !g_engine->isPaused())
+						g_engine->mainMenuDialog();
+
+					if (_shouldQuit)
+						event.type = Common::EVENT_QUIT;
+					else if (_shouldRTL)
+						event.type = Common::EVENT_RTL;
+				}
+			} else if (event.kbd.keycode == Common::KEYCODE_F7 && event.kbd.flags == 0) {
 				if (_vk->isDisplaying()) {
 					_vk->close(true);
 				} else {
@@ -435,7 +467,7 @@
 					if (!isPaused) g_engine->pauseEngine(false);
 					result = false;
 				}
-			} else if (event.kbd.keycode == Common::KEYCODE_F7 && event.kbd.flags == 0) {
+			} else if (event.kbd.keycode == Common::KEYCODE_F8 && event.kbd.flags == 0) {
 				if (!_remap) {
 					_remap = true;
 					Common::RemapDialog _remapDialog;
@@ -446,8 +478,8 @@
 					_remap = false;
 				}
 			}
+			break;
 
-			break;
 		case Common::EVENT_KEYUP:
 			_modifierState = event.kbd.flags;
 			if (event.kbd.keycode == _currentKeyDown.keycode) {
@@ -464,6 +496,7 @@
 			_mousePos = event.mouse;
 			_buttonState |= LBUTTON;
 			break;
+
 		case Common::EVENT_LBUTTONUP:
 			_mousePos = event.mouse;
 			_buttonState &= ~LBUTTON;
@@ -473,11 +506,26 @@
 			_mousePos = event.mouse;
 			_buttonState |= RBUTTON;
 			break;
+
 		case Common::EVENT_RBUTTONUP:
 			_mousePos = event.mouse;
 			_buttonState &= ~RBUTTON;
 			break;
 
+		case Common::EVENT_MAINMENU:
+			if (g_engine && !g_engine->isPaused())
+				g_engine->mainMenuDialog();
+
+			if (_shouldQuit)
+				event.type = Common::EVENT_QUIT;
+			else if (_shouldRTL)
+				event.type = Common::EVENT_RTL;
+			break;
+
+		case Common::EVENT_RTL:
+			_shouldRTL = true;
+			break;
+
 		case Common::EVENT_QUIT:
 			if (ConfMan.getBool("confirm_exit")) {
 				if (g_engine)
@@ -488,6 +536,7 @@
 					g_engine->pauseEngine(false);
 			} else
 				_shouldQuit = true;
+
 			break;
 
 		default:
@@ -511,7 +560,13 @@
 }
 
 void DefaultEventManager::pushEvent(const Common::Event &event) {
-	_artificialEventQueue.push(event);
+
+	// If already received an EVENT_QUIT, don't add another one
+	if (event.type == Common::EVENT_QUIT) {
+		if (!_shouldQuit)
+			artificialEventQueue.push(event);
+	} else 
+		artificialEventQueue.push(event);	
 }
 
 #endif // !defined(DISABLE_DEFAULT_EVENTMANAGER)

Modified: scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -60,6 +60,7 @@
 	int _buttonState;
 	int _modifierState;
 	bool _shouldQuit;
+	bool _shouldRTL;
 
 	class RandomSourceRecord {
 	public:
@@ -128,6 +129,9 @@
 	virtual int getButtonState() const { return _buttonState; }
 	virtual int getModifierState() const { return _modifierState; }
 	virtual int shouldQuit() const { return _shouldQuit; }
+	virtual int shouldRTL() const { return _shouldRTL; }
+	virtual void resetRTL() { _shouldRTL = false; }
+	
 	virtual Common::Keymapper *getKeymapper() { return _keymapper; }
 };
 

Copied: scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.cpp (from rev 34649, scummvm/trunk/backends/fs/abstract-fs.cpp)
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -0,0 +1,40 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#include "backends/fs/abstract-fs.h"
+
+const char *AbstractFilesystemNode::lastPathComponent(const Common::String &str, const char sep) {
+	// TODO: Get rid of this eventually! Use Common::lastPathComponent instead
+	if(str.empty())
+		return "";
+
+	const char *start = str.c_str();
+	const char *cur = start + str.size() - 2;
+
+	while (cur >= start && *cur != sep) {
+		--cur;
+	}
+
+	return cur + 1;
+}

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/abstract-fs.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -43,28 +43,27 @@
  */
 class AbstractFilesystemNode {
 protected:
-	friend class FilesystemNode;
-	typedef Common::String String;
-	typedef FilesystemNode::ListMode ListMode;
+	friend class Common::FilesystemNode;
+	typedef Common::FilesystemNode::ListMode ListMode;
 
 	/**
-	 * Returns the child node with the given name. If no child with this name
-	 * exists, returns 0. When called on a non-directory node, it should
-	 * handle this gracefully by returning 0.
+	 * Returns the child node with the given name. When called on a non-directory
+	 * node, it should handle this gracefully by returning 0.
+	 * When called with a name not matching any of the files/dirs contained in this
+	 * directory, a valid node shold be returned, which returns 'false' upon calling
+	 * the exists() method. The idea is that this node can then still can be used to
+	 * create a new file via the openForWriting() method.
 	 *
 	 * Example:
 	 *			Calling getChild() for a node with path "/foo/bar" using name="file.txt",
 	 *			would produce a new node with "/foo/bar/file.txt" as path.
 	 *
-	 * @note This function will append a separator char (\ or /) to the end of the
-	 * path if needed.
-	 *
 	 * @note Handling calls on non-dir nodes gracefully makes it possible to
 	 * switch to a lazy type detection scheme in the future.
 	 *
 	 * @param name String containing the name of the child to create a new node.
 	 */
-	virtual AbstractFilesystemNode *getChild(const String &name) const = 0;
+	virtual AbstractFilesystemNode *getChild(const Common::String &name) const = 0;
 
 	/**
 	 * The parent node of this directory.
@@ -72,6 +71,19 @@
 	 */
 	virtual AbstractFilesystemNode *getParent() const = 0;
 
+	/**
+	 * Returns the last component of a given path.
+	 *
+	 * Examples:
+	 *			/foo/bar.txt would return /bar.txt
+	 *			/foo/bar/    would return /bar/
+	 *
+	 * @param str String containing the path.
+	 * @param sep character used to separate path components
+	 * @return Pointer to the first char of the last component inside str.
+	 */
+	static const char *lastPathComponent(const Common::String &str, const char sep);
+
 public:
 	/**
 	 * Destructor.
@@ -100,7 +112,7 @@
 	 *
 	 * @note By default, this method returns the value of getName().
 	 */
-	virtual String getDisplayName() const { return getName(); }
+	virtual Common::String getDisplayName() const { return getName(); }
 
 	/**
 	 * Returns the last component of the path pointed by this FilesystemNode.
@@ -111,12 +123,12 @@
 	 *
 	 * @note This method is very architecture dependent, please check the concrete implementation for more information.
 	 */
-	virtual String getName() const = 0;
+	virtual Common::String getName() const = 0;
 
 	/**
 	 * Returns the 'path' of the current node, usable in fopen().
 	 */
-	virtual String getPath() const = 0;
+	virtual Common::String getPath() const = 0;
 
 	/**
 	 * Indicates whether this path refers to a directory or not.
@@ -149,9 +161,26 @@
 	 */
 	virtual bool isWritable() const = 0;
 
-	/* TODO:
-	bool isFile();
-	*/
+
+	/**
+	 * Creates a SeekableReadStream instance corresponding to the file
+	 * referred by this node. This assumes that the node actually refers
+	 * to a readable file. If this is not the case, 0 is returned.
+	 *
+	 * @return pointer to the stream object, 0 in case of a failure
+	 */
+	virtual Common::SeekableReadStream *openForReading() = 0;
+
+	/**
+	 * Creates a WriteStream instance corresponding to the file
+	 * referred by this node. This assumes that the node actually refers
+	 * to a readable file. If this is not the case, 0 is returned.
+	 *
+	 * @return pointer to the stream object, 0 in case of a failure
+	 */
+	virtual Common::WriteStream *openForWriting() = 0;
 };
 
+
+
 #endif //BACKENDS_ABSTRACT_FS_H

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -26,8 +26,6 @@
 #include "backends/fs/amigaos4/amigaos4-fs-factory.h"
 #include "backends/fs/amigaos4/amigaos4-fs.cpp"
 
-DECLARE_SINGLETON(AmigaOSFilesystemFactory);
-
 AbstractFilesystemNode *AmigaOSFilesystemFactory::makeRootFileNode() const {
 	return new AmigaOSFilesystemNode();
 }
@@ -36,7 +34,7 @@
 	return new AmigaOSFilesystemNode();
 }
 
-AbstractFilesystemNode *AmigaOSFilesystemFactory::makeFileNodePath(const String &path) const {
+AbstractFilesystemNode *AmigaOSFilesystemFactory::makeFileNodePath(const Common::String &path) const {
 	return new AmigaOSFilesystemNode(path);
 }
 #endif

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs-factory.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -25,7 +25,6 @@
 #ifndef AMIGAOS_FILESYSTEM_FACTORY_H
 #define AMIGAOS_FILESYSTEM_FACTORY_H
 
-#include "common/singleton.h"
 #include "backends/fs/fs-factory.h"
 
 /**
@@ -33,19 +32,11 @@
  *
  * Parts of this class are documented in the base interface class, FilesystemFactory.
  */
-class AmigaOSFilesystemFactory : public FilesystemFactory, public Common::Singleton<AmigaOSFilesystemFactory> {
+class AmigaOSFilesystemFactory : public FilesystemFactory {
 public:
-	typedef Common::String String;
-
 	virtual AbstractFilesystemNode *makeRootFileNode() const;
 	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
-	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
-
-protected:
-	AmigaOSFilesystemFactory() {};
-
-private:
-	friend class Common::Singleton<SingletonBaseType>;
+	virtual AbstractFilesystemNode *makeFileNodePath(const Common::String &path) const;
 };
 
 #endif /*AMIGAOS_FILESYSTEM_FACTORY_H*/

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/amigaos4/amigaos4-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -36,8 +36,8 @@
 #endif
 
 #include "common/util.h"
-#include "engines/engine.h"
 #include "backends/fs/abstract-fs.h"
+#include "backends/fs/stdiostream.h"
 
 #define ENTER() /* debug(6, "Enter") */
 #define LEAVE() /* debug(6, "Leave") */
@@ -52,8 +52,8 @@
 class AmigaOSFilesystemNode : public AbstractFilesystemNode {
 protected:
 	BPTR _pFileLock;
-	String _sDisplayName;
-	String _sPath;
+	Common::String _sDisplayName;
+	Common::String _sPath;
 	bool _bIsDirectory;
 	bool _bIsValid;
 
@@ -74,9 +74,9 @@
 	/**
 	 * Creates a AmigaOSFilesystemNode for a given path.
 	 *
-	 * @param path String with the path the new node should point to.
+	 * @param path Common::String with the path the new node should point to.
 	 */
-	AmigaOSFilesystemNode(const String &p);
+	AmigaOSFilesystemNode(const Common::String &p);
 
 	/**
 	 * FIXME: document this constructor.
@@ -96,17 +96,20 @@
 	virtual ~AmigaOSFilesystemNode();
 
 	virtual bool exists() const;
-	virtual String getDisplayName() const { return _sDisplayName; };
-	virtual String getName() const { return _sDisplayName; };
-	virtual String getPath() const { return _sPath; };
+	virtual Common::String getDisplayName() const { return _sDisplayName; };
+	virtual Common::String getName() const { return _sDisplayName; };
+	virtual Common::String getPath() const { return _sPath; };
 	virtual bool isDirectory() const { return _bIsDirectory; };
 	virtual bool isReadable() const;
 	virtual bool isWritable() const;
 
-	virtual AbstractFilesystemNode *getChild(const String &n) const;
+	virtual AbstractFilesystemNode *getChild(const Common::String &n) const;
 	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
 	virtual AbstractFilesystemNode *getParent() const;
 
+	virtual Common::SeekableReadStream *openForReading();
+	virtual Common::WriteStream *openForWriting();
+
 	/**
 	 * Creates a list with all the volumes present in the root node.
 	 */
@@ -116,7 +119,7 @@
 /**
  * Returns the last component of a given path.
  *
- * @param str String containing the path.
+ * @param str Common::String containing the path.
  * @return Pointer to the first char of the last component inside str.
  */
 const char *lastPathComponent(const Common::String &str) {
@@ -148,10 +151,10 @@
 	LEAVE();
 }
 
-AmigaOSFilesystemNode::AmigaOSFilesystemNode(const String &p) {
+AmigaOSFilesystemNode::AmigaOSFilesystemNode(const Common::String &p) {
 	ENTER();
 
-	int len = 0, offset = p.size();
+	int offset = p.size();
 
 	//assert(offset > 0);
 
@@ -161,7 +164,7 @@
 	}
 
 	_sPath = p;
-	_sDisplayName = lastPathComponent(_sPath);
+	_sDisplayName = ::lastPathComponent(_sPath);
 	_pFileLock = 0;
 	_bIsDirectory = false;
 
@@ -299,14 +302,14 @@
 	return nodeExists;
 }
 
-AbstractFilesystemNode *AmigaOSFilesystemNode::getChild(const String &n) const {
+AbstractFilesystemNode *AmigaOSFilesystemNode::getChild(const Common::String &n) const {
 	ENTER();
 	if (!_bIsDirectory) {
 		debug(6, "Not a directory");
 		return 0;
 	}
 
-	String newPath(_sPath);
+	Common::String newPath(_sPath);
 
 	if (_sPath.lastChar() != '/')
 		newPath += '/';
@@ -368,10 +371,10 @@
 
 				struct ExAllData *ead = data;
 				do {
-					if ((mode == FilesystemNode::kListAll) ||
-						(EAD_IS_DRAWER(ead) && (mode == FilesystemNode::kListDirectoriesOnly)) ||
-						(EAD_IS_FILE(ead) && (mode == FilesystemNode::kListFilesOnly))) {
-						String full_path = _sPath;
+					if ((mode == Common::FilesystemNode::kListAll) ||
+						(EAD_IS_DRAWER(ead) && (mode == Common::FilesystemNode::kListDirectoriesOnly)) ||
+						(EAD_IS_FILE(ead) && (mode == Common::FilesystemNode::kListFilesOnly))) {
+						Common::String full_path = _sPath;
 						full_path += (char*)ead->ed_Name;
 
 						BPTR lock = IDOS->Lock((STRPTR)full_path.c_str(), SHARED_LOCK);
@@ -566,4 +569,12 @@
 	return myList;
 }
 
+Common::SeekableReadStream *AmigaOSFilesystemNode::openForReading() {
+	return StdioStream::makeFromPath(getPath().c_str(), false);
+}
+
+Common::WriteStream *AmigaOSFilesystemNode::openForWriting() {
+	return StdioStream::makeFromPath(getPath().c_str(), true);
+}
+
 #endif //defined(__amigaos4__)

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -45,7 +45,7 @@
 	}
 }
 
-AbstractFilesystemNode *DSFilesystemFactory::makeFileNodePath(const String &path) const {
+AbstractFilesystemNode *DSFilesystemFactory::makeFileNodePath(const Common::String &path) const {
 	if (DS::isGBAMPAvailable()) {
 		return new DS::GBAMPFileSystemNode(path);
 	} else {

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs-factory.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -35,11 +35,9 @@
  */
 class DSFilesystemFactory : public FilesystemFactory, public Common::Singleton<DSFilesystemFactory> {
 public:
-	typedef Common::String String;
-
 	virtual AbstractFilesystemNode *makeRootFileNode() const;
 	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
-	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+	virtual AbstractFilesystemNode *makeFileNodePath(const Common::String &path) const;
 
 protected:
 	DSFilesystemFactory() {};

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -24,6 +24,7 @@
 #include "common/util.h"
 //#include <NDS/ARM9/console.h> //basic print funcionality
 #include "backends/fs/ds/ds-fs.h"
+#include "backends/fs/stdiostream.h"
 #include "dsmain.h"
 #include "fat/gba_nds_fat.h"
 
@@ -55,7 +56,7 @@
 	}
 }
 
-DSFileSystemNode::DSFileSystemNode(const String& path) {
+DSFileSystemNode::DSFileSystemNode(const Common::String& path) {
 //	consolePrintf("--%s ",path.c_str());
 
 	char disp[128];
@@ -70,7 +71,7 @@
 
 	strcpy(disp, pathStr + lastSlash + 1);
 
-	_displayName = String(disp);
+	_displayName = Common::String(disp);
 	_path = path;
 //	_isValid = true;
 //	_isDirectory = false;
@@ -98,7 +99,7 @@
 //	consolePrintf("%s - Found: %d, Dir: %d\n", pathStr, _isValid, _isDirectory);
 }
 
-DSFileSystemNode::DSFileSystemNode(const String& path, bool isDir) {
+DSFileSystemNode::DSFileSystemNode(const Common::String& path, bool isDir) {
 //	consolePrintf("--%s ",path.c_str());
 
 	char disp[128];
@@ -112,7 +113,7 @@
 
 	strcpy(disp, pathStr + lastSlash + 1);
 
-	_displayName = String(disp);
+	_displayName = Common::String(disp);
 	_path = path;
 	_isValid = true;
 	_isDirectory = isDir;
@@ -167,10 +168,10 @@
 			_zipFile->getFileName(n);
 
 //			consolePrintf("file: %s\n", n);
-			if ( (_zipFile->isDirectory() && ((mode == FilesystemNode::kListDirectoriesOnly) || (mode == FilesystemNode::kListAll)) )
-				|| (!_zipFile->isDirectory() && ((mode == FilesystemNode::kListFilesOnly) || (mode == FilesystemNode::kListAll)) ) )
+			if ( (_zipFile->isDirectory() && ((mode == Common::FilesystemNode::kListDirectoriesOnly) || (mode == Common::FilesystemNode::kListAll)) )
+				|| (!_zipFile->isDirectory() && ((mode == Common::FilesystemNode::kListFilesOnly) || (mode == Common::FilesystemNode::kListAll)) ) )
 			{
-				DSFileSystemNode* dsfsn = new DSFileSystemNode("ds:/" + String(n), _zipFile->isDirectory());
+				DSFileSystemNode* dsfsn = new DSFileSystemNode("ds:/" + Common::String(n), _zipFile->isDirectory());
 				dsfsn->_isDirectory = _zipFile->isDirectory();
 				dirList.push_back((dsfsn));
 			}
@@ -195,7 +196,7 @@
 			}
 		}
 
-		p = new DSFileSystemNode(String(path, lastSlash));
+		p = new DSFileSystemNode(Common::String(path, lastSlash));
 		((DSFileSystemNode *) (p))->_isDirectory = true;
 	} else {
 		p = new DSFileSystemNode();
@@ -204,6 +205,14 @@
 	return p;
 }
 
+Common::SeekableReadStream *DSFileSystemNode::openForReading() {
+	return StdioStream::makeFromPath(getPath().c_str(), false);
+}
+
+Common::WriteStream *DSFileSystemNode::openForWriting() {
+	return StdioStream::makeFromPath(getPath().c_str(), true);
+}
+
 //////////////////////////////////////////////////////////////////////////
 // GBAMPFileSystemNode - File system using GBA Movie Player and CF card //
 //////////////////////////////////////////////////////////////////////////
@@ -216,7 +225,7 @@
 	_path = "mp:/";
 }
 
-GBAMPFileSystemNode::GBAMPFileSystemNode(const String& path) {
+GBAMPFileSystemNode::GBAMPFileSystemNode(const Common::String& path) {
 //	consolePrintf("'%s'",path.c_str());
 
 	char disp[128];
@@ -245,13 +254,13 @@
 	}
 //	consolePrintf("Path: %s  (%d)\n", check, success);
 
-	_displayName = String(disp);
+	_displayName = Common::String(disp);
 	_path = path;
 	_isValid = success == FT_FILE;
 	_isDirectory = success == FT_DIR;
 }
 
-GBAMPFileSystemNode::GBAMPFileSystemNode(const String& path, bool isDirectory) {
+GBAMPFileSystemNode::GBAMPFileSystemNode(const Common::String& path, bool isDirectory) {
 //	consolePrintf("'%s'",path.c_str());
 
 	char disp[128];
@@ -265,7 +274,7 @@
 
 	strcpy(disp, pathStr + lastSlash + 1);
 
-	_displayName = String(disp);
+	_displayName = Common::String(disp);
 	_path = path;
 	_isValid = true;
 	_isDirectory = isDirectory;
@@ -313,8 +322,8 @@
 
 	while (entryType != TYPE_NO_MORE) {
 
-		if ( ((entryType == TYPE_DIR) && ((mode == FilesystemNode::kListDirectoriesOnly) || (mode == FilesystemNode::kListAll)))
-		||   ((entryType == TYPE_FILE) && ((mode == FilesystemNode::kListFilesOnly) || (mode == FilesystemNode::kListAll))) ) {
+		if ( ((entryType == TYPE_DIR) && ((mode == Common::FilesystemNode::kListDirectoriesOnly) || (mode == Common::FilesystemNode::kListAll)))
+		||   ((entryType == TYPE_FILE) && ((mode == Common::FilesystemNode::kListFilesOnly) || (mode == Common::FilesystemNode::kListAll))) ) {
 			GBAMPFileSystemNode* dsfsn;
 
 			consolePrintf("Fname: %s\n", fname);
@@ -322,9 +331,9 @@
 			if (strcmp(fname, ".") && strcmp(fname, "..")) {
 
 				if (!strcmp(path, "/")) {
-					dsfsn = new GBAMPFileSystemNode("mp:" + String(path) + String(fname), entryType == TYPE_DIR);
+					dsfsn = new GBAMPFileSystemNode("mp:" + Common::String(path) + Common::String(fname), entryType == TYPE_DIR);
 				} else {
-					dsfsn = new GBAMPFileSystemNode("mp:" + String(path) + String("/") + String(fname), entryType == TYPE_DIR);
+					dsfsn = new GBAMPFileSystemNode("mp:" + Common::String(path) + Common::String("/") + Common::String(fname), entryType == TYPE_DIR);
 				}
 
 //				dsfsn->_isDirectory = entryType == DIR;
@@ -358,7 +367,7 @@
 			}
 		}
 
-		p = new GBAMPFileSystemNode(String(path, lastSlash));
+		p = new GBAMPFileSystemNode(Common::String(path, lastSlash));
 		p->_isDirectory = true;
 	} else {
 		p = new GBAMPFileSystemNode();
@@ -367,6 +376,14 @@
 	return p;
 }
 
+Common::SeekableReadStream *GBAMPFileSystemNode::openForReading() {
+	return StdioStream::makeFromPath(getPath().c_str(), false);
+}
+
+Common::WriteStream *GBAMPFileSystemNode::openForWriting() {
+	return StdioStream::makeFromPath(getPath().c_str(), true);
+}
+
 // Stdio replacements
 #define MAX_FILE_HANDLES 32
 
@@ -399,6 +416,7 @@
 	if (DS::isGBAMPAvailable()) {
 		FAT_chdir("/");
 
+		// Turn all back slashes into forward slashes for gba_nds_fat
 		char* p = realName;
 		while (*p) {
 			if (*p == '\\') *p = '/';
@@ -422,8 +440,12 @@
 
 	// Allocate a file handle
 	int r = 0;
-	while (handle[r].used) r++;
+	while (handle[r].used) {
+		r++;
+		assert(r < MAX_FILE_HANDLES);
+	}
 
+#ifdef GBA_SRAM_SAVE
 	if (strchr(mode, 'w')) {
 //		consolePrintf("Writing %s\n", realName);
 		handle[r].sramFile = (DSSaveFile *) DSSaveFileManager::instance()->openSavefile(realName, true);
@@ -431,6 +453,7 @@
 //		consolePrintf("Reading %s\n", realName);
 		handle[r].sramFile = (DSSaveFile *) DSSaveFileManager::instance()->openSavefile(realName, false);
 	}
+#endif
 
 	if (handle[r].sramFile) {
 		handle[r].used = true;
@@ -512,69 +535,6 @@
 			return bytes / size;
 		}
 		return numItems;
-
-/*		int item = 0;
-		u8* data = (u8 *) ptr;
-		while ((item < numItems) && (!FAT_feof((FAT_FILE *) handle))) {
-
-
-			int bytes = 0;
-			while ((bytes < size) && (!FAT_feof((FAT_FILE *) handle))) {
-				*data++ = FAT_fgetc((FAT_FILE *) handle);
-				bytes++;
-			}
-
-			item++;
-
-		}
-
-		return item;
-*/
-		int items = 0;
-
-		//for (int r = 0; r < numItems; r++) {
-			if (!std_feof(handle)) {
-/*				for (int t = 0; t < size; t++) {
-					if (feof(handle)) eof = true;
-					*(((char *) (ptr)) + r * size + t) = getc(handle);
-				}*/
-				int left = size * numItems;
-				int bytesRead = -1;
-
-				while ((left > 0) && (!FAT_feof((FAT_FILE *) handle))) {
-					int amount = left > 8192? 8192: left;
-//					do {
-						bytesRead = FAT_fread((void *) ptr, 1, amount, (FAT_FILE *) handle);
-/*						if (bytesRead == 0) {
-							consolePrintf("Pos:%d items:%d num:%d amount:%d read:%d\n", ftell(handle), items, numItems, amount, bytesRead);
-							left++;
-
-							int pos = ftell(handle);
-
-							fseek(handle, 0, SEEK_SET);
-							int c = getc(handle);
-							fseek(handle, pos - 1024, SEEK_SET);
-							fread(ptr, 1024, 1, handle);
-							swiWaitForVBlank();
-							//while (true);
-						}
-
-					} while (bytesRead == 0);
-*/
-					left -= bytesRead;
-					ptr = ((char *) (ptr)) + bytesRead;
-				}
-
-				items = numItems - (left / size);
-
-//				FAT_fread((void *) ptr, size, 1, ((int) (handle)) - 1);
-//				ptr = ((char *) (ptr)) + size;
-			}
-//		}
-
-//		consolePrintf("...done %d \n", items)
-
-		return items;
 	}
 
 	if (handle->sramFile) {
@@ -641,10 +601,6 @@
 	}
 }
 
-void std_fprintf(FILE* handle, const char* fmt, ...) {
-	consolePrintf(fmt);
-}
-
 bool std_feof(FILE* handle) {
 //	consolePrintf("feof ");
 
@@ -660,44 +616,12 @@
 	return handle->pos >= handle->size;
 }
 
-void std_fflush(FILE* handle) {
+int std_fflush(FILE* handle) {
 	//FIXME: not implemented?
 //	consolePrintf("fflush ");
+	return 0;
 }
 
-char* std_fgets(char* str, int size, FILE* file) {
-//	consolePrintf("fgets file=%d ", file);
-
-	if (DS::isGBAMPAvailable()) {
-		char* s = str;
-		while ((*s++ = std_getc(file)) >= 32) {
-//			consolePrintf("%d ", *s);
-		}
-		*s = 0;
-
-//		consolePrintf("Read:%s\n", str);
-
-		return str;
-	}
-
-	if (file->sramFile) {
-		file->pos--;
-		int p = -1;
-		do {
-			file->pos++;
-			p++;
-			file->sramFile->read((char *) &str[p], 1);
-//			consolePrintf("%d,", str[p]);
-		} while ((str[p] >= 32) && (!std_feof(file)) && (p < size));
-		str[p + 1] = 0;
-		file->pos++;
-//		consolePrintf("Read:%s\n", str);
-		return str;
-	}
-
-	return NULL;
-}
-
 long int std_ftell(FILE* handle) {
 	if (DS::isGBAMPAvailable()) {
 		return FAT_ftell((FAT_FILE *) handle);
@@ -731,92 +655,20 @@
 	return 0;
 }
 
+int std_ferror(FILE* handle) {
+	//FIXME: not implemented?
+//	consolePrintf("ferror ");
+	return 0;
+}
+
 void std_clearerr(FILE* handle) {
 	//FIXME: not implemented?
 //	consolePrintf("clearerr ");
 }
 
-int std_getc(FILE* handle) {
-	if (DS::isGBAMPAvailable()) {
-		char c;
-		FAT_fread(&c, 1, 1, (FAT_FILE *) handle);
-
-		return c;
-	}
-
-//	consolePrintf("fgetc ");
-	return 0;				// Not supported yet
+void std_fprintf(FILE* handle, const char* fmt, ...) {
+	consolePrintf(fmt);
 }
 
-char* std_getcwd(char* dir, int dunno) {
-//	consolePrintf("getcwd ");
-	dir[0] = '\0';
-	return dir;			// Not supported yet
-}
 
-void std_cwd(char* dir) {
-	char buffer[128];
-	strcpy(buffer, dir);
-	char* realName = buffer;
-
-	if (DS::isGBAMPAvailable()) {
-		if ((strlen(dir) >= 4) && (dir[0] == 'm') && (dir[1] == 'p') && (dir[2] == ':') && (dir[3] == '/')) {
-			realName += 4;
-		}
-
-	//	consolePrintf("Real cwd:%d\n", realName);
-
-		char* p = realName;
-		while (*p) {
-			if (*p == '\\') *p = '/';
-			p++;
-		}
-
-	//	consolePrintf("Real cwd:%d\n", realName);
-		FAT_chdir(realName);
-	} else {
-		if ((strlen(dir) >= 4) && (dir[0] == 'd') && (dir[1] == 's') && (dir[2] == ':') && (dir[3] == '/')) {
-			realName += 4;
-		}
-
-		char* p = realName;
-		while (*p) {
-			if (*p == '\\') *p = '/';
-			p++;
-		}
-
-		strcpy(currentDir, realName);
-		if (*(currentDir + strlen(currentDir) - 1) == '/') {
-			*(currentDir + strlen(currentDir) - 1) = '\0';
-		}
-//		consolePrintf("CWD: %s\n", currentDir);
-	}
-}
-
-int std_ferror(FILE* handle) {
-	return 0;
-}
-
 } // namespace DS
-
-/**
- * Returns the last component of a given path.
- *
- * Examples:
- *			/foo/bar.txt would return /bar.txt
- *			/foo/bar/    would return /bar/
- *
- * @param str String containing the path.
- * @return Pointer to the first char of the last component inside str.
- */
-const char *lastPathComponent(const Common::String &str) {
-	const char *start = str.c_str();
-	const char *cur = start + str.size() - 2;
-
-	while (cur >= start && *cur != '/' && *cur != '\\') {
-		--cur;
-	}
-
-	return cur + 1;
-}
-

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/ds/ds-fs.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -41,12 +41,10 @@
  */
 class DSFileSystemNode : public AbstractFilesystemNode {
 protected:
-	typedef class Common::String String;
-
 	static ZipFile* _zipFile;
 
-	String _displayName;
-	String _path;
+	Common::String _displayName;
+	Common::String _path;
 	bool _isDirectory;
 	bool _isValid;
 
@@ -61,7 +59,7 @@
 	 *
 	 * @param path String with the path the new node should point to.
 	 */
-	DSFileSystemNode(const String &path);
+	DSFileSystemNode(const Common::String &path);
 
 	/**
 	 * Creates a DSFilesystemNode for a given path.
@@ -69,7 +67,7 @@
 	 * @param path String with the path the new node should point to.
 	 * @param path true if path is a directory, false otherwise.
 	 */
-	DSFileSystemNode(const String& path, bool isDir);
+	DSFileSystemNode(const Common::String& path, bool isDir);
 
 	/**
 	 * Copy constructor.
@@ -77,9 +75,9 @@
 	DSFileSystemNode(const DSFileSystemNode *node);
 
 	virtual bool exists() const { return true; }		//FIXME: this is just a stub
-	virtual String getDisplayName() const {  return _displayName; }
-	virtual String getName() const {  return _displayName; }
-	virtual String getPath() const { return _path; }
+	virtual Common::String getDisplayName() const {  return _displayName; }
+	virtual Common::String getName() const {  return _displayName; }
+	virtual Common::String getPath() const { return _path; }
 	virtual bool isDirectory() const { return _isDirectory; }
 	virtual bool isReadable() const { return true; }	//FIXME: this is just a stub
 	virtual bool isWritable() const { return true; }	//FIXME: this is just a stub
@@ -89,9 +87,12 @@
 	 */
 	virtual AbstractFilesystemNode *clone() const { return new DSFileSystemNode(this); }
 	virtual AbstractFilesystemNode *getChild(const Common::String& name) const;
-	virtual bool getChildren(AbstractFSList &list, ListMode mode = FilesystemNode::kListDirectoriesOnly, bool hidden = false) const;
+	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
 	virtual AbstractFilesystemNode *getParent() const;
 
+	virtual Common::SeekableReadStream *openForReading();
+	virtual Common::WriteStream *openForWriting();
+
 	/**
 	 * Returns the zip file this node points to.
 	 * TODO: check this documentation.
@@ -107,10 +108,8 @@
  */
 class GBAMPFileSystemNode : public AbstractFilesystemNode {
 protected:
-	typedef class Common::String String;
-
-	String _displayName;
-	String _path;
+	Common::String _displayName;
+	Common::String _path;
 	bool _isDirectory;
 	bool _isValid;
 
@@ -125,7 +124,7 @@
 	 *
 	 * @param path String with the path the new node should point to.
 	 */
-	GBAMPFileSystemNode(const String &path);
+	GBAMPFileSystemNode(const Common::String &path);
 
 	/**
 	 * Creates a DSFilesystemNode for a given path.
@@ -133,7 +132,7 @@
 	 * @param path String with the path the new node should point to.
 	 * @param path true if path is a directory, false otherwise.
 	 */
-	GBAMPFileSystemNode(const String &path, bool isDirectory);
+	GBAMPFileSystemNode(const Common::String &path, bool isDirectory);
 
 	/**
 	 * Copy constructor.
@@ -141,9 +140,9 @@
 	GBAMPFileSystemNode(const GBAMPFileSystemNode *node);
 
 	virtual bool exists() const { return _isValid || _isDirectory; }
-	virtual String getDisplayName() const {  return _displayName; }
-	virtual String getName() const {  return _displayName; }
-	virtual String getPath() const { return _path; }
+	virtual Common::String getDisplayName() const {  return _displayName; }
+	virtual Common::String getName() const {  return _displayName; }
+	virtual Common::String getPath() const { return _path; }
 	virtual bool isDirectory() const { return _isDirectory; }
 	virtual bool isReadable() const { return true; }	//FIXME: this is just a stub
 	virtual bool isWritable() const { return true; }	//FIXME: this is just a stub
@@ -153,8 +152,11 @@
 	 */
 	virtual AbstractFilesystemNode *clone() const { return new GBAMPFileSystemNode(this); }
 	virtual AbstractFilesystemNode *getChild(const Common::String& name) const;
-	virtual bool getChildren(AbstractFSList &list, ListMode mode = FilesystemNode::kListDirectoriesOnly, bool hidden = false) const;
+	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
 	virtual AbstractFilesystemNode *getParent() const;
+
+	virtual Common::SeekableReadStream *openForReading();
+	virtual Common::WriteStream *openForWriting();
 };
 
 struct fileHandle {
@@ -179,15 +181,14 @@
 // Please do not remove any of these prototypes that appear not to be required.
 FILE*	std_fopen(const char* name, const char* mode);
 void	std_fclose(FILE* handle);
-int		std_getc(FILE* handle);
 size_t	std_fread(const void* ptr, size_t size, size_t numItems, FILE* handle);
 size_t	std_fwrite(const void* ptr, size_t size, size_t numItems, FILE* handle);
 bool	std_feof(FILE* handle);
 long int std_ftell(FILE* handle);
 int		std_fseek(FILE* handle, long int offset, int whence);
 void	std_clearerr(FILE* handle);
-void	std_cwd(char* dir);
-void	std_fflush(FILE* handle);
+int		std_fflush(FILE* handle);
+int		std_ferror(FILE* handle);
 
 } //namespace DS
 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -36,7 +36,7 @@
 	return new PalmOSFilesystemNode();
 }
 
-AbstractFilesystemNode *PalmOSFilesystemFactory::makeFileNodePath(const String &path) const {
+AbstractFilesystemNode *PalmOSFilesystemFactory::makeFileNodePath(const Common::String &path) const {
 	return new PalmOSFilesystemNode(path);
 }
 #endif

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs-factory.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -35,11 +35,9 @@
  */
 class PalmOSFilesystemFactory : public FilesystemFactory, public Common::Singleton<PalmOSFilesystemFactory> {
 public:
-	typedef Common::String String;
-
 	virtual AbstractFilesystemNode *makeRootFileNode() const;
 	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
-	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+	virtual AbstractFilesystemNode *makeFileNodePath(const Common::String &path) const;
 
 protected:
 	PalmOSFilesystemFactory() {};

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/palmos/palmos-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -28,6 +28,7 @@
 #include "globals.h"
 
 #include "backends/fs/abstract-fs.h"
+#include "backends/fs/stdiostream.h"
 
 /**
  * Implementation of the ScummVM file system API based on PalmOS VFS API.
@@ -36,8 +37,8 @@
  */
 class PalmOSFilesystemNode : public AbstractFilesystemNode {
 protected:
-	String _displayName;
-	String _path;
+	Common::String _displayName;
+	Common::String _path;
 	bool _isDirectory;
 	bool _isValid;
 	bool _isPseudoRoot;
@@ -51,22 +52,25 @@
 	/**
 	 * Creates a POSIXFilesystemNode for a given path.
 	 *
-	 * @param path String with the path the new node should point to.
+	 * @param path Common::String with the path the new node should point to.
 	 */
-	PalmOSFilesystemNode(const String &p);
+	PalmOSFilesystemNode(const Common::String &p);
 
 	virtual bool exists() const { return _isValid; }
-	virtual String getDisplayName() const { return _displayName; }
-	virtual String getName() const { return _displayName; }
-	virtual String getPath() const { return _path; }
+	virtual Common::String getDisplayName() const { return _displayName; }
+	virtual Common::String getName() const { return _displayName; }
+	virtual Common::String getPath() const { return _path; }
 	virtual bool isDirectory() const { return _isDirectory; }
 	virtual bool isReadable() const { return true; }	//FIXME: this is just a stub
 	virtual bool isWritable() const { return true; }	//FIXME: this is just a stub
 
-	virtual AbstractFilesystemNode *getChild(const String &n) const;
+	virtual AbstractFilesystemNode *getChild(const Common::String &n) const;
 	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
 	virtual AbstractFilesystemNode *getParent() const;
 
+	virtual Common::SeekableReadStream *openForReading();
+	virtual Common::WriteStream *openForWriting();
+
 private:
 	/**
 	 * Adds a single WindowsFilesystemNode to a given list.
@@ -74,44 +78,20 @@
 	 *
 	 * @param list List to put the file entry node in.
 	 * @param mode Mode to use while adding the file entry to the list.
-	 * @param base String with the directory being listed.
+	 * @param base Common::String with the directory being listed.
 	 * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find.
 	 */
 	static void addFile(AbstractFSList &list, ListMode mode, const Char *base, FileInfoType* find_data);
 };
 
-/**
- * Returns the last component of a given path.
- *
- * Examples:
- *			/foo/bar.txt would return /bar.txt
- *			/foo/bar/    would return /bar/
- *
- * @param str String containing the path.
- * @return Pointer to the first char of the last component inside str.
- */
-const char *lastPathComponent(const Common::String &str) {
-	if(str.empty())
-		return "";
-
-	const char *start = str.c_str();
-	const char *cur = start + str.size() - 2;
-
-	while (cur >= start && *cur != '/') {
-		--cur;
-	}
-
-	return cur + 1;
-}
-
 void PalmOSFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const char *base, FileInfoType* find_data) {
 	PalmOSFilesystemNode entry;
 	bool isDir;
 
 	isDir = (find_data->attributes & vfsFileAttrDirectory);
 
-	if ((!isDir && mode == FilesystemNode::kListDirectoriesOnly) ||
-		(isDir && mode == FilesystemNode::kListFilesOnly))
+	if ((!isDir && mode == Common::FilesystemNode::kListDirectoriesOnly) ||
+		(isDir && mode == Common::FilesystemNode::kListFilesOnly))
 		return;
 
 	entry._isDirectory = isDir;
@@ -136,9 +116,9 @@
 	_isPseudoRoot = false;
 }
 
-PalmOSFilesystemNode::PalmOSFilesystemNode(const String &p) {
+PalmOSFilesystemNode::PalmOSFilesystemNode(const Common::String &p) {
 	_path = p;
-	_displayName = lastPathComponent(_path);
+	_displayName = lastPathComponent(_path, '/');
 
 	UInt32 attr;
 	FileRef handle;
@@ -159,10 +139,10 @@
 	_isPseudoRoot = false;
 }
 
-AbstractFilesystemNode *PalmOSFilesystemNode::getChild(const String &n) const {
+AbstractFilesystemNode *PalmOSFilesystemNode::getChild(const Common::String &n) const {
 	assert(_isDirectory);
 
-	String newPath(_path);
+	Common::String newPath(_path);
 	if (_path.lastChar() != '/')
 		newPath += '/';
 	newPath += n;
@@ -215,17 +195,25 @@
 
 	if (!_isPseudoRoot) {
 		const char *start = _path.c_str();
-		const char *end = lastPathComponent(_path);
+		const char *end = lastPathComponent(_path, '/');
 
 		p = new PalmOSFilesystemNode();
-		p->_path = String(start, end - start);
+		p->_path = Common::String(start, end - start);
 		p->_isValid = true;
 		p->_isDirectory = true;
-		p->_displayName = lastPathComponent(p->_path);
+		p->_displayName = lastPathComponent(p->_path, '/');
 		p->_isPseudoRoot =(p->_path == "/");
 	}
 
 	return p;
 }
 
+Common::SeekableReadStream *PalmOSFilesystemNode::openForReading() {
+	return StdioStream::makeFromPath(getPath().c_str(), false);
+}
+
+Common::WriteStream *PalmOSFilesystemNode::openForWriting() {
+	return StdioStream::makeFromPath(getPath().c_str(), true);
+}
+
 #endif // PALMOS_MODE

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -26,19 +26,18 @@
 #include "backends/fs/posix/posix-fs-factory.h"
 #include "backends/fs/posix/posix-fs.cpp"
 
-DECLARE_SINGLETON(POSIXFilesystemFactory);
-
 AbstractFilesystemNode *POSIXFilesystemFactory::makeRootFileNode() const {
-	return new POSIXFilesystemNode();
+	return new POSIXFilesystemNode("/");
 }
 
 AbstractFilesystemNode *POSIXFilesystemFactory::makeCurrentDirectoryFileNode() const {
 	char buf[MAXPATHLEN];
 	getcwd(buf, MAXPATHLEN);
-	return new POSIXFilesystemNode(buf, true);
+	return new POSIXFilesystemNode(buf);
 }
 
-AbstractFilesystemNode *POSIXFilesystemFactory::makeFileNodePath(const String &path) const {
-	return new POSIXFilesystemNode(path, true);
+AbstractFilesystemNode *POSIXFilesystemFactory::makeFileNodePath(const Common::String &path) const {
+	assert(!path.empty());
+	return new POSIXFilesystemNode(path);
 }
 #endif

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs-factory.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -25,7 +25,6 @@
 #ifndef POSIX_FILESYSTEM_FACTORY_H
 #define POSIX_FILESYSTEM_FACTORY_H
 
-#include "common/singleton.h"
 #include "backends/fs/fs-factory.h"
 
 /**
@@ -33,19 +32,10 @@
  *
  * Parts of this class are documented in the base interface class, FilesystemFactory.
  */
-class POSIXFilesystemFactory : public FilesystemFactory, public Common::Singleton<POSIXFilesystemFactory> {
-public:
-	typedef Common::String String;
-
+class POSIXFilesystemFactory : public FilesystemFactory {
 	virtual AbstractFilesystemNode *makeRootFileNode() const;
 	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
-	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
-
-protected:
-	POSIXFilesystemFactory() {};
-
-private:
-	friend class Common::Singleton<SingletonBaseType>;
+	virtual AbstractFilesystemNode *makeFileNodePath(const Common::String &path) const;
 };
 
 #endif /*POSIX_FILESYSTEM_FACTORY_H*/

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -24,86 +24,21 @@
 
 #if defined(UNIX)
 
-#include "backends/fs/abstract-fs.h"
+#include "backends/fs/posix/posix-fs.h"
+#include "backends/fs/stdiostream.h"
+#include "common/algorithm.h"
 
-#ifdef MACOSX
-#include <sys/types.h>
-#endif
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <dirent.h>
 #include <stdio.h>
-#include <unistd.h>
 
-/**
- * Implementation of the ScummVM file system API based on POSIX.
- *
- * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
- */
-class POSIXFilesystemNode : public AbstractFilesystemNode {
-protected:
-	String _displayName;
-	String _path;
-	bool _isDirectory;
-	bool _isValid;
+#ifdef __OS2__
+#define INCL_DOS
+#include <os2.h>
+#endif
 
-public:
-	/**
-	 * Creates a POSIXFilesystemNode with the root node as path.
-	 */
-	POSIXFilesystemNode();
 
-	/**
-	 * Creates a POSIXFilesystemNode for a given path.
-	 *
-	 * @param path String with the path the new node should point to.
-	 * @param verify true if the isValid and isDirectory flags should be verified during the construction.
-	 */
-	POSIXFilesystemNode(const String &path, bool verify);
-
-	virtual bool exists() const { return access(_path.c_str(), F_OK) == 0; }
-	virtual String getDisplayName() const { return _displayName; }
-	virtual String getName() const { return _displayName; }
-	virtual String getPath() const { return _path; }
-	virtual bool isDirectory() const { return _isDirectory; }
-	virtual bool isReadable() const { return access(_path.c_str(), R_OK) == 0; }
-	virtual bool isWritable() const { return access(_path.c_str(), W_OK) == 0; }
-
-	virtual AbstractFilesystemNode *getChild(const String &n) const;
-	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
-	virtual AbstractFilesystemNode *getParent() const;
-
-private:
-	/**
-	 * Tests and sets the _isValid and _isDirectory flags, using the stat() function.
-	 */
-	virtual void setFlags();
-};
-
-/**
- * Returns the last component of a given path.
- *
- * Examples:
- *			/foo/bar.txt would return /bar.txt
- *			/foo/bar/    would return /bar/
- *
- * @param str String containing the path.
- * @return Pointer to the first char of the last component inside str.
- */
-const char *lastPathComponent(const Common::String &str) {
-	if(str.empty())
-		return "";
-
-	const char *start = str.c_str();
-	const char *cur = start + str.size() - 2;
-
-	while (cur >= start && *cur != '/') {
-		--cur;
-	}
-
-	return cur + 1;
-}
-
 void POSIXFilesystemNode::setFlags() {
 	struct stat st;
 
@@ -111,15 +46,7 @@
 	_isDirectory = _isValid ? S_ISDIR(st.st_mode) : false;
 }
 
-POSIXFilesystemNode::POSIXFilesystemNode() {
-	// The root dir.
-	_path = "/";
-	_displayName = _path;
-	_isValid = true;
-	_isDirectory = true;
-}
-
-POSIXFilesystemNode::POSIXFilesystemNode(const String &p, bool verify) {
+POSIXFilesystemNode::POSIXFilesystemNode(const Common::String &p) {
 	assert(p.size() > 0);
 
 	// Expand "~/" to the value of the HOME env variable
@@ -134,30 +61,85 @@
 	} else {
 		_path = p;
 	}
+	
+#ifdef __OS2__
+	// On OS/2, 'X:/' is a root of drive X, so we should not remove that last
+	// slash.
+	if (!(_path.size() == 3 && _path.hasSuffix(":/")))
+#endif
+	// Normalize the path (that is, remove unneeded slashes etc.)
+	_path = Common::normalizePath(_path, '/');
+	_displayName = Common::lastPathComponent(_path, '/');
 
-	_displayName = lastPathComponent(_path);
+	// TODO: should we turn relative paths into absolute ones?
+	// Pro: Ensures the "getParent" works correctly even for relative dirs.
+	// Contra: The user may wish to use (and keep!) relative paths in his
+	//   config file, and converting relative to absolute paths may hurt him...
+	//
+	// An alternative approach would be to change getParent() to work correctly
+	// if "_path" is the empty string.
+#if 0
+	if (!_path.hasPrefix("/")) {
+		char buf[MAXPATHLEN+1];
+		getcwd(buf, MAXPATHLEN);
+		strcat(buf, "/");
+		_path = buf + _path;
+	}
+#endif
+	// TODO: Should we enforce that the path is absolute at this point?
+	//assert(_path.hasPrefix("/"));
 
-	if (verify) {
-		setFlags();
-	}
+	setFlags();
 }
 
-AbstractFilesystemNode *POSIXFilesystemNode::getChild(const String &n) const {
-	// FIXME: Pretty lame implementation! We do no error checking to speak
-	// of, do not check if this is a special node, etc.
+AbstractFilesystemNode *POSIXFilesystemNode::getChild(const Common::String &n) const {
+	assert(!_path.empty());
 	assert(_isDirectory);
+	
+	// Make sure the string contains no slashes
+	assert(!n.contains('/'));
 
-	String newPath(_path);
+	// We assume here that _path is already normalized (hence don't bother to call
+	//  Common::normalizePath on the final path).
+	Common::String newPath(_path);
 	if (_path.lastChar() != '/')
 		newPath += '/';
 	newPath += n;
 
-	return new POSIXFilesystemNode(newPath, true);
+	return makeNode(newPath);
 }
 
 bool POSIXFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const {
 	assert(_isDirectory);
 
+#ifdef __OS2__
+	if (_path == "/") {
+		// Special case for the root dir: List all DOS drives
+		ULONG ulDrvNum;
+		ULONG ulDrvMap;
+	
+		DosQueryCurrentDisk(&ulDrvNum, &ulDrvMap);
+	
+		for (int i = 0; i < 26; i++) {
+			if (ulDrvMap & 1) {
+				char drive_root[] = "A:/";
+				drive_root[0] += i;
+	
+                POSIXFilesystemNode *entry = new POSIXFilesystemNode();
+				entry->_isDirectory = true;
+				entry->_isValid = true;
+				entry->_path = drive_root;
+				entry->_displayName = "[" + Common::String(drive_root, 2) + "]";
+				myList.push_back(entry);
+			}
+	
+			ulDrvMap >>= 1;
+		}
+		
+		return true;
+	}
+#endif
+
 	DIR *dirp = opendir(_path.c_str());
 	struct dirent *dp;
 
@@ -175,13 +157,13 @@
 			continue;
 		}
 
-		String newPath(_path);
-		if (newPath.lastChar() != '/')
-			newPath += '/';
-		newPath += dp->d_name;
+		// Start with a clone of this node, with the correct path set
+		POSIXFilesystemNode entry(*this);
+		entry._displayName = dp->d_name;
+		if (_path.lastChar() != '/')
+			entry._path += '/';
+		entry._path += entry._displayName;
 
-		POSIXFilesystemNode entry(newPath, false);
-
 #if defined(SYSTEM_NOT_SUPPORTING_D_TYPE)
 		/* TODO: d_type is not part of POSIX, so it might not be supported
 		 * on some of our targets. For those systems where it isn't supported,
@@ -215,13 +197,10 @@
 			continue;
 
 		// Honor the chosen mode
-		if ((mode == FilesystemNode::kListFilesOnly && entry._isDirectory) ||
-			(mode == FilesystemNode::kListDirectoriesOnly && !entry._isDirectory))
+		if ((mode == Common::FilesystemNode::kListFilesOnly && entry._isDirectory) ||
+			(mode == Common::FilesystemNode::kListDirectoriesOnly && !entry._isDirectory))
 			continue;
 
-		if (entry._isDirectory)
-			entry._path += "/";
-
 		myList.push_back(new POSIXFilesystemNode(entry));
 	}
 	closedir(dirp);
@@ -231,12 +210,39 @@
 
 AbstractFilesystemNode *POSIXFilesystemNode::getParent() const {
 	if (_path == "/")
-		return 0;
+		return 0;	// The filesystem root has no parent
 
+#ifdef __OS2__
+    if (_path.size() == 3 && _path.hasSuffix(":/"))
+        // This is a root directory of a drive
+        return makeNode("/");   // return a virtual root for a list of drives
+#endif
+
 	const char *start = _path.c_str();
-	const char *end = lastPathComponent(_path);
+	const char *end = start + _path.size();
+	
+	// Strip of the last component. We make use of the fact that at this
+	// point, _path is guaranteed to be normalized
+	while (end > start && *(end-1) != '/')
+		end--;
 
-	return new POSIXFilesystemNode(String(start, end - start), true);
+	if (end == start) {
+		// This only happens if we were called with a relative path, for which
+		// there simply is no parent.
+		// TODO: We could also resolve this by assuming that the parent is the
+		//       current working directory, and returning a node referring to that.
+		return 0;
+	}
+
+	return makeNode(Common::String(start, end));
 }
 
+Common::SeekableReadStream *POSIXFilesystemNode::openForReading() {
+	return StdioStream::makeFromPath(getPath().c_str(), false);
+}
+
+Common::WriteStream *POSIXFilesystemNode::openForWriting() {
+	return StdioStream::makeFromPath(getPath().c_str(), true);
+}
+
 #endif //#if defined(UNIX)

Copied: scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.h (from rev 34649, scummvm/trunk/backends/fs/posix/posix-fs.h)
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.h	                        (rev 0)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/posix/posix-fs.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -0,0 +1,86 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#ifndef POSIX_FILESYSTEM_H
+#define POSIX_FILESYSTEM_H
+
+#include "backends/fs/abstract-fs.h"
+
+#ifdef MACOSX
+#include <sys/types.h>
+#endif
+#include <unistd.h>
+
+/**
+ * Implementation of the ScummVM file system API based on POSIX.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
+ */
+class POSIXFilesystemNode : public AbstractFilesystemNode {
+protected:
+	Common::String _displayName;
+	Common::String _path;
+	bool _isDirectory;
+	bool _isValid;
+	
+	virtual AbstractFilesystemNode *makeNode(const Common::String &path) const {
+		return new POSIXFilesystemNode(path);
+	}
+	
+	/**
+	 * Plain constructor, for internal use only (hence protected).
+	 */
+	POSIXFilesystemNode() : _isDirectory(false), _isValid(false) {}
+
+public:
+	/**
+	 * Creates a POSIXFilesystemNode for a given path.
+	 *
+	 * @param path the path the new node should point to.
+	 */
+	POSIXFilesystemNode(const Common::String &path);
+
+	virtual bool exists() const { return access(_path.c_str(), F_OK) == 0; }
+	virtual Common::String getDisplayName() const { return _displayName; }
+	virtual Common::String getName() const { return _displayName; }
+	virtual Common::String getPath() const { return _path; }
+	virtual bool isDirectory() const { return _isDirectory; }
+	virtual bool isReadable() const { return access(_path.c_str(), R_OK) == 0; }
+	virtual bool isWritable() const { return access(_path.c_str(), W_OK) == 0; }
+
+	virtual AbstractFilesystemNode *getChild(const Common::String &n) const;
+	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
+	virtual AbstractFilesystemNode *getParent() const;
+
+	virtual Common::SeekableReadStream *openForReading();
+	virtual Common::WriteStream *openForWriting();
+
+private:
+	/**
+	 * Tests and sets the _isValid and _isDirectory flags, using the stat() function.
+	 */
+	virtual void setFlags();
+};
+
+#endif /*POSIX_FILESYSTEM_H*/

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -36,7 +36,7 @@
 	return new Ps2FilesystemNode();
 }
 
-AbstractFilesystemNode *Ps2FilesystemFactory::makeFileNodePath(const String &path) const {
+AbstractFilesystemNode *Ps2FilesystemFactory::makeFileNodePath(const Common::String &path) const {
 	// return new Ps2FilesystemNode(path);
 
 	Ps2FilesystemNode *nf = new Ps2FilesystemNode(path, true);

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs-factory.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -35,11 +35,9 @@
  */
 class Ps2FilesystemFactory : public FilesystemFactory, public Common::Singleton<Ps2FilesystemFactory> {	
 public:
-	typedef Common::String String;
-		
 	virtual AbstractFilesystemNode *makeRootFileNode() const;
 	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
-	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+	virtual AbstractFilesystemNode *makeFileNodePath(const Common::String &path) const;
 	
 protected:
 	Ps2FilesystemFactory() {};

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/ps2/ps2-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -23,6 +23,7 @@
  */
 
 #include "backends/fs/abstract-fs.h"
+#include "backends/fs/stdiostream.h"
 #include <kernel.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -47,8 +48,8 @@
 friend class Ps2FilesystemFactory;
 
 protected:
-	String _displayName;
-	String _path;
+	Common::String _displayName;
+	Common::String _path;
 	bool _isDirectory;
 	bool _isRoot;
 
@@ -65,10 +66,10 @@
 	/**
 	 * Creates a PS2FilesystemNode for a given path.
 	 * 
-	 * @param path String with the path the new node should point to.
+	 * @param path Common::String with the path the new node should point to.
 	 */
-	Ps2FilesystemNode(const String &path);
-	Ps2FilesystemNode(const String &path, bool verify);
+	Ps2FilesystemNode(const Common::String &path);
+	Ps2FilesystemNode(const Common::String &path, bool verify);
 	
 	/**
 	 * Copy constructor.
@@ -77,9 +78,9 @@
 
 	virtual bool exists(void) const;
 
-	virtual String getDisplayName() const { return _displayName; }
-	virtual String getName() const { return _displayName; }
-	virtual String getPath() const { return _path; }
+	virtual Common::String getDisplayName() const { return _displayName; }
+	virtual Common::String getName() const { return _displayName; }
+	virtual Common::String getPath() const { return _path; }
 
 	virtual bool isDirectory() const {
 		return _isDirectory;
@@ -95,33 +96,14 @@
 	}
 
 	virtual AbstractFilesystemNode *clone() const { return new Ps2FilesystemNode(this); }
-	virtual AbstractFilesystemNode *getChild(const String &n) const;
+	virtual AbstractFilesystemNode *getChild(const Common::String &n) const;
 	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
 	virtual AbstractFilesystemNode *getParent() const;
+
+	virtual Common::SeekableReadStream *openForReading();
+	virtual Common::WriteStream *openForWriting();
 };
 
-/**
- * Returns the last component of a given path.
- * 
- * @param str String containing the path.
- * @return Pointer to the first char of the last component inside str.
- */
-const char *lastPathComponent(const Common::String &str) {
-	if (str.empty())
-		return "";
-
-	const char *start = str.c_str();
-	const char *cur = start + str.size() - 2;
-
-	while (cur >= start && *cur != '/' && *cur != ':') {
-		--cur;
-	}
-
-	printf("romeo : lastPathComponent = %s\n", cur + 1);
-
-	return cur + 1;
-}
-
 Ps2FilesystemNode::Ps2FilesystemNode() {
 	_isDirectory = true;
 	_isRoot = true;
@@ -129,12 +111,12 @@
 	_path = "";
 }
 
-Ps2FilesystemNode::Ps2FilesystemNode(const String &path) {
+Ps2FilesystemNode::Ps2FilesystemNode(const Common::String &path) {
 	_path = path;
 	_isDirectory = true;
 	if (strcmp(path.c_str(), "") == 0) {
 		_isRoot = true;
-		_displayName = String("PlayStation 2");
+		_displayName = Common::String("PlayStation 2");
 	} else {
 		_isRoot = false;
 		const char *dsplName = NULL, *pos = path.c_str();
@@ -142,18 +124,18 @@
 			if (*pos++ == '/')
 				dsplName = pos;
 		if (dsplName)
-			_displayName = String(dsplName);
+			_displayName = Common::String(dsplName);
 		else
 			_displayName = getDeviceDescription(path.c_str());
 	}
 }
 
-Ps2FilesystemNode::Ps2FilesystemNode(const String &path, bool verify) {
+Ps2FilesystemNode::Ps2FilesystemNode(const Common::String &path, bool verify) {
 	_path = path;
 
 	if (strcmp(path.c_str(), "") == 0) {
 		_isRoot = true; /* root is always a dir*/
-		_displayName = String("PlayStation 2");
+		_displayName = Common::String("PlayStation 2");
 		_isDirectory = true;
 	} else {
 		_isRoot = false;
@@ -163,7 +145,7 @@
 				dsplName = pos;
 
 		if (dsplName) {
-			_displayName = String(dsplName);
+			_displayName = Common::String(dsplName);
 			if (verify)
 				_isDirectory = getDirectoryFlag(path.c_str());
 			else
@@ -228,7 +210,7 @@
 	return false;
 }
 
-AbstractFilesystemNode *Ps2FilesystemNode::getChild(const String &n) const {
+AbstractFilesystemNode *Ps2FilesystemNode::getChild(const Common::String &n) const {
 	if (!_isDirectory)
 		return NULL;
 
@@ -306,9 +288,9 @@
 			while ((dreadRes = fio.dread(fd, &dirent)) > 0) {
 				if (dirent.name[0] == '.')
 					continue; // ignore '.' and '..'
-				if (((mode == FilesystemNode::kListDirectoriesOnly) && (dirent.stat.mode & FIO_S_IFDIR)) ||
-					((mode == FilesystemNode::kListFilesOnly) && !(dirent.stat.mode & FIO_S_IFDIR)) ||
-					(mode == FilesystemNode::kListAll)) {
+				if (((mode == Common::FilesystemNode::kListDirectoriesOnly) && (dirent.stat.mode & FIO_S_IFDIR)) ||
+					((mode == Common::FilesystemNode::kListFilesOnly) && !(dirent.stat.mode & FIO_S_IFDIR)) ||
+					(mode == Common::FilesystemNode::kListAll)) {
 
 					dirEntry._isDirectory = (bool)(dirent.stat.mode & FIO_S_IFDIR);
 					dirEntry._isRoot = false;
@@ -344,7 +326,7 @@
 	}
 
 	if (slash)
-		return new Ps2FilesystemNode(String(_path.c_str(), slash - _path.c_str()));
+		return new Ps2FilesystemNode(Common::String(_path.c_str(), slash - _path.c_str()));
 	else
 		return new Ps2FilesystemNode();
 }
@@ -359,3 +341,10 @@
 		return "Harddisk";	
 }
 
+Common::SeekableReadStream *Ps2FilesystemNode::openForReading() {
+	return StdioStream::makeFromPath(getPath().c_str(), false);
+}
+
+Common::WriteStream *Ps2FilesystemNode::openForWriting() {
+	return StdioStream::makeFromPath(getPath().c_str(), true);
+}

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -36,7 +36,7 @@
 	return new PSPFilesystemNode();
 }
 
-AbstractFilesystemNode *PSPFilesystemFactory::makeFileNodePath(const String &path) const {
+AbstractFilesystemNode *PSPFilesystemFactory::makeFileNodePath(const Common::String &path) const {
 	return new PSPFilesystemNode(path, true);
 }
 #endif

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs-factory.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -35,11 +35,9 @@
  */
 class PSPFilesystemFactory : public FilesystemFactory, public Common::Singleton<PSPFilesystemFactory> {
 public:
-	typedef Common::String String;
-
 	virtual AbstractFilesystemNode *makeRootFileNode() const;
 	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
-	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+	virtual AbstractFilesystemNode *makeFileNodePath(const Common::String &path) const;
 
 protected:
 	PSPFilesystemFactory() {};

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/psp/psp-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -26,6 +26,7 @@
 
 #include "engines/engine.h"
 #include "backends/fs/abstract-fs.h"
+#include "backends/fs/stdiostream.h"
 
 #include <sys/stat.h>
 #include <unistd.h>
@@ -39,8 +40,8 @@
  */
 class PSPFilesystemNode : public AbstractFilesystemNode {
 protected:
-	String _displayName;
-	String _path;
+	Common::String _displayName;
+	Common::String _path;
 	bool _isDirectory;
 	bool _isValid;
 
@@ -53,48 +54,27 @@
 	/**
 	 * Creates a PSPFilesystemNode for a given path.
 	 *
-	 * @param path String with the path the new node should point to.
+	 * @param path Common::String with the path the new node should point to.
 	 * @param verify true if the isValid and isDirectory flags should be verified during the construction.
 	 */
 	PSPFilesystemNode(const Common::String &p, bool verify);
 
 	virtual bool exists() const { return access(_path.c_str(), F_OK) == 0; }
-	virtual String getDisplayName() const { return _displayName; }
-	virtual String getName() const { return _displayName; }
-	virtual String getPath() const { return _path; }
+	virtual Common::String getDisplayName() const { return _displayName; }
+	virtual Common::String getName() const { return _displayName; }
+	virtual Common::String getPath() const { return _path; }
 	virtual bool isDirectory() const { return _isDirectory; }
 	virtual bool isReadable() const { return access(_path.c_str(), R_OK) == 0; }
 	virtual bool isWritable() const { return access(_path.c_str(), W_OK) == 0; }
 
-	virtual AbstractFilesystemNode *getChild(const String &n) const;
+	virtual AbstractFilesystemNode *getChild(const Common::String &n) const;
 	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
 	virtual AbstractFilesystemNode *getParent() const;
+
+	virtual Common::SeekableReadStream *openForReading();
+	virtual Common::WriteStream *openForWriting();
 };
 
-/**
- * Returns the last component of a given path.
- *
- * Examples:
- *			/foo/bar.txt would return /bar.txt
- *			/foo/bar/    would return /bar/
- *
- * @param str String containing the path.
- * @return Pointer to the first char of the last component inside str.
- */
-const char *lastPathComponent(const Common::String &str) {
-	if(str.empty())
-		return "";
-
-	const char *start = str.c_str();
-	const char *cur = start + str.size() - 2;
-
-	while (cur >= start && *cur != '/') {
-		--cur;
-	}
-
-	return cur + 1;
-}
-
 PSPFilesystemNode::PSPFilesystemNode() {
 	_isDirectory = true;
 	_displayName = "Root";
@@ -106,7 +86,7 @@
 	assert(p.size() > 0);
 
 	_path = p;
-	_displayName = lastPathComponent(_path);
+	_displayName = lastPathComponent(_path, '/');
 	_isValid = true;
 	_isDirectory = true;
 
@@ -117,12 +97,12 @@
 	}
 }
 
-AbstractFilesystemNode *PSPFilesystemNode::getChild(const String &n) const {
+AbstractFilesystemNode *PSPFilesystemNode::getChild(const Common::String &n) const {
 	// FIXME: Pretty lame implementation! We do no error checking to speak
 	// of, do not check if this is a special node, etc.
 	assert(_isDirectory);
 
-	String newPath(_path);
+	Common::String newPath(_path);
 	if (_path.lastChar() != '/')
 		newPath += '/';
 	newPath += n;
@@ -157,8 +137,8 @@
 				entry._path += "/";
 
 			// Honor the chosen mode
-			if ((mode == FilesystemNode::kListFilesOnly && entry._isDirectory) ||
-			   (mode == FilesystemNode::kListDirectoriesOnly && !entry._isDirectory))
+			if ((mode == Common::FilesystemNode::kListFilesOnly && entry._isDirectory) ||
+			   (mode == Common::FilesystemNode::kListDirectoriesOnly && !entry._isDirectory))
 				continue;
 
 			myList.push_back(new PSPFilesystemNode(entry));
@@ -176,9 +156,17 @@
 		return 0;
 
 	const char *start = _path.c_str();
-	const char *end = lastPathComponent(_path);
+	const char *end = lastPathComponent(_path, '/');
 
-	return new PSPFilesystemNode(String(start, end - start), false);
+	return new PSPFilesystemNode(Common::String(start, end - start), false);
 }
 
+Common::SeekableReadStream *PSPFilesystemNode::openForReading() {
+	return StdioStream::makeFromPath(getPath().c_str(), false);
+}
+
+Common::WriteStream *PSPFilesystemNode::openForWriting() {
+	return StdioStream::makeFromPath(getPath().c_str(), true);
+}
+
 #endif //#ifdef __PSP__

Copied: scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.cpp (from rev 34649, scummvm/trunk/backends/fs/stdiostream.cpp)
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -0,0 +1,161 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "backends/fs/stdiostream.h"
+
+#include <errno.h>
+
+#if defined(MACOSX) || defined(IPHONE)
+#include "CoreFoundation/CoreFoundation.h"
+#endif
+
+
+#ifdef __PLAYSTATION2__
+	// for those replaced fopen/fread/etc functions
+	typedef unsigned long	uint64;
+	typedef signed long	int64;
+	#include "backends/platform/ps2/fileio.h"
+
+	#define fopen(a, b)			ps2_fopen(a, b)
+	#define fclose(a)			ps2_fclose(a)
+	#define fseek(a, b, c)			ps2_fseek(a, b, c)
+	#define ftell(a)			ps2_ftell(a)
+	#define feof(a)				ps2_feof(a)
+	#define fread(a, b, c, d)		ps2_fread(a, b, c, d)
+	#define fwrite(a, b, c, d)		ps2_fwrite(a, b, c, d)
+
+	//#define fprintf				ps2_fprintf	// used in common/util.cpp
+	//#define fflush(a)			ps2_fflush(a)	// used in common/util.cpp
+
+	//#define fgetc(a)			ps2_fgetc(a)	// not used
+	//#define fgets(a, b, c)			ps2_fgets(a, b, c)	// not used
+	//#define fputc(a, b)			ps2_fputc(a, b)	// not used
+	//#define fputs(a, b)			ps2_fputs(a, b)	// not used
+
+	//#define fsize(a)			ps2_fsize(a)	// not used -- and it is not a standard function either
+#endif
+
+#ifdef __DS__
+
+	// These functions replace the standard library functions of the same name.
+	// As this header is included after the standard one, I have the chance to #define
+	// all of these to my own code.
+	//
+	// A #define is the only way, as redefinig the functions would cause linker errors.
+
+	// These functions need to be #undef'ed, as their original definition
+	// in devkitarm is done with #includes (ugh!)
+	#undef feof
+	#undef clearerr
+	//#undef getc
+	//#undef ferror
+
+	#include "backends/fs/ds/ds-fs.h"
+
+
+	// Only functions used in the ScummVM source have been defined here!
+	#define fopen(name, mode)					DS::std_fopen(name, mode)
+	#define fclose(handle)						DS::std_fclose(handle)
+	#define fread(ptr, size, items, file)		DS::std_fread(ptr, size, items, file)
+	#define fwrite(ptr, size, items, file)		DS::std_fwrite(ptr, size, items, file)
+	#define feof(handle)						DS::std_feof(handle)
+	#define ftell(handle)						DS::std_ftell(handle)
+	#define fseek(handle, offset, whence)		DS::std_fseek(handle, offset, whence)
+	#define clearerr(handle)					DS::std_clearerr(handle)
+	#define fflush(file)						DS::std_fflush(file)
+	#define ferror(handle)						DS::std_ferror(handle)
+
+#endif
+
+StdioStream::StdioStream(void *handle) : _handle(handle) {
+	assert(handle);
+}
+
+StdioStream::~StdioStream() {
+	fclose((FILE *)_handle);
+}
+
+bool StdioStream::err() const {
+	return ferror((FILE *)_handle) != 0;
+}
+
+void StdioStream::clearErr() {
+	clearerr((FILE *)_handle);
+}
+
+bool StdioStream::eos() const {
+	return feof((FILE *)_handle) != 0;
+}
+
+int32 StdioStream::pos() const {
+	return ftell((FILE *)_handle);
+}
+
+int32 StdioStream::size() const {
+	int32 oldPos = ftell((FILE *)_handle);
+	fseek((FILE *)_handle, 0, SEEK_END);
+	int32 length = ftell((FILE *)_handle);
+	fseek((FILE *)_handle, oldPos, SEEK_SET);
+
+	return length;
+}
+
+bool StdioStream::seek(int32 offs, int whence) {
+	return fseek((FILE *)_handle, offs, whence) == 0;
+}
+
+uint32 StdioStream::read(void *ptr, uint32 len) {
+	return fread((byte *)ptr, 1, len, (FILE *)_handle);
+}
+
+uint32 StdioStream::write(const void *ptr, uint32 len) {
+	return fwrite(ptr, 1, len, (FILE *)_handle);
+}
+
+bool StdioStream::flush() {
+	return fflush((FILE *)_handle) == 0;
+}
+
+StdioStream *StdioStream::makeFromPath(const Common::String &path, bool writeMode) {
+	FILE *handle = fopen(path.c_str(), writeMode ? "wb" : "rb");
+
+#ifdef __amigaos4__
+	//
+	// Work around for possibility that someone uses AmigaOS "newlib" build
+	// with SmartFileSystem (blocksize 512 bytes), leading to buffer size
+	// being only 512 bytes. "Clib2" sets the buffer size to 8KB, resulting
+	// smooth movie playback. This forces the buffer to be enough also when
+	// using "newlib" compile on SFS.
+	//
+	if (handle && !writeMode) {
+		setvbuf(handle, NULL, _IOFBF, 8192);
+	}
+#endif
+
+
+	if (handle)
+		return new StdioStream(handle);
+	return 0;
+}

Copied: scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.h (from rev 34649, scummvm/trunk/backends/fs/stdiostream.h)
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.h	                        (rev 0)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/stdiostream.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -0,0 +1,62 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef BACKENDS_FS_STDIOSTREAM_H
+#define BACKENDS_FS_STDIOSTREAM_H
+
+#include "common/scummsys.h"
+#include "common/noncopyable.h"
+#include "common/stream.h"
+#include "common/str.h"
+
+class StdioStream : public Common::SeekableReadStream, public Common::WriteStream, public Common::NonCopyable {
+protected:
+	/** File handle to the actual file. */
+	void *_handle;
+
+public:
+	/**
+	 * Given a path, invokes fopen on that path and wrap the result in a
+	 * StdioStream instance.
+	 */
+	static StdioStream *makeFromPath(const Common::String &path, bool writeMode);
+
+	StdioStream(void *handle);
+	virtual ~StdioStream();
+
+	bool err() const;
+	void clearErr();
+	bool eos() const;
+
+	virtual uint32 write(const void *dataPtr, uint32 dataSize);
+	virtual bool flush();
+
+	virtual int32 pos() const;
+	virtual int32 size() const;
+	bool seek(int32 offs, int whence = SEEK_SET);
+	uint32 read(void *dataPtr, uint32 dataSize);
+};
+
+#endif

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -26,8 +26,6 @@
 #include "backends/fs/symbian/symbian-fs-factory.h"
 #include "backends/fs/symbian/symbian-fs.cpp"
 
-DECLARE_SINGLETON(SymbianFilesystemFactory);
-
 AbstractFilesystemNode *SymbianFilesystemFactory::makeRootFileNode() const {
 	return new SymbianFilesystemNode(true);
 }
@@ -38,7 +36,7 @@
 	return new SymbianFilesystemNode(path);
 }
 
-AbstractFilesystemNode *SymbianFilesystemFactory::makeFileNodePath(const String &path) const {
+AbstractFilesystemNode *SymbianFilesystemFactory::makeFileNodePath(const Common::String &path) const {
 	return new SymbianFilesystemNode(path);
 }
 #endif

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.h	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs-factory.h	2008-09-26 21:53:08 UTC (rev 34654)
@@ -25,7 +25,6 @@
 #ifndef SYMBIAN_FILESYSTEM_FACTORY_H
 #define SYMBIAN_FILESYSTEM_FACTORY_H
 
-#include "common/singleton.h"
 #include "backends/fs/fs-factory.h"
 
 /**
@@ -33,19 +32,11 @@
  *
  * Parts of this class are documented in the base interface class, FilesystemFactory.
  */
-class SymbianFilesystemFactory : public FilesystemFactory, public Common::Singleton<SymbianFilesystemFactory> {
+class SymbianFilesystemFactory : public FilesystemFactory {
 public:
-	typedef Common::String String;
-
 	virtual AbstractFilesystemNode *makeRootFileNode() const;
 	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
-	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
-
-protected:
-	SymbianFilesystemFactory() {};
-
-private:
-	friend class Common::Singleton<SingletonBaseType>;
+	virtual AbstractFilesystemNode *makeFileNodePath(const Common::String &path) const;
 };
 
 #endif /*SYMBIAN_FILESYSTEM_FACTORY_H*/

Modified: scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs.cpp	2008-09-26 19:07:26 UTC (rev 34653)
+++ scummvm/branches/gsoc2008-vkeybd/backends/fs/symbian/symbian-fs.cpp	2008-09-26 21:53:08 UTC (rev 34654)
@@ -24,12 +24,16 @@
 
 #if defined (__SYMBIAN32__)
 #include "backends/fs/abstract-fs.h"
+#include "backends/fs/symbian/symbianstream.h"
+#include "backends/platform/symbian/src/symbianos.h"
 
 #include <dirent.h>
 #include <eikenv.h>
 #include <f32file.h>
 #include <bautils.h>
 
+#define KDriveLabelSize 30
+
 /**
  * Implementation of the ScummVM file system API based on POSIX.
  *
@@ -37,12 +41,11 @@
  */
 class SymbianFilesystemNode : public AbstractFilesystemNode {
 protected:
-	String _displayName;
-	String _path;
-	bool _isDirectory;
-	bool _isValid;
-	bool _isPseudoRoot;
-
+	Common::String _displayName;
+	Common::String _path;
+	TBool _isDirectory;
+	TBool _isValid;
+	TBool _isPseudoRoot;
 public:
 	/**
 	 * Creates a SymbianFilesystemNode with the root node as path.
@@ -54,57 +57,36 @@
 	/**
 	 * Creates a SymbianFilesystemNode for a given path.
 	 *
-	 * @param path String with the path the new node should point to.
+	 * @param path Common::String with the path the new node should point to.
 	 */
-	SymbianFilesystemNode(const String &path);
+	SymbianFilesystemNode(const Common::String &path);
 
 	virtual bool exists() const {
 		TFileName fname;

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