Delete the simulator.
Bug: 5010576

Change-Id: Idc731612107444594f86c68ac40dcc0033423b54
diff --git a/simulator/app/Android.mk b/simulator/app/Android.mk
deleted file mode 100644
index 5a2d3b5..0000000
--- a/simulator/app/Android.mk
+++ /dev/null
@@ -1,133 +0,0 @@
-# Copyright 2005 The Android Open Source Project
-#
-
-ifeq ($(TARGET_SIMULATOR),true)
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-	DeviceManager.cpp \
-	DeviceWindow.cpp \
-	ExternalRuntime.cpp \
-	LoadableImage.cpp \
-	LocalBiChannel.cpp \
-	LogMessage.cpp \
-	LogPool.cpp \
-	LogPrefsDialog.cpp \
-	LogWindow.cpp \
-	MainFrame.cpp \
-	MessageStream.cpp \
-	MyApp.cpp \
-	PhoneButton.cpp \
-	PhoneCollection.cpp \
-	PhoneData.cpp \
-	PhoneWindow.cpp \
-	Pipe.cpp \
-	Preferences.cpp \
-	PrefsDialog.cpp \
-	PropertyServer.cpp \
-	Semaphore.cpp \
-	Shmem.cpp \
-	UserEvent.cpp \
-	executablepath_linux.cpp \
-	ported.cpp
-
-LOCAL_STATIC_LIBRARIES := \
-	libtinyxml
-LOCAL_WHOLE_STATIC_LIBRARIES := \
-	libutils\
-	libcutils
-LOCAL_MODULE := simulator
-
-LOCAL_LDLIBS += -lpthread
-
-LOCAL_CFLAGS := -UNDEBUG
-#LOCAL_LDFLAGS :=
-
-LOCAL_C_INCLUDES += \
-	external/tinyxml \
-	commands/runtime
-
-# wxWidgets defines
-LOCAL_C_INCLUDES += \
-	/usr/include/wx-2.6 \
-	/usr/lib/wx/include/gtk2-unicode-release-2.6
-
-ifeq ($(HOST_OS),linux)
-	# You can install wxWidgets with "sudo apt-get libwxgtk2.6-dev"
-	LOCAL_LDFLAGS += -lwx_baseu-2.6 \
-		-lwx_baseu_net-2.6 \
-		-lwx_baseu_xml-2.6 \
-		-lwx_gtk2u_adv-2.6 \
-		-lwx_gtk2u_core-2.6 \
-		-lwx_gtk2u_html-2.6 \
-		-lwx_gtk2u_qa-2.6 \
-		-lwx_gtk2u_xrc-2.6
-
-	# this next line makes the simulator able to find its shared libraries
-	# without us explicitly setting the LD_LIBRARY_PATH environment variable
-	LOCAL_LDLIBS += -Wl,-z,origin
-	LOCAL_CFLAGS += -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 \
-   					-D_LARGE_FILES -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA
-	LOCAL_LDLIBS += -lrt
-endif
-ifeq ($(HOST_OS),darwin)
-	# NOTE: OS X is no longer supported
-	LOCAL_C_INCLUDES += prebuilt/$(HOST_PREBUILT_TAG)/wxwidgets 
-	LOCAL_LDLIBS += \
-				-framework QuickTime \
-				-framework IOKit \
-				-framework Carbon \
-				-framework Cocoa \
-				-framework System \
-				-lwx_mac_xrc-2.6 \
-				-lwx_mac_qa-2.6 \
-				-lwx_mac_html-2.6 \
-				-lwx_mac_adv-2.6 \
-				-lwx_mac_core-2.6 \
-				-lwx_base_carbon_xml-2.6 \
-				-lwx_base_carbon_net-2.6 \
-				-lwx_base_carbon-2.6 \
-				-lwxexpat-2.6 \
-				-lwxtiff-2.6 \
-				-lwxjpeg-2.6 \
-				-lwxpng-2.6 \
-				-lz \
-				-lpthread \
-				-liconv
-	LOCAL_CFLAGS += \
-				-D__WXMAC__ \
-				-D_FILE_OFFSET_BITS=64 \
-				-D_LARGE_FILES \
-				-DNO_GCC_PRAGMA
-endif
-
-
-include $(BUILD_HOST_EXECUTABLE)
-
-ifeq ($(HOST_OS),darwin)
-# Add the carbon resources to the executable.
-$(LOCAL_BUILT_MODULE): PRIVATE_POST_PROCESS_COMMAND := \
-        /Developer/Tools/Rez -d __DARWIN__ -t APPL \
-        -d __WXMAC__ -o $(LOCAL_BUILT_MODULE) Carbon.r
-endif
-
-# also, we need to copy our assets.  We place these by hand now, because
-# I'd like to clean this up as part of some pdk cleanup I want to do.
-
-asset_files := $(addprefix $(LOCAL_PATH)/assets/,$(call find-subdir-assets,$(LOCAL_PATH)/assets))
-asset_target := $(HOST_COMMON_OUT_ROOT)/sim-assets/simulator$(COMMON_PACKAGE_SUFFIX)
-$(asset_target): PRIVATE_ASSET_ROOT := $(LOCAL_PATH)/assets
-
-$(asset_target) : $(asset_files) $(AAPT)
-	@echo host Package $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) $(AAPT) package -u -A $(PRIVATE_ASSET_ROOT) -F $@
-
-$(LOCAL_INSTALLED_MODULE): | $(asset_target)
-
-ALL_DEFAULT_INSTALLED_MODULES += $(asset_target)
-
-endif # $(TARGET_SIMULATOR) == true
diff --git a/simulator/app/AssetStream.h b/simulator/app/AssetStream.h
deleted file mode 100644
index 0ab2d12..0000000
--- a/simulator/app/AssetStream.h
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Provide a wxInputStream subclass based on the Android Asset class.
-// This is necessary because some wxWidgets functions require either a
-// filename or a wxInputStream (e.g. wxImage).
-//
-#ifndef _SIM_ASSETSTREAM_H
-#define _SIM_ASSETSTREAM_H
-
-#include "wx/stream.h"
-#include <utils/Asset.h>
-
-/*
- * There is no sample code or concrete documentation about providing
- * input streams, but it seems straightforward.  The PNG loading code
- * uses the following:
- *  OnSysTell()
- *  OnSysSeek()
- *  Read()
- *
- * The AssetStream takes ownership of the Asset.
- */
-class AssetStream : public wxInputStream {
-public:
-    AssetStream(android::Asset* pAsset)
-        : mpAsset(pAsset)
-        {}
-    virtual ~AssetStream(void) {
-        delete mpAsset;
-    }
-
-    virtual wxFileOffset GetLength() const {
-        //printf("## GetLength --> %ld\n", (long) mpAsset->getLength());
-        return mpAsset->getLength();
-    }
-    virtual size_t GetSize() const {
-        //printf("## GetSize --> %ld\n", (long) mpAsset->getLength());
-        return mpAsset->getLength();
-    }
-    virtual bool IsSeekable() const { return true; }
-
-    virtual bool Eof() const {
-        //printf("## Eof\n");
-        return (mpAsset->seek(0, SEEK_CUR) == mpAsset->getLength());
-    }
-
-    virtual bool CanRead() const {
-        //printf("## CanRead\n");
-        return !Eof();
-    }
-
-    virtual wxInputStream& Read(void* buffer, size_t size) {
-        OnSysRead(buffer, size);
-
-        return *this;
-    }
-
-protected:
-    /* read data, return number of bytes or 0 if EOF reached */
-    virtual size_t OnSysRead(void* buffer, size_t size) {
-        ssize_t actual = mpAsset->read(buffer, size);
-        if (actual < 0) {
-            // TODO: flag error
-            actual = 0;
-        }
-        //printf("## OnSysRead(%p %u) --> %d\n", buffer, size, actual);
-        return actual;
-    }
-
-    /* seek, using wxWidgets-defined values for "whence" */
-    virtual wxFileOffset OnSysSeek(wxFileOffset seek, wxSeekMode mode) {
-        int whence;
-        off_t newPosn;
-
-        if (mode == wxFromStart)
-            whence = SEEK_SET;
-        else if (mode == wxFromEnd)
-            whence = SEEK_END;
-        else
-            whence = SEEK_CUR;
-        newPosn = mpAsset->seek(seek, whence);
-        //printf("## OnSysSeek(%ld %d) --> %ld\n",
-        //    (long) seek, mode, (long) newPosn);
-        if (newPosn == (off_t) -1)
-            return wxInvalidOffset;
-        else
-            return newPosn;
-    }
-
-    virtual wxFileOffset OnSysTell() const {
-        //printf("## OnSysTell() --> %ld\n", (long) mpAsset->seek(0, SEEK_CUR));
-        return mpAsset->seek(0, SEEK_CUR);
-    }
-
-private:
-    android::Asset*     mpAsset;
-
-    DECLARE_NO_COPY_CLASS(AssetStream);     // private copy-ctor and op=
-};
-
-#endif // _SIM_ASSETSTREAM_H
diff --git a/simulator/app/DeviceManager.cpp b/simulator/app/DeviceManager.cpp
deleted file mode 100644
index c387d3a..0000000
--- a/simulator/app/DeviceManager.cpp
+++ /dev/null
@@ -1,1220 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Management of the simulated device.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"
-
-#include "DeviceManager.h"
-#include "MyApp.h"
-#include "DeviceWindow.h"
-#include "LogWindow.h"
-#include "UserEvent.h"
-#include "UserEventMessage.h"
-
-#include "SimRuntime.h"
-#include "utils.h"
-
-#include <unistd.h>
-#include <signal.h>
-#include <errno.h>
-
-#if !defined(SIGKILL)      // doesn't exist in MinGW
-# if defined(SIGBREAK)
-#  define SIGKILL   SIGBREAK        // intended for Ctrl-Break
-# else
-#  define SIGKILL   SIGABRT
-# endif
-#endif
-
-
-/*
- * Constructor.
- */
-DeviceManager::DeviceManager(void)
-    : mThread(NULL), mDisplay(NULL), mNumDisplays(0), mKeyMap(NULL),
-      mpStatusWindow(NULL)
-{
-    //printf("--- DeviceManager constructor\n");
-}
-
-/*
- * Destructor.  Snuff the thread if it's still kicking.
- */
-DeviceManager::~DeviceManager(void)
-{
-    //printf("--- DeviceManager destructor\n");
-
-    if (mThread != NULL && mThread->IsRunning()) {
-        mThread->KillChildProcesses();
-    }
-    if (mThread != NULL) {
-        wxThread::ExitCode code;
-
-        printf("Sim: Waiting for old runtime thread..."); fflush(stdout);
-        code = mThread->Wait();        // join the old thread
-        printf("done (code=%ld)\n", (long) code);
-    }
-    delete mThread;
-    mThread = NULL;
-
-    delete[] mDisplay;
-    free((void*)mKeyMap);
-}
-
-/*
- * Initialize the device configuration.
- *
- * "statusWindow" is where message boxes with failure messages go, usually
- * the main frame.
- */
-bool DeviceManager::Init(int numDisplays, wxWindow* statusWindow)
-{
-    //if (IsRunning()) {
-    //    fprintf(stderr, "ERROR: tried to Configure device while running\n");
-    //    return false;
-    //}
-    assert(mDisplay == NULL);
-    assert(numDisplays > 0);
-
-    //if (mDisplay != NULL)
-    //     delete[] mDisplay;
-
-    mDisplay = new Display[numDisplays];
-    mNumDisplays = numDisplays;
-
-    mpStatusWindow = statusWindow;
-
-    return true;
-}
-
-/*
- * Have we been initialized already?
- */
-bool DeviceManager::IsInitialized(void) const
-{
-    return (mDisplay != NULL);
-}
-
-#if 0
-/*
- * Return the Nth display.
- */
-int DeviceManager::GetShmemKey(int displayIndex)
-{
-    assert(displayIndex >= 0 && displayIndex < mNumDisplays);
-    return mDisplay[displayIndex].GetShmemKey();
-}
-#endif
-
-/*
- * Define mapping between the device's display and a wxWidgets window.
- */
-bool DeviceManager::SetDisplayConfig(int displayIndex, wxWindow* window,
-    int width, int height, android::PixelFormat format, int refresh)
-{
-    assert(displayIndex >= 0 && displayIndex < mNumDisplays);
-
-    if (!mDisplay[displayIndex].Create(displayIndex, window, width, height,
-        format, refresh))
-    {
-        fprintf(stderr, "Sim: ERROR: unable to configure display %d\n",
-            displayIndex);
-        return false;
-    } else {
-        printf("Sim: configured display %d (w=%d h=%d f=%d re=%d)\n",
-            displayIndex, width, height, format, refresh);
-        return true;
-    }
-}
-
-/*
- * Define the keyboard
- */
-bool DeviceManager::SetKeyboardConfig(const char *keymap) {
-    free((void*)mKeyMap);
-    mKeyMap = strdup(keymap);
-    return true;
-}
-
-/*
- * Called before the phone window dialog destroys itself.  The goal here
- * is to prevent the runtime thread from trying to draw after the phone
- * window has closed for business but before the device manager destructor
- * gets called.
- */
-void DeviceManager::WindowsClosing(void)
-{
-    int i;
-
-    for (i = 0; i < mNumDisplays; i++)
-        mDisplay[i].Uncreate();
-}
-
-/*
- * Launch a new runtime process.  If there is an existing device manager
- * thread, we assume that it is in the process of shutting down.
- */
-bool DeviceManager::StartRuntime(void)
-{
-    return DeviceManager::DeviceThread::LaunchProcess(mpStatusWindow);
-}
-
-/*
- * Start the runtime management thread when a runtime connects to us.  If
- * there is an existing thread, we assume that it is in the process of
- * shutting down.
- */
-bool DeviceManager::StartRuntime(android::Pipe* reader, android::Pipe* writer)
-{
-    if (mThread != NULL) {
-        wxThread::ExitCode code;
-
-        if (mThread->IsRunning()) {
-            fprintf(stderr,
-                "Sim: ERROR: start requested, but thread running\n");
-            return false;
-        }
-
-        // clean up old thread
-        printf("Sim: Waiting for old runtime thread..."); fflush(stdout);
-        code = mThread->Wait();        // join the old thread
-        printf("done (code=%ld)\n", (long) code);
-
-        delete mThread;
-        mThread = NULL;
-    }
-
-    assert(mpStatusWindow != NULL);
-    mThread = new DeviceThread(this, mpStatusWindow, reader, writer);
-    if (mThread->Create() != wxTHREAD_NO_ERROR) {
-        fprintf(stderr, "Sim: ERROR: can't create thread\n");
-        return false;
-    }
-    mThread->Run();
-
-    return true;
-}
-
-/*
- * Get the message stream.  Returns NULL if it doesn't exist.
- */
-android::MessageStream* DeviceManager::GetStream(void)
-{
-    if (!IsRunning()) {
-        fprintf(stderr, "Sim: ERROR: runtime thread not active\n");
-        return NULL;
-    }
-
-    assert(mThread != NULL);
-    android::MessageStream* pStream = mThread->GetStream();
-    assert(pStream != NULL);
-
-    if (!pStream->isReady()) {
-        fprintf(stderr, "Sim: NOTE: connection to runtime not ready\n");
-        return NULL;
-    }
-
-    return pStream;
-}
-
-/*
- * Stop the runtime, politely.
- *
- * We don't clean up the thread here, because it might not exit immediately.
- */
-bool DeviceManager::StopRuntime(void)
-{
-    android::MessageStream* pStream = GetStream();
-    if (pStream == NULL)
-        return false;
-
-    printf("Sim: Sending quit command\n");
-
-    android::Message msg;
-    msg.setCommand(android::Simulator::kCommandQuit, 0);
-    pStream->send(&msg);
-    return true;
-}
-
-/*
- * Kill the runtime as efficiently as possible.
- */
-void DeviceManager::KillRuntime(void)
-{
-    if (mThread != NULL && mThread->IsRunning())
-        mThread->KillChildProcesses();
-}
-
-#if 0
-/*
- * Check if the modified time is newer than mLastModified
- */
-bool DeviceManager::RefreshRuntime(void)
-{
-    return (IsRunning() && mThread->IsRuntimeNew());
-}
-
-/*
- * Tells the device manager that the user does not want to update
- * the runtime
- */
-void DeviceManager::UserCancelledRefresh(void)
-{
-    mThread->UpdateLastModified();
-}
-#endif
-
-/*
- * Send an event to the runtime.
- *
- * The events are defined in display_device.h.
- */
-void DeviceManager::SendKeyEvent(int32_t keyCode, bool down)
-{
-    android::MessageStream* pStream = GetStream();
-    if (pStream == NULL)
-        return;
-
-    int event = down ? android::Simulator::kCommandKeyDown :
-                       android::Simulator::kCommandKeyUp;
-
-    //printf("Sim: sending key-%s %d\n", down ? "down" : "up", keyCode);
-
-    android::Message msg;
-    msg.setCommand(event, keyCode);
-    pStream->send(&msg);
-}
-
-/*
- * Send a "touch screen" event to the runtime.
- *
- * "mode" can be "down" (we're pressing), "up" (we're lifting our finger
- * off) or "drag".
- */
-void DeviceManager::SendTouchEvent(android::Simulator::TouchMode mode,
-    int x, int y)
-{
-    android::MessageStream* pStream = GetStream();
-    if (pStream == NULL)
-        return;
-
-    //printf("Sim: sending touch-%d x=%d y=%d\n", (int) mode, x, y);
-
-    android::Message msg;
-    msg.setCommandExt(android::Simulator::kCommandTouch, mode, x, y);
-    pStream->send(&msg);
-}
-
-/*
- * The runtime has sent us a new frame of stuff to display.
- *
- * NOTE: we're still in the runtime management thread.  We have to pass the
- * bitmap through AddPendingEvent to get it over to the main thread.
- *
- * We have to make a copy of the data from the runtime; the easiest
- * way to do that is to convert it to a bitmap here.  However, X11 gets
- * all worked up about calls being made from multiple threads, so we're
- * better off just copying it into a buffer.
- *
- * Because we're decoupled from the runtime, there is a chance that we
- * could drop frames.  Buffering them up is probably worse, since it
- * creates the possibility that we could stall and run out of memory.
- * We could save a copy by handing the runtime a pointer to our buffer,
- * but then we'd have to mutex the runtime against the simulator window
- * Paint function.
- */
-void DeviceManager::ShowFrame(int displayIndex)
-{
-    assert(displayIndex >= 0 && displayIndex < mNumDisplays);
-
-    // copy the data to local storage and convert
-    mDisplay[displayIndex].CopyFromShared();
-
-    // create a user event and send it to the window
-    UserEvent uev(0, (void*) displayIndex);
-
-    wxWindow* pEventWindow = mDisplay[displayIndex].GetWindow();
-    if (pEventWindow != NULL) {
-        //printf("runtime has image, passing up\n");
-        pEventWindow->AddPendingEvent(uev);
-    } else {
-        fprintf(stderr, "NOTE: runtime has image, display not available\n");
-    }
-}
-
-void DeviceManager::Vibrate(int vibrateOn)
-{
-	((MyApp*)wxTheApp)->Vibrate(vibrateOn);
-}
-
-/*
- * Get the display data from the specified display.
- */
-wxBitmap* DeviceManager::GetImageData(int displayIndex)
-{
-    assert(displayIndex >= 0 && displayIndex < mNumDisplays);
-    return mDisplay[displayIndex].GetImageData();
-}
-
-/*
- * Send an event to all device windows
- */
-void DeviceManager::BroadcastEvent(UserEvent& userEvent) {
-    int numDisplays = GetNumDisplays();
-    for (int i = 0; i < numDisplays; i++) {
-        wxWindow* pEventWindow = mDisplay[i].GetWindow();
-        if (pEventWindow != NULL) {
-            pEventWindow->AddPendingEvent(userEvent);
-        }
-    }
-}
-
-
-/*
- * ===========================================================================
- *      DeviceManager::Display
- * ===========================================================================
- */
-
-/*
- * Fill out the various interesting fields based on the parameters.
- */
-bool DeviceManager::Display::Create(int displayNum, wxWindow* window,
-    int width, int height, android::PixelFormat format, int refresh)
-{
-    //printf("DeviceManager::Display constructor\n");
-
-    assert(window != NULL);
-    if (mImageData != NULL) {
-        assert(false);              // no re-init
-        return false;
-    }
-
-    mDisplayNum = displayNum;
-    mDisplayWindow = window;
-    mWidth = width;
-    mHeight = height;
-    mFormat = format;
-    mRefresh = refresh;
-
-    // use a fixed key for now
-    mShmemKey = GenerateKey(displayNum);
-    // allocate 24bpp for now
-    mpShmem = new android::Shmem;
-    if (!mpShmem->create(mShmemKey, width * height * 3, true))
-        return false;
-    //printf("--- CREATED shmem, key=0x%08x addr=%p\n",
-    //    mShmemKey, mpShmem->getAddr());
-
-    mImageData = new unsigned char[width * height * 3];
-    if (mImageData == NULL)
-        return false;
-
-    return true;
-}
-
-/*
- * The UI components are starting to shut down.  We need to do away with
- * our wxWindow pointer so that the runtime management thread doesn't try
- * to send it display update events.
- *
- * We also need to let go of our side of the shared memory, because a
- * new DeviceManager may get started up before our destructor gets called,
- * and we may be re-using the key.
- */
-void DeviceManager::Display::Uncreate(void)
-{
-    wxMutexLocker locker(mImageDataLock);
-
-    //printf("--- Uncreate\n");
-
-    mDisplayWindow = NULL;
-
-    // the "locker" mutex keeps this from hosing CopyFromShared()
-    if (mpShmem != NULL) {
-        //printf("--- DELETING shmem, addr=%p\n", mpShmem->getAddr());
-        delete mpShmem;
-        mpShmem = NULL;
-    }
-}
-
-/*
- * Make a local copy of the image data.  The UI grabs this data from a
- * different thread, so we have to mutex it.
- */
-void DeviceManager::Display::CopyFromShared(void)
-{
-    wxMutexLocker locker(mImageDataLock);
-
-    if (mpShmem == NULL) {
-        //printf("Sim: SKIP CopyFromShared\n");
-        return;
-    }
-
-    //printf("Display %d: copying data from %p to %p\n",
-    //    mDisplayNum, mpShmem->getAddr(), mImageData);
-
-    /* data is always 24bpp RGB */
-    mpShmem->lock();        // avoid tearing
-    memcpy(mImageData, mpShmem->getAddr(), mWidth * mHeight * 3);
-    mpShmem->unlock();
-}
-
-/*
- * Get the image data in the form of a newly-allocated bitmap.
- *
- * This MUST be called from the UI thread.  Creating wxBitmaps in the
- * runtime management thread will cause X11 failures (e.g.
- * "Xlib: unexpected async reply").
- */
-wxBitmap* DeviceManager::Display::GetImageData(void)
-{
-    wxMutexLocker locker(mImageDataLock);
-
-    assert(mImageData != NULL);
-
-    //printf("HEY: creating tmpImage, w=%d h=%d data=%p\n",
-    //    mWidth, mHeight, mImageData);
-
-    /* create a temporary wxImage; it does not own the data */
-    wxImage tmpImage(mWidth, mHeight, (unsigned char*) mImageData, true);
-
-    /* return a new bitmap with the converted-for-display data */
-    return new wxBitmap(tmpImage);
-}
-
-
-/*
- * ===========================================================================
- *      DeviceManager::DeviceThread
- * ===========================================================================
- */
-
-/*
- * Some notes on process management under Linux/Mac OS X:
- *
- * We want to put the runtime into its own process group.  That way we
- * can send SIGKILL to the entire group to guarantee that we kill it and
- * all of its children.  Simply killing the sim's direct descendant doesn't
- * do what we want.  If it's a debugger, we will just orphan the runtime
- * without killing it.  Even if the runtime is our child, the children of
- * the runtime might outlive it.
- *
- * We want to be able to run the child under GDB or Valgrind, both
- * of which take input from the tty.  They need to be in the "foreground"
- * process group.  We might be debugging or valgrinding the simulator,
- * or operating in a command-line-only "headless" mode, so in that case
- * the sim front-end should actually be in the foreground group.
- *
- * Putting the runtime in the background group means it can't read input
- * from the tty (not an issue) and will generate SIGTTOU signals when it
- * writes output to the tty (easy to ignore).  The trick, then, is to
- * have the simulator and gdb/valgrind in the foreground pgrp while the
- * runtime itself is in a different group.  This group needs to be known
- * to the simulator so that it can send signals to the appropriate place.
- *
- * The solution is to have the runtime process change its process group
- * after it starts but before it creates any new processes, and then send
- * the process group ID back to the simulator.  The sim can then send
- * signals to the pgrp to ensure that we don't end up with zombies.  Any
- * "pre-launch" processes, like GDB, stay in the sim's pgrp.  This also
- * allows a consistent API for platforms that don't have fork/exec
- * (e.g. MinGW).
- *
- * This doesn't help us with interactive valgrind (e.g. --db-attach=yes),
- * because valgrind is an LD_PRELOAD shared library rather than a
- * separate process.  For that, we actually need to use termios(3) to
- * change the terminal's pgrp, or the interactive stuff just doesn't work.
- * We don't want to do that every time or attempting to debug the simulator
- * front-end will have difficulties.
- *
- * Making this even more entertaining is the fact that the simulator
- * front-end could itself be launched in the background.  It's essential
- * that we be careful about assigning a process group to the foreground,
- * and that we don't restore ourselves unless we were in the foreground to
- * begin with.
- *
- *
- * Some notes on process management under Windows (Cygwin, MinGW):
- *
- * Signals cannot be caught or ignored under MinGW.  All signals are fatal.
- *
- * Signals can be ignored under Cygwin, but not caught.
- *
- * Windows has some process group stuff (e.g. CREATE_NEW_PROCESS_GROUP flag
- * and GenerateConsoleCtrlEvent()).  Need to explore.
- *
- *
- * UPDATE: we've abandoned Mac OS and MinGW, so we now launch the runtime in
- * a separate xterm.  This avoids all tty work on our side.  We still need
- * to learn the pgrp from the child during the initial communication
- * handshake so we can do necessary cleanup.
- */
-
-
-/*
- * Convert a space-delimited string into an argument vector.
- *
- * "arg" is the current arg offset.
- */
-static int stringToArgv(char* mangle, const char** argv, int arg, int maxArgs)
-{
-    bool first = true;
-
-    while (*mangle != '\0') {
-        assert(arg < maxArgs);
-        if (first) {
-            argv[arg++] = mangle;
-            first = false;
-        }
-        if (*mangle == ' ') {
-            *mangle = '\0';
-            first = true;
-        }
-        mangle++;
-    }
-
-    return arg;
-}
-
-/*
- * Launch the runtime process in its own terminal window.  Start by setting
- * up the argument vector to the runtime process.
- *
- * The last entry in the vector will be a NULL pointer.
- *
- * This is awkward and annoying because the wxWidgets strings are current
- * configured for UNICODE.
- */
-/*static*/ bool DeviceManager::DeviceThread::LaunchProcess(wxWindow* statusWindow)
-{
-    static const char* kLaunchWrapper = "launch-wrapper";
-    const int kMaxArgs = 64;
-    Preferences* pPrefs;
-    wxString errMsg;
-    wxString runtimeExe;
-    wxString debuggerExe;
-	wxString debuggerScript;
-    wxString valgrinderExe;
-    wxString launchWrapperExe;
-    wxString launchWrapperArgs;
-    wxString javaAppName;
-    wxString termCmd;
-    wxString tmpStr;
-    char gammaVal[8];
-    //bool bval;
-    double dval;
-    bool result = false;
-    bool doDebug, doValgrind, doCheckJni, doEnableSound, doEnableFakeCamera;
-    const char** argv = NULL;
-    int arg;
-    wxCharBuffer runtimeExeTmp;
-    wxCharBuffer debuggerExeTmp;
-	wxCharBuffer debuggerScriptTmp;
-    wxCharBuffer javaAppNameTmp;
-    wxCharBuffer valgrinderExeTmp;
-    wxCharBuffer termCmdTmp;
-    wxCharBuffer launchWrapperExeTmp;
-    wxCharBuffer launchWrapperArgsTmp;
-    
-    pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    if (pPrefs == NULL) {
-        errMsg = wxT("Preferences were not loaded.");
-        goto bail;
-    }
-
-    /*
-     * Set environment variables.  This stuff should be passed through as
-     * arguments, but the runtime binary currently has a disconnect
-     * between main() and the VM initilization.
-     *
-     * TODO: remove this in favor of system properties
-     */
-#if 0
-    // TODO: restore this
-    doCheckJni = false;
-    pPrefs->GetBool("check-jni", &doCheckJni);
-#endif
-
-    tmpStr.Empty();
-    pPrefs->GetString("ld-assume-kernel", /*ref*/ tmpStr);
-    if (tmpStr.IsEmpty()) {
-        unsetenv("LD_ASSUME_KERNEL");
-    } else {
-        setenv("LD_ASSUME_KERNEL", tmpStr.ToAscii(), 1);
-    }
-
-    doEnableSound = false; 
-    pPrefs->GetBool("enable-sound", &doEnableSound);
-    if (doEnableSound)
-        setenv("ANDROIDSOUND", "1", 1);
-
-    doEnableFakeCamera = false; 
-    pPrefs->GetBool("enable-fake-camera", &doEnableFakeCamera);
-    if (doEnableFakeCamera)
-        setenv("ANDROIDFAKECAMERA", "1", 1);
-
-    /*
-     * Set the Dalvik bootstrap class path.  Normally this is set by "init".
-     */
-    setenv("BOOTCLASSPATH",
-        "/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar",
-        1);
-
-    /*
-     * Figure out where the "runtime" binary lives.
-     */
-    runtimeExe = ((MyApp*)wxTheApp)->GetRuntimeExe();
-    assert(!runtimeExe.IsEmpty());
-
-    //UpdateLastModified();
-
-    /*
-     * Initialize argv.
-     */
-    argv = new const char*[kMaxArgs];
-    if (argv == NULL)
-        goto bail;
-    arg = 0;
-
-    /*
-     * We want to launch the runtime in its own terminal window so we don't
-     * have to fight over who gets access to the controlling tty.  We allow
-     * the user to specify the command they want to use to perform the
-     * launch.  Here we cut it into pieces for argv.
-     *
-     * To make life easier here, we require that the launch command be
-     * all one piece, i.e. it's not "xterm -e <stuff> -geom blah" with our
-     * stuff in the middle.
-     */
-    termCmd.Empty();
-    pPrefs->GetString("launch-command", /*ref*/ termCmd);
-    if (termCmd.IsEmpty()) {
-        fprintf(stderr, "Sim: WARNING: launch-command is empty\n");
-    } else {
-        termCmdTmp = termCmd.ToAscii();
-        char* mangle = strdup(termCmdTmp);
-        arg = stringToArgv(mangle, argv, arg, kMaxArgs);
-    }
-
-    /*
-     * The "launch-wrapper" binary lives in the same place as the runtime.
-     * This sets up LD_PRELOAD and some other environment variables.
-     */
-    int charIdx;
-
-    charIdx = runtimeExe.Find('/', true);
-    if (charIdx == -1) {
-        launchWrapperExe = wxString::FromAscii(kLaunchWrapper);
-    } else {
-        launchWrapperExe = runtimeExe.Mid(0, charIdx+1);
-        launchWrapperExe.Append(wxString::FromAscii(kLaunchWrapper));
-    }
-    printf("Sim launch wrapper: %s\n", (const char*)launchWrapperExe.ToAscii());
-
-    argv[arg++] = launchWrapperExeTmp = launchWrapperExe.ToAscii();
-
-    launchWrapperArgs.Empty();
-    pPrefs->GetString("launch-wrapper-args", /*ref*/ launchWrapperArgs);
-    if (!launchWrapperArgs.IsEmpty()) {
-        launchWrapperArgsTmp = launchWrapperArgs.ToAscii();
-        char* mangle = strdup(launchWrapperArgsTmp);
-        arg = stringToArgv(mangle, argv, arg, kMaxArgs);
-    }
-
-    /*
-     * If we're launching under GDB or valgrind, set that up.
-     */
-    doDebug = doValgrind = false;
-    pPrefs->GetBool("debug", &doDebug);
-    if (((MyApp*)wxTheApp)->GetDebuggerOption()) {
-        doDebug = true;
-    }
-	debuggerScript = ((MyApp*)wxTheApp)->GetDebuggerScript();
-
-    pPrefs->GetBool("valgrind", &doValgrind);
-    if (doDebug || doValgrind) {
-
-        pPrefs->GetString("debugger", /*ref*/ debuggerExe);
-        pPrefs->GetString("valgrinder", /*ref*/ valgrinderExe);
-
-        // check for empty or undefined preferences
-        if (doDebug && debuggerExe.IsEmpty()) {
-            errMsg = wxT("Debugger not defined.");
-            goto bail;
-        }
-        if (doValgrind && valgrinderExe.IsEmpty()) {
-            errMsg = wxT("Valgrinder not defined.");
-            goto bail;
-        }
-
-        if (doValgrind) {
-            argv[arg++] = valgrinderExeTmp = valgrinderExe.ToAscii();
-            //argv[arg++] = "--tool=callgrind";
-            argv[arg++] = "--tool=memcheck";
-            argv[arg++] = "--leak-check=yes";       // check for leaks too
-            argv[arg++] = "--leak-resolution=med";  // increase from 2 to 4
-            argv[arg++] = "--num-callers=8";        // reduce from 12 to 8
-            //argv[arg++] = "--show-reachable=yes";   // show still-reachable
-            if (doDebug) {
-                //mTerminalFollowsChild = true;   // interactive
-                argv[arg++] = "--db-attach=yes";
-            }
-            //mSlowExit = true;
-        } else /*doDebug*/ {
-            argv[arg++] = debuggerExeTmp = debuggerExe.ToAscii();
-			if (!debuggerScript.IsEmpty()) {
-				argv[arg++] = "-x";
-				argv[arg++] = debuggerScriptTmp = debuggerScript.ToAscii();
-			}
-            argv[arg++] = runtimeExeTmp = runtimeExe.ToAscii();
-            argv[arg++] = "--args";
-        }
-    }
-
-    /*
-     * Get runtime args.
-     */
-
-    argv[arg++] = runtimeExeTmp = (const char*) runtimeExe.ToAscii();
-
-    javaAppName = ((MyApp*)wxTheApp)->GetAutoRunApp();
-    if (javaAppName.IsEmpty()) {
-        if (!pPrefs->GetString("java-app-name", /*ref*/ javaAppName)) {
-            javaAppName = wxT("");
-        }
-    }
-
-    if (!javaAppName.IsEmpty())
-    {
-        argv[arg++] = "-j";
-        argv[arg++] = javaAppNameTmp = (const char*) javaAppName.ToAscii();
-    }
-
-    if (pPrefs->GetDouble("gamma", &dval) && dval != 1.0) {
-        snprintf(gammaVal, sizeof(gammaVal), "%.3f", dval);
-        argv[arg++] = "-g";
-        argv[arg++] = gammaVal;
-    }
-
-    /* finish arg set */
-    argv[arg++] = NULL;
-
-    assert(arg <= kMaxArgs);
-
-#if 1
-    printf("ARGS:\n");
-    for (int i = 0; i < arg; i++)
-        printf(" %d: '%s'\n", i, argv[i]);
-#endif
-
-    if (fork() == 0) {
-        execvp(argv[0], (char* const*) argv);
-        fprintf(stderr, "execvp '%s' failed: %s\n", argv[0], strerror(errno));
-        exit(1);
-    }
-
-    /*
-     * We assume success; if it didn't succeed we'll just sort of hang
-     * out waiting for a connection.  There are ways to fix this (create
-     * a non-close-on-exec pipe and watch to see if the other side closes),
-     * but at this stage it's not worthwhile.
-     */
-    result = true;
-
-    tmpStr = wxT("=== launched ");
-    tmpStr += runtimeExe;
-    LogWindow::PostLogMsg(tmpStr);
-
-    assert(errMsg.IsEmpty());
-
-bail:
-    if (!errMsg.IsEmpty()) {
-        assert(result == false);
-
-        UserEventMessage* pUem = new UserEventMessage;
-        pUem->CreateErrorMessage(errMsg);
-
-        UserEvent uev(0, (void*) pUem);
-
-        assert(statusWindow != NULL);
-        statusWindow->AddPendingEvent(uev);
-    }
-    delete[] argv;
-    return result;
-}
-
-/*
- * This is the entry point for the device thread.  The thread launches the
- * runtime process and monitors it.  When the runtime exits, the thread
- * exits.
- *
- * Because this isn't running in the UI thread, any user interaction has
- * to be channeled through "user events" to the appropriate window.
- */
-void* DeviceManager::DeviceThread::Entry(void)
-{
-    //android::MessageStream stream;
-    android::Message msg;
-    wxString errMsg;
-    char statusBuf[64] = "(no status)";
-    int result = 1;
-
-    /* print this so we can make sense of log messages */
-    LOG(LOG_DEBUG, "", "Sim: device management thread starting (pid=%d)\n",
-        getpid());
-
-    assert(mReader != NULL && mWriter != NULL);
-
-    /*
-     * Tell the main thread that we're running.  If something fails here,
-     * we'll send them a "stopped running" immediately afterward.
-     */
-    {
-        UserEventMessage* pUem = new UserEventMessage;
-        pUem->CreateRuntimeStarted();
-
-        UserEvent uev(0, (void*) pUem);
-
-        assert(mpStatusWindow != NULL);
-        mpStatusWindow->AddPendingEvent(uev);
-    }
-    LogWindow::PostLogMsg(
-            "==============================================================");
-    LogWindow::PostLogMsg("=== runtime starting");
-
-    /*
-     * Establish contact with runtime.
-     */
-    if (!mStream.init(mReader, mWriter, true)) {
-        errMsg = wxT("ERROR: Unable to establish communication with runtime.\n");
-        goto bail;
-    }
-
-    /*
-     * Tell the runtime to put itself into a new process group and set
-     * itself up as the foreground process.  The latter is only really
-     * necessary to make valgrind+gdb work.
-     */
-    msg.setCommand(android::Simulator::kCommandNewPGroup, true);
-    mStream.send(&msg);
-
-    printf("Sim: Sending hardware configuration\n");
-
-    /*
-     * Send display config.
-     *
-     * Right now we're just shipping a big binary blob over.
-     */
-    assert(android::Simulator::kValuesPerDisplay >= 5);
-    int buf[1 + 1 + mpDeviceManager->GetNumDisplays() *
-                    android::Simulator::kValuesPerDisplay];
-    buf[0] = android::Simulator::kDisplayConfigMagic;
-    buf[1] = mpDeviceManager->GetNumDisplays();
-    for (int i = 0; i < mpDeviceManager->GetNumDisplays(); i++) {
-        DeviceManager::Display* pDisplay = mpDeviceManager->GetDisplay(i);
-        int* pBuf = &buf[2 + android::Simulator::kValuesPerDisplay * i];
-
-        pBuf[0] = pDisplay->GetWidth();
-        pBuf[1] = pDisplay->GetHeight();
-        pBuf[2] = pDisplay->GetFormat();
-        pBuf[3] = pDisplay->GetRefresh();
-        pBuf[4] = pDisplay->GetShmemKey();
-    }
-    msg.setRaw((const unsigned char*)buf, sizeof(buf),
-        android::Message::kCleanupNoDelete);
-    mStream.send(&msg);
-
-    /*
-     * Send other hardware config.
-     *
-     * Examples:
-     * - Available input devices.
-     * - Set of buttons on device.
-     * - External devices (Bluetooth, etc).
-     * - Initial mode (e.g. "flipped open" vs. "flipped closed").
-     */
-
-    msg.setConfig("keycharmap", mpDeviceManager->GetKeyMap());
-    mStream.send(&msg);
-
-    /*
-     * Done with config.
-     */
-    msg.setCommand(android::Simulator::kCommandConfigDone, 0);
-    mStream.send(&msg);
-
-    /*
-     * Sit forever, waiting for messages from the runtime process.
-     */
-    while (1) {
-        if (!mStream.recv(&msg, true)) {
-            /*
-             * The read failed.  This usually means the child has died.
-             */
-            printf("Sim: runtime process has probably died\n");
-            break;
-        }
-
-        if (msg.getType() == android::Message::kTypeCommand) {
-            int cmd, arg;
-
-            if (!msg.getCommand(&cmd, &arg)) {
-                fprintf(stderr, "Sim: Warning: failed unpacking command\n");
-                /* keep going? */
-            } else {
-                switch (cmd) {
-                case android::Simulator::kCommandNewPGroupCreated:
-                    // runtime has moved into a separate process group
-                    // (not expected for external)
-                    printf("Sim: child says it's now in pgrp %d\n", arg);
-                    mRuntimeProcessGroup = arg;
-                    break;
-                case android::Simulator::kCommandRuntimeReady:
-                    // sim is up and running, do late init
-                    break;
-                case android::Simulator::kCommandUpdateDisplay:
-                    // new frame of graphics is ready
-                    //printf("RCVD display update %d\n", arg);
-                    mpDeviceManager->ShowFrame(arg);
-                    break;
-                case android::Simulator::kCommandVibrate:
-                    // vibrator on or off
-                    //printf("RCVD vibrator update %d\n", arg);
-                    mpDeviceManager->Vibrate(arg);
-                    break;
-                default:
-                    printf("Sim: got unknown command %d/%d\n", cmd, arg);
-                    break;
-                }
-            }
-        } else if (msg.getType() == android::Message::kTypeLogBundle) {
-            android_LogBundle bundle;
-
-            if (!msg.getLogBundle(&bundle)) {
-                fprintf(stderr, "Sim: Warning: failed unpacking logBundle\n");
-                /* keep going? */
-            } else {
-                LogWindow::PostLogMsg(&bundle);
-            }
-        } else {
-            printf("Sim: got unknown message type=%d\n", msg.getType());
-        }
-    }
-
-    result = 0;
-
-bail:
-    printf("Sim: DeviceManager thread preparing to exit\n");
-
-    /* kill the comm channel; should encourage runtime to die */
-    mStream.close();
-    delete mReader;
-    delete mWriter;
-    mReader = mWriter = NULL;
-
-    /*
-     * We never really did get a "friendly death" working, so just slam
-     * the thing if we have the process group.
-     */
-    if (mRuntimeProcessGroup != 0) {
-        /* kill the group, not our immediate child */
-        printf("Sim: killing pgrp %d\n", (int) mRuntimeProcessGroup);
-        kill(-mRuntimeProcessGroup, 9);
-    }
-
-    if (!errMsg.IsEmpty()) {
-        UserEventMessage* pUem = new UserEventMessage;
-        pUem->CreateErrorMessage(errMsg);
-
-        UserEvent uev(0, (void*) pUem);
-        mpStatusWindow->AddPendingEvent(uev);
-    }
-
-    /* notify the main window that the runtime has stopped */
-    {
-        UserEventMessage* pUem = new UserEventMessage;
-        pUem->CreateRuntimeStopped();
-
-        UserEvent uev(0, (void*) pUem);
-        mpStatusWindow->AddPendingEvent(uev);
-    }
-
-    /* show exit status in log file */
-    wxString exitMsg;
-    exitMsg.Printf(wxT("=== runtime exiting - %s"), statusBuf);
-    LogWindow::PostLogMsg(exitMsg);
-    LogWindow::PostLogMsg(
-        "==============================================================\n");
-
-    /*
-     * Reset system properties for future runs.
-     */
-    ResetProperties();
-
-    return (void*) result;
-}
-
-
-/*
- * Wait for a little bit to see if the thread will exit.
- *
- * "delay" is in 0.1s increments.
- */
-void DeviceManager::DeviceThread::WaitForDeath(int delay)
-{
-    const int kDelayUnit = 100000;
-    int i;
-
-    for (i = 0; i < delay; i++) {
-        if (!IsRunning())
-            return;
-        usleep(kDelayUnit);
-    }
-}
-
-
-/*
- * Kill the runtime process.  The goal is to cause our local runtime
- * management thread to exit.  If it doesn't, this will kill the thread
- * before it returns.
- */
-void DeviceManager::DeviceThread::KillChildProcesses(void)
-{
-    if (!this->IsRunning())
-        return;
-
-    /* clear "slow exit" flag -- we're forcefully killing this thing */
-    //this->mSlowExit = false;
-
-    /*
-     * Use the ChildProcess object in the thread to send signals.  There's
-     * a risk that the DeviceThread will exit and destroy the object while
-     * we're using it.  Using a mutex here gets a little awkward because
-     * we can't put it in DeviceThread.  It's easier to make a copy of
-     * ChildProcess and operate on the copy, but we have to do that very
-     * carefully to avoid interfering with the communcation pipes.
-     *
-     * For now, we just hope for the best.  FIX this someday.
-     *
-     * We broadcast to the process group, which will ordinarily kill
-     * everything.  If we're running with valgrind+GDB everything is in our
-     * pgrp and we can't do the broadcast; if GDB alone, then only GDB is
-     * in our pgrp, so the broadcast will hit everything except it.  We
-     * hit the group and then hit our child for good measure.
-     */
-    if (mRuntimeProcessGroup != 0) {
-        /* kill the group, not our immediate child */
-        printf("Sim: killing pgrp %d\n", (int) mRuntimeProcessGroup);
-        kill(-mRuntimeProcessGroup, 9);
-        WaitForDeath(15);
-    }
-
-    /*
-     * Close the communication channel.  This should cause our thread
-     * to snap out of its blocking read and the runtime thread to bail
-     * out the next time it tries to interact with us.  We should only
-     * get here if somebody other than our direct descendant has the
-     * comm channel open and our broadcast didn't work, which should
-     * no longer be possible.
-     */
-    if (this->IsRunning()) {
-        printf("Sim: killing comm channel\n");
-        mStream.close();
-        delete mReader;
-        delete mWriter;
-        mReader = mWriter = NULL;
-        WaitForDeath(15);
-    }
-
-    /*
-     * At this point it's possible that our DeviceThread is just wedged.
-     * Kill it.
-     *
-     * Using the thread Kill() function can orphan resources, including
-     * locks and semaphores.  There is some risk that the simulator will
-     * be hosed after this.
-     */
-    if (this->IsRunning()) {
-        fprintf(stderr, "Sim: WARNING: killing runtime thread (%ld)\n",
-            (long) GetId());
-        this->Kill();
-        WaitForDeath(15);
-    }
-
-    /*
-     * Now I'm scared.
-     */
-    if (this->IsRunning()) {
-        fprintf(stderr, "Sim: thread won't die!\n");
-    }
-}
-
-
-/*
- * Configure system properties for the simulated device.
- *
- * Property requests can arrive *before* the full connection to the
- * simulator is established, so we want to reset these during cleanup.
- */
-void DeviceManager::DeviceThread::ResetProperties(void)
-{
-	wxWindow* mainFrame = ((MyApp*)wxTheApp)->GetMainFrame();
-    PropertyServer* props = ((MainFrame*)mainFrame)->GetPropertyServer();
-
-    props->ClearProperties();
-    props->SetDefaultProperties();
-}
-
-
-#if 0
-/*
- * Return true if the executable found is newer than
- * what is currently running
- */
-bool DeviceManager::DeviceThread::IsRuntimeNew(void)
-{
-    if (mLastModified == 0) {
-        /*
-         * Haven't called UpdateLastModified yet, or called it but
-         * couldn't stat() the executable.
-         */
-        return false;
-    }
-
-    struct stat status;
-    if (stat(mRuntimeExe.ToAscii(), &status) == 0) {
-        return (status.st_mtime > mLastModified);
-    } else {
-        // doesn't exist, so it can't be newer
-        fprintf(stderr, "Sim: unable to stat '%s': %s\n",
-            (const char*) mRuntimeExe.ToAscii(), strerror(errno));
-        return false;
-    }
-}
-
-/*
- * Updates mLastModified to reflect the current executables mtime
- */
-void DeviceManager::DeviceThread::UpdateLastModified(void)
-{
-    struct stat status;
-    if (stat(mRuntimeExe.ToAscii(), &status) == 0) {
-        mLastModified = status.st_mtime;
-    } else {
-        fprintf(stderr, "Sim: unable to stat '%s': %s\n",
-            (const char*) mRuntimeExe.ToAscii(), strerror(errno));
-        mLastModified = 0;
-    }
-}
-#endif
-
diff --git a/simulator/app/DeviceManager.h b/simulator/app/DeviceManager.h
deleted file mode 100644
index e3d8af3..0000000
--- a/simulator/app/DeviceManager.h
+++ /dev/null
@@ -1,284 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Class that manages the simulated device.
-//
-#ifndef _SIM_DEVICE_MANAGER_H
-#define _SIM_DEVICE_MANAGER_H
-
-#include "UserEvent.h"
-
-#include "Shmem.h"
-#include "MessageStream.h"
-#include "SimRuntime.h"
-
-#include "ui/PixelFormat.h"
-#include "ui/KeycodeLabels.h"
-
-#include <sys/stat.h>
-
-/*
- * Manage the simulated device.  This includes starting/stopping as well
- * as sending messages to it and receiving events from it.
- *
- * The object may span multiple invocations of a specific device.  If
- * the simulator is reconfigured to use a device with different
- * characteristics, the object should be destroyed and recreated (which
- * guarantees that the runtime is restarted).
- */
-class DeviceManager {
-public:
-    DeviceManager(void);
-    virtual ~DeviceManager(void);
-
-    /*
-     * Initialize the object.  Call this once.
-     *
-     * "numDisplays" is the number of displays that the simulated hardware
-     * supports.  The displays themselves are configured with separate calls.
-     *
-     * "statusWindow" should be the main frame.  Messages indicating runtime
-     * startup/shutdown are sent, as well as error messages that should be
-     * displayed in message boxes.
-     */
-    bool Init(int numDisplays, wxWindow* statusWindow);
-    bool IsInitialized(void) const;
-
-    /*
-     * Tell the device manager that the windows used to display its output
-     * are closing down.
-     */
-    void WindowsClosing(void);
-
-    /*
-     * "displayWindow" is the window to notify when a new frame of graphics
-     * data is available.  This can be set independently for each display.
-     */
-    bool SetDisplayConfig(int displayIndex, wxWindow* window,
-        int width, int height, android::PixelFormat format, int refresh);
-
-    /*
-     * set the key map
-     */
-    bool SetKeyboardConfig(const char *keymap);
-
-    /*
-     * Return the number of displays we're configured for.
-     */
-    int GetNumDisplays(void) const { return mNumDisplays; }
-
-    /*
-     * Return the shmem key for the Nth display.
-     */
-    //int GetShmemKey(int displayIndex);
-
-    /*
-     * Is the runtime process still running?
-     */
-    bool IsRunning(void) const {
-        if (mThread != NULL)
-            return mThread->IsRunning();
-        return false;
-    }
-    bool IsKillable(void) const {
-        return true;
-    }
-
-    // (Re-)configure the device, e.g. when #of displays changes because
-    // a different phone model has been selected.  Call this before doing
-    // any display-specific setup.  DO NOT call this if the runtime is active.
-//    void Configure(int numDisplays);
-
-    // start the runtime, acting as parent
-    bool StartRuntime(void);
-    // start the runtime, acting as peer
-    bool StartRuntime(android::Pipe* reader, android::Pipe* writer);
-    // politely ask the runtime to stop
-    bool StopRuntime(void);
-    // kill the runtime with extreme prejudice
-    void KillRuntime(void);
-
-#if 0
-    // Returns if the executable is new
-    bool RefreshRuntime(void);
-    // Update the time of the current runtime because the user cancelled a
-    // refresh
-    void UserCancelledRefresh(void);
-#endif
-
-    // send a key-up or key-down event to the runtime
-    void SendKeyEvent(int32_t keyCode, bool down);
-    // send touch-screen events
-    void SendTouchEvent(android::Simulator::TouchMode mode, int x, int y);
-
-    wxBitmap* GetImageData(int displayIndex);
-    
-    void BroadcastEvent(UserEvent &userEvent);
-
-private:
-    /*
-     * Threads in wxWidgets use sub-classing to define interfaces and
-     * entry points.  We use this to create the thread that interacts
-     * with the runtime.
-     *
-     * The "reader" and "writer" arguments may be NULL.  If they are,
-     * we will launch the runtime ourselves.  If not, we will use them
-     * to speak with an externally-launched runtime process.  The thread
-     * will own the pipes, shutting them down when it exits.
-     */
-    class DeviceThread : public wxThread {
-    public:
-        DeviceThread(DeviceManager* pDM, wxWindow* pStatusWindow,
-            android::Pipe* reader, android::Pipe* writer)
-            : wxThread(wxTHREAD_JOINABLE), mpStatusWindow(pStatusWindow),
-              mReader(reader), mWriter(writer),
-              mpDeviceManager(pDM), /*mTerminalFollowsChild(false),
-              mSlowExit(false), mIsExternal(false), mLastModified(0),*/
-              mRuntimeProcessGroup(0)
-            {}
-        virtual ~DeviceThread(void) {
-            delete mReader;
-            delete mWriter;
-        }
-
-        /* thread entry point */
-        virtual void* Entry(void);
-
-        // wxThread class supplies an IsRunning() method
-
-        /*
-         * This kills the runtime process to force this thread to exit.
-         * If the thread doesn't exit after a short period of time, it
-         * is forcibly terminated.
-         */
-        void KillChildProcesses(void);
-
-#if 0
-        /*
-         * Return if the runtime executable is new
-         */
-        bool IsRuntimeNew(void);
-
-        void UpdateLastModified(void);
-#endif
-
-        android::MessageStream* GetStream(void) { return &mStream; }
-
-        static bool LaunchProcess(wxWindow* statusWindow);
-
-    private:
-        void WaitForDeath(int delay);
-        void ResetProperties(void);
-
-        android::MessageStream  mStream;
-        wxWindow*       mpStatusWindow;
-        android::Pipe*  mReader;
-        android::Pipe*  mWriter;
-        DeviceManager*  mpDeviceManager;
-        pid_t           mRuntimeProcessGroup;
-        //time_t          mLastModified;
-        wxString        mRuntimeExe;
-    };
-
-    friend class DeviceThread;
-
-    /*
-     * We need one of these for each display on the device.  Most devices
-     * only have one, but some flip phones have two.
-     */
-    class Display {
-    public:
-        Display(void)
-            : mDisplayWindow(NULL), mpShmem(NULL), mShmemKey(0),
-              mImageData(NULL), mDisplayNum(-1), mWidth(-1), mHeight(-1),
-              mFormat(android::PIXEL_FORMAT_UNKNOWN), mRefresh(0)
-            {}
-        ~Display() {
-            delete mpShmem;
-            delete[] mImageData;
-        }
-
-        /* initialize goodies */
-        bool Create(int displayNum, wxWindow* window, int width, int height,
-            android::PixelFormat format, int refresh);
-
-        /* call this if we're shutting down soon */
-        void Uncreate(void);
-
-        /* copy & convert data from shared memory */
-        void CopyFromShared(void);
-
-        /* get image data in the form of a 24bpp bitmap */
-        wxBitmap* GetImageData(void);
-
-        /* get a pointer to our display window */
-        wxWindow* GetWindow(void) const { return mDisplayWindow; }
-
-        /* get our shared memory key */
-        int GetShmemKey(void) const { return mShmemKey; }
-
-        int GetWidth(void) const { return mWidth; }
-        int GetHeight(void) const { return mHeight; }
-        android::PixelFormat GetFormat(void) const { return mFormat; }
-        int GetRefresh(void) const { return mRefresh; }
-
-    private:
-        int GenerateKey(int displayNum) {
-            return 0x41544d00 | displayNum;
-        }
-
-        // control access to image data shared between runtime mgr and UI
-        wxMutex         mImageDataLock;
-        // we send an event here when we get stuff to display
-        wxWindow*       mDisplayWindow;
-
-        // shared memory segment
-        android::Shmem* mpShmem;
-        int             mShmemKey;
-
-        // local copy of data from shared mem, converted to 24bpp
-        unsigned char*  mImageData;
-
-        // mainly for debugging -- which display are we?
-        int             mDisplayNum;
-
-        // display characteristics
-        int             mWidth;
-        int             mHeight;
-        android::PixelFormat mFormat;
-        int             mRefresh;       // fps
-    };
-
-    Display* GetDisplay(int dispNum) { return &mDisplay[dispNum]; }
-
-    const char* GetKeyMap() { return mKeyMap ? mKeyMap : "qwerty"; }
-
-    void ShowFrame(int displayIndex);
-
-    void Vibrate(int vibrateOn);
-
-    // get the message stream from the device thread
-    android::MessageStream* GetStream(void);
-
-    // send a request to set the visible layers
-    void SendSetVisibleLayers(void);
-
-    // points at the runtime's thread (while it's running)
-    DeviceThread*   mThread;
-
-    // array of Displays, one per display on the device
-    Display*        mDisplay;
-    int             mNumDisplays;
-
-    // the key map
-    const char * mKeyMap;
-
-    // which graphics layers are visible?
-    int             mVisibleLayers;
-
-    // where to send status messages
-    wxWindow*       mpStatusWindow;
-
-};
-
-#endif // _SIM_DEVICE_MANAGER_H
diff --git a/simulator/app/DeviceWindow.cpp b/simulator/app/DeviceWindow.cpp
deleted file mode 100644
index a15b03b..0000000
--- a/simulator/app/DeviceWindow.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Displays output from the device.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"   // needed for Windows build
-#include "wx/dcbuffer.h"
-
-#include "AssetStream.h"
-#include "DeviceWindow.h"
-#include "MyApp.h"
-#include "Preferences.h"
-
-BEGIN_EVENT_TABLE(DeviceWindow, wxWindow)
-    EVT_SIZE(DeviceWindow::OnSize)
-    EVT_ERASE_BACKGROUND(DeviceWindow::OnErase)
-    EVT_PAINT(DeviceWindow::OnPaint)
-    EVT_KEY_DOWN(DeviceWindow::OnKeyDown)
-    EVT_KEY_UP(DeviceWindow::OnKeyUp)
-
-    EVT_LEFT_DOWN(DeviceWindow::OnMouseLeftDown)
-    EVT_LEFT_DCLICK(DeviceWindow::OnMouseLeftDown)
-    EVT_LEFT_UP(DeviceWindow::OnMouseLeftUp)
-    EVT_RIGHT_DOWN(DeviceWindow::OnMouseRightDown)
-    EVT_RIGHT_DCLICK(DeviceWindow::OnMouseRightDown)
-    EVT_RIGHT_UP(DeviceWindow::OnMouseRightUp)
-    EVT_MOTION(DeviceWindow::OnMouseMotion)
-
-    EVT_USER_EVENT(DeviceWindow::OnUserEvent)
-END_EVENT_TABLE()
-
-
-/*
- * Create a new DeviceWindow.  This should be a child of PhoneWindow.
- *
- * Note the DeviceManager may not be fully initialized yet.
- */
-DeviceWindow::DeviceWindow(wxWindow* parent, DeviceManager* pDM)
-    : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
-        wxNO_BORDER | wxWANTS_CHARS),
-      mpDeviceManager(pDM)
-{
-    //printf("DW: created (parent=%p DM=%p)\n", parent, pDM);
-
-    SetBackgroundStyle(wxBG_STYLE_CUSTOM);
-
-    // create a trivial bitmap so we have something allocated
-    mBitmap.Create(1, 1);
-
-}
-
-/*
- * Destructor.
- */
-DeviceWindow::~DeviceWindow(void)
-{
-}
-
-/*
- * We don't want to trap key or mouse events here.
- *
- * event.Skip() didn't seem to do the trick, so we call AddPendingEvent()
- * to add it to the parent's input queue.
- */
-void DeviceWindow::OnKeyDown(wxKeyEvent& event)
-{
-    //printf("DW: down: %d\n", event.GetKeyCode());
-    GetParent()->AddPendingEvent(event);
-}
-void DeviceWindow::OnKeyUp(wxKeyEvent& event)
-{
-    //printf("DW:   up: %d\n", event.GetKeyCode());
-    GetParent()->AddPendingEvent(event);
-}
-
-/*
- * Handle mouse events.  We want to pass these up to the PhoneWindow, since
- * that's where the "touch screen" code is.
- */
-void DeviceWindow::OnMouseLeftDown(wxMouseEvent& event)
-{
-    ClampMouse(&event);
-    GetParent()->AddPendingEvent(event);
-}
-void DeviceWindow::OnMouseLeftUp(wxMouseEvent& event)
-{
-    ClampMouse(&event);
-    GetParent()->AddPendingEvent(event);
-}
-void DeviceWindow::OnMouseRightDown(wxMouseEvent& event)
-{
-    ClampMouse(&event);
-    GetParent()->AddPendingEvent(event);
-}
-void DeviceWindow::OnMouseRightUp(wxMouseEvent& event)
-{
-    ClampMouse(&event);
-    GetParent()->AddPendingEvent(event);
-}
-void DeviceWindow::OnMouseMotion(wxMouseEvent& event)
-{
-    ClampMouse(&event);
-    GetParent()->AddPendingEvent(event);
-}
-
-/*
- * Clamp the mouse movement to the window bounds.
- */
-void DeviceWindow::ClampMouse(wxMouseEvent* pEvent)
-{
-    wxWindow* pEventWindow = (wxWindow*) pEvent->GetEventObject();
-    int width, height;
-
-    pEventWindow->GetSize(&width, &height);
-    if (pEvent->m_x < 0)
-        pEvent->m_x = 0;
-    else if (pEvent->m_x >= width)
-        pEvent->m_x = width-1;
-
-    if (pEvent->m_y < 0)
-        pEvent->m_y = 0;
-    else if (pEvent->m_y >= height)
-        pEvent->m_y = height-1;
-}
-
-
-/*
- * Handle a "user event".  We get these when the runtime wants us to
- * know that it has a new frame of graphics to display.
- * 
- */
-void DeviceWindow::OnUserEvent(UserEvent& event)
-{
-    wxBitmap* pBitmap;
-    long displayIndex;
-
-    displayIndex = (long) event.GetData();
-
-    //printf("GOT UAE %d\n", displayIndex);
-
-    // a displayIndex of -1 means just update the onion skin
-    if (displayIndex >= 0) {
-        /* get a newly-allocated bitmap with converted image data */
-        pBitmap = mpDeviceManager->GetImageData(displayIndex);
-    
-        /* do a ptr/refcount assignment to hold the data */
-        mBitmap = *pBitmap;
-        /* delete the temporary object; does not delete the bitmap storage */
-        delete pBitmap;
-    }
-    
-    if (displayIndex >= -1) {
-        mHasOnionSkinBitmap = false;
-        
-        Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-        assert(pPrefs != NULL);
-    
-        bool overlayOnionSkin;
-        char* onionSkinFileName = NULL;
-        
-        bool overlayOnionSkinExists = pPrefs->GetBool("overlay-onion-skin", &overlayOnionSkin);
-        if (overlayOnionSkinExists && overlayOnionSkin) {
-            bool fileNameExists = pPrefs->GetString("onion-skin-file-name", &onionSkinFileName);
-            if (fileNameExists && *onionSkinFileName) {
-                wxImage onionSkinImage(wxString::FromAscii(onionSkinFileName));
-                onionSkinImage.SetAlpha(NULL);
-                bool hasAlpha = onionSkinImage.HasAlpha();
-                int width = onionSkinImage.GetWidth();
-                int height = onionSkinImage.GetHeight();
-                if (hasAlpha) {
-                    unsigned char *alpha = onionSkinImage.GetAlpha();
-                    int alphaVal = 127;
-                    pPrefs->GetInt("onion-skin-alpha-value", &alphaVal);
-                    for (int i = (width * height) - 1; i >= 0; i--) {
-                        alpha[i] = alphaVal;
-                    } 
-                }
-                mOnionSkinBitmap = wxBitmap(onionSkinImage);
-                mHasOnionSkinBitmap = true;
-            }
-        }
-    }
-
-    /* induce an update */
-    Refresh();
-}
-
-/*
- * Window has been moved or resized.
- *
- * We get this when the model of phone is changed.
- *
- * FIX: in the future this only happens when the phone is rotated 90deg.
- */
-void DeviceWindow::OnSize(wxSizeEvent& WXUNUSED(event))
-{
-    int width, height;
-
-    GetClientSize(&width, &height);
-    printf("Sim: device window resize: %dx%d\n", width, height);
-
-    mBitmap.Create(width, height);
-
-    wxMemoryDC memDC;
-    memDC.SelectObject(mBitmap);
-
-    wxColour backColor(96, 122, 121);
-    memDC.SetBrush(wxBrush(backColor));
-    memDC.SetPen(wxPen(backColor, 1));
-    wxRect windowRect(wxPoint(0, 0), GetClientSize());
-    memDC.DrawRectangle(windowRect);
-}
-
-/*
- * No need to erase the background.
- */
-void DeviceWindow::OnErase(wxEraseEvent& WXUNUSED(event))
-{
-    //printf("erase device\n");
-}
-
-/*
- * Repaint the simulator output.
- */
-void DeviceWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
-    wxPaintDC dc(this);
-
-    /* draw background image */
-    dc.DrawBitmap(mBitmap, 0, 0, TRUE);
-
-    /* If necessary, draw onion skin image on top */
-    if (mHasOnionSkinBitmap) {
-        dc.DrawBitmap(mOnionSkinBitmap, 0, 0, TRUE);
-    }
-    
-#if 0
-    // debug - draw the corners
-    int xoff = 0;
-    int yoff = 0;
-    int width;
-    int height;
-    GetClientSize(&width, &height);
-
-    dc.SetPen(*wxGREEN_PEN);
-    dc.DrawLine(xoff,           yoff+9,         xoff,           yoff);
-    dc.DrawLine(xoff,           yoff,           xoff+10,        yoff);
-    dc.DrawLine(xoff+width-10,  yoff,           xoff+width,     yoff);
-    dc.DrawLine(xoff+width-1,   yoff,           xoff+width-1,   yoff+10);
-    dc.DrawLine(xoff,           yoff+height-10, xoff,           yoff+height);
-    dc.DrawLine(xoff,           yoff+height-1,  xoff+10,        yoff+height-1);
-    dc.DrawLine(xoff+width-1,   yoff+height-10, xoff+width-1,   yoff+height);
-    dc.DrawLine(xoff+width-1,   yoff+height-1,  xoff+width-11,  yoff+height-1);
-#endif
-}
-
diff --git a/simulator/app/DeviceWindow.h b/simulator/app/DeviceWindow.h
deleted file mode 100644
index 4548fc3..0000000
--- a/simulator/app/DeviceWindow.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Window with simulated phone.
-//
-#ifndef _SIM_DEVICE_WINDOW_H
-#define _SIM_DEVICE_WINDOW_H
-
-#include "UserEvent.h"
-#include "DeviceManager.h"
-
-/*
- * This window displays the device output.
- */
-class DeviceWindow : public wxWindow {
-public:
-    DeviceWindow(wxWindow* parent, DeviceManager* pDM);
-    virtual ~DeviceWindow(void);
-
-#if 0       // can't work -- can't create bitmaps in other threads
-    /* this gets tucked into a user event */
-    class FrameData {
-    public:
-        FrameData(void)
-            : mDisplayIndex(-1), mpBitmap(NULL)
-            {}
-        ~FrameData(void) {
-            delete mpBitmap;
-        }
-
-        void Create(int displayIndex, wxBitmap* pBitmap) {
-            mDisplayIndex = displayIndex;
-            mpBitmap = pBitmap;
-        }
-
-        int GetDisplayIndex(void) const { return mDisplayIndex; }
-        wxBitmap* GetBitmap(void) const { return mpBitmap; }
-
-    private:
-        int         mDisplayIndex;
-        wxBitmap*   mpBitmap;
-    };
-#endif
-
-    void DeviceManagerClosing(void) { mpDeviceManager = NULL; }
-
-private:
-    void OnKeyDown(wxKeyEvent& event);
-    void OnKeyUp(wxKeyEvent& event);
-    void OnMouseLeftDown(wxMouseEvent& event);
-    void OnMouseLeftUp(wxMouseEvent& event);
-    void OnMouseRightDown(wxMouseEvent& event);
-    void OnMouseRightUp(wxMouseEvent& event);
-    void OnMouseMotion(wxMouseEvent& event);
-    void OnSize(wxSizeEvent& WXUNUSED(event));
-    void OnErase(wxEraseEvent& event);
-    void OnPaint(wxPaintEvent& WXUNUSED(event));
-    void OnUserEvent(UserEvent& event);
-
-    void ClampMouse(wxMouseEvent* pEvent);
-
-    DeviceManager*  mpDeviceManager;
-    wxBitmap    mBitmap;
-    wxBitmap	mOnionSkinBitmap;
-    bool        mHasOnionSkinBitmap;
-
-    DECLARE_EVENT_TABLE()
-};
-
-#endif // _SIM_DEVICE_WINDOW_H
diff --git a/simulator/app/ExternalRuntime.cpp b/simulator/app/ExternalRuntime.cpp
deleted file mode 100644
index 9f2cc5e..0000000
--- a/simulator/app/ExternalRuntime.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//  
-// Management of the simulated device.
-//  
-    
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-    
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"
-    
-#include "ExternalRuntime.h"
-#include "MyApp.h"
-#include "UserEvent.h"
-#include "UserEventMessage.h"
-
-#include "SimRuntime.h"
-#include "LocalBiChannel.h"
-#include "utils.h"
-
-
-using namespace android;
-
-/*
- * Destructor.
- */
-ExternalRuntime::~ExternalRuntime(void)
-{
-    if (IsRunning()) {
-        // TODO: cause thread to stop, then Wait for it
-    }
-    printf("Sim: in ~ExternalRuntime()\n");
-}
-
-/*
- * Create and run the thread.
- */
-bool ExternalRuntime::StartThread(void)
-{
-    if (Create() != wxTHREAD_NO_ERROR) {
-        fprintf(stderr, "Sim: ERROR: can't create ExternalRuntime thread\n");
-        return false;
-    }
-
-    Run();
-    return true;
-}
-
-/*
- * Thread entry point.
- *
- * This just sits and waits for a new connection.  It hands it off to the
- * main thread and then goes back to waiting.
- *
- * There is currently no "polite" way to shut this down.
- */
-void* ExternalRuntime::Entry(void)
-{
-    LocalBiChannel lbic;
-    Pipe* reader;
-    Pipe* writer;
-
-    reader = writer = NULL;
-
-    if (!lbic.create(ANDROID_PIPE_NAME)) {
-        fprintf(stderr, "Sim: failed creating named pipe '%s'\n",
-            ANDROID_PIPE_NAME);
-        return NULL;
-    }
-
-    while (lbic.listen(&reader, &writer)) {
-        /*
-         * Throw it over the wall.
-         */
-        wxWindow* pMainFrame = ((MyApp*)wxTheApp)->GetMainFrame();
-
-        UserEventMessage* pUem = new UserEventMessage;
-        pUem->CreateExternalRuntime(reader, writer);
-
-        UserEvent uev(0, (void*) pUem);
-        pMainFrame->AddPendingEvent(uev);
-
-        reader = writer = NULL;
-    }
-
-    printf("Sim: ExternalRuntime thread wants to bail\n");
-
-    return NULL;
-}
-
diff --git a/simulator/app/ExternalRuntime.h b/simulator/app/ExternalRuntime.h
deleted file mode 100644
index 774a2cd..0000000
--- a/simulator/app/ExternalRuntime.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Class that manages the simulated device.
-//
-#ifndef _SIM_EXTERNAL_RUNTIME_H
-#define _SIM_EXTERNAL_RUNTIME_H
-
-/*
- * Define a thread that listens for the launch of an external runtime.
- * When we spot one we notify the main thread, which can choose to
- * accept or reject it.
- */
-class ExternalRuntime : public wxThread {
-public:
-    ExternalRuntime(void) {}
-    virtual ~ExternalRuntime(void);
-
-    /* start the thread running */
-    bool StartThread(void);
-
-    /* thread entry point */
-    virtual void* Entry(void);
-};
-
-#endif // _SIM_EXTERNAL_RUNTIME_H
diff --git a/simulator/app/LinuxKeys.h b/simulator/app/LinuxKeys.h
deleted file mode 100644
index 6382de9..0000000
--- a/simulator/app/LinuxKeys.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _SIM_LINUXKEYS_H
-#define _SIM_LINUXKEYS_H
-
-#include <linux/input.h>
-
-/* ubuntu has these, goobuntu doesn't */
-#ifndef KEY_SWITCHVIDEOMODE
-# define KEY_SWITCHVIDEOMODE 227
-#endif
-#ifndef KEY_KBDILLUMTOGGLE
-# define KEY_KBDILLUMTOGGLE 228
-#endif
-#ifndef KEY_KBDILLUMUP
-# define KEY_KBDILLUMUP     230
-#endif
-#ifndef KEY_REPLY
-# define KEY_REPLY          232
-#endif
-
-#endif /*_SIM_LINUXKEYS_H*/
diff --git a/simulator/app/LoadableImage.cpp b/simulator/app/LoadableImage.cpp
deleted file mode 100644
index 513165b..0000000
--- a/simulator/app/LoadableImage.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Simple class to hold an image that can be loaded and unloaded.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"   // needed for Windows build
-
-#include "LoadableImage.h"
-#include "AssetStream.h"
-#include "MyApp.h"
-
-#include "utils.h"
-
-#include <stdio.h>
-
-
-/*
- * Load the image.
- */
-bool LoadableImage::Create(const char* fileName, int x, int y)
-{
-    if (fileName == NULL || x < 0 || y < 0) {
-        fprintf(stderr, "bad params to %s\n", __PRETTY_FUNCTION__);
-        return false;
-    }
-
-    delete[] mName;
-    mName = android::strdupNew(fileName);
-
-    mX = x;
-    mY = y;
-
-    return true;
-}
-
-/*
- * Load the bitmap.
- */
-bool LoadableImage::LoadResources(void)
-{
-    if (mName == NULL)
-        return false;
-
-    if (mpBitmap != NULL)       // already loaded?
-        return true;
-
-    //printf("LoadResources: '%s'\n", (const char*) mName);
-#ifdef BEFORE_ASSET
-    wxImage img(mName);
-#else
-    android::AssetManager* pAssetMgr = ((MyApp*)wxTheApp)->GetAssetManager();
-    android::Asset* pAsset;
-
-    pAsset = pAssetMgr->open(mName, android::Asset::ACCESS_RANDOM);
-    if (pAsset == NULL) {
-        fprintf(stderr, "ERROR: unable to load '%s'\n", mName);
-        return false;
-    } else {
-        //printf("--- opened asset '%s'\n",
-        //    (const char*) pAsset->getAssetSource());
-    }
-    AssetStream astr(pAsset);
-
-    wxImage img(astr);
-#endif
-
-    mWidth = img.GetWidth();
-    mHeight = img.GetHeight();
-    if (mWidth <= 0 || mHeight <= 0) {
-        /* image failed to load or decode */
-        fprintf(stderr, "ERROR: unable to load/decode '%s'\n", mName);
-        //delete img;
-        return false;
-    }
-
-    mpBitmap = new wxBitmap(img);
-
-    //delete img;
-
-    return true;
-}
-
-/*
- * Unload the bitmap.
- */
-bool LoadableImage::UnloadResources(void)
-{
-    delete mpBitmap;
-    mpBitmap = NULL;
-    return true;
-}
-
diff --git a/simulator/app/LoadableImage.h b/simulator/app/LoadableImage.h
deleted file mode 100644
index 368d520..0000000
--- a/simulator/app/LoadableImage.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Simulated device definition.
-//
-#ifndef _SIM_LOADABLE_IMAGE_H
-#define _SIM_LOADABLE_IMAGE_H
-
-#include "utils.h"
-
-/*
- * Holds an image that may or may not be loaded at present.  The image
- * has an (x,y) offset.
- */
-class LoadableImage {
-public:
-    LoadableImage(void)
-        : mName(NULL), mpBitmap(NULL), mX(-1), mY(-1), mWidth(-1), mHeight(-1)
-        {}
-    virtual ~LoadableImage(void) {
-        delete[] mName;
-        delete mpBitmap;
-    }
-    LoadableImage(const LoadableImage& src)
-        : mName(NULL), mpBitmap(NULL)
-    {
-        CopyMembers(src);
-    }
-    LoadableImage& operator=(const LoadableImage& src) {
-        if (this != &src)       // self-assignment
-            CopyMembers(src);
-        return *this;
-    }
-    void CopyMembers(const LoadableImage& src) {
-        // Need to delete resources in case we're using operator= and
-        // assigning into an object that already holds some.
-        delete mName;
-        delete mpBitmap;
-        mName = android::strdupNew(src.mName);
-        if (src.mpBitmap == NULL)
-            mpBitmap = NULL;
-        else
-            mpBitmap = new wxBitmap(*(src.mpBitmap));
-        mX = src.mX;
-        mY = src.mY;
-        mWidth = src.mWidth;
-        mHeight = src.mHeight;
-    }
-
-    virtual bool Create(const char* fileName, int x, int y);
-
-    // load or unload the bitmap
-    bool LoadResources(void);
-    bool UnloadResources(void);
-
-    // accessors
-    int GetX(void) const { return mX; }
-    int GetY(void) const { return mY; }
-    int GetWidth(void) const { return mWidth; }
-    int GetHeight(void) const { return mHeight; }
-    wxBitmap* GetBitmap(void) const { return mpBitmap; }
-
-private:
-    char*       mName;
-    wxBitmap*   mpBitmap;
-
-    int         mX;         // position relative to phone image
-    int         mY;
-    int         mWidth;     // from image (cached values)
-    int         mHeight;
-};
-
-#endif // _SIM_LOADABLE_IMAGE_H
diff --git a/simulator/app/LocalBiChannel.cpp b/simulator/app/LocalBiChannel.cpp
deleted file mode 100644
index 93a997d..0000000
--- a/simulator/app/LocalBiChannel.cpp
+++ /dev/null
@@ -1,444 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Local named bi-directional communication channel.
-//
-#include "LocalBiChannel.h"
-#include "utils/Log.h"
-
-#if defined(HAVE_WIN32_IPC)
-# define _WIN32_WINNT 0x0500
-# include <windows.h>
-#else
-# include <sys/types.h>
-# include <sys/socket.h>
-# include <sys/stat.h>
-# include <sys/un.h>
-#endif
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#ifndef SUN_LEN
-/*
- * Our current set of ARM header files don't define this.
- */
-# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path)        \
-                      + strlen ((ptr)->sun_path))
-#endif
-
-using namespace android;
-
-const unsigned long kInvalidHandle = (unsigned long) -1;
-
-/*
- * Initialize data fields.
- */
-LocalBiChannel::LocalBiChannel(void)
-    : mFileName(NULL), mIsListener(false), mHandle(kInvalidHandle)
-{
-}
-
-#if defined(HAVE_WIN32_IPC)
-/*
- * Implementation for Win32, using named pipes.
- *
- * Cygwin actually supports UNIX-domain sockets, but we want to stuff
- * the file handles into a Pipe, which uses HANDLE under Win32.
- */
-
-const int kPipeSize = 4096;
-
-/*
- * Destructor.  If we're the server side, we may need to clean up after
- * ourselves.
- */
-LocalBiChannel::~LocalBiChannel(void)
-{
-    if (mHandle != kInvalidHandle)
-        CloseHandle((HANDLE)mHandle);
-
-    delete[] mFileName;
-}
-
-/*
- * Construct the full path.  The caller must delete[] the return value.
- */
-static char* makeFilename(const char* name)
-{
-    static const char* kBasePath = "\\\\.\\pipe\\android-";
-    char* fileName;
-
-    assert(name != NULL && name[0] != '\0');
-
-    fileName = new char[strlen(kBasePath) + strlen(name) + 1];
-    strcpy(fileName, kBasePath);
-    strcat(fileName, name);
-
-    return fileName;
-}
-
-/*
- * Create a named pipe, so the client has something to connect to.
- */
-bool LocalBiChannel::create(const char* name)
-{
-    delete[] mFileName;
-    mFileName = makeFilename(name);
-
-#if 0
-    HANDLE hPipe;
-
-    hPipe = CreateNamedPipe(
-                    mFileName,              // unique pipe name
-                    PIPE_ACCESS_DUPLEX |    // open mode
-                        FILE_FLAG_FIRST_PIPE_INSTANCE,
-                    0,                      // pipe mode (byte, blocking)
-                    1,                      // max instances
-                    kPipeSize,              // output buffer
-                    kPipeSize,              // input buffer
-                    NMPWAIT_USE_DEFAULT_WAIT,   // client time-out
-                    NULL);                  // security
-
-    if (hPipe == 0) {
-        LOG(LOG_ERROR, "lbicomm",
-            "CreateNamedPipe failed (err=%ld)\n", GetLastError());
-        return false;
-    }
-
-    mHandle = (unsigned long) hPipe;
-#endif
-
-    return true;
-}
-
-/*
- * Attach to an existing named pipe.
- */
-bool LocalBiChannel::attach(const char* name, Pipe** ppReadPipe,
-    Pipe** ppWritePipe)
-{
-    HANDLE hPipe, dupHandle;
-
-    delete[] mFileName;
-    mFileName = makeFilename(name);
-
-    hPipe = CreateFile(
-                mFileName,                      // filename
-                GENERIC_READ | GENERIC_WRITE,   // access
-                0,                              // no sharing
-                NULL,                           // security
-                OPEN_EXISTING,                  // don't create
-                0,                              // attributes
-                NULL);                          // template
-    if (hPipe == INVALID_HANDLE_VALUE) {
-        LOG(LOG_ERROR, "lbicomm",
-            "CreateFile on pipe '%s' failed (err=%ld)\n", name, GetLastError());
-        return false;
-    }
-
-    assert(mHandle == kInvalidHandle);
-
-    /*
-     * Set up the pipes.  Use the new handle for one, and a duplicate
-     * of it for the other, in case we decide to only close one side.
-     */
-    *ppReadPipe = new Pipe();
-    (*ppReadPipe)->createReader((unsigned long) hPipe);
-
-    DuplicateHandle(
-            GetCurrentProcess(),
-            hPipe,
-            GetCurrentProcess(),
-            &dupHandle,
-            0,
-            FALSE,
-            DUPLICATE_SAME_ACCESS);
-    *ppWritePipe = new Pipe();
-    (*ppWritePipe)->createWriter((unsigned long) dupHandle);
-
-    return true;
-}
-
-/*
- * Listen for a new connection, discarding any existing connection.
- */
-bool LocalBiChannel::listen(Pipe** ppReadPipe, Pipe** ppWritePipe)
-{
-    BOOL connected;
-    HANDLE hPipe;
-
-    /*
-     * Create up to 3 instances of the named pipe:
-     * - currently active connection
-     * - connection currently being rejected because one is already active
-     * - a new listener to wait for the next round
-     */
-    hPipe = CreateNamedPipe(
-                    mFileName,              // unique pipe name
-                    PIPE_ACCESS_DUPLEX      // open mode
-                        /*| FILE_FLAG_FIRST_PIPE_INSTANCE*/,
-                    0,                      // pipe mode (byte, blocking)
-                    3,                      // max instances
-                    kPipeSize,              // output buffer
-                    kPipeSize,              // input buffer
-                    NMPWAIT_USE_DEFAULT_WAIT,   // client time-out
-                    NULL);                  // security
-
-    if (hPipe == 0) {
-        LOG(LOG_ERROR, "lbicomm",
-            "CreateNamedPipe failed (err=%ld)\n", GetLastError());
-        return false;
-    }
-
-    /*
-     * If a client is already connected to us, this fails with
-     * ERROR_PIPE_CONNECTED.  It returns success if we had to wait
-     * a little bit before the connection happens.
-     */
-    connected = ConnectNamedPipe(hPipe, NULL) ?
-        TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);
-
-    if (connected) {
-        /*
-         * Create the pipes.  Give one a duplicated handle so that,
-         * when one closes, we don't lose both.
-         */
-        HANDLE dupHandle;
-
-        *ppReadPipe = new Pipe();
-        (*ppReadPipe)->createReader((unsigned long) hPipe);
-
-        DuplicateHandle(
-                GetCurrentProcess(),
-                hPipe,
-                GetCurrentProcess(),
-                &dupHandle,
-                0,
-                FALSE,
-                DUPLICATE_SAME_ACCESS);
-        *ppWritePipe = new Pipe();
-        (*ppWritePipe)->createWriter((unsigned long) dupHandle);
-
-        return true;
-    } else {
-        LOG(LOG_WARN, "lbicomm",
-            "ConnectNamedPipe failed (err=%ld)\n", GetLastError());
-#ifdef HAVE_WIN32_THREADS
-        Sleep(500); /* 500 ms */
-#else            
-        usleep(500000);     // DEBUG DEBUG
-#endif        
-        return false;
-    }
-}
-
-#else
-
-/*
- * Implementation for Linux and Darwin, using UNIX-domain sockets.
- */
-
-/*
- * Destructor.  If we're the server side, blow away the socket file.
- */
-LocalBiChannel::~LocalBiChannel(void)
-{
-    if (mHandle != kInvalidHandle)
-        close((int) mHandle);
-
-    if (mIsListener && mFileName != NULL) {
-        LOG(LOG_DEBUG, "lbicomm", "Removing '%s'\n", mFileName);
-        (void) unlink(mFileName);
-    }
-    delete[] mFileName;
-}
-
-/*
- * Construct the full path.  The caller must delete[] the return value.
- */
-static char* makeFilename(const char* name)
-{
-    static const char* kBasePath = "/tmp/android-";
-    char* fileName;
-
-    assert(name != NULL && name[0] != '\0');
-
-    fileName = new char[strlen(kBasePath) + strlen(name) + 1];
-    strcpy(fileName, kBasePath);
-    strcat(fileName, name);
-
-    return fileName;
-}
-
-/*
- * Create a UNIX domain socket, carefully removing it if it already
- * exists.
- */
-bool LocalBiChannel::create(const char* name)
-{
-    struct stat sb;
-    bool result = false;
-    int sock = -1;
-    int cc;
-
-    delete[] mFileName;
-    mFileName = makeFilename(name);
-
-    cc = stat(mFileName, &sb);
-    if (cc < 0) {
-        if (errno != ENOENT) {
-            LOG(LOG_ERROR, "lbicomm",
-                "Unable to stat '%s' (errno=%d)\n", mFileName, errno);
-            goto bail;
-        }
-    } else {
-        /* don't touch it if it's not a socket */
-        if (!(S_ISSOCK(sb.st_mode))) {
-            LOG(LOG_ERROR, "lbicomm",
-                "File '%s' exists and is not a socket\n", mFileName);
-            goto bail;
-        }
-
-        /* remove the cruft */
-        if (unlink(mFileName) < 0) {
-            LOG(LOG_ERROR, "lbicomm",
-                "Unable to remove '%s' (errno=%d)\n", mFileName, errno);
-            goto bail;
-        }
-    }
-
-    struct sockaddr_un addr;
-
-    sock = ::socket(AF_UNIX, SOCK_STREAM, 0);
-    if (sock < 0) {
-        LOG(LOG_ERROR, "lbicomm",
-            "UNIX domain socket create failed (errno=%d)\n", errno);
-        goto bail;
-    }
-
-    /* bind the socket; this creates the file on disk */
-    strcpy(addr.sun_path, mFileName);    // max 108 bytes
-    addr.sun_family = AF_UNIX;
-    cc = ::bind(sock, (struct sockaddr*) &addr, SUN_LEN(&addr));
-    if (cc < 0) {
-        LOG(LOG_ERROR, "lbicomm",
-            "AF_UNIX bind failed for '%s' (errno=%d)\n", mFileName, errno);
-        goto bail;
-    }
-
-    mHandle = (unsigned long) sock;
-    sock = -1;
-    mIsListener = true;
-    result = true;
-
-bail:
-    if (sock >= 0)
-        close(sock);
-    return result;
-}
-
-/*
- * Attach to an existing UNIX domain socket.
- */
-bool LocalBiChannel::attach(const char* name, Pipe** ppReadPipe,
-    Pipe** ppWritePipe)
-{
-    bool result = false;
-    int sock = -1;
-    int cc;
-
-    assert(ppReadPipe != NULL);
-    assert(ppWritePipe != NULL);
-
-    delete[] mFileName;
-    mFileName = makeFilename(name);
-
-    struct sockaddr_un addr;
-
-    sock = ::socket(AF_UNIX, SOCK_STREAM, 0);
-    if (sock < 0) {
-        LOG(LOG_ERROR, "lbicomm",
-            "UNIX domain socket create failed (errno=%d)\n", errno);
-        goto bail;
-    }
-
-    /* connect to socket; fails if file doesn't exist */
-    strcpy(addr.sun_path, mFileName);    // max 108 bytes
-    addr.sun_family = AF_UNIX;
-    cc = ::connect(sock, (struct sockaddr*) &addr, SUN_LEN(&addr));
-    if (cc < 0) {
-        // ENOENT means socket file doesn't exist
-        // ECONNREFUSED means socket exists but nobody is listening
-        LOG(LOG_ERROR, "lbicomm",
-            "AF_UNIX connect failed for '%s': %s\n", mFileName,strerror(errno));
-        goto bail;
-    }
-
-    /*
-     * Create the two halves.  We dup() the sock so that closing one side
-     * does not hose the other.
-     */
-    *ppReadPipe = new Pipe();
-    (*ppReadPipe)->createReader(sock);
-    *ppWritePipe = new Pipe();
-    (*ppWritePipe)->createWriter(dup(sock));
-
-    assert(mHandle == kInvalidHandle);
-    sock = -1;
-    mIsListener = false;
-
-    result = true;
-
-bail:
-    if (sock >= 0)
-        close(sock);
-    return result;
-}
-
-/*
- * Listen for a new connection.
- */
-bool LocalBiChannel::listen(Pipe** ppReadPipe, Pipe** ppWritePipe)
-{
-    bool result = false;
-    struct sockaddr_un from;
-    socklen_t fromlen;
-    int sock, lsock;
-    int cc;
-
-    assert(mHandle != kInvalidHandle);
-    lsock = (int) mHandle;
-
-    LOG(LOG_DEBUG, "lbicomm", "AF_UNIX listening\n");
-    cc = ::listen(lsock, 5);
-    if (cc < 0) {
-        LOG(LOG_ERROR, "lbicomm", "AF_UNIX listen failed (errno=%d)\n", errno);
-        goto bail;
-    }
-
-    fromlen = sizeof(from);     // not SUN_LEN()
-    sock = ::accept(lsock, (struct sockaddr*) &from, &fromlen);
-    if (sock < 0) {
-        LOG(LOG_WARN, "lbicomm", "AF_UNIX accept failed (errno=%d)\n", errno);
-        goto bail;
-    }
-
-    /*
-     * Create the two halves.  We dup() the sock so that closing one side
-     * does not hose the other.
-     */
-    *ppReadPipe = new Pipe();
-    (*ppReadPipe)->createReader(sock);
-    *ppWritePipe = new Pipe();
-    (*ppWritePipe)->createWriter(dup(sock));
-    result = true;
-
-bail:
-    return result;
-}
-
-#endif
diff --git a/simulator/app/LocalBiChannel.h b/simulator/app/LocalBiChannel.h
deleted file mode 100644
index a4f4d62..0000000
--- a/simulator/app/LocalBiChannel.h
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Create or attach to a named bi-directional channel on the local machine.
-//
-#ifndef __LIBS_LOCALBICHANNEL_H
-#define __LIBS_LOCALBICHANNEL_H
-
-#ifdef HAVE_ANDROID_OS
-#error DO NOT USE THIS FILE IN THE DEVICE BUILD
-#endif
-
-#include "Pipe.h"
-
-namespace android {
-
-/*
- * This is essentially a wrapper class for UNIX-domain sockets.  The
- * idea is to set one up with create() or attach to one with attach()
- * and then extract the unidirectional read/write Pipes.  These can
- * be used directly or stuffed into a MessageStream.
- *
- * The name for the pipe should be a short filename made up of alphanumeric
- * characters.  Depending on the implementation, we may create a file in
- * /tmp with the specified name, removing any existing copy.
- */
-class LocalBiChannel {
-public:
-    LocalBiChannel(void);
-    ~LocalBiChannel(void);
-
-    /* create the "listen" side */
-    bool create(const char* name);
-
-    /*
-     * Listen for a connection.  When we get one, we create unidirectional
-     * read/write pipes and return them.
-     */
-    bool listen(Pipe** ppReadPipe, Pipe** ppWritePipe);
-
-    /*
-     * Attach to a channel created by somebody else.  Returns pipes.
-     */
-    bool attach(const char* name, Pipe** ppReadPipe, Pipe** ppWritePipe);
-
-private:
-    char*       mFileName;
-    bool        mIsListener;
-    unsigned long mHandle;
-};
-
-}; // namespace android
-
-#endif // __LIBS_LOCALBICHANNEL_H
diff --git a/simulator/app/LogBundle.h b/simulator/app/LogBundle.h
deleted file mode 100644
index 2cba97b..0000000
--- a/simulator/app/LogBundle.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _SIM_LOG_BUNDLE_H
-#define _SIM_LOG_BUNDLE_H
-
-#ifdef HAVE_PTHREADS
-#include <pthread.h>
-#endif
-#include <cutils/logd.h> // for android_LogPriority.
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct android_LogBundle {
-    time_t              when;
-    android_LogPriority priority;
-    pid_t               pid;
-#ifndef HAVE_PTHREADS
-    unsigned            tid;
-#else    
-    pthread_t           tid;
-#endif    
-    const char*         tag;
-    const struct iovec* msgVec;
-    size_t              msgCount;
-    int                 fd;
-} android_LogBundle;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _SIM_LOG_BUNDLE_H
diff --git a/simulator/app/LogMessage.cpp b/simulator/app/LogMessage.cpp
deleted file mode 100644
index 63cb764..0000000
--- a/simulator/app/LogMessage.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Hold a single log message.
-//
-#include "LogMessage.h"
-#include <assert.h>
-
-/*
- * Constructor.
- *
- * Initializers here aren't necessary, since we can only create one of
- * these through Create(), which touches every field.
- */
-LogMessage::LogMessage(void)
-{
-}
-
-/*
- * Destructor.
- */
-LogMessage::~LogMessage(void)
-{
-    delete[] mTag;
-    delete[] mMsg;
-}
-
-/*
- * Create a new LogMessage object, and populate it with the contents of
- * "*pBundle".
- */
-/*static*/ LogMessage* LogMessage::Create(const android_LogBundle* pBundle)
-{
-    LogMessage* newMsg = new LogMessage;
-
-    if (newMsg == NULL)
-        return NULL;
-    assert(pBundle != NULL);
-
-    newMsg->mWhen = pBundle->when;
-    newMsg->mPriority = pBundle->priority;
-    newMsg->mPid = pBundle->pid;
-    newMsg->mTag = android::strdupNew(pBundle->tag);
-
-    size_t len = 0;
-    size_t i;
-    for (i=0; i<pBundle->msgCount; i++) len += pBundle->msgVec[i].iov_len;
-    newMsg->mMsg = new char[len+1];
-    char* p = newMsg->mMsg;
-    for (i=0; i<pBundle->msgCount; i++) {
-        memcpy(p, pBundle->msgVec[i].iov_base, pBundle->msgVec[i].iov_len);
-        p += pBundle->msgVec[i].iov_len;
-    }
-    *p = 0;
-
-    newMsg->mRefCnt = 1;
-    newMsg->mInternal = false;
-    newMsg->mFootprint = 8 * sizeof(int) + strlen(newMsg->mTag) +
-        strlen(newMsg->mMsg) + 4;
-    newMsg->mTextCtrlLen = 0;
-    newMsg->mpPrev = NULL;
-    newMsg->mpNext = NULL;
-
-    return newMsg;
-}
-
-/*
- * Create a new LogMessage object, with a simple message in it.
- *
- * Sets "mInternal" so we display it appropriately.
- */
-/*static*/ LogMessage* LogMessage::Create(const char* msg)
-{
-    LogMessage* newMsg;
-    android_LogBundle bundle;
-
-    assert(msg != NULL);
-
-    memset(&bundle, 0, sizeof(bundle));
-    bundle.when = time(NULL);
-    bundle.priority = ANDROID_LOG_ERROR;
-    bundle.pid = getpid();
-    bundle.tag = "-";
-    iovec iov;
-    iov.iov_base = (void*)msg;
-    iov.iov_len = strlen(msg);
-    bundle.msgVec = &iov;
-    bundle.msgCount = 1;
-
-    newMsg = Create(&bundle);
-
-    if (newMsg != NULL) {
-        newMsg->mInternal = true;
-    }
-
-    return newMsg;
-}
-
diff --git a/simulator/app/LogMessage.h b/simulator/app/LogMessage.h
deleted file mode 100644
index fe77dc0..0000000
--- a/simulator/app/LogMessage.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Class to hold a single log message.  Not thread safe.
-//
-#ifndef _SIM_LOG_MESSAGE_H
-#define _SIM_LOG_MESSAGE_H
-
-#include "utils.h"
-#include "LogBundle.h"
-
-/*
- * Hold a single log message.
- *
- * To reduce malloc strain we could over-allocate the object and tuck the
- * message text into the object storage.  On this off chance this becomes
- * important, the implementation keeps its constructor private.
- */
-class LogMessage {
-public:
-    ~LogMessage(void);
-
-    static LogMessage* Create(const android_LogBundle* pBundle);
-    static LogMessage* Create(const char* msg);
-
-    /* the total length of text added to the text ctrl */
-    int GetTextCtrlLen(void) const { return mTextCtrlLen; }
-    void SetTextCtrlLen(int len) { mTextCtrlLen = len; }
-
-    /* log pool */
-    LogMessage* GetPrev(void) const { return mpPrev; }
-    void SetPrev(LogMessage* pPrev) { mpPrev = pPrev; }
-    LogMessage* GetNext(void) const { return mpNext; }
-    void SetNext(LogMessage* pNext) { mpNext = pNext; }
-    int GetFootprint(void) const { return mFootprint; }
-
-    /* message contents */
-    time_t GetWhen(void) const { return mWhen; }
-    android_LogPriority GetPriority(void) const { return mPriority; }
-    pid_t GetPid(void) const { return mPid; }
-    const char* GetTag(void) const { return mTag; }
-    const char* GetMsg(void) const { return mMsg; }
-
-    bool GetInternal(void) const { return mInternal; }
-
-    void Acquire(void) { mRefCnt++; }
-    void Release(void) {
-        if (!--mRefCnt)
-            delete this;
-    }
-
-private:
-    LogMessage(void);
-    LogMessage(const LogMessage& src);              // not implemented
-    LogMessage& operator=(const LogMessage& src);   // not implemented
-
-    /* log message contents */
-    time_t          mWhen;
-    android_LogPriority mPriority;
-    pid_t           mPid;
-    char*           mTag;
-    char*           mMsg;
-
-    /* additional goodies */
-    int             mRefCnt;        // reference count
-    bool            mInternal;      // message generated internally by us?
-    int             mFootprint;     // approx. size of this object in memory
-    int             mTextCtrlLen;   // #of characters req'd in text ctrl
-    LogMessage*     mpPrev;         // link to previous item in log pool
-    LogMessage*     mpNext;         // link to next item in log pool
-};
-
-#endif // _SIM_LOG_MESSAGE_H
diff --git a/simulator/app/LogPool.cpp b/simulator/app/LogPool.cpp
deleted file mode 100644
index 43bf4be..0000000
--- a/simulator/app/LogPool.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Hold a collection of log messages, limiting ourselves to a certain
-// fixed maximum amount of memory.
-//
-#include "LogPool.h"
-#include <assert.h>
-
-
-/*
- * Add a message at the head of the pool.
- */
-void LogPool::Add(LogMessage* pLogMessage)
-{
-    pLogMessage->Acquire();     // bump up the ref count
-
-    assert(pLogMessage->GetPrev() == NULL);
-    assert(pLogMessage->GetNext() == NULL);
-
-    if (mpHead == NULL) {
-        assert(mpTail == NULL);
-        mpTail = mpHead = pLogMessage;
-    } else {
-        assert(mpHead->GetPrev() == NULL);
-        mpHead->SetPrev(pLogMessage);
-        pLogMessage->SetNext(mpHead);
-        mpHead = pLogMessage;
-    }
-
-    /* update the pool size, and remove old entries if necessary */
-    mCurrentSize += pLogMessage->GetFootprint();
-
-    while (mCurrentSize > mMaxSize)
-        RemoveOldest();
-}
-
-/*
- * Remove the oldest message (from the tail of the list).
- */
-void LogPool::RemoveOldest(void)
-{
-    LogMessage* pPrev;
-
-    if (mpTail == NULL) {
-        fprintf(stderr, "HEY: nothing left to remove (cur=%ld)\n",
-            mCurrentSize);
-        assert(false);
-        return;
-    }
-
-    if (mpTail == mpBookmark)
-        mpBookmark = NULL;
-
-    //printf("--- removing oldest, size %ld->%ld (%s)\n",
-    //    mCurrentSize, mCurrentSize - mpTail->GetFootprint(),mpTail->GetMsg());
-    mCurrentSize -= mpTail->GetFootprint();
-
-    pPrev = mpTail->GetPrev();
-    mpTail->Release();
-    mpTail = pPrev;
-    if (mpTail == NULL) {
-        //printf("--- pool is now empty (size=%ld)\n", mCurrentSize);
-        mpHead = NULL;
-    } else {
-        mpTail->SetNext(NULL);
-    }
-}
-
-/*
- * Resize the log pool.
- */
-void LogPool::Resize(long maxSize)
-{
-    assert(maxSize >= 0);
-
-    mMaxSize = maxSize;
-    while (mCurrentSize > mMaxSize)
-        RemoveOldest();
-}
-
-/*
- * Remove all entries.
- */
-void LogPool::Clear(void)
-{
-    while (mpTail != NULL)
-        RemoveOldest();
-}
-
diff --git a/simulator/app/LogPool.h b/simulator/app/LogPool.h
deleted file mode 100644
index b824fec..0000000
--- a/simulator/app/LogPool.h
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Pool of log messages.  Not thread safe -- operations on the log pool
-// should only happen in the main UI thread.
-//
-#ifndef _SIM_LOG_POOL_H
-#define _SIM_LOG_POOL_H
-
-#include "LogMessage.h"
-
-/*
- * This contains the pool of log messages.  The messages themselves are
- * allocated individually and reference counted.  We add new messages to
- * the head and, when the total "footprint" exceeds our stated max, we
- * delete one or more from the tail.
- *
- * To support pause/resume, we allow a "bookmark" to be set.  This is
- * just a pointer to a message in the pool.  If the bookmarked message
- * is deleted, we discard the bookmark.
- */
-class LogPool {
-public:
-    LogPool(void)
-        : mpHead(NULL), mpTail(NULL), mpBookmark(NULL),
-          mCurrentSize(0), mMaxSize(10240)
-        {}
-    ~LogPool(void) { Clear(); }
-
-    void Clear(void);
-
-    /* add a new message to the pool */
-    void Add(LogMessage* pLogMessage);
-
-    /* resize the pool, removing excess messages */
-    void Resize(long maxSize);
-
-    /* return the current limit, in bytes */
-    long GetMaxSize(void) const { return mMaxSize; }
-
-    LogMessage* GetHead(void) const { return mpHead; }
-
-    void SetBookmark(void) { mpBookmark = mpHead; }
-    LogMessage* GetBookmark(void) const { return mpBookmark; }
-
-private:
-    void RemoveOldest(void);
-
-    LogMessage*     mpHead;
-    LogMessage*     mpTail;
-    LogMessage*     mpBookmark;
-    long            mCurrentSize;       // current size, in bytes
-    long            mMaxSize;           // maximum size, in bytes
-};
-
-#endif // _SIM_LOG_POOL_H
diff --git a/simulator/app/LogPrefsDialog.cpp b/simulator/app/LogPrefsDialog.cpp
deleted file mode 100644
index dc3e07c..0000000
--- a/simulator/app/LogPrefsDialog.cpp
+++ /dev/null
@@ -1,404 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Log preferences modal dialog.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-
-#include "LogPrefsDialog.h"
-#include "Preferences.h"
-#include "Resource.h"
-#include "utils.h"
-
-BEGIN_EVENT_TABLE(LogPrefsDialog, wxDialog)
-    EVT_CHECKBOX(IDC_LOG_PREFS_WRITE_FILE, LogPrefsDialog::OnWriteFile)
-END_EVENT_TABLE()
-
-static const wxString gSpacerChoices[] = { 
-    wxT("0"), wxT("1"), wxT("2") 
-};
-static const wxString gPointSizes[] = { 
-    wxT("4"), wxT("6"), wxT("8"), wxT("10"), wxT("12"), wxT("14"), wxT("16") 
-};
-
-
-/*
- * Constructor.
- */
-LogPrefsDialog::LogPrefsDialog(wxWindow* parent)
-    : wxDialog(parent, IDD_LOG_PREFS, wxT("Log Preferences"), wxDefaultPosition,
-        wxDefaultSize, wxDEFAULT_DIALOG_STYLE),
-      mHeaderFormat(kHFFull), mSingleLine(false), mExtraSpacing(0),
-      mUseColor(false), mFontMonospace(false), mDisplayMax(0), mPoolSizeKB(0)
-{
-    CreateControls();
-}
-
-
-/*
- * Destructor.  Not much to do.
- */
-LogPrefsDialog::~LogPrefsDialog(void)
-{
-}
-
-/*
- * Create all of the pages and add them to the notebook.
- */
-void LogPrefsDialog::CreateControls(void)
-{
-    wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
-    wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL);
-    mNotebook.Create(this, wxID_ANY);
-    wxPanel* page;
-
-    page = CreateFormatPage(&mNotebook);
-    mNotebook.AddPage(page, wxT("Format"), true);
-    page = CreateLimitsPage(&mNotebook);
-    mNotebook.AddPage(page, wxT("Limits"), false);
-    page = CreateFilesPage(&mNotebook);
-    mNotebook.AddPage(page, wxT("Files"), false);
-
-    // note to self: could use CreateButtonSizer here?
-    wxButton* cancel = new wxButton(this, wxID_CANCEL, wxT("&Cancel"),
-        wxDefaultPosition, wxDefaultSize, 0);
-    okCancelSizer->Add(cancel, 0, wxALL, kInterSpacing);
-
-    wxButton* ok = new wxButton(this, wxID_OK, wxT("&OK"),
-        wxDefaultPosition, wxDefaultSize, 0);
-    okCancelSizer->Add(ok, 0, wxALL, kInterSpacing);
-
-    mainSizer->Add(&mNotebook);
-    mainSizer->Add(okCancelSizer, 0, wxALIGN_RIGHT);
-
-    SetSizer(mainSizer);
-
-    mainSizer->Fit(this);           // shrink-to-fit
-    mainSizer->SetSizeHints(this);  // define minimum size
-}
-
-/*
- * Transfer data from our members to the window controls.
- */
-bool LogPrefsDialog::TransferDataToWindow(void)
-{
-    /*
-     * Do standard dialog setup.
-     */
-    wxRadioButton* fmtFull = (wxRadioButton*) FindWindow(IDC_LOG_PREFS_FMT_FULL);
-    wxRadioButton* fmtBrief = (wxRadioButton*) FindWindow(IDC_LOG_PREFS_FMT_BRIEF);
-    wxRadioButton* fmtMinimal = (wxRadioButton*) FindWindow(IDC_LOG_PREFS_FMT_MINIMAL);
-    wxCheckBox* singleLine = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_SINGLE_LINE);
-    wxComboBox* extraSpacing = (wxComboBox*) FindWindow(IDC_LOG_PREFS_EXTRA_SPACING);
-    wxComboBox* pointSize = (wxComboBox*) FindWindow(IDC_LOG_PREFS_POINT_SIZE);
-    wxCheckBox* useColor = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_USE_COLOR);
-    wxCheckBox* fontMono = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_FONT_MONO);
-    // -
-    wxTextCtrl* displayMax = (wxTextCtrl*) FindWindow(IDC_LOG_PREFS_DISPLAY_MAX);
-    wxTextCtrl* poolSize = (wxTextCtrl*) FindWindow(IDC_LOG_PREFS_POOL_SIZE);
-    // -
-    wxCheckBox* writeFile = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_WRITE_FILE);
-    wxTextCtrl* fileName = (wxTextCtrl*) FindWindow(IDC_LOG_PREFS_FILENAME);
-    wxCheckBox* truncateOld = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_TRUNCATE_OLD);
-    // -
-
-    fmtFull->SetValue(mHeaderFormat == kHFFull);
-    fmtBrief->SetValue(mHeaderFormat == kHFBrief);
-    fmtMinimal->SetValue(mHeaderFormat == kHFMinimal);
-    singleLine->SetValue(mSingleLine);
-    if (mExtraSpacing < 0 || mExtraSpacing > NELEM(gSpacerChoices))
-        mExtraSpacing = 0;
-    extraSpacing->SetSelection(mExtraSpacing);
-
-    pointSize->SetSelection(0);
-    for (int i = 0; i < NELEM(gPointSizes); i++) {
-        if (atoi(gPointSizes[i].ToAscii()) == mPointSize) {
-            pointSize->SetSelection(i);
-            break;
-        }
-    }
-    useColor->SetValue(mUseColor);
-    fontMono->SetValue(mFontMonospace);
-
-    wxString tmpStr;
-    tmpStr.Printf(wxT("%d"), mDisplayMax);
-    displayMax->SetValue(tmpStr);
-    tmpStr.Printf(wxT("%d"), mPoolSizeKB);
-    poolSize->SetValue(tmpStr);
-
-    writeFile->SetValue(mWriteFile);
-    fileName->SetValue(mFileName);
-    truncateOld->SetValue(mTruncateOld);
-
-    EnableFileControls(mWriteFile);
-
-    return true;
-}
-
-/*
- * Convert a string to a number.  The number is expected to be unsigned.
- * Returns < 0 on failure.
- */
-static long ConvertUnsigned(const wxString& str)
-{
-    long val;
-    if (!str.ToLong(&val))
-        return -1;
-    return val;
-}
-
-/*
- * Transfer and validate data from the window controls.
- *
- * This doesn't get called if the user cancels out of the dialog.
- */
-bool LogPrefsDialog::TransferDataFromWindow(void)
-{
-    /*
-     * Do standard dialog export.
-     */
-    //wxRadioButton* fmtFull = (wxRadioButton*) FindWindow(IDC_LOG_PREFS_FMT_FULL);
-    wxRadioButton* fmtBrief = (wxRadioButton*) FindWindow(IDC_LOG_PREFS_FMT_BRIEF);
-    wxRadioButton* fmtMinimal = (wxRadioButton*) FindWindow(IDC_LOG_PREFS_FMT_MINIMAL);
-    wxCheckBox* singleLine = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_SINGLE_LINE);
-    wxComboBox* extraSpacing = (wxComboBox*) FindWindow(IDC_LOG_PREFS_EXTRA_SPACING);
-    wxComboBox* pointSize = (wxComboBox*) FindWindow(IDC_LOG_PREFS_POINT_SIZE);
-    wxCheckBox* useColor = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_USE_COLOR);
-    wxCheckBox* fontMono = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_FONT_MONO);
-    // -
-    wxTextCtrl* displayMax = (wxTextCtrl*) FindWindow(IDC_LOG_PREFS_DISPLAY_MAX);
-    wxTextCtrl* poolSize = (wxTextCtrl*) FindWindow(IDC_LOG_PREFS_POOL_SIZE);
-    // -
-    wxCheckBox* writeFile = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_WRITE_FILE);
-    wxTextCtrl* fileName = (wxTextCtrl*) FindWindow(IDC_LOG_PREFS_FILENAME);
-    wxCheckBox* truncateOld = (wxCheckBox*) FindWindow(IDC_LOG_PREFS_TRUNCATE_OLD);
-    // -
-
-    mHeaderFormat = kHFFull;
-    if (fmtBrief->GetValue())
-        mHeaderFormat = kHFBrief;
-    else if (fmtMinimal->GetValue())
-        mHeaderFormat = kHFMinimal;
-
-    wxString tmpStr;
-
-    mSingleLine = (singleLine->GetValue() != 0);
-    mExtraSpacing = extraSpacing->GetSelection();
-    mPointSize = ConvertUnsigned(pointSize->GetValue());
-    mUseColor = useColor->GetValue();
-    mFontMonospace = fontMono->GetValue();
-
-    tmpStr = displayMax->GetValue();
-    mDisplayMax = ConvertUnsigned(tmpStr);
-    if (mDisplayMax <= 0 || mDisplayMax > 1000 * 1000) {
-        wxMessageBox(wxT("Bad value for display max -- must be > 0 and <= 1,000,000"),
-            wxT("Hoser"), wxOK, this);
-        return false;
-    }
-
-    tmpStr = poolSize->GetValue();
-    mPoolSizeKB = ConvertUnsigned(tmpStr);
-    if (mDisplayMax <= 0 || mDisplayMax > 1048576) {
-        wxMessageBox(wxT("Bad value for pool size -- must be > 0 and <= 1048576"),
-            wxT("Hoser"), wxOK, this);
-        return false;
-    }
-
-    mWriteFile = (writeFile->GetValue() != 0);
-    mFileName = fileName->GetValue();
-    mTruncateOld = (truncateOld->GetValue() != 0);
-    if (mWriteFile && mFileName.IsEmpty()) {
-        wxMessageBox(wxT("Log filename may not be blank"),
-            wxT("Hoser"), wxOK, this);
-        return false;
-    }
-
-    return true;
-}
-
-
-/*
- * Create the log Format page.
- */
-wxPanel* LogPrefsDialog::CreateFormatPage(wxBookCtrlBase* parent)
-{
-    wxPanel* panel = new wxPanel(parent);
-
-    wxStaticBoxSizer* headerOpts = new wxStaticBoxSizer(wxVERTICAL, panel,
-        wxT("Header"));
-    headerOpts->Add(new wxRadioButton(panel, IDC_LOG_PREFS_FMT_FULL,
-            wxT("Full header"), wxDefaultPosition, wxDefaultSize,
-            wxRB_GROUP));
-    headerOpts->Add(new wxRadioButton(panel, IDC_LOG_PREFS_FMT_BRIEF,
-            wxT("Brief header")));
-    headerOpts->Add(new wxRadioButton(panel, IDC_LOG_PREFS_FMT_MINIMAL,
-            wxT("Minimal, integrated header")));
-
-    wxCheckBox* singleLine = new wxCheckBox(panel, IDC_LOG_PREFS_SINGLE_LINE,
-        wxT("Put headers and message on same line"));
-
-    wxStaticText* extraSpacingDescr = new wxStaticText(panel, wxID_STATIC,
-        wxT("Extra line spacing:"));
-    wxComboBox* extraSpacing = new wxComboBox(panel,
-        IDC_LOG_PREFS_EXTRA_SPACING, wxT("blah"),
-        wxDefaultPosition, wxDefaultSize, NELEM(gSpacerChoices),
-        gSpacerChoices, wxCB_READONLY);
-    wxBoxSizer* extraSpacingSizer = new wxBoxSizer(wxHORIZONTAL);
-    extraSpacingSizer->Add(extraSpacingDescr, 0, wxALIGN_CENTER_VERTICAL);
-    extraSpacingSizer->AddSpacer(kInterSpacing);
-    extraSpacingSizer->Add(extraSpacing);
-
-    wxStaticBoxSizer* textOpts = new wxStaticBoxSizer(wxVERTICAL, panel,
-        wxT("Text"));
-    textOpts->Add(
-            new wxStaticText(panel, wxID_STATIC, wxT("Point size:")) );
-    textOpts->AddSpacer(kInterSpacing);
-    textOpts->Add(
-        new wxComboBox(panel,
-            IDC_LOG_PREFS_POINT_SIZE, wxT("blah"),
-            wxDefaultPosition, wxDefaultSize, NELEM(gPointSizes),
-            gPointSizes, wxCB_READONLY) );
-    textOpts->AddSpacer(kInterSpacing);
-    textOpts->Add(
-            new wxCheckBox(panel, IDC_LOG_PREFS_USE_COLOR,
-                wxT("Colorful messages")) );
-    textOpts->AddSpacer(kInterSpacing);
-    textOpts->Add(
-            new wxCheckBox(panel, IDC_LOG_PREFS_FONT_MONO,
-                wxT("Use monospace font")) );
-
-
-    wxBoxSizer* sizerPanel = new wxBoxSizer(wxVERTICAL);
-    sizerPanel->Add(kMinWidth, kEdgeSpacing);       // forces minimum width
-    sizerPanel->Add(headerOpts);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(singleLine);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(extraSpacingSizer);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(textOpts);
-    sizerPanel->AddSpacer(kInterSpacing);
-
-    wxBoxSizer* horizIndent = new wxBoxSizer(wxHORIZONTAL);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    horizIndent->Add(sizerPanel);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    panel->SetSizer(horizIndent);
-
-    return panel;
-}
-
-/*
- * Create the log Limits page.
- */
-wxPanel* LogPrefsDialog::CreateLimitsPage(wxBookCtrlBase* parent)
-{
-    wxPanel* panel = new wxPanel(parent);
-
-    wxBoxSizer* displayMaxSizer = new wxBoxSizer(wxHORIZONTAL);
-    displayMaxSizer->Add(
-            new wxStaticText(panel, wxID_ANY,
-                wxT("Maximum entries in log window:"),
-                wxDefaultPosition, wxDefaultSize,
-                wxALIGN_LEFT),
-            0, wxALIGN_CENTER_VERTICAL);
-    displayMaxSizer->AddSpacer(kInterSpacing);
-    displayMaxSizer->Add(
-            new wxTextCtrl(panel, IDC_LOG_PREFS_DISPLAY_MAX));
-
-    wxBoxSizer* poolSizeSizer = new wxBoxSizer(wxHORIZONTAL);
-    poolSizeSizer->Add(
-            new wxStaticText(panel, wxID_ANY,
-                wxT("Size of the log pool (KB):"),
-                wxDefaultPosition, wxDefaultSize,
-                wxALIGN_LEFT),
-            0, wxALIGN_CENTER_VERTICAL);
-    poolSizeSizer->AddSpacer(kInterSpacing);
-    poolSizeSizer->Add(
-            new wxTextCtrl(panel, IDC_LOG_PREFS_POOL_SIZE));
-
-
-    wxBoxSizer* sizerPanel = new wxBoxSizer(wxVERTICAL);
-    sizerPanel->Add(kMinWidth, kEdgeSpacing);       // forces minimum width
-    sizerPanel->Add(displayMaxSizer);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(poolSizeSizer);
-    sizerPanel->AddSpacer(kInterSpacing);
-
-    wxBoxSizer* horizIndent = new wxBoxSizer(wxHORIZONTAL);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    horizIndent->Add(sizerPanel);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    panel->SetSizer(horizIndent);
-
-    return panel;
-}
-
-/*
- * Create the log Files page.
- */
-wxPanel* LogPrefsDialog::CreateFilesPage(wxBookCtrlBase* parent)
-{
-    wxPanel* panel = new wxPanel(parent);
-    wxStaticBoxSizer* logOpts = new wxStaticBoxSizer(wxVERTICAL, panel,
-        wxT("Log File"));
-
-    wxCheckBox* writeCopy =
-            new wxCheckBox(panel, IDC_LOG_PREFS_WRITE_FILE,
-                wxT("Write a copy of log output to a file"));
-
-    logOpts->AddSpacer(kInterSpacing);
-    logOpts->Add(
-            new wxStaticText(panel, wxID_ANY,
-                wxT("Filename:"),
-                wxDefaultPosition, wxDefaultSize,
-                wxALIGN_LEFT));
-    logOpts->AddSpacer(kInterSpacing);
-    logOpts->Add(
-            new wxTextCtrl(panel, IDC_LOG_PREFS_FILENAME), 0, wxEXPAND);
-    logOpts->AddSpacer(kInterSpacing);
-    logOpts->Add(
-            new wxCheckBox(panel, IDC_LOG_PREFS_TRUNCATE_OLD,
-                wxT("Truncate the file if more than 8 hours old ")) );
-
-
-    wxBoxSizer* sizerPanel = new wxBoxSizer(wxVERTICAL);
-    sizerPanel->Add(kMinWidth, kEdgeSpacing);       // forces minimum width
-    sizerPanel->Add(writeCopy);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(logOpts);
-    sizerPanel->AddSpacer(kInterSpacing);
-
-    wxBoxSizer* horizIndent = new wxBoxSizer(wxHORIZONTAL);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    horizIndent->Add(sizerPanel);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    panel->SetSizer(horizIndent);
-
-    return panel;
-}
-
-
-/*
- * Handle clicks on the "write file" checkbox.
- */
-void LogPrefsDialog::OnWriteFile(wxCommandEvent& event)
-{
-    EnableFileControls(event.GetInt());
-}
-
-/*
- * Enable or disable some of the controls on the "file" page.
- */
-void LogPrefsDialog::EnableFileControls(bool enable)
-{
-    FindWindow(IDC_LOG_PREFS_FILENAME)->Enable(enable);
-    FindWindow(IDC_LOG_PREFS_TRUNCATE_OLD)->Enable(enable);
-}
-
diff --git a/simulator/app/LogPrefsDialog.h b/simulator/app/LogPrefsDialog.h
deleted file mode 100644
index 17a73a3..0000000
--- a/simulator/app/LogPrefsDialog.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Log preferences modal dialog.
-//
-#ifndef _SIM_LOG_PREFS_DIALOG_H
-#define _SIM_LOG_PREFS_DIALOG_H
-
-/*
- * Declaration of log preferences dialog.  This class defines the outer
- * wrapper as well as all of the pages.
- */
-class LogPrefsDialog : public wxDialog {
-    DECLARE_EVENT_TABLE()
-
-public:
-    LogPrefsDialog(wxWindow* parent);
-    virtual ~LogPrefsDialog(void);
-
-    void CreateControls(void);
-
-    /* these correspond to radio buttons */
-    typedef enum HeaderFormat {
-        kHFFull = 0,
-        kHFBrief,
-        kHFMinimal,
-        kHFInternal,        // special -- used for internally generated msgs
-    };
-
-    /*
-     * Values edited in the preference pages.  By Windows convention,
-     * these are public.
-     */
-    /* format options */
-    HeaderFormat mHeaderFormat;
-    bool        mSingleLine;        // put whole message on one line?
-    int         mExtraSpacing;      // double/triple-space messages?
-    int         mPointSize;         // text size
-    bool        mUseColor;          // colorful messages?
-    bool        mFontMonospace;     // use monospace font?
-
-    /* limit options */
-    int         mDisplayMax;
-    int         mPoolSizeKB;
-
-    /* file options */
-    bool        mWriteFile;
-    wxString    mFileName;
-    bool        mTruncateOld;
-
-private:
-    bool TransferDataToWindow(void);
-    bool TransferDataFromWindow(void);
-
-    wxPanel* CreateFormatPage(wxBookCtrlBase* parent);
-    wxPanel* CreateLimitsPage(wxBookCtrlBase* parent);
-    wxPanel* CreateFilesPage(wxBookCtrlBase* parent);
-
-    void OnWriteFile(wxCommandEvent& event);
-    void EnableFileControls(bool enable);
-
-    /* main notebook; for aesthetic reasons we may want a Choicebook */
-    wxNotebook    mNotebook;
-
-    enum {
-        kMinWidth = 300,        // minimum prefs dialog width, in pixels
-    };
-};
-
-#endif // _SIM_LOG_PREFS_DIALOG_H
diff --git a/simulator/app/LogWindow.cpp b/simulator/app/LogWindow.cpp
deleted file mode 100644
index b19debb..0000000
--- a/simulator/app/LogWindow.cpp
+++ /dev/null
@@ -1,1156 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Display runtime log output.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"   // needed for Windows build
-#include "wx/dcbuffer.h"
-
-#include "LogWindow.h"
-#include "LogMessage.h"
-#include "LogPrefsDialog.h"
-#include "MyApp.h"
-#include "Preferences.h"
-#include "Resource.h"
-#include "UserEventMessage.h"
-
-#include <errno.h>
-
-static int android_snprintfBuffer(char** pBuf, int bufLen, const char* format, ...);
-static int android_vsnprintfBuffer(char** pBuf, int bufLen, const char* format, va_list args);
-
-
-using namespace android;
-
-#if 0   // experiment -- works on Win32, but not with GTK
-class MyTextCtrl : public wxTextCtrl {
-public:
-    MyTextCtrl(wxWindow* parent, wxWindowID id, const wxString& value,
-        const wxPoint& pos, const wxSize& size, int style = 0)
-        : wxTextCtrl(parent, id, value, pos, size, style)
-        {
-            printf("***************** MyTextCtrl!\n");
-        }
-
-    void OnScroll(wxScrollWinEvent& event);
-    void OnScrollBottom(wxScrollWinEvent& event);
-
-private:
-    DECLARE_EVENT_TABLE()
-};
-
-BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
-    EVT_SCROLLWIN(MyTextCtrl::OnScroll)
-    EVT_SCROLLWIN_BOTTOM(MyTextCtrl::OnScrollBottom)
-END_EVENT_TABLE()
-
-void MyTextCtrl::OnScroll(wxScrollWinEvent& event)
-{
-    printf("OnScroll!\n");
-}
-
-void MyTextCtrl::OnScrollBottom(wxScrollWinEvent& event)
-{
-    printf("OnScrollBottom!\n");
-}
-#endif
-
-
-BEGIN_EVENT_TABLE(LogWindow, wxDialog)
-    EVT_CLOSE(LogWindow::OnClose)
-    EVT_MOVE(LogWindow::OnMove)
-    EVT_COMBOBOX(IDC_LOG_LEVEL, LogWindow::OnLogLevel)
-    EVT_BUTTON(IDC_LOG_CLEAR, LogWindow::OnLogClear)
-    EVT_BUTTON(IDC_LOG_PAUSE, LogWindow::OnLogPause)
-    EVT_BUTTON(IDC_LOG_PREFS, LogWindow::OnLogPrefs)
-END_EVENT_TABLE()
-
-/*
- * Information about log levels.
- *
- * Each entry here corresponds to an entry in the combo box.  The first
- * letter of each name should be unique.
- */
-static const struct {
-    wxString    name;
-    android_LogPriority priority;
-} gLogLevels[] = {
-    { wxT("Verbose"),    ANDROID_LOG_VERBOSE },
-    { wxT("Debug"),      ANDROID_LOG_DEBUG },
-    { wxT("Info"),       ANDROID_LOG_INFO },
-    { wxT("Warn"),       ANDROID_LOG_WARN },
-    { wxT("Error"),      ANDROID_LOG_ERROR }
-};
-
-
-/*
- * Create a new LogWindow.  This should be a child of the main frame.
- */
-LogWindow::LogWindow(wxWindow* parent)
-    : wxDialog(parent, wxID_ANY, wxT("Log Output"), wxDefaultPosition,
-        wxDefaultSize,
-        wxCAPTION | wxSYSTEM_MENU | wxCLOSE_BOX | wxRESIZE_BORDER),
-      mDisplayArray(NULL), mMaxDisplayMsgs(0), mPaused(false),
-      mMinPriority(ANDROID_LOG_VERBOSE),
-      mHeaderFormat(LogPrefsDialog::kHFFull),
-      mSingleLine(false), mExtraSpacing(0), mPointSize(10), mUseColor(true),
-      mFontMonospace(true), mWriteFile(false), mTruncateOld(true), mLogFp(NULL),
-      mNewlyShown(false), mLastPosition(wxDefaultPosition), mVisible(false)
-{
-    ConstructControls();
-
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-
-    int poolSize = 10240;       // 10MB
-    pPrefs->GetInt("log-pool-size-kbytes", &poolSize);
-    assert(poolSize > 0);
-    mPool.Resize(poolSize * 1024);
-
-    mMaxDisplayMsgs = 1000;
-    pPrefs->GetInt("log-display-msg-count", &mMaxDisplayMsgs);
-    assert(mMaxDisplayMsgs > 0);
-    mDisplayArray = new LogMessage*[mMaxDisplayMsgs];
-    memset(mDisplayArray, 0, sizeof(LogMessage*) * mMaxDisplayMsgs);
-    mTopPtr = -1;
-    mNextPtr = 0;
-
-    int tmpInt = (int) mHeaderFormat;
-    pPrefs->GetInt("log-header-format", &tmpInt);
-    mHeaderFormat = (LogPrefsDialog::HeaderFormat) tmpInt;
-    pPrefs->GetBool("log-single-line", &mSingleLine);
-    pPrefs->GetInt("log-extra-spacing", &mExtraSpacing);
-    pPrefs->GetInt("log-point-size", &mPointSize);
-    pPrefs->GetBool("log-use-color", &mUseColor);
-    pPrefs->SetBool("log-font-monospace", &mFontMonospace);
-    SetTextStyle();
-
-    mFileName = wxT("/tmp/android-log.txt");
-    pPrefs->GetBool("log-write-file", &mWriteFile);
-    pPrefs->GetString("log-filename", /*ref*/mFileName);
-    pPrefs->GetBool("log-truncate-old", &mTruncateOld);
-
-    PrepareLogFile();
-}
-
-/*
- * Destroy everything we own.
- */
-LogWindow::~LogWindow(void)
-{
-    ClearDisplay();
-    delete[] mDisplayArray;
-
-    if (mLogFp != NULL)
-        fclose(mLogFp);
-}
-
-/*
- * Set the text style, based on our preferences.
- */
-void LogWindow::SetTextStyle(void)
-{
-    wxTextCtrl* pTextCtrl;
-    pTextCtrl = (wxTextCtrl*) FindWindow(IDC_LOG_TEXT);
-    wxTextAttr style;
-    style = pTextCtrl->GetDefaultStyle();
-
-    if (mFontMonospace) {
-        wxFont font(mPointSize, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL,
-            wxFONTWEIGHT_NORMAL);
-        style.SetFont(font);
-    } else {
-        wxFont font(mPointSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL,
-            wxFONTWEIGHT_NORMAL);
-        style.SetFont(font);
-    }
-
-    pTextCtrl->SetDefaultStyle(style);
-}
-
-/*
- * Set up the goodies in the window.
- *
- * Also initializes mMinPriority.
- */
-void LogWindow::ConstructControls(void)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    wxPanel* base = new wxPanel(this, wxID_ANY);
-    wxBoxSizer* masterSizer = new wxBoxSizer(wxVERTICAL);
-    wxBoxSizer* indentSizer = new wxBoxSizer(wxHORIZONTAL);
-    wxBoxSizer* configPrioritySizer = new wxBoxSizer(wxHORIZONTAL);
-    wxGridSizer* configSizer = new wxGridSizer(4, 1);
-
-    /*
-     * Configure log level combo box.
-     */
-    wxComboBox* logLevel;
-    int defaultLogLevel = 1;
-    pPrefs->GetInt("log-display-level", &defaultLogLevel);
-    logLevel = new wxComboBox(base, IDC_LOG_LEVEL, wxT(""),
-        wxDefaultPosition, wxDefaultSize, 0, NULL,
-        wxCB_READONLY /*| wxSUNKEN_BORDER*/);
-    for (int i = 0; i < NELEM(gLogLevels); i++) {
-        logLevel->Append(gLogLevels[i].name);
-        logLevel->SetClientData(i, (void*) gLogLevels[i].priority);
-    }
-    logLevel->SetSelection(defaultLogLevel);
-    mMinPriority = gLogLevels[defaultLogLevel].priority;
-
-    /*
-     * Set up stuff at the bottom, starting with the options
-     * at the bottom left.
-     */
-    configPrioritySizer->Add(new wxStaticText(base, wxID_ANY, wxT("Log level:"),
-            wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT),
-        0, wxALIGN_CENTER_VERTICAL);
-    configPrioritySizer->AddSpacer(kInterSpacing);
-    configPrioritySizer->Add(logLevel);
-
-    wxButton* clear = new wxButton(base, IDC_LOG_CLEAR, wxT("&Clear"),
-        wxDefaultPosition, wxDefaultSize, 0);
-    wxButton* pause = new wxButton(base, IDC_LOG_PAUSE, wxT("&Pause"),
-        wxDefaultPosition, wxDefaultSize, 0);
-    wxButton* prefs = new wxButton(base, IDC_LOG_PREFS, wxT("C&onfigure"),
-        wxDefaultPosition, wxDefaultSize, 0);
-
-    configSizer->Add(configPrioritySizer, 0, wxALIGN_LEFT);
-    configSizer->Add(clear, 0, wxALIGN_CENTER);
-    configSizer->Add(pause, 0, wxALIGN_CENTER);
-    configSizer->Add(prefs, 0, wxALIGN_RIGHT);
-
-    /*
-     * Create text ctrl.
-     */
-    wxTextCtrl* pTextCtrl;
-    pTextCtrl = new wxTextCtrl(base, IDC_LOG_TEXT, wxT(""),
-        wxDefaultPosition, wxDefaultSize,
-        wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2 | wxTE_NOHIDESEL |
-            wxHSCROLL);
-
-    /*
-     * Add components to master sizer.
-     */
-    masterSizer->AddSpacer(kEdgeSpacing);
-    masterSizer->Add(pTextCtrl, 1, wxEXPAND);
-    masterSizer->AddSpacer(kInterSpacing);
-    masterSizer->Add(configSizer, 0, wxEXPAND);
-    masterSizer->AddSpacer(kEdgeSpacing);
-
-    /*
-     * Indent from sides.
-     */
-    indentSizer->AddSpacer(kEdgeSpacing);
-    indentSizer->Add(masterSizer, 1, wxEXPAND);
-    indentSizer->AddSpacer(kEdgeSpacing);
-
-    base->SetSizer(indentSizer);
-
-    indentSizer->Fit(this);             // shrink-to-fit
-    indentSizer->SetSizeHints(this);    // define minimum size
-}
-
-/*
- * In some cases, this means the user has clicked on our "close" button.
- * We don't really even want one, but both WinXP and KDE put one on our
- * window whether we want it or not.  So, we make it work as a "hide"
- * button instead.
- *
- * This also gets called when the app is shutting down, and we do want
- * to destroy ourselves then, saving various information about our state.
- */
-void LogWindow::OnClose(wxCloseEvent& event)
-{
-    /* just hide the window, unless we're shutting down */
-    if (event.CanVeto()) {
-        event.Veto();
-        Show(false);
-        return;
-    }
-
-    /*
-     * Save some preferences.
-     */
-    SaveWindowPrefs();
-
-    /* if we can't veto the Close(), destroy ourselves */
-    Destroy();
-}
-
-/*
- * Save all of our preferences to the config file.
- */
-void LogWindow::SaveWindowPrefs(void)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-
-    /*
-     * Save shown/hidden state.
-     */
-    pPrefs->SetBool("window-log-show", IsShown());
-
-    /*
-     * Limits and formatting prefs.
-     */
-    pPrefs->SetInt("log-display-msg-count", mMaxDisplayMsgs);
-    pPrefs->SetInt("log-pool-size-kbytes", mPool.GetMaxSize() / 1024);
-
-    pPrefs->SetInt("log-header-format", mHeaderFormat);
-    pPrefs->SetBool("log-single-line", mSingleLine);
-    pPrefs->SetInt("log-extra-spacing", mExtraSpacing);
-    pPrefs->SetInt("log-point-size", mPointSize);
-    pPrefs->SetBool("log-use-color", mUseColor);
-    pPrefs->SetBool("log-font-monospace", mFontMonospace);
-
-    pPrefs->SetBool("log-write-file", mWriteFile);
-    pPrefs->SetString("log-filename", mFileName.ToAscii());
-    pPrefs->SetBool("log-truncate-old", mTruncateOld);
-
-    /*
-     * Save window size and position.
-     */
-    wxPoint posn;
-    wxSize size;
-
-    assert(pPrefs != NULL);
-
-    posn = GetPosition();
-    size = GetSize();
-
-    pPrefs->SetInt("window-log-x", posn.x);
-    pPrefs->SetInt("window-log-y", posn.y);
-    pPrefs->SetInt("window-log-width", size.GetWidth());
-    pPrefs->SetInt("window-log-height", size.GetHeight());
-
-    /*
-     * Save current setting of debug level combo box.
-     */
-    wxComboBox* pCombo;
-    int selection;
-    pCombo = (wxComboBox*) FindWindow(IDC_LOG_LEVEL);
-    selection = pCombo->GetSelection();
-    pPrefs->SetInt("log-display-level", selection);
-}
-
-/*
- * Return the desired position and size.
- */
-/*static*/ wxRect LogWindow::GetPrefWindowRect(void)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    int x, y, width, height;
-
-    assert(pPrefs != NULL);
-
-    x = y = 10;
-    width = 500;
-    height = 200;
-
-    /* these don't modify the arg if the pref doesn't exist */
-    pPrefs->GetInt("window-log-x", &x);
-    pPrefs->GetInt("window-log-y", &y);
-    pPrefs->GetInt("window-log-width", &width);
-    pPrefs->GetInt("window-log-height", &height);
-
-    return wxRect(x, y, width, height);
-}
-
-/*
- * Under Linux+GTK, the first time you show the window, it appears where
- * it's supposed to.  If you then hide it and show it again, it gets
- * moved on top of the parent window.  After that, you can reposition it
- * and it remembers its position across hide/show.
- *
- * To counter this annoyance, we save the position when we hide, and
- * reset the position after a show.  The "newly shown" flag ensures that
- * we only reposition the window as the result of a Show(true) call.
- *
- * Sometimes, something helpful will shift the window over if it's
- * partially straddling a seam between two monitors.  I don't see an easy
- * way to block this, and I'm not sure I want to anyway.
- */
-void LogWindow::OnMove(wxMoveEvent& event)
-{
-    wxPoint point;
-    point = event.GetPosition();
-    //printf("Sim: log window is at (%d,%d) (new=%d)\n", point.x, point.y,
-    //    mNewlyShown);
-
-    if (mNewlyShown) {
-        if (mLastPosition == wxDefaultPosition) {
-            //printf("Sim: no last position established\n");
-        } else {
-            Move(mLastPosition);
-        }
-
-        mNewlyShown = false;
-    }
-}
-
-/*
- * Set the "newly shown" flag.
- */
-bool LogWindow::Show(bool show)
-{
-    if (show) {
-        mNewlyShown = true;
-        Redisplay();
-    } else {
-        mLastPosition = GetPosition();
-    }
-
-    mVisible = show;
-    return wxDialog::Show(show);
-}
-
-/*
- * User has adjusted the log level.  Update the display appropriately.
- *
- * This is a wxEVT_COMMAND_COMBOBOX_SELECTED event.
- */
-void LogWindow::OnLogLevel(wxCommandEvent& event)
-{
-    int selection;
-    android_LogPriority priority;
-
-    selection = event.GetInt();
-    wxComboBox* pCombo = (wxComboBox*) FindWindow(IDC_LOG_LEVEL);
-    priority = (android_LogPriority) (long)pCombo->GetClientData(event.GetInt());
-
-    printf("Sim: log level selected: %d (%s)\n", (int) priority,
-        (const char*) gLogLevels[selection].name.ToAscii());
-    mMinPriority = priority;
-    Redisplay();
-}
-
-/*
- * Clear out the log.
- */
-void LogWindow::OnLogClear(wxCommandEvent& event)
-{
-    ClearDisplay();
-    mPool.Clear();
-}
-
-/*
- * Handle the pause/resume button.
- *
- * If we're un-pausing, we need to get caught up.
- */
-void LogWindow::OnLogPause(wxCommandEvent& event)
-{
-    mPaused = !mPaused;
-
-    wxButton* pButton = (wxButton*) FindWindow(IDC_LOG_PAUSE);
-    if (mPaused) {
-        pButton->SetLabel(wxT("&Resume"));
-
-        mPool.SetBookmark();
-    } else {
-        pButton->SetLabel(wxT("&Pause"));
-
-        LogMessage* pMsg = mPool.GetBookmark();
-        if (pMsg == NULL) {
-            /* bookmarked item fell out of pool */
-            printf("--- bookmark was lost, redisplaying\n");
-            Redisplay();
-        } else {
-            /*
-             * The bookmark points to the last item added to the display.
-             * We want to chase its "prev" pointer to walk toward the head
-             * of the list, adding items from oldest to newest.
-             */
-            pMsg = pMsg->GetPrev();
-            while (pMsg != NULL) {
-                if (FilterMatches(pMsg))
-                    AddToDisplay(pMsg);
-                pMsg = pMsg->GetPrev();
-            }
-        }
-    }
-}
-
-/*
- * Open log preferences dialog.
- */
-void LogWindow::OnLogPrefs(wxCommandEvent& event)
-{
-    LogPrefsDialog dialog(this);
-
-    /*
-     * Set up the dialog.
-     */
-    dialog.mHeaderFormat = mHeaderFormat;
-    dialog.mSingleLine = mSingleLine;
-    dialog.mExtraSpacing = mExtraSpacing;
-    dialog.mPointSize = mPointSize;
-    dialog.mUseColor = mUseColor;
-    dialog.mFontMonospace = mFontMonospace;
-
-    dialog.mDisplayMax = mMaxDisplayMsgs;
-    dialog.mPoolSizeKB = mPool.GetMaxSize() / 1024;
-
-    dialog.mWriteFile = mWriteFile;
-    dialog.mFileName = mFileName;
-    dialog.mTruncateOld = mTruncateOld;
-
-    /*
-     * Show it.  If they hit "OK", copy the updated values out, and
-     * re-display the log output.
-     */
-    if (dialog.ShowModal() == wxID_OK) {
-        /* discard old display arra */
-        ClearDisplay();
-        delete[] mDisplayArray;
-
-        mHeaderFormat = dialog.mHeaderFormat;
-        mSingleLine = dialog.mSingleLine;
-        mExtraSpacing = dialog.mExtraSpacing;
-        mPointSize = dialog.mPointSize;
-        mUseColor = dialog.mUseColor;
-        mFontMonospace = dialog.mFontMonospace;
-
-        assert(dialog.mDisplayMax > 0);
-        assert(dialog.mPoolSizeKB > 0);
-        mMaxDisplayMsgs = dialog.mDisplayMax;
-        mPool.Resize(dialog.mPoolSizeKB * 1024);
-
-        mWriteFile = dialog.mWriteFile;
-        if (mLogFp != NULL && mFileName != dialog.mFileName) {
-            printf("--- log file name changed, closing\n");
-            fclose(mLogFp);
-            mLogFp = NULL;
-        }
-        mFileName = dialog.mFileName;
-        mTruncateOld = dialog.mTruncateOld;
-
-        mDisplayArray = new LogMessage*[mMaxDisplayMsgs];
-        memset(mDisplayArray, 0, sizeof(LogMessage*) * mMaxDisplayMsgs);
-        Redisplay();
-
-        PrepareLogFile();
-    }
-}
-
-/*
- * Handle a log message "user event".  This should only be called in
- * the main UI thread.
- *
- * We take ownership of "*pLogMessage".
- */
-void LogWindow::AddLogMessage(LogMessage* pLogMessage)
-{
-    mPool.Add(pLogMessage);
-
-    if (!mPaused && mVisible && FilterMatches(pLogMessage)) {
-        /*
-         * Thought: keep a reference to the previous message.  If it
-         * matches in most fields (all except timestamp?), hold it and
-         * increment a counter.  If we get a message that doesn't match,
-         * or a timer elapses, synthesize a "previous message repeated N
-         * times" string.
-         */
-        AddToDisplay(pLogMessage);
-    }
-
-    // release the initial ref caused by allocation
-    pLogMessage->Release();
-
-    if (mLogFp != NULL)
-        LogToFile(pLogMessage);
-}
-
-/*
- * Clear out the display, releasing any log messages held in the display
- * array.
- */
-void LogWindow::ClearDisplay(void)
-{
-    wxTextCtrl* pTextCtrl;
-    pTextCtrl = (wxTextCtrl*) FindWindow(IDC_LOG_TEXT);
-    pTextCtrl->Clear();
-
-    /*
-     * Just run through the entire array.
-     */
-    for (int i = 0; i < mMaxDisplayMsgs; i++) {
-        if (mDisplayArray[i] != NULL) {
-            mDisplayArray[i]->Release();
-            mDisplayArray[i] = NULL;
-        }
-    }
-    mTopPtr = -1;
-    mNextPtr = 0;
-}
-
-/*
- * Clear the current display and regenerate it from the log pool.  We need
- * to do this whenever we change filters or log message formatting.
- */
-void LogWindow::Redisplay(void)
-{
-    /*
-     * Freeze output rendering so it doesn't flash during update.  Doesn't
-     * seem to help for GTK, and it leaves garbage on the screen in WinXP,
-     * so I'm leaving it commented out.
-     */
-    //wxTextCtrl* pText = (wxTextCtrl*) FindWindow(IDC_LOG_TEXT);
-    //pText->Freeze();
-
-    //printf("--- redisplay\n");
-    ClearDisplay();
-
-    /*
-     * Set up the default wxWidgets text style stuff.
-     */
-    SetTextStyle();
-
-    /*
-     * Here's the plan:
-     * - Start at the head of the pool (where the most recently added
-     *   items are).
-     * - Check to see if the current item passes our filter.  If it does,
-     *   increment the "found count".
-     * - Continue in this manner until we run out of pool or have
-     *   sufficient items to fill the screen.
-     * - Starting from the current position, walk back toward the head,
-     *   adding the items that meet the current filter criteria.
-     *
-     * Don't forget that the log pool could be empty.
-     */
-    LogMessage* pMsg = mPool.GetHead();
-
-    if (pMsg != NULL) {
-        int foundCount = 0;
-
-        // note this stops before it runs off the end
-        while (pMsg->GetNext() != NULL && foundCount < mMaxDisplayMsgs) {
-            if (FilterMatches(pMsg))
-                foundCount++;
-            pMsg = pMsg->GetNext();
-        }
-
-        while (pMsg != NULL) {
-            if (FilterMatches(pMsg))
-                AddToDisplay(pMsg);
-            pMsg = pMsg->GetPrev();
-        }
-    }
-
-    //pText->Thaw();
-}
-
-
-/*
- * Returns "true" if the currently specified filters would allow this
- * message to be shown.
- */
-bool LogWindow::FilterMatches(const LogMessage* pLogMessage)
-{
-    if (pLogMessage->GetPriority() >= mMinPriority)
-        return true;
-    else
-        return false;
-}
-
-/*
- * Realloc the array of pointers, and remove anything from the display
- * that should no longer be there.
- */
-void LogWindow::SetMaxDisplayMsgs(int max)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-
-    pPrefs->SetInt("log-display-msg-count", max);
-}
-
-/*
- * Add the message to the display array and to the screen.
- */
-void LogWindow::AddToDisplay(LogMessage* pLogMessage)
-{
-    wxTextCtrl* pTextCtrl;
-    pTextCtrl = (wxTextCtrl*) FindWindow(IDC_LOG_TEXT);
-
-    if (mNextPtr == mTopPtr) {
-        /*
-         * The display array is full.
-         *
-         * We need to eliminate the topmost entry.  This requires removing
-         * it from the array and removing the text from the wxTextCtrl.
-         */
-        pTextCtrl->Remove(0, mDisplayArray[mTopPtr]->GetTextCtrlLen());
-        mDisplayArray[mTopPtr]->Release();
-        mTopPtr = (mTopPtr + 1) % mMaxDisplayMsgs;
-    }
-
-    /*
-     * Add formatted text to the text ctrl.  Track how much actual space
-     * is required.  The space may be different on Win32 (CRLF-based) vs.
-     * GTK (LF-based), so we need to measure it, not compute it from the
-     * text string.
-     */
-    long lastBefore, lastAfter;
-    //long insertBefore;
-    //insertBefore = pTextCtrl->GetInsertionPoint();
-    lastBefore = pTextCtrl->GetLastPosition();
-    FormatMessage(pLogMessage, pTextCtrl);
-    lastAfter = pTextCtrl->GetLastPosition();
-    pLogMessage->SetTextCtrlLen(lastAfter - lastBefore);
-
-    /*
-     * If we restore the old insertion point, we will be glued to where
-     * we were.  This is okay until we start deleting text from the top,
-     * at which point we need to adjust it to retain our position.
-     *
-     * If we set the insertion point to the bottom, we effectively
-     * implement "scroll to bottom on output".
-     *
-     * If we don't set it at all, we get slightly strange behavior out
-     * of GTK, which seems to be par for the course here.
-     */
-    //pTextCtrl->SetInsertionPoint(insertBefore);     // restore insertion pt
-    pTextCtrl->SetInsertionPoint(lastAfter);
-
-    /* add it to array, claim ownership */
-    mDisplayArray[mNextPtr] = pLogMessage;
-    pLogMessage->Acquire();
-
-    /* adjust pointers */
-    if (mTopPtr < 0)        // first time only
-        mTopPtr = 0;
-    mNextPtr = (mNextPtr + 1) % mMaxDisplayMsgs;
-}
-
-
-/*
- * Return a human-readable string for the priority level.  Always returns
- * a valid string.
- */
-static const wxCharBuffer GetPriorityString(android_LogPriority priority)
-{
-    int idx;
-
-    idx = (int) priority - (int) ANDROID_LOG_VERBOSE;
-    if (idx < 0 || idx >= NELEM(gLogLevels))
-        return "?unknown?";
-    return gLogLevels[idx].name.ToAscii();
-}
-
-/*
- * Format a message and write it to the text control.
- */
-void LogWindow::FormatMessage(const LogMessage* pLogMessage, 
-    wxTextCtrl* pTextCtrl)
-{
-#if defined(HAVE_LOCALTIME_R)
-    struct tm tmBuf;
-#endif
-    struct tm* ptm;
-    char timeBuf[32];
-    char msgBuf[256];
-    int msgLen = 0;
-    char* outBuf;
-    char priChar;
-    LogPrefsDialog::HeaderFormat headerFmt;
-
-    headerFmt = mHeaderFormat;
-    if (pLogMessage->GetInternal())
-        headerFmt = LogPrefsDialog::kHFInternal;
-
-    priChar = ((const char*)GetPriorityString(pLogMessage->GetPriority()))[0];
-
-    /*
-     * Get the current date/time in pretty form
-     *
-     * It's often useful when examining a log with "less" to jump to
-     * a specific point in the file by searching for the date/time stamp.
-     * For this reason it's very annoying to have regexp meta characters
-     * in the time stamp.  Don't use forward slashes, parenthesis,
-     * brackets, asterisks, or other special chars here.
-     */
-    time_t when = pLogMessage->GetWhen();
-    const char* fmt = NULL;
-#if defined(HAVE_LOCALTIME_R)
-    ptm = localtime_r(&when, &tmBuf);
-#else
-    ptm = localtime(&when);
-#endif
-    switch (headerFmt) {
-    case LogPrefsDialog::kHFFull:
-    case LogPrefsDialog::kHFInternal:
-        fmt = "%m-%d %H:%M:%S";
-        break;
-    case LogPrefsDialog::kHFBrief:
-    case LogPrefsDialog::kHFMinimal:
-        fmt = "%H:%M:%S";
-        break;
-    default:
-        break;
-    }
-    if (fmt != NULL)
-        strftime(timeBuf, sizeof(timeBuf), fmt, ptm);
-    else
-        strcpy(timeBuf, "-");
-
-    const int kMaxExtraNewlines = 2;
-    char hdrNewline[2];
-    char finalNewlines[kMaxExtraNewlines+1 +1];
-
-    if (mSingleLine)
-        hdrNewline[0] = ' ';
-    else
-        hdrNewline[0] = '\n';
-    hdrNewline[1] = '\0';
-
-    assert(mExtraSpacing <= kMaxExtraNewlines);
-    int i;
-    for (i = 0; i < mExtraSpacing+1; i++)
-        finalNewlines[i] = '\n';
-    finalNewlines[i] = '\0';
-
-    wxTextAttr msgColor;
-    switch (pLogMessage->GetPriority()) {
-    case ANDROID_LOG_WARN:
-        msgColor.SetTextColour(*wxBLUE);
-        break;
-    case ANDROID_LOG_ERROR:
-        msgColor.SetTextColour(*wxRED);
-        break;
-    case ANDROID_LOG_VERBOSE:
-    case ANDROID_LOG_DEBUG:
-    case ANDROID_LOG_INFO:
-    default:
-        msgColor.SetTextColour(*wxBLACK);
-        break;
-    }
-    if (pLogMessage->GetInternal())
-        msgColor.SetTextColour(*wxGREEN);
-
-    /*
-     * Construct a buffer containing the log header.
-     */
-    bool splitHeader = true;
-    outBuf = msgBuf;
-    switch (headerFmt) {
-    case LogPrefsDialog::kHFFull:
-        splitHeader = true;
-        msgLen = android_snprintfBuffer(&outBuf, sizeof(msgBuf),
-                    "[ %s %5d %c/%-6.6s]%s",
-                    timeBuf, pLogMessage->GetPid(), priChar,
-                    pLogMessage->GetTag(), hdrNewline);
-        break;
-    case LogPrefsDialog::kHFBrief:
-        splitHeader = true;
-        msgLen = android_snprintfBuffer(&outBuf, sizeof(msgBuf),
-                    "[%s %5d]%s",
-                    timeBuf, pLogMessage->GetPid(), hdrNewline);
-        break;
-    case LogPrefsDialog::kHFMinimal:
-        splitHeader = false;
-        msgLen = android_snprintfBuffer(&outBuf, sizeof(msgBuf),
-                    "%s %5d- %s",
-                    timeBuf, pLogMessage->GetPid(), pLogMessage->GetMsg());
-        break;
-    case LogPrefsDialog::kHFInternal:
-        splitHeader = false;
-        msgLen = android_snprintfBuffer(&outBuf, sizeof(msgBuf),
-                    "[%s] %s", timeBuf, pLogMessage->GetMsg());
-        break;
-    default:
-        fprintf(stderr, "Sim: unexpected header format %d\n", headerFmt);
-        assert(false);
-        break;
-    }
-
-    if (msgLen < 0) {
-        fprintf(stderr, "WHOOPS\n");
-        assert(outBuf == msgBuf);
-        return;
-    }
-
-    if (splitHeader) {
-        if (mUseColor)
-            pTextCtrl->SetDefaultStyle(wxTextAttr(*wxLIGHT_GREY));
-        pTextCtrl->AppendText(wxString::FromAscii(outBuf));
-        if (mUseColor)
-            pTextCtrl->SetDefaultStyle(msgColor);
-        pTextCtrl->AppendText(wxString::FromAscii(pLogMessage->GetMsg()));
-        if (mUseColor)
-            pTextCtrl->SetDefaultStyle(*wxBLACK);
-        pTextCtrl->AppendText(wxString::FromAscii(finalNewlines));
-    } else {
-        if (mUseColor)
-            pTextCtrl->SetDefaultStyle(msgColor);
-        pTextCtrl->AppendText(wxString::FromAscii(outBuf));
-        if (mUseColor)
-            pTextCtrl->SetDefaultStyle(*wxBLACK);
-        pTextCtrl->AppendText(wxString::FromAscii(finalNewlines));
-    }
-
-    /* if we allocated storage for this message, free it */
-    if (outBuf != msgBuf)
-        free(outBuf);
-}
-
-/*
- * Write the message to the log file.
- *
- * We can't just do this in FormatMessage(), because that re-writes all
- * messages on the display whenever the output format or filter changes.
- *
- * Use a one-log-per-line format here to make "grep" useful.
- */
-void LogWindow::LogToFile(const LogMessage* pLogMessage)
-{
-#if defined(HAVE_LOCALTIME_R)
-    struct tm tmBuf;
-#endif
-    struct tm* ptm;
-    char timeBuf[32];
-    char msgBuf[256];
-    int msgLen;
-    char* outBuf;
-    char priChar;
-
-    assert(mLogFp != NULL);
-
-    time_t when = pLogMessage->GetWhen();
-#if defined(HAVE_LOCALTIME_R)
-    ptm = localtime_r(&when, &tmBuf);
-#else
-    ptm = localtime(&when);
-#endif
-
-    strftime(timeBuf, sizeof(timeBuf), "%m-%d %H:%M:%S", ptm);
-    priChar = ((const char*)GetPriorityString(pLogMessage->GetPriority()))[0];
-
-    outBuf = msgBuf;
-    if (pLogMessage->GetInternal()) {
-        msgLen = android_snprintfBuffer(&outBuf, sizeof(msgBuf),
-                    "[%s %5d *] %s\n",
-                    timeBuf, pLogMessage->GetPid(), pLogMessage->GetMsg());
-    } else {
-        msgLen = android_snprintfBuffer(&outBuf, sizeof(msgBuf),
-                    "[%s %5d %c] %s)\n",
-                    timeBuf, pLogMessage->GetPid(), priChar,
-                    pLogMessage->GetMsg());
-    }
-    if (fwrite(outBuf, msgLen, 1, mLogFp) != 1)
-        fprintf(stderr, "Sim: WARNING: partial log write\n");
-    fflush(mLogFp);
-
-    /* if we allocated storage for this message, free it */
-    if (outBuf != msgBuf)
-        free(outBuf);
-}
-
-/*
- * Get the modification date of a file.
- */
-static bool GetFileModDate(const char* fileName, time_t* pModWhen)
-{
-    struct stat sb;
-
-    if (stat(fileName, &sb) < 0)
-        return false;
-
-    *pModWhen = sb.st_mtime;
-    return true;
-}
-
-/*
- * Open or close the log file as appropriate.
- */
-void LogWindow::PrepareLogFile(void)
-{
-    const int kLogFileMaxAge = 8 * 60 * 60;     // 8 hours
-
-    if (!mWriteFile && mLogFp != NULL) {
-        printf("Sim: closing log file\n");
-        fclose(mLogFp);
-        mLogFp = NULL;
-    } else if (mWriteFile && mLogFp == NULL) {
-        printf("Sim: opening log file '%s'\n", (const char*)mFileName.ToAscii());
-        time_t now, modWhen = 0;
-        const char* openFlags;
-
-        now = time(NULL);
-        if (!mTruncateOld ||
-            (GetFileModDate(mFileName.ToAscii(), &modWhen) &&
-             modWhen + kLogFileMaxAge > now))
-        {
-            if (modWhen != 0) {
-                printf("--- log file is %.3f hours old, appending\n",
-                    (now - modWhen) / 3600.0);
-            }
-            openFlags = "a";        // open for append (text mode)
-        } else {
-            if (modWhen != 0) {
-                printf("--- log file is %.3f hours old, truncating\n",
-                    (now - modWhen) / 3600.0);
-            }
-            openFlags = "w";        // open for writing, truncate (text mode)
-        }
-
-        mLogFp = fopen(mFileName.ToAscii(), openFlags);
-        if (mLogFp == NULL) {
-            fprintf(stderr, "Sim: failed opening log file '%s': %s\n",
-                (const char*) mFileName.ToAscii(), strerror(errno));
-        } else {
-            fprintf(mLogFp, "\n\n");
-            fflush(mLogFp);
-        }
-    }
-}
-
-/*
- * Add a new log message.
- *
- * This function can be called from any thread.  It makes a copy of the
- * stuff in "*pBundle" and sends it to the main UI thread.
- */
-/*static*/ void LogWindow::PostLogMsg(const android_LogBundle* pBundle)
-{
-    LogMessage* pNewMessage = LogMessage::Create(pBundle);
-
-    SendToWindow(pNewMessage);
-}
-
-/*
- * Post a simple string to the log.
- */
-/*static*/ void LogWindow::PostLogMsg(const char* msg)
-{
-    LogMessage* pNewMessage = LogMessage::Create(msg);
-
-    SendToWindow(pNewMessage);
-}
-
-/*
- * Post a simple wxString to the log.
- */
-/*static*/ void LogWindow::PostLogMsg(const wxString& msg)
-{
-    LogMessage* pNewMessage = LogMessage::Create(msg.ToAscii());
-
-    SendToWindow(pNewMessage);
-}
-
-/*
- * Send a log message to the log window.
- */
-/*static*/ void LogWindow::SendToWindow(LogMessage* pMessage)
-{
-    if (pMessage != NULL) {
-        wxWindow* pMainFrame = ((MyApp*)wxTheApp)->GetMainFrame();
-        UserEventMessage* pUem = new UserEventMessage;
-        pUem->CreateLogMessage(pMessage);
-
-        UserEvent uev(0, (void*) pUem);
-
-        pMainFrame->AddPendingEvent(uev);
-    } else {
-        fprintf(stderr, "Sim: failed to add new log message\n");
-    }
-}
-
-
-/*
- * This is a sanity check.  We need to stop somewhere to avoid trashing
- * the system on bad input.
- */
-#define kMaxLen 65536
-
-#define VSNPRINTF vsnprintf     // used to worry about _vsnprintf
-
-
-/*
- * Print a formatted message into a buffer.  Pass in a buffer to try to use.
- *
- * If the buffer isn't big enough to hold the message, allocate storage
- * with malloc() and return that instead.  The caller is responsible for
- * freeing the storage.
- *
- * Returns the length of the string, or -1 if the printf call failed.
- */
-static int android_vsnprintfBuffer(char** pBuf, int bufLen, const char* format, va_list args)
-{
-    int charsOut;
-    char* localBuf = NULL;
-
-    assert(pBuf != NULL && *pBuf != NULL);
-    assert(bufLen > 0);
-    assert(format != NULL);
-
-    while (1) {
-        /*
-         * In some versions of libc, vsnprintf only returns 0 or -1, where
-         * -1 indicates the the buffer wasn't big enough.  In glibc 2.1
-         * and later, it returns the actual size needed.
-         *
-         * MinGW is just returning -1, so we have to retry there.
-         */
-        char* newBuf;
-
-        charsOut = VSNPRINTF(*pBuf, bufLen, format, args);
-
-        if (charsOut >= 0 && charsOut < bufLen)
-            break;
-
-        //fprintf(stderr, "EXCEED: %d vs %d\n", charsOut, bufLen);
-        if (charsOut < 0) {
-            /* exact size not known, double previous size */
-            bufLen *= 2;
-            if (bufLen > kMaxLen)
-                goto fail;
-        } else {
-            /* exact size known, just use that */
-
-            bufLen = charsOut + 1;
-        }
-        //fprintf(stderr, "RETRY at %d\n", bufLen);
-
-        newBuf = (char*) realloc(localBuf, bufLen);
-        if (newBuf == NULL)
-            goto fail;
-        *pBuf = localBuf = newBuf;
-    }
-
-    // On platforms where snprintf() doesn't return the number of
-    // characters output, we would need to call strlen() here.
-
-    return charsOut;
-
-fail:
-    if (localBuf != NULL) {
-        free(localBuf);
-        *pBuf = NULL;
-    }
-    return -1;
-}
-
-/*
- * Variable-arg form of the above.
- */
-static int android_snprintfBuffer(char** pBuf, int bufLen, const char* format, ...)
-{
-    va_list args;
-    int result;
-
-    va_start(args, format);
-    result = android_vsnprintfBuffer(pBuf, bufLen, format, args);
-    va_end(args);
-
-    return result;
-}
-
-
diff --git a/simulator/app/LogWindow.h b/simulator/app/LogWindow.h
deleted file mode 100644
index ca9f133..0000000
--- a/simulator/app/LogWindow.h
+++ /dev/null
@@ -1,127 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Window with log output.
-//
-#ifndef _SIM_LOG_WINDOW_H
-#define _SIM_LOG_WINDOW_H
-
-#include "PhoneData.h"
-#include "UserEvent.h"
-#include "LogMessage.h"
-#include "LogPool.h"
-#include "LogPrefsDialog.h"
-
-
-/*
- * Display log output from runtime process.
- *
- * We receive the messages broken into components (date, log level, tag,
- * function name, etc.) and do the formatting ourselves.  We receive all
- * messages regardless of log level, and provide filter controls in the
- * window.
- *
- * Messages are stored in a "log pool", which has a fixed memory footprint.
- * The messages that are currently visible in the log output window are
- * also pointed at from a fixed-size display array.  Changes to output
- * format cause us to clear the display and re-show everything in the
- * display array, while changes to the output filter cause us to
- * re-evaluate the contents of the display pool.
- */
-class LogWindow : public wxDialog {
-public:
-    LogWindow(wxWindow* parent);
-    virtual ~LogWindow(void);
-
-    /* we override this, to cope with annoying GTK behavior */
-    virtual bool Show(bool show = true);
-
-    /* return preferred size and position */
-    static wxRect GetPrefWindowRect(void);
-
-    /* handle a log message "user event" */
-    void AddLogMessage(LogMessage* pLogMessage);
-
-    /* resize the display messages array */
-    void SetMaxDisplayMsgs(int max);
-
-    /* post a message to the log; may be called from non-main thread */
-    static void PostLogMsg(const android_LogBundle* pBundle);
-    static void PostLogMsg(const wxString& msg);
-    static void PostLogMsg(const char* msg);
-
-private:
-    void OnMove(wxMoveEvent& event);
-    void OnClose(wxCloseEvent& event);
-    void OnLogLevel(wxCommandEvent& event);
-    void OnLogClear(wxCommandEvent& event);
-    void OnLogPause(wxCommandEvent& event);
-    void OnLogPrefs(wxCommandEvent& event);
-
-    /* handle incoming log message */
-    void OnUserEvent(UserEvent& event);
-
-    void SaveWindowPrefs(void);
-    void ConstructControls(void);
-
-    void AddToDisplay(LogMessage* pLogMessage);
-    void ClearDisplay(void);
-    void Redisplay(void);
-    void SetTextStyle(void);
-
-    bool FilterMatches(const LogMessage* pLogMessage);
-
-    void FormatMessage(const LogMessage* pLogMessage, 
-        wxTextCtrl* pTextCtrl);
-
-    void LogToFile(const LogMessage* pLogMessage);
-    void PrepareLogFile(void);
-    static void SendToWindow(LogMessage* pMessage);
-
-    /*
-     * Message pool.
-     */
-    LogPool     mPool;
-
-    /*
-     * Display array.  This is a fixed-size circular array that holds
-     * pointers to the log messages currently displayed on screen.
-     */
-    LogMessage**    mDisplayArray;      // ptrs to messages currently displayed
-    int         mMaxDisplayMsgs;        // max #of messages
-    int         mTopPtr;                // index of top message
-    int         mNextPtr;               // index of next empty slot
-
-    bool        mPaused;                // is output paused for review?
-
-    /*
-     * Current filter.
-     */
-    android_LogPriority mMinPriority;   // messages at or above are shown
-
-    /* format options */
-    LogPrefsDialog::HeaderFormat mHeaderFormat;
-    bool        mSingleLine;            // put whole message on one line?
-    int         mExtraSpacing;          // double/triple-space messages?
-    int         mPointSize;             // text point size;
-    bool        mUseColor;              // colorful messages?
-    bool        mFontMonospace;         // use monospace font?
-
-    /* log file options */
-    bool        mWriteFile;
-    wxString    mFileName;
-    bool        mTruncateOld;
-
-    FILE*       mLogFp;
-
-    /*
-     * Window position stuff.
-     */
-    bool        mNewlyShown;
-    wxPoint     mLastPosition;
-    bool        mVisible;
-
-    DECLARE_EVENT_TABLE()
-};
-
-#endif // _SIM_LOG_WINDOW_H
diff --git a/simulator/app/MainFrame.cpp b/simulator/app/MainFrame.cpp
deleted file mode 100644
index b13caab..0000000
--- a/simulator/app/MainFrame.cpp
+++ /dev/null
@@ -1,1462 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Main window, menu bar, and associated goodies.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/button.h"
-#include "wx/help.h"
-#include "wx/filedlg.h"
-#include "wx/slider.h"
-#include "wx/textctrl.h"
-
-#include "MainFrame.h"
-#include "MyApp.h"
-#include "Resource.h"
-#include "PhoneCollection.h"
-#include "PhoneData.h"
-#include "PhoneWindow.h"
-#include "DeviceWindow.h"
-#include "UserEventMessage.h"
-#include "PrefsDialog.h"
-
-#include "SimRuntime.h"
-
-
-static wxString kStatusNotRunning = wxT("Idle");
-static wxString kStatusRunning = wxT("Run");
-
-static wxString kDeviceMenuString = wxT("&Device");
-
-static const wxString gStdJavaApps[] = {
-    wxT(""),
-    wxT("com.android.testharness.TestList"),
-    wxT("com.android.apps.contacts.ContactsList"),
-    wxT("mikeapp")
-};
-
-
-BEGIN_EVENT_TABLE(MainFrame::MainFrame, wxFrame)
-    EVT_CLOSE(MainFrame::OnClose)
-    EVT_TIMER(kHalfSecondTimerId, MainFrame::OnTimer)
-    //EVT_IDLE(MainFrame::OnIdle)
-  
-    EVT_ACTIVATE(MainFrame::OnActivate)
-    EVT_ACTIVATE_APP(MainFrame::OnActivate)
-    EVT_COMBOBOX(IDC_MODE_SELECT, MainFrame::OnComboBox)
-    EVT_COMBOBOX(IDC_JAVA_VM, MainFrame::OnComboBox)
-    EVT_CHECKBOX(IDC_USE_GDB, MainFrame::OnCheckBox)
-    EVT_CHECKBOX(IDC_USE_VALGRIND, MainFrame::OnCheckBox)
-    EVT_CHECKBOX(IDC_CHECK_JNI, MainFrame::OnCheckBox)
-    EVT_CHECKBOX(IDC_OVERLAY_ONION_SKIN, MainFrame::OnCheckBox)
-    EVT_TEXT(IDC_JAVA_APP_NAME, MainFrame::OnText)
-    EVT_TEXT_ENTER(IDC_ONION_SKIN_FILE_NAME, MainFrame::OnTextEnter)
-    EVT_BUTTON(IDC_ONION_SKIN_BUTTON, MainFrame::OnButton)
-    EVT_COMMAND_SCROLL(IDC_ONION_SKIN_ALPHA_VAL, MainFrame::OnSliderChange)
-
-    EVT_MENU(IDM_FILE_PREFERENCES, MainFrame::OnFilePreferences)
-    EVT_MENU(IDM_FILE_EXIT, MainFrame::OnFileExit)
-    EVT_MENU(IDM_RUNTIME_START, MainFrame::OnSimStart)
-    EVT_UPDATE_UI(IDM_RUNTIME_START, MainFrame::OnUpdateSimStart)
-    EVT_MENU(IDM_RUNTIME_STOP, MainFrame::OnSimStop)
-    EVT_UPDATE_UI(IDM_RUNTIME_STOP, MainFrame::OnUpdateSimStop)
-    EVT_MENU(IDM_RUNTIME_RESTART, MainFrame::OnSimRestart)
-    EVT_UPDATE_UI(IDM_RUNTIME_RESTART, MainFrame::OnUpdateSimRestart)
-    EVT_MENU(IDM_RUNTIME_KILL, MainFrame::OnSimKill)
-    EVT_UPDATE_UI(IDM_RUNTIME_KILL, MainFrame::OnUpdateSimKill)
-    EVT_MENU_RANGE(IDM_DEVICE_SEL0, IDM_DEVICE_SELN,
-        MainFrame::OnDeviceSelected)
-    EVT_MENU(IDM_DEVICE_RESCAN, MainFrame::OnDeviceRescan)
-    EVT_UPDATE_UI(IDM_DEBUG_SHOW_LOG, MainFrame::OnUpdateDebugShowLog)
-    EVT_MENU(IDM_DEBUG_SHOW_LOG, MainFrame::OnDebugShowLog)
-    EVT_MENU(IDM_HELP_CONTENTS, MainFrame::OnHelpContents)
-    EVT_MENU(IDM_HELP_ABOUT, MainFrame::OnHelpAbout)
-
-    EVT_USER_EVENT(MainFrame::OnUserEvent)
-END_EVENT_TABLE()
-
-
-/*
- * Main window constructor.
- *
- * Creates menus and status bar.
- */
-MainFrame::MainFrame(const wxString& title, const wxPoint& pos,
-    const wxSize& size, long style)
-    : wxFrame((wxFrame *)NULL, -1, title, pos, size, style),
-      mSimRunning(false),
-      mRestartRequested(false),
-      mpPhoneWindow(NULL),
-      mPhoneWindowPosn(wxDefaultPosition),
-      mTimer(this, kHalfSecondTimerId)
-{
-    mSimAssetPath = ((MyApp*)wxTheApp)->GetSimAssetPath();
-    mSimAssetPath += wxT("/simulator/default/default");
-
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    int val;
-
-    val = mPhoneWindowPosn.x;
-    pPrefs->GetInt("window-device-x", &val);
-    mPhoneWindowPosn.x = val;
-    val = mPhoneWindowPosn.y;
-    pPrefs->GetInt("window-device-y", &val);
-    mPhoneWindowPosn.y = val;
-
-    /*
-     * Create main menu.
-     */
-    ConstructMenu();
-
-    /*
-     * Create the status bar.
-     */
-    int widths[2] = { -1, 50 };
-    CreateStatusBar(2, wxFULL_REPAINT_ON_RESIZE);   // no wxST_SIZEGRIP
-    SetStatusWidths(2, widths);
-    SetStatusText(wxT("Ready"));
-    SetStatusText(kStatusNotRunning, 1);
-
-    /*
-     * Create main window controls.
-     */
-    ConstructControls();
-
-#if 0
-    /*
-     * Use the standard window color for the main frame (which usually
-     * has a darker color).  This has a dramatic effect under Windows.
-     */
-    wxColour color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
-    SetOwnBackgroundColour(color);
-#endif
-
-    /*
-     * Create the log window.
-     */
-    wxRect layout = LogWindow::GetPrefWindowRect();
-    mpLogWindow = new LogWindow(this);
-    mpLogWindow->Move(layout.GetTopLeft());
-    mpLogWindow->SetSize(layout.GetSize());
-    bool showLogWindow = true;
-    pPrefs->GetBool("window-log-show", &showLogWindow);
-    if (showLogWindow)
-        mpLogWindow->Show();
-
-    /*
-     * Set up a frequent timer.  We use this to keep our "run/idle"
-     * display up to date.  (Ideally this will go away.)
-     */
-    mTimer.Start(400);      // arg is delay in ms
-
-    /*
-     * Handle auto-power-on by sending ourselves an event.  That way it
-     * gets handled after window initialization finishes.
-     */
-    bool autoPowerOn = false;
-    pPrefs->GetBool("auto-power-on", &autoPowerOn);
-    if (autoPowerOn) {
-        printf("Sim: Auto power-up\n");
-        wxCommandEvent startEvent(wxEVT_COMMAND_MENU_SELECTED, IDM_RUNTIME_START);
-        this->AddPendingEvent(startEvent);
-    }
-
-    /*
-     * wxThread wants these to be on the heap -- it will call delete on the
-     * object when the thread exits.
-     */
-    mExternalRuntimeThread = new ExternalRuntime();
-    mExternalRuntimeThread->StartThread();
-    mPropertyServerThread = new PropertyServer();
-    mPropertyServerThread->StartThread();
-}
-
-/*
- * Construct the main menu.  Called from the constructor.
- */
-void MainFrame::ConstructMenu(void)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-
-    /*
-     * Scan for available phones.
-     */
-    PhoneCollection* pCollection = PhoneCollection::GetInstance();
-    pCollection->ScanForPhones(mSimAssetPath.ToAscii());
-
-    /*
-     * Create the "File" menu.
-     */
-    wxMenu* menuFile = new wxMenu;
-
-    menuFile->Append(IDM_FILE_PREFERENCES, wxT("&Preferences..."),
-        wxT("Edit simulator preferences"));
-    menuFile->AppendSeparator();
-    menuFile->Append(IDM_FILE_EXIT, wxT("E&xit\tCtrl-Q"),
-        wxT("Stop simulator and exit"));
-
-    /*
-     * Create the "Runtime" menu.
-     */
-    wxMenu* menuRuntime = new wxMenu;
-    menuRuntime->Append(IDM_RUNTIME_START, wxT("&Power On\tCtrl-G"),
-        wxT("Start the device"));
-//    menuRuntime->Append(IDM_RUNTIME_STOP, wxT("Power &Off"),
-//        wxT("Stop the device"));
-    menuRuntime->AppendSeparator();
-//    menuRuntime->Append(IDM_RUNTIME_RESTART, wxT("&Restart"),
-//        wxT("Restart the device"));
-    menuRuntime->Append(IDM_RUNTIME_KILL, wxT("&Kill\tCtrl-K"),
-        wxT("Kill the runtime processes"));
-
-    /*
-     * Create "Device" menu.
-     */
-    wxString defaultDevice = wxT("Sooner");
-    pPrefs->GetString("default-device", /*ref*/ defaultDevice);
-    wxMenu* menuDevice = CreateDeviceMenu(defaultDevice.ToAscii());
-
-    /*
-     * Create "Debug" menu.
-     */
-    wxMenu* menuDebug = new wxMenu;
-    menuDebug->AppendCheckItem(IDM_DEBUG_SHOW_LOG, wxT("View &Log Output"),
-        wxT("View log output window"));
-
-    /*
-     * Create the "Help" menu.
-     */
-    wxMenu* menuHelp = new wxMenu;
-    menuHelp->Append(IDM_HELP_CONTENTS, wxT("&Contents...\tF1"),
-        wxT("Simulator help"));
-    menuHelp->AppendSeparator();
-    menuHelp->Append(IDM_HELP_ABOUT, wxT("&About..."),
-        wxT("See the fabulous 'about' box"));
-
-    /*
-     * Create the menu bar.
-     */
-    wxMenuBar *menuBar = new wxMenuBar;
-    menuBar->Append(menuFile, wxT("&File"));
-    menuBar->Append(menuDevice, kDeviceMenuString);
-    menuBar->Append(menuRuntime, wxT("&Runtime"));
-    menuBar->Append(menuDebug, wxT("&Debug"));
-    menuBar->Append(menuHelp, wxT("&Help"));
-
-    SetMenuBar(menuBar);
-
-}
-
-/*
- * Construct the "device" menu from our phone collection.
- */
-wxMenu* MainFrame::CreateDeviceMenu(const char* defaultItemName)
-{
-    wxMenu* menuDevice = new wxMenu;
-    PhoneCollection* pCollection = PhoneCollection::GetInstance();
-    int defaultModel = 0;
-
-    for (int i = 0; i < pCollection->GetPhoneCount(); i++) {
-        PhoneData* pPhoneData = pCollection->GetPhoneData(i);
-        assert(pPhoneData != NULL);
-
-        menuDevice->AppendRadioItem(IDM_DEVICE_SEL0 + i,
-            wxString::FromAscii(pPhoneData->GetTitle()));
-
-        // use this one as default if the string matches
-        if (strcasecmp(pPhoneData->GetName(), defaultItemName) == 0)
-            defaultModel = i;
-    }
-
-    menuDevice->Check(IDM_DEVICE_SEL0 + defaultModel, true);
-
-    menuDevice->AppendSeparator();
-    menuDevice->Append(IDM_DEVICE_RESCAN, wxT("Re-scan"));
-
-    return menuDevice;
-}
-
-/*
- * Create some controls in the main window.
- *
- * The main frame doesn't use the normal background color that you find
- * in dialog windows, so we create a "panel" and put all the controls
- * on that.
- */
-void MainFrame::ConstructControls(void)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    wxPanel* base = new wxPanel(this, wxID_ANY);
-    wxBoxSizer* masterSizer = new wxBoxSizer(wxVERTICAL);
-    wxBoxSizer* tmpSizer;
-    wxStaticBoxSizer* displayOptSizer;
-    wxStaticBoxSizer* runtimeOptSizer;
-    wxStaticBoxSizer* onionSkinOptSizer;
-    wxComboBox* pModeSelection;
-    wxCheckBox* pUseGDB;
-    wxCheckBox* pUseValgrind;
-    wxCheckBox* pCheckJni;
-    wxCheckBox* pOverlayOnionSkin;
-    
-    displayOptSizer = new wxStaticBoxSizer(wxHORIZONTAL, base,
-        wxT("Configuration"));
-    runtimeOptSizer = new wxStaticBoxSizer(wxVERTICAL, base,
-        wxT("Runtime Options"));
-    onionSkinOptSizer = new wxStaticBoxSizer(wxVERTICAL, base,
-        wxT("Onion Skin Options"));
-
-    /*
-     * Set up the configuration sizer (nee "display options").
-     */
-    tmpSizer = new wxBoxSizer(wxHORIZONTAL);
-    displayOptSizer->Add(tmpSizer);
-    tmpSizer->Add(
-            new wxStaticText(base, wxID_ANY, wxT("Device mode:"),
-            wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT), 0, wxALIGN_CENTER_VERTICAL);
-    pModeSelection = new wxComboBox(base, IDC_MODE_SELECT, wxT(""),
-            wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY);
-    tmpSizer->AddSpacer(kInterSpacing);
-    tmpSizer->Add(pModeSelection);
-
-    displayOptSizer->AddSpacer(kInterSpacing);
-
-    /*
-     * Configure the runtime options sizer.
-     */
-    wxComboBox* pJavaAppName;
-    tmpSizer = new wxBoxSizer(wxHORIZONTAL);
-    pUseGDB = new wxCheckBox(base, IDC_USE_GDB, wxT("Use &debugger"));
-    tmpSizer->Add(pUseGDB);
-    tmpSizer->AddSpacer(kInterSpacing);
-    pUseValgrind = new wxCheckBox(base, IDC_USE_VALGRIND, wxT("Use &valgrind"));
-    tmpSizer->Add(pUseValgrind);
-    tmpSizer->AddSpacer(kInterSpacing);
-    pCheckJni = new wxCheckBox(base, IDC_CHECK_JNI, wxT("Check &JNI"));
-    tmpSizer->Add(pCheckJni);
-
-    pJavaAppName = new wxComboBox(base, IDC_JAVA_APP_NAME, wxT(""),
-        wxDefaultPosition, wxSize(320, -1), NELEM(gStdJavaApps), gStdJavaApps,
-        wxCB_DROPDOWN);
-    wxBoxSizer* javaAppSizer = new wxBoxSizer(wxHORIZONTAL);
-    javaAppSizer->Add(
-            new wxStaticText(base, wxID_ANY,
-                wxT("Java app:"),
-                wxDefaultPosition, wxDefaultSize,
-                wxALIGN_LEFT),
-            0, wxALIGN_CENTER_VERTICAL);
-    javaAppSizer->AddSpacer(kInterSpacing);
-    javaAppSizer->Add(pJavaAppName);
-
-    runtimeOptSizer->Add(tmpSizer);
-
-    runtimeOptSizer->AddSpacer(kInterSpacing);
-    runtimeOptSizer->Add(javaAppSizer);
-    runtimeOptSizer->AddSpacer(kInterSpacing);
-
-    wxString tmpStr;
-    SetCheckFromPref(pUseGDB, "debug", false);
-    SetCheckFromPref(pUseValgrind, "valgrind", false);
-    SetCheckFromPref(pCheckJni, "check-jni", false);
-    if (pPrefs->GetString("java-app-name", /*ref*/ tmpStr))
-        pJavaAppName->SetValue(tmpStr);
-
-    /*
-     * Configure the onion skin options sizer.
-     */
-    wxTextCtrl* pOnionSkinFileNameText;
-    wxButton* pOnionSkinFileButton;
-    wxSlider* pOnionSkinAlphaSlider;
-    tmpSizer = new wxBoxSizer(wxHORIZONTAL);
-    pOverlayOnionSkin = new wxCheckBox(base, 
-        IDC_OVERLAY_ONION_SKIN, wxT("Overlay &onion skin"));
-    tmpSizer->Add(pOverlayOnionSkin);
-
-    pOnionSkinFileNameText = new wxTextCtrl(base, 
-        IDC_ONION_SKIN_FILE_NAME, wxT(""),
-        wxDefaultPosition, wxSize(250, -1),
-        wxTE_PROCESS_ENTER);
-    pOnionSkinFileButton = new wxButton(base, IDC_ONION_SKIN_BUTTON,
-        wxT("Choose"));
-
-    wxBoxSizer* onionSkinFileNameSizer = new wxBoxSizer(wxHORIZONTAL);
-    onionSkinFileNameSizer->Add(
-        new wxStaticText(base, wxID_ANY,
-            wxT("Filename:"),
-            wxDefaultPosition, wxDefaultSize,
-            wxALIGN_LEFT),
-        0, wxALIGN_CENTER_VERTICAL);
-    onionSkinFileNameSizer->AddSpacer(kInterSpacing);
-    onionSkinFileNameSizer->Add(pOnionSkinFileNameText);
-    onionSkinFileNameSizer->Add(pOnionSkinFileButton);
-
-    wxBoxSizer * onionSkinAlphaSizer = new wxBoxSizer(wxHORIZONTAL);
-    int initialAlphaVal = 127;
-    pPrefs->GetInt("onion-skin-alpha-value", &initialAlphaVal);
-    pOnionSkinAlphaSlider = new wxSlider(base, IDC_ONION_SKIN_ALPHA_VAL,
-        initialAlphaVal, 0, 255, wxDefaultPosition, wxSize(150, 20));
-    onionSkinAlphaSizer->Add(
-        new wxStaticText(base, wxID_ANY,
-            wxT("Transparency:"),
-            wxDefaultPosition, wxDefaultSize,
-            wxALIGN_LEFT),
-        0, wxALIGN_CENTER_VERTICAL);
-    onionSkinAlphaSizer->AddSpacer(kInterSpacing);
-    onionSkinAlphaSizer->Add(pOnionSkinAlphaSlider, 1, wxCENTRE | wxALL, 5);
-
-    onionSkinOptSizer->Add(tmpSizer);
-    onionSkinOptSizer->AddSpacer(kInterSpacing);
-    onionSkinOptSizer->Add(onionSkinFileNameSizer);
-    onionSkinOptSizer->Add(onionSkinAlphaSizer);
-
-    wxString tmpStr2;
-    SetCheckFromPref(pOverlayOnionSkin, "overlay-onion-skin", false);
-    if (pPrefs->GetString("onion-skin-file-name", /*ref*/ tmpStr2))
-        pOnionSkinFileNameText->SetValue(tmpStr2);
-
-    /*
-     * Add the various components to the master sizer.
-     */
-    masterSizer->Add(displayOptSizer);
-    masterSizer->AddSpacer(kInterSpacing * 2);
-    masterSizer->Add(runtimeOptSizer);
-    masterSizer->AddSpacer(kInterSpacing * 2);
-    masterSizer->Add(onionSkinOptSizer);
-    //masterSizer->AddSpacer(kInterSpacing);
-
-    /*
-     * I don't see a way to guarantee that the window is wide enough to
-     * show the entire menu bar, so just throw some pixels at it.
-     */
-    wxBoxSizer* minWidthSizer = new wxBoxSizer(wxVERTICAL);
-    minWidthSizer->Add(300, kEdgeSpacing);       // forces minimum width
-    minWidthSizer->Add(masterSizer);
-    minWidthSizer->AddSpacer(kInterSpacing * 2);
-
-    /* move us a few pixels in from the left */
-    wxBoxSizer* indentSizer = new wxBoxSizer(wxHORIZONTAL);
-    indentSizer->AddSpacer(kEdgeSpacing);
-    indentSizer->Add(minWidthSizer);
-    indentSizer->AddSpacer(kEdgeSpacing);
-
-    base->SetSizer(indentSizer);
-
-    indentSizer->Fit(this);
-    indentSizer->SetSizeHints(this);
-}
-
-/*
- * Set the value of a checkbox based on a value from the config file.
- */
-void MainFrame::SetCheckFromPref(wxCheckBox* pControl, const char* prefStr,
-    bool defaultVal)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    assert(pPrefs != NULL);
-
-    bool val = defaultVal;
-    pPrefs->GetBool(prefStr, &val);
-
-    pControl->SetValue(val);
-}
-
-/*
- * Destructor.
- */
-MainFrame::~MainFrame(void)
-{
-    PhoneCollection::DestroyInstance();
-
-    delete mExternalRuntimeThread;
-    delete mPropertyServerThread;
-
-    // don't touch mpModeSelection -- child of window
-}
-
-/*
- * File->Quit or click on close box.
- *
- * If we want an "are you sure you want to quit" box, add it here.
- */
-void MainFrame::OnClose(wxCloseEvent& event)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-
-/*
-    if (event.CanVeto())
-        printf("Closing (can veto)\n");
-    else
-        printf("Closing (mandatory)\n");
-*/
-
-    /*
-     * Generally speaking, Close() is not guaranteed to close the window.
-     * However, we want to use it here because (a) our windows are
-     * guaranteed to close, and (b) it provides our windows an opportunity
-     * to tell others that they are about to vanish.
-     */
-    if (mpPhoneWindow != NULL)
-        mpPhoneWindow->Close(true);
-
-    /* save position of main window */
-    wxPoint pos = GetPosition();
-    pPrefs->SetInt("window-main-x", pos.x);
-    pPrefs->SetInt("window-main-y", pos.y);
-
-    /* save default device selection */
-    int idx = GetSelectedDeviceIndex();
-    if (idx >= 0) {
-        PhoneCollection* pCollection = PhoneCollection::GetInstance();
-        PhoneData* pPhoneData = pCollection->GetPhoneData(idx);
-        pPrefs->SetString("default-device", pPhoneData->GetName());
-    }
-
-    if (mpLogWindow != NULL)
-        mpLogWindow->Close(true);
-    Destroy();
-}
-
-/*
- * File->Preferences
- */
-void MainFrame::OnFilePreferences(wxCommandEvent& WXUNUSED(event))
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    PrefsDialog dialog(this);
-    int result;
-
-    result = dialog.ShowModal();
-    if (result == wxID_OK) {
-        /*
-         * The dialog handles writing changes to Preferences, so all we
-         * need to deal with here are changes that have an immediate
-         * impact on us. (which is currently nothing)
-         */
-    }
-}
-
-/*
- * File->Exit
- */
-void MainFrame::OnFileExit(wxCommandEvent& WXUNUSED(event))
-{
-    Close(FALSE);       // false means "allow veto"
-}
-
-/*
- * Decide whether Simulator->Start should be enabled.
- */
-void MainFrame::OnUpdateSimStart(wxUpdateUIEvent& event)
-{
-    if (IsRuntimeRunning())
-        event.Enable(FALSE);
-    else
-        event.Enable(TRUE);
-}
-
-/*
- * Simulator->Start
- */
-void MainFrame::OnSimStart(wxCommandEvent& WXUNUSED(event))
-{
-    // keyboard equivalents can still get here even if menu item disabled
-    if (IsRuntimeRunning())
-        return;
-
-    int id = GetSelectedDeviceIndex();
-    if (id < 0) {
-        fprintf(stderr, "Sim: could not identify currently selected device\n");
-        return;
-    }
-
-#if 0
-    static int foo = 0;
-    foo++;
-    if (foo == 2) {
-        Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-
-        pPrefs->SetBool("debug", true);
-    }
-#endif
-
-    SetupPhoneUI(id, NULL);
-    if (mpPhoneWindow != NULL)
-        mpPhoneWindow->GetDeviceManager()->StartRuntime();
-}
-
-/*
- * Decide whether Simulator->Stop should be enabled.
- */
-void MainFrame::OnUpdateSimStop(wxUpdateUIEvent& event)
-{
-    if (IsRuntimeRunning())
-        event.Enable(TRUE);
-    else
-        event.Enable(FALSE);
-}
-
-/*
- * Simulator->Stop
- */
-void MainFrame::OnSimStop(wxCommandEvent& WXUNUSED(event))
-{
-    if (!IsRuntimeRunning())
-        return;
-    assert(mpPhoneWindow != NULL);
-    mpPhoneWindow->GetDeviceManager()->StopRuntime();
-}
-
-/*
- * Decide whether Simulator->Restart should be enabled.
- */
-void MainFrame::OnUpdateSimRestart(wxUpdateUIEvent& event)
-{
-    if (IsRuntimeRunning())
-        event.Enable(TRUE);
-    else
-        event.Enable(FALSE);
-}
-
-/*
- * Simulator->Restart - stop then start the device runtime.
- */
-void MainFrame::OnSimRestart(wxCommandEvent& WXUNUSED(event))
-{
-    if (!IsRuntimeRunning())
-        return;
-
-    printf("Restart requested\n");
-    mpPhoneWindow->GetDeviceManager()->StopRuntime();
-
-    mRestartRequested = true;
-}
-
-/*
- * Decide whether Simulator->Kill should be enabled.
- */
-void MainFrame::OnUpdateSimKill(wxUpdateUIEvent& event)
-{
-    if (IsRuntimeKillable())
-        event.Enable(TRUE);
-    else
-        event.Enable(FALSE);
-}
-
-/*
- * Simulator->Kill
- */
-void MainFrame::OnSimKill(wxCommandEvent& WXUNUSED(event))
-{
-    if (!IsRuntimeKillable())
-        return;
-    assert(mpPhoneWindow != NULL);
-    mpPhoneWindow->GetDeviceManager()->KillRuntime();
-}
-
-
-/*
- * Device->[select]
- */
-void MainFrame::OnDeviceSelected(wxCommandEvent& event)
-{
-    wxBusyCursor busyc;
-    int id = event.GetId() - IDM_DEVICE_SEL0;
-
-    SetupPhoneUI(id, NULL);
-}
-
-/*
- * Device->Rescan
- */
-void MainFrame::OnDeviceRescan(wxCommandEvent& event)
-{
-    wxBusyCursor busyc;
-    wxMenuBar* pMenuBar;
-    PhoneCollection* pCollection;
-    wxMenu* pOldMenu;
-    wxMenu* pNewMenu;
-    const char* curDevName = NULL;
-    int idx;
-    
-    /* figure out the current device name */
-    pCollection = PhoneCollection::GetInstance();
-    idx = GetSelectedDeviceIndex();
-    if (idx >= 0) {
-        PhoneData* pPhoneData;
-
-        pPhoneData = pCollection->GetPhoneData(idx);
-        curDevName = pPhoneData->GetName();
-        printf("--- device name is '%s'\n", (const char*) curDevName);
-    }
-
-    /* reconstruct device menu with new data */
-#ifdef BEFORE_ASSET
-    pCollection->ScanForPhones(mSimAssetPath);
-#else
-    pCollection->ScanForPhones(NULL);
-#endif
-
-    pMenuBar = GetMenuBar();
-    idx = pMenuBar->FindMenu(kDeviceMenuString);
-    if (idx == wxNOT_FOUND) {
-        fprintf(stderr, "Sim: couldn't find %s menu\n", (const char*) kDeviceMenuString.ToAscii());
-        return;
-    }
-
-    pNewMenu = CreateDeviceMenu(curDevName);
-
-    pOldMenu = pMenuBar->Replace(idx, pNewMenu, kDeviceMenuString);
-    delete pOldMenu;
-
-    /* tell the PhoneWindow about it; may cause runtime to exit */
-    if (mpPhoneWindow != NULL)
-        mpPhoneWindow->DevicesRescanned();
-}
-
-/*
- * Set checkbox on menu item.
- */
-void MainFrame::OnUpdateDebugShowLog(wxUpdateUIEvent& event)
-{
-    if (mpLogWindow == NULL) {
-        event.Enable(false);
-    } else {
-        event.Enable(true);
-        event.Check(mpLogWindow->IsShown());
-    }
-}
-
-/*
- * Debug->ShowLog toggle.
- */
-void MainFrame::OnDebugShowLog(wxCommandEvent& WXUNUSED(event))
-{
-    mpLogWindow->Show(!mpLogWindow->IsShown());
-}
-
-/*
- * Help->Contents
- */
-void MainFrame::OnHelpContents(wxCommandEvent& WXUNUSED(event))
-{
-    ((MyApp*)wxTheApp)->GetHelpController()->DisplayContents();
-}
-
-/*
- * Help->About
- */
-void MainFrame::OnHelpAbout(wxCommandEvent& WXUNUSED(event))
-{
-    wxMessageBox(wxT("Android Simulator v0.1\n"
-                     "Copyright 2006 The Android Open Source Project"),
-        wxT("About..."), wxOK | wxICON_INFORMATION, this);
-}
-
-/*
- * Sent from phonewindow or when activated
- */
-void MainFrame::OnActivate(wxActivateEvent& event)
-{
-#if 0
-    if (event.GetActive())
-    {
-        if (mpPhoneWindow != NULL &&
-            mpPhoneWindow->GetDeviceManager()->RefreshRuntime())
-        {
-            wxString msg;
-            int sel;
-
-            msg = wxT("Newer runtime executable found. Would you like to reload the device?");
-
-            sel = wxMessageBox(msg, wxT("Android Safety Patrol"),
-                wxYES | wxNO | wxICON_QUESTION, mpPhoneWindow);
-            //printf("BUTTON was %d (yes=%d)\n", sel, wxYES);
-            if (sel == wxYES)
-            {
-                mpPhoneWindow->GetDeviceManager()->StopRuntime();
-                mpPhoneWindow->Close();
-                mpPhoneWindow = NULL;
-                mRestartRequested = true;
-            }
-            else
-            {
-                mpPhoneWindow->GetDeviceManager()->UserCancelledRefresh();
-            }
-        }
-    }
-#endif
-
-    // let wxWidgets do whatever it needs to do
-    event.Skip();
-}
-            
-
-/*
- * Device mode selection box.
- */
-void MainFrame::OnComboBox(wxCommandEvent& event)
-{
-    const char* pref;
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    assert(pPrefs != NULL);
-
-    if (IDC_MODE_SELECT == event.GetId())
-    {
-        int id = GetSelectedDeviceIndex();
-        if (id < 0)
-            return;
-        //printf("--- mode selected: '%s'\n", (const char*) event.GetString().ToAscii());
-
-        /*
-         * Call the phone window's setup function.  Don't call our SetupPhoneUI
-         * function from here -- updating the combo box from a combo box callback
-         * could cause problems.
-         */
-        if (mpPhoneWindow != NULL) {
-            mpPhoneWindow->SetCurrentMode(event.GetString());
-            mpPhoneWindow->Setup(id);
-        }
-    } else if (event.GetId() == IDC_JAVA_VM) {
-        wxComboBox* pBox = (wxComboBox*) FindWindow(IDC_JAVA_VM);
-        pPrefs->SetString("java-vm", pBox->GetValue().ToAscii());
-    }
-}
-
-/*
- * One of our option checkboxes has been changed.
- *
- * We update the prefs database so that the settings are retained when
- * the simulator is next used.
- */
-void MainFrame::OnCheckBox(wxCommandEvent& event)
-{
-    const char* pref;
-
-    switch (event.GetId()) {
-    case IDC_USE_GDB:               pref = "debug";                 break;
-    case IDC_USE_VALGRIND:          pref = "valgrind";              break;
-    case IDC_CHECK_JNI:             pref = "check-jni";             break;
-    case IDC_OVERLAY_ONION_SKIN:    pref = "overlay-onion-skin";    break; 
-    default:
-        printf("Sim: unrecognized checkbox %d in OnCheckBox\n", event.GetId());
-        return;
-    }
-
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    assert(pPrefs != NULL);
-
-    pPrefs->SetBool(pref, (bool) event.GetInt());
-    //printf("--- set pref '%s' to %d\n", pref, (bool) event.GetInt());
-    if (event.GetId() == IDC_OVERLAY_ONION_SKIN) {
-        BroadcastOnionSkinUpdate();
-    }
-    if (event.GetId() == IDC_CHECK_JNI) {
-        const char* val = "0";
-        if ((bool) event.GetInt())
-            val = "1";
-        mPropertyServerThread->SetProperty(PropertyServer::kPropCheckJni, val);
-
-    }
-}
-
-void MainFrame::BroadcastOnionSkinUpdate() {
-    if (mpPhoneWindow != NULL) {
-        // broadcast a user event indicating an onion skin update
-        UserEvent uev(0, (void*) -1);
-        mpPhoneWindow->GetDeviceManager()->BroadcastEvent(uev);
-    }
-}
-
-/*
- * A text control on the main page is being updated.
- *
- * The current implementation updates the preferences database on every
- * change, which is a bit silly but is easy to do.
- */
-void MainFrame::OnText(wxCommandEvent& event)
-{
-    const char* pref;
-
-    switch (event.GetId()) {
-    case IDC_JAVA_APP_NAME:     pref = "java-app-name"; break;
-    default:
-        printf("Sim: unrecognized textctrl %d in OnText\n", event.GetId());
-        return;
-    }
-
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    assert(pPrefs != NULL);
-
-    // event.GetString() does not work on Mac -- always blank
-    //pPrefs->SetString(pref, event.GetString());
-    assert(event.GetId() == IDC_JAVA_APP_NAME); // fix if we add more
-    wxComboBox* pBox;
-    pBox = (wxComboBox*) FindWindow(IDC_JAVA_APP_NAME);
-    pPrefs->SetString(pref, pBox->GetValue().ToAscii());
-    //printf("--- set pref '%s' to '%s'\n", pref,(const char*)pBox->GetValue());
-}
-
-/*
- * A user pressed enter in a text control on the main page.
- *
- * The current implementation updates the preferences database on every
- * change, which is a bit silly but is easy to do.
- */
-void MainFrame::OnTextEnter(wxCommandEvent& event)
-{
-    const char* pref;
-
-    switch (event.GetId()) {
-    case IDC_ONION_SKIN_FILE_NAME:
-        pref = "onion-skin-file-name";
-        break;
-    default:
-        printf("Sim: unrecognized textctrl %d in OnTextEnter\n", event.GetId());
-        return;
-    }
-
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    assert(pPrefs != NULL);
-
-    assert(event.GetId() == IDC_ONION_SKIN_FILE_NAME); // fix if we add more
-    wxTextCtrl* pTextCtrl;
-    pTextCtrl = (wxTextCtrl*) FindWindow(IDC_ONION_SKIN_FILE_NAME);
-    wxString onionSkinFileNameWxString = pTextCtrl->GetValue();
-    char* onionSkinFileName = "";
-    if (onionSkinFileNameWxString.Len() > 0) {
-        onionSkinFileName = android::strdupNew(onionSkinFileNameWxString.ToAscii());
-    }
-    pPrefs->SetString(pref, onionSkinFileName);
-    BroadcastOnionSkinUpdate();
-}
-
-/*
- * A user pressed a button on the main page
- * 
- */
- void MainFrame::OnButton(wxCommandEvent& event)
- {
-    wxWindow* base;
-    wxFileDialog* pOnionSkinFileChooser;
-    int retVal;
-    switch (event.GetId()) {
-    case IDC_ONION_SKIN_BUTTON:
-        base = FindWindow(IDC_ONION_SKIN_BUTTON)->GetParent();
-        pOnionSkinFileChooser = new wxFileDialog(base, 
-            wxT("Choose the onion skin image file."), 
-            wxT(""), wxT(""), wxT("*.*"),
-            wxOPEN | wxFILE_MUST_EXIST);
-        retVal = pOnionSkinFileChooser->ShowModal();
-        if (retVal == pOnionSkinFileChooser->GetAffirmativeId()) {
-            Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-            assert(pPrefs != NULL);
-            wxString fileNameWxString = pOnionSkinFileChooser->GetPath();
-            const char* fileName = android::strdupNew(fileNameWxString.ToAscii());
-            wxTextCtrl* fileTextCtrl = (wxTextCtrl*) FindWindow(IDC_ONION_SKIN_FILE_NAME);
-            fileTextCtrl->SetValue(fileNameWxString);
-            pPrefs->SetString("onion-skin-file-name", fileName);
-            BroadcastOnionSkinUpdate();
-        }
-        break;
-    default:
-        printf("Sim: unrecognized button %d in OnButton\n", event.GetId());
-        return;
-    }     
- }
- 
- /*
-  * The user moved a slider on the main page
-  */
- void MainFrame::OnSliderChange(wxScrollEvent& event)
- {
-    wxSlider* pSlider;
-    Preferences* pPrefs;
-    switch (event.GetId()) {
-    case IDC_ONION_SKIN_ALPHA_VAL:
-        pSlider = (wxSlider*) FindWindow(IDC_ONION_SKIN_ALPHA_VAL);
-        pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-        assert(pPrefs != NULL);
-        pPrefs->SetInt("onion-skin-alpha-value", pSlider->GetValue());
-        BroadcastOnionSkinUpdate();
-        break;
-    default:
-        printf("Sim: unrecognized scroller or slider %d in OnSliderChange\n", event.GetId());
-        return;
-    }     
- }
-
-#if 0
-/*
- * Idle processing.  Under wxWidgets this only called once after UI
- * activity unless you call event.RequestMore().
- */
-void MainFrame::OnIdle(wxIdleEvent& event)
-{
-    event.Skip();       // let base class handler do stuff
-}
-#endif
-
-/*
- * Handle the timer.
- *
- * This is being called in the main thread, so multithreading with the
- * rest of MainFrame isn't a concern here.
- */
-void MainFrame::OnTimer(wxTimerEvent& event)
-{
-    bool status;
-
-    /*
-     * Check to see if the runtime died without telling us.  This can only
-     * happen if we forcibly kill our thread.  We shouldn't really be
-     * doing that anymore, but keep this in for now just in case.
-     */
-    status = IsRuntimeRunning();
-
-    if (mSimRunning != status) {
-        if (!status) {
-            printf("Sim: fixed mSimRunning=%d actual=%d\n",
-                mSimRunning, status);
-            mSimRunning = status;
-
-            if (!status)
-                HandleRuntimeStop();
-        } else {
-            /*
-             * This was happening when we were shutting down but the
-             * device management thread hadn't completely gone away.  The
-             * simple IsRunning test passes, so we get a false positive.
-             * Ignore it.
-             */
-        }
-    }
-
-    if (gWantToKill) {
-        if (IsRuntimeRunning()) {
-            printf("Sim: handling kill request\n");
-            mpPhoneWindow->GetDeviceManager()->KillRuntime();
-        }
-        gWantToKill = false;
-
-        /* see if Ctrl-C should kill us too */
-        Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-        bool die = false;
-
-        pPrefs->GetBool("trap-sigint-suicide", &die);
-        if (die) {
-            printf("Sim: goodbye cruel world!\n");
-            exit(0);
-        }
-    }
-}
-
-/*
- * Determine whether or not the simulator is running.
- */
-bool MainFrame::IsRuntimeRunning(void)
-{
-    bool result;
-
-    if (mpPhoneWindow == NULL)
-        result = false;
-    else if (!mpPhoneWindow->IsReady())
-        result = false;
-    else
-        result = mpPhoneWindow->GetDeviceManager()->IsRunning();
-
-    return result;
-}
-
-/*
- * Determine whether or not the runtime can be killed.
- */
-bool MainFrame::IsRuntimeKillable(void)
-{
-    bool result;
-
-    result = IsRuntimeRunning();
-    if (result)
-        result = mpPhoneWindow->GetDeviceManager()->IsKillable();
-
-    return result;
-}
-
-/*
- * Determine whether two devices are sufficiently compatible.
- */
-bool MainFrame::CompatibleDevices(PhoneData* pData1, PhoneData* pData2)
-{
-    int displayCount;
-
-    displayCount = pData1->GetNumDisplays();
-    if (pData2->GetNumDisplays() != displayCount)
-        return false;
-
-    for (int i = 0; i < displayCount; i++) {
-        PhoneDisplay* pDisplay1 = pData1->GetPhoneDisplay(i);
-        PhoneDisplay* pDisplay2 = pData2->GetPhoneDisplay(i);
-
-        if (!PhoneDisplay::IsCompatible(pDisplay1, pDisplay2))
-            return false;
-    }
-
-    return true;
-}
-
-/*
- * (Re-)arrange the UI for the currently selected phone model.
- *
- * If the simulator is running, and the set of displays for the current
- * device are incompatible with the new device, we need to restart the
- * runtime.  We need to ask for permission first though.
- */
-void MainFrame::SetupPhoneUI(int idx, const char* defaultMode)
-{
-    PhoneCollection* pCollection;
-    PhoneData* pPhoneData;
-    wxString* choices = NULL;
-    int numChoices = 0;
-    int numKeyboards = 0;
-    bool haveDefaultMode = false;
-    wxCharBuffer currentMode;
-    int i;
-
-    pCollection = PhoneCollection::GetInstance();
-    pPhoneData = pCollection->GetPhoneData(idx);
-    if (pPhoneData == NULL) {
-        fprintf(stderr, "ERROR: device index %d not valid\n", idx);
-        goto bail;
-    }
-
-    /*
-     * We have a window up.  If the displays aren't compatible, we'll
-     * need to recreate it.
-     */
-    if (mpPhoneWindow != NULL) {
-        PhoneData* pCurData = mpPhoneWindow->GetPhoneData();
-
-        if (!CompatibleDevices(pCurData, pPhoneData)) {
-            /*
-             * We need to trash the window.  This will also kill the
-             * runtime.  If it's running, ask permission.
-             */
-            if (IsRuntimeRunning()) {
-                wxString msg;
-                int sel;
-
-                msg =  wxT("Switching to the new device requires restarting the");
-                msg += wxT(" runtime.  Continue?");
-
-                sel = wxMessageBox(msg, wxT("Android Safety Patrol"),
-                    wxOK | wxCANCEL | wxICON_QUESTION, this);
-                printf("BUTTON was %d (ok=%d)\n", sel, wxOK);
-                if (sel == wxCANCEL)
-                    goto bail;
-
-                /* shut it down (politely), ask for an eventual restart */
-                mpPhoneWindow->GetDeviceManager()->StopRuntime();
-                mpPhoneWindow->Close();
-                mpPhoneWindow = NULL;
-                mRestartRequested = true;
-                goto bail;
-            } else {
-                /* not running, just trash the window and continue */
-                mpPhoneWindow->Close();
-                mpPhoneWindow = NULL;
-            }
-        }
-    }
-
-    /*
-     * Figure out the set of available modes.
-     */
-
-    numChoices = pPhoneData->GetNumModes();
-    if (numChoices > 0) {
-        choices = new wxString[numChoices];
-        for (i = 0; i < numChoices; i++) {
-            PhoneMode* pPhoneMode;
-            pPhoneMode = pPhoneData->GetPhoneMode(i);
-            choices[i] = wxString::FromAscii(pPhoneMode->GetName());
-            if (defaultMode != NULL &&
-                strcmp(defaultMode, pPhoneMode->GetName()) == 0)
-            {
-                haveDefaultMode = true;
-            }
-        }
-    }
-
-    if (choices == NULL) {
-        /* had a failure earlier; configure UI with default stuff */
-        choices = new wxString[1];
-        choices[0] = wxT("(none)");
-    }
-
-    if (!haveDefaultMode) {
-        /*
-         * Default mode wasn't found.  If we specify it as the default
-         * in the wxComboBox create call it shows up in the combo box
-         * under Linux, even if it doesn't exist in the list.  So, we
-         * make sure that it doesn't get used if we can't find it.
-         */
-        if (defaultMode != NULL) {
-            printf("Sim: HEY: default mode '%s' not found in list\n",
-                defaultMode);
-        }
-        currentMode = choices[0].ToAscii();
-    } else {
-        currentMode = defaultMode;
-    }
-
-
-    /*
-     * Create the window if necessary.
-     */
-    if (mpPhoneWindow == NULL) {
-        // create, setup, and then show window
-        mpPhoneWindow = new PhoneWindow(this, mPhoneWindowPosn);
-        mpPhoneWindow->SetCurrentMode((const char*)currentMode);
-        if (!mpPhoneWindow->Setup(idx)) {
-            delete mpPhoneWindow;
-            mpPhoneWindow = NULL;
-        }
-        if (mpPhoneWindow != NULL) {
-            mpPhoneWindow->Show();
-            //mpPhoneWindow->CheckPlacement();
-        }
-    } else {
-        // just set up for new device
-        mpPhoneWindow->SetCurrentMode((const char*)currentMode);
-        if (!mpPhoneWindow->Setup(idx)) {
-            // it's in an uncertain state, blow it away
-            delete mpPhoneWindow;
-            mpPhoneWindow = NULL;
-        }
-    }
-
-    /*
-     * Reconfigure mode selection box.
-     */
-    wxComboBox* pModeSelection;
-    pModeSelection = (wxComboBox*)FindWindow(IDC_MODE_SELECT);
-    pModeSelection->Clear();
-    for (i = 0; i < numChoices; i++)
-        pModeSelection->Append(choices[i]);
-    pModeSelection->SetSelection(0);
-    pModeSelection->Enable(numChoices > 1);
-    
-    /*
-     * configure qwerty keyboard attribute
-     */
-    numKeyboards = pPhoneData->GetNumKeyboards();
-    if (numKeyboards > 0) {
-        // only use the first keyboard for now
-        PhoneKeyboard* pPhoneKeyboard;
-        pPhoneKeyboard = pPhoneData->GetPhoneKeyboard(0);
-        if (pPhoneKeyboard->getQwerty()) {
-            printf("Sim: set 'qwerty' env\n");
-            setenv("qwerty", "true", true);
-        }
-    }
-    
-bail:
-    delete[] choices;
-}
-
-/*
- * Figure out which device is currently selected.
- *
- * The easiest way to do this is just run down the list of possible IDs
- * and stop when something claims to be checked.
- *
- * Returns -1 if it can't find a checked item (which can happen if no
- * device layouts were found).
- */
-int MainFrame::GetSelectedDeviceIndex(void)
-{
-    wxMenuBar* pMenuBar;
-    wxMenu* pMenu;
-    int idx;
-    
-    pMenuBar = GetMenuBar();
-    idx = pMenuBar->FindMenu(kDeviceMenuString);
-    if (idx == wxNOT_FOUND) {
-        fprintf(stderr, "Sim: couldn't find %s menu\n", (const char*) kDeviceMenuString.ToAscii());
-        return -1;
-    }
-
-    pMenu = pMenuBar->GetMenu(idx);
-
-    //printf("Menu.MenuItemCount = %d\n", pMenu->GetMenuItemCount());
-    for (int j = pMenu->GetMenuItemCount() -1; j >= 0; j--) {
-        wxMenuItem* pItem;
-
-        pItem = pMenu->FindItemByPosition(j);
-        //printf("ITEM %d: %s\n", j, (const char*) pItem->GetLabel());
-        if (pItem->IsChecked()) {
-            printf("Sim: selected device is '%s'\n",
-                (const char*) pItem->GetLabel().ToAscii());
-            return j;
-        }
-    }
-
-    return -1;
-}
-
-/*
- * Receive a status message from the runtime thread.
- */
-void MainFrame::OnUserEvent(UserEvent& event)
-{
-    UserEventMessage* pUem;
-
-    pUem = (UserEventMessage*) event.GetData();
-    assert(pUem != NULL);
-
-    switch (pUem->GetType()) {
-    case UserEventMessage::kRuntimeStarted:
-        printf("Sim: runtime thread started!\n");
-        HandleRuntimeStart();
-        break;
-    case UserEventMessage::kRuntimeStopped:
-        printf("Sim: runtime thread stopped!\n");
-        HandleRuntimeStop();
-        break;
-    case UserEventMessage::kErrorMessage:
-        {
-            wxString msg = pUem->GetString();
-            wxMessageBox(msg, wxT("Android Runtime Error"),
-                wxOK | wxICON_WARNING, this);
-        }
-        break;
-    case UserEventMessage::kLogMessage:
-        mpLogWindow->AddLogMessage(pUem->GetLogMessage());
-        break;
-    case UserEventMessage::kExternalRuntime:
-        HandleExternalRuntime(pUem->GetReader(), pUem->GetWriter());
-        break;
-    default:
-        printf("Sim: MESSAGE: unknown UserEventMessage rcvd (type=%d)\n",
-            pUem->GetType());
-        break;
-    }
-
-    delete pUem;
-}
-
-/*
- * The device management thread is up, so the runtime should be fully
- * running shortly.
- */
-void MainFrame::HandleRuntimeStart(void)
-{
-    mSimRunning = true;
-
-    SetStatusText(kStatusRunning, 1);
-}
-
-/*
- * The device management thread is exiting, so the runtime must be dead.
- */
-void MainFrame::HandleRuntimeStop(void)
-{
-    mSimRunning = false;
-
-    SetStatusText(kStatusNotRunning, 1);
-
-    if (mRestartRequested) {
-        printf("Sim: restarting runtime\n");
-        mRestartRequested = false;
-        SetupPhoneUI(GetSelectedDeviceIndex(), NULL);
-        if (mpPhoneWindow != NULL)
-            mpPhoneWindow->GetDeviceManager()->StartRuntime();
-    }
-}
-
-/*
- * Handle a connection from an external runtime.
- */
-void MainFrame::HandleExternalRuntime(android::Pipe* reader,
-    android::Pipe* writer)
-{
-    android::MessageStream msgStream;
-    android::Message msg;
-
-    if (IsRuntimeRunning()) {
-        /*
-         * Tell the new guy to go away.
-         */
-        if (!msgStream.init(reader, writer, true)) {
-            fprintf(stderr, "Sim: WARNING: unable to talk to remote runtime\n");
-            goto bail;
-        }
-
-        printf("Sim: telling external runtime to go away\n");
-        msg.setCommand(android::Simulator::kCommandGoAway, 0);
-        msgStream.send(&msg);
-    } else {
-        printf("Sim: new external runtime wants to talk to us\n");
-
-        /*
-         * Launch the pieces necessary to talk to this guy.
-         */
-        int id = GetSelectedDeviceIndex();
-        if (id < 0) {
-            fprintf(stderr,
-                "Sim: could not identify currently selected device\n");
-            goto bail;
-        }
-
-        /* kill existing window, so it pops up and reclaims focus */
-        if (mpPhoneWindow != NULL) {
-            Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-            bool okay;
-
-            if (pPrefs->GetBool("refocus-on-restart", &okay) && okay) {
-                printf("Sim: inducing phone window refocus\n");
-                mpPhoneWindow->Close(TRUE);     // no veto
-                mpPhoneWindow = NULL;
-            }
-        }
-
-        SetupPhoneUI(id, NULL);
-        if (mpPhoneWindow != NULL) {
-            mpPhoneWindow->GetDeviceManager()->StartRuntime(reader, writer);
-        } else {
-            fprintf(stderr, "Sim: ERROR: unable to get runtime going\n");
-            goto bail;
-        }
-
-        // we don't own these anymore
-        reader = writer = NULL;
-    }
-
-bail:
-    delete reader;
-    delete writer;
-}
-
-/*
- * The phone window is about to destroy itself.  Get rid of our pointer
- * to it, and record its last position so we can create the new one in
- * the same place.
- */
-void MainFrame::PhoneWindowClosing(int x, int y)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-
-    mpPhoneWindow = NULL;
-
-    mPhoneWindowPosn.x = x;
-    mPhoneWindowPosn.y = y;
-
-    pPrefs->SetInt("window-device-x", x);
-    pPrefs->SetInt("window-device-y", y);
-}
-
diff --git a/simulator/app/MainFrame.h b/simulator/app/MainFrame.h
deleted file mode 100644
index 817a182..0000000
--- a/simulator/app/MainFrame.h
+++ /dev/null
@@ -1,115 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Main window declaration.
-//
-#ifndef _SIM_MAINFRAME_H
-#define _SIM_MAINFRAME_H
-
-#include "PhoneWindow.h"
-#include "DeviceWindow.h"
-#include "LogWindow.h"
-#include "ExternalRuntime.h"
-#include "PropertyServer.h"
-
-/*
- * Main window.
- */
-class MainFrame : public wxFrame {
-public:
-    /* define a constructor so we can set up menus */
-    MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
-        long style);
-    virtual ~MainFrame(void);
-
-    /* called by modeless phone window dialog when it closes */
-    void PhoneWindowClosing(int x, int y);
-
-    void Vibrate(int vibrateOn) { mpPhoneWindow->Vibrate(vibrateOn); }
-
-    PropertyServer* GetPropertyServer(void) { return mPropertyServerThread; }
-
-private:
-    void ConstructMenu(void);
-    void ConstructControls(void);
-
-    void OnClose(wxCloseEvent& event);
-    void OnTimer(wxTimerEvent& event);
-    //void OnIdle(wxIdleEvent& event);
-    void OnActivate(wxActivateEvent& event);
-    void OnButton(wxCommandEvent& event);
-    void OnComboBox(wxCommandEvent& event);
-    void OnCheckBox(wxCommandEvent& event);
-    void OnText(wxCommandEvent& event);
-    void OnTextEnter(wxCommandEvent& event);
-    void OnUserEvent(UserEvent& event);
-    void OnSliderChange(wxScrollEvent& event);
-
-    void OnFilePreferences(wxCommandEvent& event);
-    void OnFileExit(wxCommandEvent& event);
-    void OnUpdateSimStart(wxUpdateUIEvent& event);
-    void OnSimStart(wxCommandEvent& event);
-    void OnUpdateSimStop(wxUpdateUIEvent& event);
-    void OnSimStop(wxCommandEvent& event);
-    void OnUpdateSimReload(wxUpdateUIEvent& event);
-    void OnSimReload(wxCommandEvent& event);
-    void OnUpdateSimRestart(wxUpdateUIEvent& event);
-    void OnSimRestart(wxCommandEvent& event);
-    void OnUpdateSimKill(wxUpdateUIEvent& event);
-    void OnSimKill(wxCommandEvent& event);
-    void OnDeviceSelected(wxCommandEvent& event);
-    void OnDeviceRescan(wxCommandEvent& event);
-    void OnUpdateDebugShowLog(wxUpdateUIEvent& event);
-    void OnDebugShowLog(wxCommandEvent& event);
-    void OnHelpContents(wxCommandEvent& event);
-    void OnHelpAbout(wxCommandEvent& event);
-
-    wxMenu* CreateDeviceMenu(const char* defaultItemName);
-    void SetCheckFromPref(wxCheckBox* pControl, const char* prefStr,
-        bool defaultVal);
-
-    void UpdateRuntimeExeStr(void);
-
-    /* prep the phone UI; "defaultMode" may be NULL */
-    void SetupPhoneUI(int idx, const char* defaultMode);
-
-    bool CompatibleDevices(PhoneData* pData1, PhoneData* pData2);
-
-    void HandleRuntimeStart(void);
-    void HandleRuntimeStop(void);
-    void HandleExternalRuntime(android::Pipe* reader, android::Pipe* writer);
-
-    int GetSelectedDeviceIndex(void);
-    bool IsRuntimeRunning(void);
-    bool IsRuntimeKillable(void);
-
-    void BroadcastOnionSkinUpdate(void);
-    
-    bool    mSimRunning;
-    bool    mRestartRequested;
-
-    enum { kHalfSecondTimerId = 1000 };
-
-    wxString        mSimAssetPath;
-
-    /* if we have a phone running, this points to its state */
-    PhoneWindow*    mpPhoneWindow;
-
-    /* phone window position */
-    wxPoint         mPhoneWindowPosn;
-
-    /* window that captures log output */
-    LogWindow*      mpLogWindow;
-
-    wxTimer         mTimer;
-
-    /* watches for connection from runtime */
-    ExternalRuntime* mExternalRuntimeThread;
-
-    /* serve up system properties */
-    PropertyServer*  mPropertyServerThread;
-
-    DECLARE_EVENT_TABLE()
-};
-
-#endif // _SIM_MAINFRAME_H
diff --git a/simulator/app/MessageStream.cpp b/simulator/app/MessageStream.cpp
deleted file mode 100644
index c52e7c4..0000000
--- a/simulator/app/MessageStream.cpp
+++ /dev/null
@@ -1,404 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Message stream abstraction.
-//
-#include "MessageStream.h"
-#include "LogBundle.h"
-
-#include "utils/Log.h"
-
-#include <stdint.h>
-#include <string.h>
-#include <assert.h>
-
-using namespace android;
-
-/*
- * ===========================================================================
- *      Message
- * ===========================================================================
- */
-
-/*
- * Send a blob of raw data.
- */
-void Message::setRaw(const unsigned char* data, int len, Cleanup cleanup)
-{
-    reset();
-
-    mData = const_cast<unsigned char*>(data);
-    mLength = len;
-    mCleanup = cleanup;
-    mType = kTypeRaw;
-}
-
-/*
- * Send a "name=value" config pair.
- */
-void Message::setConfig(const char* name, const char* value)
-{
-    reset();
-
-    assert(name != NULL && value != NULL);
-
-    int nlen = strlen(name) +1;
-    int vlen = strlen(value) +1;
-    mData = new unsigned char[nlen+vlen];
-    mCleanup = kCleanupDelete;
-    mLength = nlen + vlen;
-    mType = kTypeConfig;
-
-    memcpy(mData, name, nlen);
-    memcpy(mData + nlen, value, vlen);
-}
-
-/*
- * Try to return the contents of the message as if it were a name/value pair.
- */
-bool Message::getConfig(const char** pName, const char** pValue)
-{
-    if (mLength < 2)
-        return false;
-    assert(mData != NULL);
-
-    *pName = (const char*) mData;
-    *pValue = (const char*) (mData + strlen((char*)mData) +1);
-    return true;
-}
-
-/*
- * Send a command/arg pair.
- */
-void Message::setCommand(int cmd, int arg)
-{
-    reset();
-
-    mData = new unsigned char[sizeof(int) * 2];
-    mCleanup = kCleanupDelete;
-    mLength = sizeof(int) * 2;
-    mType = kTypeCommand;
-
-    int* pInt = (int*) mData;
-    pInt[0] = cmd;
-    pInt[1] = arg;
-}
-
-/*
- * Send a command with 3 args instead of just one.
- */
-void Message::setCommandExt(int cmd, int arg0, int arg1, int arg2)
-{
-    reset();
-
-    mData = new unsigned char[sizeof(int) * 4];
-    mCleanup = kCleanupDelete;
-    mLength = sizeof(int) * 4;
-    mType = kTypeCommandExt;
-
-    int* pInt = (int*) mData;
-    pInt[0] = cmd;
-    pInt[1] = arg0;
-    pInt[2] = arg1;
-    pInt[3] = arg2;
-}
-
-/*
- * Try to return the contents of the message as if it were a "command".
- */
-bool Message::getCommand(int* pCmd, int* pArg)
-{
-    if (mLength != sizeof(int) * 2) {
-        LOG(LOG_WARN, "", "type is %d, len is %d\n", mType, mLength);
-        return false;
-    }
-    assert(mData != NULL);
-
-    const int* pInt = (const int*) mData;
-    *pCmd = pInt[0];
-    *pArg = pInt[1];
-
-    return true;
-}
-
-/*
- * Serialize a log message.
- *
- * DO NOT call LOG() from here.
- */
-void Message::setLogBundle(const android_LogBundle* pBundle)
-{
-    reset();
-
-    /* get string lengths; we add one here to include the '\0' */
-    int tagLen, msgLen;
-    tagLen = strlen(pBundle->tag) + 1;
-    size_t i;
-    msgLen = 0;
-    for (i=0; i<pBundle->msgCount; i++) msgLen += pBundle->msgVec[i].iov_len;
-    msgLen += 1;
-
-    /* set up the structure */
-    mCleanup = kCleanupDelete;
-    mLength =   sizeof(pBundle->when) +
-                sizeof(pBundle->priority) +
-                sizeof(pBundle->pid) +
-                tagLen +
-                msgLen;
-    mData = new unsigned char[mLength];
-    mType = kTypeLogBundle;
-
-    unsigned char* pCur = mData;
-
-    /* copy the stuff over */
-    *((time_t*)pCur) = pBundle->when;
-    pCur += sizeof(pBundle->when);
-    *((android_LogPriority*)pCur) = pBundle->priority;
-    pCur += sizeof(pBundle->priority);
-    *((pid_t*)pCur) = pBundle->pid;
-    pCur += sizeof(pBundle->pid);
-    memcpy(pCur, pBundle->tag, tagLen);
-    pCur += tagLen;
-    for (i=0; i<pBundle->msgCount; i++) {
-        memcpy(pCur, pBundle->msgVec[i].iov_base, pBundle->msgVec[i].iov_len);
-        pCur += pBundle->msgVec[i].iov_len;
-    }
-    *pCur++ = 0;
-
-    assert(pCur - mData == mLength);
-}
-
-/*
- * Extract the components of a log bundle.
- *
- * We're just returning points inside the message buffer, so the caller
- * will need to copy them out before the next reset().
- */
-bool Message::getLogBundle(android_LogBundle* pBundle)
-{
-    if (mLength < (int)(sizeof(time_t) + sizeof(int)*2 + 4)) {
-        LOG(LOG_WARN, "", "type is %d, len is %d, too small\n",
-            mType, mLength);
-        return false;
-    }
-    assert(mData != NULL);
-
-    unsigned char* pCur = mData;
-
-    pBundle->when = *((time_t*) pCur);
-    pCur += sizeof(pBundle->when);
-    pBundle->priority = *((android_LogPriority*) pCur);
-    pCur += sizeof(pBundle->priority);
-    pBundle->pid = *((pid_t*) pCur);
-    pCur += sizeof(pBundle->pid);
-    pBundle->tag = (const char*) pCur;
-    pCur += strlen((const char*) pCur) +1;
-    mVec.iov_base = (char*) pCur;
-    mVec.iov_len = strlen((const char*) pCur);
-    pBundle->msgVec = &mVec;
-    pBundle->msgCount = 1;
-    pCur += mVec.iov_len +1;
-
-    if (pCur - mData != mLength) {
-        LOG(LOG_WARN, "", "log bundle rcvd %d, used %d\n", mLength,
-            (int) (pCur - mData));
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Read the next event from the pipe.
- *
- * This is not expected to work well when multiple threads are reading.
- */
-bool Message::read(Pipe* pPipe, bool wait)
-{
-    if (pPipe == NULL)
-        return false;
-    assert(pPipe->isCreated());
-
-    if (!wait) {
-        if (!pPipe->readReady())
-            return false;
-    }
-
-    reset();
-
-    unsigned char header[4];
-    if (pPipe->read(header, 4) != 4)
-        return false;
-
-    mType = (MessageType) header[2];
-    mLength = header[0] | header[1] << 8;
-    mLength -= 2;   // we already read two of them in the header
-
-    if (mLength > 0) {
-        int actual;
-
-        mData = new unsigned char[mLength];
-        if (mData == NULL) {
-            LOG(LOG_ERROR, "", "alloc failed\n");
-            return false;
-        }
-        mCleanup = kCleanupDelete;
-
-        actual = pPipe->read(mData, mLength);
-        if (actual != mLength) {
-            LOG(LOG_WARN, "", "failed reading message body (%d of %d bytes)\n",
-                actual, mLength);
-            return false;
-        }
-    }
-
-    return true;
-}
-
-/*
- * Write this event to a pipe.
- *
- * It would be easiest to write the header and message body with two
- * separate calls, but that will occasionally fail on multithreaded
- * systems when the writes are interleaved.  We have to allocate a
- * temporary buffer, copy the data, and write it all at once.  This
- * would be easier with writev(), but we can't rely on having that.
- *
- * DO NOT call LOG() from here, as we could be in the process of sending
- * a log message.
- */
-bool Message::write(Pipe* pPipe) const
-{
-    char tmpBuf[128];
-    char* writeBuf = tmpBuf;
-    bool result = false;
-    int kHeaderLen = 4;
-
-    if (pPipe == NULL)
-        return false;
-    assert(pPipe->isCreated());
-
-    if (mData == NULL || mLength < 0)
-        return false;
-
-    /* if it doesn't fit in stack buffer, allocate space */
-    if (mLength + kHeaderLen > (int) sizeof(tmpBuf)) {
-        writeBuf = new char[mLength + kHeaderLen];
-        if (writeBuf == NULL)
-            goto bail;
-    }
-
-    /*
-     * The current value of "mLength" does not include the 4-byte header.
-     * Two of the 4 header bytes are included in the length we output
-     * (the type byte and the pad byte), so we adjust mLength.
-     */
-    writeBuf[0] = (unsigned char) (mLength + kHeaderLen -2);
-    writeBuf[1] = (unsigned char) ((mLength + kHeaderLen -2) >> 8);
-    writeBuf[2] = (unsigned char) mType;
-    writeBuf[3] = 0;
-    if (mLength > 0)
-        memcpy(writeBuf + kHeaderLen, mData, mLength);
-
-    int actual;
-
-    actual = pPipe->write(writeBuf, mLength + kHeaderLen);
-    if (actual != mLength + kHeaderLen) {
-        fprintf(stderr,
-            "Message::write failed writing message body (%d of %d bytes)\n",
-            actual, mLength + kHeaderLen);
-        goto bail;
-    }
-
-    result = true;
-
-bail:
-    if (writeBuf != tmpBuf)
-        delete[] writeBuf;
-    return result;
-}
-
-
-/*
- * ===========================================================================
- *      MessageStream
- * ===========================================================================
- */
-
-/*
- * Get ready to go.
- */
-bool MessageStream::init(Pipe* readPipe, Pipe* writePipe, bool initiateHello)
-{
-    assert(mReadPipe == NULL && mWritePipe == NULL);    // only once
-
-    /*
-     * Swap "hello" messages.
-     *
-     * In a more robust implementation, this would include version numbers
-     * and capability flags.
-     */
-    if (initiateHello) {
-        int32_t data = kHelloMsg;
-        Message msg;
-
-        /* send hello */
-        msg.setRaw((unsigned char*) &data, sizeof(data),
-            Message::kCleanupNoDelete);
-        if (!msg.write(writePipe)) {
-            LOG(LOG_WARN, "", "hello write failed in stream init\n");
-            return false;
-        }
-
-        LOG(LOG_DEBUG, "", "waiting for peer to ack my hello\n");
-
-        /* wait for the ack */
-        if (!msg.read(readPipe, true)) {
-            LOG(LOG_WARN, "", "hello ack read failed in stream init\n");
-            return false;
-        }
-
-        const int32_t* pAck;
-        pAck = (const int32_t*) msg.getData();
-        if (pAck == NULL || *pAck != kHelloAckMsg) {
-            LOG(LOG_WARN, "", "hello ack was bad (%08x vs %08x)\n",
-                *pAck, kHelloAckMsg);
-            return false;
-        }
-    } else {
-        int32_t data = kHelloAckMsg;
-        Message msg;
-
-        LOG(LOG_DEBUG, "", "waiting for hello from peer\n");
-
-        /* wait for the hello */
-        if (!msg.read(readPipe, true)) {
-            LOG(LOG_WARN, "", "hello read failed in stream init\n");
-            return false;
-        }
-
-        const int32_t* pAck;
-        pAck = (const int32_t*) msg.getData();
-        if (pAck == NULL || *pAck != kHelloMsg) {
-            LOG(LOG_WARN, "", "hello was bad\n");
-            return false;
-        }
-
-        /* send hello ack */
-        msg.setRaw((unsigned char*) &data, sizeof(data),
-            Message::kCleanupNoDelete);
-        if (!msg.write(writePipe)) {
-            LOG(LOG_WARN, "", "hello ack write failed in stream init\n");
-            return false;
-        }
-    }
-
-    /* success, set up our local stuff */
-    mReadPipe = readPipe;
-    mWritePipe = writePipe;
-
-    //LOG(LOG_DEBUG, "", "init success\n");
-
-    return true;
-}
-
diff --git a/simulator/app/MessageStream.h b/simulator/app/MessageStream.h
deleted file mode 100644
index 82a9b4c..0000000
--- a/simulator/app/MessageStream.h
+++ /dev/null
@@ -1,190 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// High-level message stream that sits on top of a pair of Pipes.  Useful
-// for inter-process communication, e.g. between "simulator" and "runtime".
-//
-// All messages are sent in packets:
-//  +00 16-bit length (of everything that follows), little-endian
-//  +02 8-bit message type
-//  +03 (reserved, must be zero)
-//  +04 message body
-//
-#ifndef _LIBS_UTILS_MESSAGE_STREAM_H
-#define _LIBS_UTILS_MESSAGE_STREAM_H
-
-#ifdef HAVE_ANDROID_OS
-#error DO NOT USE THIS FILE IN THE DEVICE BUILD
-#endif
-
-#include "Pipe.h"
-#include <stdlib.h>
-#include <cutils/uio.h>
-
-// Defined in LogBundle.h.
-struct android_LogBundle;
-
-namespace android {
-
-/*
- * A single message, which can be filled out and sent, or filled with
- * received data.
- *
- * Message objects are reusable.
- */
-class Message {
-public:
-    Message(void)
-        : mCleanup(kCleanupUnknown)
-        { reset(); }
-    ~Message(void) { reset(); }
-
-    /* values for message type byte */
-    typedef enum MessageType {
-        kTypeUnknown = 0,
-        kTypeRaw,           // chunk of raw data
-        kTypeConfig,        // send a name=value pair to peer
-        kTypeCommand,       // simple command w/arg
-        kTypeCommandExt,    // slightly more complicated command
-        kTypeLogBundle,     // multi-part log message
-    } MessageType;
-
-    /* what to do with data when we're done */
-    typedef enum Cleanup {
-        kCleanupUnknown = 0,
-        kCleanupNoDelete,   // do not delete data when object destroyed
-        kCleanupDelete,     // delete with "delete[]"
-    } Cleanup;
-
-    /*
-     * Stuff raw data into the object.  The caller can use the "cleanup"
-     * parameter to decide whether or not the Message object owns the data.
-     */
-    void setRaw(const unsigned char* data, int len, Cleanup cleanup);
-
-    /*
-     * Send a "name=value" pair.
-     */
-    void setConfig(const char* name, const char* value);
-
-    /*
-     * Send a command/arg pair.
-     */
-    void setCommand(int cmd, int arg);
-    void setCommandExt(int cmd, int arg0, int arg1, int arg2);
-
-    /*
-     * Send a multi-part log message.
-     */
-    void setLogBundle(const android_LogBundle* pBundle);
-
-    /*
-     * Simple accessors.
-     */
-    MessageType getType(void) const { return mType; }
-    const unsigned char* getData(void) const { return mData; }
-    int getLength(void) const { return mLength; }
-
-    /*
-     * Not-so-simple accessors.  These coerce the raw data into an object.
-     *
-     * The data returned by these may not outlive the Message, so make
-     * copies if you plan to use them long-term.
-     */
-    bool getConfig(const char** pName, const char** pValue);
-    bool getCommand(int* pCmd, int* pArg);
-    bool getLogBundle(android_LogBundle* pBundle);
-
-    /*
-     * Read or write this message on the specified pipe.
-     *
-     * If "wait" is true, read() blocks until a message arrives.  Only
-     * one thread should be reading at a time.
-     */
-    bool read(Pipe* pPipe, bool wait);
-    bool write(Pipe* pPipe) const;
-
-private:
-    Message& operator=(const Message&);     // not defined
-    Message(const Message&);                // not defined
-
-    void reset(void) {
-        if (mCleanup == kCleanupDelete)
-            delete[] mData;
-
-        mType = kTypeUnknown;
-        mCleanup = kCleanupNoDelete;
-        mData = NULL;
-        mLength = -1;
-    }
-
-    MessageType     mType;
-    Cleanup         mCleanup;
-    unsigned char*  mData;
-    int             mLength;
-    struct iovec    mVec;
-};
-
-
-/*
- * Abstraction of higher-level communication channel.
- *
- * This may be used from multiple threads simultaneously.  Blocking on
- * the read pipe from multiple threads will have unpredictable behavior.
- *
- * Does not take ownership of the pipes passed in to init().
- */
-class MessageStream {
-public:
-    MessageStream(void)
-        : mReadPipe(NULL), mWritePipe(NULL)
-        {}
-    ~MessageStream(void) {}
-
-    /*
-     * Initialize object and exchange greetings.  "initateHello" determines
-     * whether we send "Hello" or block waiting for it to arrive.  Usually
-     * the "parent" initiates.
-     */
-    bool init(Pipe* readPipe, Pipe* writePipe, bool initiateHello);
-
-    bool isReady(void) const { return mReadPipe != NULL && mWritePipe != NULL; }
-
-    /*
-     * Send a message immediately.
-     */
-    bool send(const Message* pMsg) { return pMsg->write(mWritePipe); }
-
-    /*
-     * Receive a message.
-     */
-    bool recv(Message* pMsg, bool wait) { return pMsg->read(mReadPipe, wait); }
-
-    /*
-     * Close communication pipes.  Further attempts to send or receive
-     * will fail.  Note this doesn't actually "close" the pipes, because
-     * we don't own them.
-     */
-    void close(void) { mReadPipe = mWritePipe = NULL; }
-
-    /*
-     * Get our incoming traffic pipe.  This is useful on Linux systems
-     * because it allows access to the file descriptor which can be used
-     * in a select() call.
-     */
-    Pipe* getReadPipe(void) { return mReadPipe; }
-
-private:
-    enum {
-        kHelloMsg       = 0x4e303047,       // 'N00G'
-        kHelloAckMsg    = 0x31455221,       // '1ER!'
-    };
-
-    /* communication pipes; note we don't own these */
-    Pipe*   mReadPipe;
-    Pipe*   mWritePipe;
-};
-
-}; // namespace android
-
-#endif // _LIBS_UTILS_MESSAGE_STREAM_H
diff --git a/simulator/app/MyApp.cpp b/simulator/app/MyApp.cpp
deleted file mode 100644
index fd610b1..0000000
--- a/simulator/app/MyApp.cpp
+++ /dev/null
@@ -1,547 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Application entry point.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"   // needed for Windows build
-#include "wx/fs_zip.h"
-
-#include "MainFrame.h"
-#include "MyApp.h"
-#include "executablepath.h"
-
-#include <stdio.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <signal.h>
-
-#if defined(HAVE_WINDOWS_PATHS)
-# include <windows.h>
-#endif
-
-
-/* the name of our config file */
-static wxString kConfigFileName = wxT(".android.cf");
-
-#ifdef HAVE_WINDOWS_PATHS
-static wxString kExeSuffix = wxT(".exe");
-#else
-static wxString kExeSuffix = wxT("");
-#endif
-
-/* do we want to kill the runtime? */
-bool gWantToKill = false;
-
-/*
- * Signal handler for Ctrl-C.  Under Linux we seem to get hit twice,
- * possibly once for each thread.
- *
- * Avoid using LOG here -- it's not reentrant.  Actually, just avoid doing
- * anything here.
- *
- * Cygwin will ignore the signal but doesn't seem to call the signal
- * handler.  MinGW just kills the process.
- */
-static void SignalHandler(int sigNum)
-{
-    printf("Sim: received signal %d (%s)\n", sigNum,
-        sigNum == SIGINT ? "SIGINT" : "???");
-    gWantToKill = true;
-}
-
-
-/* wxWidgets magic; creates appropriate main entry function */
-IMPLEMENT_APP(MyApp)
-
-/*
- * Application entry point.
- */
-bool MyApp::OnInit()
-{
-    static wxString helpFilePath = wxT("simulator/help/unnamed.htb");
-
-    /*
-     * Parse args.
-     */
-
-    SetDefaults();
-    
-    char** cargv = (char**)malloc(argc * sizeof(char*));
-    for (int i=0; i<argc; i++) {
-	wxCharBuffer tmp = wxString(argv[i]).ToAscii();
-        cargv[i] = tmp.release();
-    }
-    if (!ParseArgs(argc, cargv)) {
-	for (int i=0; i<argc; i++)
-	    free(cargv[i]);
-	free(cargv);
-        return FALSE;
-    }
-    for (int i=0; i<argc; i++)
-        free(cargv[i]);
-    free(cargv);
-    
-    if (!ProcessConfigFile())
-        return FALSE;
-
-    /*
-     * (Try to) catch SIGINT (Ctrl-C).
-     */
-    bool trapInt = false;
-    mPrefs.GetBool("trap-sigint", &trapInt);
-    if (trapInt) {
-        printf("Sim: catching SIGINT\n");
-        signal(SIGINT, SignalHandler);
-    }
-
-    signal(SIGPIPE, SIG_IGN);
-
-    /*
-     * Set stdout to unbuffered.  This is needed for MinGW/MSYS.
-     * Set stderr while we're at it.
-     */
-    setvbuf(stdout, NULL, _IONBF, 0);
-    setvbuf(stderr, NULL, _IONBF, 0);
-
-    /*
-     * Initialize asset manager.
-     */
-    mpAssetManager = NULL;
-    printf("Sim: looking in '%s' for my assets\n", (const char*) mSimAssetPath.ToAscii());
-    ChangeAssetDirectory(mSimAssetPath);
-
-    /*
-     * Add JPEG and PNG image handlers.
-     */
-    ::wxInitAllImageHandlers();
-
-    /*
-     * Set up the help file browser.  We're using wxHtmlHelpController
-     * because it seems to be the only "portable" version other than
-     * the "use external browser" version.
-     */
-    wxFileSystem::AddHandler(new wxZipFSHandler);
-    mHelpController = new wxHtmlHelpController;
-
-    wxString helpFileName;
-    helpFileName = mSimAssetPath;
-    helpFileName += '/';
-    helpFileName += helpFilePath;
-    mHelpController->Initialize(helpFileName);
-
-    /*
-     * Create the main window, which just holds some of our UI.
-     */
-    wxPoint pos(wxDefaultPosition);
-    mPrefs.GetInt("window-main-x", &pos.x);
-    mPrefs.GetInt("window-main-y", &pos.y);
-    mpMainFrame = new MainFrame(wxT("Android Simulator"), pos, wxDefaultSize,
-        wxDEFAULT_FRAME_STYLE);
-    mpMainFrame->Show(TRUE);
-    SetTopWindow(mpMainFrame);
-
-    return TRUE;
-}
-
-/*
- * Change our asset directory.  This requires deleting the existing
- * AssetManager and creating a new one.  Note that any open Assets will
- * still be valid.
- */
-void MyApp::ChangeAssetDirectory(const wxString& dir)
-{
-    delete mpAssetManager;
-    mpAssetManager = new android::AssetManager;
-    android::String8 path(dir.ToAscii());
-    path.appendPath("simulator.zip");
-    mpAssetManager->addAssetPath(path, NULL);
-    // mpAssetManager->setLocale(xxx);
-    mpAssetManager->setVendor("google");
-}
-
-
-/*
- * App is shutting down.  Save the config file.
- */
-int MyApp::OnExit(void)
-{
-    if (mPrefs.GetDirty()) {
-        printf("Sim: writing config file to '%s'\n",
-            (const char*) mConfigFile.ToAscii());
-        if (!mPrefs.Save(mConfigFile.ToAscii())) {
-            fprintf(stderr, "Sim: ERROR: prefs save to '%s' failed\n",
-                (const char*) mConfigFile.ToAscii());
-        }
-    }
-
-    return 0;
-}
-
-static ssize_t
-find_last_slash(const wxString& s)
-{
-    int slash = s.Last('/');
-    if (slash < 0) {
-        slash = s.Last('\\');
-    }
-    return slash;
-}
-
-
-/*
- * Set some default parameters
- */
-void MyApp::SetDefaults()
-{
-    mDebuggerOption = false;
-
-    /* Get the path to this executable, which should
-     * end in something like "/host/linux-x86/bin/simulator".
-     * (The full path may begin with something like "out"
-     * or "out/debug".)
-     */
-    char exepath[PATH_MAX];
-    executablepath(exepath);
-    wxString out = wxString::FromAscii(exepath);
-
-    /* Get the path to the root host directory;  e.g., "out/host".
-     * We can do this by removing the last three slashes
-     * and everything after/between them ("/linux-x86/bin/simulator").
-     */
-    for (int i = 0; i < 3; i++) {
-        int slash = find_last_slash(out);
-        assert(slash >= 0);
-        out.Truncate(slash);
-    }
-
-    /* Get the location of the assets directory; something like
-     * "out/host/common/sim-assets"
-     */
-    mSimAssetPath = out;
-    mSimAssetPath.Append(wxT("/common/sim-assets"));
-
-    /* Get the location of the simulated device filesystem.
-     * We can't reliably predict this based on the executable
-     * location, so try to get it from the environment.
-     */
-    char *envOut = getenv("ANDROID_PRODUCT_OUT");
-    if (envOut == NULL) {
-        fprintf(stderr,
-                "WARNING: $ANDROID_PRODUCT_OUT not set in environment\n");
-        envOut = "";
-    }
-
-    // the root of the android stuff
-    mAndroidRoot = wxString::FromAscii(envOut);
-    mAndroidRoot.Append(wxT("/system"));
-    
-    // where runtime is
-    mRuntimeExe = mAndroidRoot;
-    mRuntimeExe.Append(wxT("/bin/runtime"));
-    mRuntimeExe.Append(kExeSuffix);
-    
-    printf("mAndroidRoot='%s'\n", (const char*) mAndroidRoot.ToAscii());
-    printf("mSimAssetPath='%s'\n", (const char*) mSimAssetPath.ToAscii());
-}
-
-
-/*
- * Parse command-line arguments.
- *
- * Returns "false" if we have a parsing error.
- */
-bool MyApp::ParseArgs(int argc, char** argv)
-{
-    int ic;
-
-    opterr = 0;     // don't complain about unrecognized options
-
-    if (false) {
-        printf("MyApp args:\n");
-        for (int i = 0; i < argc; i++)
-            printf("  %2d: '%s'\n", i, (const char*) argv[i]);
-    }
-
-    while (1) {
-        ic = getopt(argc, argv, "tj:da:f:rx:");
-        if (ic < 0)
-            break;
-
-        switch (ic) {
-        case 'j':
-            mAutoRunApp = wxString::FromAscii(optarg);
-            break;
-        case 't':
-            mAutoRunApp = wxT("com.android.testharness.RunAll");
-            break;
-        case 'd':
-            mDebuggerOption = true;
-            break;
-        case 'x':
-            mDebuggerScript = wxString::FromAscii(optarg);
-            mDebuggerOption = true;     // force debug if a script is being used
-            break;
-        case 'a':       // simulator asset dir
-            mSimAssetPath = wxString::FromAscii(optarg);
-            break;
-        case 'f':       // simulator config file
-            mConfigFile = wxString::FromAscii(optarg);
-            break;
-        case 'r':       // reset path-based options to defaults
-            mResetPaths = true;
-            break;
-        default:
-            fprintf(stderr, "WARNING: unknown sim option '%c'\n", ic);
-            break;
-        }
-    }
-
-    return true;
-}
-
-
-/*
- * Convert a path to absolute form, if needed.
- *
- * String manipulation would be more efficient than system calls, but
- * less reliable.
- *
- * We need to use GetCurrentDirectory() under Windows because, under
- * Cygwin, some wxWidgets features require "C:" paths rather than
- * local-rooted paths.  Probably needed for stand-alone MinGW too.
- */
-void MyApp::AbsifyPath(wxString& dir)
-{
-    char oldDir[512], newDir[512];
-    wxString newDirStr;
-
-    // We still need to do this under Cygwin even if the path is
-    // already absolute.
-    //if (dir[0] == '/' || dir[0] == '\\')
-    //    return;
-
-    if (getcwd(oldDir, sizeof(oldDir)) == NULL) {
-        fprintf(stderr, "getcwd() failed\n");
-        return;
-    }
-
-    if (chdir(dir.ToAscii()) == 0) {
-#if defined(HAVE_WINDOWS_PATHS)
-        DWORD dwRet;
-        dwRet = GetCurrentDirectory(sizeof(newDir), newDir);
-        if (dwRet == 0 || dwRet > sizeof(newDir))
-            sprintf(newDir, "GET_DIR_FAILED %lu", dwRet);
-#else
-        if (getcwd(newDir, sizeof(newDir)) == NULL)
-            strcpy(newDir, "GET_DIR_FAILED");
-#endif
-        newDirStr = wxString::FromAscii(newDir);
-        chdir(oldDir);
-    } else {
-        fprintf(stderr, "WARNING: unable to chdir to '%s' from '%s'\n",
-            (const char*) dir.ToAscii(), oldDir);
-        newDirStr = dir;
-    }
-
-    //dir = "c:/dev/cygwin";
-    //dir += newDirStr;
-    dir = newDirStr;
-}
-
-
-/*
- * Load and process our configuration file.
- */
-bool MyApp::ProcessConfigFile(void)
-{
-    wxString homeConfig;
-    bool configLoaded = false;
-
-    if (getenv("HOME") != NULL) {
-        homeConfig = wxString::FromAscii(getenv("HOME"));
-        homeConfig += '/';
-        homeConfig += kConfigFileName;
-    } else {
-        homeConfig = wxT("./");
-        homeConfig += kConfigFileName;
-    }
-
-    /*
-     * Part 1: read the config file.
-     */
-
-    if (mConfigFile.Length() > 0) {
-        /*
-         * Read from specified config file.  We absolutify the path
-         * first so that we're guaranteed to be hitting the same file
-         * even if the cwd changes.
-         */
-        if (access(mConfigFile.ToAscii(), R_OK) != 0) {
-            fprintf(stderr, "ERROR: unable to open '%s'\n",
-                (const char*) mConfigFile.ToAscii());
-            return false;
-        }
-        if (!mPrefs.Load(mConfigFile.ToAscii())) {
-            fprintf(stderr, "Failed loading config file '%s'\n",
-                (const char*) mConfigFile.ToAscii());
-            return false;
-        } else {
-            configLoaded = true;
-        }
-    } else {
-        /*
-         * Try ./android.cf, then $HOME/android.cf.  If we find one and
-         * read it successfully, save the name in mConfigFile.
-         */
-        {
-            wxString fileName;
-
-            fileName = wxT(".");
-            AbsifyPath(fileName);
-            fileName += wxT("/");
-            fileName += kConfigFileName;
-
-            if (access(fileName.ToAscii(), R_OK) == 0) {
-                if (mPrefs.Load(fileName.ToAscii())) {
-                    mConfigFile = fileName;
-                    configLoaded = true;
-                } else {
-                    /* damaged config files are always fatal */
-                    fprintf(stderr, "Failed loading config file '%s'\n",
-                        (const char*) fileName.ToAscii());
-                    return false;
-                }
-            }
-        }
-        if (!configLoaded) {
-            if (homeConfig.Length() > 0) {
-                if (access(homeConfig.ToAscii(), R_OK) == 0) {
-                    if (mPrefs.Load(homeConfig.ToAscii())) {
-                        mConfigFile = homeConfig;
-                        configLoaded = true;
-                    } else {
-                        /* damaged config files are always fatal */
-                        fprintf(stderr, "Failed loading config file '%s'\n",
-                            (const char*) homeConfig.ToAscii());
-                        return false;
-                    }
-                }
-            }
-        }
-
-    }
-
-    /* if we couldn't find one to load, create a new one in $HOME */
-    if (!configLoaded) {
-        mConfigFile = homeConfig;
-        if (!mPrefs.Create()) {
-            fprintf(stderr, "prefs creation failed\n");
-            return false;
-        }
-    }
-
-    /*
-     * Part 2: reset some entries if requested.
-     *
-     * If you want to reset local items (like paths to binaries) without
-     * disrupting other options, specifying the "reset" flag will cause
-     * some entries to be removed, and new defaults generated below.
-     */
-
-    if (mResetPaths) {
-        if (mPrefs.RemovePref("debugger"))
-            printf("  removed pref 'debugger'\n");
-        if (mPrefs.RemovePref("valgrinder"))
-            printf("  removed pref 'valgrinder'\n");
-    }
-
-    /*
-     * Find GDB.
-     */
-    if (!mPrefs.Exists("debugger")) {
-        static wxString paths[] = {
-            wxT("/bin"), wxT("/usr/bin"), wxString()
-        };
-        wxString gdbPath;
-
-        FindExe(wxT("gdb"), paths, wxT("/usr/bin/gdb"), &gdbPath);
-        mPrefs.SetString("debugger", gdbPath.ToAscii());
-    }
-
-
-    /*
-     * Find Valgrind.  It currently only exists in Linux, and is installed
-     * in /usr/bin/valgrind by default on our systems.  The default version
-     * is old and sometimes fails, so look for a newer version.
-     */
-    if (!mPrefs.Exists("valgrinder")) {
-        static wxString paths[] = {
-            wxT("/home/fadden/local/bin"), wxT("/usr/bin"), wxString()
-        };
-        wxString valgrindPath;
-
-        FindExe(wxT("valgrind"), paths, wxT("/usr/bin/valgrind"), &valgrindPath);
-        mPrefs.SetString("valgrinder", valgrindPath.ToAscii());
-    }
-
-    /*
-     * Set misc options.
-     */
-    if (!mPrefs.Exists("auto-power-on"))
-        mPrefs.SetBool("auto-power-on", true);
-    if (!mPrefs.Exists("gamma"))
-        mPrefs.SetDouble("gamma", 1.0);
-
-    if (mPrefs.GetDirty()) {
-        printf("Sim: writing config file to '%s'\n",
-            (const char*) mConfigFile.ToAscii());
-        if (!mPrefs.Save(mConfigFile.ToAscii())) {
-            fprintf(stderr, "Sim: ERROR: prefs save to '%s' failed\n",
-                (const char*) mConfigFile.ToAscii());
-        }
-    }
-
-    return true;
-}
-
-/*
- * Find an executable by searching in several places.
- */
-/*static*/ void MyApp::FindExe(const wxString& exeName, const wxString paths[],
-    const wxString& defaultPath, wxString* pOut)
-{
-    wxString exePath;
-    wxString slashExe;
-
-    slashExe = wxT("/");
-    slashExe += exeName;
-    slashExe += kExeSuffix;
-
-    while (!(*paths).IsNull()) {
-        wxString tmp;
-
-        tmp = *paths;
-        tmp += slashExe;
-        if (access(tmp.ToAscii(), X_OK) == 0) {
-            printf("Sim: Found '%s' in '%s'\n", (const char*) exeName.ToAscii(), 
-                    (const char*) tmp.ToAscii());
-            *pOut = tmp;
-            return;
-        }
-
-        paths++;
-    }
-
-    printf("Sim: Couldn't find '%s', defaulting to '%s'\n",
-        (const char*) exeName.ToAscii(), (const char*) defaultPath.ToAscii());
-    *pOut = defaultPath;
-}
-
diff --git a/simulator/app/MyApp.h b/simulator/app/MyApp.h
deleted file mode 100644
index d18368d..0000000
--- a/simulator/app/MyApp.h
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Application class.
-//
-#ifndef _SIM_APPMAIN_H
-#define _SIM_APPMAIN_H
-
-#include "wx/help.h"
-#include "wx/html/helpctrl.h"
-
-#include "MainFrame.h"
-#include "DeviceManager.h"
-#include "Preferences.h"
-
-#include <utils/AssetManager.h>
-
-/* flag set from signal handler */
-extern bool gWantToKill;
-
-/*
- * Class representing the application.
- */
-class MyApp : public wxApp {
-public:
-    MyApp(void)
-        : mHelpController(NULL), mpMainFrame(NULL), mpAssetManager(NULL),
-          mResetPaths(false)        // configurable; reset prefs with paths
-        {}
-    ~MyApp(void) 
-    { 
-        delete mpAssetManager;
-        delete mHelpController; 
-    }
-
-    virtual bool OnInit(void);
-    virtual int OnExit(void);
-
-    wxHtmlHelpController* GetHelpController(void) const {
-        return mHelpController;
-    }
-
-    Preferences* GetPrefs(void)                 { return &mPrefs; }
-
-    /* return a pointer to the main window */
-    wxWindow* GetMainFrame(void) { return mpMainFrame; }
-
-    /* get a pointer to our Asset Manager */
-    android::AssetManager* GetAssetManager(void) { return mpAssetManager; }
-
-    /* change the asset dir; requires re-creating Asset Manager */
-    void ChangeAssetDirectory(const wxString& dir);
-
-    const wxString& GetConfigFileName(void) const { return mConfigFile; }
-
-    wxString GetSimAssetPath()                  { return mSimAssetPath; }
-    wxString GetAndroidRoot()                   { return mAndroidRoot; }
-    wxString GetRuntimeExe()                    { return mRuntimeExe; }
-    bool GetDebuggerOption()                    { return mDebuggerOption; }
-    wxString GetDebuggerScript()                { return mDebuggerScript; }
-    wxString GetAutoRunApp()                    { return mAutoRunApp; }
-
-    void Vibrate(int vibrateOn)                 { ((MainFrame*)mpMainFrame)->Vibrate(vibrateOn); }
-
-private:
-    void SetDefaults();
-    bool ParseArgs(int argc, char** argv);
-    void AbsifyPath(wxString& dir);
-    bool ProcessConfigFile(void);
-    static void FindExe(const wxString& exeName, const wxString paths[],
-        const wxString& defaultPath, wxString* pOut);
-
-    wxHtmlHelpController*   mHelpController;
-
-    wxWindow*       mpMainFrame;
-
-    android::AssetManager*  mpAssetManager;
-
-    wxString        mAndroidRoot;
-    wxString        mSimAssetPath;
-    wxString        mRuntimeExe;
-
-    /* command-line options */
-    wxString        mConfigFile;
-    bool            mResetPaths;
-    bool            mDebuggerOption;
-	wxString		mDebuggerScript;
-    wxString        mAutoRunApp;
-
-    Preferences     mPrefs;
-};
-
-#endif // _SIM_APPMAIN_H
diff --git a/simulator/app/PhoneButton.cpp b/simulator/app/PhoneButton.cpp
deleted file mode 100644
index 15c5109..0000000
--- a/simulator/app/PhoneButton.cpp
+++ /dev/null
@@ -1,180 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Simulated device data.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"   // needed for Windows build
-
-#include "LinuxKeys.h"
-#include "PhoneButton.h"
-
-using namespace android;
-
-
-/*
- * Create a PhoneButton without a backing image.
- */
-bool PhoneButton::Create(const char* label)
-{
-    assert(!mHasImage);     // quick check for re-use
-
-    mKeyCode = LookupKeyCode(label);
-    if (mKeyCode == AKEYCODE_UNKNOWN) {
-        fprintf(stderr, "WARNING: key code '%s' not recognized\n", label);
-        // keep going
-    }
-
-    return true;
-}
-
-/*
- * Create a PhoneButton with an associated image.  Don't load the image yet.
- */
-bool PhoneButton::Create(const char* label, const char* imageFileName,
-    int x, int y)
-{
-    if (!Create(label))
-        return false;
-
-    if (mSelectedImage.Create(imageFileName, x, y))
-        mHasImage = true;
-    else
-        fprintf(stderr, "Warning: image create (%s, %d, %d) failed\n",
-            imageFileName, x, y);
-
-    return true;
-}
-
-/*
- * Load the image, if any.
- */
-bool PhoneButton::LoadResources(void)
-{
-    if (!mHasImage)
-        return true;        // no image associated with this button
-
-    bool result = mSelectedImage.LoadResources();
-    if (result)
-        CreateHighlightedBitmap();
-    return result;
-}
-
-/*
- * Unload the image if we loaded one.
- */
-bool PhoneButton::UnloadResources(void)
-{
-    if (!mHasImage)
-        return true;
-
-    return mSelectedImage.UnloadResources();
-}
-
-/* use an inline instead of macro so we don't evaluate args multiple times */
-static inline int MinVal(int a, int b) { return (a < b ? a : b); }
-
-/*
- * Create the "highlighted" bitmap from the "selected" image.
- */
-void PhoneButton::CreateHighlightedBitmap(void)
-{
-    wxBitmap* src = mSelectedImage.GetBitmap();
-    assert(src != NULL);
-    wxImage tmpImage = src->ConvertToImage();
-
-    unsigned char* pRGB = tmpImage.GetData();       // top-left RGBRGB...
-    int x, y;
-
-    /*
-     * Modify the color used for the "highlight" image.
-     */
-    for (y = tmpImage.GetHeight()-1; y >= 0; --y) {
-        for (x = tmpImage.GetWidth()-1; x >= 0; --x) {
-            *(pRGB)   = MinVal(*(pRGB)   + *(pRGB) / 8, 255);
-            *(pRGB+1) = MinVal(*(pRGB+1) + *(pRGB+1) / 8, 255);
-            *(pRGB+2) = *(pRGB+2) * 5 / 8;
-
-            pRGB += 3;
-        }
-    }
-
-    mHighlightedBitmap = wxBitmap(tmpImage);
-}
-
-/*
- * Check to see if the button "collides" with the specified point.
- *
- * This is currently a simple rectangle check, but could be modified
- * to take image transparency into account.
- */
-bool PhoneButton::CheckCollision(int x, int y) const
-{
-    if (!mHasImage)
-        return false;
-
-    return (x >= mSelectedImage.GetX() &&
-            x < mSelectedImage.GetX() + mSelectedImage.GetWidth() &&
-            y >= mSelectedImage.GetY() &&
-            y < mSelectedImage.GetY() + mSelectedImage.GetHeight());
-}
-
-/*
- * Look up a key code based on a string.
- *
- * Returns AKEYCODE_UNKNOWN if the label doesn't match anything.
- */
-int32_t PhoneButton::LookupKeyCode(const char* label) const
-{
-    static const struct {
-        const char* label;
-        int keyCode;
-    } codeList[] = {
-        { "soft-left",      KEY_MENU },
-        { "soft-right",     KEY_KBDILLUMUP },
-        { "home",           KEY_HOME },
-        { "back",           KEY_BACK },
-        { "call",           KEY_F3 },
-        { "phone-dial",     KEY_F3 },
-        { "end-call",       KEY_F4 },
-        { "phone-hangup",   KEY_F4 },
-        { "0",              KEY_0 },
-        { "1",              KEY_1 },
-        { "2",              KEY_2 },
-        { "3",              KEY_3 },
-        { "4",              KEY_4 },
-        { "5",              KEY_5 },
-        { "6",              KEY_6 },
-        { "7",              KEY_7 },
-        { "8",              KEY_8 },
-        { "9",              KEY_9 },
-        { "star",           KEY_SWITCHVIDEOMODE },
-        { "pound",          KEY_KBDILLUMTOGGLE },
-        { "dpad-up",        KEY_UP },
-        { "dpad-down",      KEY_DOWN },
-        { "dpad-left",      KEY_LEFT },
-        { "dpad-right",     KEY_RIGHT },
-        { "dpad-center",    KEY_REPLY },
-        { "volume-up",      KEY_VOLUMEUP },
-        { "volume-down",    KEY_VOLUMEDOWN },
-        { "power",          KEY_POWER },
-        { "camera",         KEY_CAMERA },
-        //{ "clear",          kKeyCodeClear },
-    };
-    const int numCodes = sizeof(codeList) / sizeof(codeList[0]);
-
-    for (int i = 0; i < numCodes; i++) {
-        if (strcmp(label, codeList[i].label) == 0)
-            return codeList[i].keyCode;
-    }
-
-    return AKEYCODE_UNKNOWN;
-};
-
diff --git a/simulator/app/PhoneButton.h b/simulator/app/PhoneButton.h
deleted file mode 100644
index 86c32dd..0000000
--- a/simulator/app/PhoneButton.h
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Phone button image holder.
-//
-#ifndef _SIM_PHONE_BUTTON_H
-#define _SIM_PHONE_BUTTON_H
-
-#include "LoadableImage.h"
-#include <ui/KeycodeLabels.h>
-
-/*
- * One button on a phone.  Position, size, and a highlight graphic.  The
- * coordinates are relative to the device graphic.
- *
- * We now have a "highlighted" graphic for mouse-overs and a "selected"
- * graphic for button presses.  We assume they have the same dimensions.
- * We currently assume that either both or neither exist, because we
- * generate one from the other.
- */
-class PhoneButton {
-public:
-    PhoneButton(void)
-        : mHasImage(false), mKeyCode(AKEYCODE_UNKNOWN)
-        {}
-    virtual ~PhoneButton(void) {}
-    PhoneButton(const PhoneButton& src)
-        : mHasImage(false), mKeyCode(AKEYCODE_UNKNOWN)
-    {
-        CopyMembers(src);
-    }
-    PhoneButton& operator=(const PhoneButton& src) {
-        if (this != &src) {
-            // Unload any resources in case we're using operator= to
-            // assign to an existing object.
-            mSelectedImage.UnloadResources();
-            // Copy fields.
-            CopyMembers(src);
-        }
-        return *this;
-    }
-    void CopyMembers(const PhoneButton& src) {
-        mSelectedImage = src.mSelectedImage;
-        mHighlightedBitmap = src.mHighlightedBitmap;
-        mHasImage = src.mHasImage;
-        mKeyCode = src.mKeyCode;
-    }
-
-    /* finish construction of PhoneButton, with or without an image */
-    bool Create(const char* label);
-    bool Create(const char* label, const char* imageFileName, int x, int y);
-
-    int GetX(void) const { return mSelectedImage.GetX(); }
-    int GetY(void) const { return mSelectedImage.GetY(); }
-    int GetWidth(void) const { return mSelectedImage.GetWidth(); }
-    int GetHeight(void) const { return mSelectedImage.GetHeight(); }
-    wxBitmap* GetHighlightedBitmap(void) { return &mHighlightedBitmap; }
-    wxBitmap* GetSelectedBitmap(void) const {
-        return mSelectedImage.GetBitmap();
-    }
-
-    bool CheckCollision(int x, int y) const;
-    int32_t GetKeyCode(void) const { return mKeyCode; }
-
-    // load or unload the image bitmap, if any
-    bool LoadResources(void);
-    bool UnloadResources(void);
-
-private:
-    void CreateHighlightedBitmap(void);
-    int32_t LookupKeyCode(const char* label) const;
-
-    LoadableImage       mSelectedImage;
-    wxBitmap            mHighlightedBitmap;
-    bool                mHasImage;          // both exist or neither exist
-
-    int32_t mKeyCode;
-};
-
-#endif // _SIM_PHONE_BUTTON_H
diff --git a/simulator/app/PhoneCollection.cpp b/simulator/app/PhoneCollection.cpp
deleted file mode 100644
index e1882cc..0000000
--- a/simulator/app/PhoneCollection.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Our collection of devices.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-//#include "wx/image.h"   // needed for Windows build
-
-
-#include "PhoneCollection.h"
-#include "PhoneData.h"
-#include "MyApp.h"
-
-#include "utils.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <assert.h>
-
-using namespace android;
-
-/*static*/ PhoneCollection* PhoneCollection::mpInstance = NULL;
-
-/*static*/ const char* PhoneCollection::kLayoutFile = "layout.xml";
-
-
-/*
- * (Re-)scan the specified directory for phones.  We register a hit if we can
- * see a file called "<directory>/layout.xml".
- */
-void PhoneCollection::ScanForPhones(const char* directory)
-{
-    /*
-     * Scan through the directory and find everything that looks like it
-     * might hold phone data.
-     */
-    StringArray strArr;
-
-#ifdef BEFORE_ASSET
-    DIR* dirp;
-    struct dirent* entp;
-
-    dirp = opendir(directory);
-    if (dirp == NULL) {
-        char buf[512];
-        fprintf(stderr, "ERROR: unable to scan directory '%s' for phone data\n",
-            directory);
-        fprintf(stderr, "Current dir is %s\n", getcwd(buf, sizeof(buf)));
-        return;
-    }
-
-    while (1) {
-        wxString dirName;
-        wxString fileName;
-
-        entp = readdir(dirp);
-        if (entp == NULL)
-            break;              // done with scan
-        dirName = directory;
-        dirName += '/';
-        dirName += entp->d_name;
-        fileName = dirName;
-        fileName += '/';
-        fileName += kLayoutFile;
-
-        if (access(fileName, R_OK) == 0) {
-            strArr.push_back(dirName);
-            //printf("--- examining '%s'\n", (const char*) fileName);
-        }
-    }
-    closedir(dirp);
-#else
-    android::AssetManager* pAssetMgr = ((MyApp*)wxTheApp)->GetAssetManager();
-    android::AssetDir* pDir;
-    int i, count;
-
-    pDir = pAssetMgr->openDir("");
-    assert(pDir != NULL);
-    count = pDir->getFileCount();
-
-    for (i = 0; i < count; i++) {
-        android::String8 layoutPath;
-
-        if (pDir->getFileType(i) != kFileTypeDirectory)
-            continue;
-
-        layoutPath = pDir->getFileName(i);
-        layoutPath.appendPath(kLayoutFile);
-
-        if (pAssetMgr->getFileType(layoutPath.string()) == kFileTypeRegular) {
-            strArr.push_back(pDir->getFileName(i).string());
-            printf("--- examining '%s'\n", layoutPath.string());
-        }
-    }
-
-    delete pDir;
-#endif
-
-    if (strArr.size() == 0) {
-        fprintf(stderr, "ERROR: no phone data found in '%s'\n", directory);
-        return;
-    }
-
-    /*
-     * Found some candidates.  If they parse successfully, add them to
-     * our list.
-     *
-     * We sort them first, because it's nice when everybody's user
-     * interface looks the same.  Note we're sorting the directory name,
-     * so it's possible to define a sort order in the filesystem that
-     * doesn't require messing up the phone's title string.
-     */
-    mPhoneList.clear();
-    strArr.sort(StringArray::cmpAscendingAlpha);
-
-    for (int i = 0; i < strArr.size(); i++) {
-        PhoneData tmpPhone;
-
-        if (!tmpPhone.Create(strArr.getEntry(i))) {
-            fprintf(stderr, "Sim: Abandoning phone '%s'\n", strArr.getEntry(i));
-            //strArr.erase(i);
-            //i--;
-        } else {
-            if (GetPhoneData(tmpPhone.GetName()) != NULL) {
-                fprintf(stderr, "Sim: ERROR: duplicate name '%s' in '%s'\n",
-                    tmpPhone.GetName(), strArr.getEntry(i));
-            } else {
-                mPhoneList.push_back(tmpPhone);
-            }
-        }
-    }
-}
-
-
-/*
- * Return the Nth member of the phone data array.  (Replace w/Vector.)
- */
-PhoneData* PhoneCollection::GetPhoneData(int idx)
-{
-    typedef List<PhoneData>::iterator Iter;
-
-    for (Iter ii = mPhoneList.begin(); ii != mPhoneList.end(); ++ii) {
-        if (idx == 0)
-            return &(*ii);
-        --idx;
-    }
-    return NULL;
-}
-
-/*
- * Return the entry whose phone data name matches "name".
- */
-PhoneData* PhoneCollection::GetPhoneData(const char* name)
-{
-    typedef List<PhoneData>::iterator Iter;
-
-    for (Iter ii = mPhoneList.begin(); ii != mPhoneList.end(); ++ii) {
-        if (strcasecmp((*ii).GetName(), name) == 0)
-            return &(*ii);
-    }
-    return NULL;
-}
-
diff --git a/simulator/app/PhoneCollection.h b/simulator/app/PhoneCollection.h
deleted file mode 100644
index d16c4a0..0000000
--- a/simulator/app/PhoneCollection.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Our collection of devices.
-//
-#ifndef _SIM_PHONE_COLLECTION_H
-#define _SIM_PHONE_COLLECTION_H
-
-#include <stdlib.h>
-#include "PhoneData.h"
-
-/*
- * Only one instance of this class exists.  It contains a list of all
- * known devices, and methods for scanning for devices.
- */
-class PhoneCollection {
-public:
-    /* get the global instance */
-    static PhoneCollection* GetInstance(void) {
-        if (mpInstance == NULL)
-            mpInstance = new PhoneCollection;
-        return mpInstance;
-    }
-    /* destroy the global instance when shutting down */
-    static void DestroyInstance(void) {
-        delete mpInstance;
-        mpInstance = NULL;
-    }
-
-    /* scan for phones in subdirectories of "directory" */
-    void ScanForPhones(const char* directory);
-
-    /* get phone data */
-    int GetPhoneCount(void) const { return mPhoneList.size(); } // slow
-    PhoneData* GetPhoneData(int idx);
-    PhoneData* GetPhoneData(const char* name);
-
-    /* layout.xml filename -- a string constant used in various places */
-    static const char* kLayoutFile;
-
-private:
-    PhoneCollection(void) {}
-    ~PhoneCollection(void) {}
-
-    /* the phone data; make this a Vector someday */
-    android::List<PhoneData>    mPhoneList;
-
-    /* storage for global instance pointer */
-    static PhoneCollection* mpInstance;
-};
-
-#endif // _SIM_PHONE_COLLECTION_H
diff --git a/simulator/app/PhoneData.cpp b/simulator/app/PhoneData.cpp
deleted file mode 100644
index f6756f5..0000000
--- a/simulator/app/PhoneData.cpp
+++ /dev/null
@@ -1,868 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Simulated device data.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"   // needed for Windows build
-
-
-#include "PhoneData.h"
-#include "PhoneButton.h"
-#include "PhoneCollection.h"
-#include "MyApp.h"
-
-#include "utils.h"
-#include <utils/AssetManager.h>
-#include <utils/String8.h>
-
-#include "tinyxml.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-using namespace android;
-
-/* image relative path hack */
-static const char* kRelPathMagic = "::/";
-
-
-/*
- * ===========================================================================
- *      PhoneKeyboard
- * ===========================================================================
- */
-
-/*
- * Load a <keyboard> chunk.
- */
-bool PhoneKeyboard::ProcessAndValidate(TiXmlNode* pNode)
-{
-    //TiXmlNode* pChild;
-    TiXmlElement* pElem;
-    int qwerty = 0;
-    
-    assert(pNode->Type() == TiXmlNode::ELEMENT);
-
-    pElem = pNode->ToElement();
-    pElem->Attribute("qwerty", &qwerty);
-    const char *kmap = pElem->Attribute("keycharmap");
-
-    if (qwerty == 1) {
-        printf("############## PhoneKeyboard::ProcessAndValidate: qwerty = true!\n");
-        mQwerty = true;
-    }
-
-    if (kmap != NULL) {
-        printf("############## PhoneKeyboard::ProcessAndValidate: keycharmap = %s\n", kmap);
-        mKeyMap = strdup(kmap);
-    }
-    
-    return true;
-}
-
-
-/*
- * ===========================================================================
- *      PhoneDisplay
- * ===========================================================================
- */
-
-/*
- * Load a <display> chunk.
- */
-bool PhoneDisplay::ProcessAndValidate(TiXmlNode* pNode)
-{
-    //TiXmlNode* pChild;
-    TiXmlElement* pElem;
-    const char* name;
-    const char* format;
-
-    assert(pNode->Type() == TiXmlNode::ELEMENT);
-
-    /*
-     * Process attributes.  Right now they're all mandatory, but some of
-     * them could be defaulted (e.g. "rotate").
-     *
-     * [We should do some range-checking here.]
-     */
-    pElem = pNode->ToElement();
-    name = pElem->Attribute("name");
-    if (name == NULL)
-        goto missing;
-    if (pElem->Attribute("width", &mWidth) == NULL)
-        goto missing;
-    if (pElem->Attribute("height", &mHeight) == NULL)
-        goto missing;
-    if (pElem->Attribute("refresh", &mRefresh) == NULL)
-        goto missing;
-    format = pElem->Attribute("format");
-    if (format == NULL)
-        goto missing;
-
-    delete[] mName;
-    mName = strdupNew(name);
-
-    if (strcasecmp(format, "rgb565") == 0) {
-        mFormat = android::PIXEL_FORMAT_RGB_565;
-    } else {
-        fprintf(stderr, "SimCFG: unexpected value for display format\n");
-        return false;
-    }
-
-    return true;
-
-missing:
-    fprintf(stderr,
-        "SimCFG: <display> requires name/width/height/format/refresh\n");
-    return false;
-}
-
-
-/*
- * Returns "true" if the two displays are compatible, "false" if not.
- *
- * Compatibility means they have the same resolution, format, refresh
- * rate, and so on.  Anything transmitted to the runtime as part of the
- * initial configuration setup should be tested.
- */
-/*static*/ bool PhoneDisplay::IsCompatible(PhoneDisplay* pDisplay1,
-    PhoneDisplay* pDisplay2)
-{
-    return (pDisplay1->mWidth == pDisplay2->mWidth &&
-            pDisplay1->mHeight == pDisplay2->mHeight &&
-            pDisplay1->mFormat == pDisplay2->mFormat &&
-            pDisplay1->mRefresh == pDisplay2->mRefresh);
-}
-
-
-/*
- * ===========================================================================
- *      PhoneView
- * ===========================================================================
- */
-
-/*
- * Load a <view> chunk.
- */
-bool PhoneView::ProcessAndValidate(TiXmlNode* pNode, const char* directory)
-{
-    TiXmlNode* pChild;
-    TiXmlElement* pElem;
-    int rotate;
-    const char* displayName;
-
-    assert(pNode->Type() == TiXmlNode::ELEMENT);
-
-    /*
-     * Process attributes.  Right now they're all mandatory, but some of
-     * them could be defaulted (e.g. "rotate").
-     *
-     * [We should do some range-checking here.]
-     */
-    pElem = pNode->ToElement();
-    displayName = pElem->Attribute("display");
-    if (displayName == NULL)
-        goto missing;
-    if (pElem->Attribute("x", &mXOffset) == NULL)
-        goto missing;
-    if (pElem->Attribute("y", &mYOffset) == NULL)
-        goto missing;
-    if (pElem->Attribute("rotate", &rotate) == NULL)
-        goto missing;
-
-    switch (rotate) {
-    case 0:     mRotation = kRot0;      break;
-    case 90:    mRotation = kRot90;     break;
-    case 180:   mRotation = kRot180;    break;
-    case 270:   mRotation = kRot270;    break;
-    default:
-                fprintf(stderr, "SimCFG: unexpected value for rotation\n");
-                mRotation = kRotUnknown;
-                return false;
-    }
-
-    delete[] mDisplayName;
-    mDisplayName = android::strdupNew(displayName);
-
-    /*
-     * Process elements.
-     */
-    for (pChild = pNode->FirstChild(); pChild != NULL;
-        pChild = pChild->NextSibling())
-    {
-        if (pChild->Type() == TiXmlNode::COMMENT)
-            continue;
-
-        if (pChild->Type() == TiXmlNode::ELEMENT) {
-            if (strcasecmp(pChild->Value(), "image") == 0) {
-                if (!ProcessImage(pChild, directory))
-                    return false;
-            } else if (strcasecmp(pChild->Value(), "button") == 0) {
-                if (!ProcessButton(pChild, directory))
-                    return false;
-            } else {
-                fprintf(stderr,
-                    "SimCFG: Warning: unexpected elements in <display>\n");
-            }
-        } else {
-            fprintf(stderr, "SimCFG: Warning: unexpected stuff in <display>\n");
-        }
-    }
-
-    return true;
-
-missing:
-    fprintf(stderr,
-        "SimCFG: <view> requires display/x/y/rotate\n");
-    return false;
-}
-
-/*
- * Handle <image src="zzz" x="123" y="123"/>.
- */
-bool PhoneView::ProcessImage(TiXmlNode* pNode, const char* directory)
-{
-    TiXmlNode* pChild;
-    TiXmlElement* pElem;
-    int x, y;
-    const char* src;
-    LoadableImage tmpLimg;
-    android::String8 fileName;
-
-    pChild = pNode->FirstChild();
-    if (pChild != NULL) {
-        fprintf(stderr, "SimCFG: <image> is funky\n");
-        return false;
-    }
-
-    /*
-     * All attributes are mandatory.
-     */
-    pElem = pNode->ToElement();
-    src = pElem->Attribute("src");
-    if (src == NULL)
-        goto missing;
-    if (pElem->Attribute("x", &x) == NULL)
-        goto missing;
-    if (pElem->Attribute("y", &y) == NULL)
-        goto missing;
-
-    if (strncmp(src, kRelPathMagic, strlen(kRelPathMagic)) == 0) {
-        fileName = src + strlen(kRelPathMagic);
-    } else {
-        fileName = directory;
-        fileName += "/";
-        fileName += src;
-    }
-
-    tmpLimg.Create(fileName, x, y);
-    mImageList.push_back(tmpLimg);
-
-    return true;
-
-missing:
-    fprintf(stderr, "SimCFG: <image> requires src/x/y\n");
-    return false;
-}
-
-/*
- * Handle <button keyCode="zzz" src="zzz" x="123" y="123"/> and
- * <button keyCode="zzz"/>.
- */
-bool PhoneView::ProcessButton(TiXmlNode* pNode, const char* directory)
-{
-    TiXmlNode* pChild;
-    TiXmlElement* pElem;
-    int x, y;
-    const char* keyCode;
-    const char* src;
-    PhoneButton tmpButton;
-    android::String8 fileName;
-
-    pChild = pNode->FirstChild();
-    if (pChild != NULL) {
-        fprintf(stderr, "SimCFG: button is funky\n");
-        return false;
-    }
-
-    /*
-     * Only keyCode is mandatory.  If they specify "src", then "x" and "y"
-     * are also required.
-     */
-    pElem = pNode->ToElement();
-    keyCode = pElem->Attribute("keyCode");
-    if (keyCode == NULL)
-        goto missing;
-
-    src = pElem->Attribute("src");
-    if (src != NULL) {
-        if (pElem->Attribute("x", &x) == NULL)
-            goto missing;
-        if (pElem->Attribute("y", &y) == NULL)
-            goto missing;
-    }
-
-    if (src == NULL)
-        tmpButton.Create(keyCode);
-    else {
-        if (strncmp(src, kRelPathMagic, strlen(kRelPathMagic)) == 0) {
-            fileName = src + strlen(kRelPathMagic);
-        } else {
-            fileName = directory;
-            fileName += "/";
-            fileName += src;
-        }
-        tmpButton.Create(keyCode, fileName, x, y);
-    }
-
-    mButtonList.push_back(tmpButton);
-
-    return true;
-
-missing:
-    fprintf(stderr, "SimCFG: <button> requires keycode and may have src/x/y\n");
-    return false;
-}
-
-
-/*
- * Load all resources associated with the display.
- */
-bool PhoneView::LoadResources(void)
-{
-    typedef List<LoadableImage>::iterator LIter;
-    typedef List<PhoneButton>::iterator BIter;
-
-    for (LIter ii = mImageList.begin(); ii != mImageList.end(); ++ii)
-        (*ii).LoadResources();
-    for (BIter ii = mButtonList.begin(); ii != mButtonList.end(); ++ii)
-        (*ii).LoadResources();
-    return true;
-}
-
-/*
- * Unload all resources associated with the display.
- */
-bool PhoneView::UnloadResources(void)
-{
-    typedef List<LoadableImage>::iterator LIter;
-    typedef List<PhoneButton>::iterator BIter;
-
-    for (LIter ii = mImageList.begin(); ii != mImageList.end(); ++ii)
-        (*ii).UnloadResources();
-    for (BIter ii = mButtonList.begin(); ii != mButtonList.end(); ++ii)
-        (*ii).UnloadResources();
-    return true;
-}
-
-
-/*
- * Get the #of images.
- */
-int PhoneView::GetBkgImageCount(void) const
-{
-    return mImageList.size();
-}
-
-/*
- * Return the Nth entry.
- */
-const LoadableImage* PhoneView::GetBkgImage(int idx) const
-{
-    typedef List<LoadableImage>::const_iterator Iter;
-
-    for (Iter ii = mImageList.begin(); ii != mImageList.end(); ++ii) {
-        if (!idx)
-            return &(*ii);
-        --idx;
-    }
-
-    return NULL;
-}
-
-
-/*
- * Find the first button that covers the specified coordinates.
- *
- * The coordinates must be relative to the upper left corner of the
- * phone image.
- */
-PhoneButton* PhoneView::FindButtonHit(int x, int y)
-{
-    typedef List<PhoneButton>::iterator Iter;
-
-    for (Iter ii = mButtonList.begin(); ii != mButtonList.end(); ++ii) {
-        if ((*ii).CheckCollision(x, y))
-            return &(*ii);
-    }
-
-    return NULL;
-}
-
-/*
- * Find the first button with a matching key code.
- */
-PhoneButton* PhoneView::FindButtonByKey(int32_t keyCode)
-{
-    typedef List<PhoneButton>::iterator Iter;
-
-    for (Iter ii = mButtonList.begin(); ii != mButtonList.end(); ++ii) {
-        if ((*ii).GetKeyCode() == keyCode)
-            return &(*ii);
-    }
-
-    return NULL;
-}
-
-
-/*
- * ===========================================================================
- *      PhoneMode
- * ===========================================================================
- */
-
-/*
- * Process a <mode name="zzz"> chunk.
- */
-bool PhoneMode::ProcessAndValidate(TiXmlNode* pNode, const char* directory)
-{
-    TiXmlNode* pChild;
-    const char* name;
-
-    assert(pNode->Type() == TiXmlNode::ELEMENT);
-
-    name = pNode->ToElement()->Attribute("name");
-    if (name == NULL) {
-        fprintf(stderr, "SimCFG: <mode> requires name attrib\n");
-        return false;
-    }
-    SetName(name);
-
-    for (pChild = pNode->FirstChild(); pChild != NULL;
-        pChild = pChild->NextSibling())
-    {
-        if (pChild->Type() == TiXmlNode::COMMENT)
-            continue;
-
-        if (pChild->Type() == TiXmlNode::ELEMENT &&
-            strcasecmp(pChild->Value(), "view") == 0)
-        {
-            PhoneView tmpDisplay;
-            bool result;
-
-            result = tmpDisplay.ProcessAndValidate(pChild, directory);
-            if (!result)
-                return false;
-
-            mViewList.push_back(tmpDisplay);
-        } else {
-            fprintf(stderr, "SimCFG: Warning: unexpected stuff in <mode>\n");
-        }
-    }
-
-    if (mViewList.size() == 0) {
-        fprintf(stderr, "SimCFG: no <view> entries found\n");
-        return false;
-    }
-
-    return true;
-}
-
-
-/*
- * Load all resources associated with the phone.
- */
-bool PhoneMode::LoadResources(void)
-{
-    typedef List<PhoneView>::iterator Iter;
-
-    for (Iter ii = mViewList.begin(); ii != mViewList.end(); ++ii)
-        (*ii).LoadResources();
-    return true;
-}
-
-/*
- * Unload all resources associated with the phone.
- */
-bool PhoneMode::UnloadResources(void)
-{
-    typedef List<PhoneView>::iterator Iter;
-
-    for (Iter ii = mViewList.begin(); ii != mViewList.end(); ++ii)
-        (*ii).UnloadResources();
-    return true;
-}
-
-
-/*
- * Return the Nth entry.  [make this a Vector?]
- */
-PhoneView* PhoneMode::GetPhoneView(int viewNum)
-{
-    typedef List<PhoneView>::iterator Iter;
-
-    for (Iter ii = mViewList.begin(); ii != mViewList.end(); ++ii) {
-        if (viewNum == 0)
-            return &(*ii);
-        --viewNum;
-    }
-    return NULL;
-}
-
-
-/*
- * ===========================================================================
- *      PhoneData
- * ===========================================================================
- */
-
-
-/*
- * Look for a "layout.xml" in the specified directory.  If found, parse
- * the contents out.
- *
- * Returns "true" on success, "false" on failure.
- */
-bool PhoneData::Create(const char* directory)
-{
-    android::String8 fileName;
-
-    SetDirectory(directory);
-
-    fileName = directory;
-    fileName += "/";
-    fileName += PhoneCollection::kLayoutFile;
-
-#ifdef BEFORE_ASSET
-    TiXmlDocument doc(fileName);
-    if (!doc.LoadFile())
-#else
-    android::AssetManager* pAssetMgr = ((MyApp*)wxTheApp)->GetAssetManager();
-    TiXmlDocument doc;
-    android::Asset* pAsset;
-    bool result;
-
-    pAsset = pAssetMgr->open(fileName, Asset::ACCESS_STREAMING);
-    if (pAsset == NULL) {
-        fprintf(stderr, "Unable to open asset '%s'\n", (const char*) fileName);
-        return false;
-    } else {
-        //printf("--- opened asset '%s'\n",
-        //    (const char*) pAsset->getAssetSource());
-    }
-
-    /* TinyXml insists that the buffer be NULL-terminated... ugh */
-    char* buf = new char[pAsset->getLength() +1];
-    pAsset->read(buf, pAsset->getLength());
-    buf[pAsset->getLength()] = '\0';
-
-    delete pAsset;
-    result = doc.Parse(buf);
-    delete[] buf;
-
-    if (!result)
-#endif
-    {
-        fprintf(stderr, "SimCFG: ERROR: failed parsing '%s'\n",
-            (const char*) fileName);
-        if (doc.ErrorRow() != 0)
-            fprintf(stderr, "    XML: %s (row=%d col=%d)\n",
-                doc.ErrorDesc(), doc.ErrorRow(), doc.ErrorCol());
-        else
-            fprintf(stderr, "    XML: %s\n", doc.ErrorDesc());
-        return false;
-    }
-
-    if (!ProcessAndValidate(&doc)) {
-        fprintf(stderr, "SimCFG: ERROR: failed analyzing '%s'\n",
-            (const char*) fileName);
-        return false;
-    }
-
-    printf("SimCFG: loaded data from '%s'\n", (const char*) fileName);
-
-    return true;
-}
-
-/*
- * TinyXml has loaded and parsed the XML document for us.  We need to
- * run through the DOM tree, pull out the interesting bits, and make
- * sure the stuff we need is present.
- *
- * Returns "true" on success, "false" on failure.
- */
-bool PhoneData::ProcessAndValidate(TiXmlDocument* pDoc)
-{
-    bool deviceFound = false;
-    TiXmlNode* pChild;
-
-    assert(pDoc->Type() == TiXmlNode::DOCUMENT);
-
-    for (pChild = pDoc->FirstChild(); pChild != NULL;
-        pChild = pChild->NextSibling())
-    {
-        /*
-         * Find the <device> entry.  There should be exactly one.
-         */
-        if (pChild->Type() == TiXmlNode::ELEMENT) {
-            if (strcasecmp(pChild->Value(), "device") != 0) {
-                fprintf(stderr,
-                    "SimCFG: Warning: unexpected element '%s' at top level\n",
-                    pChild->Value());
-                continue;
-            }
-            if (deviceFound) {
-                fprintf(stderr, "SimCFG: one <device> per customer\n");
-                return false;
-            }
-
-            bool result = ProcessDevice(pChild);
-            if (!result)
-                return false;
-            deviceFound = true;
-        }
-    }
-
-    if (!deviceFound) {
-        fprintf(stderr, "SimCFG: no <device> section found\n");
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Process a <device name="zzz"> chunk.
- */
-bool PhoneData::ProcessDevice(TiXmlNode* pNode)
-{
-    TiXmlNode* pChild;
-    const char* name;
-
-    assert(pNode->Type() == TiXmlNode::ELEMENT);
-
-    name = pNode->ToElement()->Attribute("name");
-    if (name == NULL) {
-        fprintf(stderr, "SimCFG: <device> requires name attrib\n");
-        return false;
-    }
-    SetName(name);
-
-    /*
-     * Walk through the children and find interesting stuff.
-     *
-     * Might be more correct to process all <display> entries and
-     * then process all <view> entries, since <view> has "pointers"
-     * to <display>.  We're deferring the lookup until later, though,
-     * so for now it doesn't really matter.
-     */
-    for (pChild = pNode->FirstChild(); pChild != NULL;
-        pChild = pChild->NextSibling())
-    {
-        bool result;
-
-        if (pChild->Type() == TiXmlNode::COMMENT)
-            continue;
-
-        if (pChild->Type() == TiXmlNode::ELEMENT &&
-            strcasecmp(pChild->Value(), "title") == 0)
-        {
-            result = ProcessTitle(pChild);
-            if (!result)
-                return false;
-        } else if (pChild->Type() == TiXmlNode::ELEMENT &&
-            strcasecmp(pChild->Value(), "display") == 0)
-        {
-            PhoneDisplay tmpDisplay;
-
-            result = tmpDisplay.ProcessAndValidate(pChild);
-            if (!result)
-                return false;
-
-            mDisplayList.push_back(tmpDisplay);
-        } else if (pChild->Type() == TiXmlNode::ELEMENT &&
-            strcasecmp(pChild->Value(), "keyboard") == 0)
-        {
-            PhoneKeyboard tmpKeyboard;
-            result = tmpKeyboard.ProcessAndValidate(pChild);
-            if (!result)
-                return false;
-                
-            mKeyboardList.push_back(tmpKeyboard);           
-        } else if (pChild->Type() == TiXmlNode::ELEMENT &&
-            strcasecmp(pChild->Value(), "mode") == 0)
-        {
-            PhoneMode tmpMode;
-
-            result = tmpMode.ProcessAndValidate(pChild, mDirectory);
-            if (!result)
-                return false;
-
-            mModeList.push_back(tmpMode);
-        } else {
-            fprintf(stderr, "SimCFG: Warning: unexpected stuff in <device>\n");
-        }
-    }
-
-    if (mDisplayList.size() == 0) {
-        fprintf(stderr, "SimCFG: no <display> entries found\n");
-        return false;
-    }
-    if (mModeList.size() == 0) {
-        fprintf(stderr, "SimCFG: no <mode> entries found\n");
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Handle <title>.
- */
-bool PhoneData::ProcessTitle(TiXmlNode* pNode)
-{
-    TiXmlNode* pChild;
-
-    pChild = pNode->FirstChild();
-    if (pChild->Type() != TiXmlNode::TEXT) {
-        fprintf(stderr, "SimCFG: title is funky\n");
-        return false;
-    }
-
-    SetTitle(pChild->Value());
-    return true;
-}
-
-
-/*
- * Load all resources associated with the phone.
- */
-bool PhoneData::LoadResources(void)
-{
-    typedef List<PhoneMode>::iterator Iter;
-
-    for (Iter ii = mModeList.begin(); ii != mModeList.end(); ++ii)
-        (*ii).LoadResources();
-    return true;
-}
-
-/*
- * Unload all resources associated with the phone.
- */
-bool PhoneData::UnloadResources(void)
-{
-    typedef List<PhoneMode>::iterator Iter;
-
-    for (Iter ii = mModeList.begin(); ii != mModeList.end(); ++ii)
-        (*ii).UnloadResources();
-    return true;
-}
-
-
-/*
- * Return the PhoneMode entry with the matching name.
- *
- * Returns NULL if no match was found.
- */
-PhoneMode* PhoneData::GetPhoneMode(const char* modeName)
-{
-    typedef List<PhoneMode>::iterator Iter;
-
-    for (Iter ii = mModeList.begin(); ii != mModeList.end(); ++ii) {
-        if (strcmp((*ii).GetName(), modeName) == 0)
-            return &(*ii);
-    }
-    return NULL;
-}
-
-/*
- * Return the Nth phone mode entry.
- */
-PhoneMode* PhoneData::GetPhoneMode(int idx)
-{
-    typedef List<PhoneMode>::iterator Iter;
-
-    for (Iter ii = mModeList.begin(); ii != mModeList.end(); ++ii) {
-        if (!idx)
-            return &(*ii);
-        --idx;
-    }
-    return NULL;
-}
-
-
-/*
- * Return the PhoneDisplay entry with the matching name.
- *
- * Returns NULL if no match was found.
- */
-PhoneDisplay* PhoneData::GetPhoneDisplay(const char* dispName)
-{
-    typedef List<PhoneDisplay>::iterator Iter;
-
-    for (Iter ii = mDisplayList.begin(); ii != mDisplayList.end(); ++ii) {
-        if (strcmp((*ii).GetName(), dispName) == 0)
-            return &(*ii);
-    }
-    return NULL;
-}
-
-/*
- * Return the Nth phone mode entry.
- */
-PhoneDisplay* PhoneData::GetPhoneDisplay(int idx)
-{
-    typedef List<PhoneDisplay>::iterator Iter;
-
-    for (Iter ii = mDisplayList.begin(); ii != mDisplayList.end(); ++ii) {
-        if (!idx)
-            return &(*ii);
-        --idx;
-    }
-    return NULL;
-}
-
-/*
- * Find the PhoneDisplay entry with the matching name, and return its index.
- *
- * Returns -1 if the entry wasn't found.
- */
-int PhoneData::GetPhoneDisplayIndex(const char* dispName)
-{
-    typedef List<PhoneDisplay>::iterator Iter;
-    int idx = 0;
-
-    for (Iter ii = mDisplayList.begin(); ii != mDisplayList.end(); ++ii) {
-        if (strcmp((*ii).GetName(), dispName) == 0)
-            return idx;
-        idx++;
-    }
-    return -1;
-}
-
-
-/*
- * Return the Nth phone keyboard entry.
- */
-PhoneKeyboard* PhoneData::GetPhoneKeyboard(int idx)
-{
-    typedef List<PhoneKeyboard>::iterator Iter;
-
-    for (Iter ii = mKeyboardList.begin(); ii != mKeyboardList.end(); ++ii) {
-        if (!idx)
-            return &(*ii);
-        --idx;
-    }
-    return NULL;
-}
diff --git a/simulator/app/PhoneData.h b/simulator/app/PhoneData.h
deleted file mode 100644
index 5a95796..0000000
--- a/simulator/app/PhoneData.h
+++ /dev/null
@@ -1,365 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Simulated device definition.
-//
-// The "root" of the data structures here is PhoneCollection, which may
-// discard the entire set if the user asks to re-scan the phone definitions.
-// These structures should be considered read-only.
-//
-// PhoneCollection (single global instance)
-//    -->PhoneData
-//       -->PhoneDisplay
-//       -->PhoneMode
-//          -->PhoneView
-//
-#ifndef _SIM_PHONE_DATA_H
-#define _SIM_PHONE_DATA_H
-
-#include <stdio.h>
-#include "tinyxml.h"
-
-#include "PhoneButton.h"
-#include "LoadableImage.h"
-#include <ui/PixelFormat.h>
-#include "utils.h"
-
-
-/*
- * This represents the keyboard type of the simulated device
- */
-class PhoneKeyboard {
-public:
-    PhoneKeyboard(void)
-        : mQwerty(false), mKeyMap(NULL)
-        {}       
-    ~PhoneKeyboard(void) {
-        free((void*)mKeyMap);
-    }    
- 
-    PhoneKeyboard(const PhoneKeyboard& src)
-        : mQwerty(false), mKeyMap(NULL)
-    {
-        CopyMembers(src);
-    }
-    PhoneKeyboard& operator=(const PhoneKeyboard& src) {
-        if (this != &src)       // self-assignment
-            CopyMembers(src);
-        return *this;
-    }
-    void CopyMembers(const PhoneKeyboard& src) {
-        mQwerty = src.mQwerty;
-        mKeyMap = src.mKeyMap ? strdup(src.mKeyMap) : NULL;
-    }
-    
-    bool ProcessAndValidate(TiXmlNode* pNode);
-    
-    bool getQwerty() { return mQwerty; }    
-
-    const char *getKeyMap() { return mKeyMap; }
-private:
-    bool    mQwerty;
-    const char * mKeyMap;
-};
-
-/*
- * This represents a single display device, usually an LCD screen.
- * It also includes an optional surrounding graphic, usually a picture of
- * the device itself.
- */
-class PhoneDisplay {
-public:
-    PhoneDisplay(void)
-        : mName(NULL)
-        {}
-    ~PhoneDisplay(void) {
-        delete[] mName;
-    }
-
-    PhoneDisplay(const PhoneDisplay& src)
-        : mName(NULL)
-    {
-        CopyMembers(src);
-    }
-    PhoneDisplay& operator=(const PhoneDisplay& src) {
-        if (this != &src)       // self-assignment
-            CopyMembers(src);
-        return *this;
-    }
-    void CopyMembers(const PhoneDisplay& src) {
-        // Can't memcpy and member-copy the container classes, because the
-        // containers have already been constructed, and for operator= they
-        // might even have stuff in them.
-        delete[] mName;
-        mName = android::strdupNew(src.mName);
-        mWidth = src.mWidth;
-        mHeight = src.mHeight;
-        mFormat = src.mFormat;
-        mRefresh = src.mRefresh;
-    }
-
-    bool ProcessAndValidate(TiXmlNode* pNode);
-
-    const char* GetName(void) const { return mName; }
-    int GetWidth(void) const { return mWidth; }
-    int GetHeight(void) const { return mHeight; }
-    android::PixelFormat GetFormat(void) const { return mFormat; }
-    int GetRefresh(void) const { return mRefresh; }
-
-    static bool IsCompatible(PhoneDisplay* pDisplay1, PhoneDisplay* pDisplay2);
-
-private:
-    char*           mName;
-
-    // display dimensions, in pixels
-    int             mWidth;
-    int             mHeight;
-
-    // frame buffer format
-    android::PixelFormat mFormat;
-
-    // display refresh rate, in fps
-    int             mRefresh;
-};
-
-/*
- * This is a "view" of a device, which includes the display, a background
- * image, and perhaps some clickable keys for input.
- *
- * Because the key graphics are associated with a particular display, we
- * hold a list of keys here.  (It also allows the possibility of handling
- * a situation where the same key shows up in multiple background images,
- * e.g. a flip phone with a "volume" key on the side.  If we include the
- * key in both places, we can highlight it on both displays.)
- */
-class PhoneView {
-public:
-    PhoneView(void)
-        : mDisplayName(NULL)
-        {}
-    ~PhoneView(void) {
-        delete[] mDisplayName;
-    }
-
-    PhoneView(const PhoneView& src) {
-        CopyMembers(src);
-    }
-    PhoneView& operator=(const PhoneView& src) {
-        if (this != &src)       // self-assignment
-            CopyMembers(src);
-        return *this;
-    }
-    void CopyMembers(const PhoneView& src) {
-        // Can't memcpy and member-copy the container classes, because the
-        // containers have already been constructed, and for operator= they
-        // might even have stuff in them.
-        mImageList = src.mImageList;
-        mButtonList = src.mButtonList;
-        mDisplayName = android::strdupNew(src.mDisplayName);
-        mXOffset = src.mXOffset;
-        mYOffset = src.mYOffset;
-        mRotation = src.mRotation;
-    }
-
-    // load or unload resources, e.g. wxBitmaps from image files
-    bool LoadResources(void);
-    bool UnloadResources(void);
-
-    // simple accessors
-    int GetXOffset(void) const { return mXOffset; }
-    int GetYOffset(void) const { return mYOffset; }
-    const char* GetDisplayName(void) const { return mDisplayName; }
-
-    // image list access
-    int GetBkgImageCount(void) const;
-    const LoadableImage* GetBkgImage(int idx) const;
-
-    // find the first button that covers the specified coords
-    PhoneButton* FindButtonHit(int x, int y);
-
-    // find the first button with a matching key code
-    PhoneButton* FindButtonByKey(int32_t keyCode);
-
-    bool ProcessAndValidate(TiXmlNode* pNode, const char* directory);
-    bool ProcessImage(TiXmlNode* pNode, const char* directory);
-    bool ProcessButton(TiXmlNode* pNode, const char* directory);
-
-private:
-    // background images for the phone picture that surrounds the display
-    android::List<LoadableImage> mImageList;
-
-    // list of accessible buttons, some of which have highlight graphics
-    android::List<PhoneButton>  mButtonList;
-
-    char*           mDisplayName;
-
-    // these determine where in the image the display output goes
-    int             mXOffset;
-    int             mYOffset;
-
-    // clockwise rotation of the output; sim must rotate in opposite direction
-    typedef enum Rotation {
-        kRotUnknown = 0,
-        kRot0,
-        kRot90,
-        kRot180,
-        kRot270,
-    } Rotation;
-    Rotation        mRotation;
-};
-
-/*
- * One mode of a phone.  Simple devices only have one mode.  Flip phones
- * have two (opened and closed).  Other devices might have more.  The
- * mode is communicated to the runtime because it may need to process
- * input events differently.
- */
-class PhoneMode {
-public:
-    PhoneMode(void)
-        : mName(NULL)
-        {}
-    ~PhoneMode(void) {
-        delete[] mName;
-    }
-
-    PhoneMode(const PhoneMode& src)
-        : mName(NULL)
-    {
-        CopyMembers(src);
-    }
-    PhoneMode& operator=(const PhoneMode& src) {
-        if (this != &src)       // self-assignment
-            CopyMembers(src);
-        return *this;
-    }
-    void CopyMembers(const PhoneMode& src) {
-        delete[] mName;
-        mName = android::strdupNew(src.mName);
-        mViewList = src.mViewList;
-    }
-
-
-    // load or unload resources for this object and all members of mViewList
-    bool LoadResources(void);
-    bool UnloadResources(void);
-
-    // get the #of views
-    int GetNumViews(void) const { return mViewList.size(); }
-    // get the Nth display
-    PhoneView* GetPhoneView(int viewNum);
-
-    const char* GetName(void) const { return mName; }
-    void SetName(const char* name) {
-        delete[] mName;
-        mName = android::strdupNew(name);
-    }
-
-    // load the <mode> section from the config file
-    bool ProcessAndValidate(TiXmlNode* pNode, const char* directory);
-
-private:
-    char*           mName;
-
-    android::List<PhoneView> mViewList;
-};
-
-/*
- * This holds the data for one device.
- *
- * Each device may have multiple "modes", e.g. a flip-phone that can be
- * open or shut.  Each mode has different configurations for the visible
- * displays and active keys.
- */
-class PhoneData {
-public:
-    PhoneData(void) :
-        mName(NULL), mTitle(NULL), mDirectory(NULL)
-        {}
-    virtual ~PhoneData(void) {
-        delete[] mName;
-        delete[] mTitle;
-        delete[] mDirectory;
-    }
-
-    PhoneData(const PhoneData& src)
-        : mName(NULL), mTitle(NULL), mDirectory(NULL)
-    {
-        CopyMembers(src);
-    }
-    PhoneData& operator=(const PhoneData& src) {
-        if (this != &src)       // self-assignment
-            CopyMembers(src);
-        return *this;
-    }
-    void CopyMembers(const PhoneData& src) {
-        delete[] mName;
-        delete[] mTitle;
-        delete[] mDirectory;
-        mName = android::strdupNew(src.mName);
-        mTitle = android::strdupNew(src.mTitle);
-        mDirectory = android::strdupNew(src.mDirectory);
-        mModeList = src.mModeList;
-        mDisplayList = src.mDisplayList;
-        mKeyboardList = src.mKeyboardList;
-    }
-
-    // initialize the object with the phone data in the specified dir
-    bool Create(const char* directory);
-
-    // load or unload resources, e.g. wxBitmaps from image files
-    bool LoadResources(void);
-    bool UnloadResources(void);
-
-    // simple accessors
-    const char* GetName(void) const { return mName; }
-    void SetName(const char* name) {
-        delete[] mName;
-        mName = android::strdupNew(name);
-    }
-    const char* GetTitle(void) const { return mTitle; }
-    void SetTitle(const char* title) {
-        delete[] mTitle;
-        mTitle = android::strdupNew(title);
-    }
-    const char* GetDirectory(void) const { return mDirectory; }
-    void SetDirectory(const char* dir) {
-        delete[] mDirectory;
-        mDirectory = android::strdupNew(dir);
-    }
-
-    
-    // get number of modes
-    int GetNumModes(void) const { return mModeList.size(); }
-    // get the specified mode object
-    PhoneMode* GetPhoneMode(int idx);
-    PhoneMode* GetPhoneMode(const char* modeName);
-
-    // get number of displays
-    int GetNumDisplays(void) const { return mDisplayList.size(); }
-    // get the specified display object
-    PhoneDisplay* GetPhoneDisplay(int idx);
-    PhoneDisplay* GetPhoneDisplay(const char* displayName);
-    // get the index of the matching display
-    int GetPhoneDisplayIndex(const char* displayName);
-
-    // get number of keyboards
-    int GetNumKeyboards(void) const { return mKeyboardList.size(); }
-    // get the specified display object
-    PhoneKeyboard* GetPhoneKeyboard(int idx);
-    
-private:
-    bool ProcessAndValidate(TiXmlDocument* pDoc);
-    bool ProcessDevice(TiXmlNode* pNode);
-    bool ProcessTitle(TiXmlNode* pNode);
-
-    char*           mName;
-    char*           mTitle;
-    char*           mDirectory;
-
-    android::List<PhoneMode> mModeList;
-    android::List<PhoneDisplay> mDisplayList;
-    android::List<PhoneKeyboard> mKeyboardList;
-};
-
-#endif // _SIM_PHONE_DATA_H
diff --git a/simulator/app/PhoneWindow.cpp b/simulator/app/PhoneWindow.cpp
deleted file mode 100644
index 0a87762..0000000
--- a/simulator/app/PhoneWindow.cpp
+++ /dev/null
@@ -1,1051 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Displays the phone image and handles user input.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"   // needed for Windows build
-#include "wx/dcbuffer.h"
-
-#include "LinuxKeys.h"
-#include "PhoneWindow.h"
-#include "DeviceWindow.h"
-#include "PhoneData.h"
-#include "PhoneCollection.h"
-#include "MainFrame.h"
-#include "MyApp.h"
-
-using namespace android;
-
-BEGIN_EVENT_TABLE(PhoneWindow, wxWindow)    // NOT wxDialog
-    EVT_ACTIVATE(PhoneWindow::OnActivate)
-    //EVT_ACTIVATE_APP(PhoneWindow::OnActivate)
-    EVT_CLOSE(PhoneWindow::OnClose)
-    EVT_MOVE(PhoneWindow::OnMove)
-    EVT_ERASE_BACKGROUND(PhoneWindow::OnErase)
-    EVT_PAINT(PhoneWindow::OnPaint)
-
-    EVT_KEY_DOWN(PhoneWindow::OnKeyDown)
-    EVT_KEY_UP(PhoneWindow::OnKeyUp)
-    EVT_LEFT_DOWN(PhoneWindow::OnMouseLeftDown)
-    EVT_LEFT_DCLICK(PhoneWindow::OnMouseLeftDown)
-    EVT_LEFT_UP(PhoneWindow::OnMouseLeftUp)
-    EVT_RIGHT_DOWN(PhoneWindow::OnMouseRightDown)
-    EVT_RIGHT_DCLICK(PhoneWindow::OnMouseRightDown)
-    EVT_RIGHT_UP(PhoneWindow::OnMouseRightUp)
-    EVT_MOTION(PhoneWindow::OnMouseMotion)
-    EVT_LEAVE_WINDOW(PhoneWindow::OnMouseLeaveWindow)
-    EVT_TIMER(kVibrateTimerId, PhoneWindow::OnTimer)
-END_EVENT_TABLE()
-
-
-/*
- * Create a new PhoneWindow.  This should be a child of the main frame.
- */
-PhoneWindow::PhoneWindow(wxWindow* parent, const wxPoint& posn)
-    : wxDialog(parent, wxID_ANY, wxT("Device"), posn, wxDefaultSize,
-        wxDEFAULT_DIALOG_STYLE),
-      mpMOHViewIndex(-1),
-      mpMOHButton(NULL),
-      mMouseKeySent(AKEYCODE_UNKNOWN),
-      mpViewInfo(NULL),
-      mNumViewInfo(0),
-      mpDeviceWindow(NULL),
-      mNumDeviceWindows(0),
-      mPhoneModel(-1),
-      mCurrentMode(wxT("(unknown)")),
-      mPlacementChecked(false),
-      mpParent((MainFrame*)parent),
-      mTimer(this, kVibrateTimerId),
-      mTrackingTouch(false)
-{
-    SetBackgroundColour(*wxLIGHT_GREY);
-    SetBackgroundStyle(wxBG_STYLE_CUSTOM);
-
-    //SetCursor(wxCursor(wxCURSOR_HAND));     // a bit distracting (pg.276)
-}
-
-/*
- * Destroy everything we own.
- *
- * This might be called well after we've been closed and another
- * PhoneWindow has been created, because wxWidgets likes to defer things.
- */
-PhoneWindow::~PhoneWindow(void)
-{
-    //printf("--- ~PhoneWindow %p\n", this);
-    delete[] mpViewInfo;
-    if (mpDeviceWindow != NULL) {
-        for (int i = 0; i < mNumDeviceWindows; i++) {
-            /* make sure they don't try to use our member */
-            mpDeviceWindow[i]->DeviceManagerClosing();
-            /* make sure the child window gets destroyed -- not necessary? */
-            mpDeviceWindow[i]->Destroy();
-        }
-
-        /* delete our array of pointers */
-        delete[] mpDeviceWindow;
-    }
-}
-
-/*
- * Check for an updated runtime when window becomes active
- */
-void PhoneWindow::OnActivate(wxActivateEvent& event)
-{
-    /*
-     * DO NOT do this.  Under Windows, it causes the parent window to get
-     * an activate event, which causes our parent to get the focus.  With
-     * this bit of code active it is impossible for the phone window to
-     * receive user input.
-     */
-    //GetParent()->AddPendingEvent(event);
-
-    // If we are being deactivated, go ahead and send key up events so that the
-    // runtime doesn't think we are holding down the key. Issue #685750
-    if (!event.GetActive()) {
-        ListIter iter;
-        for (iter = mPressedKeys.begin(); iter != mPressedKeys.end(); ) {
-            int32_t keyCode = (*iter).GetKeyCode();
-            GetDeviceManager()->SendKeyEvent(keyCode, false);
-            iter = mPressedKeys.erase(iter);
-        }
-    }
-}
-
-/*
- * Close the phone window.
- */
-void PhoneWindow::OnClose(wxCloseEvent& event)
-{
-    //printf("--- PhoneWindow::OnClose %p\n", this);
-#if 0
-    if (mDeviceManager.IsRunning() && !mDeviceManager.IsKillable()) {
-        printf("Sim: refusing to close window on external runtime\n");
-        event.Veto();
-        return;
-    }
-#endif
-
-    wxRect rect = GetRect();
-    printf("Sim: Closing phone window (posn=(%d,%d))\n", rect.x, rect.y);
-
-    /* notify others */
-    mpParent->PhoneWindowClosing(rect.x, rect.y);
-    mDeviceManager.WindowsClosing();
-
-    /* end it all */
-    Destroy();
-}
-
-/*
- * Prep the PhoneWindow to display a specific phone model.  Pass in the
- * model index.
- *
- * This gets called whenever the display changes.  This could be a new
- * device with identical characteristics, or a different mode for the same
- * device.
- *
- * The window can be re-used so long as the display characteristics are
- * the same.  If the display characteristics are different, we have to
- * restart the device.
- */
-bool PhoneWindow::Setup(int phoneIdx)
-{
-    wxString fileName;
-    PhoneCollection* pCollection = PhoneCollection::GetInstance();
-
-    if (phoneIdx < 0 || phoneIdx >= pCollection->GetPhoneCount()) {
-        fprintf(stderr, "Bogus phone index %d\n", phoneIdx);
-        return false;
-    }
-
-    /*
-     * Clear these out so that failure here is noticeable to caller.  We
-     * regenerate the ViewInfo array every time, because the set of Views
-     * is different for every Mode.
-     */
-    delete[] mpViewInfo;
-    mpViewInfo = NULL;
-    mNumViewInfo = -1;
-
-    PhoneData* pPhoneData;
-    PhoneMode* pPhoneMode;
-    PhoneView* pPhoneView;
-
-    pPhoneData = pCollection->GetPhoneData(phoneIdx);
-
-    pPhoneMode = pPhoneData->GetPhoneMode(GetCurrentMode().ToAscii());
-    if (pPhoneMode == NULL) {
-        fprintf(stderr, "current mode (%s) not known\n",
-            (const char*) GetCurrentMode().ToAscii());
-        return false;
-    }
-
-    int numViews = pPhoneMode->GetNumViews();
-    if (numViews == 0) {
-        fprintf(stderr, "Phone %d mode %s has no views\n",
-            phoneIdx, pPhoneMode->GetName());
-        return false;
-    }
-
-    const int kBorder = 2;
-    int i;
-    int maxHeight = 0;
-    int fullWidth = kBorder;
-    ViewInfo* pViewInfo;
-
-    pViewInfo = new ViewInfo[numViews];
-
-    /* figure out individual and overall dimensions */
-    for (i = 0; i < numViews; i++) {
-        pPhoneView = pPhoneMode->GetPhoneView(i);
-        if (pPhoneView == NULL) {
-            fprintf(stderr, "view %d not found\n", i);
-            return false;
-        }
-
-        if (!GetDimensions(pPhoneData, pPhoneView, &pViewInfo[i]))
-            return false;
-
-        if (maxHeight < pViewInfo[i].GetHeight())
-            maxHeight = pViewInfo[i].GetHeight();
-        fullWidth += pViewInfo[i].GetWidth() + kBorder;
-    }
-
-    /* create the device windows if we don't already have them */
-    if (mpDeviceWindow == NULL) {
-        mNumDeviceWindows = pPhoneData->GetNumDisplays();
-        mpDeviceWindow = new DeviceWindow*[mNumDeviceWindows];
-        if (mpDeviceWindow == NULL)
-            return false;
-
-        for (i = 0; i < mNumDeviceWindows; i++) {
-            mpDeviceWindow[i] = new DeviceWindow(this, &mDeviceManager);
-        }
-    } else {
-        assert(pPhoneData->GetNumDisplays() == mNumDeviceWindows);
-    }
-
-    /*
-     * Position device windows within their views, taking into account
-     * border areas.
-     */
-    int shift = kBorder;
-    for (i = 0; i < numViews; i++) {
-        int displayIdx;
-        PhoneDisplay* pPhoneDisplay;
-
-        displayIdx = pViewInfo[i].GetDisplayIndex();
-        pPhoneDisplay = pPhoneData->GetPhoneDisplay(displayIdx);
-        //printf("View %d: display %d\n", i, displayIdx);
-
-        pViewInfo[i].SetX(shift);
-        pViewInfo[i].SetY(kBorder);
-
-        mpDeviceWindow[displayIdx]->SetSize(
-            pViewInfo[i].GetX() + pViewInfo[i].GetDisplayX(),
-            pViewInfo[i].GetY() + pViewInfo[i].GetDisplayY(),
-            pPhoneDisplay->GetWidth(), pPhoneDisplay->GetHeight());
-
-        // incr by width of view
-        shift += pViewInfo[i].GetWidth() + kBorder;
-    }
-
-    /* configure the device manager if it's not already running */
-    if (!mDeviceManager.IsInitialized()) {
-        mDeviceManager.Init(pPhoneData->GetNumDisplays(), mpParent);
-
-        for (i = 0; i < pPhoneData->GetNumDisplays(); i++) {
-            PhoneDisplay* pPhoneDisplay;
-            bool res;
-
-            pPhoneDisplay = pPhoneData->GetPhoneDisplay(i);
-
-            res = mDeviceManager.SetDisplayConfig(i, mpDeviceWindow[i],
-                pPhoneDisplay->GetWidth(), pPhoneDisplay->GetHeight(),
-                pPhoneDisplay->GetFormat(), pPhoneDisplay->GetRefresh());
-            if (!res) {
-                fprintf(stderr, "Sim: ERROR: could not configure device mgr\n");
-                return false;
-            }
-        }
-        const char *kmap = pPhoneData->GetPhoneKeyboard(0)->getKeyMap();
-        mDeviceManager.SetKeyboardConfig(kmap);
-    } else {
-        assert(pPhoneData->GetNumDisplays() == mDeviceManager.GetNumDisplays());
-    }
-
-    /*
-     * Success.  Finish up.
-     */
-    mPhoneModel = phoneIdx;
-    mpViewInfo = pViewInfo;
-    mNumViewInfo = numViews;
-
-    /* set up our window */
-    SetClientSize(fullWidth, maxHeight + kBorder * 2);
-    SetBackgroundColour(*wxLIGHT_GREY);
-    //SetBackgroundColour(*wxBLUE);
-    SetTitle(wxString::FromAscii(pPhoneData->GetTitle()));
-
-    SetFocus();     // set keyboard input focus
-
-    return true;
-}
-
-/*
- * The device table has been reloaded.  We need to throw out any pointers
- * we had into it and possibly reload some stuff.
- */
-void PhoneWindow::DevicesRescanned(void)
-{
-    mpMOHButton = NULL;
-    mpMOHViewIndex = -1;
-
-    /*
-     * Re-evaluate phone definition.  There is an implicit assumption
-     * that the re-scanned version is compatible with the previous
-     * version (i.e. it still exists and has the same screen size).
-     *
-     * We're also currently assuming that no phone definitions have been
-     * added or removed, which is bad -- we should get the new index for
-     * for phone by searching for it by name.
-     *
-     * TODO: don't make these assumptions.
-     */
-    Setup(mPhoneModel);
-}
-
-/*
- * Check the initial placement of the window.  We get one of these messages
- * when the window is first placed, and every time it's moved thereafter.
- *
- * Right now we're just trying to make sure wxWidgets doesn't shove it off
- * the top of the screen under Linux.  Might want to change this to
- * remember the previous placement and put the window back.
- */
-void PhoneWindow::OnMove(wxMoveEvent& event)
-{
-    if (mPlacementChecked)
-        return;
-
-    wxPoint point;
-    point = event.GetPosition();
-    if (point.y < 0) {
-        printf("Sim: window is at (%d,%d), adjusting\n", point.x, point.y);
-        point.y = 0;
-        Move(point);
-    }
-
-    mPlacementChecked = true;
-}
-
-/*
- * Figure out the dimensions required to contain the specified view.
- *
- * This is usually the size of the background image, but if we can't
- * load it or it's too small just create a trivial window.
- */
-bool PhoneWindow::GetDimensions(PhoneData* pPhoneData, PhoneView* pPhoneView,
-    ViewInfo* pInfo)
-{
-    PhoneDisplay* pPhoneDisplay;
-    int xoff=0, yoff=0, width, height;
-    int displayIdx;
-
-    displayIdx = pPhoneData->GetPhoneDisplayIndex(pPhoneView->GetDisplayName());
-    if (displayIdx < 0)
-        return false;
-
-    pPhoneDisplay = pPhoneData->GetPhoneDisplay(displayIdx);
-    if (pPhoneDisplay == NULL) {
-        fprintf(stderr, "display '%s' not found in device '%s'\n",
-            pPhoneView->GetDisplayName(), pPhoneData->GetName());
-        return false;
-    }
-
-    // load images for this phone
-    (void) pPhoneView->LoadResources();
-
-    width = height = 0;
-
-    // by convention, the background bitmap is the first image in the list
-    if (pPhoneView->GetBkgImageCount() > 0) {
-        wxBitmap* pBitmap = pPhoneView->GetBkgImage(0)->GetBitmap();
-        if (pBitmap != NULL) {
-            // size window to match bitmap
-            xoff = pPhoneView->GetXOffset();
-            yoff = pPhoneView->GetYOffset();
-            width = pBitmap->GetWidth();
-            height = pBitmap->GetHeight();
-        }
-    }
-
-    // no bitmap, or bitmap is smaller than display
-    if (width < pPhoneDisplay->GetWidth() ||
-        height < pPhoneDisplay->GetHeight())
-    {
-        // create window to just hold display
-        xoff = yoff = 0;
-        width = pPhoneDisplay->GetWidth();
-        height = pPhoneDisplay->GetHeight();
-    }
-    if (width <= 0 || height <= 0) {
-        fprintf(stderr, "ERROR: couldn't determine display size\n");
-        return false;
-    }
-
-    pInfo->SetX(0);
-    pInfo->SetY(0);             // another function determines these
-    pInfo->SetDisplayX(xoff);
-    pInfo->SetDisplayY(yoff);
-    pInfo->SetWidth(width);
-    pInfo->SetHeight(height);
-    pInfo->SetDisplayIndex(displayIdx);
-
-    //printf("xoff=%d yoff=%d width=%d height=%d index=%d\n",
-    //    pInfo->GetDisplayX(), pInfo->GetDisplayY(),
-    //    pInfo->GetWidth(), pInfo->GetHeight(), pInfo->GetDisplayIndex());
-
-    return true;
-}
-
-/*
- * Return PhoneData pointer for the current phone model.
- */
-PhoneData* PhoneWindow::GetPhoneData(void) const
-{
-    PhoneCollection* pCollection = PhoneCollection::GetInstance();
-    return pCollection->GetPhoneData(mPhoneModel);
-}
-
-/*
- * Convert a wxWidgets key code into a device key code.
- *
- * Someday we may want to make this configurable.
- *
- * NOTE: we need to create a mapping between simulator key and desired
- * function.  The "return" key should always mean "select", whether
- * it's a "select" button or pressing in on the d-pad.  Ditto for
- * the arrow keys, whether we have a joystick, d-pad, or four buttons.
- * Each key here should have a set of things that it could possibly be,
- * and we match it up with the set of buttons actually defined for the
- * phone.  [for convenience, need to ensure that buttons need not have
- * an associated image]
- */
-int PhoneWindow::ConvertKeyCode(int wxKeyCode) const
-{
-    switch (wxKeyCode) {
-    case WXK_NUMPAD_INSERT:
-    case WXK_NUMPAD0:
-    case '0':                   return KEY_0;
-    case WXK_NUMPAD_HOME:
-    case WXK_NUMPAD1:
-    case '1':                   return KEY_1;
-    case WXK_NUMPAD_UP:
-    case WXK_NUMPAD2:
-    case '2':                   return KEY_2;
-    case WXK_NUMPAD_PRIOR:
-    case WXK_NUMPAD3:
-    case '3':                   return KEY_3;
-    case WXK_NUMPAD_LEFT:
-    case WXK_NUMPAD4:
-    case '4':                   return KEY_4;
-    case WXK_NUMPAD_BEGIN:
-    case WXK_NUMPAD5:
-    case '5':                   return KEY_5;
-    case WXK_NUMPAD_RIGHT:
-    case WXK_NUMPAD6:
-    case '6':                   return KEY_6;
-    case WXK_NUMPAD_END:
-    case WXK_NUMPAD7:
-    case '7':                   return KEY_7;
-    case WXK_NUMPAD_DOWN:
-    case WXK_NUMPAD8:
-    case '8':                   return KEY_8;
-    case WXK_NUMPAD_NEXT:
-    case WXK_NUMPAD9:
-    case '9':                   return KEY_9;
-    case WXK_NUMPAD_MULTIPLY:   return KEY_SWITCHVIDEOMODE; //AKEYCODE_STAR;
-    case WXK_LEFT:              return KEY_LEFT;
-    case WXK_RIGHT:             return KEY_RIGHT;
-    case WXK_UP:                return KEY_UP;
-    case WXK_DOWN:              return KEY_DOWN;
-    case WXK_NUMPAD_ENTER:      return KEY_REPLY; //AKEYCODE_DPAD_CENTER;
-    case WXK_HOME:              return KEY_HOME;
-    case WXK_PRIOR:
-    case WXK_PAGEUP:            return KEY_MENU; //AKEYCODE_SOFT_LEFT;
-    case WXK_NEXT:
-    case WXK_PAGEDOWN:          return KEY_KBDILLUMUP; //AKEYCODE_SOFT_RIGHT;
-    case WXK_DELETE:            
-    case WXK_BACK:              return KEY_BACKSPACE; //AKEYCODE_DEL;
-    case WXK_ESCAPE:
-    case WXK_END:               return KEY_BACK; //AKEYCODE_BACK;
-    case WXK_NUMPAD_DELETE:
-    case WXK_NUMPAD_DECIMAL:    return KEY_KBDILLUMTOGGLE; //AKEYCODE_POUND;
-    case WXK_SPACE:             return KEY_SPACE; //AKEYCODE_SPACE;
-    case WXK_RETURN:            return KEY_ENTER; //AKEYCODE_ENTER;
-    case WXK_F3:                return KEY_F3; //AKEYCODE_CALL;
-    case WXK_F4:                return KEY_F4; //AKEYCODE_END_CALL;
-    case WXK_NUMPAD_ADD:
-    case WXK_F5:                return KEY_VOLUMEUP;
-    case WXK_NUMPAD_SUBTRACT:
-    case WXK_F6:                return KEY_VOLUMEDOWN;
-    case WXK_F7:                return KEY_POWER;
-    case WXK_F8:                return KEY_CAMERA;
-    case 'A':                   return KEY_A;
-    case 'B':                   return KEY_B;
-    case 'C':                   return KEY_C;
-    case 'D':                   return KEY_D;
-    case 'E':                   return KEY_E;
-    case 'F':                   return KEY_F;
-    case 'G':                   return KEY_G;
-    case 'H':                   return KEY_H;
-    case 'I':                   return KEY_I;
-    case 'J':                   return KEY_J;
-    case 'K':                   return KEY_K;
-    case 'L':                   return KEY_L;
-    case 'M':                   return KEY_M;
-    case 'N':                   return KEY_N;
-    case 'O':                   return KEY_O;
-    case 'P':                   return KEY_P;
-    case 'Q':                   return KEY_Q;
-    case 'R':                   return KEY_R;
-    case 'S':                   return KEY_S;
-    case 'T':                   return KEY_T;
-    case 'U':                   return KEY_U;
-    case 'V':                   return KEY_V;
-    case 'W':                   return KEY_W;
-    case 'X':                   return KEY_X;
-    case 'Y':                   return KEY_Y;
-    case 'Z':                   return KEY_Z;
-    case ',':                   return KEY_COMMA;
-    case '.':                   return KEY_DOT;
-    case '<':                   return KEY_COMMA;
-    case '>':                   return KEY_DOT;
-    case '`':                   return KEY_GREEN; /*KEY_GRAVE;*/
-    case '-':                   return KEY_MINUS;
-    case '=':                   return KEY_EQUAL;
-    case '[':                   return KEY_LEFTBRACE;
-    case ']':                   return KEY_RIGHTBRACE;
-    case '\\':                  return KEY_BACKSLASH;
-    case ';':                   return KEY_SEMICOLON;
-    case '\'':                  return KEY_APOSTROPHE;
-    case '/':                   return KEY_SLASH;
-    case WXK_SHIFT:             return KEY_LEFTSHIFT;
-    case WXK_CONTROL:
-    case WXK_ALT:               return KEY_LEFTALT;
-    case WXK_TAB:               return KEY_TAB;
-    // don't show "ignoring key" message for these
-    case WXK_MENU:
-        break;
-    default:
-        printf("(ignoring key %d)\n", wxKeyCode);
-        break;
-    }
-
-    return AKEYCODE_UNKNOWN;
-}
-
-
-/*
- * Keyboard handling.  These get converted into Android-defined key
- * constants here.
- *
- * NOTE: would be nice to handle menu keyboard accelerators here.
- * Simply stuffing the key events into MainFrame with AddPendingEvent
- * didn't seem to do the trick.
- */
-void PhoneWindow::OnKeyDown(wxKeyEvent& event)
-{
-    int32_t keyCode;
-
-    keyCode = ConvertKeyCode(event.GetKeyCode());
-    if (keyCode != AKEYCODE_UNKNOWN) {
-        if (!IsKeyPressed(keyCode)) {
-            //printf("PW: down: key %d\n", keyCode);
-            GetDeviceManager()->SendKeyEvent(keyCode, true);
-            AddPressedKey(keyCode);
-        }
-    } else {
-        //printf("PW: down: %d\n", event.GetKeyCode());
-        event.Skip();       // not handled by us
-    }
-}
-
-/*
- * Pass key-up events to runtime.
- */
-void PhoneWindow::OnKeyUp(wxKeyEvent& event)
-{
-    int32_t keyCode;
-
-    keyCode = ConvertKeyCode(event.GetKeyCode());
-    if (keyCode != AKEYCODE_UNKNOWN) {
-        // Send the key event if we already have this key pressed.
-        if (IsKeyPressed(keyCode)) {
-            //printf("PW:   up: key %d\n", keyCode);
-            GetDeviceManager()->SendKeyEvent(keyCode, false);
-            RemovePressedKey(keyCode);
-        }
-    } else {
-        //printf("PW:   up: %d\n", event.GetKeyCode());
-        event.Skip();       // not handled by us
-    }
-}
-
-/*
- * Mouse handling.
- *
- * Unlike more conventional button tracking, we highlight on mouse-over
- * and send the key on mouse-down.  This behavior may be confusing for
- * people expecting standard behavior, but it allows us to simulate the
- * effect of holding a key down.
- *
- * We want to catch both "down" and "double click" events; otherwise
- * fast clicking results in a lot of discarded events.
- */
-void PhoneWindow::OnMouseLeftDown(wxMouseEvent& event)
-{
-    if (mpMOHButton != NULL) {
-        //printf("PW: left down\n");
-        int32_t keyCode = mpMOHButton->GetKeyCode();
-        GetDeviceManager()->SendKeyEvent(keyCode, true);
-        mMouseKeySent = keyCode;
-        AddPressedKey(keyCode);
-    } else {
-        int screenX, screenY;
-
-        if (GetTouchPosition(event, &screenX, &screenY)) {
-            //printf("TOUCH at %d,%d\n", screenX, screenY);
-            mTrackingTouch = true;
-            mTouchX = screenX;
-            mTouchY = screenY;
-            GetDeviceManager()->SendTouchEvent(Simulator::kTouchDown,
-                mTouchX, mTouchY);
-        } else {
-            //printf("(ignoring left click)\n");
-        }
-    }
-}
-
-/*
- * Left button has been released.  Do something clever.
- *
- * On some platforms we will lose this if the mouse leaves the window.
- */
-void PhoneWindow::OnMouseLeftUp(wxMouseEvent& WXUNUSED(event))
-{
-    if (mMouseKeySent != AKEYCODE_UNKNOWN) {
-        //printf("PW: left up\n");
-        GetDeviceManager()->SendKeyEvent(mMouseKeySent, false);
-        RemovePressedKey(mMouseKeySent);
-    } else {
-        if (mTrackingTouch) {
-            //printf("TOUCH release (last was %d,%d)\n", mTouchX, mTouchY);
-            mTrackingTouch = false;
-            GetDeviceManager()->SendTouchEvent(Simulator::kTouchUp,
-                mTouchX, mTouchY);
-        } else {
-            //printf("(ignoring left-up)\n");
-        }
-    }
-    mMouseKeySent = AKEYCODE_UNKNOWN;
-}
-
-void PhoneWindow::OnMouseRightDown(wxMouseEvent& event)
-{
-    //printf("(ignoring right-down)\n");
-}
-void PhoneWindow::OnMouseRightUp(wxMouseEvent& event)
-{
-    //printf("(ignoring right-up)\n");
-}
-
-/*
- * Track mouse motion so we can do mouse-over button highlighting.
- */
-void PhoneWindow::OnMouseMotion(wxMouseEvent& event)
-{
-    /*
-     * If the mouse motion event occurred inside the device window,
-     * we treat it differently than mouse movement over the picture of
-     * the device.
-     */
-    if (event.GetEventObject() == mpDeviceWindow[0]) {
-        if (mpMOHViewIndex >= 0) {
-            /* can happen if the mouse moves fast enough */
-            //printf("Mouse now in dev window, clearing button highlight\n");
-            mpMOHViewIndex = -1;
-            mpMOHButton = NULL;
-            Refresh();
-        }
-
-        if (!event.LeftIsDown() && event.RightIsDown()) {
-            /* right-button movement */
-            //printf("(ignoring right-drag)\n");
-            return;
-        }
-
-        //printf("moveto: %d,%d\n", event.m_x, event.m_y);
-
-        int screenX, screenY;
-        if (mTrackingTouch) {
-            if (GetTouchPosition(event, &screenX, &screenY)) {
-                //printf("TOUCH moved to %d,%d\n", screenX, screenY);
-                mTouchX = screenX;
-                mTouchY = screenY;
-                GetDeviceManager()->SendTouchEvent(Simulator::kTouchDrag,
-                    mTouchX, mTouchY);
-            } else {
-                //printf("TOUCH moved off screen\n");
-            }
-        }
-
-        return;
-    }
-
-    PhoneData* pPhoneData = GetPhoneData();
-    if (pPhoneData == NULL)
-        return;
-
-    /*
-     * Check to see if we're on top of a button.  If our "on top of
-     * something" state has changed, force a redraw.
-     *
-     * We have to run through the list of Views and check all of the
-     * buttons in each.
-     */
-    PhoneMode* pMode = pPhoneData->GetPhoneMode(GetCurrentMode().ToAscii());
-    if (pMode == NULL)
-        return;
-
-    int viewIndex = -1;
-    PhoneButton* pHighlight = NULL;
-    int i;
-
-    for (i = pMode->GetNumViews()-1; i >= 0; i--) {
-        PhoneView* pView = pMode->GetPhoneView(i);
-        assert(pView != NULL);
-
-        /* convert from window-relative to view-relative */
-        pHighlight = pView->FindButtonHit(event.m_x - mpViewInfo[i].GetX(),
-                                          event.m_y - mpViewInfo[i].GetY());
-        if (pHighlight != NULL) {
-            viewIndex = i;
-            break;
-        }
-    }
-
-    if (viewIndex == mpMOHViewIndex && pHighlight == mpMOHButton) {
-        /* still hovering over same button */
-    } else {
-        /* mouse has moved, possibly to a new button */
-
-        mpMOHViewIndex = viewIndex;
-        mpMOHButton = pHighlight;
-
-        /* force refresh */
-        Refresh();
-    }
-}
-
-/*
- * Mouse has left the building.  All keys and mouse buttons up.
- *
- * We get one of these if the mouse moves over a child window, such as
- * our DeviceWindow, so it is not the case that we no longer receive
- * key input after getting this event.
- */
-void PhoneWindow::OnMouseLeaveWindow(wxMouseEvent& WXUNUSED(event))
-{
-    //printf("--- mouse is GONE\n");
-    ClearPressedKeys();
-}
-
-/*
- * Determine device touch screen (x,y) based on window position.
- *
- * Returns "true" if the click corresponds to a location on the display.
- *
- * TODO: should return display index as well -- currently this only
- * supports touch on the main display.
- */
-bool PhoneWindow::GetTouchPosition(const wxMouseEvent& event, int* pScreenX,
-    int* pScreenY)
-{
-    /*
-     * If the click came from our device window, treat it as a touch.
-     */
-    if (event.GetEventObject() != mpDeviceWindow[0])
-        return false;
-
-    *pScreenX = event.m_x;
-    *pScreenY = event.m_y;
-    return true;
-}
-
-/*
- * We don't want to erase the background now, because it causes flicker
- * under Windows.
- */
-void PhoneWindow::OnErase(wxEraseEvent& WXUNUSED(event))
-{
-    //printf("erase\n");
-}
-
-/*
- * Paint the phone and any highlighted buttons.
- *
- * The device output is drawn by DeviceWindow.
- */
-void PhoneWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
-    int view;
-
-    /*
-     * Under Mac OS X, the parent window is redrawn every time the child
-     * window is redrawn.  This causes poor performance in the simulator.
-     * If we're being asked to update a region that corresponds exactly
-     * to one of the device output windows, skip the redraw.
-     */
-    assert(mpViewInfo != NULL);
-    for (view = 0; view < mNumViewInfo; view++) {
-        int displayIndex;
-
-        displayIndex = mpViewInfo[view].GetDisplayIndex();
-        assert(displayIndex >= 0);
-        DeviceWindow* pDeviceWindow = mpDeviceWindow[displayIndex];
-        assert(pDeviceWindow != NULL);
-
-        wxRect displayRect = pDeviceWindow->GetRect();
-        wxRect updateRect = GetUpdateClientRect();
-
-        if (displayRect == updateRect) {
-            //printf("(skipping redraw)\n");
-            return;
-        }
-    }
-
-    wxBufferedPaintDC dc(this);
-
-    /*
-     * Erase the background to the currently-specified background color.
-     */
-    wxColour backColor = GetBackgroundColour();
-    dc.SetBrush(wxBrush(backColor));
-    dc.SetPen(wxPen(backColor, 1));
-    wxRect windowRect(wxPoint(0, 0), GetClientSize());
-    dc.DrawRectangle(windowRect);
-
-    PhoneData* pPhoneData = GetPhoneData();
-    if (pPhoneData == NULL) {
-        fprintf(stderr, "OnPaint: no phone data\n");
-        return;
-    }
-
-    PhoneMode* pPhoneMode;
-    PhoneView* pPhoneView;
-    int numImages;
-
-    pPhoneMode = pPhoneData->GetPhoneMode(GetCurrentMode().ToAscii());
-    if (pPhoneMode == NULL) {
-        fprintf(stderr, "current mode (%s) not known\n",
-            (const char*) GetCurrentMode().ToAscii());
-        return;
-    }
-
-    for (view = 0; view < pPhoneMode->GetNumViews(); view++) {
-        pPhoneView = pPhoneMode->GetPhoneView(view);
-        if (pPhoneView == NULL) {
-            fprintf(stderr, "view %d not found\n", view);
-            return;
-        }
-
-        /* draw background image and "button patches" */
-        numImages = pPhoneView->GetBkgImageCount();
-        for (int i = 0; i < numImages; i++) {
-            const LoadableImage* pLimg = pPhoneView->GetBkgImage(i);
-            wxBitmap* pBitmap = pLimg->GetBitmap();
-            if (pBitmap != NULL)
-                dc.DrawBitmap(*pBitmap,
-                    mpViewInfo[view].GetX() + pLimg->GetX(),
-                    mpViewInfo[view].GetY() + pLimg->GetY(),
-                    TRUE);
-        }
-    }
-
-
-    /*
-     * Draw button mouse-over highlight.
-     *
-     * Currently we don't do anything different when the button is held down.
-     */
-    if (mpMOHViewIndex >= 0 && mpMOHButton != NULL) {
-        // button must have graphic, or hit-testing wouldn't have worked
-        assert(mpMOHButton->GetHighlightedBitmap() != NULL);
-        dc.DrawBitmap(*mpMOHButton->GetHighlightedBitmap(),
-            mpViewInfo[mpMOHViewIndex].GetX() + mpMOHButton->GetX(),
-            mpViewInfo[mpMOHViewIndex].GetY() + mpMOHButton->GetY(),
-            TRUE);
-    }
-
-    /*
-     * Highlight pressed keys.  We want to do this in all views, because
-     * some buttons on the side of the phone might be visible in more
-     * than one view.
-     */
-    for (view = 0; view < pPhoneMode->GetNumViews(); view++) {
-        pPhoneView = pPhoneMode->GetPhoneView(view);
-        assert(pPhoneView != NULL);
-
-        ListIter iter;
-        for (iter = mPressedKeys.begin(); iter != mPressedKeys.end(); ++iter) {
-            int32_t keyCode;
-            PhoneButton* pButton;
-
-            keyCode = (*iter).GetKeyCode();
-            pButton = pPhoneView->FindButtonByKey(keyCode);
-            if (pButton != NULL) {
-                wxBitmap* pBitmap = pButton->GetSelectedBitmap();
-                if (pBitmap != NULL) {
-                    dc.DrawBitmap(*pBitmap,
-                        mpViewInfo[view].GetX() + pButton->GetX(),
-                        mpViewInfo[view].GetY() + pButton->GetY(),
-                        TRUE);
-                }
-            }
-        }
-    }
-}
-
-
-/*
- * Press a key on the device.
- *
- * Schedules a screen refresh if the set of held-down keys changes.
- */
-void PhoneWindow::AddPressedKey(int32_t keyCode)
-{
-    /*
-     * See if the key is already down.  This usually means that the key
-     * repeat has kicked into gear.  It could also mean that we
-     * missed the key-up event, or the user has hit the same device
-     * key with both mouse and keyboard.  Either way, we don't add it
-     * a second time.  This way, if we did lose a key-up somehow, they
-     * can "clear" the stuck key by hitting it again.
-     */
-    if (keyCode == AKEYCODE_UNKNOWN) {
-        //printf("--- not adding AKEYCODE_UNKNOWN!\n");
-        return;
-    }
-
-    ListIter iter;
-    for (iter = mPressedKeys.begin(); iter != mPressedKeys.end(); ++iter) {
-        if ((*iter).GetKeyCode() == keyCode)
-            break;
-    }
-    if (iter == mPressedKeys.end()) {
-        KeyInfo newInfo;
-        newInfo.SetKeyCode(keyCode);
-        mPressedKeys.push_back(newInfo);
-        //printf("---  added down=%d\n", keyCode);
-        Refresh();      // redraw w/ highlight
-    } else {
-        //printf("---  already have down=%d\n", keyCode);
-    }
-}
-
-/*
- * Release a key on the device.
- *
- * Schedules a screen refresh if the set of held-down keys changes.
- */
-void PhoneWindow::RemovePressedKey(int32_t keyCode)
-{
-    /*
-     * Release the key.  If it's not in the list, we either missed a
-     * key-down event, or the user used both mouse and keyboard and we
-     * removed the key when the first device went up.
-     */
-    ListIter iter;
-    for (iter = mPressedKeys.begin(); iter != mPressedKeys.end(); ++iter) {
-        if ((*iter).GetKeyCode() == keyCode) {
-            mPressedKeys.erase(iter);
-            //printf("---  removing down=%d\n", keyCode);
-            Refresh();      // redraw w/o highlight
-            break;
-        }
-    }
-    if (iter == mPressedKeys.end()) {
-        //printf("---  didn't find down=%d\n", keyCode);
-    }
-}
-
-/*
- * Clear the set of keys that we think are being held down.
- */
-void PhoneWindow::ClearPressedKeys(void)
-{
-    //printf("--- All keys up (count=%d)\n", mPressedKeys.size());
-
-    if (!mPressedKeys.empty()) {
-        ListIter iter = mPressedKeys.begin();
-        while (iter != mPressedKeys.end()) {
-            int32_t keyCode = (*iter).GetKeyCode();
-            GetDeviceManager()->SendKeyEvent(keyCode, false);
-            iter = mPressedKeys.erase(iter);
-        }
-        Refresh();
-    }
-}
-
-/*
- * Returns "true" if the specified key is currently pressed.
- */
-bool PhoneWindow::IsKeyPressed(int32_t keyCode)
-{
-    ListIter iter;
-    for (iter = mPressedKeys.begin(); iter != mPressedKeys.end(); ++iter) {
-        if ((*iter).GetKeyCode() == keyCode)
-            return true;
-    }
-    return false;
-}
-
-void PhoneWindow::Vibrate(int vibrateOn)
-{
-    wxRect rect = GetRect();
-    if(vibrateOn)
-    {
-        mVibrateX = 0;
-        mTimer.Start(25);      // arg is delay in ms
-        Move(rect.x-2,rect.y);
-    }
-    else if(mTimer.IsRunning())
-    {
-        mTimer.Stop();
-        if(mVibrateX&1)
-            Move(rect.x-2,rect.y);
-        else
-            Move(rect.x+2,rect.y);
-    }
-}
-
-void PhoneWindow::OnTimer(wxTimerEvent& event)
-{
-    wxRect rect = GetRect();
-    mVibrateX++;
-    if(mVibrateX&1)
-        Move(rect.x+4,rect.y);
-    else
-        Move(rect.x-4,rect.y);
-}
diff --git a/simulator/app/PhoneWindow.h b/simulator/app/PhoneWindow.h
deleted file mode 100644
index a346e9c..0000000
--- a/simulator/app/PhoneWindow.h
+++ /dev/null
@@ -1,186 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Window with simulated phone.
-//
-#ifndef _SIM_PHONE_WINDOW_H
-#define _SIM_PHONE_WINDOW_H
-
-#include "PhoneData.h"
-#include "DeviceManager.h"
-#include "DeviceWindow.h"
-#include <ui/KeycodeLabels.h>
-
-class MainFrame;
-
-/*
- * This window displays the simulated phone views, and handles keyboard and
- * mouse input.
- *
- * If we switch to a different "mode", we may display different "views",
- * but the set of "displays" remains the same.  (Got that?)
- *
- * We can't just do these things in the main frame because we can't easily
- * grab the keyboard input.
- */
-class PhoneWindow : public wxDialog {
-public:
-    PhoneWindow(wxWindow* parent, const wxPoint& posn);
-    virtual ~PhoneWindow(void);
-
-    /* call this initially, and after a mode change */
-    bool Setup(int phoneIdx);
-
-    bool IsReady(void) const {
-        return (mNumViewInfo > 0 && mpViewInfo != NULL);
-    }
-
-    PhoneData* GetPhoneData(void) const;
-
-    const wxString& GetCurrentMode(void) const { return mCurrentMode; }
-    void SetCurrentMode(const wxString& mode) { mCurrentMode = mode; }
-    void SetCurrentMode(const char* mode) { mCurrentMode = wxString::FromAscii(mode); }
-
-    DeviceManager* GetDeviceManager(void) { return &mDeviceManager; }
-
-    /* this is called when the phone data is reloaded */
-    void DevicesRescanned(void);
-
-    void Vibrate(int vibrateOn);
-
-private:
-    /*
-     * Hold some information about the "views" being shown in our window.
-     */
-    class ViewInfo {
-    public:
-        ViewInfo(void)
-            : mX(-1), mY(-1), mDisplayX(-1), mDisplayY(-1),
-              mWidth(-1), mHeight(-1), mDisplayIndex(-1)
-        {}
-        ~ViewInfo(void) {}
-
-        int GetX(void) const { return mX; }
-        int GetY(void) const { return mY; }
-        int GetDisplayX(void) const { return mDisplayX; }
-        int GetDisplayY(void) const { return mDisplayY; }
-        int GetWidth(void) const { return mWidth; }
-        int GetHeight(void) const { return mHeight; }
-        int GetDisplayIndex(void) const { return mDisplayIndex; }
-
-        void SetX(int val) { mX = val; }
-        void SetY(int val) { mY = val; }
-        void SetDisplayX(int val) { mDisplayX = val; }
-        void SetDisplayY(int val) { mDisplayY = val; }
-        void SetWidth(int val) { mWidth = val; }
-        void SetHeight(int val) { mHeight = val; }
-        void SetDisplayIndex(int val) { mDisplayIndex = val; }
-
-    private:
-        int     mX, mY;                 // view offset within PhoneWindow
-        int     mDisplayX, mDisplayY;   // display offset within view
-        int     mWidth, mHeight;        // view dimensions
-
-        int     mDisplayIndex;          // index into mpDeviceWindow
-    };
-
-    /*
-     * Hold information about currently pressed keys.
-     */
-    class KeyInfo {
-    public:
-        KeyInfo(void) : mKeyCode(AKEYCODE_UNKNOWN) {}
-        KeyInfo(const KeyInfo& src) {
-            mKeyCode = src.mKeyCode;
-        }
-        ~KeyInfo(void) {}
-
-        KeyInfo& operator=(const KeyInfo& src) {
-            if (this != &src) {
-                mKeyCode = src.mKeyCode;
-            }
-            return *this;
-        }
-
-        int32_t GetKeyCode(void) const { return mKeyCode; }
-        void SetKeyCode(int32_t keyCode) { mKeyCode = keyCode; }
-
-        //PhoneButton* GetPhoneButton(void) const { return mpButton; }
-        //void SetPhoneButton(PhoneButton* pButton) { mpButton = pButton; }
-
-    private:
-        int32_t mKeyCode;
-        //PhoneButton*        mpButton;
-    };
-
-    void OnActivate(wxActivateEvent& event);
-    void OnMove(wxMoveEvent& event);
-    void OnClose(wxCloseEvent& event);
-    void OnTimer(wxTimerEvent& event);
-    void OnKeyDown(wxKeyEvent& event);
-    void OnKeyUp(wxKeyEvent& event);
-    void OnErase(wxEraseEvent& event);
-    void OnPaint(wxPaintEvent& WXUNUSED(event));
-    void OnMouseLeftDown(wxMouseEvent& event);
-    void OnMouseLeftUp(wxMouseEvent& event);
-    void OnMouseRightDown(wxMouseEvent& event);
-    void OnMouseRightUp(wxMouseEvent& event);
-    void OnMouseMotion(wxMouseEvent& event);
-    void OnMouseLeaveWindow(wxMouseEvent& WXUNUSED(event));
-    bool GetTouchPosition(const wxMouseEvent& event, int* pScreenX,
-        int* pScreenY);
-
-    bool GetDimensions(PhoneData* pPhoneData, PhoneView* pPhoneView,
-        ViewInfo* pDim);
-    int ConvertKeyCode(int wxKeyCode) const;
-
-    /* press a key on the device */
-    void AddPressedKey(int32_t keyCode);
-    /* release a key on the device */
-    void RemovePressedKey(int32_t keyCode);
-    /* "raise" all keys */
-    void ClearPressedKeys(void);
-    /* determine whether a key is down */
-    bool IsKeyPressed(int32_t keyCode);
-
-    /* manage the device runtime */
-    DeviceManager   mDeviceManager;
-
-    /* button mouse-over highlight handling */
-    int             mpMOHViewIndex;     // mouse is in this view
-    PhoneButton*    mpMOHButton;        //   over this button
-    int32_t         mMouseKeySent;     // to handle "key up" for mouse button
-
-    /* handle multiple simultaneous key presses */
-    android::List<KeyInfo>  mPressedKeys;
-    typedef android::List<KeyInfo>::iterator ListIter;
-
-    /* ViewInfos, 1:1 with PhoneView entries for the current mode */
-    ViewInfo*       mpViewInfo;         // array of view data
-    int             mNumViewInfo;       // #of elements in mpViewInfo
-
-    /* DeviceWindows, 1:1 with PhoneDisplay entries for this device */
-    DeviceWindow**  mpDeviceWindow;     // array of pointers to device windows
-    int             mNumDeviceWindows;  // #of device windows
-
-    /* state */
-    int             mPhoneModel;        // index into model list
-    wxString        mCurrentMode;
-
-    bool            mPlacementChecked;  // leave it offscreen if they want
-
-    MainFrame*      mpParent;           // retain pointer to parent window
-
-    enum { kVibrateTimerId = 1010 };
-    wxTimer         mTimer;
-    int             mVibrateX;
-
-    /* touchscreen simulation */
-    bool            mTrackingTouch;
-    int             mTouchX;
-    int             mTouchY;
-
-    DECLARE_EVENT_TABLE()
-};
-
-#endif // _SIM_PHONE_WINDOW_H
diff --git a/simulator/app/Pipe.cpp b/simulator/app/Pipe.cpp
deleted file mode 100644
index 05ce790..0000000
--- a/simulator/app/Pipe.cpp
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (C) 2005 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//
-// Unidirectional pipe.
-//
-
-#include "Pipe.h"
-#include <utils/Log.h>
-
-#if defined(HAVE_WIN32_IPC)
-# include <windows.h>
-#else
-# include <fcntl.h>
-# include <unistd.h>
-# include <errno.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <assert.h>
-#include <string.h>
-
-using namespace android;
-
-const unsigned long kInvalidHandle = (unsigned long) -1;
-
-
-/*
- * Constructor.  Do little.
- */
-Pipe::Pipe(void)
-    : mReadNonBlocking(false), mReadHandle(kInvalidHandle),
-      mWriteHandle(kInvalidHandle)
-{
-}
-
-/*
- * Destructor.  Use the system-appropriate close call.
- */
-Pipe::~Pipe(void)
-{
-#if defined(HAVE_WIN32_IPC)
-    if (mReadHandle != kInvalidHandle) {
-        if (!CloseHandle((HANDLE)mReadHandle))
-            LOG(LOG_WARN, "pipe", "failed closing read handle (%ld)\n",
-                mReadHandle);
-    }
-    if (mWriteHandle != kInvalidHandle) {
-        FlushFileBuffers((HANDLE)mWriteHandle);
-        if (!CloseHandle((HANDLE)mWriteHandle))
-            LOG(LOG_WARN, "pipe", "failed closing write handle (%ld)\n",
-                mWriteHandle);
-    }
-#else
-    if (mReadHandle != kInvalidHandle) {
-        if (close((int) mReadHandle) != 0)
-            LOG(LOG_WARN, "pipe", "failed closing read fd (%d)\n",
-                (int) mReadHandle);
-    }
-    if (mWriteHandle != kInvalidHandle) {
-        if (close((int) mWriteHandle) != 0)
-            LOG(LOG_WARN, "pipe", "failed closing write fd (%d)\n",
-                (int) mWriteHandle);
-    }
-#endif
-}
-
-/*
- * Create the pipe.
- *
- * Use the POSIX stuff for everything but Windows.
- */
-bool Pipe::create(void)
-{
-    assert(mReadHandle == kInvalidHandle);
-    assert(mWriteHandle == kInvalidHandle);
-
-#if defined(HAVE_WIN32_IPC)
-    /* we use this across processes, so they need to be inheritable */
-    HANDLE handles[2];
-    SECURITY_ATTRIBUTES saAttr;
-
-    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
-    saAttr.bInheritHandle = TRUE;
-    saAttr.lpSecurityDescriptor = NULL;
-
-    if (!CreatePipe(&handles[0], &handles[1], &saAttr, 0)) {
-        LOG(LOG_ERROR, "pipe", "unable to create pipe\n");
-        return false;
-    }
-    mReadHandle = (unsigned long) handles[0];
-    mWriteHandle = (unsigned long) handles[1];
-    return true;
-#else
-    int fds[2];
-
-    if (pipe(fds) != 0) {
-        LOG(LOG_ERROR, "pipe", "unable to create pipe\n");
-        return false;
-    }
-    mReadHandle = fds[0];
-    mWriteHandle = fds[1];
-    return true;
-#endif
-}
-
-/*
- * Create a "half pipe".  Please, no Segway riding.
- */
-bool Pipe::createReader(unsigned long handle)
-{
-    mReadHandle = handle;
-    assert(mWriteHandle == kInvalidHandle);
-    return true;
-}
-
-/*
- * Create a "half pipe" for writing.
- */
-bool Pipe::createWriter(unsigned long handle)
-{
-    mWriteHandle = handle;
-    assert(mReadHandle == kInvalidHandle);
-    return true;
-}
-
-/*
- * Return "true" if create() has been called successfully.
- */
-bool Pipe::isCreated(void)
-{
-    // one or the other should be open
-    return (mReadHandle != kInvalidHandle || mWriteHandle != kInvalidHandle);
-}
-
-
-/*
- * Read data from the pipe.
- *
- * For Linux and Darwin, just call read().  For Windows, implement
- * non-blocking reads by calling PeekNamedPipe first.
- */
-int Pipe::read(void* buf, int count)
-{
-    assert(mReadHandle != kInvalidHandle);
-
-#if defined(HAVE_WIN32_IPC)
-    DWORD totalBytesAvail = count;
-    DWORD bytesRead;
-
-    if (mReadNonBlocking) {
-        // use PeekNamedPipe to adjust read count expectations
-        if (!PeekNamedPipe((HANDLE) mReadHandle, NULL, 0, NULL,
-                &totalBytesAvail, NULL))
-        {
-            LOG(LOG_ERROR, "pipe", "PeekNamedPipe failed\n");
-            return -1;
-        }
-
-        if (totalBytesAvail == 0)
-            return 0;
-    }
-
-    if (!ReadFile((HANDLE) mReadHandle, buf, totalBytesAvail, &bytesRead,
-            NULL))
-    {
-        DWORD err = GetLastError();
-        if (err == ERROR_HANDLE_EOF || err == ERROR_BROKEN_PIPE)
-            return 0;
-        LOG(LOG_ERROR, "pipe", "ReadFile failed (err=%ld)\n", err);
-        return -1;
-    }
-
-    return (int) bytesRead;
-#else
-    int cc;
-    cc = ::read(mReadHandle, buf, count);
-    if (cc < 0 && errno == EAGAIN)
-        return 0;
-    return cc;
-#endif
-}
-
-/*
- * Write data to the pipe.
- *
- * POSIX systems are trivial, Windows uses a different call and doesn't
- * handle non-blocking writes.
- *
- * If we add non-blocking support here, we probably want to make it an
- * all-or-nothing write.
- *
- * DO NOT use LOG() here, we could be writing a log message.
- */
-int Pipe::write(const void* buf, int count)
-{
-    assert(mWriteHandle != kInvalidHandle);
-
-#if defined(HAVE_WIN32_IPC)
-    DWORD bytesWritten;
-
-    if (mWriteNonBlocking) {
-        // BUG: can't use PeekNamedPipe() to get the amount of space
-        // left.  Looks like we need to use "overlapped I/O" functions.
-        // I just don't care that much.
-    }
-
-    if (!WriteFile((HANDLE) mWriteHandle, buf, count, &bytesWritten, NULL)) {
-        // can't LOG, use stderr
-        fprintf(stderr, "WriteFile failed (err=%ld)\n", GetLastError());
-        return -1;
-    }
-
-    return (int) bytesWritten;
-#else
-    int cc;
-    cc = ::write(mWriteHandle, buf, count);
-    if (cc < 0 && errno == EAGAIN)
-        return 0;
-    return cc;
-#endif
-}
-
-/*
- * Figure out if there is data available on the read fd.
- *
- * We return "true" on error because we want the caller to try to read
- * from the pipe.  They'll notice the read failure and do something
- * appropriate.
- */
-bool Pipe::readReady(void)
-{
-    assert(mReadHandle != kInvalidHandle);
-
-#if defined(HAVE_WIN32_IPC)
-    DWORD totalBytesAvail;
-
-    if (!PeekNamedPipe((HANDLE) mReadHandle, NULL, 0, NULL,
-            &totalBytesAvail, NULL))
-    {
-        LOG(LOG_ERROR, "pipe", "PeekNamedPipe failed\n");
-        return true;
-    }
-
-    return (totalBytesAvail != 0);
-#else
-    errno = 0;
-    fd_set readfds;
-    struct timeval tv = { 0, 0 };
-    int cc;
-
-    FD_ZERO(&readfds);
-    FD_SET(mReadHandle, &readfds);
-
-    cc = select(mReadHandle+1, &readfds, NULL, NULL, &tv);
-    if (cc < 0) {
-        LOG(LOG_ERROR, "pipe", "select() failed\n");
-        return true;
-    } else if (cc == 0) {
-        /* timed out, nothing available */
-        return false;
-    } else if (cc == 1) {
-        /* our fd is ready */
-        return true;
-    } else {
-        LOG(LOG_ERROR, "pipe", "HUH? select() returned > 1\n");
-        return true;
-    }
-#endif
-}
-
-/*
- * Enable or disable non-blocking mode for the read descriptor.
- *
- * NOTE: the calls succeed under Mac OS X, but the pipe doesn't appear to
- * actually be in non-blocking mode.  If this matters -- i.e. you're not
- * using a select() call -- put a call to readReady() in front of the
- * ::read() call, with a PIPE_NONBLOCK_BROKEN #ifdef in the Makefile for
- * Darwin.
- */
-bool Pipe::setReadNonBlocking(bool val)
-{
-    assert(mReadHandle != kInvalidHandle);
-
-#if defined(HAVE_WIN32_IPC)
-    // nothing to do
-#else
-    int flags;
-
-    if (fcntl(mReadHandle, F_GETFL, &flags) == -1) {
-        LOG(LOG_ERROR, "pipe", "couldn't get flags for pipe read fd\n");
-        return false;
-    }
-    if (val)
-        flags |= O_NONBLOCK;
-    else
-        flags &= ~(O_NONBLOCK);
-    if (fcntl(mReadHandle, F_SETFL, &flags) == -1) {
-        LOG(LOG_ERROR, "pipe", "couldn't set flags for pipe read fd\n");
-        return false;
-    }
-#endif
-
-    mReadNonBlocking = val;
-    return true;
-}
-
-/*
- * Enable or disable non-blocking mode for the write descriptor.
- *
- * As with setReadNonBlocking(), this does not work on the Mac.
- */
-bool Pipe::setWriteNonBlocking(bool val)
-{
-    assert(mWriteHandle != kInvalidHandle);
-
-#if defined(HAVE_WIN32_IPC)
-    // nothing to do
-#else
-    int flags;
-
-    if (fcntl(mWriteHandle, F_GETFL, &flags) == -1) {
-        LOG(LOG_WARN, "pipe",
-            "Warning: couldn't get flags for pipe write fd (errno=%d)\n",
-            errno);
-        return false;
-    }
-    if (val)
-        flags |= O_NONBLOCK;
-    else
-        flags &= ~(O_NONBLOCK);
-    if (fcntl(mWriteHandle, F_SETFL, &flags) == -1) {
-        LOG(LOG_WARN, "pipe",
-            "Warning: couldn't set flags for pipe write fd (errno=%d)\n",
-            errno);
-        return false;
-    }
-#endif
-
-    mWriteNonBlocking = val;
-    return true;
-}
-
-/*
- * Specify whether a file descriptor can be inherited by a child process.
- * Under Linux this means setting the close-on-exec flag, under Windows
- * this is SetHandleInformation(HANDLE_FLAG_INHERIT).
- */
-bool Pipe::disallowReadInherit(void)
-{
-    if (mReadHandle == kInvalidHandle)
-        return false;
-
-#if defined(HAVE_WIN32_IPC)
-    if (SetHandleInformation((HANDLE) mReadHandle, HANDLE_FLAG_INHERIT, 0) == 0)
-        return false;
-#else
-    if (fcntl((int) mReadHandle, F_SETFD, FD_CLOEXEC) != 0)
-        return false;
-#endif
-    return true;
-}
-bool Pipe::disallowWriteInherit(void)
-{
-    if (mWriteHandle == kInvalidHandle)
-        return false;
-
-#if defined(HAVE_WIN32_IPC)
-    if (SetHandleInformation((HANDLE) mWriteHandle, HANDLE_FLAG_INHERIT, 0) == 0)
-        return false;
-#else
-    if (fcntl((int) mWriteHandle, F_SETFD, FD_CLOEXEC) != 0)
-        return false;
-#endif
-    return true;
-}
-
-/*
- * Close read descriptor.
- */
-bool Pipe::closeRead(void)
-{
-    if (mReadHandle == kInvalidHandle)
-        return false;
-
-#if defined(HAVE_WIN32_IPC)
-    if (mReadHandle != kInvalidHandle) {
-        if (!CloseHandle((HANDLE)mReadHandle)) {
-            LOG(LOG_WARN, "pipe", "failed closing read handle\n");
-            return false;
-        }
-    }
-#else
-    if (mReadHandle != kInvalidHandle) {
-        if (close((int) mReadHandle) != 0) {
-            LOG(LOG_WARN, "pipe", "failed closing read fd\n");
-            return false;
-        }
-    }
-#endif
-    mReadHandle = kInvalidHandle;
-    return true;
-}
-
-/*
- * Close write descriptor.
- */
-bool Pipe::closeWrite(void)
-{
-    if (mWriteHandle == kInvalidHandle)
-        return false;
-
-#if defined(HAVE_WIN32_IPC)
-    if (mWriteHandle != kInvalidHandle) {
-        if (!CloseHandle((HANDLE)mWriteHandle)) {
-            LOG(LOG_WARN, "pipe", "failed closing write handle\n");
-            return false;
-        }
-    }
-#else
-    if (mWriteHandle != kInvalidHandle) {
-        if (close((int) mWriteHandle) != 0) {
-            LOG(LOG_WARN, "pipe", "failed closing write fd\n");
-            return false;
-        }
-    }
-#endif
-    mWriteHandle = kInvalidHandle;
-    return true;
-}
-
-/*
- * Get the read handle.
- */
-unsigned long Pipe::getReadHandle(void)
-{
-    assert(mReadHandle != kInvalidHandle);
-
-    return mReadHandle;
-}
-
-/*
- * Get the write handle.
- */
-unsigned long Pipe::getWriteHandle(void)
-{
-    assert(mWriteHandle != kInvalidHandle);
-
-    return mWriteHandle;
-}
-
diff --git a/simulator/app/Pipe.h b/simulator/app/Pipe.h
deleted file mode 100644
index 6404168..0000000
--- a/simulator/app/Pipe.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2005 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//
-// FIFO I/O.
-//
-#ifndef _LIBS_UTILS_PIPE_H
-#define _LIBS_UTILS_PIPE_H
-
-#ifdef HAVE_ANDROID_OS
-#error DO NOT USE THIS FILE IN THE DEVICE BUILD
-#endif
-
-namespace android {
-
-/*
- * Simple anonymous unidirectional pipe.
- *
- * The primary goal is to create an implementation with minimal overhead
- * under Linux.  Making Windows, Mac OS X, and Linux all work the same way
- * is a secondary goal.  Part of this goal is to have something that can
- * be fed to a select() call, so that the application can sleep in the
- * kernel until something interesting happens.
- */
-class Pipe {
-public:
-    Pipe(void);
-    virtual ~Pipe(void);
-
-    /* Create the pipe */
-    bool create(void);
-
-    /* Create a read-only pipe, using the supplied handle as read handle */
-    bool createReader(unsigned long handle);
-    /* Create a write-only pipe, using the supplied handle as write handle */
-    bool createWriter(unsigned long handle);
-
-    /* Is this object ready to go? */
-    bool isCreated(void);
-
-    /*
-     * Read "count" bytes from the pipe.  Returns the amount of data read,
-     * or 0 if no data available and we're non-blocking.
-     * Returns -1 on error.
-     */
-    int read(void* buf, int count);
-
-    /*
-     * Write "count" bytes into the pipe.  Returns number of bytes written,
-     * or 0 if there's no room for more data and we're non-blocking.
-     * Returns -1 on error.
-     */
-    int write(const void* buf, int count);
-
-    /* Returns "true" if data is available to read */
-    bool readReady(void);
-
-    /* Enable or disable non-blocking I/O for reads */
-    bool setReadNonBlocking(bool val);
-    /* Enable or disable non-blocking I/O for writes.  Only works on Linux. */
-    bool setWriteNonBlocking(bool val);
-
-    /*
-     * Get the handle.  Only useful in some platform-specific situations.
-     */
-    unsigned long getReadHandle(void);
-    unsigned long getWriteHandle(void);
-
-    /*
-     * Modify inheritance, i.e. whether or not a child process will get
-     * copies of the descriptors.  Systems with fork+exec allow us to close
-     * the descriptors before launching the child process, but Win32
-     * doesn't allow it.
-     */
-    bool disallowReadInherit(void);
-    bool disallowWriteInherit(void);
-
-    /*
-     * Close one side or the other.  Useful in the parent after launching
-     * a child process.
-     */
-    bool closeRead(void);
-    bool closeWrite(void);
-
-private:
-    bool    mReadNonBlocking;
-    bool    mWriteNonBlocking;
-
-    unsigned long mReadHandle;
-    unsigned long mWriteHandle;
-};
-
-}; // android
-
-#endif // _LIBS_UTILS_PIPE_H
diff --git a/simulator/app/Preferences.cpp b/simulator/app/Preferences.cpp
deleted file mode 100644
index 039f1ff..0000000
--- a/simulator/app/Preferences.cpp
+++ /dev/null
@@ -1,475 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Preferences file access.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-//# include "wx/wx.h"
-# include "wx/string.h"
-#endif
-
-#include "Preferences.h"
-
-#include "utils.h"
-#include "tinyxml.h"
-
-static const char* kName = "name";
-static const char* kValue = "value";
-
-
-/*
- * Load from a file.
- */
-bool Preferences::Load(const char* fileName)
-{
-    assert(fileName != NULL);
-    printf("SimPref: reading preferences file '%s'\n", fileName);
-
-    // throw out any existing stuff
-    delete mpDoc;
-
-    mpDoc = new TiXmlDocument;
-    if (mpDoc == NULL)
-        return false;
-
-    if (!mpDoc->LoadFile(fileName)) {
-        fprintf(stderr, "SimPref: ERROR: failed loading '%s'\n", fileName);
-        if (mpDoc->ErrorRow() != 0)
-            fprintf(stderr, "    XML: %s (row=%d col=%d)\n",
-                mpDoc->ErrorDesc(), mpDoc->ErrorRow(), mpDoc->ErrorCol());
-        else
-            fprintf(stderr, "    XML: %s\n", mpDoc->ErrorDesc());
-        goto fail;
-    }
-
-    TiXmlNode* pPrefs;
-    pPrefs = mpDoc->FirstChild("prefs");
-    if (pPrefs == NULL) {
-        fprintf(stderr, "SimPref: ERROR: could not find <prefs> in '%s'\n",
-            fileName);
-        goto fail;
-    }
-
-    // set defaults for anything we haven't set explicitly
-    SetDefaults();
-
-    return true;
-
-fail:
-    delete mpDoc;
-    mpDoc = NULL;
-    return false;
-}
-
-/*
- * Save to a file.
- */
-bool Preferences::Save(const char* fileName)
-{
-    assert(fileName != NULL);
-
-    if (mpDoc == NULL)
-        return false;
-
-    if (!mpDoc->SaveFile(fileName)) {
-        fprintf(stderr, "SimPref: ERROR: failed saving '%s': %s\n",
-            fileName, mpDoc->ErrorDesc());
-        return false;
-    }
-
-    mDirty = false;
-
-    return true;
-}
-
-/*
- * Create an empty collection of preferences.
- */
-bool Preferences::Create(void)
-{
-    static const char* docBase =
-        "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
-        "<!-- Android device simulator preferences -->\n"
-        "<!-- This file is updated by the simulator -->\n"
-        "<prefs>\n"
-        "</prefs>\n";
-
-    // throw out any existing stuff
-    delete mpDoc;
-
-    // alloc and initialize
-    mpDoc = new TiXmlDocument;
-    if (mpDoc == NULL)
-        return false;
-
-    if (!mpDoc->Parse(docBase)) {
-        fprintf(stderr, "SimPref: bad docBase: %s\n", mpDoc->ErrorDesc());
-        return false;
-    }
-
-    SetDefaults();
-    mDirty = true;      // should already be, mbut make sure
-    return true;
-}
-
-/*
- * Add default values to XML doc.
- *
- * This isn't strictly necessary, because the functions that are interested
- * in the preferences can set appropriate defaults themselves when the
- * "get" function returns "false".  However, in some cases a preference
- * can be interesting to more than one function, and you either have to
- * cut & paste the default value or write a "get default for xxx" function.
- *
- * We want this to work even if they already have an older config file, so
- * this only sets values that don't already exist.
- */
-void Preferences::SetDefaults(void)
-{
-    /* table of default values */
-    static const struct {
-        const char* type;
-        const char* name;
-        const char* value;
-    } kDefault[] = {
-        { "pref",           "auto-power-on",        "true" },
-        { "pref",           "debug",                "false" },
-        { "pref",           "valgrind",             "false" },
-        { "pref",           "check-jni",            "true" },
-        { "pref",           "enable-sound",         "true" },
-        { "pref",           "enable-fake-camera",   "true" },
-        { "pref",           "java-vm",              "Dalvik" },
-        /* goobuntu dapper needed LD_ASSUME_KERNEL or gdb choked badly */
-        { "pref",           "ld-assume-kernel",     "" /*2.4.19*/ },
-        { "pref",           "launch-command",
-            "xterm -geom 80x60+10+10 -sb -title Simulator -e" },
-        { "pref",           "launch-wrapper-args",  "-wait" },
-    };
-    TiXmlNode* pPrefs;
-
-    assert(mpDoc != NULL);
-
-    pPrefs = mpDoc->FirstChild("prefs");
-
-    /*
-     * Look up the name.  If it doesn't exist, add it.
-     */
-    for (int i = 0; i < NELEM(kDefault); i++) {
-        TiXmlNode* pNode = _FindNode(kDefault[i].type, kDefault[i].name);
-
-        if (pNode == NULL) {
-            TiXmlElement elem(kDefault[i].type);
-            elem.SetAttribute(kName, kDefault[i].name);
-            elem.SetAttribute(kValue, kDefault[i].value);
-            pPrefs->InsertEndChild(elem);
-
-            printf("SimPref: added default <%s> '%s'='%s'\n",
-                kDefault[i].type, kDefault[i].name, kDefault[i].value);
-        } else {
-            printf("SimPref: found existing <%s> '%s'\n", 
-                kDefault[i].type, kDefault[i].name);
-        }
-    }
-}
-
-static TiXmlNode* get_next_node(TiXmlNode* pNode)
-{
-  if (!pNode->NoChildren())
-  {
-      pNode = pNode->FirstChild();
-  }
-  else if (pNode->NoChildren() && 
-           (pNode->NextSibling() == NULL))
-  {
-      pNode = pNode->Parent()->NextSibling();
-  }
-  else
-  {
-      pNode = pNode->NextSibling();
-  }
-  return pNode;
-}
-
-/*
- * Returns the node with element type and name specified
- *
- * WARNING: this searches through the tree and returns the first matching
- * node.
- */
-TiXmlNode* Preferences::_FindNode(const char* type, const char* str) const
-{
-    assert((type != NULL) && (str != NULL));
-    TiXmlNode* pRoot;
-    TiXmlNode* pNode;
-
-    pRoot = mpDoc->FirstChild("prefs");
-    assert(pRoot != NULL);
-
-    for (pNode = pRoot->FirstChild(); pNode != NULL;)
-    {
-        if (pNode->Type() != TiXmlNode::ELEMENT ||
-            strcasecmp(pNode->Value(), type) != 0)
-        {
-            pNode = get_next_node(pNode);
-            continue;
-        }
-
-        TiXmlElement* pElem = pNode->ToElement();
-        assert(pElem != NULL);
-
-        const char* name = pElem->Attribute(kName);
-
-        /* 1. If the name is blank, something is wrong with the config file
-         * 2. If the name matches the passed in string, we found the node
-         * 3. If the node has children, descend another level
-         * 4. If there are no children and no siblings of the node, go up a level
-         * 5. Otherwise, grab the next sibling
-         */
-        if (name == NULL)
-        {
-            fprintf(stderr, "WARNING: found <%s> without name\n", type);
-            continue;
-        }
-        else if (strcasecmp(name, str) == 0)
-        {
-            return pNode;
-        }
-        else 
-        {
-            pNode = get_next_node(pNode);
-        }
-    }
-
-    return NULL;
-}
-
-/*
- * Locate the specified preference.
- */
-TiXmlNode* Preferences::FindPref(const char* str) const
-{
-    TiXmlNode* pNode = _FindNode("pref", str);
-    return pNode;
-}
-
-/*
- * Like FindPref(), but returns a TiXmlElement.
- */
-TiXmlElement* Preferences::FindPrefElement(const char* str) const
-{
-    TiXmlNode* pNode;
-
-    pNode = FindPref(str);
-    if (pNode != NULL)
-        return pNode->ToElement();
-    return NULL;
-}
-
-/*
- * Add a new preference entry with a blank entry for value.  Returns a
- * pointer to the new element.
- */
-TiXmlElement* Preferences::AddPref(const char* str)
-{
-    assert(FindPref(str) == NULL);
-
-    TiXmlNode* pPrefs;
-
-    pPrefs = mpDoc->FirstChild("prefs");
-    assert(pPrefs != NULL);
-
-    TiXmlElement elem("pref");
-    elem.SetAttribute(kName, str);
-    elem.SetAttribute(kValue, "");
-    pPrefs->InsertEndChild(elem);
-
-    TiXmlNode* pNewPref = FindPref(str);
-    return pNewPref->ToElement();
-}
-
-/*
- * Remove a node from the tree
- */
-bool Preferences::_RemoveNode(TiXmlNode* pNode)
-{
-    if (pNode == NULL)
-        return false;
-
-    TiXmlNode* pParent = pNode->Parent();
-    if (pParent == NULL)
-        return false;
-
-    pParent->RemoveChild(pNode);
-    mDirty = true;
-    return true;
-}
-
-/*
- * Remove a preference entry.
- */
-bool Preferences::RemovePref(const char* delName)
-{
-    return _RemoveNode(FindPref(delName));
-}
-
-/*
- * Test for existence.
- */
-bool Preferences::Exists(const char* name) const
-{
-    TiXmlElement* pElem = FindPrefElement(name);
-    return (pElem != NULL);
-}
-
-/*
- * Internal implemenations for getting values 
- */
-bool Preferences::_GetBool(TiXmlElement* pElem, bool* pVal) const
-{
-    if (pElem != NULL) 
-    {
-        const char* str = pElem->Attribute(kValue);
-        if (str != NULL) 
-        {
-            if (strcasecmp(str, "true") == 0)
-                *pVal = true;
-            else if (strcasecmp(str, "false") == 0)
-                *pVal = false;
-            else 
-            {
-                printf("SimPref: evaluating as bool name='%s' val='%s'\n",
-                pElem->Attribute(kName), str);
-                return false;
-            }
-            return true;
-        }
-    }
-    return false;
-}
-
-bool Preferences::_GetInt(TiXmlElement* pElem, int* pInt) const
-{
-    int val;
-    if (pElem != NULL && pElem->Attribute(kValue, &val) != NULL) {
-        *pInt = val;
-        return true;
-    }
-    return false;
-}
-
-bool Preferences::_GetDouble(TiXmlElement* pElem, double* pDouble) const
-{
-    double val;
-    if (pElem != NULL && pElem->Attribute(kValue, &val) != NULL) {
-        *pDouble = val;
-        return true;
-    }
-    return false;
-}
-
-bool Preferences::_GetString(TiXmlElement* pElem, wxString& str) const
-{
-    const char* val;
-    if (pElem != NULL) {
-        val = pElem->Attribute(kValue);
-        if (val != NULL) {
-            str = wxString::FromAscii(val);
-            return true;
-        }
-    }
-    return false;
-}
-
-/*
- * Get a value.  Do not disturb "*pVal" unless we have something to return.
- */
-bool Preferences::GetBool(const char* name, bool* pVal) const
-{
-    return _GetBool(FindPrefElement(name), pVal);
-}
-
-bool Preferences::GetInt(const char* name, int* pInt) const
-{
-    return _GetInt(FindPrefElement(name), pInt);
-}
-
-bool Preferences::GetDouble(const char* name, double* pDouble) const
-{
-    return _GetDouble(FindPrefElement(name), pDouble);
-}
-
-bool Preferences::GetString(const char* name, char** pVal) const
-{
-    wxString str = wxString::FromAscii(*pVal);
-    if (_GetString(FindPrefElement(name), str))
-    {
-        *pVal = android::strdupNew(str.ToAscii());
-        return true;
-    }
-    return false;   
-}
-
-bool Preferences::GetString(const char* name, wxString& str) const
-{
-    return _GetString(FindPrefElement(name), str);
-}
-
-/*
- * Set a value.  If the preference already exists, and the value hasn't
- * changed, don't do anything.  This avoids setting the "dirty" flag
- * unnecessarily.
- */
-void Preferences::SetBool(const char* name, bool val)
-{
-    bool oldVal;
-    if (GetBool(name, &oldVal) && val == oldVal)
-        return;
-
-    SetString(name, val ? "true" : "false");
-    mDirty = true;
-}
-
-void Preferences::SetInt(const char* name, int val)
-{
-    int oldVal;
-    if (GetInt(name, &oldVal) && val == oldVal)
-        return;
-
-    TiXmlElement* pElem = FindPrefElement(name);
-    if (pElem == NULL)
-        pElem = AddPref(name);
-    pElem->SetAttribute(kValue, val);
-    mDirty = true;
-}
-
-void Preferences::SetDouble(const char* name, double val)
-{
-    double oldVal;
-    if (GetDouble(name, &oldVal) && val == oldVal)
-        return;
-
-    TiXmlElement* pElem = FindPrefElement(name);
-    if (pElem == NULL)
-        pElem = AddPref(name);
-    pElem->SetDoubleAttribute(kValue, val);
-    mDirty = true;
-}
-
-void Preferences::SetString(const char* name, const char* val)
-{
-    wxString oldVal;
-    if (GetString(name, /*ref*/oldVal) && strcmp(oldVal.ToAscii(), val) == 0)
-        return;
-
-    TiXmlElement* pElem = FindPrefElement(name);
-    if (pElem == NULL)
-        pElem = AddPref(name);
-    pElem->SetAttribute(kValue, val);
-    mDirty = true;
-}
-
-
diff --git a/simulator/app/Preferences.h b/simulator/app/Preferences.h
deleted file mode 100644
index 91c35de..0000000
--- a/simulator/app/Preferences.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Preferences file access.
-//
-#ifndef _SIM_PREFERENCES_H
-#define _SIM_PREFERENCES_H
-
-#include "tinyxml.h"
-
-/*
- * This class provides access to a preferences file.  It's possible to
- * have more than one instance, though it's probably unwise to have multiple
- * objects for the same file on disk.
- *
- * All value are stored as strings.  The class doesn't really try to
- * enforce type safety, but it will complain if you try to do something
- * nonsensical (like convert "foo" to an integer).
- */
-class Preferences {
-public:
-    Preferences(void) :
-        mpDoc(NULL), mDirty(false)
-        {}
-    ~Preferences(void) {
-        delete mpDoc;
-    }
-
-    /* load all preferences from a file */
-    bool Load(const char* fileName);
-
-    /* save all preferences to a file */
-    bool Save(const char* fileName);
-
-    /* create new preferences set (use when file does not exist) */
-    bool Create(void);
-
-    /*
-     * Retrieve a value from the preferences database.
-     *
-     * These return "false" if the value was not found or could not be
-     * converted to the expected type.  The value pointed to be the second
-     * arg is guaranteed to be left undisturbed in this case.
-     *
-     * The value set by GetString(const char*, char**) will be set to
-     * newly-allocated storage that must be freed with "delete[]".  This
-     * is done instead of returning a const char* because it's unclear
-     * what guarantees TinyXml makes wrt string lifetime (especially in
-     * a multithreaded environment).
-     */
-    bool GetBool(const char* name, bool* pVal) const;
-    bool GetInt(const char* name, int* pInt) const;
-    bool GetDouble(const char* name, double* pDouble) const;
-    bool GetString(const char* name, char** pVal) const;
-    bool GetString(const char* name, wxString& str) const;
-
-    /*
-     * Set a value in the database.
-     */
-    void SetBool(const char* name, bool val);
-    void SetInt(const char* name, int val);
-    void SetDouble(const char* name, double val);
-    void SetString(const char* name, const char* val);
-
-    /*
-     * Just test for existence.
-     */
-    bool Exists(const char* name) const;
-    
-    /*
-     * Remove a <pref> from the config file.
-     */
-    bool RemovePref(const char* name);
-    
-    /*
-     * Get the value of the "dirty" flag.
-     */
-    bool GetDirty(void) const { return mDirty; }
-
-private:
-    /* Implementation of getters */
-    bool _GetBool(TiXmlElement* pElem, bool* pVal) const;
-    bool _GetInt(TiXmlElement* pElem, int* pInt) const;
-    bool _GetDouble(TiXmlElement* pElem, double* pDouble) const;
-    bool _GetString(TiXmlElement* pElem, wxString& str) const;
-    
-    /* this can be used to generate some defaults */
-    void SetDefaults(void);
-
-    /* locate the named preference */
-    TiXmlNode* _FindNode(const char* type, const char* name) const;
-    TiXmlNode* FindPref(const char* str) const;
-    /* like FindPref, but returns a TiXmlElement */
-    TiXmlElement* FindPrefElement(const char* str) const;
-    /* add a new preference entry */
-    TiXmlElement* AddPref(const char* str);
-    /* removes a node */
-    bool _RemoveNode(TiXmlNode* pNode);
-    
-    TiXmlDocument*  mpDoc;
-    bool            mDirty;
-};
-
-#endif // _SIM_PREFERENCES_H
diff --git a/simulator/app/PrefsDialog.cpp b/simulator/app/PrefsDialog.cpp
deleted file mode 100644
index e146a56..0000000
--- a/simulator/app/PrefsDialog.cpp
+++ /dev/null
@@ -1,292 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Preferences modal dialog.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-
-#include "PrefsDialog.h"
-#include "Preferences.h"
-#include "MyApp.h"
-#include "Resource.h"
-
-BEGIN_EVENT_TABLE(PrefsDialog, wxDialog)
-END_EVENT_TABLE()
-
-/*
- * Constructor.
- */
-PrefsDialog::PrefsDialog(wxWindow* parent)
-    : wxDialog(parent, IDD_PREFS, wxT("Preferences"), wxDefaultPosition,
-        wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ),
-      mAutoPowerOn(false),
-      mGammaCorrection(1.0),
-      mEnableSound(true),
-      mEnableFakeCamera(true),
-      mLogLevel(0)
-{
-    LoadPreferences();   
-    CreateControls();
-}
-
-/*
- * Destructor.  Not much to do.
- */
-PrefsDialog::~PrefsDialog()
-{
-}
-
-/*
- * Create all of the pages and add them to the notebook.
- */
-void PrefsDialog::CreateControls(void)
-{
-    wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
-    wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL);
-    mNotebook.Create(this, wxID_ANY);
-    wxPanel* page;
-
-    /* pages added to notebook are owned by notebook */
-    page = CreateSimulatorPage(&mNotebook);
-    mNotebook.AddPage(page, wxT("Simulator"), true);       // selected page
-    page = CreateRuntimePage(&mNotebook);
-    mNotebook.AddPage(page, wxT("Runtime"), false);
-
-    wxButton* cancel = new wxButton(this, wxID_CANCEL, wxT("&Cancel"),
-        wxDefaultPosition, wxDefaultSize, 0);
-    okCancelSizer->Add(cancel, 0, wxALL | wxALIGN_RIGHT, kInterSpacing);
-
-    wxButton* ok = new wxButton(this, wxID_OK, wxT("&OK"),
-        wxDefaultPosition, wxDefaultSize, 0);
-    okCancelSizer->Add(ok, 0, wxALL | wxALIGN_RIGHT, kInterSpacing);
-
-    mainSizer->Add(&mNotebook, 1, wxEXPAND);
-    mainSizer->Add(okCancelSizer, 0, wxALIGN_RIGHT);
-
-    SetSizer(mainSizer);
-
-    mainSizer->Fit(this);           // shrink-to-fit
-    mainSizer->SetSizeHints(this);  // define minimum size
-}
-
-/*
- * Load preferences from config file
- */
-void PrefsDialog::LoadPreferences(void)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    assert(pPrefs != NULL);
-
-    /*
-     * Load preferences.
-     */
-    mConfigFile = ((MyApp*)wxTheApp)->GetConfigFileName();
-
-    pPrefs->GetDouble("gamma", &mGammaCorrection);
-    pPrefs->GetString("debugger", /*ref*/ mDebugger);
-    pPrefs->GetString("valgrinder", /*ref*/ mValgrinder);
-    pPrefs->GetBool("auto-power-on", &mAutoPowerOn);
-    pPrefs->GetBool("enable-sound", &mEnableSound);
-    pPrefs->GetBool("enable-fake-camera", &mEnableFakeCamera);
-}
-
-/*
- * Transfer data from our members to the window controls.
- *
- * First we have to pull the data out of the preferences database.
- * Anything that hasn't already been added with a default value will
- * be given a default here, which may or may not match the default
- * behavior elsewhere.  The best solution to this is to define the
- * default when the preferences file is created or read, so that we're
- * never left guessing here.
- */
-bool PrefsDialog::TransferDataToWindow(void)
-{
-    /*
-     * Do standard dialog setup.
-     */
-    wxTextCtrl* configFileName = (wxTextCtrl*) FindWindow(IDC_SPREFS_CONFIG_NAME);
-    wxTextCtrl* debugger = (wxTextCtrl*) FindWindow(IDC_SPREFS_DEBUGGER);
-    wxTextCtrl* valgrinder = (wxTextCtrl*) FindWindow(IDC_SPREFS_VALGRINDER);
-    wxCheckBox* autoPowerOn = (wxCheckBox*) FindWindow(IDC_SPREFS_AUTO_POWER_ON);
-    wxCheckBox* enableSound = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_SOUND);
-    wxCheckBox* enableFakeCamera = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_FAKE_CAMERA);
-
-    wxTextCtrl* gamma = (wxTextCtrl*) FindWindow(IDC_RPREFS_GAMMA);
-
-    configFileName->SetValue(mConfigFile);
-    debugger->SetValue(mDebugger);
-    valgrinder->SetValue(mValgrinder);
-    autoPowerOn->SetValue(mAutoPowerOn);
-    enableSound->SetValue(mEnableSound);
-    enableFakeCamera->SetValue(mEnableFakeCamera);
-
-    wxString tmpStr;
-    tmpStr.Printf(wxT("%.3f"), mGammaCorrection);
-    gamma->SetValue(tmpStr);
-
-    return true;
-}
-
-/*
- * Transfer and validate data from the window controls.
- *
- * This doesn't get called if the user cancels out of the dialog.
- */
-bool PrefsDialog::TransferDataFromControls(void)
-{
-    /*
-     * Do standard dialog export.
-     *
-     * We should error-check all of these.
-     */
-    // configName is read-only, don't need it here
-    wxTextCtrl* debugger = (wxTextCtrl*) FindWindow(IDC_SPREFS_DEBUGGER);
-    wxTextCtrl* valgrinder = (wxTextCtrl*) FindWindow(IDC_SPREFS_VALGRINDER);
-    wxCheckBox* autoPowerOn = (wxCheckBox*) FindWindow(IDC_SPREFS_AUTO_POWER_ON);
-    wxCheckBox* enableSound = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_SOUND);
-    wxCheckBox* enableFakeCamera = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_FAKE_CAMERA);
-
-    wxTextCtrl* gamma = (wxTextCtrl*) FindWindow(IDC_RPREFS_GAMMA);
-
-    mDebugger = debugger->GetValue();
-    mValgrinder = valgrinder->GetValue();
-    mAutoPowerOn = autoPowerOn->GetValue();
-    mEnableSound = enableSound->GetValue();
-    mEnableFakeCamera = enableFakeCamera->GetValue();
-
-    wxString tmpStr;
-    tmpStr = gamma->GetValue();
-    bool toDouble = tmpStr.ToDouble(&mGammaCorrection);    // returns 0.0 on err; use strtof()?
-
-    if (!toDouble || mGammaCorrection <= 0.0 || mGammaCorrection > 2.0) {
-        wxMessageBox(wxT("Bad value for gamma -- must be > 0.0 and <= 2.0"),
-            wxT("Hoser"), wxOK, this);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Transfer preferences to config file
- */
-bool PrefsDialog::TransferDataFromWindow(void)
-{
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    assert(pPrefs != NULL);
-
-    /*
-     * Grab the information from the controls and save in member field
-     */
-
-    if (!TransferDataFromControls())
-        return false;
-
-    pPrefs->SetString("debugger", mDebugger.ToAscii());
-    pPrefs->SetString("valgrinder", mValgrinder.ToAscii());
-    pPrefs->SetBool("auto-power-on", mAutoPowerOn);
-    pPrefs->SetBool("enable-sound", mEnableSound);
-    pPrefs->SetBool("enable-fake-camera", mEnableFakeCamera);
-
-    pPrefs->SetDouble("gamma", mGammaCorrection);
-
-    return true;
-}
-
-
-/*
- * Create the Simulator Preferences page.
- */
-wxPanel* PrefsDialog::CreateSimulatorPage(wxBookCtrlBase* parent)
-{
-    wxPanel* panel = new wxPanel(parent);
-
-    wxStaticText* configNameDescr = new wxStaticText(panel, wxID_STATIC,
-        wxT("Config file:"));
-    wxTextCtrl* configName = new wxTextCtrl(panel, IDC_SPREFS_CONFIG_NAME,
-        wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
-    // make it visibly different; unfortunately this kills scroll, copy&paste
-    configName->Enable(false);
-
-    wxStaticText* debuggerDescr = new wxStaticText(panel, wxID_STATIC,
-        wxT("Debugger:"));
-    wxTextCtrl* debugger = new wxTextCtrl(panel, IDC_SPREFS_DEBUGGER);
-
-    wxStaticText* valgrinderDescr = new wxStaticText(panel, wxID_STATIC,
-        wxT("Valgrind:"));
-    wxTextCtrl* valgrinder = new wxTextCtrl(panel, IDC_SPREFS_VALGRINDER);
-
-    wxCheckBox* autoPowerOn = new wxCheckBox(panel, IDC_SPREFS_AUTO_POWER_ON,
-        wxT("Boot runtime when simulator starts"));
-
-    wxBoxSizer* sizerPanel = new wxBoxSizer(wxVERTICAL);
-    sizerPanel->Add(kMinWidth, kEdgeSpacing);       // forces minimum width
-    sizerPanel->Add(configNameDescr);
-    sizerPanel->Add(configName, 0, wxEXPAND);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(debuggerDescr);
-    sizerPanel->Add(debugger, 0, wxEXPAND);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(valgrinderDescr);
-    sizerPanel->Add(valgrinder, 0, wxEXPAND);
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(autoPowerOn);
-    sizerPanel->AddSpacer(kInterSpacing);
-
-    wxBoxSizer* horizIndent = new wxBoxSizer(wxHORIZONTAL);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    horizIndent->Add(sizerPanel, wxSHAPED);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    panel->SetSizer(horizIndent);
-
-    return panel;
-}
-
-/*
- * Create the Runtime Preferences page.
- */
-wxPanel* PrefsDialog::CreateRuntimePage(wxBookCtrlBase* parent)
-{
-    wxPanel* panel = new wxPanel(parent);
-
-    wxStaticText* gammaStrDescr = new wxStaticText(panel, wxID_STATIC,
-        wxT("Gamma correction:"));
-    wxTextCtrl* gammaStr = new wxTextCtrl(panel, IDC_RPREFS_GAMMA);
-
-    wxBoxSizer* gammaSizer = new wxBoxSizer(wxHORIZONTAL);
-    gammaSizer->Add(gammaStrDescr, 0, wxALIGN_CENTER_VERTICAL);
-    gammaSizer->AddSpacer(kInterSpacing);
-    gammaSizer->Add(gammaStr);
-
-    wxBoxSizer* sizerPanel = new wxBoxSizer(wxVERTICAL);
-    sizerPanel->Add(kMinWidth, kEdgeSpacing);       // forces minimum width
-    sizerPanel->Add(gammaSizer);
-    sizerPanel->AddSpacer(kInterSpacing);
-
-    wxCheckBox* enableSound = new wxCheckBox(panel, IDC_RPREFS_ENABLE_SOUND,
-        wxT("Enable Sound"));
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(enableSound);
-
-    wxCheckBox* enableFakeCamera = new wxCheckBox(panel, IDC_RPREFS_ENABLE_FAKE_CAMERA,
-        wxT("Enable Fake Camera"));
-    sizerPanel->AddSpacer(kInterSpacing);
-    sizerPanel->Add(enableFakeCamera);
-
-    wxBoxSizer* horizIndent = new wxBoxSizer(wxHORIZONTAL);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    horizIndent->Add(sizerPanel, wxEXPAND);
-    horizIndent->AddSpacer(kEdgeSpacing);
-    panel->SetSizer(horizIndent);
-
-    return panel;
-}
-
diff --git a/simulator/app/PrefsDialog.h b/simulator/app/PrefsDialog.h
deleted file mode 100644
index 250f79e..0000000
--- a/simulator/app/PrefsDialog.h
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Prefs modal dialog.
-//
-#ifndef _SIM_PREFS_DIALOG_H
-#define _SIM_PREFS_DIALOG_H
-
-/*
- * Declaration of preferences dialog.  This class defines the outer
- * wrapper as well as all of the pages.
- */
-class PrefsDialog : public wxDialog {
-    //DECLARE_CLASS(PrefsDialog)    // shown in book, but causes link problems
-    DECLARE_EVENT_TABLE()
-
-public:
-    PrefsDialog(wxWindow* parent);
-    virtual ~PrefsDialog();
-
-    void CreateControls(void);
-
-    wxString    mConfigFile;
-
-private:
-    bool TransferDataToWindow(void);
-    bool TransferDataFromWindow(void);
-    bool TransferDataFromControls(void);
-    void LoadPreferences(void);
-    
-    wxPanel* CreateSimulatorPage(wxBookCtrlBase* parent);
-    wxPanel* CreateRuntimePage(wxBookCtrlBase* parent);
-
-    /* main notebook; for aesthetic reasons we may want a Choicebook */
-    wxNotebook    mNotebook;
-
-    /* Global simulator options */
-    wxString    mDebugger;
-    wxString    mValgrinder;
-    bool        mAutoPowerOn;
-    // log window size?
-
-    /* Global runtime options */
-    double      mGammaCorrection;
-    bool        mEnableSound;
-    bool        mEnableFakeCamera;
-    int         mLogLevel;
-
-    enum {
-        kMinWidth = 300,        // minimum prefs dialog width, in pixels
-    };
-};
-
-#endif // _SIM_PREFS_DIALOG_H
diff --git a/simulator/app/PropertyServer.cpp b/simulator/app/PropertyServer.cpp
deleted file mode 100644
index 91223ef..0000000
--- a/simulator/app/PropertyServer.cpp
+++ /dev/null
@@ -1,489 +0,0 @@
-//
-// Copyright 2007 The Android Open Source Project
-//
-// Property sever.  Mimics behavior provided on the device by init(8) and
-// some code built into libc.
-//
-    
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-    
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-#include "wx/image.h"
-    
-#include "PropertyServer.h"
-#include "MyApp.h"
-#include "Preferences.h"
-#include "MainFrame.h"
-#include "utils.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/un.h>
-
-
-using namespace android;
-
-const char* PropertyServer::kPropCheckJni = "ro.kernel.android.checkjni";
-
-/*
- * Destructor.
- */
-PropertyServer::~PropertyServer(void)
-{
-    if (IsRunning()) {
-        // TODO: cause thread to stop, then Wait for it
-    }
-    printf("Sim: in ~PropertyServer()\n");
-}
-
-/*
- * Create and run the thread.
- */
-bool PropertyServer::StartThread(void)
-{
-    if (Create() != wxTHREAD_NO_ERROR) {
-        fprintf(stderr, "Sim: ERROR: can't create PropertyServer thread\n");
-        return false;
-    }
-
-    Run();
-    return true;
-}
-
-
-/*
- * Clear out the list.
- */
-void PropertyServer::ClearProperties(void)
-{
-    typedef List<Property>::iterator PropIter;
-
-    for (PropIter pi = mPropList.begin(); pi != mPropList.end(); ++pi) {
-        pi = mPropList.erase(pi);
-    }
-}
-
-/*
- * Set default values for several properties.
- */
-void PropertyServer::SetDefaultProperties(void)
-{
-    static const struct {
-        const char* key;
-        const char* value;
-    } propList[] = {
-        { "net.bt.name", "Android" },
-        { "ro.kernel.mem", "60M" },
-        { "ro.kernel.board_sardine.version", "4" },
-        { "ro.kernel.console", "null" },
-        { "ro.build.id", "engineering" },
-        { "ro.build.date", "Wed Nov 28 07:44:14 PST 2007" },
-        { "ro.build.date.utc", "1196264654" },
-        { "ro.build.type", "eng" },
-        { "ro.build.version.sdk", "8" },
-        { "ro.build.version.codename", "Froyo" },
-        { "ro.build.version.release", "Froyo" },
-        { "ro.product.device", "simulator" /*"sooner"*/ },
-        { "ro.product.brand", "generic" },
-        { "ro.build.user", "fadden" },
-        { "ro.build.host", "marathon" },
-        { "ro.config.nocheckin", "yes" },
-        { "ro.product.manufacturer", "" },
-        { "ro.radio.use-ppp", "no" },
-        { "ro.FOREGROUND_APP_ADJ", "0" },
-        { "ro.VISIBLE_APP_ADJ", "1" },
-        { "ro.PERCEPTIBLE_APP_ADJ", "2" },
-        { "ro.HEAVY_WEIGHT_APP_ADJ", "3" },
-        { "ro.SECONDARY_SERVER_ADJ", "2" },
-        { "ro.HIDDEN_APP_MIN_ADJ", "7" },
-        { "ro.CONTENT_PROVIDER_ADJ", "14" },
-        { "ro.EMPTY_APP_ADJ", "15" },
-        { "ro.FOREGROUND_APP_MEM", "1536" },
-        { "ro.VISIBLE_APP_MEM", "2048" },
-        { "ro.PERCEPTIBLE_APP_MEM", "4096" },
-        { "ro.HEAVY_WEIGHT_APP_MEM", "4096" },
-        { "ro.SECONDARY_SERVER_MEM", "4096" },
-        { "ro.HIDDEN_APP_MEM", "8192" },
-        { "ro.EMPTY_APP_MEM", "16384" },
-        { "ro.HOME_APP_ADJ", "4" },
-        { "ro.HOME_APP_MEM", "4096" },
-        { "ro.BACKUP_APP_ADJ", "2" },
-        { "ro.BACKUP_APP_MEM", "4096" },
-        { "ro.PERCEPTIBLE_APP_ADJ", "2" },
-        { "ro.PERCEPTIBLE_APP_MEM", "4096" },
-        { "ro.HEAVY_WEIGHT_APP_ADJ", "3" },
-        { "ro.HEAVY_WEIGHT_APP_MEM", "4096" },
-        //{ "init.svc.adbd", "running" },       // causes ADB-JDWP
-        { "init.svc.usbd", "running" },
-        { "init.svc.debuggerd", "running" },
-        { "init.svc.ril-daemon", "running" },
-        { "init.svc.zygote", "running" },
-        { "init.svc.runtime", "running" },
-        { "init.svc.dbus", "running" },
-        { "init.svc.pppd_gprs", "running" },
-        { "adb.connected", "0" },
-        /*
-        { "status.battery.state", "Slow" },
-        { "status.battery.level", "5" },
-        { "status.battery.level_raw", "50" },
-        { "status.battery.level_scale", "9" },
-        */
-
-        /* disable the annoying setup wizard */
-        { "app.setupwizard.disable", "1" },
-
-        /* Dalvik options, set by AndroidRuntime */
-        { "dalvik.vm.stack-trace-file", "/data/anr/traces.txt" },
-        //{ "dalvik.vm.execution-mode", "int:portable" },
-        { "dalvik.vm.enableassertions", "all" },    // -ea
-        { "dalvik.vm.dexopt-flags", "" },           // e.g. "v=a,o=v,m=n"
-        { "dalvik.vm.deadlock-predict", "off" },    // -Xdeadlockpredict
-        //{ "dalvik.vm.jniopts", "forcecopy" },       // -Xjniopts
-        { "log.redirect-stdio", "false" },          // -Xlog-stdio
-
-        /* SurfaceFlinger options */
-        { "ro.sf.lcd_density", "160" },
-        { "debug.sf.nobootanimation", "1" },
-        { "debug.sf.showupdates", "0" },
-        { "debug.sf.showcpu", "0" },
-        { "debug.sf.showbackground", "0" },
-        { "debug.sf.showfps", "0" },
-        { "default", "default" },
-
-        /* Stagefright options */
-        { "media.stagefright.enable-player", "true" },
-        { "media.stagefright.enable-meta", "true" },
-        { "media.stagefright.enable-scan", "true" },
-        { "media.stagefright.enable-http", "true" },
-    };
-
-    for (int i = 0; i < NELEM(propList); i++)
-        SetProperty(propList[i].key, propList[i].value);
-
-    Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
-    bool doCheckJni = false;
-
-    pPrefs->GetBool("check-jni", &doCheckJni);
-    if (doCheckJni)
-        SetProperty(kPropCheckJni, "1");
-    else
-        SetProperty(kPropCheckJni, "0");
-}
-
-/*
- * Get the value of a property.
- *
- * "valueBuf" must hold at least PROPERTY_VALUE_MAX bytes.
- *
- * Returns "true" if the property was found.
- */
-bool PropertyServer::GetProperty(const char* key, char* valueBuf)
-{
-    typedef List<Property>::iterator PropIter;
-
-    assert(key != NULL);
-    assert(valueBuf != NULL);
-
-    for (PropIter pi = mPropList.begin(); pi != mPropList.end(); ++pi) {
-        Property& prop = *pi;
-        if (strcmp(prop.key, key) == 0) {
-            if (strlen(prop.value) >= PROPERTY_VALUE_MAX) {
-                fprintf(stderr,
-                    "GLITCH: properties table holds '%s' '%s' (len=%d)\n",
-                    prop.key, prop.value, (int) strlen(prop.value));
-                abort();
-            }
-            assert(strlen(prop.value) < PROPERTY_VALUE_MAX);
-            strcpy(valueBuf, prop.value);
-            return true;
-        }
-    }
-
-    //printf("Prop: get [%s] not found\n", key);
-    return false;
-}
-
-/*
- * Set the value of a property, replacing it if it already exists.
- *
- * If "value" is NULL, the property is removed.
- *
- * If the property is immutable, this returns "false" without doing
- * anything.  (Not implemented.)
- */
-bool PropertyServer::SetProperty(const char* key, const char* value)
-{
-    typedef List<Property>::iterator PropIter;
-
-    assert(key != NULL);
-    assert(value != NULL);
-
-    for (PropIter pi = mPropList.begin(); pi != mPropList.end(); ++pi) {
-        Property& prop = *pi;
-        if (strcmp(prop.key, key) == 0) {
-            if (value != NULL) {
-                //printf("Prop: replacing [%s]: [%s] with [%s]\n",
-                //    prop.key, prop.value, value);
-                strcpy(prop.value, value);
-            } else {
-                //printf("Prop: removing [%s]\n", prop.key);
-                mPropList.erase(pi);
-            }
-            return true;
-        }
-    }
-
-    //printf("Prop: adding [%s]: [%s]\n", key, value);
-    Property tmp;
-    strcpy(tmp.key, key);
-    strcpy(tmp.value, value);
-    mPropList.push_back(tmp);
-    return true;
-}
-
-/*
- * Create a UNIX domain socket, carefully removing it if it already
- * exists.
- */
-bool PropertyServer::CreateSocket(const char* fileName)
-{
-    struct stat sb;
-    bool result = false;
-    int sock = -1;
-    int cc;
-
-    cc = stat(fileName, &sb);
-    if (cc < 0) {
-        if (errno != ENOENT) {
-            LOG(LOG_ERROR, "sim-prop",
-                "Unable to stat '%s' (errno=%d)\n", fileName, errno);
-            goto bail;
-        }
-    } else {
-        /* don't touch it if it's not a socket */
-        if (!(S_ISSOCK(sb.st_mode))) {
-            LOG(LOG_ERROR, "sim-prop",
-                "File '%s' exists and is not a socket\n", fileName);
-            goto bail;
-        }
-
-        /* remove the cruft */
-        if (unlink(fileName) < 0) {
-            LOG(LOG_ERROR, "sim-prop",
-                "Unable to remove '%s' (errno=%d)\n", fileName, errno);
-            goto bail;
-        }
-    }
-
-    struct sockaddr_un addr;
-
-    sock = ::socket(AF_UNIX, SOCK_STREAM, 0);
-    if (sock < 0) {
-        LOG(LOG_ERROR, "sim-prop",
-            "UNIX domain socket create failed (errno=%d)\n", errno);
-        goto bail;
-    }
-
-    /* bind the socket; this creates the file on disk */
-    strcpy(addr.sun_path, fileName);    // max 108 bytes
-    addr.sun_family = AF_UNIX;
-    cc = ::bind(sock, (struct sockaddr*) &addr, SUN_LEN(&addr));
-    if (cc < 0) {
-        LOG(LOG_ERROR, "sim",
-            "AF_UNIX bind failed for '%s' (errno=%d)\n", fileName, errno);
-        goto bail;
-    }
-
-    cc = ::listen(sock, 5);
-    if (cc < 0) {
-        LOG(LOG_ERROR, "sim", "AF_UNIX listen failed (errno=%d)\n", errno);
-        goto bail;
-    }
-
-    mListenSock = sock;
-    sock = -1;
-    result = true;
-
-bail:
-    if (sock >= 0)
-        close(sock);
-    return result;
-}
-
-/*
- * Handle a client request.
- *
- * Returns true on success, false if the fd should be closed.
- */
-bool PropertyServer::HandleRequest(int fd)
-{
-    char reqBuf[PROPERTY_KEY_MAX + PROPERTY_VALUE_MAX];
-    char valueBuf[1 + PROPERTY_VALUE_MAX];
-    ssize_t actual;
-
-    memset(valueBuf, 'x', sizeof(valueBuf));        // placate valgrind
-
-    /* read the command byte; this determines the message length */
-    actual = read(fd, reqBuf, 1);
-    if (actual <= 0)
-        return false;
-
-    if (reqBuf[0] == kSystemPropertyGet) {
-        actual = read(fd, reqBuf, PROPERTY_KEY_MAX);
-
-        if (actual != PROPERTY_KEY_MAX) {
-            fprintf(stderr, "Bad read on get: %d of %d\n",
-                (int) actual, PROPERTY_KEY_MAX);
-            return false;
-        }
-        if (GetProperty(reqBuf, valueBuf+1))
-            valueBuf[0] = 1;
-        else
-            valueBuf[0] = 0;
-        //printf("GET property [%s]: (found=%d) [%s]\n",
-        //    reqBuf, valueBuf[0], valueBuf+1);
-        if (write(fd, valueBuf, sizeof(valueBuf)) != sizeof(valueBuf)) {
-            fprintf(stderr, "Bad write on get\n");
-            return false;
-        }
-    } else if (reqBuf[0] == kSystemPropertySet) {
-        actual = read(fd, reqBuf, PROPERTY_KEY_MAX + PROPERTY_VALUE_MAX);
-        if (actual != PROPERTY_KEY_MAX + PROPERTY_VALUE_MAX) {
-            fprintf(stderr, "Bad read on set: %d of %d\n",
-                (int) actual, PROPERTY_KEY_MAX + PROPERTY_VALUE_MAX);
-            return false;
-        }
-        //printf("SET property '%s'\n", reqBuf);
-        if (SetProperty(reqBuf, reqBuf + PROPERTY_KEY_MAX))
-            valueBuf[0] = 1;
-        else
-            valueBuf[0] = 0;
-        if (write(fd, valueBuf, 1) != 1) {
-            fprintf(stderr, "Bad write on set\n");
-            return false;
-        }
-    } else if (reqBuf[0] == kSystemPropertyList) {
-        /* TODO */
-        assert(false);
-    } else {
-        fprintf(stderr, "Unexpected request %d from prop client\n", reqBuf[0]);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Serve up properties.
- */
-void PropertyServer::ServeProperties(void)
-{
-    typedef List<int>::iterator IntIter;
-    fd_set readfds;
-    int maxfd;
-
-    while (true) {
-        int cc;
-
-        FD_ZERO(&readfds);
-        FD_SET(mListenSock, &readfds);
-        maxfd = mListenSock;
-
-        for (IntIter ii = mClientList.begin(); ii != mClientList.end(); ++ii) {
-            int fd = (*ii);
-
-            FD_SET(fd, &readfds);
-            if (maxfd < fd)
-                maxfd = fd;
-        }
-
-        cc = select(maxfd+1, &readfds, NULL, NULL, NULL);
-        if (cc < 0) {
-            if (errno == EINTR) {
-                printf("hiccup!\n");
-                continue;
-            }
-            return;
-        }
-        if (FD_ISSET(mListenSock, &readfds)) {
-            struct sockaddr_un from;
-            socklen_t fromlen;
-            int newSock;
-
-            fromlen = sizeof(from);
-            newSock = ::accept(mListenSock, (struct sockaddr*) &from, &fromlen);
-            if (newSock < 0) {
-                LOG(LOG_WARN, "sim",
-                    "AF_UNIX accept failed (errno=%d)\n", errno);
-            } else {
-                //printf("new props connection on %d --> %d\n",
-                //    mListenSock, newSock);
-
-                mClientList.push_back(newSock);
-            }
-        }
-
-        for (IntIter ii = mClientList.begin(); ii != mClientList.end(); ) {
-            int fd = (*ii);
-            bool ok = true;
-
-            if (FD_ISSET(fd, &readfds)) {
-                //printf("--- activity on %d\n", fd);
-
-                ok = HandleRequest(fd);
-            }
-
-            if (ok) {
-                ++ii;
-            } else {
-                //printf("--- closing %d\n", fd);
-                close(fd);
-                ii = mClientList.erase(ii);
-            }
-        }
-    }
-}
-
-/*
- * Thread entry point.
- *
- * This just sits and waits for a new connection.  It hands it off to the
- * main thread and then goes back to waiting.
- *
- * There is currently no "polite" way to shut this down.
- */
-void* PropertyServer::Entry(void)
-{
-    if (CreateSocket(SYSTEM_PROPERTY_PIPE_NAME)) {
-        assert(mListenSock >= 0);
-        SetDefaultProperties();
-
-        /* loop until it's time to exit or we fail */
-        ServeProperties();
-
-        ClearProperties();
-
-        /*
-         * Close listen socket and all clients.
-         */
-        LOG(LOG_INFO, "sim", "Cleaning up socket list\n");
-        typedef List<int>::iterator IntIter;
-        for (IntIter ii = mClientList.begin(); ii != mClientList.end(); ++ii)
-            close((*ii));
-        close(mListenSock);
-    }
-
-    LOG(LOG_INFO, "sim", "PropertyServer thread exiting\n");
-    return NULL;
-}
-
diff --git a/simulator/app/PropertyServer.h b/simulator/app/PropertyServer.h
deleted file mode 100644
index 193dd70..0000000
--- a/simulator/app/PropertyServer.h
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// Copyright 2007 The Android Open Source Project
-//
-// Serve properties to the simulated runtime.
-//
-#ifndef _SIM_PROPERTY_SERVER_H
-#define _SIM_PROPERTY_SERVER_H
-
-#include "cutils/properties.h"
-#include "utils/List.h"
-
-/*
- * Define a thread that responds to requests from clients to get/set/list
- * system properties.
- */
-class PropertyServer : public wxThread {
-public:
-    PropertyServer(void) : mListenSock(-1) {}
-    virtual ~PropertyServer(void);
-
-    /* start the thread running */
-    bool StartThread(void);
-
-    /* thread entry point */
-    virtual void* Entry(void);
-
-    /* clear out all properties */
-    void ClearProperties(void);
-
-    /* add some default values */
-    void SetDefaultProperties(void);
-
-    /* copy a property into valueBuf; returns false if property not found */
-    bool GetProperty(const char* key, char* valueBuf);
-
-    /* set the property, replacing it if it already exists */
-    bool SetProperty(const char* key, const char* value);
-
-    /* property name constants */
-    static const char* kPropCheckJni;
-
-private:
-    /* one property entry */
-    typedef struct Property {
-        char    key[PROPERTY_KEY_MAX];
-        char    value[PROPERTY_VALUE_MAX];
-    } Property;
-
-    /* create the UNIX-domain socket we listen on */
-    bool CreateSocket(const char* fileName);
-
-    /* serve up properties */
-    void ServeProperties(void);
-
-    /* handle a client request */
-    bool HandleRequest(int fd);
-
-    /* listen here for new connections */
-    int     mListenSock;
-
-    /* list of connected fds to scan */
-    android::List<int>      mClientList;
-
-    /* set of known properties */
-    android::List<Property> mPropList;
-};
-
-#endif // PROPERTY_SERVER_H
diff --git a/simulator/app/README b/simulator/app/README
deleted file mode 100644
index 5a51f63..0000000
--- a/simulator/app/README
+++ /dev/null
@@ -1,74 +0,0 @@
-Android Simulator README
-Last updated: 14-Nov-2007
-
-See "docs/sim-layout-xml.txt" for a description of the layout.xml files
-in the device directories.
-
-The coding conventions here are generally aligned with wxWidgets' style,
-which is similar to standard Windows style.  The only significant shift
-from Android style is that function names are capitalized.  Note the
-simulator code is not part of the "android" namespace.
-
-
-===== Arguments =====
-
-The config file for the simulator, ".android.cf", can live in your
-$HOME directory or in $cwd.  The copy in $cwd takes priority.  If a
-config file does not exist, one will be created in your home directory.
-(Note that the current directory is set by "runsim.sh", so if you launch
-the simulator from the script it will look for the config file in your
-"install" directory.)
-
-The simulator takes the following optional arguments:
-
- -f <file> : specify the configuration file to use.
-
- -p <platform> : specify platform information.  This is usually
-    something like "Linux-release" or "CYGWIN_NT-5.1-debug".
-
- -r : reset paths.  This causes the simulator to regenerate the paths
-    based on defaults.  This is useful when copying your .android.cf from
-    a different system, because it updates all the local paths without
-    disturbing the other options.
-
-
-===== Preferences Quick Reference =====
-
-Path preferences.  These are reset by the "-r" flag:
-
-"debugger"            (str) Path to the debugger (usually /usr/bin/gdb).
-"valgrinder"          (str) Path to valgrind (usually /usr/bin/valgrind).
-
-Common prefs:
-
-"auto-power-on"       (bool) Automatically start runtime on simulator start.
-"debug"               (bool) Launch the runtime inside <debugger>.
-"valgrind"            (bool) Launch the runtime inside <valgrinder>.
-"log-*"               (various) Preferences for the log window.
-"window-*"            (int) Positions and sizes of windows.
-"default-device"      (str) Name of the device that opens initially.
-"ld-assume-kernel"    (str) Hack to make goobuntu GDB work; use "" to disable.
-
-Less-common prefs:
-
-"gamma"               (float) Gamma correction factor (default 1.0).
-"window-device-x"     (int) Position of device window.
-"window-device-y"     (int) Position of device window.
-"trap-sigint"         (bool) Catch Ctrl-C.  Kill the runtime when we do.
-"refocus-on-restart"  (bool) When runtime rstarts, give focus to phone window.
-"launch-command"      (str) Command to run, e.g. "xterm -e" (cmd is appended).
-"launch-wrapper-args" (str) Args to launch wrapper, e.g. "-wait -output foo".
-
-
-(If you prefer gnome-terminal to xterm, you can use something like
-"gnome-terminal --disable-factory -x".  The "disable-factory" arg is
-needed to ensure that it inherits the environment variables.)
-
-
-***** NOTE *****
-
-If you're using a non-goobuntu system, make sure "ld-assume-kernel" is ""
-in your .android.cf.  gdb works correctly on Ubuntu 7.04 (fiesty) and 7.10
-(gutsy), and the goobuntu workaround will cause shared library version
-failures on startup.
-
diff --git a/simulator/app/Resource.h b/simulator/app/Resource.h
deleted file mode 100644
index 1602428..0000000
--- a/simulator/app/Resource.h
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Resource enumeration.
-//
-#ifndef _SIM_RESOURCE_H
-#define _SIM_RESOURCE_H
-
-/*
- * IDs for dialogs, controls, menu items, and whatever else comes along.
- *
- * Some standard defs are in "wx/defs.h".  They run from 5000 to 6000.
- */
-enum {
-    // common stuff
-    //ID_ANONYMOUS = -1,        // use wxID_ANY(-1) or wxID_STATIC(5105)
-
-
-    // Menu item IDs
-    IDM_FILE_PREFERENCES = 100,
-    IDM_FILE_EXIT,
-
-    IDM_RUNTIME_START,
-    IDM_RUNTIME_STOP,
-    IDM_RUNTIME_RESTART,
-    IDM_RUNTIME_KILL,
-
-    IDM_DEVICE,
-    IDM_DEVICE_SEL0,
-    // leave space; each phone model gets a menu item ID
-    IDM_DEVICE_SELN = IDM_DEVICE_SEL0 + 32,
-    IDM_DEVICE_RESCAN,
-
-    IDM_DEBUG_SHOW_LOG,
-
-    IDM_HELP_CONTENTS,
-    IDM_HELP_ABOUT,
-
-
-    // Dialog IDs
-    IDD_PREFS,
-    IDD_LOG_PREFS,
-
-    // Control IDs
-    IDC_MODE_SELECT,            // main - combobox
-    IDC_USE_GDB,                // main - checkbox
-    IDC_USE_VALGRIND,           // main - checkbox
-    IDC_CHECK_JNI,              // main - checkbox
-    IDC_JAVA_APP_NAME,          // main - combobox
-    IDC_JAVA_VM,                // main - combobox
-    IDC_OVERLAY_ONION_SKIN,		// main - combobox
-    IDC_ONION_SKIN_FILE_NAME,	// main - textctrl
-    IDC_ONION_SKIN_BUTTON,		// main - button
-    IDC_ONION_SKIN_ALPHA_VAL,	// main - slider
-	
-    IDC_SPREFS_CONFIG_NAME,     // sim prefs page - textctrl
-    IDC_SPREFS_DEBUGGER,        // sim prefs page - textctrl
-    IDC_SPREFS_VALGRINDER,      // sim prefs page - textctrl
-    IDC_SPREFS_AUTO_POWER_ON,   // sim prefs page - checkbox
-
-    IDC_RPREFS_GAMMA,           // runtime prefs page - textctrl
-    IDC_RPREFS_ENABLE_SOUND,    // runtime prefs page - checkbox
-    IDC_RPREFS_ENABLE_FAKE_CAMERA,// runtime prefs page - checkbox
-
-    IDC_LOG_TEXT,               // log window - textctrl
-    IDC_LOG_LEVEL,              // log window - combobox
-    IDC_LOG_CLEAR,              // log window - button
-    IDC_LOG_PAUSE,              // log window - button
-    IDC_LOG_PREFS,              // log window - button
-
-    IDC_LOG_PREFS_FMT_FULL,     // log prefs - radio button
-    IDC_LOG_PREFS_FMT_BRIEF,    // log prefs - radio button
-    IDC_LOG_PREFS_FMT_MINIMAL,  // log prefs - radio button
-    IDC_LOG_PREFS_SINGLE_LINE,  // log prefs - checkbox
-    IDC_LOG_PREFS_EXTRA_SPACING, // log prefs - combobox
-    IDC_LOG_PREFS_POINT_SIZE,   // log prefs - textctrl
-    IDC_LOG_PREFS_USE_COLOR,    // log prefs - checkbox
-    IDC_LOG_PREFS_FONT_MONO,    // log prefs - checkbox
-
-    IDC_LOG_PREFS_DISPLAY_MAX,  // log prefs - textctrl
-    IDC_LOG_PREFS_POOL_SIZE,    // log prefs - textctrl
-
-    IDC_LOG_PREFS_WRITE_FILE,   // log prefs - checkbox
-    IDC_LOG_PREFS_FILENAME,     // log prefs - textctrl
-    IDC_LOG_PREFS_TRUNCATE_OLD, // log prefs - textctrl
-};
-
-/*
- * Common definitions for control spacing.
- *
- * Doesn't really belong here, but it'll do.
- */
-enum {
-    kEdgeSpacing = 4,       // padding at edge of prefs pages, in pixels
-    kInterSpacing = 5,      // padding between controls, in pixels
-};
-
-#endif // _SIM_RESOURCE_H
diff --git a/simulator/app/Semaphore.cpp b/simulator/app/Semaphore.cpp
deleted file mode 100644
index 3b6ee7b..0000000
--- a/simulator/app/Semaphore.cpp
+++ /dev/null
@@ -1,516 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Inter-process semaphores.
-//
-#include "Semaphore.h"
-
-#if defined(HAVE_MACOSX_IPC)
-# include <semaphore.h>
-#elif defined(HAVE_SYSV_IPC)
-# include <sys/types.h>
-# include <sys/ipc.h>
-# include <sys/sem.h>
-#elif defined(HAVE_WIN32_IPC)
-# include <windows.h>
-#elif defined(HAVE_ANDROID_IPC)
-// not yet
-#else
-# error "unknown sem config"
-#endif
-
-#include <utils/Log.h>
-
-#include <errno.h>
-#include <assert.h>
-
-using namespace android;
-
-
-#if defined(HAVE_ANDROID_IPC) // ----------------------------------------------
-
-Semaphore::Semaphore(void)
-    : mHandle(0), mCreator(false), mKey(-1)
-{}
-
-Semaphore::~Semaphore(void)
-{}
-
-bool Semaphore::create(int key, int initialValue, bool deleteExisting)
-{
-    return false;
-}
-
-bool Semaphore::attach(int key)
-{
-    return false;
-}
-
-void Semaphore::acquire(void)
-{}
-
-void Semaphore::release(void)
-{}
-
-bool Semaphore::tryAcquire(void)
-{
-    return false;
-}
-
-#elif defined(HAVE_MACOSX_IPC) // ---------------------------------------------
-
-/*
- * The SysV semaphores don't work on all of our machines.  The POSIX
- * named semaphores seem to work better.
- */
-
-#define kInvalidHandle SEM_FAILED
-
-static const char* kSemStr = "/tmp/android-sem-";
-
-/*
- * Constructor.  Just init fields.
- */
-Semaphore::Semaphore(void)
-    : mHandle((unsigned long) kInvalidHandle), mCreator(false), mKey(-1)
-{
-}
-
-/*
- * Destructor.  If we created the semaphore, destroy it.
- */
-Semaphore::~Semaphore(void)
-{
-    LOG(LOG_VERBOSE, "sem", "~Semaphore(handle=%ld creator=%d)\n",
-        mHandle, mCreator);
-
-    if (mHandle != (unsigned long) kInvalidHandle) {
-        sem_close((sem_t*) mHandle);
-
-        if (mCreator) {
-            char nameBuf[64];
-            int cc;
-
-            snprintf(nameBuf, sizeof(nameBuf), "%s%d", kSemStr, mKey);
-
-            cc = sem_unlink(nameBuf);
-            if (cc != 0) {
-                LOG(LOG_ERROR, "sem",
-                    "Failed to remove sem '%s' (errno=%d)\n", nameBuf, errno);
-            }
-        }
-    }
-}
-
-/*
- * Create the semaphore.
- */
-bool Semaphore::create(int key, int initialValue, bool deleteExisting)
-{
-    int cc;
-    char nameBuf[64];
-
-    snprintf(nameBuf, sizeof(nameBuf), "%s%d", kSemStr, key);
-
-    if (deleteExisting) {
-        cc = sem_unlink(nameBuf);
-        if (cc != 0 && errno != ENOENT) {
-            LOG(LOG_WARN, "sem", "Warning: failed to remove sem '%s'\n",
-                nameBuf);
-            /* keep going? */
-        }
-    }
-
-    /* create and set initial value */
-    sem_t* semPtr;
-    semPtr = sem_open(nameBuf, O_CREAT | O_EXCL, 0666, 1);
-    if (semPtr == (sem_t*)SEM_FAILED) {
-        LOG(LOG_ERROR, "sem",
-            "ERROR: sem_open failed to create '%s' (errno=%d)\n",
-            nameBuf, errno);
-        return false;
-    }
-
-    mHandle = (unsigned long) semPtr;
-    mCreator = true;
-    mKey = key;
-
-    return true;
-}
-
-/*
- * Attach to an existing semaphore.
- */
-bool Semaphore::attach(int key)
-{
-    char nameBuf[64];
-
-    snprintf(nameBuf, sizeof(nameBuf), "%s%d", kSemStr, key);
-
-    sem_t* semPtr;
-    semPtr = sem_open(nameBuf, 0, 0666, 0);
-    if (semPtr == (sem_t*) SEM_FAILED) {
-        LOG(LOG_ERROR, "sem",
-            "ERROR: sem_open failed to attach to '%s' (errno=%d)\n",
-            nameBuf, errno);
-        return false;
-    }
-
-    mHandle = (unsigned long) semPtr;
-    assert(mCreator == false);
-    mKey = key;
-
-    return true;
-}
-
-/*
- * Acquire or release the semaphore.
- */
-void Semaphore::acquire(void)
-{
-    int cc = sem_wait((sem_t*) mHandle);
-    if (cc != 0)
-        LOG(LOG_WARN, "sem", "acquire failed (errno=%d)\n", errno);
-}
-void Semaphore::release(void)
-{
-    int cc = sem_post((sem_t*) mHandle);
-    if (cc != 0)
-        LOG(LOG_WARN, "sem", "release failed (errno=%d)\n", errno);
-}
-bool Semaphore::tryAcquire(void)
-{
-    int cc = sem_trywait((sem_t*) mHandle);
-    if (cc != 0) {
-        if (errno != EAGAIN)
-            LOG(LOG_WARN, "sem", "tryAcquire failed (errno=%d)\n", errno);
-        return false;
-    }
-    return true;
-}
-
-
-#elif defined(HAVE_SYSV_IPC) // -----------------------------------------------
-
-/*
- * Basic SysV semaphore stuff.
- */
-
-#define kInvalidHandle  ((unsigned long)-1)
-
-#if defined(_SEM_SEMUN_UNDEFINED)
-/* according to X/OPEN we have to define it ourselves */
-union semun {
-    int val;                  /* value for SETVAL */
-    struct semid_ds *buf;     /* buffer for IPC_STAT, IPC_SET */
-    unsigned short *array;    /* array for GETALL, SETALL */
-                              /* Linux specific part: */
-    struct seminfo *__buf;    /* buffer for IPC_INFO */
-};
-#endif
-
-/*
- * Constructor.  Just init fields.
- */
-Semaphore::Semaphore(void)
-    : mHandle(kInvalidHandle), mCreator(false)
-{
-}
-
-/*
- * Destructor.  If we created the semaphore, destroy it.
- */
-Semaphore::~Semaphore(void)
-{
-    LOG(LOG_VERBOSE, "sem", "~Semaphore(handle=%ld creator=%d)\n",
-        mHandle, mCreator);
-
-    if (mCreator && mHandle != kInvalidHandle) {
-        int cc;
-
-        cc = semctl((int) mHandle, 0, IPC_RMID);
-        if (cc != 0) {
-            LOG(LOG_WARN, "sem",
-                "Destructor failed to destroy key=%ld\n", mHandle);
-        }
-    }
-}
-
-/*
- * Create the semaphore.
- */
-bool Semaphore::create(int key, int initialValue, bool deleteExisting)
-{
-    int semid, cc;
-
-    if (deleteExisting) {
-        semid = semget(key, 1, 0);
-        if (semid != -1) {
-            LOG(LOG_DEBUG, "sem", "Key %d exists (semid=%d), removing\n",
-                key, semid);
-            cc = semctl(semid, 0, IPC_RMID);
-            if (cc != 0) {
-                LOG(LOG_ERROR, "sem", "Failed to remove key=%d semid=%d\n",
-                    key, semid);
-                return false;
-            } else {
-                LOG(LOG_DEBUG, "sem",
-                    "Removed previous semaphore with key=%d\n", key);
-            }
-        }
-    }
-
-    semid = semget(key, 1, 0600 | IPC_CREAT | IPC_EXCL);
-    if (semid == -1) {
-        LOG(LOG_ERROR, "sem", "Failed to create key=%d (errno=%d)\n",
-            key, errno);
-        return false;
-    }
-
-    mHandle = semid;
-    mCreator = true;
-    mKey = key;
-
-    /*
-     * Set initial value.
-     */
-    union semun init;
-    init.val = initialValue;
-    cc = semctl(semid, 0, SETVAL, init);
-    if (cc == -1) {
-        LOG(LOG_ERROR, "sem",
-            "Unable to initialize semaphore, key=%d iv=%d (errno=%d)\n",
-            key, initialValue, errno);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Attach to an existing semaphore.
- */
-bool Semaphore::attach(int key)
-{
-    int semid;
-
-    semid = semget(key, 0, 0);
-    if (semid == -1) {
-        LOG(LOG_ERROR, "sem", "Failed to find key=%d\n", key);
-        return false;
-    }
-
-    mHandle = semid;
-    assert(mCreator == false);
-    mKey = key;
-
-    return true;
-}
-
-/*
- * Acquire or release the semaphore.
- */
-void Semaphore::acquire(void)
-{
-    assert(mHandle != kInvalidHandle);
-    adjust(-1, true);
-}
-void Semaphore::release(void)
-{
-    assert(mHandle != kInvalidHandle);
-    adjust(1, true);
-}
-bool Semaphore::tryAcquire(void)
-{
-    assert(mHandle != kInvalidHandle);
-    return adjust(-1, false);
-}
-
-/*
- * Do the actual semaphore manipulation.
- *
- * The semaphore's value indicates the number of free resources.  Pass
- * in a negative value for "adj" to acquire resources, or a positive
- * value to free resources.
- *
- * Returns true on success, false on failure.
- */
-bool Semaphore::adjust(int adj, bool wait)
-{
-    struct sembuf op;
-    int cc;
-
-    op.sem_num = 0;
-    op.sem_op = adj;
-    op.sem_flg = SEM_UNDO;
-    if (!wait)
-        op.sem_flg |= IPC_NOWAIT;
-
-    cc = semop((int) mHandle, &op, 1);
-    if (cc != 0) {
-        if (wait || errno != EAGAIN) {
-            LOG(LOG_WARN, "sem",
-                "semaphore adjust by %d failed for semid=%ld (errno=%d)\n",
-                adj, mHandle, errno);
-        }
-        return false;
-    }
-
-    //LOG(LOG_VERBOSE, "sem",
-    //    "adjusted semaphore by %d (semid=%ld)\n", adj, mHandle);
-
-    return true;
-}
-
-
-#elif defined(HAVE_WIN32_IPC) // ----------------------------------------------
-
-/*
- * Win32 semaphore implementation.
- *
- * Pretty straightforward.
- */
-
-static const char* kSemStr = "android-sem-";
-
-/*
- * Constructor.  Just init fields.
- */
-Semaphore::Semaphore(void)
-    : mHandle((unsigned long) INVALID_HANDLE_VALUE), mCreator(false)
-{
-}
-
-/*
- * Destructor.  Just close the semaphore handle.
- */
-Semaphore::~Semaphore(void)
-{
-    LOG(LOG_DEBUG, "sem", "~Semaphore(handle=%ld creator=%d)\n",
-        mHandle, mCreator);
-
-    if (mHandle != (unsigned long) INVALID_HANDLE_VALUE)
-        CloseHandle((HANDLE) mHandle);
-}
-
-/*
- * Create the semaphore.
- */
-bool Semaphore::create(int key, int initialValue, bool deleteExisting)
-{
-    char keyBuf[64];
-    HANDLE hSem;
-    long max;
-
-    snprintf(keyBuf, sizeof(keyBuf), "%s%d", kSemStr, key);
-
-    if (initialValue == 0)
-        max = 1;
-    else
-        max = initialValue;
-
-    hSem = CreateSemaphore(
-            NULL,                       // security attributes
-            initialValue,               // initial count
-            max,                        // max count, must be >= initial
-            keyBuf);                    // object name
-    if (hSem == NULL) {
-        DWORD err = GetLastError();
-        if (err == ERROR_ALREADY_EXISTS) {
-            LOG(LOG_ERROR, "sem", "Semaphore '%s' already exists\n", keyBuf);
-        } else {
-            LOG(LOG_ERROR, "sem", "CreateSemaphore(%s) failed (err=%ld)\n",
-                keyBuf, err);
-        }
-        return false;
-    }
-
-    mHandle = (unsigned long) hSem;
-    mCreator = true;
-    mKey = key;
-
-    //LOG(LOG_DEBUG, "sem", "Semaphore '%s' created (handle=0x%08lx)\n",
-    //    keyBuf, mHandle);
-
-    return true;
-}
-
-/*
- * Attach to an existing semaphore.
- */
-bool Semaphore::attach(int key)
-{
-    char keyBuf[64];
-    HANDLE hSem;
-
-    snprintf(keyBuf, sizeof(keyBuf), "%s%d", kSemStr, key);
-
-    hSem = OpenSemaphore(
-            //SEMAPHORE_MODIFY_STATE,   // mostly-full access
-            SEMAPHORE_ALL_ACCESS,       // full access
-            FALSE,                      // don't let kids inherit handle
-            keyBuf);                    // object name
-    if (hSem == NULL) {
-        LOG(LOG_ERROR, "sem", "OpenSemaphore(%s) failed (err=%ld)\n",
-            keyBuf, GetLastError());
-        return false;
-    }
-
-    mHandle = (unsigned long) hSem;
-    assert(mCreator == false);
-    mKey = key;
-
-    return true;
-}
-
-/*
- * Acquire or release the semaphore.
- */
-void Semaphore::acquire(void)
-{
-    DWORD result;
-
-    assert(mHandle != (unsigned long) INVALID_HANDLE_VALUE);
-
-    result = WaitForSingleObject((HANDLE) mHandle, INFINITE);
-    if (result != WAIT_OBJECT_0) {
-        LOG(LOG_WARN, "sem",
-            "WaitForSingleObject(INF) on semaphore returned %ld (err=%ld)\n",
-            result, GetLastError());
-    }
-}
-void Semaphore::release(void)
-{
-    DWORD result;
-
-    assert(mHandle != (unsigned long) INVALID_HANDLE_VALUE);
-
-    result = ReleaseSemaphore((HANDLE) mHandle, 1, NULL);    // incr by 1
-    if (result == 0) {
-        LOG(LOG_WARN, "sem", "ReleaseSemaphore failed (err=%ld)\n",
-            GetLastError());
-    }
-}
-bool Semaphore::tryAcquire(void)
-{
-    DWORD result;
-
-    assert(mHandle != (unsigned long) INVALID_HANDLE_VALUE);
-    result = WaitForSingleObject((HANDLE) mHandle, 0);
-    if (result == WAIT_OBJECT_0)
-        return true;        // grabbed it
-    else if (result == WAIT_TIMEOUT)
-        return false;       // not available
-    else if (result == WAIT_FAILED) {
-        LOG(LOG_WARN, "sem", "WaitForSingleObject(0) on sem failed (err=%ld)\n",
-            GetLastError());
-        return false;
-    } else {
-        LOG(LOG_WARN, "sem",
-            "WaitForSingleObject(0) on sem returned %ld (err=%ld)\n",
-            result, GetLastError());
-        return false;
-    }
-}
-
-#endif // ---------------------------------------------------------------------
diff --git a/simulator/app/Semaphore.h b/simulator/app/Semaphore.h
deleted file mode 100644
index 3b834f3..0000000
--- a/simulator/app/Semaphore.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Inter-process semaphore.
-//
-// These are meant for IPC, not thread management.  The Mutex and Condition
-// classes are much lighter weight.
-//
-#ifndef __LIBS_SEMAPHORE_H
-#define __LIBS_SEMAPHORE_H
-
-#ifdef HAVE_ANDROID_OS
-#error DO NOT USE THIS FILE IN THE DEVICE BUILD
-#endif
-
-namespace android {
-
-/*
- * Platform-independent semaphore class.
- *
- * Each object holds a single semaphore.
- *
- * The "key" is usually the process ID of the process that created the
- * semaphore (following POSIX semantics).  See the comments in shmem.h.
- */
-class Semaphore {
-public:
-    Semaphore(void);
-    virtual ~Semaphore(void);
-
-    /*
-     * Create a new semaphore, with the specified initial value.  The
-     * value indicates the number of resources available.
-     */
-    bool create(int key, int initialValue, bool deleteExisting);
-
-    /*
-     * Attach to an existing semaphore.
-     */
-    bool attach(int key);
-
-    /*
-     * Acquire or release the semaphore.
-     */
-    void acquire(void);
-    void release(void);
-    bool tryAcquire(void);      // take a timeout?
-
-private:
-    bool adjust(int adj, bool wait);
-
-    unsigned long   mHandle;    // semid(int) or HANDLE
-    bool            mCreator;
-    int             mKey;
-};
-
-}; // namespace android
-
-#endif // __LIBS_SEMAPHORE_H
diff --git a/simulator/app/Shmem.cpp b/simulator/app/Shmem.cpp
deleted file mode 100644
index 4c619c2..0000000
--- a/simulator/app/Shmem.cpp
+++ /dev/null
@@ -1,558 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Shared memory interface.
-//
-#include "Shmem.h"
-#include "utils/Log.h"
-
-#if defined(HAVE_MACOSX_IPC) || defined(HAVE_ANDROID_IPC)
-#  include <sys/mman.h>
-#  include <fcntl.h>
-#  include <unistd.h>
-#elif defined(HAVE_SYSV_IPC)
-# include <sys/types.h>
-# include <sys/ipc.h>
-# include <sys/shm.h>
-#elif defined(HAVE_WIN32_IPC)
-# include <windows.h>
-#else
-# error "unknown shm config"
-#endif
-
-#include <errno.h>
-#include <assert.h>
-
-using namespace android;
-
-
-#if defined(HAVE_MACOSX_IPC) || defined(HAVE_ANDROID_IPC)
-
-/*
- * SysV IPC under Mac OS X seems to have problems.  It works fine on
- * some machines but totally fails on others.  We're working around it
- * here by using mmap().
- */
-
-#define kInvalidHandle  ((unsigned long)-1)
-
-static const char* kShmemFile = "/tmp/android-";
-
-/*
- * Constructor.  Just set up the fields.
- */
-Shmem::Shmem(void)
-    : mHandle(kInvalidHandle), mAddr(MAP_FAILED), mLength(-1), mCreator(false),
-      mKey(-1)
-{
-}
-
-/*
- * Destructor.  Detach and, if we created it, mark the segment for
- * destruction.
- */
-Shmem::~Shmem(void)
-{
-    if (mAddr != MAP_FAILED)
-        munmap(mAddr, mLength);
-    if ((long)mHandle >= 0) {
-        close(mHandle);
-
-        if (mCreator) {
-            char nameBuf[64];
-            int cc;
-
-            snprintf(nameBuf, sizeof(nameBuf), "%s%d", kShmemFile, mKey);
-            cc = unlink(nameBuf);
-            if (cc != 0) {
-                LOG(LOG_WARN, "shmem", "Couldn't clean up '%s'\n", nameBuf);
-                /* oh well */
-            }
-        }
-    }
-}
-
-/*
- * Create the segment and attach ourselves to it.
- */
-bool Shmem::create(int key, long size, bool deleteExisting)
-{
-    char nameBuf[64];
-    int fd, cc;
-
-    snprintf(nameBuf, sizeof(nameBuf), "%s%d", kShmemFile, key);
-
-    if (deleteExisting) {
-        cc = unlink(nameBuf);
-        if (cc != 0 && errno != ENOENT) {
-            LOG(LOG_ERROR, "shmem", "Failed to remove old map file '%s'\n",
-                nameBuf);
-            return false;
-        }
-    }
-
-    fd = open(nameBuf, O_CREAT|O_EXCL|O_RDWR, 0600);
-    if (fd < 0) {
-        LOG(LOG_ERROR, "shmem", "Unable to create map file '%s' (errno=%d)\n",
-            nameBuf, errno);
-        return false;
-    }
-
-    /*
-     * Set the file size by seeking and writing.
-     */
-    if (ftruncate(fd, size) == -1) {
-        LOG(LOG_ERROR, "shmem", "Unable to set file size in '%s' (errno=%d)\n",
-            nameBuf, errno);
-        close(fd);
-        return false;
-    }
-
-    mAddr = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
-    if (mAddr == MAP_FAILED) {
-        LOG(LOG_ERROR, "shmem", "mmap failed (errno=%d)\n", errno);
-        close(fd);
-        return false;
-    }
-
-    mHandle = fd;
-    mLength = size;
-    mCreator = true;
-    mKey = key;
-
-    /* done with shmem, create the associated semaphore */
-    if (!mSem.create(key, 1, true)) {
-        LOG(LOG_ERROR, "shmem",
-            "Failed creating semaphore for Shmem (key=%d)\n", key);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Attach ourselves to an existing segment.
- */
-bool Shmem::attach(int key)
-{
-    char nameBuf[64];
-    int fd;
-
-    snprintf(nameBuf, sizeof(nameBuf), "%s%d", kShmemFile, key);
-    fd = open(nameBuf, O_RDWR, 0600);
-    if (fd < 0) {
-        LOG(LOG_ERROR, "shmem", "Unable to open map file '%s' (errno=%d)\n",
-            nameBuf, errno);
-        return false;
-    }
-
-    off_t len;
-    len = lseek(fd, 0, SEEK_END);
-    if (len == (off_t) -1) {
-        LOG(LOG_ERROR, "shmem",
-            "Could not determine file size of '%s' (errno=%d)\n",
-            nameBuf, errno);
-        close(fd);
-        return false;
-    }
-
-    mAddr = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
-    if (mAddr == MAP_FAILED) {
-        LOG(LOG_ERROR, "shmem", "mmap failed (errno=%d)\n", errno);
-        close(fd);
-        return false;
-    }
-
-    mHandle = fd;
-    mLength = len;
-    assert(mCreator == false);
-    mKey = key;
-
-    /* done with shmem, attach to associated semaphore */
-    if (!mSem.attach(key)) {
-        LOG(LOG_ERROR, "shmem",
-            "Failed to attach to semaphore for Shmem (key=%d)\n", key);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Get address.
- */
-void* Shmem::getAddr(void)
-{
-    assert(mAddr != MAP_FAILED);
-    return mAddr;
-}
-
-/*
- * Return the length of the segment.
- *
- * Returns -1 on failure.
- */
-long Shmem::getLength(void)
-{
-    if (mLength >= 0)
-        return mLength;
-
-    // we should always have it by now
-    assert(false);
-    return -1;
-}
-
-
-#elif defined(HAVE_SYSV_IPC) // ----------------------------------------------
-
-/*
- * SysV-style IPC.  The SysV shared memory API is fairly annoying to
- * deal with, but it's present on many UNIX-like systems.
- */
-
-#define kInvalidHandle  ((unsigned long)-1)
-
-/*
- * Constructor.  Just set up the fields.
- */
-Shmem::Shmem(void)
-    : mHandle(kInvalidHandle), mAddr(NULL), mLength(-1), mCreator(false),
-      mKey(-1)
-{
-}
-
-/*
- * Destructor.  Detach and, if we created it, mark the segment for
- * destruction.
- */
-Shmem::~Shmem(void)
-{
-    int cc;
-
-    //LOG(LOG_DEBUG, "shmem", "~Shmem(handle=%ld creator=%d)",
-    //    mHandle, mCreator);
-
-    if (mAddr != NULL)
-        cc = shmdt(mAddr);
-
-    if (mCreator && mHandle != kInvalidHandle) {
-        cc = shmctl((int) mHandle, IPC_RMID, NULL);
-        if (cc != 0) {
-            LOG(LOG_WARN, "shmem",
-                "Destructor failed to remove shmid=%ld (errno=%d)\n",
-                mHandle, errno);
-        }
-    }
-}
-
-/*
- * Create the segment and attach ourselves to it.
- */
-bool Shmem::create(int key, long size, bool deleteExisting)
-{
-    int shmid, cc;
-
-    if (deleteExisting) {
-        shmid = shmget(key, size, 0);
-        if (shmid != -1) {
-            LOG(LOG_DEBUG, "shmem",
-                "Key %d exists (shmid=%d), marking for destroy", key, shmid);
-            cc = shmctl(shmid, IPC_RMID, NULL);
-            if (cc != 0) {
-                LOG(LOG_ERROR, "shmem",
-                    "Failed to remove key=%d shmid=%d (errno=%d)\n",
-                    key, shmid, errno);
-                return false;   // IPC_CREAT | IPC_EXCL will fail, so bail now
-            } else {
-                LOG(LOG_DEBUG, "shmem",
-                    "Removed previous segment with key=%d\n", key);
-            }
-        }
-    }
-
-    shmid = shmget(key, size, 0600 | IPC_CREAT | IPC_EXCL);
-    if (shmid == -1) {
-        LOG(LOG_ERROR, "shmem", "Failed to create key=%d (errno=%d)\n",
-            key, errno);
-        return false;
-    }
-
-    mHandle = shmid;
-    mCreator = true;
-    mKey = key;
-
-    void* addr = shmat(shmid, NULL, 0);
-    if (addr == (void*) -1) {
-        LOG(LOG_ERROR, "shmem",
-            "Could not attach to key=%d shmid=%d (errno=%d)\n",
-            key, shmid, errno);
-        return false;
-    }
-
-    mAddr = addr;
-    mLength = size;
-
-    /* done with shmem, create the associated semaphore */
-    if (!mSem.create(key, 1, true)) {
-        LOG(LOG_ERROR, "shmem",
-            "Failed creating semaphore for Shmem (key=%d)\n", key);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Attach ourselves to an existing segment.
- */
-bool Shmem::attach(int key)
-{
-    int shmid;
-
-    shmid = shmget(key, 0, 0);
-    if (shmid == -1) {
-        LOG(LOG_ERROR, "shmem", "Failed to find key=%d\n", key);
-        return false;
-    }
-
-    mHandle = shmid;
-    assert(mCreator == false);
-    mKey = key;
-
-    void* addr = shmat(shmid, NULL, 0);
-    if (addr == (void*) -1) {
-        LOG(LOG_ERROR, "shmem", "Could not attach to key=%d shmid=%d\n",
-            key, shmid);
-        return false;
-    }
-
-    mAddr = addr;
-
-    /* done with shmem, attach to associated semaphore */
-    if (!mSem.attach(key)) {
-        LOG(LOG_ERROR, "shmem",
-            "Failed to attach to semaphore for Shmem (key=%d)\n", key);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Get address.
- */
-void* Shmem::getAddr(void)
-{
-    assert(mAddr != NULL);
-    return mAddr;
-}
-
-/*
- * Return the length of the segment.
- *
- * Returns -1 on failure.
- */
-long Shmem::getLength(void)
-{
-    if (mLength >= 0)
-        return mLength;
-
-    assert(mHandle != kInvalidHandle);
-
-    struct shmid_ds shmids;
-    int cc;
-
-    cc = shmctl((int) mHandle, IPC_STAT, &shmids);
-    if (cc != 0) {
-        LOG(LOG_ERROR, "shmem", "Could not IPC_STAT shmid=%ld\n", mHandle);
-        return -1;
-    }
-    mLength = shmids.shm_segsz;     // save a copy to avoid future lookups
-
-    return mLength;
-}
-
-
-#elif defined(HAVE_WIN32_IPC) // ---------------------------------------------
-
-/*
- * Win32 shared memory implementation.
- *
- * Shared memory is implemented as an "anonymous" file mapping, using the
- * memory-mapped I/O interfaces.
- */
-
-static const char* kShmemStr = "android-shmem-";
-
-/*
- * Constructor.  Just set up the fields.
- */
-Shmem::Shmem(void)
-    : mHandle((unsigned long) INVALID_HANDLE_VALUE),
-      mAddr(NULL), mLength(-1), mCreator(false), mKey(-1)
-{
-}
-
-/*
- * Destructor.  The Win32 API doesn't require a distinction between
- * the "creator" and other mappers.
- */
-Shmem::~Shmem(void)
-{
-    LOG(LOG_DEBUG, "shmem", "~Shmem(handle=%ld creator=%d)",
-        mHandle, mCreator);
-
-    if (mAddr != NULL)
-        UnmapViewOfFile(mAddr);
-    if (mHandle != (unsigned long) INVALID_HANDLE_VALUE)
-        CloseHandle((HANDLE) mHandle);
-}
-
-/*
- * Create the segment and map it.
- */
-bool Shmem::create(int key, long size, bool deleteExisting)
-{
-    char keyBuf[64];
-    HANDLE hMapFile;
-
-    snprintf(keyBuf, sizeof(keyBuf), "%s%d", kShmemStr, key);
-
-    hMapFile = CreateFileMapping(
-                INVALID_HANDLE_VALUE,       // use paging file, not actual file
-                NULL,                       // default security
-                PAGE_READWRITE,             // read/write access
-                0,                          // max size; no need to cap
-                size,                       // min size
-                keyBuf);                    // mapping name
-    if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE) {
-        LOG(LOG_ERROR, "shmem",
-            "Could not create mapping object '%s' (err=%ld)\n",
-            keyBuf, GetLastError());
-        return false;
-    }
-
-    mHandle = (unsigned long) hMapFile;
-    mCreator = true;
-    mKey = key;
-
-    mAddr = MapViewOfFile(
-                hMapFile,                   // handle to map object
-                FILE_MAP_ALL_ACCESS,        // read/write
-                0,                          // offset (hi)
-                0,                          // offset (lo)
-                size);                      // #of bytes to map
-    if (mAddr == NULL) {
-        LOG(LOG_ERROR, "shmem", "Could not map shared area (err=%ld)\n",
-            GetLastError());
-        return false;
-    }
-    mLength = size;
-
-    /* done with shmem, create the associated semaphore */
-    if (!mSem.create(key, 1, true)) {
-        LOG(LOG_ERROR, "shmem",
-            "Failed creating semaphore for Shmem (key=%d)\n", key);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Attach ourselves to an existing segment.
- */
-bool Shmem::attach(int key)
-{
-    char keyBuf[64];
-    HANDLE hMapFile;
-
-    snprintf(keyBuf, sizeof(keyBuf), "%s%d", kShmemStr, key);
-
-    hMapFile = OpenFileMapping(
-                FILE_MAP_ALL_ACCESS,        // read/write
-                FALSE,                      // don't let kids inherit handle
-                keyBuf);                    // mapping name
-    if (hMapFile == NULL) {
-        LOG(LOG_ERROR, "shmem",
-            "Could not open mapping object '%s' (err=%ld)\n",
-            keyBuf, GetLastError());
-        return false;
-    }
-
-    mHandle = (unsigned long) hMapFile;
-    assert(mCreator == false);
-    mKey = key;
-
-    mAddr = MapViewOfFile(
-                hMapFile,                   // handle to map object
-                FILE_MAP_ALL_ACCESS,        // read/write
-                0,                          // offset (hi)
-                0,                          // offset (lo)
-                0);                        // #of bytes to map
-    if (mAddr == NULL) {
-        LOG(LOG_ERROR, "shmem", "Could not map shared area (err=%ld)\n",
-            GetLastError());
-        return false;
-    }
-
-    /* done with shmem, attach to associated semaphore */
-    if (!mSem.attach(key)) {
-        LOG(LOG_ERROR, "shmem",
-            "Failed to attach to semaphore for Shmem (key=%d)\n", key);
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Get address.
- */
-void* Shmem::getAddr(void)
-{
-    assert(mAddr != NULL);
-    return mAddr;
-}
-
-/*
- * Get the length of the segment.
- */
-long Shmem::getLength(void)
-{
-    SIZE_T size;
-    MEMORY_BASIC_INFORMATION mbInfo;
-
-    if (mLength >= 0)
-        return mLength;
-
-    assert(mAddr != NULL);
-
-    size = VirtualQuery(mAddr, &mbInfo, sizeof(mbInfo));
-    if (size == 0) {
-        LOG(LOG_WARN, "shmem", "VirtualQuery returned no data\n");
-        return -1;
-    }
-
-    mLength = mbInfo.RegionSize;
-    return mLength;
-}
-
-#endif // --------------------------------------------------------------------
-
-/*
- * Semaphore operations.
- */
-void Shmem::lock(void)
-{
-    mSem.acquire();
-}
-void Shmem::unlock(void)
-{
-    mSem.release();
-}
-bool Shmem::tryLock(void)
-{
-    return mSem.tryAcquire();
-}
-
diff --git a/simulator/app/Shmem.h b/simulator/app/Shmem.h
deleted file mode 100644
index 3d53b58..0000000
--- a/simulator/app/Shmem.h
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Inter-process shared memory.
-//
-#ifndef __LIBS_SHMEM_H
-#define __LIBS_SHMEM_H
-
-#ifdef HAVE_ANDROID_OS
-#error DO NOT USE THIS FILE IN THE DEVICE BUILD
-#endif
-
-#include "Semaphore.h"
-
-namespace android {
-
-/*
- * Platform-independent shared memory.  Each object can be used to
- * create a chunk of memory that is shared between processes.
- *
- * For convenience, a semaphore is associated with each segment.
- * (Whether this should have been done in a subclass is debatable.)
- *
- * The "key" is usually the process ID of the process that created the
- * segment.  The goal is to avoid clashing with other processes that are
- * trying to do the same thing.  It's a little awkward to use when you
- * want to have multiple shared segments created in one process.  In
- * SysV you can work around this by using a "private" key and sharing
- * the shmid with your friends, in Win32 you can use a string, but we're
- * in lowest-common-denominator mode here.  Assuming we have 16-bit PIDs,
- * the upper 16 bits can be used to serialize keys.
- *
- * When the object goes out of scope, the shared memory segment is
- * detached from the process.  If the object was responsible for creating
- * the segment, it is also marked for destruction on SysV systems.  This
- * will make it impossible for others to attach to.
- *
- * On some systems, the length returned by getLength() may be different
- * for parent and child due to page size rounding.
- */
-class Shmem {
-public:
-    Shmem(void);
-    virtual ~Shmem(void);
-
-    /*
-     * Create a new shared memory segment, with the specified size.  If
-     * "deleteExisting" is set, any existing segment will be deleted first
-     * (useful for SysV IPC).
-     *
-     * Returns "true" on success, "false" on failure.
-     */
-    bool create(int key, long size, bool deleteExisting);
-
-    /*
-     * Attach to a shared memory segment.  Use this from the process that
-     * didn't create the segment.
-     *
-     * Returns "true" on success, "false" on failure.
-     */
-    bool attach(int key);
-
-    /*
-     * Get the memory segment address and length.  These will not change
-     * for the lifetime of the object, so it's okay to cache the results.
-     *
-     * On failure, getAddr() returns NULL and getLength() returns -1.
-     */
-    void* getAddr(void);
-    long getLength(void);
-
-    /*
-     * Lock or unlock the shared memory segment.  This is useful if you
-     * are updating pieces of shared data.  The segment is initially
-     * "unlocked".
-     *
-     * This does *not* lock down the segment in the virtual paging system.
-     * It's just a mutex.
-     */
-    void lock(void);
-    void unlock(void);
-    bool tryLock(void);
-
-private:
-    Semaphore       mSem;       // uses the same value for "key"
-    unsigned long   mHandle;    // shmid(int) or HANDLE
-    void*           mAddr;      // address
-    long            mLength;    // length of segment (cached)
-    bool            mCreator;   // true if we created the segment
-    int             mKey;       // key passed in as arg
-};
-
-}; // namespace android
-
-#endif // __LIBS_SHMEM_H
diff --git a/simulator/app/SimRuntime.h b/simulator/app/SimRuntime.h
deleted file mode 100644
index 6dadfb2..0000000
--- a/simulator/app/SimRuntime.h
+++ /dev/null
@@ -1,124 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Miscellaneous definitions and declarations used for interaction
-// between the device and the simulator.
-//
-// This header is included on both sides, so try not to include
-// any other headers from here.
-//
-#ifndef _RUNTIME_SIMULATOR_H
-#define _RUNTIME_SIMULATOR_H
-
-#include "MessageStream.h"
-#include "Shmem.h"
-//#include "utils/RefBase.h"
-#include "utils/Log.h"
-
-namespace android {
-
-#define ANDROID_PIPE_NAME "runtime"
-
-/*
- * Hold simulator state.
- */
-class Simulator {
-public:
-    Simulator(void);
-    ~Simulator(void);
-
-    /*
-     * Commands exchanged between simulator and runtime.
-     */
-    typedef enum Command {
-        kCommandUnknown = 0,
-
-        /* sent from sim to runtime */
-        kCommandGoAway,             // sim says: go away, I'm busy
-        kCommandConfigDone,         // sim says: done sending config
-        kCommandQuit,               // quit nicely
-        kCommandNewPGroup,          // process group management
-        kCommandKeyDown,            // key has been pressed
-        kCommandKeyUp,              // key has been released
-        kCommandTouch,              // finger touched/lifted/dragged
-
-        /* sent from runtime to sim */
-        kCommandNewPGroupCreated,    // send process group as argument
-        kCommandRuntimeReady,       // we're initialized and about to start
-        kCommandUpdateDisplay,      // display has been updated
-        kCommandVibrate,            // vibrate on or off
-    } Command;
-
-    typedef enum TouchMode {
-        kTouchDown = 0,
-        kTouchUp = 1,
-        kTouchDrag = 2
-    } TouchMode;
-
-    /*
-     * Some parameters for config exchange.
-     */
-    enum {
-        kDisplayConfigMagic = 0x44495350,
-        kValuesPerDisplay = 5,
-    };
-
-    /*
-     * Set up communication with parent process.
-     */
-    //bool create(ParentProcess* pParent);
-
-    /*
-     * Set up communication with detached simulator.
-     */
-    bool create(Pipe* reader, Pipe* writer);
-
-    /*
-     * Tell simulator that we're ready to go.
-     */
-    void sendRuntimeReady(void);
-
-    /*
-     * Tell the simulator that a display has been refreshed.
-     */
-    void sendDisplayUpdate(int displayIndex);
-
-    /*
-     * Tell the simulator to turn the vibrator on or off
-     */
-    void sendVibrate(int vibrateOn);
-
-    /*
-     * Get a pointer to the shared memory for the Nth display.
-     */
-    Shmem* getGraphicsBuffer(int displayIndex);
-
-    /*
-     * Return a copy of our input pipe so the event system can monitor
-     * it for pending activity.
-     */
-    Pipe* getReadPipe(void) { return mStream.getReadPipe(); }
-
-    /*
-     * Retrieve the next command from the parent.  Returns NO_ERROR
-     * if all is okay, WOULD_BLOCK if blocking is false and there
-     * are no pending commands, or INVALID_OPERATION if the simulator
-     * has disappeared.
-     */
-    int getNextKey(int32_t* outKey, bool* outDown);
-
-    /*
-     * Log system callback function.
-     */
-    static void writeLogMsg(const android_LogBundle* pBundle);
-
-private:
-    bool finishCreate(void);
-    bool handleDisplayConfig(const long* pData, int length);
-
-    MessageStream   mStream;
-};
-
-}; // namespace android
-
-#endif // _RUNTIME_SIMULATOR_H
diff --git a/simulator/app/UserEvent.cpp b/simulator/app/UserEvent.cpp
deleted file mode 100644
index 01d3337..0000000
--- a/simulator/app/UserEvent.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Some additional glue for "user event" type.
-//
-
-// For compilers that support precompilation, include "wx/wx.h".
-#include "wx/wxprec.h"
-
-// Otherwise, include all standard headers
-#ifndef WX_PRECOMP
-# include "wx/wx.h"
-#endif
-
-#include "UserEvent.h"
-
-DEFINE_EVENT_TYPE(wxEVT_USER_EVENT)
-
-IMPLEMENT_DYNAMIC_CLASS(UserEvent, wxEvent)
-
diff --git a/simulator/app/UserEvent.h b/simulator/app/UserEvent.h
deleted file mode 100644
index 76664e1..0000000
--- a/simulator/app/UserEvent.h
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// A "user event" for wxWidgets.
-//
-#ifndef _SIM_USER_EVENT_H
-#define _SIM_USER_EVENT_H
-
-/*
- * Event declaration.  The book says to use DECLARE_EVENT_TYPE, but that
- * causes a compiler warning and a link failure with gcc under MinGW.
- *
- * It looks like the "magic number", in this case 12345, is just picked
- * by hand.  There may be a better mechanism in this version of
- * wxWidgets, but the documentation and sample code doesn't reflect it.
- */
-BEGIN_DECLARE_EVENT_TYPES()
-    DECLARE_LOCAL_EVENT_TYPE(wxEVT_USER_EVENT, 12345)
-END_DECLARE_EVENT_TYPES()
-
-/*
- * A "user event" class.  This can be used like any other wxWidgets
- * event, but we get to stuff anything we want to in it.
- */
-class UserEvent : public wxEvent {
-public:
-    UserEvent(int id = 0, void* data = (void*) 0)
-        : wxEvent(id, wxEVT_USER_EVENT), mData(data)
-        {}
-    UserEvent(const UserEvent& event)
-        : wxEvent(event), mData(event.mData)
-        {}
-
-    virtual wxEvent* Clone() const {
-        return new UserEvent(*this);
-    }
-
-    void* GetData(void) const { return mData; }
-
-    DECLARE_DYNAMIC_CLASS(UserEvent);
-
-private:
-    UserEvent& operator=(const UserEvent&);     // not implemented
-    void*   mData;
-};
-
-typedef void (wxEvtHandler::*UserEventFunction)(UserEvent&);
-
-#define EVT_USER_EVENT(fn) \
-        DECLARE_EVENT_TABLE_ENTRY(wxEVT_USER_EVENT, wxID_ANY, wxID_ANY, \
-            (wxObjectEventFunction)(wxEventFunction)(UserEventFunction)&fn, \
-            (wxObject*) NULL ),
-
-#endif // _SIM_USER_EVENT_H
diff --git a/simulator/app/UserEventMessage.h b/simulator/app/UserEventMessage.h
deleted file mode 100644
index 9b94ea7..0000000
--- a/simulator/app/UserEventMessage.h
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// Contents of the "user event" sent from the device thread.
-//
-#ifndef _SIM_USER_EVENT_MESSAGE_H
-#define _SIM_USER_EVENT_MESSAGE_H
-
-#include "utils.h"
-#include "LogMessage.h"
-
-/*
- * This gets stuffed into a UserEvent, which is posted to the main thread
- * from a worker thread.
- *
- * The object does NOT own anything you stuff into it.  It's just a vehicle
- * for carting data from one thread to another in a wxWidgets-safe manner,
- * usually as pointers to data that can be shared between threads.
- */
-class UserEventMessage {
-public:
-    /*
-     * What type of message is this?
-     */
-    typedef enum UEMType {
-        kUnknown = 0,
-
-        kRuntimeStarted,
-        kRuntimeStopped,
-        kErrorMessage,      // message in mString
-        kLogMessage,        // ptr to heap-allocated LogMessage
-        kExternalRuntime,   // external runtime wants to party
-    } UEMType;
-
-    UserEventMessage(void)
-        : mType(kUnknown), mpLogMessage(NULL)
-        {}
-    ~UserEventMessage(void) {
-    }
-
-    /*
-     * Create one of our various messages.
-     */
-    void CreateRuntimeStarted(void) {
-        mType = kRuntimeStarted;
-    }
-    void CreateRuntimeStopped(void) {
-        mType = kRuntimeStopped;
-    }
-    void CreateErrorMessage(wxString& str) {
-        mType = kErrorMessage;
-        mString = str;
-    }
-    void CreateLogMessage(LogMessage* pLogMessage) {
-        mType = kLogMessage;
-        mpLogMessage = pLogMessage;
-    }
-    void CreateExternalRuntime(android::Pipe* reader, android::Pipe* writer) {
-        mType = kExternalRuntime;
-        mReader = reader;
-        mWriter = writer;
-    }
-
-    /*
-     * Accessors.
-     */
-    UEMType GetType(void) const { return mType; }
-    const wxString& GetString(void) const { return mString; }
-    LogMessage* GetLogMessage(void) const { return mpLogMessage; }
-    android::Pipe* GetReader(void) const { return mReader; }
-    android::Pipe* GetWriter(void) const { return mWriter; }
-
-private:
-    UserEventMessage& operator=(const UserEventMessage&);   // not implemented
-    UserEventMessage(const UserEventMessage&);              // not implemented
-
-    UEMType     mType;
-    wxString    mString;            // for kErrorMessage
-    LogMessage* mpLogMessage;       // for kLogMessage
-    android::Pipe*  mReader;        // for kExternalRuntime
-    android::Pipe*  mWriter;        // for kExternalRuntime
-};
-
-#endif // _SIM_USER_EVENT_MESSAGE_H
diff --git a/simulator/app/assets/android-dream/arrow_down.png b/simulator/app/assets/android-dream/arrow_down.png
deleted file mode 100644
index 19b3764..0000000
--- a/simulator/app/assets/android-dream/arrow_down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/arrow_left.png b/simulator/app/assets/android-dream/arrow_left.png
deleted file mode 100644
index 113e584..0000000
--- a/simulator/app/assets/android-dream/arrow_left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/arrow_right.png b/simulator/app/assets/android-dream/arrow_right.png
deleted file mode 100644
index ffe3356..0000000
--- a/simulator/app/assets/android-dream/arrow_right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/arrow_up.png b/simulator/app/assets/android-dream/arrow_up.png
deleted file mode 100644
index 81c54df..0000000
--- a/simulator/app/assets/android-dream/arrow_up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/back.png b/simulator/app/assets/android-dream/back.png
deleted file mode 100644
index 41034d9..0000000
--- a/simulator/app/assets/android-dream/back.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/background.png b/simulator/app/assets/android-dream/background.png
deleted file mode 100644
index bab8c6d..0000000
--- a/simulator/app/assets/android-dream/background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/end.png b/simulator/app/assets/android-dream/end.png
deleted file mode 100644
index 6830a60..0000000
--- a/simulator/app/assets/android-dream/end.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/home.png b/simulator/app/assets/android-dream/home.png
deleted file mode 100644
index 7d02136..0000000
--- a/simulator/app/assets/android-dream/home.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/key.png b/simulator/app/assets/android-dream/key.png
deleted file mode 100644
index 7a3f563..0000000
--- a/simulator/app/assets/android-dream/key.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/layout.xml b/simulator/app/assets/android-dream/layout.xml
deleted file mode 100644
index 8a7c5f8..0000000
--- a/simulator/app/assets/android-dream/layout.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2006 The Android Open Source Project -->
-
-<device name="Dream">
-    <!-- title for menus -->
-    <title>Android Dream</title>
-
-    <display name="main" width="320" height="480" format="rgb565" refresh="30"/>
-
-    <keyboard qwerty="1" keycharmap="qwerty2" />
-    
-    <mode name="closed">
-        <view display="main" x="75" y="84" rotate="0">
-
-            <!-- surrounding device image and "patches", drawn in order -->
-            <image src="background.png" x="0" y="0"/>
-
-            <!-- buttons for which we have highlight images -->
-            <button keyCode="1"             src="key.png"           x="468" y="276"/>
-            <button keyCode="q"             src="key.png"           x="468" y="312"/>
-            <button keyCode="power"         src="power.png"         x="7"   y="66"/>
-            <button keyCode="volume-up"     src="volume_up.png"     x="407" y="274"/>
-            <button keyCode="volume-down"   src="volume_down.png"   x="407" y="324"/>
-
-            <button keyCode="home"          src="home.png"          x="93"  y="602"/>
-            <button keyCode="back"          src="back.png"          x="331" y="602"/>
-            <button keyCode="dpad-up"       src="arrow_up.png"      x="185" y="608"/>
-            <button keyCode="dpad-down"     src="arrow_down.png"    x="185" y="669"/>
-            <button keyCode="dpad-left"     src="arrow_left.png"    x="155" y="610"/>
-            <button keyCode="dpad-right"    src="arrow_right.png"   x="266" y="610"/>
-            <button keyCode="dpad-center"   src="select.png"        x="186" y="637"/>
-            <button keyCode="phone-dial"    src="send.png"          x="93"  y="658"/>
-            <button keyCode="phone-hangup"  src="end.png"           x="331" y="658"/>
-            <button keyCode="soft-left"     src="menu.png"          x="192" y="569"/>
-
-<!--
-            1 {
-               image  key.png
-               x  468
-               y  302
-            }
-            2 {
-               image  key.png
-               x 505
-               y 302
-            }
-            3 {
-               image  key.png
-               x 543
-               y 302
-            }
-            4 {
-               image  key.png
-               x 579
-               y 302
-            }
-            5 {
-               image  key.png
-               x 616
-               y 302
-            }
-            6 {
-               image  key.png
-               x 653
-               y 302
-            }
-            7 {
-               image  key.png
-               x 690
-               y 302
-            }
-            8 {
-               image  key.png
-               x 727
-               y 302
-            }
-            9 {
-               image  key.png
-               x 763
-               y 302
-            }
-            0 {
-               image  key.png
-               x 801
-               y 302
-            }
-
-            q {
-               image  key.png
-               x  468
-               y  338
-            }
-            w {
-               image  key.png
-               x 505
-               y 338
-            }
-            e {
-               image  key.png
-               x 543
-               y 338
-            }
-            r {
-               image  key.png
-               x 579
-               y 338
-            }
-            t {
-               image  key.png
-               x 616
-               y 338
-            }
-            y {
-               image  key.png
-               x 653
-               y 338
-            }
-            u {
-               image  key.png
-               x 690
-               y 338
-            }
-            i {
-               image  key.png
-               x 727
-               y 338
-            }
-            o {
-               image  key.png
-               x 763
-               y 338
-            }
-            p {
-               image  key.png
-               x 801
-               y 338
-            }
-
-            a {
-               image  key.png
-               x  468
-               y  374
-            }
-            s {
-               image  key.png
-               x 505
-               y 374
-            }
-            d {
-               image  key.png
-               x 543
-               y 374
-            }
-            f {
-               image  key.png
-               x 579
-               y 374
-            }
-            g {
-               image  key.png
-               x 616
-               y 374
-            }
-            h {
-               image  key.png
-               x 653
-               y 374
-            }
-            j {
-               image  key.png
-               x 690
-               y 374
-            }
-            k {
-               image  key.png
-               x 727
-               y 374
-            }
-            l {
-               image  key.png
-               x 763
-               y 374
-            }
-            DEL {
-               image  key.png
-               x 801
-               y 374
-            }
-
-            CAP {
-               image  key.png
-               x  468
-               y  410
-            }
-            z {
-               image  key.png
-               x 505
-               y 410
-            }
-            x {
-               image  key.png
-               x 543
-               y 410
-            }
-            c {
-               image  key.png
-               x 579
-               y 410
-            }
-            v {
-               image  key.png
-               x 616
-               y 410
-            }
-            b {
-               image  key.png
-               x 653
-               y 410
-            }
-            n {
-               image  key.png
-               x 690
-               y 410
-            }
-            m {
-               image  key.png
-               x 727
-               y 410
-            }
-            PERIOD {
-               image  key.png
-               x 763
-               y 410
-            }
-            ENTER {
-               image  key.png
-               x 801
-               y 410
-            }
-
-            ALT {
-               image  key.png
-               x  468
-               y  446
-            }
-            SYM {
-               image  key.png
-               x 505
-               y 446
-            }
-            AT {
-               image  key.png
-               x 543
-               y 446
-            }
-            SPACE {
-               image  spacebar.png
-               x 579
-               y 446
-            }
-            SLASH {
-               image  key.png
-               x 727
-               y 446
-            }
-            COMMA {
-               image  key.png
-               x 763
-               y 446
-            }
-            ALT2 {
-               image  key.png
-               x 801
-               y 446
-            }
-
-            soft-left {
-                image menu.png
-                x 192
-                y 623
-            }
-            home {
-                image home.png
-                x 93
-                y 656
-            }
-            back {
-                image back.png
-                x 331
-                y 656
-            }
-            dpad-up {
-                image arrow_up.png
-                x 185
-                y 662
-            }
-            dpad-down {
-                image arrow_down.png
-                x 185
-                y 723
-            }
-            dpad-left {
-                image arrow_left.png
-                x 155
-                y 664
-            }
-            dpad-right {
-                image arrow_right.png
-                x 266
-                y 664
-            }
-            dpad-center {
-                image select.png
-                x 186
-                y 691
-            }
-            phone-dial {
-                image send.png
-                x 93
-                y 712
-            }
-            phone-hangup {
-                image end.png
-                x 331
-                y 712
-            }
-
-            power {
-                image power.png
-                x 7
-                y 120
-            }
-
-            volume-up {
-                image volume_up.png
-                x 407
-                y 328
-            }
-
-            volume-down {
-                image volume_down.png
-                x 407
-                y 378
-            }
--->
-        </view>
-    </mode>
-
-<!--
-    <mode name="open">
-        <view display="main" x="0" y="0" rotate="90">
-        </view>
-    </mode>
--->
-
-</device>
diff --git a/simulator/app/assets/android-dream/menu.png b/simulator/app/assets/android-dream/menu.png
deleted file mode 100644
index e81d8ab..0000000
--- a/simulator/app/assets/android-dream/menu.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/power.png b/simulator/app/assets/android-dream/power.png
deleted file mode 100644
index 5894288..0000000
--- a/simulator/app/assets/android-dream/power.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/select.png b/simulator/app/assets/android-dream/select.png
deleted file mode 100644
index 803d493..0000000
--- a/simulator/app/assets/android-dream/select.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/send.png b/simulator/app/assets/android-dream/send.png
deleted file mode 100644
index f547c88..0000000
--- a/simulator/app/assets/android-dream/send.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/spacebar.png b/simulator/app/assets/android-dream/spacebar.png
deleted file mode 100644
index 19fe604..0000000
--- a/simulator/app/assets/android-dream/spacebar.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/volume_down.png b/simulator/app/assets/android-dream/volume_down.png
deleted file mode 100644
index f8a88de..0000000
--- a/simulator/app/assets/android-dream/volume_down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-dream/volume_up.png b/simulator/app/assets/android-dream/volume_up.png
deleted file mode 100644
index 940457f..0000000
--- a/simulator/app/assets/android-dream/volume_up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/back.png b/simulator/app/assets/android-sooner/back.png
deleted file mode 100644
index 5190939..0000000
--- a/simulator/app/assets/android-sooner/back.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/background.png b/simulator/app/assets/android-sooner/background.png
deleted file mode 100644
index 32534b9..0000000
--- a/simulator/app/assets/android-sooner/background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/down.png b/simulator/app/assets/android-sooner/down.png
deleted file mode 100644
index 1d602b0..0000000
--- a/simulator/app/assets/android-sooner/down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/end.png b/simulator/app/assets/android-sooner/end.png
deleted file mode 100644
index 17d8cc7..0000000
--- a/simulator/app/assets/android-sooner/end.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/favorites.png b/simulator/app/assets/android-sooner/favorites.png
deleted file mode 100644
index ad85c5c..0000000
--- a/simulator/app/assets/android-sooner/favorites.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/home.png b/simulator/app/assets/android-sooner/home.png
deleted file mode 100644
index 04f9a21..0000000
--- a/simulator/app/assets/android-sooner/home.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/imap b/simulator/app/assets/android-sooner/imap
deleted file mode 100644
index 64c9aff..0000000
--- a/simulator/app/assets/android-sooner/imap
+++ /dev/null
@@ -1,15 +0,0 @@
-# awk '{print $1, $4-$2 "x" $5-$3 "+" $2 "+" $3}'
-
-BACKGROUND=background-alpha.png
-
-convert $BACKGROUND -crop 43x47+55+410 send.png
-convert $BACKGROUND -crop 43x47+338+411 end.png
-convert $BACKGROUND -crop 43x40+98+393 menu.png
-convert $BACKGROUND -crop 43x40+98+433 back.png
-convert $BACKGROUND -crop 47x40+291+393 favorites.png
-convert $BACKGROUND -crop 47x40+291+433 home.png
-convert $BACKGROUND -crop 81x24+177+422 select.png
-convert $BACKGROUND -crop 81x30+177+392 up.png
-convert $BACKGROUND -crop 81x30+177+446 down.png
-convert $BACKGROUND -crop 31x84+146+392 left.png
-convert $BACKGROUND -crop 31x84+258+392 right.png
diff --git a/simulator/app/assets/android-sooner/layout.xml b/simulator/app/assets/android-sooner/layout.xml
deleted file mode 100644
index d17b9d8..0000000
--- a/simulator/app/assets/android-sooner/layout.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2006 The Android Open Source Project -->
-
-<device name="Sooner">
-    <!-- title for menus -->
-    <title>Android Sooner</title>
-
-    <display name="main" width="320" height="240" format="rgb565" refresh="30"/>
-
-    <keyboard qwerty="1" keycharmap="qwerty" />
-    
-    <mode name="default">
-        <view display="main" x="53" y="95" rotate="0">
-
-            <!-- surrounding device image and "patches", drawn in order -->
-            <image src="background.png" x="0" y="0"/>
-
-            <!-- buttons for which we have highlight images -->
-            <button keyCode="soft-left"     src="menu.png"          x="93"  y="367"/>
-            <button keyCode="soft-right"    src="favorites.png"     x="286" y="367"/>
-            <button keyCode="home"          src="home.png"          x="286" y="407"/>
-            <button keyCode="back"          src="back.png"          x="93"  y="407"/>
-            <button keyCode="dpad-up"       src="up.png"            x="172" y="366"/>
-            <button keyCode="dpad-down"     src="down.png"          x="172" y="420"/>
-            <button keyCode="dpad-left"     src="left.png"          x="141" y="366"/>
-            <button keyCode="dpad-right"    src="right.png"         x="253" y="366"/>
-            <button keyCode="dpad-center"   src="select.png"        x="172" y="396"/>
-
-            <button keyCode="phone-dial"    src="send.png"          x="50"  y="384"/>
-            <button keyCode="phone-hangup"  src="end.png"           x="333" y="385"/>
-        </view>
-    </mode>
-
-</device>
diff --git a/simulator/app/assets/android-sooner/left.png b/simulator/app/assets/android-sooner/left.png
deleted file mode 100644
index f712f5c..0000000
--- a/simulator/app/assets/android-sooner/left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/menu.png b/simulator/app/assets/android-sooner/menu.png
deleted file mode 100644
index 4c7f15a..0000000
--- a/simulator/app/assets/android-sooner/menu.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/right.png b/simulator/app/assets/android-sooner/right.png
deleted file mode 100644
index b1aa1f9..0000000
--- a/simulator/app/assets/android-sooner/right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/select.png b/simulator/app/assets/android-sooner/select.png
deleted file mode 100644
index 79606d1..0000000
--- a/simulator/app/assets/android-sooner/select.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/send.png b/simulator/app/assets/android-sooner/send.png
deleted file mode 100644
index 9bf103d..0000000
--- a/simulator/app/assets/android-sooner/send.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/android-sooner/up.png b/simulator/app/assets/android-sooner/up.png
deleted file mode 100644
index 324d67e..0000000
--- a/simulator/app/assets/android-sooner/up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/chimera-2000/layout.xml b/simulator/app/assets/chimera-2000/layout.xml
deleted file mode 100644
index d808281..0000000
--- a/simulator/app/assets/chimera-2000/layout.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2005 The Android Open Source Project -->
-
-<!--
-This is a silly, contrived example of a dual-screen display device.
-The "front" and "back" are shown side-by-side.  I used the phone graphics
-from two phones, which are presented as if they were glued back-to-back.
-
-This also illustrates front and back views, which for our purposes just
-determines which phone is on the left.
-
-This used to use relative paths (../whatever) to get at the phone content,
-but relative paths aren't supported in the "AssetManager" world.  We now
-use "::/whatever", which is interpreted by the simulator.  (The change from
-'.' to ':' was done to make it obvious that we weren't using UNIX paths.)
--->
-
-
-<device name="Chimera2000">
-    <!-- title for menus -->
-    <title>Chimera WeirdPhone 2000</title>
-
-    <!-- primary display characteristics -->
-    <display name="top" width="176" height="220" format="rgb565" refresh="30"/>
-    <display name="bottom" width="176" height="220" format="rgb565" refresh="30"/>
-
-	<mode name="front">
-        <!-- the "top" device looks like a Samsung phone -->
-		<view display="top" x="49" y="73" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-            <image src="::/samsung-flip-2005/background-176x220.png" x="0" y="0"/>
-            <image src="::/samsung-flip-2005/home-background.png" x="22" y="426"/>
-            <image src="::/samsung-flip-2005/back-background.png" x="179" y="426"/>
-
-			<!-- buttons for which we have highlight images -->
-            <button keyCode="soft-left"     src="::/samsung-flip-2005/soft-left.png"     x="24" y="388"/>
-            <button keyCode="soft-right"    src="::/samsung-flip-2005/soft-right.png"    x="182" y="388"/>
-            <button keyCode="home"          src="::/samsung-flip-2005/home.png"          x="22" y="426"/>
-            <button keyCode="back"          src="::/samsung-flip-2005/back.png"          x="179" y="426"/>
-            <button keyCode="dpad-up"       src="::/samsung-flip-2005/arrow-up.png"      x="99" y="399"/>
-            <button keyCode="dpad-down"     src="::/samsung-flip-2005/arrow-down.png"    x="99" y="461"/>
-            <button keyCode="dpad-left"     src="::/samsung-flip-2005/arrow-left.png"    x="82" y="411"/>
-            <button keyCode="dpad-right"    src="::/samsung-flip-2005/arrow-right.png"   x="147" y="411"/>
-            <button keyCode="dpad-center"   src="::/samsung-flip-2005/select.png"        x="115" y="431"/>
-
-            <button keyCode="1"             src="::/samsung-flip-2005/1.png"             x="24" y="533"/>
-            <button keyCode="2"             src="::/samsung-flip-2005/2.png"             x="94" y="544"/>
-            <button keyCode="3"             src="::/samsung-flip-2005/3.png"             x="173" y="534"/>
-            <button keyCode="4"             src="::/samsung-flip-2005/4.png"             x="25" y="576"/>
-            <button keyCode="5"             src="::/samsung-flip-2005/5.png"             x="94" y="581"/>
-            <button keyCode="6"             src="::/samsung-flip-2005/6.png"             x="172" y="576"/>
-            <button keyCode="7"             src="::/samsung-flip-2005/7.png"             x="27" y="619"/>
-            <button keyCode="8"             src="::/samsung-flip-2005/8.png"             x="95" y="621"/>
-            <button keyCode="9"             src="::/samsung-flip-2005/9.png"             x="168" y="620"/>
-            <button keyCode="0"             src="::/samsung-flip-2005/0.png"             x="96" y="658"/>
-            <button keyCode="star"          src="::/samsung-flip-2005/star.png"          x="31" y="659"/>
-            <button keyCode="pound"         src="::/samsung-flip-2005/pound.png"         x="169" y="659"/>
-
-            <!-- buttons we haven't bothered to create highlight images for,
-                 or that aren't visible on-screen -->
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-		</view>
-
-        <!-- the "bottom" device looks like an HTC phone -->
-		<view display="bottom" x="36" y="73" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-            <image src="::/htc-audiovox-5600/background.png" x="0" y="0"/>
-
-			<!-- buttons for which we have highlight images -->
-            <button keyCode="soft-left"     src="::/htc-audiovox-5600/soft-left.png"     x="40" y="312"/>
-            <button keyCode="soft-right"    src="::/htc-audiovox-5600/soft-right.png"    x="145" y="312"/>
-            <button keyCode="home"          src="::/htc-audiovox-5600/home.png"          x="57" y="331"/>
-            <button keyCode="back"          src="::/htc-audiovox-5600/back.png"          x="123" y="333"/>
-            <button keyCode="dpad-up"       src="::/htc-audiovox-5600/arrow-up.png"      x="59" y="364"/>
-            <button keyCode="dpad-down"     src="::/htc-audiovox-5600/arrow-down.png"    x="60" y="393"/>
-            <button keyCode="dpad-left"/>
-            <button keyCode="dpad-right"/>
-            <button keyCode="dpad-center"   src="::/htc-audiovox-5600/select.png"        x="103" y="381"/>
-
-            <button keyCode="1"             src="::/htc-audiovox-5600/1.png"             x="30" y="411"/>
-            <button keyCode="2"             src="::/htc-audiovox-5600/2.png"             x="90" y="409"/>
-            <button keyCode="3"             src="::/htc-audiovox-5600/3.png"             x="159" y="413"/>
-            <button keyCode="4"             src="::/htc-audiovox-5600/4.png"             x="32" y="445"/>
-            <button keyCode="5"             src="::/htc-audiovox-5600/5.png"             x="92" y="445"/>
-            <button keyCode="6"             src="::/htc-audiovox-5600/6.png"             x="157" y="444"/>
-            <button keyCode="7"             src="::/htc-audiovox-5600/7.png"             x="28" y="476"/>
-            <button keyCode="8"             src="::/htc-audiovox-5600/8.png"             x="94" y="480"/>
-            <button keyCode="9"             src="::/htc-audiovox-5600/9.png"             x="156" y="477"/>
-            <button keyCode="0"             src="::/htc-audiovox-5600/0.png"             x="97" y="513"/>
-            <button keyCode="star"          src="::/htc-audiovox-5600/star.png"          x="45" y="509"/>
-            <button keyCode="pound"         src="::/htc-audiovox-5600/pound.png"         x="155" y="511"/>
-
-            <!-- buttons we haven't bothered to create highlight images for,
-                 or that aren't visible on-screen -->
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-
-		</view>
-	</mode>
-
-	<mode name="back">
-        <!-- show the back view first, then the front view -->
-		<view display="bottom" x="36" y="73" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-            <image src="::/htc-audiovox-5600/background.png" x="0" y="0"/>
-
-			<!-- buttons for which we have highlight images -->
-            <button keyCode="soft-left"     src="::/htc-audiovox-5600/soft-left.png"     x="40" y="312"/>
-            <button keyCode="soft-right"    src="::/htc-audiovox-5600/soft-right.png"    x="145" y="312"/>
-            <button keyCode="home"          src="::/htc-audiovox-5600/home.png"          x="57" y="331"/>
-            <button keyCode="back"          src="::/htc-audiovox-5600/back.png"          x="123" y="333"/>
-            <button keyCode="dpad-up"       src="::/htc-audiovox-5600/arrow-up.png"      x="59" y="364"/>
-            <button keyCode="dpad-down"     src="::/htc-audiovox-5600/arrow-down.png"    x="60" y="393"/>
-            <button keyCode="dpad-left"/>
-            <button keyCode="dpad-right"/>
-            <button keyCode="dpad-center"   src="::/htc-audiovox-5600/select.png"        x="103" y="381"/>
-
-            <button keyCode="1"             src="::/htc-audiovox-5600/1.png"             x="30" y="411"/>
-            <button keyCode="2"             src="::/htc-audiovox-5600/2.png"             x="90" y="409"/>
-            <button keyCode="3"             src="::/htc-audiovox-5600/3.png"             x="159" y="413"/>
-            <button keyCode="4"             src="::/htc-audiovox-5600/4.png"             x="32" y="445"/>
-            <button keyCode="5"             src="::/htc-audiovox-5600/5.png"             x="92" y="445"/>
-            <button keyCode="6"             src="::/htc-audiovox-5600/6.png"             x="157" y="444"/>
-            <button keyCode="7"             src="::/htc-audiovox-5600/7.png"             x="28" y="476"/>
-            <button keyCode="8"             src="::/htc-audiovox-5600/8.png"             x="94" y="480"/>
-            <button keyCode="9"             src="::/htc-audiovox-5600/9.png"             x="156" y="477"/>
-            <button keyCode="0"             src="::/htc-audiovox-5600/0.png"             x="97" y="513"/>
-            <button keyCode="star"          src="::/htc-audiovox-5600/star.png"          x="45" y="509"/>
-            <button keyCode="pound"         src="::/htc-audiovox-5600/pound.png"         x="155" y="511"/>
-
-            <!-- buttons we haven't bothered to create highlight images for,
-                 or that aren't visible on-screen -->
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-
-		</view>
-
-        <!-- our view of the device that shows the main display -->
-		<view display="top" x="49" y="73" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-            <image src="::/samsung-flip-2005/background-176x220.png" x="0" y="0"/>
-            <image src="::/samsung-flip-2005/home-background.png" x="22" y="426"/>
-            <image src="::/samsung-flip-2005/back-background.png" x="179" y="426"/>
-
-			<!-- buttons for which we have highlight images -->
-            <button keyCode="soft-left"     src="::/samsung-flip-2005/soft-left.png"     x="24" y="388"/>
-            <button keyCode="soft-right"    src="::/samsung-flip-2005/soft-right.png"    x="182" y="388"/>
-            <button keyCode="home"          src="::/samsung-flip-2005/home.png"          x="22" y="426"/>
-            <button keyCode="back"          src="::/samsung-flip-2005/back.png"          x="179" y="426"/>
-            <button keyCode="dpad-up"       src="::/samsung-flip-2005/arrow-up.png"      x="99" y="399"/>
-            <button keyCode="dpad-down"     src="::/samsung-flip-2005/arrow-down.png"    x="99" y="461"/>
-            <button keyCode="dpad-left"     src="::/samsung-flip-2005/arrow-left.png"    x="82" y="411"/>
-            <button keyCode="dpad-right"    src="::/samsung-flip-2005/arrow-right.png"   x="147" y="411"/>
-            <button keyCode="dpad-center"   src="::/samsung-flip-2005/select.png"        x="115" y="431"/>
-
-            <button keyCode="1"             src="::/samsung-flip-2005/1.png"             x="24" y="533"/>
-            <button keyCode="2"             src="::/samsung-flip-2005/2.png"             x="94" y="544"/>
-            <button keyCode="3"             src="::/samsung-flip-2005/3.png"             x="173" y="534"/>
-            <button keyCode="4"             src="::/samsung-flip-2005/4.png"             x="25" y="576"/>
-            <button keyCode="5"             src="::/samsung-flip-2005/5.png"             x="94" y="581"/>
-            <button keyCode="6"             src="::/samsung-flip-2005/6.png"             x="172" y="576"/>
-            <button keyCode="7"             src="::/samsung-flip-2005/7.png"             x="27" y="619"/>
-            <button keyCode="8"             src="::/samsung-flip-2005/8.png"             x="95" y="621"/>
-            <button keyCode="9"             src="::/samsung-flip-2005/9.png"             x="168" y="620"/>
-            <button keyCode="0"             src="::/samsung-flip-2005/0.png"             x="96" y="658"/>
-            <button keyCode="star"          src="::/samsung-flip-2005/star.png"          x="31" y="659"/>
-            <button keyCode="pound"         src="::/samsung-flip-2005/pound.png"         x="169" y="659"/>
-
-            <!-- buttons we haven't bothered to create highlight images for,
-                 or that aren't visible on-screen -->
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-		</view>
-
-	</mode>
-</device>
-
diff --git a/simulator/app/assets/danger-hiptop-m1/background-open.png b/simulator/app/assets/danger-hiptop-m1/background-open.png
deleted file mode 100644
index 62d2c29..0000000
--- a/simulator/app/assets/danger-hiptop-m1/background-open.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/danger-hiptop-m1/background.png b/simulator/app/assets/danger-hiptop-m1/background.png
deleted file mode 100644
index f8c58c7..0000000
--- a/simulator/app/assets/danger-hiptop-m1/background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/danger-hiptop-m1/layout.xml b/simulator/app/assets/danger-hiptop-m1/layout.xml
deleted file mode 100644
index f8d7cba..0000000
--- a/simulator/app/assets/danger-hiptop-m1/layout.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2005 The Android Open Source Project -->
-
-<device name="DangerM1">
-    <!-- title for menus -->
-    <title>Danger hiptop M1</title>
-
-    <display name="main" width="240" height="160" format="rgb565" refresh="30"/>
-
-	<keyboard qwerty="1" />
-	
-    <mode name="closed">
-        <!-- hiptop when closed -->
-        <view display="main" x="160" y="69" rotate="0">
-
-            <!-- surrounding device image and "patches", drawn in order -->
-            <image src="background.png" x="0" y="0"/>
-
-        </view>
-    </mode>
-
-    <mode name="open">
-        <!-- hiptop when flipped open -->
-        <view display="main" x="172" y="60" rotate="180">
-
-            <image src="background-open.png" x="0" y="0"/>
-        </view>
-    </mode>
-
-</device>
-
diff --git a/simulator/app/assets/htc-audiovox-5600/0.png b/simulator/app/assets/htc-audiovox-5600/0.png
deleted file mode 100644
index 1fa4b72..0000000
--- a/simulator/app/assets/htc-audiovox-5600/0.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/1.png b/simulator/app/assets/htc-audiovox-5600/1.png
deleted file mode 100644
index f939334..0000000
--- a/simulator/app/assets/htc-audiovox-5600/1.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/2.png b/simulator/app/assets/htc-audiovox-5600/2.png
deleted file mode 100644
index 09be58b..0000000
--- a/simulator/app/assets/htc-audiovox-5600/2.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/3.png b/simulator/app/assets/htc-audiovox-5600/3.png
deleted file mode 100644
index 91c70c1..0000000
--- a/simulator/app/assets/htc-audiovox-5600/3.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/4.png b/simulator/app/assets/htc-audiovox-5600/4.png
deleted file mode 100644
index da930ff..0000000
--- a/simulator/app/assets/htc-audiovox-5600/4.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/5.png b/simulator/app/assets/htc-audiovox-5600/5.png
deleted file mode 100644
index 5c4625a..0000000
--- a/simulator/app/assets/htc-audiovox-5600/5.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/6.png b/simulator/app/assets/htc-audiovox-5600/6.png
deleted file mode 100644
index f309960..0000000
--- a/simulator/app/assets/htc-audiovox-5600/6.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/7.png b/simulator/app/assets/htc-audiovox-5600/7.png
deleted file mode 100644
index e09b08c..0000000
--- a/simulator/app/assets/htc-audiovox-5600/7.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/8.png b/simulator/app/assets/htc-audiovox-5600/8.png
deleted file mode 100644
index c8b3dcc..0000000
--- a/simulator/app/assets/htc-audiovox-5600/8.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/9.png b/simulator/app/assets/htc-audiovox-5600/9.png
deleted file mode 100644
index f284212..0000000
--- a/simulator/app/assets/htc-audiovox-5600/9.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/arrow-down.png b/simulator/app/assets/htc-audiovox-5600/arrow-down.png
deleted file mode 100644
index 08a17ea..0000000
--- a/simulator/app/assets/htc-audiovox-5600/arrow-down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/arrow-up.png b/simulator/app/assets/htc-audiovox-5600/arrow-up.png
deleted file mode 100644
index f2998b9..0000000
--- a/simulator/app/assets/htc-audiovox-5600/arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/back.png b/simulator/app/assets/htc-audiovox-5600/back.png
deleted file mode 100644
index 4110ec7..0000000
--- a/simulator/app/assets/htc-audiovox-5600/back.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/background-orange.png b/simulator/app/assets/htc-audiovox-5600/background-orange.png
deleted file mode 100644
index b147546..0000000
--- a/simulator/app/assets/htc-audiovox-5600/background-orange.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/background.png b/simulator/app/assets/htc-audiovox-5600/background.png
deleted file mode 100644
index 9ffd7f3..0000000
--- a/simulator/app/assets/htc-audiovox-5600/background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/home.png b/simulator/app/assets/htc-audiovox-5600/home.png
deleted file mode 100644
index a10d293..0000000
--- a/simulator/app/assets/htc-audiovox-5600/home.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/layout.xml b/simulator/app/assets/htc-audiovox-5600/layout.xml
deleted file mode 100644
index 9e68c0f..0000000
--- a/simulator/app/assets/htc-audiovox-5600/layout.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2005 The Android Open Source Project -->
-
-<device name="HTC5600">
-    <!-- title for menus -->
-    <title>HTC AudioVox 5600</title>
-
-    <!-- primary display characteristics -->
-    <display name="main" width="176" height="220" format="rgb565" refresh="30"/>
-
-	<mode name="default">
-		<view display="main" x="36" y="73" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-			<image src="background.png" x="0" y="0"/>
-
-			<!-- buttons for which we have highlight images -->
-			<button keyCode="soft-left"     src="soft-left.png"     x="40" y="312"/>
-			<button keyCode="soft-right"    src="soft-right.png"    x="145" y="312"/>
-			<button keyCode="home"          src="home.png"          x="57" y="331"/>
-			<button keyCode="back"          src="back.png"          x="123" y="333"/>
-			<button keyCode="dpad-up"       src="arrow-up.png"      x="59" y="364"/>
-			<button keyCode="dpad-down"     src="arrow-down.png"    x="60" y="393"/>
-            <button keyCode="dpad-left"/>
-            <button keyCode="dpad-right"/>
-			<button keyCode="dpad-center"   src="select.png"        x="103" y="381"/>
-
-			<button keyCode="1"             src="1.png"             x="30" y="411"/>
-			<button keyCode="2"             src="2.png"             x="90" y="409"/>
-			<button keyCode="3"             src="3.png"             x="159" y="413"/>
-			<button keyCode="4"             src="4.png"             x="32" y="445"/>
-			<button keyCode="5"             src="5.png"             x="92" y="445"/>
-			<button keyCode="6"             src="6.png"             x="157" y="444"/>
-			<button keyCode="7"             src="7.png"             x="28" y="476"/>
-			<button keyCode="8"             src="8.png"             x="94" y="480"/>
-			<button keyCode="9"             src="9.png"             x="156" y="477"/>
-			<button keyCode="0"             src="0.png"             x="97" y="513"/>
-			<button keyCode="star"          src="star.png"          x="45" y="509"/>
-			<button keyCode="pound"         src="pound.png"         x="155" y="511"/>
-
-            <!-- buttons we haven't bothered to create highlight images for,
-                 or that aren't visible on-screen -->
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-
-		</view>
-	</mode>
-
-</device>
-
diff --git a/simulator/app/assets/htc-audiovox-5600/pound.png b/simulator/app/assets/htc-audiovox-5600/pound.png
deleted file mode 100644
index 90df1fa..0000000
--- a/simulator/app/assets/htc-audiovox-5600/pound.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/select.png b/simulator/app/assets/htc-audiovox-5600/select.png
deleted file mode 100644
index 509082c..0000000
--- a/simulator/app/assets/htc-audiovox-5600/select.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/soft-left.png b/simulator/app/assets/htc-audiovox-5600/soft-left.png
deleted file mode 100644
index ce8cc5c..0000000
--- a/simulator/app/assets/htc-audiovox-5600/soft-left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/soft-right.png b/simulator/app/assets/htc-audiovox-5600/soft-right.png
deleted file mode 100644
index f3c76c7..0000000
--- a/simulator/app/assets/htc-audiovox-5600/soft-right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-audiovox-5600/star.png b/simulator/app/assets/htc-audiovox-5600/star.png
deleted file mode 100644
index 19aa057..0000000
--- a/simulator/app/assets/htc-audiovox-5600/star.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/0.png b/simulator/app/assets/htc-tornado/0.png
deleted file mode 100644
index a40e898..0000000
--- a/simulator/app/assets/htc-tornado/0.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/1.png b/simulator/app/assets/htc-tornado/1.png
deleted file mode 100644
index 92c6782..0000000
--- a/simulator/app/assets/htc-tornado/1.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/2.png b/simulator/app/assets/htc-tornado/2.png
deleted file mode 100644
index 42a79ec..0000000
--- a/simulator/app/assets/htc-tornado/2.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/3.png b/simulator/app/assets/htc-tornado/3.png
deleted file mode 100644
index 7e685a8..0000000
--- a/simulator/app/assets/htc-tornado/3.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/4.png b/simulator/app/assets/htc-tornado/4.png
deleted file mode 100644
index c1b8060..0000000
--- a/simulator/app/assets/htc-tornado/4.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/5.png b/simulator/app/assets/htc-tornado/5.png
deleted file mode 100644
index 29d2607..0000000
--- a/simulator/app/assets/htc-tornado/5.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/6.png b/simulator/app/assets/htc-tornado/6.png
deleted file mode 100644
index 509aae5..0000000
--- a/simulator/app/assets/htc-tornado/6.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/7.png b/simulator/app/assets/htc-tornado/7.png
deleted file mode 100644
index 1608777..0000000
--- a/simulator/app/assets/htc-tornado/7.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/8.png b/simulator/app/assets/htc-tornado/8.png
deleted file mode 100644
index 9fac3e6..0000000
--- a/simulator/app/assets/htc-tornado/8.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/9.png b/simulator/app/assets/htc-tornado/9.png
deleted file mode 100644
index 6a357cb..0000000
--- a/simulator/app/assets/htc-tornado/9.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/arrow-down.png b/simulator/app/assets/htc-tornado/arrow-down.png
deleted file mode 100644
index c00787f..0000000
--- a/simulator/app/assets/htc-tornado/arrow-down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/arrow-left.png b/simulator/app/assets/htc-tornado/arrow-left.png
deleted file mode 100644
index 1180a94..0000000
--- a/simulator/app/assets/htc-tornado/arrow-left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/arrow-right.png b/simulator/app/assets/htc-tornado/arrow-right.png
deleted file mode 100644
index 6a511d2..0000000
--- a/simulator/app/assets/htc-tornado/arrow-right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/arrow-up.png b/simulator/app/assets/htc-tornado/arrow-up.png
deleted file mode 100644
index da50871..0000000
--- a/simulator/app/assets/htc-tornado/arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/back.png b/simulator/app/assets/htc-tornado/back.png
deleted file mode 100644
index d12273d..0000000
--- a/simulator/app/assets/htc-tornado/back.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/background.png b/simulator/app/assets/htc-tornado/background.png
deleted file mode 100644
index 09169b8..0000000
--- a/simulator/app/assets/htc-tornado/background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/home.png b/simulator/app/assets/htc-tornado/home.png
deleted file mode 100644
index 90775a8..0000000
--- a/simulator/app/assets/htc-tornado/home.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/internet.png b/simulator/app/assets/htc-tornado/internet.png
deleted file mode 100644
index 47f1bb4..0000000
--- a/simulator/app/assets/htc-tornado/internet.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/layout.xml b/simulator/app/assets/htc-tornado/layout.xml
deleted file mode 100644
index 55c1d65..0000000
--- a/simulator/app/assets/htc-tornado/layout.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2005 The Android Open Source Project -->
-
-<device name="HTC_Tornado">
-    <!-- title for menus -->
-    <title>HTC Tornado</title>
-
-    <!-- primary display characteristics -->
-    <display name="main" width="240" height="320" format="rgb565" refresh="30"/>
-
-    <!-- display is 33.84mm x 45.12mm -->
-
-	<mode name="default">
-		<view display="main" x="58" y="117" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-			<image src="background.png" x="0" y="0"/>
-
-			<!-- buttons for which we have highlight images -->
-			<button keyCode="soft-left"     src="soft-left.png"     x="49" y="450"/>
-			<button keyCode="soft-right"    src="soft-right.png"    x="249" y="450"/>
-			<button keyCode="home"          src="home.png"          x="115" y="450"/>
-			<button keyCode="back"          src="back.png"          x="182" y="450"/>
-			<button keyCode="dpad-up"       src="arrow-up.png"      x="159" y="542"/>
-			<button keyCode="dpad-down"     src="arrow-down.png"    x="160" y="573"/>
-			<button keyCode="dpad-left"       src="arrow-left.png"    x="152" y="549"/>
-			<button keyCode="dpad-right"     src="arrow-right.png"   x="183" y="549"/>
-			<button keyCode="dpad-center"   src="select.png"        x="167" y="556"/>
-
-			<button keyCode="1"             src="1.png"             x="51" y="595"/>
-			<button keyCode="2"             src="2.png"             x="133" y="595"/>
-			<button keyCode="3"             src="3.png"             x="221" y="595"/>
-			<button keyCode="4"             src="4.png"             x="51" y="633"/>
-			<button keyCode="5"             src="5.png"             x="133" y="633"/>
-			<button keyCode="6"             src="6.png"             x="221" y="633"/>
-			<button keyCode="7"             src="7.png"             x="51" y="666"/>
-			<button keyCode="8"             src="8.png"             x="133" y="666"/>
-			<button keyCode="9"             src="9.png"             x="221" y="666"/>
-			<button keyCode="0"             src="0.png"             x="133" y="699"/>
-			<button keyCode="star"          src="star.png"          x="51" y="699"/>
-			<button keyCode="pound"         src="pound.png"         x="221" y="699"/>
-
-			<button keyCode="phone-dial"	src="phone-dial.png"	x="51" y="547"/>
-			<button keyCode="phone-hangup"	src="phone-hangup.png"	x="221" y="547"/>
-
-			<button keyCode="internet"	src="internet.png"	x="52" y="490"/>
-			<button keyCode="skip-backward"	src="skip-backward.png"	x="121" y="490"/>
-			<button keyCode="pause-play"	src="pause-play.png"	x="191" y="490"/>
-			<button keyCode="skip-forward"	src="skip-forward.png"	x="260" y="490"/>
-
-
-            <!-- buttons we haven't bothered to create highlight images for,
-                 or that aren't visible on-screen -->
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-
-		</view>
-	</mode>
-
-</device>
-
diff --git a/simulator/app/assets/htc-tornado/pause-play.png b/simulator/app/assets/htc-tornado/pause-play.png
deleted file mode 100644
index ae74d9f..0000000
--- a/simulator/app/assets/htc-tornado/pause-play.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/phone-dial.png b/simulator/app/assets/htc-tornado/phone-dial.png
deleted file mode 100644
index 30bdf9e..0000000
--- a/simulator/app/assets/htc-tornado/phone-dial.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/phone-hangup.png b/simulator/app/assets/htc-tornado/phone-hangup.png
deleted file mode 100644
index 68fe47b..0000000
--- a/simulator/app/assets/htc-tornado/phone-hangup.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/pound.png b/simulator/app/assets/htc-tornado/pound.png
deleted file mode 100644
index 92e49cb..0000000
--- a/simulator/app/assets/htc-tornado/pound.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/select.png b/simulator/app/assets/htc-tornado/select.png
deleted file mode 100644
index a89db9a..0000000
--- a/simulator/app/assets/htc-tornado/select.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/skip-backward.png b/simulator/app/assets/htc-tornado/skip-backward.png
deleted file mode 100644
index 263b3d6..0000000
--- a/simulator/app/assets/htc-tornado/skip-backward.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/skip-forward.png b/simulator/app/assets/htc-tornado/skip-forward.png
deleted file mode 100644
index e069db1..0000000
--- a/simulator/app/assets/htc-tornado/skip-forward.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/soft-left.png b/simulator/app/assets/htc-tornado/soft-left.png
deleted file mode 100644
index ab6dff1..0000000
--- a/simulator/app/assets/htc-tornado/soft-left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/soft-right.png b/simulator/app/assets/htc-tornado/soft-right.png
deleted file mode 100644
index 590982e..0000000
--- a/simulator/app/assets/htc-tornado/soft-right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/htc-tornado/star.png b/simulator/app/assets/htc-tornado/star.png
deleted file mode 100644
index 9b7d79a..0000000
--- a/simulator/app/assets/htc-tornado/star.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/back.png b/simulator/app/assets/motorola-q/back.png
deleted file mode 100644
index 6be2512..0000000
--- a/simulator/app/assets/motorola-q/back.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/background.png b/simulator/app/assets/motorola-q/background.png
deleted file mode 100644
index d9b30ad..0000000
--- a/simulator/app/assets/motorola-q/background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/down.png b/simulator/app/assets/motorola-q/down.png
deleted file mode 100644
index bbe3a18..0000000
--- a/simulator/app/assets/motorola-q/down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/end.png b/simulator/app/assets/motorola-q/end.png
deleted file mode 100644
index daff163..0000000
--- a/simulator/app/assets/motorola-q/end.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/home.png b/simulator/app/assets/motorola-q/home.png
deleted file mode 100644
index 4f65f91..0000000
--- a/simulator/app/assets/motorola-q/home.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/layout.xml b/simulator/app/assets/motorola-q/layout.xml
deleted file mode 100644
index c48bce6..0000000
--- a/simulator/app/assets/motorola-q/layout.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2006 The Android Open Source Project -->
-
-<device name="MotorolaQ">
-    <!-- title for menus -->
-    <title>Motorola Q</title>
-
-    <display name="main" width="320" height="240" format="rgb565" refresh="30"/>
-
-	<keyboard qwerty="1" />
-	
-    <mode name="default">
-        <!-- hiptop when closed -->
-        <view display="main" x="58" y="121" rotate="0">
-
-            <!-- surrounding device image and "patches", drawn in order -->
-            <image src="background.png" x="0" y="0"/>
-
-			<!-- buttons for which we have highlight images -->
-			<button keyCode="soft-left"     src="menu-left.png"     x="35"  y="385"/>
-			<button keyCode="soft-right"    src="menu-right.png"    x="270" y="385"/>
-			<button keyCode="home"          src="home.png"          x="92"  y="425"/>
-			<button keyCode="back"          src="back.png"          x="264" y="425"/>
- 			<button keyCode="dpad-up"       src="up.png"            x="166" y="400"/>
-			<button keyCode="dpad-down"     src="down.png"          x="166" y="444"/>
-			<button keyCode="dpad-left"     src="left.png"          x="158" y="406"/>
-			<button keyCode="dpad-right"    src="right.png"         x="224" y="406"/>
-			<button keyCode="dpad-center"   src="select.png"        x="194" y="419"/>
-
-			<button keyCode="phone-dial"	src="send.png"	        x="35"  y="421"/>
-			<button keyCode="phone-hangup"	src="end.png"	        x="333" y="422"/>
-        </view>
-    </mode>
-
-</device>
-
diff --git a/simulator/app/assets/motorola-q/left.png b/simulator/app/assets/motorola-q/left.png
deleted file mode 100644
index 3204f9b..0000000
--- a/simulator/app/assets/motorola-q/left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/menu-left.png b/simulator/app/assets/motorola-q/menu-left.png
deleted file mode 100644
index 4d1bc11..0000000
--- a/simulator/app/assets/motorola-q/menu-left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/menu-right.png b/simulator/app/assets/motorola-q/menu-right.png
deleted file mode 100644
index 58f31c6..0000000
--- a/simulator/app/assets/motorola-q/menu-right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/right.png b/simulator/app/assets/motorola-q/right.png
deleted file mode 100644
index b6190c9..0000000
--- a/simulator/app/assets/motorola-q/right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/select.png b/simulator/app/assets/motorola-q/select.png
deleted file mode 100644
index 343fb45..0000000
--- a/simulator/app/assets/motorola-q/select.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/send.png b/simulator/app/assets/motorola-q/send.png
deleted file mode 100644
index b3ebcd5..0000000
--- a/simulator/app/assets/motorola-q/send.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/motorola-q/up.png b/simulator/app/assets/motorola-q/up.png
deleted file mode 100644
index 7df6736..0000000
--- a/simulator/app/assets/motorola-q/up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/arrow-down.png b/simulator/app/assets/panasonic-x70/arrow-down.png
deleted file mode 100644
index 7ab16b4..0000000
--- a/simulator/app/assets/panasonic-x70/arrow-down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/arrow-up.png b/simulator/app/assets/panasonic-x70/arrow-up.png
deleted file mode 100644
index 6fb2454..0000000
--- a/simulator/app/assets/panasonic-x70/arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/back.png b/simulator/app/assets/panasonic-x70/back.png
deleted file mode 100644
index 04b91ef..0000000
--- a/simulator/app/assets/panasonic-x70/back.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/background.png b/simulator/app/assets/panasonic-x70/background.png
deleted file mode 100644
index 25bc3eb..0000000
--- a/simulator/app/assets/panasonic-x70/background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/home.png b/simulator/app/assets/panasonic-x70/home.png
deleted file mode 100644
index 12ac7bb..0000000
--- a/simulator/app/assets/panasonic-x70/home.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/layout.xml b/simulator/app/assets/panasonic-x70/layout.xml
deleted file mode 100644
index 0cb8bbd..0000000
--- a/simulator/app/assets/panasonic-x70/layout.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2005 The Android Open Source Project -->
-
-<device name="PanasonicX70">
-    <!-- title for menus -->
-    <title>Panasonic X70</title>
-
-    <display name="main" width="176" height="220" format="rgb565" refresh="30"/>
-
-	<mode name="default">
-		<!-- primary display characteristics -->
-		<view display="main" x="39" y="43" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-			<image src="background.png" x="0" y="0"/>
-
-			<button keyCode="soft-left"     src="soft-left.png"     x="45" y="324"/>
-			<button keyCode="soft-right"    src="soft-right.png"    x="146" y="324"/>
-			<button keyCode="home"          src="home.png"          x="21" y="345"/>
-			<button keyCode="back"          src="back.png"          x="180" y="347"/>
-			<button keyCode="dpad-up"       src="arrow-up.png"      x="88" y="348"/>
-			<button keyCode="dpad-down"     src="arrow-down.png"    x="95" y="414"/>
-            <button keyCode="dpad-left"/>
-            <button keyCode="dpad-right"/>
-			<button keyCode="dpad-center"   src="select.png"        x="101" y="377"/>
-
-            <button keyCode="1"/>
-            <button keyCode="2"/>
-            <button keyCode="3"/>
-            <button keyCode="4"/>
-            <button keyCode="5"/>
-            <button keyCode="6"/>
-            <button keyCode="7"/>
-            <button keyCode="8"/>
-            <button keyCode="9"/>
-            <button keyCode="0"/>
-            <button keyCode="star"/>
-            <button keyCode="pound"/>
-
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-
-		</view>
-	</mode>
-
-</device>
-
diff --git a/simulator/app/assets/panasonic-x70/select.png b/simulator/app/assets/panasonic-x70/select.png
deleted file mode 100644
index 993ecad..0000000
--- a/simulator/app/assets/panasonic-x70/select.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/soft-left.png b/simulator/app/assets/panasonic-x70/soft-left.png
deleted file mode 100644
index c384bb7..0000000
--- a/simulator/app/assets/panasonic-x70/soft-left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/panasonic-x70/soft-right.png b/simulator/app/assets/panasonic-x70/soft-right.png
deleted file mode 100644
index 948e40f..0000000
--- a/simulator/app/assets/panasonic-x70/soft-right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/0.png b/simulator/app/assets/samsung-flip-2005/0.png
deleted file mode 100644
index 839e6d1..0000000
--- a/simulator/app/assets/samsung-flip-2005/0.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/1.png b/simulator/app/assets/samsung-flip-2005/1.png
deleted file mode 100644
index 499cf6c..0000000
--- a/simulator/app/assets/samsung-flip-2005/1.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/2.png b/simulator/app/assets/samsung-flip-2005/2.png
deleted file mode 100644
index 93207cc..0000000
--- a/simulator/app/assets/samsung-flip-2005/2.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/3.png b/simulator/app/assets/samsung-flip-2005/3.png
deleted file mode 100644
index 499efdb..0000000
--- a/simulator/app/assets/samsung-flip-2005/3.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/4.png b/simulator/app/assets/samsung-flip-2005/4.png
deleted file mode 100644
index 775b15d..0000000
--- a/simulator/app/assets/samsung-flip-2005/4.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/5.png b/simulator/app/assets/samsung-flip-2005/5.png
deleted file mode 100644
index b8a5723..0000000
--- a/simulator/app/assets/samsung-flip-2005/5.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/6.png b/simulator/app/assets/samsung-flip-2005/6.png
deleted file mode 100644
index b6e0de9..0000000
--- a/simulator/app/assets/samsung-flip-2005/6.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/7.png b/simulator/app/assets/samsung-flip-2005/7.png
deleted file mode 100644
index 5416186..0000000
--- a/simulator/app/assets/samsung-flip-2005/7.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/8.png b/simulator/app/assets/samsung-flip-2005/8.png
deleted file mode 100644
index 2dfcae3..0000000
--- a/simulator/app/assets/samsung-flip-2005/8.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/9.png b/simulator/app/assets/samsung-flip-2005/9.png
deleted file mode 100644
index 6c11eed..0000000
--- a/simulator/app/assets/samsung-flip-2005/9.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/abc.png b/simulator/app/assets/samsung-flip-2005/abc.png
deleted file mode 100644
index 9f43afe..0000000
--- a/simulator/app/assets/samsung-flip-2005/abc.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/arrow-down.png b/simulator/app/assets/samsung-flip-2005/arrow-down.png
deleted file mode 100644
index 0f7ea7b..0000000
--- a/simulator/app/assets/samsung-flip-2005/arrow-down.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/arrow-left.png b/simulator/app/assets/samsung-flip-2005/arrow-left.png
deleted file mode 100644
index ad1982f..0000000
--- a/simulator/app/assets/samsung-flip-2005/arrow-left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/arrow-right.png b/simulator/app/assets/samsung-flip-2005/arrow-right.png
deleted file mode 100644
index bf9cf48..0000000
--- a/simulator/app/assets/samsung-flip-2005/arrow-right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/arrow-up.png b/simulator/app/assets/samsung-flip-2005/arrow-up.png
deleted file mode 100644
index ab62e33..0000000
--- a/simulator/app/assets/samsung-flip-2005/arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/back-background.png b/simulator/app/assets/samsung-flip-2005/back-background.png
deleted file mode 100644
index 741db99..0000000
--- a/simulator/app/assets/samsung-flip-2005/back-background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/back.png b/simulator/app/assets/samsung-flip-2005/back.png
deleted file mode 100644
index 9eb9a17..0000000
--- a/simulator/app/assets/samsung-flip-2005/back.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/background-176_208.png b/simulator/app/assets/samsung-flip-2005/background-176_208.png
deleted file mode 100644
index 1ed1248..0000000
--- a/simulator/app/assets/samsung-flip-2005/background-176_208.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/background-176x220.png b/simulator/app/assets/samsung-flip-2005/background-176x220.png
deleted file mode 100644
index 361304e..0000000
--- a/simulator/app/assets/samsung-flip-2005/background-176x220.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/clear.png b/simulator/app/assets/samsung-flip-2005/clear.png
deleted file mode 100644
index f9c421c..0000000
--- a/simulator/app/assets/samsung-flip-2005/clear.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/end.png b/simulator/app/assets/samsung-flip-2005/end.png
deleted file mode 100644
index 5d0056c..0000000
--- a/simulator/app/assets/samsung-flip-2005/end.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/home-background.png b/simulator/app/assets/samsung-flip-2005/home-background.png
deleted file mode 100644
index 3ceee9c..0000000
--- a/simulator/app/assets/samsung-flip-2005/home-background.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/home.png b/simulator/app/assets/samsung-flip-2005/home.png
deleted file mode 100644
index 8510b7e..0000000
--- a/simulator/app/assets/samsung-flip-2005/home.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/layout.xml b/simulator/app/assets/samsung-flip-2005/layout.xml
deleted file mode 100644
index 3bc2ddd..0000000
--- a/simulator/app/assets/samsung-flip-2005/layout.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2005 The Android Open Source Project -->
-
-<device name="Samsung1234">
-    <!-- title for menus -->
-    <title>Samsung Flip Phone</title>
-
-    <!-- primary display characteristics -->
-    <display name="main" width="176" height="220" format="rgb565" refresh="30"/>
-
-	<mode name="default">
-        <!-- our view of the device that shows the main display -->
-		<view display="main" x="49" y="73" rotate="0">
-
-			<!-- surrounding device image and "patches", drawn in order -->
-			<!-- (phone image is optional) -->
-			<image src="background-176x220.png" x="0" y="0"/>
-			<image src="home-background.png" x="22" y="426"/>
-			<image src="back-background.png" x="179" y="426"/>
-
-			<!-- buttons for which we have highlight images -->
-			<button keyCode="soft-left"     src="soft-left.png"     x="24" y="388"/>
-			<button keyCode="soft-right"    src="soft-right.png"    x="182" y="388"/>
-			<button keyCode="home"          src="home.png"          x="22" y="426"/>
-			<button keyCode="back"          src="back.png"          x="179" y="426"/>
-			<button keyCode="dpad-up"       src="arrow-up.png"      x="99" y="399"/>
-			<button keyCode="dpad-down"     src="arrow-down.png"    x="99" y="461"/>
-			<button keyCode="dpad-left"     src="arrow-left.png"    x="82" y="411"/>
-			<button keyCode="dpad-right"    src="arrow-right.png"   x="147" y="411"/>
-			<button keyCode="dpad-center"   src="select.png"        x="115" y="431"/>
-
-			<button keyCode="1"             src="1.png"             x="24" y="533"/>
-			<button keyCode="2"             src="2.png"             x="94" y="544"/>
-			<button keyCode="3"             src="3.png"             x="173" y="534"/>
-			<button keyCode="4"             src="4.png"             x="25" y="576"/>
-			<button keyCode="5"             src="5.png"             x="94" y="581"/>
-			<button keyCode="6"             src="6.png"             x="172" y="576"/>
-			<button keyCode="7"             src="7.png"             x="27" y="619"/>
-			<button keyCode="8"             src="8.png"             x="95" y="621"/>
-			<button keyCode="9"             src="9.png"             x="168" y="620"/>
-			<button keyCode="0"             src="0.png"             x="96" y="658"/>
-			<button keyCode="star"          src="star.png"          x="31" y="659"/>
-			<button keyCode="pound"         src="pound.png"         x="169" y="659"/>
-
-            <!-- buttons we haven't bothered to create highlight images for,
-                 or that aren't visible on-screen -->
-			<button keyCode="volume-up"/>
-			<button keyCode="volume-down"/>
-			<button keyCode="power"/>
-			<button keyCode="clear"/>
-
-		</view>
-	</mode>
-
-</device>
-
diff --git a/simulator/app/assets/samsung-flip-2005/menu.png b/simulator/app/assets/samsung-flip-2005/menu.png
deleted file mode 100644
index 7ac077c..0000000
--- a/simulator/app/assets/samsung-flip-2005/menu.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/pound.png b/simulator/app/assets/samsung-flip-2005/pound.png
deleted file mode 100644
index 22440bc..0000000
--- a/simulator/app/assets/samsung-flip-2005/pound.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/select.png b/simulator/app/assets/samsung-flip-2005/select.png
deleted file mode 100644
index 1c735f8..0000000
--- a/simulator/app/assets/samsung-flip-2005/select.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/send.png b/simulator/app/assets/samsung-flip-2005/send.png
deleted file mode 100644
index 23cea52..0000000
--- a/simulator/app/assets/samsung-flip-2005/send.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/soft-left.png b/simulator/app/assets/samsung-flip-2005/soft-left.png
deleted file mode 100644
index 224d281..0000000
--- a/simulator/app/assets/samsung-flip-2005/soft-left.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/soft-right.png b/simulator/app/assets/samsung-flip-2005/soft-right.png
deleted file mode 100644
index a8eec97..0000000
--- a/simulator/app/assets/samsung-flip-2005/soft-right.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/assets/samsung-flip-2005/star.png b/simulator/app/assets/samsung-flip-2005/star.png
deleted file mode 100644
index 457348d..0000000
--- a/simulator/app/assets/samsung-flip-2005/star.png
+++ /dev/null
Binary files differ
diff --git a/simulator/app/executablepath.h b/simulator/app/executablepath.h
deleted file mode 100644
index 889982d..0000000
--- a/simulator/app/executablepath.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SIM_EXECUTABLEPATH_H
-#define _SIM_EXECUTABLEPATH_H
-
-#include <limits.h>
-
-// returns the path to this executable
-#if __cplusplus
-extern "C"
-#endif
-void executablepath(char s[PATH_MAX]);
-
-#endif // _SIM_EXECUTABLEPATH_H
diff --git a/simulator/app/executablepath_darwin.cpp b/simulator/app/executablepath_darwin.cpp
deleted file mode 100644
index 9ec1c18..0000000
--- a/simulator/app/executablepath_darwin.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "executablepath.h"
-#import <Carbon/Carbon.h>
-#include <unistd.h>
-
-void executablepath(char s[PATH_MAX])
-{
-    ProcessSerialNumber psn;
-    GetCurrentProcess(&psn);
-    CFDictionaryRef dict;
-    dict = ProcessInformationCopyDictionary(&psn, 0xffffffff);
-    CFStringRef value = (CFStringRef)CFDictionaryGetValue(dict,
-                CFSTR("CFBundleExecutable"));
-    CFStringGetCString(value, s, PATH_MAX+1, kCFStringEncodingUTF8);
-}
-
diff --git a/simulator/app/executablepath_linux.cpp b/simulator/app/executablepath_linux.cpp
deleted file mode 100644
index e4a3a2b..0000000
--- a/simulator/app/executablepath_linux.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "executablepath.h"
-#include <sys/types.h>
-#include <unistd.h>
-#include <limits.h>
-#include <stdio.h>
-
-void executablepath(char exe[PATH_MAX])
-{
-    char proc[100];
-    sprintf(proc, "/proc/%d/exe", getpid());
-    
-    int err = readlink(proc, exe, PATH_MAX);
-}
-
diff --git a/simulator/app/help/unnamed.htb b/simulator/app/help/unnamed.htb
deleted file mode 100644
index 3933e69..0000000
--- a/simulator/app/help/unnamed.htb
+++ /dev/null
Binary files differ
diff --git a/simulator/app/ported.cpp b/simulator/app/ported.cpp
deleted file mode 100644
index 232b302..0000000
--- a/simulator/app/ported.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2005 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//
-// Ports of standard functions that don't exist on a specific platform.
-//
-// Note these are NOT in the "android" namespace.
-//
-#include "ported.h"
-
-#if defined(NEED_GETTIMEOFDAY) || defined(NEED_USLEEP)
-# include <sys/time.h>
-# include <windows.h>
-#endif
-
-
-#if defined(NEED_GETTIMEOFDAY)
-/*
- * Replacement gettimeofday() for Windows environments (primarily MinGW).
- *
- * Ignores "tz".
- */
-int gettimeofday(struct timeval* ptv, struct timezone* tz)
-{
-    long long nsTime;   // time in 100ns units since Jan 1 1601
-    FILETIME ft;
-
-    if (tz != NULL) {
-        // oh well
-    }
-
-    ::GetSystemTimeAsFileTime(&ft);
-    nsTime = (long long) ft.dwHighDateTime << 32 |
-             (long long) ft.dwLowDateTime;
-    // convert to time in usec since Jan 1 1970
-    ptv->tv_usec = (long) ((nsTime / 10LL) % 1000000LL);
-    ptv->tv_sec = (long) ((nsTime - 116444736000000000LL) / 10000000LL);
-
-    return 0;
-}
-#endif
-
-#if defined(NEED_USLEEP)
-//
-// Replacement usleep for Windows environments (primarily MinGW).
-//
-void usleep(unsigned long usec)
-{
-    // Win32 API function Sleep() takes milliseconds
-    ::Sleep((usec + 500) / 1000);
-}
-#endif
-
-#if 0 //defined(NEED_PIPE)
-//
-// Replacement pipe() command for MinGW
-//
-// The _O_NOINHERIT flag sets bInheritHandle to FALSE in the
-// SecurityAttributes argument to CreatePipe().  This means the handles
-// aren't inherited when a new process is created.  The examples I've seen
-// use it, possibly because there's a lot of junk going on behind the
-// scenes.  (I'm assuming "process" and "thread" are different here, so
-// we should be okay spinning up a thread.)  The recommended practice is
-// to dup() the descriptor you want the child to have.
-//
-// It appears that unnamed pipes can't do non-blocking ("overlapped") I/O.
-// You can't use select() either, since that only works on sockets.  The
-// Windows API calls that are useful here all operate on a HANDLE, not
-// an integer file descriptor, and I don't think you can get there from
-// here.  The "named pipe" stuff is insane.
-//
-int pipe(int filedes[2])
-{
-    return _pipe(filedes, 0, _O_BINARY | _O_NOINHERIT);
-}
-#endif
-
-#if defined(NEED_SETENV)
-/*
- * MinGW lacks these.  For now, just stub them out so the code compiles.
- */
-int setenv(const char* name, const char* value, int overwrite)
-{
-    return 0;
-}
-void unsetenv(const char* name)
-{
-}
-char* getenv(const char* name)
-{
-    return NULL;
-}
-#endif
diff --git a/simulator/app/ported.h b/simulator/app/ported.h
deleted file mode 100644
index eb3be01..0000000
--- a/simulator/app/ported.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2005 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//
-// Standard functions ported to the current platform.  Note these are NOT
-// in the "android" namespace.
-//
-#ifndef _LIBS_UTILS_PORTED_H
-#define _LIBS_UTILS_PORTED_H
-
-#include <sys/time.h>       // for timeval
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* library replacement functions */
-#if defined(NEED_GETTIMEOFDAY)
-int gettimeofday(struct timeval* tv, struct timezone* tz);
-#endif
-#if defined(NEED_USLEEP)
-void usleep(unsigned long usec);
-#endif
-#if defined(NEED_PIPE)
-int pipe(int filedes[2]);
-#endif
-#if defined(NEED_SETENV)
-int setenv(const char* name, const char* value, int overwrite);
-void unsetenv(const char* name);
-char* getenv(const char* name);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _LIBS_UTILS_PORTED_H
diff --git a/simulator/app/utils.h b/simulator/app/utils.h
deleted file mode 100644
index b74845f..0000000
--- a/simulator/app/utils.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2005 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//
-// Handy utility functions and portability code.  This file includes all
-// of the generally-useful headers in the "utils" directory.
-//
-#ifndef _SIM_UTILS_H
-#define _SIM_UTILS_H
-
-#include "ported.h"
-#include <utils/Log.h>
-#include <utils/threads.h>
-#include <utils/Timers.h>
-#include <utils/List.h>
-#include <utils/StringArray.h>
-#include <utils/misc.h>
-#include <utils/Errors.h>
-
-#endif // _SIM_UTILS_H
diff --git a/simulator/wrapsim/Android.mk b/simulator/wrapsim/Android.mk
deleted file mode 100644
index 7c2cbf2..0000000
--- a/simulator/wrapsim/Android.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 2007 The Android Open Source Project
-
-#
-# Build instructions for simulator LD_PRELOAD wrapper.
-#
-ifeq ($(TARGET_SIMULATOR),true)
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-	BitVector.c \
-	DevAudio.c \
-	DevConsoleTty.c \
-	DevEvent.c \
-	DevFb.c \
-	DevLog.c \
-	DevPower.c \
-	DevVibrator.c \
-	FakeDev.c \
-	Init.c \
-	Intercept.c \
-	Log.c \
-	SimMgr.c \
-	SysPower.c \
-	Util.c
-
-LOCAL_MODULE := libwrapsim
-
-# Relying on other Android libraries is probably a bad idea, since any
-# library or system calls they make could lead to recursive behavior.
-LOCAL_LDLIBS += -lpthread -ldl
-
-ifeq ($(BUILD_SIM_WITHOUT_AUDIO),true)
-LOCAL_CFLAGS += -DBUILD_SIM_WITHOUT_AUDIO=1
-else
-LOCAL_LDLIBS += -lasound
-endif
-
-include $(BUILD_SHARED_LIBRARY)
-
-
-
-#
-# Build instructions for simulator runtime launch wrapper.
-#
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-	LaunchWrapper.c
-
-LOCAL_MODULE := launch-wrapper
-include $(BUILD_EXECUTABLE)
-
-endif # ifeq ($(TARGET_SIMULATOR),true)
diff --git a/simulator/wrapsim/BitVector.c b/simulator/wrapsim/BitVector.c
deleted file mode 100644
index aaa1408..0000000
--- a/simulator/wrapsim/BitVector.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Simple bit vector.
- */
-#include "Common.h"
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <assert.h>
-
-#define kBitVectorGrowth    4   /* increase by 4 uint32_t when limit hit */
-
-
-/*
- * Allocate a bit vector with enough space to hold at least the specified
- * number of bits.
- */
-BitVector* wsAllocBitVector(int startBits, int isExpandable)
-{
-    BitVector* bv;
-    int count;
-
-    assert(sizeof(bv->storage[0]) == 4);        /* assuming 32-bit units */
-    assert(startBits > 0);
-
-    bv = (BitVector*) malloc(sizeof(BitVector));
-
-    count = (startBits + 31) >> 5;
-
-    bv->storageSize = count;
-    bv->isExpandable = isExpandable;
-    bv->storage = (uint32_t*) malloc(count * sizeof(uint32_t));
-    memset(bv->storage, 0xff, count * sizeof(uint32_t));
-    return bv;
-}
-
-/*
- * Free a BitVector.
- */
-void wsFreeBitVector(BitVector* pBits)
-{
-    if (pBits == NULL)
-        return;
-
-    free(pBits->storage);
-    free(pBits);
-}
-
-/*
- * "Allocate" the first-available bit in the bitmap.
- *
- * This is not synchronized.  The caller is expected to hold some sort of
- * lock that prevents multiple threads from executing simultaneously in
- * dvmAllocBit/dvmFreeBit.
- *
- * The bitmap indicates which resources are free, so we use '1' to indicate
- * available and '0' to indicate allocated.
- */
-int wsAllocBit(BitVector* pBits)
-{
-    int word, bit;
-
-retry:
-    for (word = 0; word < pBits->storageSize; word++) {
-        if (pBits->storage[word] != 0) {
-            /*
-             * There are unallocated bits in this word.  Return the first.
-             */
-            bit = ffs(pBits->storage[word]) -1;
-            assert(bit >= 0 && bit < 32);
-            pBits->storage[word] &= ~(1 << bit);
-            return (word << 5) | bit;
-        }
-    }
-
-    /*
-     * Ran out of space, allocate more if we're allowed to.
-     */
-    if (!pBits->isExpandable)
-        return -1;
-
-    pBits->storage = realloc(pBits->storage,
-                    (pBits->storageSize + kBitVectorGrowth) * sizeof(uint32_t));
-    memset(&pBits->storage[pBits->storageSize], 0xff,
-        kBitVectorGrowth * sizeof(uint32_t));
-    pBits->storageSize += kBitVectorGrowth;
-    goto retry;
-}
-
-/*
- * Mark the specified bit as "free".
- */
-void wsFreeBit(BitVector* pBits, int num)
-{
-    assert(num >= 0 &&
-           num < (int) pBits->storageSize * (int)sizeof(uint32_t) * 8);
-
-    pBits->storage[num >> 5] |= 1 << (num & 0x1f);
-}
-
diff --git a/simulator/wrapsim/BitVector.h b/simulator/wrapsim/BitVector.h
deleted file mode 100644
index 048cf91..0000000
--- a/simulator/wrapsim/BitVector.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Simple bit vector.
- */
-#ifndef _WRAPSIM_BITVECTOR_H
-#define _WRAPSIM_BITVECTOR_H
-
-#include <stdint.h>
-
-/*
- * Expanding bitmap, used for tracking resources.  Bits are numbered starting
- * from zero.
- */
-typedef struct BitVector {
-    int         isExpandable;   /* expand bitmap if we run out? */
-    int         storageSize;    /* current size, in 32-bit words */
-    uint32_t*   storage;
-} BitVector;
-
-/* allocate a bit vector with enough space to hold "startBits" bits */
-BitVector* wsAllocBitVector(int startBits, int isExpandable);
-void wsFreeBitVector(BitVector* pBits);
-
-/*
- * Set/clear a single bit; assumes external synchronization.
- *
- * We always allocate the first possible bit.  If we run out of space in
- * the bitmap, and it's not marked expandable, dvmAllocBit returns -1.
- */
-int wsAllocBit(BitVector* pBits);
-void wsFreeBit(BitVector* pBits, int num);
-
-#endif /*_WRAPSIM_BITVECTOR_H*/
diff --git a/simulator/wrapsim/Common.h b/simulator/wrapsim/Common.h
deleted file mode 100644
index 463262f..0000000
--- a/simulator/wrapsim/Common.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Common defines and includes.
- */
-#ifndef _WRAPSIM_COMMON_H
-#define _WRAPSIM_COMMON_H
-
-#include <unistd.h>
-#include <sys/types.h>
-
-#include "BitVector.h"
-#include "FakeDev.h"
-#include "Log.h"
-#include "SimMgr.h"
-#include "Globals.h"
-#include "Util.h"
-
-#endif /*_WRAPSIM_COMMON_H*/
diff --git a/simulator/wrapsim/DevAudio.c b/simulator/wrapsim/DevAudio.c
deleted file mode 100644
index a8f5c16..0000000
--- a/simulator/wrapsim/DevAudio.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Audio output device.
- */
-#include "Common.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <alsa/asoundlib.h>
-
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <linux/input.h>
-
-
-/*
- * Input event device state.
- */
-typedef struct AudioState {
-    snd_pcm_t *handle;
-} AudioState;
-
-/*
- * Set some stuff up.
- */
-static int configureInitialState(const char* pathName, AudioState* audioState)
-{
-#if BUILD_SIM_WITHOUT_AUDIO
-    return 0;
-#else
-    audioState->handle = NULL;
-
-    snd_pcm_open(&audioState->handle, "default", SND_PCM_STREAM_PLAYBACK, 0);
-
-    if (audioState->handle) {
-        snd_pcm_hw_params_t *params;
-        snd_pcm_hw_params_malloc(&params);
-        snd_pcm_hw_params_any(audioState->handle, params);
-        snd_pcm_hw_params_set_access(audioState->handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);
-        snd_pcm_hw_params_set_format(audioState->handle, params, SND_PCM_FORMAT_S16_LE);
-        unsigned int rate = 44100;
-        snd_pcm_hw_params_set_rate_near(audioState->handle, params, &rate, NULL);
-        snd_pcm_hw_params_set_channels(audioState->handle, params, 2);
-        snd_pcm_hw_params(audioState->handle, params);
-        snd_pcm_hw_params_free(params);
-    } else {
-        wsLog("Couldn't open audio hardware, faking it\n");
-    }
-
-    return 0;
-#endif
-}
-
-/*
- * Write audio data.
- */
-static ssize_t writeAudio(FakeDev* dev, int fd, const void* buf, size_t count)
-{
-#if BUILD_SIM_WITHOUT_AUDIO
-    return 0;
-#else
-    AudioState *state = (AudioState*)dev->state;
-    if (state->handle != NULL) {
-        snd_pcm_writei(state->handle, buf, count / 4);
-        return count;
-    }
-
-    // fake timing
-    usleep(count * 10000 / (441 * 4));
-    return count;
-#endif
-}
-
-/*
- * Handle event ioctls.
- */
-static int ioctlAudio(FakeDev* dev, int fd, int request, void* argp)
-{
-    return -1;
-}
-
-/*
- * Free up our state before closing down the fake descriptor.
- */
-static int closeAudio(FakeDev* dev, int fd)
-{
-#if BUILD_SIM_WITHOUT_AUDIO
-    return 0;
-#else
-    AudioState *state = (AudioState*)dev->state;
-    snd_pcm_close(state->handle);
-    free(state);
-    dev->state = NULL;
-    return 0;
-#endif
-}
-
-/*
- * Open an audio output device.
- */
-FakeDev* wsOpenDevAudio(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->write = writeAudio;
-        newDev->ioctl = ioctlAudio;
-        newDev->close = closeAudio;
-
-        AudioState* eventState = calloc(1, sizeof(AudioState));
-
-        if (configureInitialState(pathName, eventState) != 0) {
-            free(eventState);
-            return NULL;
-        }
-        newDev->state = eventState;
-    }
-
-    return newDev;
-}
diff --git a/simulator/wrapsim/DevConsoleTty.c b/simulator/wrapsim/DevConsoleTty.c
deleted file mode 100644
index 166d648..0000000
--- a/simulator/wrapsim/DevConsoleTty.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Console tty device.
- */
-#include "Common.h"
-
-#include <string.h>
-
-#include <sys/ioctl.h>
-#include <linux/vt.h>
-
-
-/*
- * Handle the various console ioctls, most of which we can just ignore.
- */
-static int ioctlConsoleTty(FakeDev* dev, int fd, int request, void* argp)
-{
-    wsLog("%s: ioctl(0x%x, %p)\n", dev->debugName, request, argp);
-    switch (request) {
-    case VT_GETSTATE:       // struct vt_stat*
-        /*
-         * Looks like they want vs.v_active.  This just gets fed back into
-         * another console ioctl, so we don't really need to do anything.
-         * We zero out the struct so the data will at least appear to be
-         * initialized.
-         */
-        memset(argp, 0, sizeof(struct vt_stat));
-        break;
-    case VT_OPENQRY:        // int*
-        /* they want the console number */
-        *(int*)argp = 123;
-        break;
-    default:
-        /* ignore anything we don't understand */
-        break;
-    }
-
-    return 0;
-}
-
-/*
- * Open the console TTY device, which responds to a collection of ioctl()s.
- */
-FakeDev* wsOpenDevConsoleTty(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->ioctl = ioctlConsoleTty;
-    }
-    return newDev;
-}
-
diff --git a/simulator/wrapsim/DevEvent.c b/simulator/wrapsim/DevEvent.c
deleted file mode 100644
index 60060f4..0000000
--- a/simulator/wrapsim/DevEvent.c
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Input event device.
- */
-#include "Common.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <linux/input.h>
-
-
-/*
- * Input event device state.
- */
-typedef struct EventState {
-    struct input_id ident;
-
-    char*   name;
-    char*   location;
-    char*   idstr;
-    int     protoVersion;
-} EventState;
-
-/*
- * Key bit mask, for EVIOCGBIT(EV_KEY).
- *
- * (For now, just pretend to be a "goldfish" like the emulator.)
- */
-static const unsigned char gKeyBitMask[64] = {
-    // These bits indicate which keys the device has
-    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-    // These bits indicate other capabilities, such
-    // as whether it's a trackball or a touchscreen
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // touchscreen
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/*
- * Abs bit mask, for EVIOCGBIT(EV_ABS).
- *
- * Pretend to be a normal single touch panel
- */
-static const unsigned char gAbsBitMask[64] = {
-    // these bits indicate the capabilities of the touch screen
-    0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ABS_X, ABS_Y
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/*
- * Set some stuff up.
- */
-static void configureInitialState(const char* pathName, EventState* eventState)
-{
-    /*
-     * Swim like a goldfish.
-     */
-    eventState->ident.bustype = 0;
-    eventState->ident.vendor = 0;
-    eventState->ident.product = 0;
-    eventState->ident.version = 0;
-
-    eventState->name = strdup(gWrapSim.keyMap);
-    eventState->location = strdup("");
-    eventState->idstr = strdup("");
-    eventState->protoVersion = 0x010000;
-}
-
-/*
- * Free up the state structure.
- */
-static void freeState(EventState* eventState)
-{
-    if (eventState != NULL) {
-        free(eventState->name);
-        free(eventState->location);
-        free(eventState->idstr);
-        free(eventState);
-    }
-}
-
-/*
- * Handle one of the EVIOCGABS requests.
- *
- * Currently not doing much here.
- */
-static void handleAbsGet(int reqIdx, void* argp)
-{
-    struct input_absinfo info;
-
-    switch (reqIdx) {
-    case ABS_X:
-        wsLog("  req for abs X\n");
-        break;
-    case ABS_Y:
-        wsLog("  req for abs Y\n");
-        break;
-    case ABS_PRESSURE:
-        wsLog("  req for abs PRESSURE\n");
-        break;
-    case ABS_TOOL_WIDTH:
-        wsLog("  req for abs TOOL_WIDTH\n");
-        break;
-    default:
-        wsLog("  req for unexpected event abs 0x%02x\n", reqIdx);
-        break;
-    }
-
-    memset(&info, 0, sizeof(info));
-    memcpy(argp, &info, sizeof(struct input_absinfo));
-}
-
-/*
- * Return the next available input event.
- *
- * We just pass this through to the real "read", since "fd" is real.
- */
-static ssize_t readEvent(FakeDev* dev, int fd, void* buf, size_t count)
-{
-    return _ws_read(fd, buf, count);
-}
-
-/*
- * Somebody is trying to write to the event pipe.  This can be used to set
- * the state of LED.
- */
-static ssize_t writeEvent(FakeDev* dev, int fd, const void* buf, size_t count)
-{
-    const struct input_event* piev;
-
-    if (count == sizeof(*piev)) {
-        piev = (const struct input_event*) buf;
-
-        if (piev->type == EV_LED) {
-            wsLog("%s: set LED code=%d value=%d\n",
-                dev->debugName, piev->code, piev->value);
-        } else {
-            wsLog("%s: writeEvent got %d bytes, type=%d\n",
-                dev->debugName, count, piev->type);
-        }
-    } else {
-        wsLog("%s: warning: writeEvent got %d bytes, not sure why\n",
-            dev->debugName, count);
-    }
-
-    return count;
-}
-
-/*
- * Handle event ioctls.
- */
-static int ioctlEvent(FakeDev* dev, int fd, int request, void* argp)
-{
-    EventState* state = (EventState*) dev->state;
-    unsigned int urequest = (unsigned int) request;
-
-    wsLog("%s: ioctl(0x%x, %p)\n", dev->debugName, urequest, argp);
-
-    if (_IOC_TYPE(urequest) != _IOC_TYPE(EVIOCGVERSION)) {
-        wsLog("%s: inappropriate ioctl 0x%08x\n", dev->debugName, urequest);
-        return -1;
-    }
-
-    if (urequest == EVIOCGVERSION) {
-        *(int*)argp = state->protoVersion;
-    } else if (urequest == EVIOCGID) {
-        memcpy(argp, &state->ident, sizeof(struct input_id));
-    } else if (_IOC_NR(urequest) == _IOC_NR(EVIOCGNAME(0))) {
-        int maxLen = _IOC_SIZE(urequest);
-        int strLen = (int) strlen(state->name);
-        if (strLen >= maxLen) {
-            errno = EINVAL;
-            return -1;
-        }
-        memcpy(argp, state->name, strLen+1);
-        return strLen;
-    } else if (_IOC_NR(urequest) == _IOC_NR(EVIOCGPHYS(0))) {
-        int maxLen = _IOC_SIZE(urequest);
-        int strLen = (int) strlen(state->location);
-        if (strLen >= maxLen) {
-            errno = EINVAL;
-            return -1;
-        }
-        memcpy(argp, state->location, strLen+1);
-        return strLen;
-    } else if (_IOC_NR(urequest) == _IOC_NR(EVIOCGUNIQ(0))) {
-        /* device doesn't seem to support this, neither will we */
-        return -1;
-    } else if (_IOC_NR(urequest) == _IOC_NR(EVIOCGBIT(EV_KEY,0))) {
-        /* keys */
-        int maxLen = _IOC_SIZE(urequest);
-        if (maxLen > (int) sizeof(gKeyBitMask))
-            maxLen = sizeof(gKeyBitMask);
-        memcpy(argp, gKeyBitMask, maxLen);
-    } else if (_IOC_NR(urequest) == _IOC_NR(EVIOCGBIT(EV_REL,0))) {
-        /* relative controllers (trackball) */
-        int maxLen = _IOC_SIZE(urequest);
-        memset(argp, 0xff, maxLen);
-    } else if (!getenv("NOTOUCH") && _IOC_NR(urequest) == _IOC_NR(EVIOCGBIT(EV_ABS,0))) {
-        // absolute controllers (touch screen)
-        int maxLen = _IOC_SIZE(urequest);
-        if (maxLen > (int) sizeof(gAbsBitMask))
-            maxLen = sizeof(gAbsBitMask);
-        memcpy(argp, gAbsBitMask, maxLen);
-
-    } else if (_IOC_NR(urequest) >= _IOC_NR(EVIOCGABS(ABS_X)) &&
-               _IOC_NR(urequest) <= _IOC_NR(EVIOCGABS(ABS_MAX)))
-    {
-        /* get abs value / limits */
-        int reqIdx = _IOC_NR(urequest) - _IOC_NR(EVIOCGABS(ABS_X));
-        handleAbsGet(reqIdx, argp);
-    } else {
-        wsLog("GLITCH: UNKNOWN ioctl request 0x%x on %s\n",
-            urequest, dev->debugName);
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Free up our state before closing down the fake descriptor.
- */
-static int closeEvent(FakeDev* dev, int fd)
-{
-    freeState((EventState*)dev->state);
-    dev->state = NULL;
-    if (gWrapSim.keyInputDevice == dev) {
-        gWrapSim.keyInputDevice = NULL;
-        wsLog("Sim input device closed\n");
-    }
-    return 0;
-}
-
-/*
- * Open an input event device.
- */
-FakeDev* wsOpenDevEvent(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateRealFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->read = readEvent;
-        newDev->write = writeEvent;
-        newDev->ioctl = ioctlEvent;
-        newDev->close = closeEvent;
-
-        EventState* eventState = calloc(1, sizeof(EventState));
-
-        configureInitialState(pathName, eventState);
-        newDev->state = eventState;
-
-        /*
-         * First one opened becomes the place where we queue up input
-         * events from the simulator.  This approach will fail if the
-         * app opens the device, then opens it a second time for input,
-         * then closes the first.  The app doesn't currently do this (though
-         * it does do quick opens to fiddle with LEDs).
-         */
-        if (gWrapSim.keyInputDevice == NULL) {
-            gWrapSim.keyInputDevice = newDev;
-            wsLog("Device %p / %d will receive sim input events\n",
-                newDev, newDev->fd);
-        }
-    }
-
-    return newDev;
-}
-
-/*
- * Write a key event.
- */
-static int sendKeyEvent(FakeDev* dev, int code, int isDown)
-{
-    struct input_event iev;
-    ssize_t actual;
-
-    gettimeofday(&iev.time, NULL);
-    iev.type = EV_KEY;
-    iev.code = code;
-    iev.value = (isDown != 0) ? 1 : 0;
-
-    actual = _ws_write(dev->otherFd, &iev, sizeof(iev));
-    if (actual != (ssize_t) sizeof(iev)) {
-        wsLog("WARNING: send key event partial write (%d of %d)\n",
-            actual, sizeof(iev));
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Write an absolute (touch screen) event.
- */
-static int sendAbsButton(FakeDev* dev, int x, int y, int isDown)
-{
-    struct input_event iev;
-    ssize_t actual;
-
-    wsLog("absButton x=%d y=%d down=%d\n", x, y, isDown);
-
-    gettimeofday(&iev.time, NULL);
-    iev.type = EV_KEY;
-    iev.code = BTN_TOUCH;
-    iev.value = (isDown != 0) ? 1 : 0;
-
-    actual = _ws_write(dev->otherFd, &iev, sizeof(iev));
-    if (actual != (ssize_t) sizeof(iev)) {
-        wsLog("WARNING: send touch event partial write (%d of %d)\n",
-            actual, sizeof(iev));
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Write an absolute (touch screen) event.
- */
-static int sendAbsMovement(FakeDev* dev, int x, int y)
-{
-    struct input_event iev;
-    ssize_t actual;
-
-    wsLog("absMove x=%d y=%d\n", x, y);
-
-    gettimeofday(&iev.time, NULL);
-    iev.type = EV_ABS;
-    iev.code = ABS_X;
-    iev.value = x;
-
-    actual = _ws_write(dev->otherFd, &iev, sizeof(iev));
-    if (actual != (ssize_t) sizeof(iev)) {
-        wsLog("WARNING: send abs movement event partial X write (%d of %d)\n",
-            actual, sizeof(iev));
-        return -1;
-    }
-
-    iev.code = ABS_Y;
-    iev.value = y;
-
-    actual = _ws_write(dev->otherFd, &iev, sizeof(iev));
-    if (actual != (ssize_t) sizeof(iev)) {
-        wsLog("WARNING: send abs movement event partial Y write (%d of %d)\n",
-            actual, sizeof(iev));
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Not quite sure what this is for, but the emulator does it.
- */
-static int sendAbsSyn(FakeDev* dev)
-{
-    struct input_event iev;
-    ssize_t actual;
-
-    gettimeofday(&iev.time, NULL);
-    iev.type = EV_SYN;
-    iev.code = 0;
-    iev.value = 0;
-
-    actual = _ws_write(dev->otherFd, &iev, sizeof(iev));
-    if (actual != (ssize_t) sizeof(iev)) {
-        wsLog("WARNING: send abs movement syn (%d of %d)\n",
-            actual, sizeof(iev));
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Send a key event to the fake key event device.
- *
- * We have to translate the simulator key event into one or more device
- * key events.
- */
-void wsSendSimKeyEvent(int key, int isDown)
-{
-    FakeDev* dev;
-    EventState* state;
-
-    dev = gWrapSim.keyInputDevice;
-    if (dev == NULL)
-        return;
-
-    sendKeyEvent(dev, key, isDown);
-}
-
-/*
- * Send a touch-screen event to the fake key event device.
- *
- * We have to translate the simulator key event into one or more device
- * key events.
- */
-void wsSendSimTouchEvent(int action, int x, int y)
-{
-    FakeDev* dev;
-    EventState* state;
-
-    dev = gWrapSim.keyInputDevice;
-    if (dev == NULL)
-        return;
-
-    if (action == kTouchDown) {
-        sendAbsMovement(dev, x, y);
-        sendAbsButton(dev, x, y, 1);
-        sendAbsSyn(dev);
-    } else if (action == kTouchUp) {
-        sendAbsButton(dev, x, y, 0);
-        sendAbsSyn(dev);
-    } else if (action == kTouchDrag) {
-        sendAbsMovement(dev, x, y);
-        sendAbsSyn(dev);
-    } else {
-        wsLog("WARNING: unexpected sim touch action  %d\n", action);
-    }
-}
-
diff --git a/simulator/wrapsim/DevFb.c b/simulator/wrapsim/DevFb.c
deleted file mode 100644
index bfdbb22..0000000
--- a/simulator/wrapsim/DevFb.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Fake device support.
- */
-#include "Common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include <sys/mman.h>
-#include <sys/ioctl.h>
-#include <linux/fb.h>
-
-typedef struct FbState {
-
-    /* refcount for dup() */
-    int refCount;
-
-    /* index into gWrapSim.display[] */
-    int     displayIdx;
-
-    /* VRAM address, set by mmap() call */
-    void*   vramAddr;
-
-    /* kernel data structures */
-    struct fb_var_screeninfo    vinfo;
-    struct fb_fix_screeninfo    finfo;
-} FbState;
-
-
-/*
- * Set up the initial values of the structs.
- *
- * The FbState struct is zeroed out initially, so we only need to set the
- * fields that don't default to zero.
- */
-static void configureInitialState(int displayIdx, FbState* fbState)
-{
-    int width, height;
-
-    assert(displayIdx >= 0 && displayIdx < gWrapSim.numDisplays);
-
-    width = gWrapSim.display[displayIdx].width;
-    height = gWrapSim.display[displayIdx].height;
-    wsLog("Configuring FbState for display %d (%dx%x key=0x%08x)\n",
-        displayIdx, width, height, gWrapSim.display[displayIdx].shmemKey);
-
-    /* fb_fix_screeninfo */
-    strcpy(fbState->finfo.id, "omapfb");
-    fbState->finfo.smem_len = (width * 2) * height * 2;
-    fbState->finfo.line_length = width * 2;
-
-    /* fb_var_screeninfo */
-    fbState->vinfo.xres = width;
-    fbState->vinfo.yres = height;
-    fbState->vinfo.xres_virtual = width;
-    fbState->vinfo.yres_virtual = height * 2;
-    fbState->vinfo.bits_per_pixel = 16;
-
-    fbState->vinfo.red.offset = 11;
-    fbState->vinfo.red.length = 5;
-    fbState->vinfo.green.offset = 5;
-    fbState->vinfo.green.length = 6;
-    fbState->vinfo.blue.offset = 0;
-    fbState->vinfo.blue.length = 5;
-
-    fbState->vinfo.width = 51;           // physical dimension, used for dpi
-    fbState->vinfo.height = 76;
-
-    fbState->vinfo.pixclock = 103092;    
-    fbState->vinfo.upper_margin = 3;
-    fbState->vinfo.lower_margin = 227;
-    fbState->vinfo.left_margin = 12;
-    fbState->vinfo.right_margin = 8;
-}
-
-/*
- * Free allocated state.
- */
-static void freeState(FbState* fbState)
-{
-    int oldcount;
-
-    oldcount = wsAtomicAdd(&fbState->refCount, -1);
-
-    if (oldcount == 0) {
-        free(fbState);
-    }
-}
-
-/*
- * Wait for our synthetic vsync to happen.
- */
-static void waitForVsync(FbState* state)
-{
-    /* TODO: simulate a real interval */
-    usleep(1000000/60);
-}
-
-/*
- * Forward pixels to the simulator.
- */
-static void sendPixelsToSim(FbState* state)
-{
-    if (state->vramAddr == 0) {
-        wsLog("## not sending pixels (no addr yet)\n");
-        return;
-    }
-
-    //wsLog("+++ sending pixels to sim (disp=%d yoff=%d)\n",
-    //    state->displayIdx, state->vinfo.yoffset);
-
-    wsLockDisplay(state->displayIdx);
-
-    uint8_t* dst = gWrapSim.display[state->displayIdx].addr;
-
-    int l,t,r,b,w,h;
-    w = gWrapSim.display[state->displayIdx].width;
-    h = gWrapSim.display[state->displayIdx].height;
-
-#if 0
-    /*
-     * TODO: surfaceflinger encodes the dirty region in vinfo.reserved[].  We
-     * can use that to perform a partial update.
-     */
-    const Rect dirty(dirtyReg.bounds());
-    l = dirty.left  >=0 ? dirty.left : 0;
-    t = dirty.top   >=0 ? dirty.top  : 0;
-    r = dirty.right <=w ? dirty.right  : w;
-    b = dirty.bottom<=h ? dirty.bottom : h;
-#else
-    l = t = 0;
-    r = w;
-    b = h;
-#endif
-
-    /* find the right page */
-    int ypage = state->vinfo.yoffset;
-
-    int x, y;
-    for (y = t ; y < b ; y++) {
-        // no "stride" issues with this display
-        uint8_t* outPtr = dst + (y*w+l)*3;
-        const uint16_t* ptr16 = (uint16_t*)state->vramAddr + ((y+ypage)*w+l);
-        for (x = l; x < r; x++) {
-            uint16_t in = *ptr16++;
-            uint32_t R,G,B;
-            R = ((in>>8)&0xF8) | (in>>(8+5));
-            G = (in & 0x7E0)>>3;
-            G |= G>>6;
-            B = (in & 0x1F)<<3;
-            B |= B>>5;
-            *outPtr++ = R;
-            *outPtr++ = G;
-            *outPtr++ = B;
-        }
-    }
-
-    wsUnlockDisplay(state->displayIdx);
-
-    /* notify the simulator */
-    wsPostDisplayUpdate(state->displayIdx);
-}
-
-/*
- * Provide a memory-mapped region for framebuffer data.  We want to use a
- * real mmap() call, not fake it with a malloc, so that related calls
- * (munmap, madvise) will just work.
- */
-static void* mmapFb(FakeDev* dev, void* start, size_t length, int prot,
-    int flags, int fd, __off_t offset)
-{
-    FbState* state = (FbState*) dev->state;
-    void* map;
-
-    /* be reasonable */
-    if (length > (640*480*2)*4) {
-        errno = EINVAL;
-        return MAP_FAILED;
-    }
-
-    /* this is supposed to be VRAM, so just map a chunk */
-    map = mmap(start, length, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
-
-    /* update our "VRAM address"; this feels a bit fragile */
-    if (state->vramAddr != NULL) {
-        wsLog("%s: NOTE: changing vram address from %p\n",
-            dev->debugName, state->vramAddr);
-    }
-    state->vramAddr = map;
-
-    wsLog("%s: mmap %u bytes --> %p\n", dev->debugName, length, map);
-    return map;
-}
-
-/*
- * Handle framebuffer ioctls.
- */
-static int ioctlFb(FakeDev* dev, int fd, int request, void* argp)
-{
-    FbState* state = (FbState*) dev->state;
-
-    wsLog("%s: ioctl(0x%x, %p)\n", dev->debugName, request, argp);
-
-    switch (request) {
-    case FBIOGET_FSCREENINFO:       // struct fb_fix_screeninfo*
-        memcpy(argp, &state->finfo, sizeof(struct fb_fix_screeninfo));
-        break;
-    case FBIOGET_VSCREENINFO:       // struct fb_var_screeninfo*
-        memcpy(argp, &state->vinfo, sizeof(struct fb_var_screeninfo));
-        break;
-    case FBIOPUT_VSCREENINFO:       // struct fb_var_screeninfo*
-        memcpy(&state->vinfo, argp, sizeof(struct fb_var_screeninfo));
-        if (state->vinfo.activate == FB_ACTIVATE_NOW) {
-            //wsLog("%s: activate now\n", dev->debugName);
-            sendPixelsToSim(state);
-        } else if (state->vinfo.activate == FB_ACTIVATE_VBL) {
-            //wsLog("%s: activate on VBL\n", dev->debugName);
-            sendPixelsToSim(state);
-            /* we wait *after* so other process gets scheduled to draw */
-            waitForVsync(state);
-        } else {
-            wsLog("%s: activate value is %d\n",
-                dev->debugName, state->vinfo.activate);
-        }
-        break;
-    case FBIOGET_VBLANK:            // struct fb_vblank*
-        /* the device doesn't actually implement this */
-        //memset(argp, 0, sizeof(struct fb_vblank));
-        errno = EINVAL;
-        return -1;
-    default:
-    /*case FBIO_WAITFORVSYNC:*/
-        wsLog("GLITCH: UNKNOWN ioctl request 0x%x on %s\n",
-            request, dev->debugName);
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Free up our state before closing down the fake descriptor.
- */
-static int closeFb(FakeDev* dev, int fd)
-{
-    freeState((FbState*)dev->state);
-    dev->state = NULL;
-    return 0;
-}
-
-/*
- * dup() an existing fake descriptor
- */
-static FakeDev* dupFb(FakeDev* dev, int fd)
-{
-    FakeDev* newDev = wsCreateFakeDev(dev->debugName);
-    if (newDev != NULL) {
-        newDev->mmap = mmapFb;
-        newDev->ioctl = ioctlFb;
-        newDev->close = closeFb;
-        newDev->dup = dupFb;
-
-        /* use state from existing FakeDev */
-        FbState* fbState = dev->state;
-        wsAtomicAdd(&fbState->refCount, 1);
-
-        newDev->state = fbState;
-    }
-
-    return newDev;
-}
-
-/*
- * Open the console TTY device, which responds to a collection of ioctl()s.
- */
-FakeDev* wsOpenDevFb(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->mmap = mmapFb;
-        newDev->ioctl = ioctlFb;
-        newDev->close = closeFb;
-        newDev->dup = dupFb;
-
-        FbState* fbState = calloc(1, sizeof(FbState));
-
-        /* establish a connection to the front-end if necessary */
-        /* (also gets display configuration) */
-        wsSimConnect();
-
-        configureInitialState(0, fbState);  // always use display 0 for now
-        newDev->state = fbState;
-    }
-
-    return newDev;
-}
-
diff --git a/simulator/wrapsim/DevLog.c b/simulator/wrapsim/DevLog.c
deleted file mode 100644
index fe1144d..0000000
--- a/simulator/wrapsim/DevLog.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Log devices.  We want to filter and display messages, with separate
- * treatment for "debug" and "event" logs.
- *
- * All messages are just dumped to stderr.
- */
-#include "Common.h"
-
-#include "cutils/logd.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <fcntl.h>
-
-#define kMaxTagLen  16      /* from utils/Log.cpp */
-
-#define kTagSetSize 16      /* arbitrary */
-
-/* from utils/Log.cpp */
-typedef enum {
-    FORMAT_OFF = 0,
-    FORMAT_BRIEF,
-    FORMAT_PROCESS,
-    FORMAT_TAG,
-    FORMAT_THREAD,
-    FORMAT_RAW,
-    FORMAT_TIME,
-    FORMAT_LONG
-} LogFormat;
-
-
-/*
- * Log driver state.
- */
-typedef struct LogState {
-    /* nonzero if this is a binary log */
-    int     isBinary;
-
-    /* global minimum priority */
-    int     globalMinPriority;
-
-    /* output format */
-    LogFormat outputFormat;
-
-    /* tags and priorities */
-    struct {
-        char    tag[kMaxTagLen];
-        int     minPriority;
-    } tagSet[kTagSetSize];
-} LogState;
-
-
-/*
- * Configure logging based on ANDROID_LOG_TAGS environment variable.  We
- * need to parse a string that looks like
- *
- *  '*:v jdwp:d dalvikvm:d dalvikvm-gc:i dalvikvmi:i
- *
- * The tag (or '*' for the global level) comes first, followed by a colon
- * and a letter indicating the minimum priority level we're expected to log.
- * This can be used to reveal or conceal logs with specific tags.
- *
- * We also want to check ANDROID_PRINTF_LOG to determine how the output
- * will look.
- */
-static void configureInitialState(const char* pathName, LogState* logState)
-{
-    static const int kDevLogLen = 9;    /* strlen("/dev/log/") */
-
-    /* identify binary logs */
-    if (strcmp(pathName + kDevLogLen, "events") == 0) {
-        logState->isBinary = 1;
-    }
-
-    /* global min priority defaults to "info" level */
-    logState->globalMinPriority = ANDROID_LOG_INFO;
-
-    /*
-     * This is based on the utils/Log.cpp code.
-     */
-    const char* tags = getenv("ANDROID_LOG_TAGS");
-    wsLog("Found ANDROID_LOG_TAGS='%s'\n", tags);
-    if (tags != NULL) {
-        int entry = 0;
-
-        while (*tags != '\0') {
-            char tagName[kMaxTagLen];
-            int i, minPrio;
-
-            while (isspace(*tags))
-                tags++;
-
-            i = 0;
-            while (*tags != '\0' && !isspace(*tags) && *tags != ':' &&
-                i < kMaxTagLen)
-            {
-                tagName[i++] = *tags++;
-            }
-            if (i == kMaxTagLen) {
-                wsLog("ERROR: env tag too long (%d chars max)\n", kMaxTagLen-1);
-                return;
-            }
-            tagName[i] = '\0';
-
-            /* default priority, if there's no ":" part; also zero out '*' */
-            minPrio = ANDROID_LOG_VERBOSE;
-            if (tagName[0] == '*' && tagName[1] == '\0') {
-                minPrio = ANDROID_LOG_DEBUG;
-                tagName[0] = '\0';
-            }
-
-            if (*tags == ':') {
-                tags++;
-                if (*tags >= '0' && *tags <= '9') {
-                    if (*tags >= ('0' + ANDROID_LOG_SILENT))
-                        minPrio = ANDROID_LOG_VERBOSE;
-                    else
-                        minPrio = *tags - '\0';
-                } else {
-                    switch (*tags) {
-                    case 'v':   minPrio = ANDROID_LOG_VERBOSE;  break;
-                    case 'd':   minPrio = ANDROID_LOG_DEBUG;    break;
-                    case 'i':   minPrio = ANDROID_LOG_INFO;     break;
-                    case 'w':   minPrio = ANDROID_LOG_WARN;     break;
-                    case 'e':   minPrio = ANDROID_LOG_ERROR;    break;
-                    case 'f':   minPrio = ANDROID_LOG_FATAL;    break;
-                    case 's':   minPrio = ANDROID_LOG_SILENT;   break;
-                    default:    minPrio = ANDROID_LOG_DEFAULT;  break;
-                    }
-                }
-
-                tags++;
-                if (*tags != '\0' && !isspace(*tags)) {
-                    wsLog("ERROR: garbage in tag env; expected whitespace\n");
-                    wsLog("       env='%s'\n", tags);
-                    return;
-                }
-            }
-
-            if (tagName[0] == 0) {
-                logState->globalMinPriority = minPrio;
-                wsLog("+++ global min prio %d\n", logState->globalMinPriority);
-            } else {
-                logState->tagSet[entry].minPriority = minPrio;
-                strcpy(logState->tagSet[entry].tag, tagName);
-                wsLog("+++ entry %d: %s:%d\n",
-                    entry,
-                    logState->tagSet[entry].tag,
-                    logState->tagSet[entry].minPriority);
-                entry++;
-            }
-        }
-    }
-
-
-    /*
-     * Taken from utils/Log.cpp
-     */
-    const char* fstr = getenv("ANDROID_PRINTF_LOG");
-    LogFormat format;
-    if (fstr == NULL) {
-        format = FORMAT_BRIEF;
-    } else {
-        if (strcmp(fstr, "brief") == 0)
-            format = FORMAT_BRIEF;
-        else if (strcmp(fstr, "process") == 0)
-            format = FORMAT_PROCESS;
-        else if (strcmp(fstr, "tag") == 0)
-            format = FORMAT_PROCESS;
-        else if (strcmp(fstr, "thread") == 0)
-            format = FORMAT_PROCESS;
-        else if (strcmp(fstr, "raw") == 0)
-            format = FORMAT_PROCESS;
-        else if (strcmp(fstr, "time") == 0)
-            format = FORMAT_PROCESS;
-        else if (strcmp(fstr, "long") == 0)
-            format = FORMAT_PROCESS;
-        else
-            format = (LogFormat) atoi(fstr);        // really?!
-    }
-
-    logState->outputFormat = format;
-}
-
-/*
- * Free up the state structure.
- */
-static void freeState(LogState* logState)
-{
-    free(logState);
-}
-
-/*
- * Return a human-readable string for the priority level.  Always returns
- * a valid string.
- */
-static const char* getPriorityString(int priority)
-{
-    /* the first character of each string should be unique */
-    static const char* priorityStrings[] = {
-        "Verbose", "Debug", "Info", "Warn", "Error", "Assert"
-    };
-    int idx;
-
-    idx = (int) priority - (int) ANDROID_LOG_VERBOSE;
-    if (idx < 0 ||
-        idx >= (int) (sizeof(priorityStrings) / sizeof(priorityStrings[0])))
-        return "?unknown?";
-    return priorityStrings[idx];
-}
-
-/*
- * Show a log message.  We write it to stderr and send a copy to the
- * simulator front-end for the log window.
- *
- * Taken from utils/Log.cpp.
- */
-static void showLog(FakeDev* dev, int logPrio, const char* tag, const char* msg)
-{
-    LogState* state = (LogState*) dev->state;
-
-#if defined(HAVE_LOCALTIME_R)
-    struct tm tmBuf;
-#endif
-    struct tm* ptm;
-    char timeBuf[32];
-    char prefixBuf[128], suffixBuf[128];
-    char priChar;
-    time_t when;
-    pid_t pid, tid;
-
-    //wsLog("LOG %d: %s %s", logPrio, tag, msg);
-    wsPostLogMessage(logPrio, tag, msg);
-
-    priChar = getPriorityString(logPrio)[0];
-    when = time(NULL);
-    pid = tid = getpid();       // find gettid()?
-
-    /*
-     * Get the current date/time in pretty form
-     *
-     * It's often useful when examining a log with "less" to jump to
-     * a specific point in the file by searching for the date/time stamp.
-     * For this reason it's very annoying to have regexp meta characters
-     * in the time stamp.  Don't use forward slashes, parenthesis,
-     * brackets, asterisks, or other special chars here.
-     */
-#if defined(HAVE_LOCALTIME_R)
-    ptm = localtime_r(&when, &tmBuf);
-#else
-    ptm = localtime(&when);
-#endif
-    //strftime(timeBuf, sizeof(timeBuf), "%Y-%m-%d %H:%M:%S", ptm);
-    strftime(timeBuf, sizeof(timeBuf), "%m-%d %H:%M:%S", ptm);
-
-    /*
-     * Construct a buffer containing the log header and log message.
-     */
-    size_t prefixLen, suffixLen;
-
-    switch (state->outputFormat) {
-    case FORMAT_TAG:
-        prefixLen = snprintf(prefixBuf, sizeof(prefixBuf),
-            "%c/%-8s: ", priChar, tag);
-        strcpy(suffixBuf, "\n"); suffixLen = 1;
-        break;
-    case FORMAT_PROCESS:
-        prefixLen = snprintf(prefixBuf, sizeof(prefixBuf),
-            "%c(%5d) ", priChar, pid);
-        suffixLen = snprintf(suffixBuf, sizeof(suffixBuf),
-            "  (%s)\n", tag);
-        break;
-    case FORMAT_THREAD:
-        prefixLen = snprintf(prefixBuf, sizeof(prefixBuf),
-            "%c(%5d:%p) ", priChar, pid, (void*)tid);
-        strcpy(suffixBuf, "\n"); suffixLen = 1;
-        break;
-    case FORMAT_RAW:
-        prefixBuf[0] = 0; prefixLen = 0;
-        strcpy(suffixBuf, "\n"); suffixLen = 1;
-        break;
-    case FORMAT_TIME:
-        prefixLen = snprintf(prefixBuf, sizeof(prefixBuf),
-            "%s %-8s\n\t", timeBuf, tag);
-        strcpy(suffixBuf, "\n"); suffixLen = 1;
-        break;
-    case FORMAT_LONG:
-        prefixLen = snprintf(prefixBuf, sizeof(prefixBuf),
-            "[ %s %5d:%p %c/%-8s ]\n",
-            timeBuf, pid, (void*)tid, priChar, tag);
-        strcpy(suffixBuf, "\n\n"); suffixLen = 2;
-        break;
-    default:
-        prefixLen = snprintf(prefixBuf, sizeof(prefixBuf),
-            "%c/%-8s(%5d): ", priChar, tag, pid);
-        strcpy(suffixBuf, "\n"); suffixLen = 1;
-        break;
-     }
-
-    /*
-     * Figure out how many lines there will be.
-     */
-    const char* end = msg + strlen(msg);
-    size_t numLines = 0;
-    const char* p = msg;
-    while (p < end) {
-        if (*p++ == '\n') numLines++;
-    }
-    if (p > msg && *(p-1) != '\n') numLines++;
-    
-    /*
-     * Create an array of iovecs large enough to write all of
-     * the lines with a prefix and a suffix.
-     */
-    const size_t INLINE_VECS = 6;
-    struct iovec stackVec[INLINE_VECS];
-    struct iovec* vec = stackVec;
-    
-    numLines *= 3;  // 3 iovecs per line.
-    if (numLines > INLINE_VECS) {
-        vec = (struct iovec*)malloc(sizeof(struct iovec)*numLines);
-        if (vec == NULL) {
-            msg = "LOG: write failed, no memory";
-            numLines = 3;
-        }
-    }
-    
-    /*
-     * Fill in the iovec pointers.
-     */
-    p = msg;
-    struct iovec* v = vec;
-    int totalLen = 0;
-    while (p < end) {
-        if (prefixLen > 0) {
-            v->iov_base = prefixBuf;
-            v->iov_len = prefixLen;
-            totalLen += prefixLen;
-            v++;
-        }
-        const char* start = p;
-        while (p < end && *p != '\n') p++;
-        if ((p-start) > 0) {
-            v->iov_base = (void*)start;
-            v->iov_len = p-start;
-            totalLen += p-start;
-            v++;
-        }
-        if (*p == '\n') p++;
-        if (suffixLen > 0) {
-            v->iov_base = suffixBuf;
-            v->iov_len = suffixLen;
-            totalLen += suffixLen;
-            v++;
-        }
-    }
-    
-    /*
-     * Write the entire message to the log file with a single writev() call.
-     * We need to use this rather than a collection of printf()s on a FILE*
-     * because of multi-threading and multi-process issues.
-     *
-     * If the file was not opened with O_APPEND, this will produce interleaved
-     * output when called on the same file from multiple processes.
-     *
-     * If the file descriptor is actually a network socket, the writev()
-     * call may return with a partial write.  Putting the writev() call in
-     * a loop can result in interleaved data.  This can be alleviated
-     * somewhat by wrapping the writev call in the Mutex.
-     */
-
-    for(;;) {
-        int cc;
-
-        cc = writev(fileno(stderr), vec, v-vec);
-        if (cc == totalLen) break;
-        
-        if (cc < 0) {
-            if(errno == EINTR) continue;
-            
-                /* can't really log the failure; for now, throw out a stderr */
-            fprintf(stderr, "+++ LOG: write failed (errno=%d)\n", errno);
-            break;
-        } else {
-                /* shouldn't happen when writing to file or tty */
-            fprintf(stderr, "+++ LOG: write partial (%d of %d)\n", cc, totalLen);
-            break;
-        }
-    }
-
-    /* if we allocated storage for the iovecs, free it */
-    if (vec != stackVec)
-        free(vec);
-}
-
-
-/*
- * Receive a log message.  We happen to know that "vector" has three parts:
- *
- *  priority (1 byte)
- *  tag (N bytes -- null-terminated ASCII string)
- *  message (N bytes -- null-terminated ASCII string)
- */
-static ssize_t writevLog(FakeDev* dev, int fd, const struct iovec* vector,
-    int count)
-{
-    LogState* state = (LogState*) dev->state;
-    int ret = 0;
-
-    if (state->isBinary) {
-        wsLog("%s: ignoring binary log\n", dev->debugName);
-        goto bail;
-    }
-
-    if (count != 3) {
-        wsLog("%s: writevLog with count=%d not expected\n",
-            dev->debugName, count);
-        errno = EINVAL;
-        return -1;
-    }
-
-    /* pull out the three fields */
-    int logPrio = *(const char*)vector[0].iov_base;
-    const char* tag = (const char*) vector[1].iov_base;
-    const char* msg = (const char*) vector[2].iov_base;
-
-    /* see if this log tag is configured */
-    int i;
-    int minPrio = state->globalMinPriority;
-    for (i = 0; i < kTagSetSize; i++) {
-        if (state->tagSet[i].minPriority == ANDROID_LOG_UNKNOWN)
-            break;      /* reached end of configured values */
-
-        if (strcmp(state->tagSet[i].tag, tag) == 0) {
-            //wsLog("MATCH tag '%s'\n", tag);
-            minPrio = state->tagSet[i].minPriority;
-            break;
-        }
-    }
-
-    if (logPrio >= minPrio) {
-        showLog(dev, logPrio, tag, msg);
-    } else {
-        //wsLog("+++ NOLOG(%d): %s %s", logPrio, tag, msg);
-    }
-
-bail:
-    for (i = 0; i < count; i++)
-        ret += vector[i].iov_len;
-    return ret;
-}
-
-/*
- * Free up our state before closing down the fake descriptor.
- */
-static int closeLog(FakeDev* dev, int fd)
-{
-    freeState((LogState*)dev->state);
-    dev->state = NULL;
-    return 0;
-}
-
-/*
- * Open a log output device.
- */
-FakeDev* wsOpenDevLog(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->writev = writevLog;
-        newDev->close = closeLog;
-
-        LogState* logState = calloc(1, sizeof(LogState));
-
-        configureInitialState(pathName, logState);
-        newDev->state = logState;
-    }
-
-    return newDev;
-}
-
diff --git a/simulator/wrapsim/DevPower.c b/simulator/wrapsim/DevPower.c
deleted file mode 100644
index b44231b..0000000
--- a/simulator/wrapsim/DevPower.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Magic entries in /sys/class/power_supply/.
- */
-#include "Common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <fcntl.h>
-#include <sys/ioctl.h>
-
-/*
- * Map filename to device index.
- *
- * [ not using DeviceIndex -- would be useful if we need to return something
- * other than a static string ]
- */
-static const struct {
-    const char*     name;
-    //DeviceIndex     idx;
-    const char*     data;
-} gDeviceMap[] = {
-    { "ac/online",
-        "0\n" },
-
-    { "battery/batt_temp",
-        "281\n", },
-    { "battery/batt_vol",
-        "4170\n" },
-    { "battery/capacity",
-        "100\n" },
-    { "battery/health",
-        "Good\n" },
-    { "battery/present",
-        "0\n" },
-    { "battery/status",
-        "Full" },
-    { "battery/technology",
-        "Li-ion\n" },
-
-    { "usb/online",
-        "1\n" },
-};
-
-/*
- * Power driver state.
- *
- * Right now we just ignore everything written.
- */
-typedef struct PowerState {
-    int         which;
-} PowerState;
-
-
-/*
- * Figure out who we are, based on "pathName".
- */
-static void configureInitialState(const char* pathName, PowerState* powerState)
-{
-    const char* cp = pathName + strlen("/sys/class/power_supply/");
-    int i;
-
-    powerState->which = -1;
-    for (i = 0; i < (int) (sizeof(gDeviceMap) / sizeof(gDeviceMap[0])); i++) {
-        if (strcmp(cp, gDeviceMap[i].name) == 0) {
-            powerState->which = i;
-            break;
-        }
-    }
-
-    if (powerState->which == -1) {
-        wsLog("Warning: access to unknown power device '%s'\n", pathName);
-        return;
-    }
-}
-
-/*
- * Free up the state structure.
- */
-static void freeState(PowerState* powerState)
-{
-    free(powerState);
-}
-
-/*
- * Read data from the device.
- *
- * We don't try to keep track of how much was read -- existing clients just
- * try to read into a large buffer.
- */
-static ssize_t readPower(FakeDev* dev, int fd, void* buf, size_t count)
-{
-    PowerState* state = (PowerState*) dev->state;
-    int dataLen;
-
-    wsLog("%s: read %d\n", dev->debugName, count);
-
-    if (state->which < 0 ||
-        state->which >= (int) (sizeof(gDeviceMap)/sizeof(gDeviceMap[0])))
-    {
-        return 0;
-    }
-
-    const char* data = gDeviceMap[state->which].data;
-    size_t strLen = strlen(data);
-
-    while(strLen == 0)
-        sleep(10); // block forever
-
-    ssize_t copyCount = (strLen < count) ? strLen : count;
-    memcpy(buf, data, copyCount);
-    return copyCount;
-}
-
-/*
- * Ignore the request.
- */
-static ssize_t writePower(FakeDev* dev, int fd, const void* buf, size_t count)
-{
-    wsLog("%s: write %d bytes\n", dev->debugName, count);
-    return count;
-}
-
-/*
- * Our Java classes want to be able to do ioctl(FIONREAD) on files.  The
- * battery power manager is blowing up if we get an error other than
- * ENOTTY (meaning a device that doesn't understand buffering).
- */
-static int ioctlPower(FakeDev* dev, int fd, int request, void* argp)
-{
-    if (request == FIONREAD) {
-        wsLog("%s: ioctl(FIONREAD, %p)\n", dev->debugName, argp);
-        errno = ENOTTY;
-        return -1;
-    } else {
-        wsLog("%s: ioctl(0x%08x, %p) ??\n", dev->debugName, request, argp);
-        errno = EINVAL;
-        return -1;
-    }
-}
-
-/*
- * Free up our state before closing down the fake descriptor.
- */
-static int closePower(FakeDev* dev, int fd)
-{
-    freeState((PowerState*)dev->state);
-    dev->state = NULL;
-    return 0;
-}
-
-/*
- * Open a power device.
- */
-FakeDev* wsOpenDevPower(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->read = readPower;
-        newDev->write = writePower;
-        newDev->ioctl = ioctlPower;
-        newDev->close = closePower;
-
-        PowerState* powerState = calloc(1, sizeof(PowerState));
-
-        configureInitialState(pathName, powerState);
-        newDev->state = powerState;
-    }
-
-    return newDev;
-}
-
diff --git a/simulator/wrapsim/DevVibrator.c b/simulator/wrapsim/DevVibrator.c
deleted file mode 100644
index b736f75..0000000
--- a/simulator/wrapsim/DevVibrator.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Vibrating notification device.
- */
-#include "Common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <unistd.h>
-
-
-/*
- * The user will write a decimal integer indicating the time, in milliseconds,
- * that the device should vibrate.  In current usage, this is either -1
- * (meaning vibrate forever) or 0 (don't vibrate).
- */
-static ssize_t writeVibrator(FakeDev* dev, int fd, const void* buf,
-    size_t count)
-{
-    if (count == 2 && memcmp(buf, "0\n", 2) == 0) {
-        wsEnableVibration(0);
-    } else if (count == 3 && memcmp(buf, "-1\n", 3) == 0) {
-        wsEnableVibration(1);
-    } else {
-        wsLog("%s: got %d bytes: '%*s'\n",
-            dev->debugName, count, count, (const char*) buf);
-    }
-
-    return count;
-}
-
-/*
- * Open the vibration control device.
- */
-FakeDev* wsOpenDevVibrator(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->write = writeVibrator;
-    }
-
-    return newDev;
-}
-
diff --git a/simulator/wrapsim/FakeDev.c b/simulator/wrapsim/FakeDev.c
deleted file mode 100644
index f03dd29..0000000
--- a/simulator/wrapsim/FakeDev.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Fake device support.
- */
-/*
-Implementation notes:
-
-There are a couple of basic scenarios, exemplified by the "fb" and
-"events" devices.  The framebuffer driver is pretty simple, handling a
-few ioctl()s and managing a stretch of memory.  We can just intercept a
-few calls.  The input event driver can be used in a select() or poll()
-call with other file descriptors, which either requires us to do some
-fancy tricks with select() and poll(), or requires that we return a real
-file descriptor (perhaps based on a socketpair).
-
-We have three basic approaches to dealing with "fake" file descriptors:
-
-(1) Always use real fds.  We can dup() an open /dev/null to get a number
-    for the cases where we don't need a socketpair.
-(2) Always use fake fds with absurdly high numeric values.  Testing to see
-    if the fd is one we handle is trivial (range check).  This doesn't
-    work for select(), which uses fd bitmaps accessed through macros.
-(3) Use a mix of real and fake fds, in a high range (512-1023).  Because
-    it's in the "real" range, we can pass real fds around for things that
-    are handed to poll() and select(), but because of the high numeric
-    value we *should* be able to get away with a trivial range check.
-
-Approach (1) is the most portable and least likely to break, but the
-efficiencies gained in approach (2) make it more desirable.  There is
-a small risk of application fds wandering into our range, but we can
-minimize that by asserting on a "guard zone" and/or obstructing dup2().
-(We can also dup2(/dev/null) to "reserve" our fds, but that wastes
-resources.)
-*/
-
-#include "Common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <assert.h>
-#include <fnmatch.h>
-
-/*
- * Devices we intercept.
- *
- * Needed:
- *  /dev/alarm
- *  radio
- */
-typedef FakeDev* (*wsFileHook)(const char *path, int flags);
-
-typedef struct FakedPath {
-    const char *pathexpr;
-    wsFileHook hook;
-} FakedPath;
-
-FakedPath fakedpaths[] =
-{
-    { "/dev/graphics/fb0",      wsOpenDevFb },
-    { "/dev/hw3d",              NULL },
-    { "/dev/eac",               wsOpenDevAudio },
-    { "/dev/tty0",              wsOpenDevConsoleTty },
-    { "/dev/input/event0",      wsOpenDevEvent },
-    { "/dev/input/*",           NULL },
-    { "/dev/log/*",             wsOpenDevLog },
-    { "/sys/class/power_supply/*", wsOpenDevPower },
-    { "/sys/power/state",       wsOpenSysPower },
-    { "/sys/power/wake_lock",   wsOpenSysPower },
-    { "/sys/power/wake_unlock", wsOpenSysPower },
-    { "/sys/devices/platform/android-vibrator/enable",  wsOpenDevVibrator },
-    { "/sys/qemu_trace/*",      NULL },
-    { NULL,                     NULL }
-};
-
-
-/*
- * Generic drop-in for an unimplemented call.
- *
- * Returns -1, which conveniently is the same as MAP_FAILED for mmap.
- */
-static int notImplemented(FakeDev* dev, const char* callName)
-{
-    wsLog("WARNING: unimplemented %s() on '%s' %p\n",
-        callName, dev->debugName, dev->state);
-    errno = kNoHandlerError;
-    return -1;
-}
-
-/*
- * Default implementations.  We want to log as much information as we can
- * so that we can fill in the missing implementation.
- *
- * TODO: for some or all of these we will want to display the full arg list.
- */
-static int noClose(FakeDev* dev, ...)
-{
-    return 0;
-}
-static FakeDev* noDup(FakeDev* dev, ...)
-{
-    notImplemented(dev, "dup");
-    return NULL;
-}
-static int noRead(FakeDev* dev, ...)
-{
-    return notImplemented(dev, "read");
-}
-static int noReadv(FakeDev* dev, ...)
-{
-    return notImplemented(dev, "readv");
-}
-static int noWrite(FakeDev* dev, ...)
-{
-    return notImplemented(dev, "write");
-}
-static int noWritev(FakeDev* dev, ...)
-{
-    return notImplemented(dev, "writev");
-}
-static int noMmap(FakeDev* dev, ...)
-{
-    return notImplemented(dev, "mmap");
-}
-static int noIoctl(FakeDev* dev, ...)
-{
-    return notImplemented(dev, "ioctl");
-}
-
-
-/*
- * Create a new FakeDev entry.
- *
- * We mark the fd slot as "used" in the bitmap, but don't add it to the
- * table yet since the entry is not fully prepared.
- */
-FakeDev* wsCreateFakeDev(const char* debugName)
-{
-    FakeDev* newDev;
-    int cc;
-
-    assert(debugName != NULL);
-
-    newDev = (FakeDev*) calloc(1, sizeof(FakeDev));
-    if (newDev == NULL)
-        return NULL;
-
-    newDev->debugName = strdup(debugName);
-    newDev->state = NULL;
-
-    newDev->close = (Fake_close) noClose;
-    newDev->dup = (Fake_dup) noDup;
-    newDev->read = (Fake_read) noRead;
-    newDev->readv = (Fake_readv) noReadv;
-    newDev->write = (Fake_write) noWrite;
-    newDev->writev = (Fake_writev) noWritev;
-    newDev->mmap = (Fake_mmap) noMmap;
-    newDev->ioctl = (Fake_ioctl) noIoctl;
-
-    /*
-     * Allocate a new entry.  The bit vector map is really only used as a
-     * performance boost in the current implementation.
-     */
-    cc = pthread_mutex_lock(&gWrapSim.fakeFdLock); assert(cc == 0);
-    int newfd = wsAllocBit(gWrapSim.fakeFdMap);
-    cc = pthread_mutex_unlock(&gWrapSim.fakeFdLock); assert(cc == 0);
-
-    if (newfd < 0) {
-        wsLog("WARNING: ran out of 'fake' file descriptors\n");
-        free(newDev);
-        return NULL;
-    }
-    newDev->fd = newfd + kFakeFdBase;
-    newDev->otherFd = -1;
-    assert(gWrapSim.fakeFdList[newDev->fd - kFakeFdBase] == NULL);
-
-    return newDev;
-}
-
-/*
- * Create a new FakeDev entry, and open a file descriptor that actually
- * works.
- */
-FakeDev* wsCreateRealFakeDev(const char* debugName)
-{
-    FakeDev* newDev = wsCreateFakeDev(debugName);
-    if (newDev == NULL)
-        return newDev;
-    
-    int fds[2];
-
-    if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0) {
-        wsLog("socketpair() failed: %s\n", strerror(errno));
-        wsFreeFakeDev(newDev);
-        return NULL;
-    }
-
-    if (dup2(fds[0], newDev->fd) < 0) {
-        wsLog("dup2(%d,%d) failed: %s\n",
-            fds[0], newDev->fd, strerror(errno));
-        wsFreeFakeDev(newDev);
-        return NULL;
-    }
-    close(fds[0]);
-
-    /* okay to leave this one in the "normal" range; not visible to app */
-    newDev->otherFd = fds[1];
-
-    return newDev;
-}
-
-/*
- * Free fake device entry.
- */
-void wsFreeFakeDev(FakeDev* dev)
-{
-    if (dev == NULL)
-        return;
-
-    wsLog("## closing/freeing '%s' (%d/%d)\n",
-        dev->debugName, dev->fd, dev->otherFd);
-
-    /*
-     * If we assigned a file descriptor slot, free it up.
-     */
-    if (dev->fd >= 0) {
-        int cc;
-
-        gWrapSim.fakeFdList[dev->fd - kFakeFdBase] = NULL;
-
-        cc = pthread_mutex_lock(&gWrapSim.fakeFdLock); assert(cc == 0);
-        wsFreeBit(gWrapSim.fakeFdMap, dev->fd - kFakeFdBase);
-        cc = pthread_mutex_unlock(&gWrapSim.fakeFdLock); assert(cc == 0);
-    }
-    if (dev->otherFd >= 0)
-        close(dev->otherFd);
-
-    if (dev->debugName) free(dev->debugName);
-    free(dev);
-}
-
-/*
- * Map a file descriptor to a fake device.
- *
- * Returns NULL if there's no corresponding entry.
- */
-FakeDev* wsFakeDevFromFd(int fd)
-{
-    /* quick range test */
-    if (fd < kFakeFdBase || fd >= kFakeFdBase + kMaxFakeFdCount)
-        return NULL;
-
-    return gWrapSim.fakeFdList[fd - kFakeFdBase];
-}
-
-
-/*
- * Check to see if we're opening a device that we want to fake out.
- *
- * We return a file descriptor >= 0 on success, -1 if we're not interested,
- * or -2 if we explicitly want to pretend that the device doesn't exist.
- */
-int wsInterceptDeviceOpen(const char* pathName, int flags)
-{
-    FakedPath* p = fakedpaths;
-
-    while (p->pathexpr) {
-        if (fnmatch(p->pathexpr, pathName, 0) == 0) {
-            if (p->hook != NULL) {
-                FakeDev* dev = p->hook(pathName, flags);
-                if (dev != NULL) {
-                    /*
-                     * Now that the device entry is ready, add it to the list.
-                     */
-                    wsLog("## created fake dev %d: '%s' %p\n",
-                        dev->fd, dev->debugName, dev->state);
-                    gWrapSim.fakeFdList[dev->fd - kFakeFdBase] = dev;
-                    return dev->fd;
-                }
-            } else {
-                wsLog("## rejecting attempt to open %s\n", pathName);
-                errno = ENOENT;
-                return -2;
-            }
-            break;
-        }
-        p++;
-    }
-    return -1;
-}
-
-/*
- * Check to see if we're accessing a device that we want to fake out.
- * Returns 0 if the device can be (fake) opened with the given mode,
- * -1 if it can't, -2 if it can't and we don't want to allow fallback
- * to the host-device either.
- * TODO: actually check the mode.
- */
-int wsInterceptDeviceAccess(const char *pathName, int mode)
-{
-    FakedPath *p = fakedpaths;
-
-    while (p->pathexpr) {
-        if (fnmatch(p->pathexpr, pathName, 0) == 0) {
-            if (p->hook) {
-                return 0;
-            } else {
-                wsLog("## rejecting attempt to open %s\n", pathName);
-                errno = ENOENT;
-                return -2;
-            }
-            break;
-        }
-        p++;
-    }
-    errno = ENOENT;
-    return -1;
-}
diff --git a/simulator/wrapsim/FakeDev.h b/simulator/wrapsim/FakeDev.h
deleted file mode 100644
index 65f47ae..0000000
--- a/simulator/wrapsim/FakeDev.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Fake device support.
- */
-#ifndef _WRAPSIM_FAKEDEV_H
-#define _WRAPSIM_FAKEDEV_H
-
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <errno.h>
-
-typedef struct FakeDev FakeDev;
-
-typedef int      (*Fake_close)(FakeDev* dev, int);
-typedef FakeDev* (*Fake_dup)(FakeDev* dev, int);
-typedef ssize_t  (*Fake_read)(FakeDev* dev, int, void*, size_t);
-typedef ssize_t  (*Fake_readv)(FakeDev* dev, int, const struct iovec*, int);
-typedef ssize_t  (*Fake_write)(FakeDev* dev, int, const void*, size_t);
-typedef ssize_t  (*Fake_writev)(FakeDev* dev, int, const struct iovec*, int);
-typedef void*    (*Fake_mmap)(FakeDev* dev, void*, size_t, int, int, int, __off_t);
-typedef int      (*Fake_ioctl)(FakeDev* dev, int, int, void*);
-
-/*
- * An open fake device entry.
- */
-struct FakeDev {
-    /* string, for debugging; usually orig. device name */
-    char*   debugName;
-
-    /* state bucket */
-    void*   state;
-
-    /* the file descriptor we're associated with */
-    int     fd;
-
-    /* in some cases we use a pair; this is the other one */
-    int     otherFd;
-
-    /*
-     * Device functions we provide.
-     *
-     * All other file descriptor operations should fail, usually with EBADF.
-     */
-    Fake_close  close;
-    Fake_dup  dup;
-    Fake_read   read;
-    Fake_readv  readv;
-    Fake_write  write;
-    Fake_writev writev;
-    Fake_mmap   mmap;       // handles both mmap() and mmap64()
-    Fake_ioctl  ioctl;
-};
-
-/*
- * If a handler isn't defined for a syscall, we return EMLINK so that it's
- * obvious when the error is generated by us.
- */ 
-#define kNoHandlerError EMLINK
-
-/*
- * Fake file descriptors begin here.  This should be chosen such that no
- * real descriptor is ever at or above this value.
- */
-#define kFakeFdBase     512
-#define kMaxFakeFdCount 256
-
-/*
- * Create a new, completely fake device entry.
- */
-FakeDev* wsCreateFakeDev(const char* debugName);
-
-/*
- * Create a new, mostly fake device entry.
- */
-FakeDev* wsCreateRealFakeDev(const char* debugName);
-
-/*
- * Free a fake device entry.
- */
-void wsFreeFakeDev(FakeDev* dev);
-
-/*
- * Given a file descriptor, find the corresponding fake device.  Returns
- * NULL if the fd doesn't correspond to one of our entries.
- */
-FakeDev* wsFakeDevFromFd(int fd);
-
-/*
- * Check to see if this open() call is on a device we want to spoof.
- *
- * Returns a "fake" file descriptor on success, <0 on error.
- */
-int wsInterceptDeviceOpen(const char* pathName, int flags);
-
-/*
- * Check to see if this access() call is on a device we want to spoof.
- *
- * Returns 0 if the device can be fake-accessed, -1 if it can't, -2
- * if it can't and we don't want to allow fallback to the host-device.
- */
-int wsInterceptDeviceAccess(const char* pathName, int flags);
-
-/*
- * Devices.
- */
-FakeDev* wsOpenDevAudio(const char* pathName, int flags);
-FakeDev* wsOpenDevConsoleTty(const char* pathName, int flags);
-FakeDev* wsOpenDevEvent(const char* pathName, int flags);
-FakeDev* wsOpenDevFb(const char* pathName, int flags);
-FakeDev* wsOpenDevLog(const char* pathName, int flags);
-FakeDev* wsOpenDevPower(const char* pathName, int flags);
-FakeDev* wsOpenSysPower(const char* pathName, int flags);
-FakeDev* wsOpenDevVibrator(const char* pathName, int flags);
-
-/*
- * Performs key remapping and sends the event to the global input event device.
- */
-void wsSendSimKeyEvent(int key, int isDown);
-
-/*
- * Send a touch event to the global input event device.
- */
-void wsSendSimTouchEvent(int action, int x, int y);
-
-#endif /*_WRAPSIM_FAKEDEV_H*/
diff --git a/simulator/wrapsim/Globals.h b/simulator/wrapsim/Globals.h
deleted file mode 100644
index a8d834c..0000000
--- a/simulator/wrapsim/Globals.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Sim wrapper global state.
- */
-#ifndef _WRAPSIM_GLOBALS_H
-#define _WRAPSIM_GLOBALS_H
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/uio.h>
-#include <sys/time.h>
-#include <sys/vfs.h>
-#include <utime.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <pthread.h>
-
-/*
- * Type declarations for the functions we're replacing.
- *
- * For syscalls this matches the syscall definition, not the libc definition,
- * e.g. no varargs for open() or ioctl().
- */
-typedef int     (*Func_access)(const char*, int);
-typedef int     (*Func_open)(const char*, int, mode_t);
-typedef int     (*Func_open64)(const char*, int, mode_t);
-
-typedef int     (*Func_close)(int);
-typedef int     (*Func_dup)(int);
-typedef ssize_t (*Func_read)(int, void*, size_t);
-typedef ssize_t (*Func_readv)(int, const struct iovec*, int);
-typedef ssize_t (*Func_write)(int, const void*, size_t);
-typedef ssize_t (*Func_writev)(int, const struct iovec*, int);
-typedef void*   (*Func_mmap)(void*, size_t, int, int, int, __off_t);
-typedef void*   (*Func_mmap64)(void*, size_t, int, int, int, __off64_t);
-typedef int     (*Func_ioctl)(int, int, void*);
-
-typedef int     (*Func_chdir)(const char*);
-typedef int     (*Func_chmod)(const char*, mode_t);
-typedef int     (*Func_chown)(const char*, uid_t, uid_t);
-typedef int     (*Func_creat)(const char*, mode_t);
-typedef int     (*Func_execve)(const char*, char* const[], char* const[]);
-typedef char*   (*Func_getcwd)(char* buf, size_t size);
-typedef int     (*Func_lchown)(const char*, uid_t, uid_t);
-typedef int     (*Func_link)(const char*, const char*);
-typedef int     (*Func_lstat)(const char*, struct stat*);
-typedef int     (*Func_lstat64)(const char*, struct stat*);
-typedef int     (*Func___lxstat)(int version, const char*, struct stat*);
-typedef int     (*Func___lxstat64)(int version, const char*, struct stat*);
-typedef int     (*Func_mkdir)(const char*, mode_t mode);
-typedef ssize_t (*Func_readlink)(const char*, char*, size_t);
-typedef int     (*Func_rename)(const char*, const char*);
-typedef int     (*Func_rmdir)(const char*);
-typedef int     (*Func_stat)(const char*, struct stat*);
-typedef int     (*Func_stat64)(const char*, struct stat*);
-typedef int     (*Func___xstat)(int version, const char*, struct stat*);
-typedef int     (*Func___xstat64)(int version, const char*, struct stat*);
-typedef int     (*Func_statfs)(const char*, struct statfs*);
-typedef int     (*Func_statfs64)(const char*, struct statfs*);
-typedef int     (*Func_symlink)(const char*, const char*);
-typedef int     (*Func_unlink)(const char*);
-typedef int     (*Func_utime)(const char*, const struct utimbuf*);
-typedef int     (*Func_utimes)(const char*, const struct timeval []);
-
-typedef int     (*Func_execl)(const char*, const char*, ...);
-typedef int     (*Func_execle)(const char*, const char*, ...);
-typedef int     (*Func_execlp)(const char*, const char*, ...);
-typedef int     (*Func_execv)(const char*, char* const []);
-typedef int     (*Func_execvp)(const char*, char* const []);
-typedef FILE*   (*Func_fopen)(const char*, const char*);
-typedef FILE*   (*Func_fopen64)(const char*, const char*);
-typedef FILE*   (*Func_freopen)(const char*, const char*, FILE*);
-typedef int     (*Func_ftw)(const char*,
-                    int (*fn) (const char*, const struct stat*, int),
-                    int);
-typedef DIR*    (*Func_opendir)(const char* path);
-typedef void*   (*Func_dlopen)(const char*, int);
-
-typedef int     (*Func_setpriority)(int, int, int);
-//typedef int     (*Func_pipe)(int [2]);
-
-
-/*
- * Pointers to the actual implementations.
- */
-#ifndef CREATE_FUNC_STORAGE
-# define EXTERN_FUNC extern
-#else
-# define EXTERN_FUNC
-#endif
-EXTERN_FUNC Func_access _ws_access;
-EXTERN_FUNC Func_open _ws_open;
-EXTERN_FUNC Func_open64 _ws_open64;
-
-EXTERN_FUNC Func_close _ws_close;
-EXTERN_FUNC Func_dup _ws_dup;
-EXTERN_FUNC Func_read _ws_read;
-EXTERN_FUNC Func_readv _ws_readv;
-EXTERN_FUNC Func_write _ws_write;
-EXTERN_FUNC Func_writev _ws_writev;
-EXTERN_FUNC Func_mmap _ws_mmap;
-EXTERN_FUNC Func_mmap64 _ws_mmap64;
-EXTERN_FUNC Func_ioctl _ws_ioctl;
-
-EXTERN_FUNC Func_chdir _ws_chdir;
-EXTERN_FUNC Func_chmod _ws_chmod;
-EXTERN_FUNC Func_chown _ws_chown;
-EXTERN_FUNC Func_creat _ws_creat;
-EXTERN_FUNC Func_execve _ws_execve;
-EXTERN_FUNC Func_getcwd _ws_getcwd;
-EXTERN_FUNC Func_lchown _ws_lchown;
-EXTERN_FUNC Func_link _ws_link;
-EXTERN_FUNC Func_lstat _ws_lstat;
-EXTERN_FUNC Func_lstat64 _ws_lstat64;
-EXTERN_FUNC Func___lxstat _ws___lxstat;
-EXTERN_FUNC Func___lxstat64 _ws___lxstat64;
-EXTERN_FUNC Func_mkdir _ws_mkdir;
-EXTERN_FUNC Func_readlink _ws_readlink;
-EXTERN_FUNC Func_rename _ws_rename;
-EXTERN_FUNC Func_rmdir _ws_rmdir;
-EXTERN_FUNC Func_stat _ws_stat;
-EXTERN_FUNC Func_stat64 _ws_stat64;
-EXTERN_FUNC Func___xstat _ws___xstat;
-EXTERN_FUNC Func___xstat64 _ws___xstat64;
-EXTERN_FUNC Func_statfs _ws_statfs;
-EXTERN_FUNC Func_statfs64 _ws_statfs64;
-EXTERN_FUNC Func_symlink _ws_symlink;
-EXTERN_FUNC Func_unlink _ws_unlink;
-EXTERN_FUNC Func_utime _ws_utime;
-EXTERN_FUNC Func_utimes _ws_utimes;
-
-EXTERN_FUNC Func_execl _ws_execl;
-EXTERN_FUNC Func_execle _ws_execle;
-EXTERN_FUNC Func_execlp _ws_execlp;
-EXTERN_FUNC Func_execv _ws_execv;
-EXTERN_FUNC Func_execvp _ws_execvp;
-EXTERN_FUNC Func_fopen _ws_fopen;
-EXTERN_FUNC Func_fopen64 _ws_fopen64;
-EXTERN_FUNC Func_freopen _ws_freopen;
-EXTERN_FUNC Func_ftw _ws_ftw;
-EXTERN_FUNC Func_opendir _ws_opendir;
-EXTERN_FUNC Func_dlopen _ws_dlopen;
-
-EXTERN_FUNC Func_setpriority _ws_setpriority;
-//EXTERN_FUNC Func_pipe _ws_pipe;
-
-#define kMaxDisplays 4
-
-/*
- * Global values.  Must be initialized in initGlobals(), which is executed
- * the first time somebody calls dlopen on the wrapper lib.
- */
-struct WrapSimGlobals {
-    volatile int    initialized;
-
-    /* descriptor where we write log messages */
-    int         logFd;
-
-    /* socket for communicating with simulator front-end */
-    int         simulatorFd;
-
-    /* coordinate thread startup */
-    pthread_mutex_t startLock;
-    pthread_cond_t  startCond;
-    int             startReady;
-    int             simulatorInitFailed;
-
-    /* base directory for filename remapping */
-    char*       remapBaseDir;
-    int         remapBaseDirLen;
-
-    /*
-     * Display characteristics.
-     *
-     * TODO: this is retrieved from the simulator during initial config.
-     * It needs to be visible to whatever process holds the surfaceflinger,
-     * which may or may not be the initial process in multi-process mode.
-     * We probably want to get the display config via a query, performed at
-     * intercepted-ioctl time, rather than a push from the sim at startup.
-     */
-    struct {
-        int     width;
-        int     height;
-
-        int     shmemKey;
-        int     shmid;
-        void*   addr;
-        long    length;
-        int     semid;
-    } display[kMaxDisplays];
-    int     numDisplays;
-
-    /*
-     * Input device.
-     */
-    FakeDev*    keyInputDevice;
-    const char *keyMap;
-
-    /* fake file descriptor allocation map */
-    pthread_mutex_t fakeFdLock;
-    BitVector*  fakeFdMap;
-    FakeDev*    fakeFdList[kMaxFakeFdCount];
-
-    /* used for wsAtomicAdd */
-    pthread_mutex_t atomicLock;
-};
-
-extern struct WrapSimGlobals gWrapSim;
-
-#endif /*_WRAPSIM_GLOBALS_H*/
diff --git a/simulator/wrapsim/Init.c b/simulator/wrapsim/Init.c
deleted file mode 100644
index 3df0efe..0000000
--- a/simulator/wrapsim/Init.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Initialize the intercepts.
- */
-#include "Common.h"
-
-#define __USE_GNU       /* need RTLD_NEXT */
-#include <dlfcn.h>
-
-#include <stdlib.h>
-#include <pthread.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-
-/*
- * Global state.
- */
-struct WrapSimGlobals gWrapSim;
-pthread_once_t gWrapSimInitialized = PTHREAD_ONCE_INIT;
-
-/*
- * Initialize our global state.
- */
-static void initGlobals(void)
-{
-    memset(&gWrapSim, 0xdd, sizeof(gWrapSim));
-    gWrapSim.logFd = -1;
-    gWrapSim.keyMap = NULL;
-
-    /*
-     * Find the original version of functions we override.
-     */
-    _ws_access = dlsym(RTLD_NEXT, "access");
-    _ws_open = dlsym(RTLD_NEXT, "open");
-    _ws_open64 = dlsym(RTLD_NEXT, "open64");
-
-    _ws_close = dlsym(RTLD_NEXT, "close");
-    _ws_dup = dlsym(RTLD_NEXT, "dup");
-    _ws_read = dlsym(RTLD_NEXT, "read");
-    _ws_readv = dlsym(RTLD_NEXT, "readv");
-    _ws_write = dlsym(RTLD_NEXT, "write");
-    _ws_writev = dlsym(RTLD_NEXT, "writev");
-    _ws_mmap = dlsym(RTLD_NEXT, "mmap");
-    _ws_mmap64 = dlsym(RTLD_NEXT, "mmap64");
-    _ws_ioctl = dlsym(RTLD_NEXT, "ioctl");
-
-    _ws_chdir = dlsym(RTLD_NEXT, "chdir");
-    _ws_chmod = dlsym(RTLD_NEXT, "chmod");
-    _ws_chown = dlsym(RTLD_NEXT, "chown");
-    _ws_creat = dlsym(RTLD_NEXT, "creat");
-    _ws_execve = dlsym(RTLD_NEXT, "execve");
-    _ws_getcwd = dlsym(RTLD_NEXT, "getcwd");
-    _ws_lchown = dlsym(RTLD_NEXT, "lchown");
-    _ws_link = dlsym(RTLD_NEXT, "link");
-    _ws_lstat = dlsym(RTLD_NEXT, "lstat");
-    _ws_lstat64 = dlsym(RTLD_NEXT, "lstat64");
-    _ws___lxstat = dlsym(RTLD_NEXT, "__lxstat");
-    _ws___lxstat64 = dlsym(RTLD_NEXT, "__lxstat64");
-    _ws_mkdir = dlsym(RTLD_NEXT, "mkdir");
-    _ws_readlink = dlsym(RTLD_NEXT, "readlink");
-    _ws_rename = dlsym(RTLD_NEXT, "rename");
-    _ws_rmdir = dlsym(RTLD_NEXT, "rmdir");
-    _ws_stat = dlsym(RTLD_NEXT, "stat");
-    _ws_stat64 = dlsym(RTLD_NEXT, "stat64");
-    _ws___xstat = dlsym(RTLD_NEXT, "__xstat");
-    _ws___xstat64 = dlsym(RTLD_NEXT, "__xstat64");
-    _ws_statfs = dlsym(RTLD_NEXT, "statfs");
-    _ws_statfs64 = dlsym(RTLD_NEXT, "statfs64");
-    _ws_symlink = dlsym(RTLD_NEXT, "symlink");
-    _ws_unlink = dlsym(RTLD_NEXT, "unlink");
-    _ws_utime = dlsym(RTLD_NEXT, "utime");
-    _ws_utimes = dlsym(RTLD_NEXT, "utimes");
-
-    _ws_execl = dlsym(RTLD_NEXT, "execl");
-    _ws_execle = dlsym(RTLD_NEXT, "execle");
-    _ws_execlp = dlsym(RTLD_NEXT, "execlp");
-    _ws_execv = dlsym(RTLD_NEXT, "execv");
-    _ws_execvp = dlsym(RTLD_NEXT, "execvp");
-    _ws_fopen = dlsym(RTLD_NEXT, "fopen");
-    _ws_fopen64 = dlsym(RTLD_NEXT, "fopen64");
-    _ws_freopen = dlsym(RTLD_NEXT, "freopen");
-    _ws_ftw = dlsym(RTLD_NEXT, "ftw");
-    _ws_opendir = dlsym(RTLD_NEXT, "opendir");
-    _ws_dlopen = dlsym(RTLD_NEXT, "dlopen");
-
-    _ws_setpriority = dlsym(RTLD_NEXT, "setpriority");
-    //_ws_pipe = dlsym(RTLD_NEXT, "pipe");
-
-    const char* logFileName = getenv("WRAPSIM_LOG");
-    if (logFileName != NULL ){
-        gWrapSim.logFd = _ws_open(logFileName, O_WRONLY|O_APPEND|O_CREAT, 0664);
-    }
-
-    /* log messages now work; say hello */
-    wsLog("--- initializing sim wrapper ---\n");
-
-    gWrapSim.simulatorFd = -1;
-
-    pthread_mutex_init(&gWrapSim.startLock, NULL);
-    pthread_cond_init(&gWrapSim.startCond, NULL);
-    gWrapSim.startReady = 0;
-
-    pthread_mutex_init(&gWrapSim.fakeFdLock, NULL);
-    gWrapSim.fakeFdMap = wsAllocBitVector(kMaxFakeFdCount, 0);
-    memset(gWrapSim.fakeFdList, 0, sizeof(gWrapSim.fakeFdList));
-
-    pthread_mutex_init(&gWrapSim.atomicLock, NULL);
-
-    gWrapSim.numDisplays = 0;
-
-    gWrapSim.keyInputDevice = NULL;
-
-    /*
-     * Get target for remapped "/system" and "/data".
-     *
-     * The ANDROID_PRODUCT_OUT env var *must* be set for rewriting to work.
-     */
-    const char* outEnv = getenv("ANDROID_PRODUCT_OUT");
-    if (outEnv == NULL) {
-        gWrapSim.remapBaseDir = NULL;
-        wsLog("--- $ANDROID_PRODUCT_OUT not set, "
-                "filename remapping disabled\n");
-    } else {
-        /* grab string and append '/' -- note this never gets freed */
-        gWrapSim.remapBaseDirLen = strlen(outEnv);
-        gWrapSim.remapBaseDir = strdup(outEnv);
-        wsLog("--- name remap to %s\n", gWrapSim.remapBaseDir);
-    }
-
-    gWrapSim.initialized = 1;
-}
-
-/*
- * Creates a directory, or prints a log message if it fails.
- */
-static int createTargetDirectory(const char *path, mode_t mode)
-{
-    int ret;
-
-    ret = mkdir(path, mode);
-    if (ret == 0 || errno == EEXIST) {
-        return 0;
-    }
-    wsLog("--- could not create target directory %s: %s\n",
-            path, strerror(errno));
-    return ret;
-}
-
-/*
- * Any setup that would normally be done by init(8).
- * Note that since the syscall redirects have been installed
- * at this point, we are effectively operating within the
- * simulation context.
- */
-static void initGeneral(void)
-{
-    wsLog("--- preparing system\n");
-
-    /* Try to make sure that certain directories exist.
-     * If we fail to create them, the errors will show up in the log,
-     * but we keep going.
-     */
-    createTargetDirectory("/data", 0777);
-    createTargetDirectory("/data/dalvik-cache", 0777);
-}
-
-/*
- * Initialize all necessary state, and indicate that we're ready to go.
- */
-static void initOnce(void)
-{
-    initGlobals();
-    initGeneral();
-}
-
-/*
- * Shared object initializer.  glibc guarantees that this function is
- * called before dlopen() returns.  It may be called multiple times.
- */
-__attribute__((constructor))
-static void initialize(void)
-{
-    pthread_once(&gWrapSimInitialized, initOnce);
-}
-
-
diff --git a/simulator/wrapsim/Intercept.c b/simulator/wrapsim/Intercept.c
deleted file mode 100644
index 3d4edb2..0000000
--- a/simulator/wrapsim/Intercept.c
+++ /dev/null
@@ -1,851 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Syscall and library intercepts.
- */
-
-/* don't remap open() to open64() */
-#undef _FILE_OFFSET_BITS
-
-#define CREATE_FUNC_STORAGE
-#include "Common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/uio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <utime.h>
-#include <limits.h>
-#include <ftw.h>
-#include <assert.h>
-
-
-#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
-#warning "big"
-#endif
-
-//#define CALLTRACE(format, ...)   wsLog(format, ##__VA_ARGS__)
-#define CALLTRACE(format, ...)   ((void)0)
-
-//#define CALLTRACEV(format, ...)  wsLog(format, ##__VA_ARGS__)
-#define CALLTRACEV(format, ...)  ((void)0)
-
-/*
-When opening certain files, we need to simulate the contents.  For example,
-we can pretend to open the frame buffer, and respond to ioctl()s by
-returning fake data or telling the front-end to render new data.
-
-We want to intercept specific files in /dev.  In some cases we want to
-intercept and reject, e.g. to indicate that a standard Linux device does
-not exist.
-
-Some things we're not going to intercept:
-  /etc/... (e.g. /etc/timezone) -- std. Linux version should be okay
-  /proc/... (e.g. /proc/stat) -- we're showing real pid, so real proc will work
-
-For the device drivers we need to intercept:
-
-  close(), ioctl(), mmap(), open()/open64(), read(), readv(), write(),
-  writev()
-
-May also need stat().  We don't need all fd calls, e.g. fchdir() is
-not likely to succeed on a device driver.  The expected uses of mmap()
-shouldn't require intercepting related calls like madvise() -- we will
-provide an actual mapping of the requested size.  In some cases we will
-want to return a "real" fd so the app can poll() or select() on it.
-
-
-We also need to consider:
-  getuid/setuid + variations -- fake out multi-user-id stuff
-
-
-We also want to translate filenames, effectively performing a "chroot"
-without all the baggage that comes with it.  The mapping looks like:
-
-  /system/... --> $ANDROID_PRODUCT_OUT/system/...
-  /data/... --> $ANDROID_PRODUCT_OUT/data/...
-
-Translating pathnames requires interception of additional system calls,
-substituting a new path.  Calls include:
-
-  access(), chdir(), chmod(), chown(), creat(), execve(), getcwd(),
-  lchown(), link(), lstat()/lstat64(), mkdir(), open()/open64(),
-  readlink(), rename(), rmdir(), stat()/stat64(), statfs/statfs64(),
-  symlink(), unlink(), utimes(),
-
-Possibly also mknod(), mount(), umount().
-
-The "at" family, notably openat(), should just work since the root comes
-from an open directory fd.
-
-We also need these libc calls, because LD_LIBRARY_PATH substitutes at
-the libc link level, not the syscall layer:
-
-  execl(), execlp(), execle(), execv(), execvp(), fopen(), ftw(), getwd(),
-  opendir(), dlopen()
-
-It is possible for the cwd to leak out.  Some possible leaks:
-  - /proc/[self]/exe
-  - /proc/[self]/cwd
-  - LD_LIBRARY_PATH (which may be awkward to work around)
-
-
-To provide a replacement for the dirent functions -- only required if we
-want to show "fake" directory contents -- we would need:
-
-  closedir(), dirfd() readdir(), rewinddir(), scandir(), seekdir(),
-  telldir()
-
-
-*/
-
-
-/*
- * ===========================================================================
- *      Filename remapping
- * ===========================================================================
- */
-
-/*
- * If appropriate, rewrite the path to point to a different location.
- *
- * Returns either "pathBuf" or "origPath" depending on whether or not we
- * chose to rewrite the path.  "origPath" must be a buffer capable of
- * holding an extended pathname; for best results use PATH_MAX.
- */
-static const char* rewritePath(const char* func, char* pathBuf,
-    const char* origPath)
-{
-    /*
-     * Rewrite paths that start with "/system/" or "/data/"
-     */
-    if (origPath[0] != '/')
-        goto skip_rewrite;
-    while (origPath[1] == '/') origPath++; // some apps like to use paths like '//data/data/....'
-    if (memcmp(origPath+1, "system", 6) == 0 &&
-        (origPath[7] == '/' || origPath[7] == '\0'))
-            goto do_rewrite;
-    if (memcmp(origPath+1, "data", 4) == 0 &&
-        (origPath[5] == '/' || origPath[5] == '\0'))
-            goto do_rewrite;
-
-skip_rewrite:
-    /* check to see if something is side-stepping the rewrite */
-    if (memcmp(origPath, gWrapSim.remapBaseDir, gWrapSim.remapBaseDirLen) == 0)
-    {
-        wsLog("NOTE: full path used: %s(%s)\n", func, origPath);
-    }
-
-    CALLTRACE("rewrite %s('%s') --> (not rewritten)\n", func, origPath);
-    return origPath;
-
-do_rewrite:
-    memcpy(pathBuf, gWrapSim.remapBaseDir, gWrapSim.remapBaseDirLen);
-    strcpy(pathBuf + gWrapSim.remapBaseDirLen, origPath);
-    CALLTRACE("rewrite %s('%s') --> '%s'\n", func, origPath, pathBuf);
-    return pathBuf;
-}
-
-/*
- * This works if the pathname is the first argument to the function, and
- * the function returns "int".
- */
-#define PASS_THROUGH_DECL(_fname, _rtype, ...)                              \
-    _rtype _fname( __VA_ARGS__ )
-#define PASS_THROUGH_BODY(_fname, _patharg, ...)                            \
-    {                                                                       \
-        CALLTRACEV("%s(%s)\n", __FUNCTION__, _patharg);                     \
-        char pathBuf[PATH_MAX];                                             \
-        return _ws_##_fname(rewritePath(#_fname, pathBuf, _patharg),        \
-            ##__VA_ARGS__);                                                 \
-    }
-
-
-PASS_THROUGH_DECL(chdir, int, const char* path)
-PASS_THROUGH_BODY(chdir, path)
-
-PASS_THROUGH_DECL(chmod, int, const char* path, mode_t mode)
-PASS_THROUGH_BODY(chmod, path, mode)
-
-PASS_THROUGH_DECL(chown, int, const char* path, uid_t owner, gid_t group)
-PASS_THROUGH_BODY(chown, path, owner, group)
-
-PASS_THROUGH_DECL(creat, int, const char* path, mode_t mode)
-PASS_THROUGH_BODY(creat, path, mode)
-
-PASS_THROUGH_DECL(execve, int, const char* path, char* const argv[],
-    char* const envp[])
-PASS_THROUGH_BODY(execve, path, argv, envp)
-
-PASS_THROUGH_DECL(lchown, int, const char* path, uid_t owner, gid_t group)
-PASS_THROUGH_BODY(lchown, path, owner, group)
-
-PASS_THROUGH_DECL(lstat, int, const char* path, struct stat* buf)
-PASS_THROUGH_BODY(lstat, path, buf)
-
-PASS_THROUGH_DECL(lstat64, int, const char* path, struct stat* buf)
-PASS_THROUGH_BODY(lstat64, path, buf)
-
-PASS_THROUGH_DECL(mkdir, int, const char* path, mode_t mode)
-PASS_THROUGH_BODY(mkdir, path, mode)
-
-PASS_THROUGH_DECL(readlink, ssize_t, const char* path, char* buf, size_t bufsiz)
-PASS_THROUGH_BODY(readlink, path, buf, bufsiz)
-
-PASS_THROUGH_DECL(rmdir, int, const char* path)
-PASS_THROUGH_BODY(rmdir, path)
-
-PASS_THROUGH_DECL(stat, int, const char* path, struct stat* buf)
-PASS_THROUGH_BODY(stat, path, buf)
-
-PASS_THROUGH_DECL(stat64, int, const char* path, struct stat* buf)
-PASS_THROUGH_BODY(stat64, path, buf)
-
-PASS_THROUGH_DECL(statfs, int, const char* path, struct statfs* buf)
-PASS_THROUGH_BODY(statfs, path, buf)
-
-PASS_THROUGH_DECL(statfs64, int, const char* path, struct statfs* buf)
-PASS_THROUGH_BODY(statfs64, path, buf)
-
-PASS_THROUGH_DECL(unlink, int, const char* path)
-PASS_THROUGH_BODY(unlink, path)
-
-PASS_THROUGH_DECL(utime, int, const char* path, const struct utimbuf* buf)
-PASS_THROUGH_BODY(utime, path, buf)
-
-PASS_THROUGH_DECL(utimes, int, const char* path, const struct timeval times[2])
-PASS_THROUGH_BODY(utimes, path, times)
-
-
-PASS_THROUGH_DECL(fopen, FILE*, const char* path, const char* mode)
-PASS_THROUGH_BODY(fopen, path, mode)
-
-PASS_THROUGH_DECL(fopen64, FILE*, const char* path, const char* mode)
-PASS_THROUGH_BODY(fopen64, path, mode)
-
-PASS_THROUGH_DECL(freopen, FILE*, const char* path, const char* mode,
-    FILE* stream)
-PASS_THROUGH_BODY(freopen, path, mode, stream)
-
-PASS_THROUGH_DECL(ftw, int, const char* dirpath,
-          int (*fn) (const char* fpath, const struct stat* sb, int typeflag),
-          int nopenfd)
-PASS_THROUGH_BODY(ftw, dirpath, fn, nopenfd)
-
-PASS_THROUGH_DECL(opendir, DIR*, const char* path)
-PASS_THROUGH_BODY(opendir, path)
-
-PASS_THROUGH_DECL(dlopen, void*, const char* path, int flag)
-PASS_THROUGH_BODY(dlopen, path, flag)
-
-/*
- * Opposite of path translation -- remove prefix.
- *
- * It looks like BSD allows you to pass a NULL value for "buf" to inspire
- * getcwd to allocate storage with malloc() (as an extension to the POSIX
- * definition, which doesn't specify this).  getcwd() is a system call
- * under Linux, so this doesn't work, but that doesn't stop gdb from
- * trying to use it anyway.
- */
-char* getcwd(char* buf, size_t size)
-{
-    CALLTRACEV("%s %p %d\n", __FUNCTION__, buf, size);
-
-    char* result = _ws_getcwd(buf, size);
-    if (buf != NULL && result != NULL) {
-        if (memcmp(buf, gWrapSim.remapBaseDir,
-                    gWrapSim.remapBaseDirLen) == 0)
-        {
-            memmove(buf, buf + gWrapSim.remapBaseDirLen,
-                strlen(buf + gWrapSim.remapBaseDirLen)+1);
-            CALLTRACE("rewrite getcwd() -> %s\n", result);
-        } else {
-            CALLTRACE("not rewriting getcwd(%s)\n", result);
-        }
-    }
-    return result;
-}
-
-/*
- * Need to tweak both pathnames.
- */
-int link(const char* oldPath, const char* newPath)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf1[PATH_MAX];
-    char pathBuf2[PATH_MAX];
-    return _ws_link(rewritePath("link-1", pathBuf1, oldPath),
-                    rewritePath("link-2", pathBuf2, newPath));
-}
-
-/*
- * Need to tweak both pathnames.
- */
-int rename(const char* oldPath, const char* newPath)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf1[PATH_MAX];
-    char pathBuf2[PATH_MAX];
-    return _ws_rename(rewritePath("rename-1", pathBuf1, oldPath),
-                      rewritePath("rename-2", pathBuf2, newPath));
-}
-
-/*
- * Need to tweak both pathnames.
- */
-int symlink(const char* oldPath, const char* newPath)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf1[PATH_MAX];
-    char pathBuf2[PATH_MAX];
-    return _ws_symlink(rewritePath("symlink-1", pathBuf1, oldPath),
-                       rewritePath("symlink-2", pathBuf2, newPath));
-}
-
-/*
- * glibc stat turns into this (32-bit).
- */
-int __xstat(int version, const char* path, struct stat* sbuf)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-    char pathBuf[PATH_MAX];
-    return _ws___xstat(version, rewritePath("__xstat", pathBuf, path),
-        sbuf);
-}
-
-/*
- * glibc stat turns into this (64-bit).
- */
-int __xstat64(int version, const char* path, struct stat* sbuf)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-    char pathBuf[PATH_MAX];
-    return _ws___xstat64(version, rewritePath("__xstat64", pathBuf, path),
-        sbuf);
-}
-
-/*
- * glibc lstat turns into this (32-bit).
- */
-int __lxstat(int version, const char* path, struct stat* sbuf)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-    char pathBuf[PATH_MAX];
-    return _ws___lxstat(version, rewritePath("__lxstat", pathBuf, path),
-        sbuf);
-}
-
-/*
- * glibc lstat turns into this (64-bit).
- */
-int __lxstat64(int version, const char* path, struct stat* sbuf)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-    char pathBuf[PATH_MAX];
-    return _ws___lxstat64(version, rewritePath("__lxstat64", pathBuf, path),
-        sbuf);
-}
-
-/*
- * Copy the argument list out of varargs for execl/execlp/execle.  This
- * leaves the argc value in _argc, and a NULL-terminated array of character
- * pointers in _argv.  We stop at the first NULL argument, so we shouldn't
- * end up copying "envp" out.
- *
- * We could use gcc __builtin_apply_args to just pass stuff through,
- * but that may not get along with the path rewriting.  It's unclear
- * whether we want to rewrite the first argument (i.e. the string that
- * becomes argv[0]); it only makes sense if the exec'ed program is also
- * getting remapped.
- */
-#define COPY_EXEC_ARGLIST(_first, _argc, _argv)                             \
-    int _argc = 0;                                                          \
-    {                                                                       \
-        va_list vargs;                                                      \
-        va_start(vargs, _first);                                            \
-        while (1) {                                                         \
-            _argc++;                                                        \
-            const char* val = va_arg(vargs, const char*);                   \
-            if (val == NULL)                                                \
-                break;                                                      \
-        }                                                                   \
-        va_end(vargs);                                                      \
-    }                                                                       \
-    const char* _argv[_argc+1];                                             \
-    _argv[0] = _first;                                                      \
-    {                                                                       \
-        va_list vargs;                                                      \
-        int i;                                                              \
-        va_start(vargs, _first);                                            \
-        for (i = 1; i < _argc; i++) {                                       \
-            _argv[i] = va_arg(vargs, const char*);                          \
-        }                                                                   \
-        va_end(vargs);                                                      \
-    }                                                                       \
-    _argv[_argc] = NULL;
-
-/*
- * Debug dump.
- */
-static void dumpExecArgs(const char* callName, const char* path,
-    int argc, const char* argv[], char* const envp[])
-{
-    int i;
-
-    CALLTRACE("Calling %s '%s' (envp=%p)\n", callName, path, envp);
-    for (i = 0; i <= argc; i++)
-        CALLTRACE("  %d: %s\n", i, argv[i]);
-}
-
-/*
- * Extract varargs, convert paths, hand off to execv.
- */
-int execl(const char* path, const char* arg, ...)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf[PATH_MAX];
-
-    COPY_EXEC_ARGLIST(arg, argc, argv);
-    dumpExecArgs("execl", path, argc, argv, NULL);
-    path = rewritePath("execl", pathBuf, path);
-    return _ws_execv(path, (char* const*) argv);
-}
-
-/*
- * Extract varargs, convert paths, hand off to execve.
- *
- * The execle prototype in the man page isn't valid C -- it shows the
- * "envp" argument after the "...".  We have to pull it out with the rest
- * of the varargs.
- */
-int execle(const char* path, const char* arg, ...)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf[PATH_MAX];
-
-    COPY_EXEC_ARGLIST(arg, argc, argv);
-
-    /* run through again and find envp */
-    char* const* envp;
-
-    va_list vargs;
-    va_start(vargs, arg);
-    while (1) {
-        const char* val = va_arg(vargs, const char*);
-        if (val == NULL) {
-            envp = va_arg(vargs, char* const*);
-            break;
-        }
-    }
-    va_end(vargs);
-
-    dumpExecArgs("execle", path, argc, argv, envp);
-    path = rewritePath("execl", pathBuf, path);
-
-    return _ws_execve(path, (char* const*) argv, envp);
-}
-
-/*
- * Extract varargs, convert paths, hand off to execvp.
- */
-int execlp(const char* file, const char* arg, ...)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf[PATH_MAX];
-
-    COPY_EXEC_ARGLIST(arg, argc, argv);
-    dumpExecArgs("execlp", file, argc, argv, NULL);
-    file = rewritePath("execlp", pathBuf, file);
-    return _ws_execvp(file, (char* const*) argv);
-}
-
-/*
- * Update path, forward to execv.
- */
-int execv(const char* path, char* const argv[])
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf[PATH_MAX];
-
-    path = rewritePath("execv", pathBuf, path);
-    return _ws_execv(path, argv);
-}
-
-/*
- * Shouldn't need to do anything unless they specified a full path to execvp.
- */
-int execvp(const char* file, char* const argv[])
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    char pathBuf[PATH_MAX];
-
-    file = rewritePath("execvp", pathBuf, file);
-    return _ws_execvp(file, argv);
-}
-
-
-/*
- * ===========================================================================
- *      Device fakery
- * ===========================================================================
- */
-
-/*
- * Need to do filesystem translation and show fake devices.
- */
-int access(const char* pathName, int mode)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    int status = wsInterceptDeviceAccess(pathName, mode);
-    if (status == 0)
-        return 0;
-    else if (status == -2)
-        return -1;          // errno already set
-    else {
-        char pathBuf[PATH_MAX];
-        return _ws_access(rewritePath("access", pathBuf, pathName), mode);
-    }
-}
-
-/*
- * Common handler for open().
- */
-int openCommon(const char* pathName, int flags, mode_t mode)
-{
-    char pathBuf[PATH_MAX];
-    int fd;
-
-    assert(gWrapSim.initialized);
-
-    fd = wsInterceptDeviceOpen(pathName, flags);
-    if (fd >= 0) {
-        return fd;
-    } else if (fd == -2) {
-        /* errno should be set */
-        return -1;
-    }
-
-    if ((flags & O_CREAT) != 0) {
-        fd = _ws_open(rewritePath("open", pathBuf, pathName), flags, mode);
-        CALLTRACE("open(%s, 0x%x, 0%o) = %d\n", pathName, flags, mode, fd);
-    } else {
-        fd = _ws_open(rewritePath("open", pathBuf, pathName), flags, 0);
-        CALLTRACE("open(%s, 0x%x) = %d\n", pathName, flags, fd);
-    }
-    return fd;
-}
-
-/*
- * Replacement open() and variants.
- *
- * We have to use the vararg decl for the standard call so it matches
- * the definition in fcntl.h.
- */
-int open(const char* pathName, int flags, ...)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    mode_t mode = 0;
-    if ((flags & O_CREAT) != 0) {
-        va_list args;
-
-        va_start(args, flags);
-        mode = va_arg(args, mode_t);
-        va_end(args);
-    }
-
-    return openCommon(pathName, flags, mode);
-}
-int __open(const char* pathName, int flags, mode_t mode)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    return openCommon(pathName, flags, mode);
-}
-
-/*
- * Common handler for open64().
- */
-int open64Common(const char* pathName, int flags, mode_t mode)
-{
-    char pathBuf[PATH_MAX];
-    int fd;
-
-    assert(gWrapSim.initialized);
-
-    fd = wsInterceptDeviceOpen(pathName, flags);
-    if (fd >= 0) {
-        return fd;
-    }
-
-    if ((flags & O_CREAT) != 0) {
-        fd = _ws_open64(rewritePath("open64", pathBuf, pathName), flags, mode);
-        CALLTRACE("open64(%s, 0x%x, 0%o) = %d\n", pathName, flags, mode, fd);
-    } else {
-        fd = _ws_open64(rewritePath("open64", pathBuf, pathName), flags, 0);
-        CALLTRACE("open64(%s, 0x%x) = %d\n", pathName, flags, fd);
-    }
-    return fd;
-}
-
-/*
- * Replacement open64() and variants.
- *
- * We have to use the vararg decl for the standard call so it matches
- * the definition in fcntl.h.
- */
-int open64(const char* pathName, int flags, ...)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    mode_t mode = 0;
-    if ((flags & O_CREAT) != 0) {
-        va_list args;
-
-        va_start(args, flags);
-        mode = va_arg(args, mode_t);
-        va_end(args);
-    }
-    return open64Common(pathName, flags, mode);
-}
-int __open64(const char* pathName, int flags, mode_t mode)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    return open64Common(pathName, flags, mode);
-}
-
-
-int dup(int fd)
-{
-    CALLTRACEV("%s(%d)\n", __FUNCTION__, fd);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        FakeDev* newDev = dev->dup(dev, fd);
-        if (newDev != NULL) {
-            /*
-             * Now that the device entry is ready, add it to the list.
-             */
-            wsLog("## dup'ed fake dev %d: '%s' %p\n",
-                newDev->fd, newDev->debugName, newDev->state);
-            gWrapSim.fakeFdList[newDev->fd - kFakeFdBase] = newDev;
-            return newDev->fd;
-        }
-        return -1;
-    } else {
-        CALLTRACE("dup(%d)\n", fd);
-        return _ws_dup(fd);
-    }
-}
-
-
-/*
- * Close a file descriptor.
- */
-int close(int fd)
-{
-    CALLTRACEV("%s(%d)\n", __FUNCTION__, fd);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        int result = dev->close(dev, fd);
-        wsFreeFakeDev(dev);
-        return result;
-    } else {
-        CALLTRACE("close(%d)\n", fd);
-        return _ws_close(fd);
-    }
-}
-
-/*
- * Map a region.
- */
-void* mmap(void* start, size_t length, int prot, int flags, int fd,
-    __off_t offset)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        return dev->mmap(dev, start, length, prot, flags, fd, offset);
-    } else {
-        CALLTRACE("mmap(%p, %d, %d, %d, %d, %d)\n",
-            start, (int) length, prot, flags, fd, (int) offset);
-        return _ws_mmap(start, length, prot, flags, fd, offset);
-    }
-}
-
-/*
- * Map a region.
- */
-void* mmap64(void* start, size_t length, int prot, int flags, int fd,
-    __off64_t offset)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        return dev->mmap(dev, start, length, prot, flags, fd, (__off_t) offset);
-    } else {
-        CALLTRACE("mmap64(%p, %d, %d, %d, %d, %d)\n",
-            start, (int) length, prot, flags, fd, (int) offset);
-        return _ws_mmap(start, length, prot, flags, fd, offset);
-    }
-}
-
-/*
- * The Linux headers show this with a vararg header, but as far as I can
- * tell the kernel always expects 3 args.
- */
-int ioctl(int fd, int request, ...)
-{
-    CALLTRACEV("%s(%d, %d, ...)\n", __FUNCTION__, fd, request);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    va_list args;
-    void* argp;
-
-    /* extract argp from varargs */
-    va_start(args, request);
-    argp = va_arg(args, void*);
-    va_end(args);
-
-    if (dev != NULL) {
-        return dev->ioctl(dev, fd, request, argp);
-    } else {
-        CALLTRACE("ioctl(%d, 0x%x, %p)\n", fd, request, argp);
-        return _ws_ioctl(fd, request, argp);
-    }
-}
-
-/*
- * Read data.
- */
-ssize_t read(int fd, void* buf, size_t count)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        return dev->read(dev, fd, buf, count);
-    } else {
-        CALLTRACE("read(%d, %p, %u)\n", fd, buf, count);
-        return _ws_read(fd, buf, count);
-    }
-}
-
-/*
- * Write data.
- */
-ssize_t write(int fd, const void* buf, size_t count)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        return dev->write(dev, fd, buf, count);
-    } else {
-        CALLTRACE("write(%d, %p, %u)\n", fd, buf, count);
-        return _ws_write(fd, buf, count);
-    }
-}
-
-/*
- * Read a data vector.
- */
-ssize_t readv(int fd, const struct iovec* vector, int count)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        return dev->readv(dev, fd, vector, count);
-    } else {
-        CALLTRACE("readv(%d, %p, %u)\n", fd, vector, count);
-        return _ws_readv(fd, vector, count);
-    }
-}
-
-/*
- * Write a data vector.
- */
-ssize_t writev(int fd, const struct iovec* vector, int count)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    FakeDev* dev = wsFakeDevFromFd(fd);
-    if (dev != NULL) {
-        return dev->writev(dev, fd, vector, count);
-    } else {
-        CALLTRACE("writev(%d, %p, %u)\n", fd, vector, count);
-        return _ws_writev(fd, vector, count);
-    }
-}
-
-/*
- * Set the scheduling priority.  The sim doesn't run as root, so we have
- * to fake this out.
- *
- * For now, do some basic verification of the which and who parameters,
- * but otherwise return success.  In the future we may want to track
- * these so getpriority works.
- */
-int setpriority(__priority_which_t which, id_t who, int what)
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    if (which != PRIO_PROCESS &&
-        which != PRIO_PGRP &&
-        which != PRIO_USER) {
-        return EINVAL;
-    }
-
-    if ((int)who < 0) {
-        return ESRCH;
-    }
-
-    return 0;
-}
-
-/*
- * Pretend to be running as root, so the Android framework
- * doesn't complain about permission problems all over the
- * place.
- */
-uid_t getuid(void)
-{
-    return 0;
-}
-
-#if 0
-/*
- * Create a pipe.  (Only needed for debugging an fd leak.)
- */
-int pipe(int filedes[2])
-{
-    CALLTRACEV("%s\n", __FUNCTION__);
-
-    int result = _ws_pipe(filedes);
-    if (result == 0)
-        CALLTRACE("pipe(%p) -> %d,%d\n", filedes, filedes[0], filedes[1]);
-    if (filedes[0] == 83)
-        abort();
-    return result;
-}
-#endif
diff --git a/simulator/wrapsim/LaunchWrapper.c b/simulator/wrapsim/LaunchWrapper.c
deleted file mode 100644
index c4f0efb..0000000
--- a/simulator/wrapsim/LaunchWrapper.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Launch the specified program and, if "-wait" was specified, wait for it
- * to exit.
- *
- * When in "wait mode", print a message indicating the exit status, then
- * wait for Ctrl-C before we exit.  This is useful if we were launched
- * with "xterm -e", because it lets us see the output before the xterm bails.
- *
- * We want to ignore signals while waiting, so Ctrl-C kills the child rather
- * than us, but we need to configure the signals *after* the fork() so we
- * don't block them for the child too.
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <limits.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <assert.h>
-
-/*
- * This is appended to $ANDROID_PRODUCT_OUT,
- * e.g. "/work/device/out/debug/host/linux-x8x/product/sim".
- */
-static const char* kWrapLib = "/system/lib/libwrapsim.so";
-
-
-/*
- * Configure LD_PRELOAD if possible.
- *
- * Returns newly-allocated storage with the preload path.
- */
-static char* configurePreload(void)
-{
-    const char* outEnv = getenv("ANDROID_PRODUCT_OUT");
-    const char* preloadEnv = getenv("LD_PRELOAD");
-    char* preload = NULL;
-
-    if (preloadEnv != NULL) {
-        /* TODO: append our stuff to existing LD_PRELOAD string */
-        fprintf(stderr,
-            "LW WARNING: LD_PRELOAD already set, not adding libwrapsim\n");
-    } else if (outEnv == NULL || *outEnv == '\0') {
-        fprintf(stderr, "LW WARNING: "
-            "$ANDROID_PRODUCT_OUT not in env, not setting LD_PRELOAD\n");
-    } else {
-        preload = (char*) malloc(strlen(outEnv) + strlen(kWrapLib) +1);
-        sprintf(preload, "%s%s", outEnv, kWrapLib);
-        setenv("LD_PRELOAD", preload, 1);
-        printf("LW: launching with LD_PRELOAD=%s\n", preload);
-    }
-
-    /* Let the process know that it's executing inside this LD_PRELOAD
-     * wrapper.
-     */
-    setenv("ANDROID_WRAPSIM", "1", 1);
-
-    return preload;
-}
-
-/*
- * Configure some environment variables that the runtime wants.
- *
- * Returns 0 if all goes well.
- */
-static int configureEnvironment()
-{
-    const char* outEnv = getenv("ANDROID_PRODUCT_OUT");
-    char pathBuf[PATH_MAX];
-    int outLen;
-
-    if (outEnv == NULL || *outEnv == '\0') {
-        fprintf(stderr, "LW WARNING: "
-            "$ANDROID_PRODUCT_OUT not in env, not configuring environment\n");
-        return 1;
-    }
-    outLen = strlen(outEnv);
-    assert(outLen + 64 < PATH_MAX);
-    memcpy(pathBuf, outEnv, outLen);
-    strcpy(pathBuf + outLen, "/system/lib");
-
-    /*
-     * Linux wants LD_LIBRARY_PATH
-     * Mac OS X wants DYLD_LIBRARY_PATH
-     * gdb under Mac OS X tramples on both of the above, so we added
-     * ANDROID_LIBRARY_PATH as a workaround.
-     *
-     * We're only supporting Linux now, so just set LD_LIBRARY_PATH.  Note
-     * this stomps the existing value, if any.
-     *
-     * If we only needed this for System.loadLibrary() we could do it later,
-     * but we need it to get the runtime started.
-     */
-    printf("LW: setting LD_LIBRARY_PATH=%s\n", pathBuf);
-    setenv("LD_LIBRARY_PATH", pathBuf, 1);
-
-    /*
-     * Trusted certificates are found, for some bizarre reason, through
-     * the JAVA_HOME environment variable.  We don't need to set this
-     * here, but it's convenient to do so.
-     */
-    strcpy(pathBuf /*+ outLen*/, "/system");
-    printf("LW: setting JAVA_HOME=%s\n", pathBuf);
-    setenv("JAVA_HOME", pathBuf, 1);
-
-    return 0;
-}
-
-/*
- * Redirect stdout/stderr to the specified file.  If "fileName" is NULL,
- * this returns successfully without doing anything.
- *
- * Returns 0 on success.
- */
-static int redirectStdio(const char* fileName)
-{
-    int fd;
-
-    if (fileName == NULL)
-        return 0;
-
-    printf("Redirecting stdio to append to '%s'\n", fileName);
-    fflush(stdout);
-    fflush(stderr);
-
-    fd = open(fileName, O_WRONLY | O_APPEND | O_CREAT, 0666);
-    if (fd < 0) {
-        fprintf(stderr, "ERROR: unable to open '%s' for writing\n",
-            fileName);
-        return 1;
-    }
-    dup2(fd, 1);
-    dup2(fd, 2);
-    close(fd);
-
-    return 0;
-}
-
-/*
- * Launch the requested process directly.
- *
- * On success this does not return (ever).
- */
-static int launch(char* argv[], const char* outputFile)
-{
-    (void) configurePreload();
-    (void) redirectStdio(outputFile);
-    execvp(argv[0], argv);
-    fprintf(stderr, "execvp %s failed: %s\n", argv[0], strerror(errno));
-    return 1;
-}
-
-/*
- * Launch in a sub-process and wait for it to finish.
- */
-static int launchWithWait(char* argv[], const char* outputFile)
-{
-    pid_t child;
-
-    child = fork();
-    if (child < 0) {
-        fprintf(stderr, "fork() failed: %s\n", strerror(errno));
-        return 1;
-    } else if (child == 0) {
-        /*
-         * This is the child, set up LD_PRELOAD if possible and launch.
-         */
-        (void) configurePreload();
-        (void) redirectStdio(outputFile);
-        execvp(argv[0], argv);
-        fprintf(stderr, "execvp %s failed: %s\n", argv[0], strerror(errno));
-        return 1;
-    } else {
-        pid_t result;
-        int status;
-
-        signal(SIGINT, SIG_IGN);
-        signal(SIGQUIT, SIG_IGN);
-
-        while (1) {
-            printf("LW: in pid %d (grp=%d), waiting on pid %d\n",
-                (int) getpid(), (int) getpgrp(), (int) child);
-            result = waitpid(child, &status, 0);
-            if (result < 0) {
-                if (errno == EINTR) {
-                    printf("Hiccup!\n");
-                    continue;
-                } else {
-                    fprintf(stderr, "waitpid failed: %s\n", strerror(errno));
-                    return 1;
-                }
-            } else if (result != child) {
-                fprintf(stderr, "bizarre: waitpid returned %d (wanted %d)\n",
-                    result, child);
-                return 1;
-            } else {
-                break;
-            }
-        }
-
-        printf("\n");
-        if (WIFEXITED(status)) {
-            printf("LW: process exited (status=%d)", WEXITSTATUS(status));
-        } else if (WIFSIGNALED(status)) {
-            printf("LW: process killed by signal %d", WTERMSIG(status));
-        } else {
-            printf("LW: process freaked out, status=0x%x\n", status);
-        }
-        if (WCOREDUMP(status)) {
-            printf(" (core dumped)");
-        }
-        printf("\n");
-
-        signal(SIGINT, SIG_DFL);
-        signal(SIGQUIT, SIG_DFL);
-
-        /*
-         * The underlying process may have changed process groups and pulled
-         * itself into the foreground.  Now that it's gone, pull ourselves
-         * back into the foreground.
-         */
-        signal(SIGTTOU, SIG_IGN);
-        if (tcsetpgrp(fileno(stdin), getpgrp()) != 0)
-            fprintf(stderr, "WARNING: tcsetpgrp failed\n");
-
-        printf("\nHit Ctrl-C or close window.\n");
-
-        while (1) {
-            sleep(10);
-        }
-
-        /* not reached */
-        return 0;
-    }
-}
-
-
-/*
- * All args are passed through.
- */
-int main(int argc, char** argv)
-{
-    int waitForChild = 0;
-    const char* outputFile = NULL;
-    int result;
-
-    /*
-     * Skip past the reference to ourselves, and check for args.
-     */
-    argv++;
-    argc--;
-    while (argc > 0) {
-        if (strcmp(argv[0], "-wait") == 0) {
-            waitForChild = 1;
-        } else if (strcmp(argv[0], "-output") == 0 && argc > 1) {
-            argv++;
-            argc--;
-            outputFile = argv[0];
-        } else {
-            /* no more args for us */
-            break;
-        }
-
-        argv++;
-        argc--;
-    }
-
-    if (argc == 0) {
-        fprintf(stderr,
-            "Usage: launch-wrapper [-wait] [-output filename] <cmd> [args...]\n");
-        result = 2;
-        goto bail;
-    }
-
-    /*
-     * Configure some environment variables.
-     */
-    if (configureEnvironment() != 0) {
-        result = 1;
-        goto bail;
-    }
-
-    /*
-     * Launch.
-     */
-    if (waitForChild)
-        result = launchWithWait(argv, outputFile);
-    else
-        result = launch(argv, outputFile);
-
-bail:
-    if (result != 0)
-        sleep(2);
-    return result;
-}
-
diff --git a/simulator/wrapsim/Log.c b/simulator/wrapsim/Log.c
deleted file mode 100644
index 7edb677..0000000
--- a/simulator/wrapsim/Log.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Debug-logging code.
- */
-#include "Common.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <time.h>
-
-/*
- * Write a message to our private log file.  This is a little awkward since
- * some or all of the system calls we want to use are being intercepted.
- */
-void wsLog(const char* format, ...)
-{
-#if defined(HAVE_LOCALTIME_R)
-    struct tm tmBuf;
-#endif
-    struct tm* ptm;
-    time_t now;
-    char timeBuf[32];
-    char prefixBuf[64];
-    int prefixLen;
-    char msgBuf[256];
-    int msgLen;
-
-    if (gWrapSim.logFd < 0)
-        return;
-
-    /*
-     * Create a prefix with a timestamp.
-     */
-    now = time(NULL);
-#if defined(HAVE_LOCALTIME_R)
-    ptm = localtime_r(&now, &tmBuf);
-#else
-    ptm = localtime(&now);
-#endif
-    //strftime(timeBuf, sizeof(timeBuf), "%m-%d %H:%M:%S", ptm);
-    strftime(timeBuf, sizeof(timeBuf), "%H:%M:%S", ptm);
-
-    prefixLen = snprintf(prefixBuf, sizeof(prefixBuf), "%s %5d ",
-        timeBuf, (int) getpid());
-
-    /*
-     * Format the message into a buffer.
-     */
-    va_list args;
-
-    va_start(args, format);
-    msgLen = vsnprintf(msgBuf, sizeof(msgBuf), format, args);
-    va_end(args);
-
-    /* if we overflowed, trim and annotate */
-    if (msgLen >= (int) sizeof(msgBuf)) {
-        msgBuf[sizeof(msgBuf)-2] = '!';
-        msgBuf[sizeof(msgBuf)-1] = '\n';
-        msgLen = sizeof(msgBuf);
-    }
-
-    /*
-     * Write the whole thing in one shot.  The log file was opened with
-     * O_APPEND so we don't have to worry about clashes.
-     */
-    struct iovec logVec[2];
-    logVec[0].iov_base = prefixBuf;
-    logVec[0].iov_len = prefixLen;
-    logVec[1].iov_base = msgBuf;
-    logVec[1].iov_len = msgLen;
-    (void) _ws_writev(gWrapSim.logFd, logVec, 2);
-}
-
diff --git a/simulator/wrapsim/Log.h b/simulator/wrapsim/Log.h
deleted file mode 100644
index 024ba44..0000000
--- a/simulator/wrapsim/Log.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Logging.
- */
-#ifndef _WRAPSIM_LOG_H
-#define _WRAPSIM_LOG_H
-
-
-/*
- * Log debug info.
- */
-void wsLog(const char* format, ...)
-    #if defined(__GNUC__)
-        __attribute__ ((format(printf, 1, 2)))
-    #endif
-    ;
-
-#endif /*_WRAPSIM_LOG_H*/
diff --git a/simulator/wrapsim/README.txt b/simulator/wrapsim/README.txt
deleted file mode 100644
index 364d96d..0000000
--- a/simulator/wrapsim/README.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-This shared library is used with LD_PRELOAD to wrap the Android runtime
-when used with the desktop simulator.
-
-Because LD_PRELOAD is part of the environment when gdb and valgrind are
-invoked, the wrapper can "see" activity from both of these (more so gdb
-than valgrind).  For this reason it needs to be very careful about which
-"open" calls are intercepted.
-
-It's also important that none of the intercepted system or library calls
-are invoked directly, or infinite recursion could result.
-
-Avoid creating dependencies on other libraries.
-
-
-To debug wrapsim, set WRAPSIM_LOG to a log file before launching, e.g.
-
-% WRAPSIM_LOG=/tmp/wraplog.txt simulator
-
-For more verbose logging, you can enable the verbose forms of CALLTRACE
-and CALLTRACEV in Intercept.c.
-
-To build, you will need to have the 32-bit libaudio2 development package
-installed. On Ubuntu Hardy, do something like:
-% sudo apt-get install lib32asound2-dev
diff --git a/simulator/wrapsim/SimMgr.c b/simulator/wrapsim/SimMgr.c
deleted file mode 100644
index 9b566cf..0000000
--- a/simulator/wrapsim/SimMgr.c
+++ /dev/null
@@ -1,988 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Simulator interactions.
- *
- * TODO: for multi-process we probably need to switch to a new process
- * group if we are the first process (could be runtime, could be gdb),
- * rather than wait for the simulator to tell us to switch.
- */
-#include "Common.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/sem.h>
-#include <sys/un.h>
-#include <signal.h>
-#include <assert.h>
-
-// fwd
-static int connectToSim(void);
-static void listenToSim(void);
-
-/*
- * Env var to restrict who tries to talk to the front end.
- */
-#define kWrapSimConnectedEnv    "WRAP_SIM_CONNECTED"
-
-
-/*
- * Signal the main thread that we're ready to continue.
- */
-static void signalMainThread(void)
-{
-    int cc;
-
-    cc = pthread_mutex_lock(&gWrapSim.startLock);
-    assert(cc == 0);
-
-    gWrapSim.startReady = 1;
-
-    cc = pthread_cond_signal(&gWrapSim.startCond);
-    assert(cc == 0);
-
-    cc = pthread_mutex_unlock(&gWrapSim.startLock);
-    assert(cc == 0);
-}
-
-
-/*
- * Entry point for the sim management thread.
- *
- * Once we have established a connection to the simulator and are ready
- * for other threads to send messages, we signal the main thread.
- */
-static void* simThreadEntry(void* arg)
-{
-    wsLog("--- sim manager thread started\n");
-
-    /*
-     * Establish a connection to the simulator front-end.  If we can't do
-     * that, we have no access to input or output devices, and we might
-     * as well give up.
-     */
-    if (connectToSim() != 0) {
-        signalMainThread();
-        return NULL;
-    }
-
-    /* success! */
-    wsLog("--- sim manager thread ready\n");
-    gWrapSim.simulatorInitFailed = 0;
-    signalMainThread();
-
-    listenToSim();
-
-    wsLog("--- sim manager thread exiting\n");
-
-    return NULL;
-}
-
-/*
- * If we think we're not yet connected to the sim, do so now.  We only
- * want to do this once per process *group*, so we control access with
- * an environment variable.
- */
-int wsSimConnect(void)
-{
-    /*
-     * If the environment variable hasn't been set, assume we're the first
-     * to get here, and should attach to the simulator.  We set the env
-     * var here whether or not we succeed in connecting to the sim.
-     *
-     * (For correctness we should wrap the getenv/setenv in a semaphore.)
-     */
-    if (getenv(kWrapSimConnectedEnv) == NULL) {
-        pthread_attr_t threadAttr;
-        pthread_t threadHandle;
-        int cc;
-
-        gWrapSim.simulatorInitFailed = 1;
-        setenv(kWrapSimConnectedEnv, "1", 1);
-
-        cc = pthread_mutex_lock(&gWrapSim.startLock);
-        assert(cc == 0);
-
-        pthread_attr_init(&threadAttr);
-        pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_DETACHED);
-        cc = pthread_create(&threadHandle, &threadAttr, simThreadEntry, NULL);
-        if (cc != 0) {
-            wsLog("Unable to create new thread: %s\n", strerror(errno));
-            abort();
-        }
-
-        while (!gWrapSim.startReady) {
-            cc = pthread_cond_wait(&gWrapSim.startCond, &gWrapSim.startLock);
-            assert(cc == 0);
-        }
-
-        cc = pthread_mutex_unlock(&gWrapSim.startLock);
-        assert(cc == 0);
-
-        if (gWrapSim.simulatorInitFailed) {
-            wsLog("Simulator initialization failed, bailing\n");
-
-            /* this *should* be okay to do */
-            fprintf(stderr, "Fatal error:"
-                " unable to connect to sim front-end (not running?)\n");
-            abort();
-        }
-    }
-
-    wsLog("+++ continuing\n");
-    return 0;
-}
-
-
-/*
- * ===========================================================================
- *      Message / MessageStream
- * ===========================================================================
- */
-
-/*
- * This is a quick & dirty rewrite of the C++ Message and MessageStream
- * classes, ported to C, reduced in generality, with syscalls stubbed
- * where necessary.  I didn't fix the API to make it more sensible in C
- * (which lacks destructors), so some of this is a little fragile or
- * awkward.
- */
-
-/* values for message type byte; must match android::Message constants */
-typedef enum MessageType {
-    kTypeUnknown = 0,
-    kTypeRaw,           // chunk of raw data
-    kTypeConfig,        // send a name=value pair to peer
-    kTypeCommand,       // simple command w/arg
-    kTypeCommandExt,    // slightly more complicated command
-    kTypeLogBundle,     // multi-part log message
-} MessageType;
-
-/*
- * Reusable message object.
- */
-typedef struct Message {
-    MessageType     mType;
-    unsigned char*  mData;
-    int             mLength;
-} Message;
-
-/* magic init messages; must match android::MessageStream constants */
-enum {
-    kHelloMsg       = 0x4e303047,       // 'N00G'
-    kHelloAckMsg    = 0x31455221,       // '1ER!'
-};
-
-
-/*
- * Clear out a Message.
- */
-static void Message_clear(Message* msg)
-{
-    memset(msg, 0, sizeof(Message));
-}
-
-/*
- * Keep reading until we get all bytes or hit EOF/error.  "fd" is expected
- * to be in blocking mode.
- *
- * Returns 0 on success.
- */
-static int readAll(int fd, void* buf, size_t count)
-{
-    ssize_t actual;
-    ssize_t have;
-
-    have = 0;
-    while (have != (ssize_t) count) {
-        actual = _ws_read(fd, ((char*) buf) + have, count - have);
-        if (actual < 0) {
-            if (errno == EINTR)
-                continue;
-            wsLog("read %d failed: %s\n", fd, strerror(errno));
-        } else if (actual == 0) {
-            wsLog("early EOF on %d\n", fd);
-            return -1;
-        } else {
-            have += actual;
-        }
-
-        assert(have <= (ssize_t)count);
-    }
-
-    return 0;
-}
-
-#if 0
-/*
- * Keep writing until we put all bytes or hit an error.  "fd" is expected
- * to be in blocking mode.
- *
- * Returns 0 on success.
- */
-static int writeAll(int fd, const void* buf, size_t count)
-{
-    ssize_t actual;
-    ssize_t have;
-
-    have = 0;
-    while (have != count) {
-        actual = _ws_write(fd, ((const char*) buf) + have, count - have);
-        if (actual < 0) {
-            if (errno == EINTR)
-                continue;
-            wsLog("write %d failed: %s\n", fd, strerror(errno));
-        } else if (actual == 0) {
-            wsLog("wrote zero on %d\n", fd);
-            return -1;
-        } else {
-            have += actual;
-        }
-
-        assert(have <= count);
-    }
-
-    return 0;
-}
-#endif
-
-/*
- * Read a message from the specified file descriptor.
- *
- * The caller must Message_release(&msg).
- *
- * We guarantee 32-bit alignment for msg->mData.
- */
-static int Message_read(Message* msg, int fd)
-{
-    unsigned char header[4];
-
-    readAll(fd, header, 4);
-
-    msg->mType = (MessageType) header[2];
-    msg->mLength = header[0] | header[1] << 8;
-    msg->mLength -= 2;   // we already read two of them in the header
-
-    if (msg->mLength > 0) {
-        int actual;
-
-        /* Linux malloc guarantees at least 32-bit alignment */
-        msg->mData = (unsigned char*) malloc(msg->mLength);
-        if (msg->mData == NULL) {
-            wsLog("alloc %d failed\n", msg->mLength);
-            return -1;
-        }
-
-        if (readAll(fd, msg->mData, msg->mLength) != 0) {
-            wsLog("failed reading message body (wanted %d)\n", msg->mLength);
-            return -1;
-        }
-    } else {
-        msg->mData = NULL;
-    }
-
-    return 0;
-}
-
-/*
- * Write a message to the specified file descriptor.
- *
- * The caller must Message_release(&msg).
- */
-static int Message_write(Message* msg, int fd)
-{
-    struct iovec writeVec[2];
-    unsigned char header[4];
-    int len, numVecs;
-    ssize_t actual;
-
-    len = msg->mLength + 2;
-    header[0] = len & 0xff;
-    header[1] = (len >> 8) & 0xff;
-    header[2] = msg->mType;
-    header[3] = 0;
-    writeVec[0].iov_base = header;
-    writeVec[0].iov_len = 4;
-    numVecs = 1;
-
-    if (msg->mLength > 0) {
-        assert(msg->mData != NULL);
-        writeVec[1].iov_base = msg->mData;
-        writeVec[1].iov_len = msg->mLength;
-        numVecs++;
-    }
-
-    /* write it all in one shot; not worrying about partial writes for now */
-    actual = _ws_writev(fd, writeVec, numVecs);
-    if (actual != len+2) {
-        wsLog("failed writing message to fd %d: %d of %d %s\n",
-            fd, actual, len+2, strerror(errno));
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Release storage associated with a Message.
- */
-static void Message_release(Message* msg)
-{
-    free(msg->mData);
-    msg->mData = NULL;
-}
-
-/*
- * Extract a name/value pair from a message.
- */
-static int getConfig(const Message* msg, const char** name, const char** val)
-{
-    if (msg->mLength < 2) {
-        wsLog("message len (%d) is too short\n", msg->mLength);
-        return -1;
-    }
-    const char* ptr = (const char*) msg->mData;
-
-    *name = (const char*) ptr;
-    *val = (const char*) (ptr + strlen((char*)ptr) +1);
-    return 0;
-}
-
-/*
- * Extract a command from a message.
- */
-static int getCommand(const Message* msg, int* pCmd, int* pArg)
-{
-    if (msg->mLength != sizeof(int) * 2) {
-        wsLog("message len (%d) is wrong for cmd (%d)\n",
-            msg->mLength, sizeof(int) * 2);
-        return -1;
-    }
-
-    /* this assumes 32-bit alignment on mData */
-    const int* ptr = (const int*) msg->mData;
-
-    *pCmd = ptr[0];
-    *pArg = ptr[1];
-
-    return 0;
-}
-
-/*
- * Extract an extended command from a message.
- */
-static int getCommandExt(const Message* msg, int* pCmd, int* pArg0,
-    int* pArg1, int* pArg2)
-{
-    if (msg->mLength != sizeof(int) * 4) {
-        wsLog("message len (%d) is wrong for cmd (%d)\n",
-            msg->mLength, sizeof(int) * 4);
-        return -1;
-    }
-
-    /* this assumes 32-bit alignment on mData */
-    const int* ptr = (const int*) msg->mData;
-
-    *pCmd = ptr[0];
-    *pArg0 = ptr[1];
-    *pArg1 = ptr[2];
-    *pArg2 = ptr[3];
-
-    return 0;
-}
-
-/*
- * Attach 8 bytes of data with "cmd" and "arg" to "msg".
- *
- * "msg->mData" will need to be freed by the caller.  (This approach made
- * more sense when C++ destructors were available, but it's just not worth
- * reworking it.)
- */
-static int setCommand(Message* msg, int cmd, int arg)
-{
-    Message_clear(msg);
-
-    msg->mLength = 8;
-    msg->mData = malloc(msg->mLength);
-    msg->mType = kTypeCommand;
-
-    /* assumes 32-bit alignment on malloc blocks */
-    int* pInt = (int*) msg->mData;
-    pInt[0] = cmd;
-    pInt[1] = arg;
-
-    return 0;
-}
-
-/*
- * Construct the full path.  The caller must free() the return value.
- */
-static char* makeFilename(const char* name)
-{
-    static const char* kBasePath = "/tmp/android-";
-    char* fileName;
-
-    assert(name != NULL && name[0] != '\0');
-
-    fileName = (char*) malloc(strlen(kBasePath) + strlen(name) + 1);
-    strcpy(fileName, kBasePath);
-    strcat(fileName, name);
-
-    return fileName;
-}
-
-/*
- * Attach to a SysV shared memory segment.
- */
-static int attachToShmem(int key, int* pShmid, void** pAddr, long* pLength)
-{
-    int shmid;
-
-    shmid = shmget(key, 0, 0);
-    if (shmid == -1) {
-        wsLog("ERROR: failed to find shmem key=%d\n", key);
-        return -1;
-    }
-
-    void* addr = shmat(shmid, NULL, 0);
-    if (addr == (void*) -1) {
-        wsLog("ERROR: could not attach to key=%d shmid=%d\n", key, shmid);
-        return -1;
-    }
-
-    struct shmid_ds shmids;
-    int cc;
-
-    cc = shmctl(shmid, IPC_STAT, &shmids);
-    if (cc != 0) {
-        wsLog("ERROR: could not IPC_STAT shmid=%d\n", shmid);
-        return -1;
-    }
-    *pLength = shmids.shm_segsz;
-
-    *pAddr = addr;
-    *pShmid = shmid;
-    return 0;
-}
-
-/*
- * Attach to a SysV semaphore.
- */
-static int attachToSem(int key, int* pSemid)
-{
-    int semid;
-
-    semid = semget(key, 0, 0);
-    if (semid == -1) {
-        wsLog("ERROR: failed to attach to semaphore key=%d\n", key);
-        return -1;
-    }
-
-    *pSemid = semid;
-    return 0;
-}
-
-/*
- * "Adjust" a semaphore.
- */
-static int adjustSem(int semid, int adj)
-{
-    const int wait = 1;
-    struct sembuf op;
-    int cc;
-
-    op.sem_num = 0;
-    op.sem_op = adj;
-    op.sem_flg = SEM_UNDO;
-    if (!wait)
-        op.sem_flg |= IPC_NOWAIT;
-
-    cc = semop(semid, &op, 1);
-    if (cc != 0) {
-        if (wait || errno != EAGAIN) {
-            wsLog("Warning:"
-                " semaphore adjust by %d failed for semid=%d (errno=%d)\n",
-                adj, semid, errno);
-        }
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Acquire the semaphore associated with a display.
- */
-void wsLockDisplay(int displayIdx)
-{
-    assert(displayIdx >= 0 && displayIdx < gWrapSim.numDisplays);
-    int semid = gWrapSim.display[displayIdx].semid;
-
-    (void) adjustSem(semid, -1);
-}
-
-/*
- * Acquire the semaphore associated with a display.
- */
-void wsUnlockDisplay(int displayIdx)
-{
-    assert(displayIdx >= 0 && displayIdx < gWrapSim.numDisplays);
-    int semid = gWrapSim.display[displayIdx].semid;
-
-    (void) adjustSem(semid, 1);
-}
-
-/*
- * Process the display config from the simulator
- *
- * Right now this is a blob of raw data that looks like this:
- *  +00 magic number
- *  +04 #of displays
- *  +08 display 0:
- *      +00 width
- *      +04 height
- *      +08 format
- *      +0c refresh rate
- *      +10 shmem key
- *  +1c display 1...
- */
-static int handleDisplayConfig(const int* pData, int length)
-{
-    int numDisplays;
-
-    if (length < 8) {
-        wsLog("Bad display config: length is %d\n", length);
-        return -1;
-    }
-    assert(*pData == kDisplayConfigMagic);
-
-    /*
-     * Pull out the #of displays.  If it looks valid, configure the runtime.
-     */
-    pData++;        // skip over magic
-    numDisplays = *pData++;
-
-    if (numDisplays <= 0 || numDisplays > kMaxDisplays) {
-        wsLog("Bizarre display count %d\n", numDisplays);
-        return -1;
-    }
-    if (length != 8 + numDisplays * kValuesPerDisplay * (int)sizeof(int)) {
-        wsLog("Bad display config: length is %d (expected %d)\n",
-            length, 8 + numDisplays * kValuesPerDisplay * (int)sizeof(int));
-        return -1;
-    }
-
-    /*
-     * Extract the config values.
-     *
-     * The runtime doesn't support multiple devices, so we don't either.
-     */
-    int i;
-    for (i = 0; i < numDisplays; i++) {
-        gWrapSim.display[i].width = pData[0];
-        gWrapSim.display[i].height = pData[1];
-        gWrapSim.display[i].shmemKey = pData[4];
-        /* format/refresh no longer needed */
-
-        void* addr;
-        int shmid, semid;
-        long length;
-        if (attachToShmem(gWrapSim.display[i].shmemKey, &shmid, &addr,
-                &length) != 0)
-        {
-            wsLog("Unable to connect to shared memory\n");
-            return -1;
-        }
-
-        if (attachToSem(gWrapSim.display[i].shmemKey, &semid) != 0) {
-            wsLog("Unable to attach to sempahore\n");
-            return -1;
-        }
-
-        gWrapSim.display[i].shmid = shmid;
-        gWrapSim.display[i].addr = addr;
-        gWrapSim.display[i].length = length;
-        gWrapSim.display[i].semid = semid;
-
-        wsLog("Display %d: width=%d height=%d\n",
-            i,
-            gWrapSim.display[i].width,
-            gWrapSim.display[i].height);
-        wsLog("  shmem=0x%08x addr=%p len=%ld semid=%d\n",
-            gWrapSim.display[i].shmemKey,
-            gWrapSim.display[i].addr,
-            gWrapSim.display[i].length,
-            gWrapSim.display[i].semid);
-
-        pData += kValuesPerDisplay;
-    }
-    gWrapSim.numDisplays = numDisplays;
-
-    return 0;
-}
-
-
-/*
- * Initialize our connection to the simulator, which will be listening on
- * a UNIX domain socket.
- *
- * On success, this configures gWrapSim.simulatorFd and returns 0.
- */
-static int openSimConnection(const char* name)
-{
-    int result = -1;
-    char* fileName = NULL;
-    int sock = -1;
-    int cc;
-
-    assert(gWrapSim.simulatorFd == -1);
-
-    fileName = makeFilename(name);
-
-    struct sockaddr_un addr;
-    
-    sock = socket(AF_UNIX, SOCK_STREAM, 0);
-    if (sock < 0) {
-        wsLog("UNIX domain socket create failed (errno=%d)\n", errno);
-        goto bail;
-    }
-
-    /* connect to socket; fails if file doesn't exist */
-    strcpy(addr.sun_path, fileName);    // max 108 bytes
-    addr.sun_family = AF_UNIX;
-    cc = connect(sock, (struct sockaddr*) &addr, SUN_LEN(&addr));
-    if (cc < 0) {
-        // ENOENT means socket file doesn't exist
-        // ECONNREFUSED means socket exists but nobody is listening
-        wsLog("AF_UNIX connect failed for '%s': %s\n",
-            fileName, strerror(errno));
-        goto bail;
-    }
-
-    gWrapSim.simulatorFd = sock;
-    sock = -1;
-
-    result = 0;
-    wsLog("+++ connected to '%s'\n", fileName);
-
-bail:
-    if (sock >= 0)
-        _ws_close(sock);
-    free(fileName);
-    return result;
-}
-
-/*
- * Prepare communication with the front end.  We wait for a "hello" from
- * the other side, and respond in kind.
- */
-static int prepSimConnection(void)
-{
-    /* NOTE: this is endian-specific; we're x86 Linux only, so no problem */
-    static const unsigned int hello = kHelloMsg;
-    static const unsigned int helloAck = kHelloAckMsg;
-    Message msg;
-
-    if (Message_read(&msg, gWrapSim.simulatorFd) != 0) {
-        wsLog("hello read failed\n");
-        return -1;
-    }
-
-    if (memcmp(msg.mData, &hello, 4) != 0) {
-        wsLog("Got bad hello from peer\n");
-        return -1;
-    }
-
-    Message_release(&msg);
-
-    msg.mType = kTypeRaw;
-    msg.mData = (unsigned char*) &helloAck;
-    msg.mLength = 4;
-
-    if (Message_write(&msg, gWrapSim.simulatorFd) != 0) {
-        wsLog("hello ack write failed\n");
-        return -1;
-    }
-
-    return 0;
-}
-
-/*
- * Get the sim front-end configuration.  We loop here until the sim claims
- * to be done with us.
- */
-static int getSimConfig(void)
-{
-    Message msg;
-    int joinNewGroup, grabTerminal, done;
-    int result = -1;
-
-    joinNewGroup = grabTerminal = done = 0;
-    Message_clear(&msg);        // clear out msg->mData
-
-    wsLog("+++ awaiting hardware configuration\n");
-    while (!done) {
-        if (Message_read(&msg, gWrapSim.simulatorFd) != 0) {
-            wsLog("failed receiving config from parent\n");
-            goto bail;
-        }
-
-        if (msg.mType == kTypeCommand) {
-            int cmd, arg;
-
-            if (getCommand(&msg, &cmd, &arg) != 0)
-                goto bail;
-
-            switch (cmd) {
-            case kCommandGoAway:
-                wsLog("Simulator front-end is busy\n");
-                goto bail;
-            case kCommandNewPGroup:
-                joinNewGroup = 1;
-                grabTerminal = (arg != 0);
-                wsLog("Simulator wants us to be in a new pgrp (term=%d)\n",
-                    grabTerminal);
-                break;
-            case kCommandConfigDone:
-                done = 1;
-                break;
-            default:
-                wsLog("Got unexpected command %d/%d\n", cmd, arg);
-                break;
-            }
-        } else if (msg.mType == kTypeRaw) {
-            /* assumes 32-bit alignment and identical byte ordering */
-            int* pData = (int*) msg.mData;
-            if (msg.mLength >= 4 && *pData == kDisplayConfigMagic) {
-                if (handleDisplayConfig(pData, msg.mLength) != 0)
-                    goto bail;
-            }
-        } else if (msg.mType == kTypeConfig) {
-            const char* name = NULL;
-            const char* val = NULL;
-            getConfig(&msg, &name, &val);
-            if(strcmp(name, "keycharmap") == 0) {
-                free((void*)gWrapSim.keyMap);
-                gWrapSim.keyMap = strdup(val);
-            }
-        } else {
-            wsLog("Unexpected msg type %d during startup\n", msg.mType);
-            goto bail;
-        }
-
-        /* clear out the data field if necessary */
-        Message_release(&msg);
-    }
-
-    wsLog("Configuration received from simulator\n");
-
-    if (joinNewGroup) {
-        /* set pgid to pid */
-        pid_t pgid = getpid();
-        setpgid(0, pgid);
-
-        /*
-         * Put our pgrp in the foreground.
-         * tcsetpgrp() from background process causes us to get a SIGTTOU,
-         * which is mostly harmless but makes tcsetpgrp() fail with EINTR.
-         */
-        signal(SIGTTOU, SIG_IGN);
-        if (grabTerminal) {
-            if (tcsetpgrp(fileno(stdin), getpgrp()) != 0) {
-                wsLog("tcsetpgrp(%d, %d) failed (errno=%d)\n",
-                    fileno(stdin), getpgrp(), errno);
-            }
-            wsLog("Set pgrp %d as foreground\n", (int) getpgrp());
-        }
-    
-        /* tell the sim where we're at */
-        Message msg;
-        setCommand(&msg, kCommandNewPGroupCreated, pgid);
-        Message_write(&msg, gWrapSim.simulatorFd);
-        Message_release(&msg);
-    }
-
-    result = 0;
-
-bail:
-    /* make sure the data was freed */
-    Message_release(&msg);
-    //wsLog("bailing, result=%d\n", result);
-    return result;
-}
-
-/*
- * Connect to the simulator and exchange pleasantries.
- *
- * Returns 0 on success.
- */
-static int connectToSim(void)
-{
-    if (openSimConnection(kAndroidPipeName) != 0)
-        return -1;
-
-    if (prepSimConnection() != 0)
-        return -1;
-
-    if (getSimConfig() != 0)
-        return -1;
-
-    wsLog("+++ sim is ready to go\n");
-
-    return 0;
-}
-
-/*
- * Listen to the sim forever or until the front end shuts down, whichever
- * comes first.
- *
- * All we're really getting here are key events.
- */
-static void listenToSim(void)
-{
-    wsLog("--- listening for input events from front end\n");
-
-    while (1) {
-        Message msg;
-
-        Message_clear(&msg);
-        if (Message_read(&msg, gWrapSim.simulatorFd) != 0) {
-            wsLog("--- sim message read failed\n");
-            return;
-        }
-
-        if (msg.mType == kTypeCommand) {
-            int cmd, arg;
-
-            if (getCommand(&msg, &cmd, &arg) != 0) {
-                wsLog("bad command from sim?\n");
-                continue;
-            }
-
-            switch (cmd) {
-            case kCommandQuit:
-                wsLog("--- sim sent us a QUIT message\n");
-                return;
-            case kCommandKeyDown:
-                wsLog("KEY DOWN: %d\n", arg);
-                wsSendSimKeyEvent(arg, 1);
-                break;
-            case kCommandKeyUp:
-                wsLog("KEY UP: %d\n", arg);
-                wsSendSimKeyEvent(arg, 0);
-                break;
-            default:
-                wsLog("--- sim sent unrecognized command %d\n", cmd);
-                break;
-            }
-
-            Message_release(&msg);
-        } else if (msg.mType == kTypeCommandExt) {
-            int cmd, arg0, arg1, arg2;
-
-            if (getCommandExt(&msg, &cmd, &arg0, &arg1, &arg2) != 0) {
-                wsLog("bad ext-command from sim?\n");
-                continue;
-            }
-
-            switch (cmd) {
-            case kCommandTouch:
-                wsSendSimTouchEvent(arg0, arg1, arg2);
-                break;
-            }
-
-            Message_release(&msg);
-        } else {
-            wsLog("--- sim sent non-command message, type=%d\n", msg.mType);
-        }
-    }
-
-    assert(0);      // not reached
-}
-
-
-/*
- * Tell the simulator front-end that the display has been updated.
- */
-void wsPostDisplayUpdate(int displayIdx)
-{
-    if (gWrapSim.simulatorFd < 0) {
-        wsLog("Not posting display update -- sim not ready\n");
-        return;
-    }
-
-    Message msg;
-
-    setCommand(&msg, kCommandUpdateDisplay, displayIdx);
-    Message_write(&msg, gWrapSim.simulatorFd);
-    Message_release(&msg);
-}
-
-/*
- * Send a log message to the front-end.
- */
-void wsPostLogMessage(int logPrio, const char* tag, const char* message)
-{
-    if (gWrapSim.simulatorFd < 0) {
-        wsLog("Not posting log message -- sim not ready\n");
-        return;
-    }
-
-    time_t when = time(NULL);
-    int pid = (int) getpid();
-    int tagLen, messageLen, totalLen;
-
-    tagLen = strlen(tag) +1;
-    messageLen = strlen(message) +1;
-    totalLen = sizeof(int) * 3 + tagLen + messageLen;
-    unsigned char outBuf[totalLen];
-    unsigned char* cp = outBuf;
-
-    /* See Message::set/getLogBundle() in simulator/MessageStream.cpp. */
-    memcpy(cp, &when, sizeof(int));
-    cp += sizeof(int);
-    memcpy(cp, &logPrio, sizeof(int));
-    cp += sizeof(int);
-    memcpy(cp, &pid, sizeof(int));
-    cp += sizeof(int);
-    memcpy(cp, tag, tagLen);
-    cp += tagLen;
-    memcpy(cp, message, messageLen);
-    cp += messageLen;
-
-    assert(cp - outBuf == totalLen);
-
-    Message msg;
-    msg.mType = kTypeLogBundle;
-    msg.mData = outBuf;
-    msg.mLength = totalLen;
-    Message_write(&msg, gWrapSim.simulatorFd);
-
-    msg.mData = NULL;       // don't free
-    Message_release(&msg);
-}
-
-/*
- * Turn the vibrating notification device on or off.
- */
-void wsEnableVibration(int vibrateOn)
-{
-    if (gWrapSim.simulatorFd < 0) {
-        wsLog("Not posting vibrator update -- sim not ready\n");
-        return;
-    }
-
-    Message msg;
-
-    //wsLog("+++ sending vibrate:%d\n", vibrateOn);
-
-    setCommand(&msg, kCommandVibrate, vibrateOn);
-    Message_write(&msg, gWrapSim.simulatorFd);
-    Message_release(&msg);
-}
-
diff --git a/simulator/wrapsim/SimMgr.h b/simulator/wrapsim/SimMgr.h
deleted file mode 100644
index 378dfbc..0000000
--- a/simulator/wrapsim/SimMgr.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2007 The Android Open Source Project
- *
- * Simulator interactions.
- */
-#ifndef _WRAPSIM_SIMULATOR_H
-#define _WRAPSIM_SIMULATOR_H
-
-/*
- * Commands exchanged between simulator and runtime.
- *
- * NOTE: this is cloned from SimRuntime.h -- fix this.
- */
-typedef enum SimCommand {
-    kCommandUnknown = 0,
-
-    /* sent from sim to runtime */
-    kCommandGoAway,             // sim says: go away, I'm busy
-    kCommandConfigDone,         // sim says: done sending config
-    kCommandQuit,               // quit nicely
-    kCommandNewPGroup,          // process group management
-    kCommandKeyDown,            // key has been pressed
-    kCommandKeyUp,              // key has been released
-    kCommandTouch,              // finger touched/lifted/dragged
-
-    /* sent from runtime to sim */
-    kCommandNewPGroupCreated,   // send process group as argument
-    kCommandRuntimeReady,       // we're initialized and about to start
-    kCommandUpdateDisplay,      // display has been updated
-    kCommandVibrate,            // vibrate on or off
-} SimCommand;
-
-/*
- * Touch screen action; also clined from SimRuntime.h.
- */
-typedef enum TouchMode {
-    kTouchDown = 0,
-    kTouchUp = 1,
-    kTouchDrag = 2
-} TouchMode;
-
-
-/*
- * Some parameters for config exchange.
- */
-enum {
-    kDisplayConfigMagic = 0x44495350,
-    kValuesPerDisplay = 5,
-};
-
-/*
- * UNIX domain socket name.
- */
-#define kAndroidPipeName        "runtime"
-
-int wsSimConnect(void);
-
-/*
- * Display management.
- */
-void wsLockDisplay(int displayIdx);
-void wsUnlockDisplay(int displayIdx);
-void wsPostDisplayUpdate(int displayIdx);
-
-/*
- * Send a log message.
- */
-void wsPostLogMessage(int logPrio, const char* tag, const char* msg);
-
-/*
- * Change the state of the vibration device.
- */
-void wsEnableVibration(int vibrateOn);
-
-#endif /*_WRAPSIM_SIMULATOR_H*/
diff --git a/simulator/wrapsim/SysPower.c b/simulator/wrapsim/SysPower.c
deleted file mode 100644
index fa7ae0a..0000000
--- a/simulator/wrapsim/SysPower.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2009 The Android Open Source Project
- *
- * Magic entries in /sys/power/.
- */
-#include "Common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-/*
- * Map filename to device index.
- *
- * [ not using DeviceIndex -- would be useful if we need to return something
- * other than a static string ]
- */
-static const struct {
-    const char*     name;
-    //DeviceIndex     idx;
-    const char*     data;
-} gDeviceMap[] = {
-    { "state",
-        "mem\n" },
-    { "wake_lock",
-        "\n" },
-    { "wake_unlock",
-        "KeyEvents PowerManagerService radio-interface\n" },
-};
-
-/*
- * Power driver state.
- *
- * Right now we just ignore everything written.
- */
-typedef struct PowerState {
-    int         which;
-} PowerState;
-
-
-/*
- * Figure out who we are, based on "pathName".
- */
-static void configureInitialState(const char* pathName, PowerState* powerState)
-{
-    const char* cp = pathName + strlen("/sys/power/");
-    int i;
-
-    powerState->which = -1;
-    for (i = 0; i < (int) (sizeof(gDeviceMap) / sizeof(gDeviceMap[0])); i++) {
-        if (strcmp(cp, gDeviceMap[i].name) == 0) {
-            powerState->which = i;
-            break;
-        }
-    }
-
-    if (powerState->which == -1) {
-        wsLog("Warning: access to unknown power device '%s'\n", pathName);
-        return;
-    }
-}
-
-/*
- * Free up the state structure.
- */
-static void freeState(PowerState* powerState)
-{
-    free(powerState);
-}
-
-/*
- * Read data from the device.
- *
- * We don't try to keep track of how much was read -- existing clients just
- * try to read into a large buffer.
- */
-static ssize_t readPower(FakeDev* dev, int fd, void* buf, size_t count)
-{
-    PowerState* state = (PowerState*) dev->state;
-    int dataLen;
-
-    wsLog("%s: read %d\n", dev->debugName, count);
-
-    if (state->which < 0 ||
-        state->which >= (int) (sizeof(gDeviceMap)/sizeof(gDeviceMap[0])))
-    {
-        return 0;
-    }
-
-    const char* data = gDeviceMap[state->which].data;
-    size_t strLen = strlen(data);
-
-    while(strLen == 0)
-        sleep(10); // block forever
-
-    ssize_t copyCount = (strLen < count) ? strLen : count;
-    memcpy(buf, data, copyCount);
-    return copyCount;
-}
-
-/*
- * Ignore the request.
- */
-static ssize_t writePower(FakeDev* dev, int fd, const void* buf, size_t count)
-{
-    wsLog("%s: write %d bytes\n", dev->debugName, count);
-    return count;
-}
-
-/*
- * Free up our state before closing down the fake descriptor.
- */
-static int closePower(FakeDev* dev, int fd)
-{
-    freeState((PowerState*)dev->state);
-    dev->state = NULL;
-    return 0;
-}
-
-/*
- * Open a power device.
- */
-FakeDev* wsOpenSysPower(const char* pathName, int flags)
-{
-    FakeDev* newDev = wsCreateFakeDev(pathName);
-    if (newDev != NULL) {
-        newDev->read = readPower;
-        newDev->write = writePower;
-        newDev->ioctl = NULL;
-        newDev->close = closePower;
-
-        PowerState* powerState = calloc(1, sizeof(PowerState));
-
-        configureInitialState(pathName, powerState);
-        newDev->state = powerState;
-    }
-
-    return newDev;
-}
-
diff --git a/simulator/wrapsim/Util.c b/simulator/wrapsim/Util.c
deleted file mode 100644
index 33d903b..0000000
--- a/simulator/wrapsim/Util.c
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#include "Common.h"
-
-int wsAtomicAdd(int *var, int val)
-{
-    int cc;
-    int ret;
-    cc = pthread_mutex_lock(&gWrapSim.atomicLock);
-    ret = *var;
-    *var = *var + val;
-    cc = pthread_mutex_unlock(&gWrapSim.atomicLock);
-    return ret;
-}
diff --git a/simulator/wrapsim/Util.h b/simulator/wrapsim/Util.h
deleted file mode 100644
index e470802..0000000
--- a/simulator/wrapsim/Util.h
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-int wsAtomicAdd(int *var, int val);