summary refs log tree commit diff stats
path: root/tinyc/win32/examples
diff options
context:
space:
mode:
Diffstat (limited to 'tinyc/win32/examples')
-rwxr-xr-xtinyc/win32/examples/dll.c15
-rwxr-xr-xtinyc/win32/examples/fib.c24
-rwxr-xr-xtinyc/win32/examples/hello_dll.c19
-rwxr-xr-xtinyc/win32/examples/hello_win.c159
4 files changed, 217 insertions, 0 deletions
diff --git a/tinyc/win32/examples/dll.c b/tinyc/win32/examples/dll.c
new file mode 100755
index 000000000..4202e99ca
--- /dev/null
+++ b/tinyc/win32/examples/dll.c
@@ -0,0 +1,15 @@
+//+---------------------------------------------------------------------------
+//
+//  dll.c - Windows DLL example - dynamically linked part
+//
+
+#include <windows.h>
+
+#define DLL_EXPORT __declspec(dllexport)
+
+
+DLL_EXPORT void HelloWorld (void)
+{
+	MessageBox (0, "Hello World!", "From DLL", MB_ICONINFORMATION);
+}
+
diff --git a/tinyc/win32/examples/fib.c b/tinyc/win32/examples/fib.c
new file mode 100755
index 000000000..6a4bdf5c4
--- /dev/null
+++ b/tinyc/win32/examples/fib.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <math.h>
+
+int fib(int n)
+{
+	if (n <= 2)
+		return 1;
+	else
+		return fib(n-1) + fib(n-2);
+}
+
+int main(int argc, char **argv) 
+{
+	int n;
+	if (argc < 2) {
+		printf("usage: fib n\n"
+			   "Compute nth Fibonacci number\n");
+		return 1;
+	}
+		
+	n = atoi(argv[1]);
+	printf("fib(%d) = %d\n", n, fib(n));
+	return 0;
+}
diff --git a/tinyc/win32/examples/hello_dll.c b/tinyc/win32/examples/hello_dll.c
new file mode 100755
index 000000000..7adba77ec
--- /dev/null
+++ b/tinyc/win32/examples/hello_dll.c
@@ -0,0 +1,19 @@
+//+---------------------------------------------------------------------------
+//
+//  HELLO_DLL.C - Windows DLL example - main application part
+//
+
+#include <windows.h>
+
+void HelloWorld (void);
+
+int WINAPI WinMain(
+	HINSTANCE hInstance,
+	HINSTANCE hPrevInstance,
+	LPSTR     lpCmdLine,
+	int       nCmdShow)
+{
+	HelloWorld();
+	return 0;
+}
+
diff --git a/tinyc/win32/examples/hello_win.c b/tinyc/win32/examples/hello_win.c
new file mode 100755
index 000000000..294b7279a
--- /dev/null
+++ b/tinyc/win32/examples/hello_win.c
@@ -0,0 +1,159 @@
+//+---------------------------------------------------------------------------
+//
+//  HELLO_WIN.C - Windows GUI 'Hello World!' Example
+//
+//+---------------------------------------------------------------------------
+
+#include <windows.h>
+
+#define APPNAME "HELLO_WIN"
+
+char szAppName[] = APPNAME; // The name of this application
+char szTitle[]   = APPNAME; // The title bar text
+char *pWindowText;
+
+HINSTANCE g_hInst;          // current instance
+
+void CenterWindow(HWND hWnd);
+
+//+---------------------------------------------------------------------------
+//
+//  Function:   WndProc
+//
+//  Synopsis:   very unusual type of function - gets called by system to
+//              process windows messages.
+//
+//  Arguments:  same as always.
+//----------------------------------------------------------------------------
+
+LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+	switch (message)
+	{
+		// ----------------------- first and last
+		case WM_CREATE:
+			CenterWindow(hwnd);
+			break;
+
+		case WM_DESTROY:
+			PostQuitMessage(0);
+			break;
+
+
+		// ----------------------- get out of it...
+		case WM_RBUTTONUP:
+			DestroyWindow(hwnd);
+			break;
+
+		case WM_KEYDOWN:
+			if (VK_ESCAPE == wParam)
+				DestroyWindow(hwnd);
+			break;
+
+
+		// ----------------------- display our minimal info
+		case WM_PAINT:
+		{
+			PAINTSTRUCT ps;
+			HDC         hdc;
+			RECT        rc;
+			hdc = BeginPaint(hwnd, &ps);
+
+			GetClientRect(hwnd, &rc);
+			SetTextColor(hdc, RGB(240,240,96));
+			SetBkMode(hdc, TRANSPARENT);
+			DrawText(hdc, pWindowText, -1, &rc, DT_CENTER|DT_SINGLELINE|DT_VCENTER);
+
+			EndPaint(hwnd, &ps);
+			break;
+		}
+
+		// ----------------------- let windows do all other stuff
+		default:
+			return DefWindowProc(hwnd, message, wParam, lParam);
+	}
+	return 0;
+}
+
+//+---------------------------------------------------------------------------
+//
+//  Function:   WinMain
+//
+//  Synopsis:   standard entrypoint for GUI Win32 apps
+//
+//----------------------------------------------------------------------------
+int APIENTRY WinMain(
+				HINSTANCE hInstance,
+				HINSTANCE hPrevInstance,
+				LPSTR     lpCmdLine,
+				int       nCmdShow)
+{
+	MSG msg;
+
+	WNDCLASS wc;
+
+	HWND hwnd;
+
+	// Fill in window class structure with parameters that describe
+	// the main window.
+
+	ZeroMemory(&wc, sizeof wc);
+	wc.hInstance     = hInstance;
+	wc.lpszClassName = szAppName;
+	wc.lpfnWndProc   = (WNDPROC)WndProc;
+	wc.style         = CS_DBLCLKS|CS_VREDRAW|CS_HREDRAW;
+	wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+	wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
+	wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
+
+	if (FALSE == RegisterClass(&wc)) return 0;
+
+	// create the browser
+	hwnd = CreateWindow(
+		szAppName,
+		szTitle,
+		WS_OVERLAPPEDWINDOW|WS_VISIBLE,
+		CW_USEDEFAULT,
+		CW_USEDEFAULT,
+		360,//CW_USEDEFAULT,
+		240,//CW_USEDEFAULT,
+		0,
+		0,
+		g_hInst,
+		0);
+
+	if (NULL == hwnd) return 0;
+
+	pWindowText = lpCmdLine[0] ? lpCmdLine : "Hello Windows!";
+
+	// Main message loop:
+	while (GetMessage(&msg, NULL, 0, 0) > 0)
+	{
+		TranslateMessage(&msg);
+		DispatchMessage(&msg);
+	}
+
+	return msg.wParam;
+}
+
+//+---------------------------------------------------------------------------
+
+//+---------------------------------------------------------------------------
+
+void CenterWindow(HWND hwnd_self)
+{
+	RECT rw_self, rc_parent, rw_parent; HWND hwnd_parent;
+	hwnd_parent = GetParent(hwnd_self);
+	if (NULL==hwnd_parent) hwnd_parent = GetDesktopWindow();
+	GetWindowRect(hwnd_parent, &rw_parent);
+	GetClientRect(hwnd_parent, &rc_parent);
+	GetWindowRect(hwnd_self, &rw_self);
+	SetWindowPos(hwnd_self, NULL,
+		rw_parent.left + (rc_parent.right + rw_self.left - rw_self.right) / 2,
+		rw_parent.top  + (rc_parent.bottom + rw_self.top - rw_self.bottom) / 2,
+		0, 0,
+		SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE
+		);
+}
+
+//+---------------------------------------------------------------------------