86 lines
2 KiB
C
86 lines
2 KiB
C
// orcaFrame.c - ORCA-style desktop application.
|
|
//
|
|
// Opens a Window Manager window via startdesk()'s full toolset chain,
|
|
// runs an event loop via TaskMaster until the user clicks the close
|
|
// box, presses Q, or the watchdog fires.
|
|
//
|
|
// Modeled after ORCA-C's Frame.cc / Reversi.cc samples. Exercises
|
|
// our LLVM/Clang toolchain + the new bank-byte relocation
|
|
// end-to-end against the real GS/OS 6.0.2 / 6.0.4 Window Manager.
|
|
//
|
|
// Phase 4.1 migration: NewWindowParm and event dispatch boilerplate
|
|
// folded into iigs/uiBuilder.h and iigs/eventLoop.h respectively.
|
|
|
|
#include "iigs/toolbox.h"
|
|
#include "iigs/desktop.h"
|
|
#include "iigs/eventLoop.h"
|
|
#include "iigs/uiBuilder.h"
|
|
|
|
|
|
static void *gWin;
|
|
static volatile uint16_t gIdleTicks;
|
|
|
|
|
|
static unsigned char gMsg[] = "\x14Hello from llvm816!";
|
|
|
|
|
|
static void onClose(uint32_t windowPtr) {
|
|
CloseWindow((void *)(uintptr_t)windowPtr);
|
|
if (windowPtr == (uint32_t)(uintptr_t)gWin) {
|
|
gWin = (void *)0;
|
|
iigsEventLoopQuit();
|
|
}
|
|
}
|
|
|
|
|
|
static void onIdle(void) {
|
|
if (++gIdleTicks > 3000) {
|
|
iigsEventLoopQuit();
|
|
}
|
|
}
|
|
|
|
|
|
int main(void) {
|
|
unsigned short userId = startdesk(640);
|
|
(void)userId;
|
|
|
|
paintDesktopBackdrop();
|
|
|
|
UiWindowT spec = {
|
|
(const char *)0, // no title (Font Mgr setup)
|
|
UW_VIS | UW_MOVE | UW_CLOSE,
|
|
{ 40, 60, 140, 580 }, // v1, h1, v2, h2
|
|
200, 320,
|
|
0,
|
|
(void *)0
|
|
};
|
|
gWin = uiBuilderOpenWindow(&spec);
|
|
|
|
ShowCursor();
|
|
if (gWin) {
|
|
*(volatile unsigned char *)0x71 = 0xAA;
|
|
BeginUpdate(gWin);
|
|
SetPort(gWin);
|
|
MoveTo(20, 30);
|
|
DrawString(gMsg);
|
|
EndUpdate(gWin);
|
|
}
|
|
|
|
IigsEventCallbacksT cb;
|
|
{
|
|
unsigned char *p = (unsigned char *)&cb;
|
|
for (uint16_t i = 0; i < sizeof cb; i++) {
|
|
p[i] = 0;
|
|
}
|
|
}
|
|
cb.onClose = onClose;
|
|
cb.onIdle = onIdle;
|
|
iigsEventLoop(&cb);
|
|
|
|
if (gWin) {
|
|
CloseWindow(gWin);
|
|
}
|
|
|
|
*(volatile unsigned char *)0x70 = 0x99;
|
|
return 0;
|
|
}
|