summaryrefslogtreecommitdiff
path: root/05/tcc-0.9.27/win32/examples
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2022-02-18 12:36:57 -0500
committerpommicket <pommicket@gmail.com>2022-02-18 12:36:57 -0500
commit826d1afd58c2e064a9c8fdb09eda1b08469de1a8 (patch)
treeb4fedc589a1944f6cf3f451a9db976b431e89b25 /05/tcc-0.9.27/win32/examples
parentc42c5d94b8944e19cd17a5b540e4c70013c62b92 (diff)
newer version of tcc almost working
Diffstat (limited to '05/tcc-0.9.27/win32/examples')
-rw-r--r--05/tcc-0.9.27/win32/examples/dll.c13
-rw-r--r--05/tcc-0.9.27/win32/examples/fib.c24
-rw-r--r--05/tcc-0.9.27/win32/examples/hello_dll.c20
-rw-r--r--05/tcc-0.9.27/win32/examples/hello_win.c163
4 files changed, 220 insertions, 0 deletions
diff --git a/05/tcc-0.9.27/win32/examples/dll.c b/05/tcc-0.9.27/win32/examples/dll.c
new file mode 100644
index 0000000..052a056
--- /dev/null
+++ b/05/tcc-0.9.27/win32/examples/dll.c
@@ -0,0 +1,13 @@
+//+---------------------------------------------------------------------------
+//
+// dll.c - Windows DLL example - dynamically linked part
+//
+
+#include <windows.h>
+
+__declspec(dllexport) const char *hello_data = "(not set)";
+
+__declspec(dllexport) void hello_func (void)
+{
+ MessageBox (0, hello_data, "From DLL", MB_ICONINFORMATION);
+}
diff --git a/05/tcc-0.9.27/win32/examples/fib.c b/05/tcc-0.9.27/win32/examples/fib.c
new file mode 100644
index 0000000..8da26bc
--- /dev/null
+++ b/05/tcc-0.9.27/win32/examples/fib.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <stdlib.h> // atoi()
+
+int fib(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/05/tcc-0.9.27/win32/examples/hello_dll.c b/05/tcc-0.9.27/win32/examples/hello_dll.c
new file mode 100644
index 0000000..4813c5b
--- /dev/null
+++ b/05/tcc-0.9.27/win32/examples/hello_dll.c
@@ -0,0 +1,20 @@
+//+---------------------------------------------------------------------------
+//
+// HELLO_DLL.C - Windows DLL example - main application part
+//
+
+#include <windows.h>
+
+void hello_func (void);
+__declspec(dllimport) extern const char *hello_data;
+
+int WINAPI WinMain(
+ HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow)
+{
+ hello_data = "Hello World!";
+ hello_func();
+ return 0;
+}
diff --git a/05/tcc-0.9.27/win32/examples/hello_win.c b/05/tcc-0.9.27/win32/examples/hello_win.c
new file mode 100644
index 0000000..96546e4
--- /dev/null
+++ b/05/tcc-0.9.27/win32/examples/hello_win.c
@@ -0,0 +1,163 @@
+//+---------------------------------------------------------------------------
+//
+// 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
+const char *pWindowText;
+
+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;
+
+ pWindowText = lpCmdLine[0] ? lpCmdLine : "Hello Windows!";
+
+ // 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,
+ hInstance,
+ 0);
+
+ if (NULL == hwnd)
+ return 0;
+
+ // Main message loop:
+ while (GetMessage(&msg, NULL, 0, 0) > 0) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ return msg.wParam;
+}
+
+//+---------------------------------------------------------------------------
+
+//+---------------------------------------------------------------------------
+
+void CenterWindow(HWND hwnd_self)
+{
+ HWND hwnd_parent;
+ RECT rw_self, rc_parent, rw_parent;
+ int xpos, ypos;
+
+ 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);
+
+ xpos = rw_parent.left + (rc_parent.right + rw_self.left - rw_self.right) / 2;
+ ypos = rw_parent.top + (rc_parent.bottom + rw_self.top - rw_self.bottom) / 2;
+
+ SetWindowPos(
+ hwnd_self, NULL,
+ xpos, ypos, 0, 0,
+ SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE
+ );
+}
+
+//+---------------------------------------------------------------------------