summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Arends <edx@rockbox.org>2002-04-27 17:10:15 +0000
committerFelix Arends <edx@rockbox.org>2002-04-27 17:10:15 +0000
commit8002aa7ee58ceba94f74cd8ff483b8a5c6cc1786 (patch)
tree61dd600ebd1e00b356bf5efdec4bb0d4884d2b60
parentffb9e3a5bd1d9472b0cea2d9fba560ea0c58e58e (diff)
downloadrockbox-8002aa7ee58ceba94f74cd8ff483b8a5c6cc1786.zip
rockbox-8002aa7ee58ceba94f74cd8ff483b8a5c6cc1786.tar.gz
rockbox-8002aa7ee58ceba94f74cd8ff483b8a5c6cc1786.tar.bz2
rockbox-8002aa7ee58ceba94f74cd8ff483b8a5c6cc1786.tar.xz
new files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@263 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--uisimulator/win32/file-win32.c37
-rw-r--r--uisimulator/win32/main.c25
-rw-r--r--uisimulator/win32/uisw32.c260
3 files changed, 322 insertions, 0 deletions
diff --git a/uisimulator/win32/file-win32.c b/uisimulator/win32/file-win32.c
new file mode 100644
index 0000000..148c81c
--- /dev/null
+++ b/uisimulator/win32/file-win32.c
@@ -0,0 +1,37 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Felix Arends
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include <windows.h>
+#include "file-win32.h"
+#include "file.h"
+
+// Directory operations
+//
+
+// opendir
+// open directory for scanning
+DIR *opendir (
+ char *dirname // directory name
+ )
+{
+ DIR *p = (DIR*)malloc(sizeof(DIR));
+ if (_findfirst (dirname, &p) == -1)
+ return NULL;
+ return p;
+} \ No newline at end of file
diff --git a/uisimulator/win32/main.c b/uisimulator/win32/main.c
new file mode 100644
index 0000000..bf14efb
--- /dev/null
+++ b/uisimulator/win32/main.c
@@ -0,0 +1,25 @@
+#include "uisw32.h"
+#include "lcd-win32.h"
+
+#define FS 6
+
+int main (void)
+{
+ int x;
+ lcd_init ();
+
+ while (1)
+ {
+ for (x = 0; x < 10; x++)
+ {
+ lcd_clear_display ();
+ lcd_puts (x, 12, "Hello World!", FS);
+ lcd_puts (x, 32, "From the", FS);
+ lcd_puts (x, 40, " Open Source ", FS);
+ lcd_puts (x, 48, "Jukebox Project", FS);
+ lcd_update ();
+ }
+ }
+
+ return 0;
+} \ No newline at end of file
diff --git a/uisimulator/win32/uisw32.c b/uisimulator/win32/uisw32.c
new file mode 100644
index 0000000..529ecbf
--- /dev/null
+++ b/uisimulator/win32/uisw32.c
@@ -0,0 +1,260 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Felix Arends
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include <windows.h>
+#include <process.h>
+#include "uisw32.h"
+#include "resource.h"
+
+// extern functions
+extern void main (void *); // mod entry point
+
+// variables
+HWND hGUIWnd; // the GUI window handle
+unsigned int uThreadID; // id of mod thread
+PBYTE lpKeys;
+
+// GUIWndProc
+// window proc for GUI simulator
+LRESULT GUIWndProc (
+ HWND hWnd,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam
+ )
+{
+ static HBITMAP hBkgnd;
+ static lpBmp [UI_WIDTH * UI_HEIGHT * 3];
+ static HDC hMemDc;
+
+ switch (uMsg)
+ {
+ case WM_CREATE:
+ // load background image
+ hBkgnd = (HBITMAP)LoadImage (GetModuleHandle (NULL), MAKEINTRESOURCE(IDB_UI),
+ IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+ hMemDc = CreateCompatibleDC (GetDC (hWnd));
+ SelectObject (hMemDc, hBkgnd);
+ return TRUE;
+ case WM_SIZING:
+ {
+ LPRECT r = (LPRECT)lParam;
+ RECT r2;
+ char s[256];
+ int v;
+
+ switch (wParam)
+ {
+ case WMSZ_BOTTOM:
+ v = (r->bottom - r->top) / (UI_HEIGHT / 5);
+ r->bottom = r->top + v * UI_HEIGHT / 5;
+ r->right = r->left + v * UI_WIDTH / 5;
+ r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ case WMSZ_RIGHT:
+ v = (r->right - r->left) / (UI_WIDTH / 5);
+ r->bottom = r->top + v * UI_HEIGHT / 5;
+ r->right = r->left + v * UI_WIDTH / 5;
+ r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ case WMSZ_TOP:
+ v = (r->bottom - r->top) / (UI_HEIGHT / 5);
+ r->top = r->bottom - v * UI_HEIGHT / 5;
+ r->right = r->left + v * UI_WIDTH / 5;
+ r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ case WMSZ_LEFT:
+ v = (r->right - r->left) / (UI_WIDTH / 5);
+ r->bottom = r->top + v * UI_HEIGHT / 5;
+ r->left = r->right - v * UI_WIDTH / 5;
+ r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ case WMSZ_BOTTOMRIGHT:
+ GetWindowRect (hWnd, &r2);
+ if (abs(r2.right - r->right) > abs(r2.bottom - r->bottom))
+ v = (r->right - r->left) / (UI_WIDTH / 5);
+ else
+ v = (r->bottom - r->top) / (UI_HEIGHT / 5);
+ r->bottom = r->top + v * UI_HEIGHT / 5;
+ r->right = r->left + v * UI_WIDTH / 5;
+ r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ case WMSZ_BOTTOMLEFT:
+ GetWindowRect (hWnd, &r2);
+ if (abs(r2.left - r->left) > abs(r2.bottom - r->bottom))
+ v = (r->right - r->left) / (UI_WIDTH / 5);
+ else
+ v = (r->bottom - r->top) / (UI_HEIGHT / 5);
+ r->bottom = r->top + v * UI_HEIGHT / 5;
+ r->left = r->right - v * UI_WIDTH / 5;
+ r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ case WMSZ_TOPRIGHT:
+ GetWindowRect (hWnd, &r2);
+ if (abs(r2.right - r->right) > abs(r2.top - r->top))
+ v = (r->right - r->left) / (UI_WIDTH / 5);
+ else
+ v = (r->bottom - r->top) / (UI_HEIGHT / 5);
+ r->top = r->bottom - v * UI_HEIGHT / 5;
+ r->right = r->left + v * UI_WIDTH / 5;
+ r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ case WMSZ_TOPLEFT:
+ GetWindowRect (hWnd, &r2);
+ if (abs(r2.left - r->left) > abs(r2.top - r->top))
+ v = (r->right - r->left) / (UI_WIDTH / 5);
+ else
+ v = (r->bottom - r->top) / (UI_HEIGHT / 5);
+ r->top = r->bottom - v * UI_HEIGHT / 5;
+ r->left = r->right - v * UI_WIDTH / 5;
+ r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2;
+ r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION);
+ break;
+ }
+
+ wsprintf (s, "RockBox Simulator @%d%%",
+ (r->right - r->left - GetSystemMetrics (SM_CXSIZEFRAME) * 2)
+ * 100 / UI_WIDTH);
+ SetWindowText (hWnd, s);
+
+ return TRUE;
+ }
+ case WM_ERASEBKGND:
+ {
+ PAINTSTRUCT ps;
+ HDC hDc = BeginPaint (hWnd, &ps);
+ RECT r;
+
+ GetClientRect (hWnd, &r);
+ // blit to screen
+ StretchBlt (hDc, 0, 0, r.right, r.bottom,
+ hMemDc, 0, 0, UI_WIDTH, UI_HEIGHT, SRCCOPY);
+ EndPaint (hWnd, &ps);
+ return TRUE;
+ }
+ case WM_PAINT:
+ {
+ PAINTSTRUCT ps;
+ RECT r;
+ HDC hDc = BeginPaint (hWnd, &ps);
+
+ GetClientRect (hWnd, &r);
+ // draw lcd screen
+ StretchDIBits (hDc,
+ UI_LCD_POSX * r.right / UI_WIDTH, UI_LCD_POSY * r.bottom / UI_HEIGHT,
+ LCD_WIDTH * r.right / UI_WIDTH, LCD_HEIGHT * r.bottom / UI_HEIGHT,
+ 0, 0, LCD_WIDTH, LCD_HEIGHT,
+ bitmap, (BITMAPINFO *) &bmi, DIB_RGB_COLORS, SRCCOPY);
+
+ EndPaint (hWnd, &ps);
+ return TRUE;
+ }
+ case WM_CLOSE:
+ // close simulator
+ hGUIWnd = NULL;
+ PostQuitMessage (0);
+ break;
+ }
+
+ return DefWindowProc (hWnd, uMsg, wParam, lParam);
+}
+
+// GUIStartup
+// register window class, show window, init GUI
+BOOL GUIStartup ()
+{
+ WNDCLASS wc;
+
+ // create window class
+ ZeroMemory (&wc, sizeof(wc));
+ wc.hbrBackground = GetSysColorBrush (COLOR_WINDOW);
+ wc.hCursor = LoadCursor (NULL, IDC_ARROW);
+ wc.hInstance = GetModuleHandle (NULL);
+ wc.lpfnWndProc = (WNDPROC)GUIWndProc;
+ wc.lpszClassName = "RockBoxUISimulator";
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+
+ if (RegisterClass (&wc) == 0)
+ return FALSE;
+
+ // create window
+ hGUIWnd = CreateWindowEx (
+ WS_EX_TOOLWINDOW | WS_EX_PALETTEWINDOW,
+ "RockBoxUISimulator", "ARCHOS JukeBox",
+ WS_VISIBLE | WS_SYSMENU | WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ UI_WIDTH + GetSystemMetrics (SM_CXSIZEFRAME) * 2,
+ UI_HEIGHT + GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION),
+ NULL, NULL, GetModuleHandle (NULL), NULL);
+
+ if (hGUIWnd == NULL)
+ return FALSE;
+
+ return TRUE;
+}
+
+// GUIDown
+// destroy window, unregister window class
+int GUIDown ()
+{
+ DestroyWindow (hGUIWnd);
+ _endthreadex (uThreadID);
+ return 0;
+}
+
+// GUIMessageLoop
+// standard message loop for GUI window
+void GUIMessageLoop ()
+{
+ MSG msg;
+ while (GetMessage (&msg, hGUIWnd, 0, 0) && hGUIWnd != NULL)
+ {
+ TranslateMessage (&msg);
+ DispatchMessage (&msg);
+ }
+}
+
+
+// WinMain
+// program entry point
+int WINAPI WinMain (
+ HINSTANCE hInstance, // current instance
+ HINSTANCE hPrevInstance, // previous instance
+ LPSTR lpCmd, // command line
+ int nShowCmd // show command
+ )
+{
+ if (!GUIStartup ())
+ return 0;
+
+ uThreadID = _beginthread (main, 0, NULL);
+ if (uThreadID == -0L)
+ return MessageBox (NULL, "Error creating mod thread!", "Error", MB_OK);
+
+ GUIMessageLoop ();
+
+ return GUIDown ();
+} \ No newline at end of file