Before object oriented programming, before threading, GUI applications were massive co-operative multitasking C switches:
https://github.com/microsoft/winfile/blob/master/src/winfile...
https://github.com/microsoft/winfile/blob/master/src/winfile...
Surely there could be a GUI framework that'll handle these Win32 Messages and dispatch them to your callbacks in your `Application` object but your application could be dealing with all sorts of messages not covered by your framework like WM_SYSCOMMAND, WM_POWERBROADCAST, WM_DEVICECHANGE, etc. and you'll find yourself with this classic Win32 Message Queue handling switch even in modern C/C++ Win32 GUI codebases.
Whenever you are interfacing with the Win32 API directly to set up and run a GUI application, this pattern will emerge: https://gist.github.com/nathan-osman/18c2e227ad00a223b61c0b3...
int
some_func(void) {
int result = ERR;
HANDLE foo = alloc_foo();
if (!foo) goto err0;
HANDLE bar = alloc_bar();
if (!bar) goto err1;
if (do_something_else() < 0) goto err2;
result = OK;
err2:
release_bar(bar);
err1
release_foo(foo);
err0:
return result;
}Nobody has code like this anymore
10 I=1
20 PRINT "HELLO "
40 PRINT %I
50 IF (%I > 3) 10 40
30 PRINTLN "WORLD"
45 PRINTLN
42 I=%I+1
Notice no goto statement, yet lots of implicit gotos.