code: drawterm

Download patch

ref: 638a4aaaa3a837efe603efcf48ce6e33a4fd4161
parent: d7521fe4d5232ad9a51d9bfd09845674f154529d
author: Jacob Moody <moody@posixcafe.org>
date: Mon Aug 14 14:14:41 EDT 2023

gui-osx: remove (thanks Keegan)

Carbon has been removed from macosx since 2012

diff: cannot open a/gui-osx//null: file does not exist: 'a/gui-osx//null'
--- a/Make.osx
+++ /dev/null
@@ -1,20 +1,0 @@
-# Mac OS X
-PTHREAD=	# for Mac
-AR=ar
-AS=as
-RANLIB=ranlib
-CC=gcc
-CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -D_THREAD_SAFE $(PTHREAD) -O2
-O=o
-OS=posix
-GUI=osx
-LDADD=-ggdb -framework Carbon -framework QuickTime
-LDFLAGS=$(PTHREAD)
-TARG=drawterm
-AUDIO=none
-
-all: default
-
-libmachdep.a:
-	arch=`uname -m|sed 's/i.86/386/;s/Power Macintosh/power/'`; \
-	(cd posix-$$arch &&  make)
--- a/gui-osx/Makefile
+++ /dev/null
@@ -1,15 +1,0 @@
-ROOT=..
-include ../Make.config
-LIB=libgui.a
-
-OFILES=\
-	screen.$O
-
-default: $(LIB)
-$(LIB): $(OFILES)
-	$(AR) r $(LIB) $(OFILES)
-	$(RANLIB) $(LIB)
-
-%.$O: %.c
-	$(CC) $(CFLAGS) $*.c
-
--- a/gui-osx/keycodes.h
+++ /dev/null
@@ -1,189 +1,0 @@
-/* These are the Macintosh key scancode constants -- from Inside Macintosh */
-#define QZ_ESCAPE		0x35
-#define QZ_F1			0x7A
-#define QZ_F2			0x78
-#define QZ_F3			0x63
-#define QZ_F4			0x76
-#define QZ_F5			0x60
-#define QZ_F6			0x61
-#define QZ_F7			0x62
-#define QZ_F8			0x64
-#define QZ_F9			0x65
-#define QZ_F10			0x6D
-#define QZ_F11			0x67
-#define QZ_F12			0x6F
-#define QZ_PRINT		0x69
-#define QZ_SCROLLOCK    	0x6B
-#define QZ_PAUSE		0x71
-#define QZ_POWER		0x7F
-#define QZ_BACKQUOTE		0x32
-#define QZ_1			0x12
-#define QZ_2			0x13
-#define QZ_3			0x14
-#define QZ_4			0x15
-#define QZ_5			0x17
-#define QZ_6			0x16
-#define QZ_7			0x1A
-#define QZ_8			0x1C
-#define QZ_9			0x19
-#define QZ_0			0x1D
-#define QZ_MINUS		0x1B
-#define QZ_EQUALS		0x18
-#define QZ_BACKSPACE		0x33
-#define QZ_INSERT		0x72
-#define QZ_HOME			0x73
-#define QZ_PAGEUP		0x74
-#define QZ_NUMLOCK		0x47
-#define QZ_KP_EQUALS		0x51
-#define QZ_KP_DIVIDE		0x4B
-#define QZ_KP_MULTIPLY		0x43
-#define QZ_TAB			0x30
-#define QZ_q			0x0C
-#define QZ_w			0x0D
-#define QZ_e			0x0E
-#define QZ_r			0x0F
-#define QZ_t			0x11
-#define QZ_y			0x10
-#define QZ_u			0x20
-#define QZ_i			0x22
-#define QZ_o			0x1F
-#define QZ_p			0x23
-#define QZ_LEFTBRACKET		0x21
-#define QZ_RIGHTBRACKET		0x1E
-#define QZ_BACKSLASH		0x2A
-#define QZ_DELETE		0x75
-#define QZ_END			0x77
-#define QZ_PAGEDOWN		0x79
-#define QZ_KP7			0x59
-#define QZ_KP8			0x5B
-#define QZ_KP9			0x5C
-#define QZ_KP_MINUS		0x4E
-#define QZ_CAPSLOCK		0x39
-#define QZ_a			0x00
-#define QZ_s			0x01
-#define QZ_d			0x02
-#define QZ_f			0x03
-#define QZ_g			0x05
-#define QZ_h			0x04
-#define QZ_j			0x26
-#define QZ_k			0x28
-#define QZ_l			0x25
-#define QZ_SEMICOLON		0x29
-#define QZ_QUOTE		0x27
-#define QZ_RETURN		0x24
-#define QZ_KP4			0x56
-#define QZ_KP5			0x57
-#define QZ_KP6			0x58
-#define QZ_KP_PLUS		0x45
-#define QZ_LSHIFT		0x38
-#define QZ_z			0x06
-#define QZ_x			0x07
-#define QZ_c			0x08
-#define QZ_v			0x09
-#define QZ_b			0x0B
-#define QZ_n			0x2D
-#define QZ_m			0x2E
-#define QZ_COMMA		0x2B
-#define QZ_PERIOD		0x2F
-#define QZ_SLASH		0x2C
-/* These are the same as the left versions - use left by default */
-#if 0
-#define QZ_RSHIFT		0x38
-#endif
-#define QZ_UP			0x7E
-#define QZ_KP1			0x53
-#define QZ_KP2			0x54
-#define QZ_KP3			0x55
-#define QZ_KP_ENTER		0x4C
-#define QZ_LCTRL		0x3B
-#define QZ_LALT			0x3A
-#define QZ_LMETA		0x37
-#define QZ_SPACE		0x31
-/* These are the same as the left versions - use left by default */
-#if 0
-#define QZ_RMETA		0x37
-#define QZ_RALT			0x3A
-#define QZ_RCTRL		0x3B
-#endif
-#define QZ_LEFT			0x7B
-#define QZ_DOWN			0x7D
-#define QZ_RIGHT		0x7C
-#define QZ_KP0			0x52
-#define QZ_KP_PERIOD		0x41
-
-/* Wierd, these keys are on my iBook under MacOS X */
-#define QZ_IBOOK_ENTER		0x34
-#define QZ_IBOOK_LEFT		0x3B
-#define QZ_IBOOK_RIGHT		0x3C
-#define QZ_IBOOK_DOWN		0x3D
-#define QZ_IBOOK_UP		0x3E
-#define KEY_ENTER 13
-#define KEY_TAB 9
-
-#define KEY_BASE 0x100
-
-/*  Function keys  */
-#define KEY_F (KEY_BASE+64)
-
-/* Control keys */
-#define KEY_CTRL (KEY_BASE)
-#define KEY_BACKSPACE (KEY_CTRL+0)
-#define KEY_DELETE (KEY_CTRL+1)
-#define KEY_INSERT (KEY_CTRL+2)
-#define KEY_HOME (KEY_CTRL+3)
-#define KEY_END (KEY_CTRL+4)
-#define KEY_PAGE_UP (KEY_CTRL+5)
-#define KEY_PAGE_DOWN (KEY_CTRL+6)
-#define KEY_ESC (KEY_CTRL+7)
-
-/* Control keys short name */
-#define KEY_BS KEY_BACKSPACE
-#define KEY_DEL KEY_DELETE
-#define KEY_INS KEY_INSERT
-#define KEY_PGUP KEY_PAGE_UP
-#define KEY_PGDOWN KEY_PAGE_DOWN
-#define KEY_PGDWN KEY_PAGE_DOWN
-
-/* Cursor movement */
-#define KEY_CRSR (KEY_BASE+16)
-#define KEY_RIGHT (KEY_CRSR+0)
-#define KEY_LEFT (KEY_CRSR+1)
-#define KEY_DOWN (KEY_CRSR+2)
-#define KEY_UP (KEY_CRSR+3)
-
-/* Multimedia keyboard/remote keys */
-#define KEY_MM_BASE (0x100+384)
-#define KEY_POWER (KEY_MM_BASE+0)
-#define KEY_MENU (KEY_MM_BASE+1)
-#define KEY_PLAY (KEY_MM_BASE+2)
-#define KEY_PAUSE (KEY_MM_BASE+3)
-#define KEY_PLAYPAUSE (KEY_MM_BASE+4)
-#define KEY_STOP (KEY_MM_BASE+5)
-#define KEY_FORWARD (KEY_MM_BASE+6)
-#define KEY_REWIND (KEY_MM_BASE+7)
-#define KEY_NEXT (KEY_MM_BASE+8)
-#define KEY_PREV (KEY_MM_BASE+9)
-#define KEY_VOLUME_UP (KEY_MM_BASE+10)
-#define KEY_VOLUME_DOWN (KEY_MM_BASE+11)
-#define KEY_MUTE (KEY_MM_BASE+12)
-
-/* Keypad keys */
-#define KEY_KEYPAD (KEY_BASE+32)
-#define KEY_KP0 (KEY_KEYPAD+0)
-#define KEY_KP1 (KEY_KEYPAD+1)
-#define KEY_KP2 (KEY_KEYPAD+2)
-#define KEY_KP3 (KEY_KEYPAD+3)
-#define KEY_KP4 (KEY_KEYPAD+4)
-#define KEY_KP5 (KEY_KEYPAD+5)
-#define KEY_KP6 (KEY_KEYPAD+6)
-#define KEY_KP7 (KEY_KEYPAD+7)
-#define KEY_KP8 (KEY_KEYPAD+8)
-#define KEY_KP9 (KEY_KEYPAD+9)
-#define KEY_KPDEC (KEY_KEYPAD+10)
-#define KEY_KPINS (KEY_KEYPAD+11)
-#define KEY_KPDEL (KEY_KEYPAD+12)
-#define KEY_KPENTER (KEY_KEYPAD+13)
-
-/* Special keys */
-#define KEY_INTERN (0x1000)
-#define KEY_CLOSE_WIN (KEY_INTERN+0)
--- a/gui-osx/screen.c
+++ /dev/null
@@ -1,755 +1,0 @@
-// in this file, _Rect is os x Rect,
-// _Point is os x Point
-#undef Point
-#define Point _Point
-#undef Rect
-#define Rect _Rect
-
-#include <Carbon/Carbon.h>
-#include <QuickTime/QuickTime.h> // for full screen
-
-#undef Rect
-#undef Point
-
-#undef nil
-
-
-#include "u.h"
-#include "lib.h"
-#include "kern/dat.h"
-#include "kern/fns.h"
-#include "error.h"
-#include "user.h"
-#include <draw.h>
-#include <memdraw.h>
-#include "screen.h"
-#include "keyboard.h"
-#include "keycodes.h"
-
-#define rWindowResource  128
-
-#define topLeft(r)  (((Point *) &(r))[0])
-#define botRight(r) (((Point *) &(r))[1])
-
-static int depth;
-Boolean   gDone;
-RgnHandle gCursorRegionHdl;
-
-Memimage	*gscreen;
-
-static int readybit;
-static Rendez	rend;
-
-///
-// menu
-//
-static MenuRef windMenu;
-static MenuRef viewMenu;
-
-enum {
-	kQuitCmd = 1,
-	kFullScreenCmd = 2,
-};
-
-static WindowGroupRef winGroup = NULL;
-static WindowRef theWindow = NULL;
-static CGContextRef context;
-static CGDataProviderRef dataProviderRef;
-static CGImageRef fullScreenImage;
-static CGRect devRect;
-static CGRect bounds;
-static PasteboardRef appleclip;
-static _Rect winRect;
-
-Boolean altPressed = false;
-Boolean button2 = false;
-Boolean button3 = false;
-
-
-static int
-isready(void*a)
-{
-	return readybit;
-}
-
-CGContextRef QuartzContext;
-
-void winproc(void *a);
-
-void
-screensize(Rectangle r, ulong chan)
-{
-	USED(chan);
-}
-
-void screeninit(void)
-{
-	int fmt;
-	int dx, dy;
-	ProcessSerialNumber psn = { 0, kCurrentProcess };
-	TransformProcessType(&psn, kProcessTransformToForegroundApplication);
-	SetFrontProcess(&psn);
-
-	memimageinit();
-	depth = 32; // That's all this code deals with for now
-	fmt = XBGR32; //XRGB32;
-
-	devRect = CGDisplayBounds(CGMainDisplayID());
-//	devRect.origin.x = 0;
-//	devRect.origin.y = 0;
-//	devRect.size.width = 1024;
-//	devRect.size.height = 768;
-	dx = devRect.size.width;
-	dy = devRect.size.height;
-
-	gscreen = allocmemimage(Rect(0,0,dx,dy), fmt);
-	dataProviderRef = CGDataProviderCreateWithData(0, gscreen->data->bdata,
-						dx * dy * 4, 0);
-	fullScreenImage = CGImageCreate(dx, dy, 8, 32, dx * 4,
-				CGColorSpaceCreateDeviceRGB(),
-				kCGImageAlphaNoneSkipLast,
-				dataProviderRef, 0, 0, kCGRenderingIntentDefault);
-
-	kproc("osxscreen", winproc, 0);
-	ksleep(&rend, isready, 0);
-}
-
-// No wonder Apple sells so many wide displays!
-static OSStatus ApplicationQuitEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData);
-static OSStatus MainWindowEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData);
-static OSStatus MainWindowCommandHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData);
-
-void 
-window_resized()
-{
-	GetWindowBounds(theWindow, kWindowContentRgn, &winRect );
-
-	bounds = CGRectMake(0, 0, winRect.right-winRect.left, winRect.bottom - winRect.top);
-}
-
-
-void winproc(void *a)
-{
-	winRect.left = 30;
-	winRect.top = 60;
-	winRect.bottom = (devRect.size.height * 0.75) + winRect.top;
-	winRect.right = (devRect.size.width * 0.75) + winRect.left;
-
-	ClearMenuBar();
-	InitCursor();
-
-	CreateStandardWindowMenu(0, &windMenu);
-	InsertMenu(windMenu, 0);
-
-    MenuItemIndex index;
-	CreateNewMenu(1004, 0, &viewMenu);
-	SetMenuTitleWithCFString(viewMenu, CFSTR("View"));
-	AppendMenuItemTextWithCFString(viewMenu, CFSTR("Full Screen"), 0,
-			kFullScreenCmd, &index);
-	SetMenuItemCommandKey(viewMenu, index, 0, 'F');
-	InsertMenu(viewMenu, GetMenuID(windMenu));
-
-	DrawMenuBar();
-	uint32_t windowAttrs = 0
-				| kWindowCloseBoxAttribute
-				| kWindowCollapseBoxAttribute
-				| kWindowResizableAttribute
-				| kWindowStandardHandlerAttribute
-				| kWindowFullZoomAttribute
-		;
-
-	CreateNewWindow(kDocumentWindowClass, windowAttrs, &winRect, &theWindow);
-	CreateWindowGroup(0, &winGroup);
-	SetWindowGroup(theWindow, winGroup);
-
-	SetWindowTitleWithCFString(theWindow, CFSTR("Drawterm"));
-
-	if(PasteboardCreate(kPasteboardClipboard, &appleclip) != noErr)
-		sysfatal("pasteboard create failed");
-
-	const EventTypeSpec quit_events[] = {
-		{ kEventClassApplication, kEventAppQuit }
-	};
-	const EventTypeSpec commands[] = {
-		{ kEventClassWindow, kEventWindowClosed },
-		{ kEventClassWindow, kEventWindowBoundsChanged },
-		{ kEventClassCommand, kEventCommandProcess }
-	};
-	const EventTypeSpec events[] = {
-		{ kEventClassKeyboard, kEventRawKeyDown },
-		{ kEventClassKeyboard, kEventRawKeyModifiersChanged },
-		{ kEventClassKeyboard, kEventRawKeyRepeat },
-		{ kEventClassMouse, kEventMouseDown },
-		{ kEventClassMouse, kEventMouseUp },
-		{ kEventClassMouse, kEventMouseMoved },
-		{ kEventClassMouse, kEventMouseDragged },
-		{ kEventClassMouse, kEventMouseWheelMoved },
-	};
-
-	InstallApplicationEventHandler (
-								NewEventHandlerUPP (ApplicationQuitEventHandler),
-								GetEventTypeCount(quit_events),
-								quit_events,
-								NULL,
-								NULL);
-
- 	InstallApplicationEventHandler (
- 								NewEventHandlerUPP (MainWindowEventHandler),
-								GetEventTypeCount(events),
-								events,
-								NULL,
-								NULL);
-	InstallWindowEventHandler (
-								theWindow,
-								NewEventHandlerUPP (MainWindowCommandHandler),
-								GetEventTypeCount(commands),
-								commands,
-								theWindow,
-								NULL);
-
-	ShowWindow(theWindow);
-	ShowMenuBar();
-	window_resized();
-	SelectWindow(theWindow);
-	qlock(&drawlock);
-	terminit();
-	qunlock(&drawlock);
-	// Run the event loop
-	readybit = 1;
-	wakeup(&rend);
-	RunApplicationEventLoop();
-
-}
-
-static inline int convert_key(UInt32 key, UInt32 charcode)
-{
-	switch(key) {
-		case QZ_IBOOK_ENTER:
-		case QZ_RETURN: return '\n';
-		case QZ_ESCAPE: return 27;
-		case QZ_BACKSPACE: return '\b';
-		case QZ_LALT: return Kalt;
-		case QZ_LCTRL: return Kctl;
-		case QZ_LSHIFT: return Kshift;
-		case QZ_F1: return KF+1;
-		case QZ_F2: return KF+2;
-		case QZ_F3: return KF+3;
-		case QZ_F4: return KF+4;
-		case QZ_F5: return KF+5;
-		case QZ_F6: return KF+6;
-		case QZ_F7: return KF+7;
-		case QZ_F8: return KF+8;
-		case QZ_F9: return KF+9;
-		case QZ_F10: return KF+10;
-		case QZ_F11: return KF+11;
-		case QZ_F12: return KF+12;
-		case QZ_INSERT: return Kins;
-		case QZ_DELETE: return 0x7F;
-		case QZ_HOME: return Khome;
-		case QZ_END: return Kend;
-		case QZ_KP_PLUS: return '+';
-		case QZ_KP_MINUS: return '-';
-		case QZ_TAB: return '\t';
-		case QZ_PAGEUP: return Kpgup;
-		case QZ_PAGEDOWN: return Kpgdown;
-		case QZ_UP: return Kup;
-		case QZ_DOWN: return Kdown;
-		case QZ_LEFT: return Kleft;
-		case QZ_RIGHT: return Kright;
-		case QZ_KP_MULTIPLY: return '*';
-		case QZ_KP_DIVIDE: return '/';
-		case QZ_KP_ENTER: return '\n';
-		case QZ_KP_PERIOD: return '.';
-		case QZ_KP0: return '0';
-		case QZ_KP1: return '1';
-		case QZ_KP2: return '2';
-		case QZ_KP3: return '3';
-		case QZ_KP4: return '4';
-		case QZ_KP5: return '5';
-		case QZ_KP6: return '6';
-		case QZ_KP7: return '7';
-		case QZ_KP8: return '8';
-		case QZ_KP9: return '9';
-		default: return charcode;
-	}
-}
-
-static void
-sendbuttons(int b, int x, int y)
-{
-	absmousetrack(x, y, b, ticks());
-}
-
-static Ptr fullScreenRestore;
-static int amFullScreen = 0;
-static WindowRef oldWindow = NULL;
-
-static void
-leave_full_screen()
-{
-	if (amFullScreen) {
-		EndFullScreen(fullScreenRestore, 0);
-		theWindow = oldWindow;
-		ShowWindow(theWindow);
-		amFullScreen = 0;
-		window_resized();
-		Rectangle rect =  { { 0, 0 },
- 							{ bounds.size.width,
- 							  bounds.size.height} };
-		qlock(&drawlock);
- 		flushmemscreen(rect);
- 		qunlock(&drawlock);
-	}
-}
-
-static void
-full_screen()
-{
-	if (!amFullScreen) {
-		oldWindow = theWindow;
-		HideWindow(theWindow);
-		BeginFullScreen(&fullScreenRestore, 0, 0, 0, &theWindow, 0, 0);
-		amFullScreen = 1;
-		window_resized();
-		Rectangle rect =  { { 0, 0 },
- 							{ bounds.size.width,
- 							  bounds.size.height} };
-		qlock(&drawlock);
- 		flushmemscreen(rect);
- 		qunlock(&drawlock);
-	}
-}
-
-// catch quit events to handle quits from menu, Cmd+Q, applescript, and task switcher
-static OSStatus ApplicationQuitEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData)
-{
-	exit(0);
-//	QuitApplicationEventLoop();
-	return noErr;
-}
- 
-static OSStatus MainWindowEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData)
-{
-	OSStatus result = noErr;
-	result = CallNextEventHandler(nextHandler, event);
-	UInt32 class = GetEventClass (event);
-	UInt32 kind = GetEventKind (event);
-	static uint32_t mousebuttons = 0; // bitmask of buttons currently down
-	static uint32_t mouseX = 0; 
-	static uint32_t mouseY = 0; 
-
-	if(class == kEventClassKeyboard) {
-		char macCharCodes;
-		UInt32 macKeyCode;
-		UInt32 macKeyModifiers;
-
-		GetEventParameter(event, kEventParamKeyMacCharCodes, typeChar,
-							NULL, sizeof(macCharCodes), NULL, &macCharCodes);
-		GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL,
-							sizeof(macKeyCode), NULL, &macKeyCode);
-		GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL,
-							sizeof(macKeyModifiers), NULL, &macKeyModifiers);
-        switch(kind) {
-		case kEventRawKeyModifiersChanged:
-			if (macKeyModifiers == (controlKey | optionKey)) leave_full_screen();
-
-			switch(macKeyModifiers & (optionKey | cmdKey)) {
-			case (optionKey | cmdKey):
-				/* due to chording we need to handle the case when both
-				 * modifier keys are pressed at the same time. 
-				 * currently it's only 2-3 snarf and the 3-2 noop
-				 */
-				altPressed = true;
-				if(mousebuttons & 1 || mousebuttons & 2 || mousebuttons & 4) {
-					mousebuttons |= 2;	/* set button 2 */
-					mousebuttons |= 4;	/* set button 3 */
-					button2 = true;
-					button3 = true;
-					sendbuttons(mousebuttons, mouseX, mouseY);
-				} 
-				break;
-			case optionKey:
-				altPressed = true;
-				if(mousebuttons & 1 || mousebuttons & 4) {
-					mousebuttons |= 2;	/* set button 2 */
-					button2 = true;
-					sendbuttons(mousebuttons, mouseX, mouseY);
-				} 
-				break;
-			case cmdKey:
-				if(mousebuttons & 1 || mousebuttons & 2) {
-					mousebuttons |= 4;	/* set button 3 */
-					button3 = true;
-					sendbuttons(mousebuttons, mouseX, mouseY);
-				}
-				break;
-			case 0:
-			default:
-				if(button2 || button3) {
-					if(button2) {
-						mousebuttons &= ~2;	/* clear button 2 */
-						button2 = false;
-						altPressed = false;
-					} 
-					if(button3) {
-						mousebuttons &= ~4;	/* clear button 3 */
-						button3 = false;
-					}
-					sendbuttons(mousebuttons, mouseX, mouseY);
-				}
-				if(altPressed) {
-					kbdputc(kbdq, Kalt);
-					altPressed = false;
-				} 
-				break;
-			}
-			break;
-		case kEventRawKeyDown:
-		case kEventRawKeyRepeat:
-			if(macKeyModifiers != cmdKey) {
-				int key = convert_key(macKeyCode, macCharCodes);
-				if (key != -1) kbdputc(kbdq, key);
-			} else
-				result = eventNotHandledErr;
-			break;
-		default:
-			break;
-		}
-	}
-	else if(class == kEventClassMouse) {
-		_Point mousePos;
-
-		GetEventParameter(event, kEventParamMouseLocation, typeQDPoint,
-							0, sizeof mousePos, 0, &mousePos);
-		
-		switch (kind) {
-			case kEventMouseWheelMoved:
-			{
-			    int32_t wheeldelta;
-				GetEventParameter(event,kEventParamMouseWheelDelta,typeSInt32,
-									0,sizeof(wheeldelta), 0, &wheeldelta);
-				mouseX = mousePos.h - winRect.left;
-				mouseY = mousePos.v - winRect.top;
-				sendbuttons(wheeldelta>0 ? 8 : 16, mouseX, mouseY);
-				break;
-			}
-			case kEventMouseUp:
-			case kEventMouseDown:
-			{
-				uint32_t buttons;
-				uint32_t modifiers;
-				GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, 
-									0, sizeof(modifiers), 0, &modifiers);
-				GetEventParameter(event, kEventParamMouseChord, typeUInt32, 
-									0, sizeof buttons, 0, &buttons);
-				/* simulate other buttons via alt/apple key. like x11 */
-				if(modifiers & optionKey) {
-					mousebuttons = ((buttons & 1) ? 2 : 0);
-					altPressed = false;
-				} else if(modifiers & cmdKey)
-					mousebuttons = ((buttons & 1) ? 4 : 0);
-				else
-					mousebuttons = (buttons & 1);
-
-				mousebuttons |= ((buttons & 2)<<1);
-				mousebuttons |= ((buttons & 4)>>1);
-
-			} /* Fallthrough */
-			case kEventMouseMoved:
-			case kEventMouseDragged:
-				mouseX = mousePos.h - winRect.left;
-				mouseY = mousePos.v - winRect.top;
-				sendbuttons(mousebuttons, mouseX, mouseY);
-				break;
-			default:
-				result = eventNotHandledErr;
-				break;
-		}
-	}
-	return result;
-}
-
-
-//default window command handler (from menus)
-static OSStatus MainWindowCommandHandler(EventHandlerCallRef nextHandler,
-					EventRef event, void *userData)
-{
-	OSStatus result = noErr;
-	UInt32 class = GetEventClass (event);
-	UInt32 kind = GetEventKind (event);
-
-	result = CallNextEventHandler(nextHandler, event);
-
-	if(class == kEventClassCommand)
-	{
-		HICommand theHICommand;
-		GetEventParameter( event, kEventParamDirectObject, typeHICommand,
-							NULL, sizeof( HICommand ), NULL, &theHICommand );
-
-		switch ( theHICommand.commandID )
-		{
-			case kHICommandQuit:
-				exit(0);
-				break;
-
-			case kFullScreenCmd:
-				full_screen();
-				break;
-
-			default:
-				result = eventNotHandledErr;
-				break;
-		}
-	}
-	else if(class == kEventClassWindow)
-	{
-		WindowRef     window;
-		_Rect          rectPort = {0,0,0,0};
-
-		GetEventParameter(event, kEventParamDirectObject, typeWindowRef,
-							NULL, sizeof(WindowRef), NULL, &window);
-
-		if(window)
-		{
-			GetPortBounds(GetWindowPort(window), &rectPort);
-		}
-
-		switch (kind)
-		{
-			case kEventWindowClosed:
-				// send a quit carbon event instead of directly calling cleanexit 
-				// so that all quits are done in ApplicationQuitEventHandler
-				{
-				EventRef quitEvent;
-				CreateEvent(NULL,
-							kEventClassApplication,
-							kEventAppQuit,
-							0,
-							kEventAttributeNone,
-							&quitEvent);
-				EventTargetRef target;
-				target = GetApplicationEventTarget();
-				SendEventToEventTarget(quitEvent, target);
-				}
- 				break;
-
-			//resize window
-			case kEventWindowBoundsChanged:
-				window_resized();
-				Rectangle rect =  { { 0, 0 },
- 									{ bounds.size.width,
- 									  bounds.size.height} };
-				qlock(&drawlock);
- 				flushmemscreen(rect);
- 				qunlock(&drawlock);
-				break;
-
-			default:
-				result = eventNotHandledErr;
-				break;
-		}
-	}
-
-	return result;
-}
-
-void
-flushmemscreen(Rectangle r)
-{
-	// sanity check.  Trips from the initial "terminal"
-    if (r.max.x < r.min.x || r.max.y < r.min.y) return;
-    
-	screenload(r, gscreen->depth, byteaddr(gscreen, ZP), ZP,
-		gscreen->width*sizeof(ulong));
-}
-
-Memdata*
-attachscreen(Rectangle *r, ulong *chan, int *depth, int *width, int *softscreen)
-{
-	*r = gscreen->r;
-	*chan = gscreen->chan;
-	*depth = gscreen->depth;
-	*width = gscreen->width;
-	*softscreen = 1;
-
-	gscreen->data->ref++;
-	return gscreen->data;
-}
-
-// PAL - no palette handling.  Don't intend to either.
-void
-getcolor(ulong i, ulong *r, ulong *g, ulong *b)
-{
-
-// PAL: Certainly wrong to return a grayscale.
-	 *r = i;
-	 *g = i;
-	 *b = i;
-}
-
-void
-setcolor(ulong index, ulong red, ulong green, ulong blue)
-{
-	assert(0);
-}
-
-
-static char snarf[3*SnarfSize+1];
-static Rune rsnarf[SnarfSize+1];
-
-char*
-clipread(void)
-{
-	CFDataRef cfdata;
-	OSStatus err = noErr;
-	ItemCount nItems;
-
-	// Wow.  This is ridiculously complicated.
-	PasteboardSynchronize(appleclip);
-	if((err = PasteboardGetItemCount(appleclip, &nItems)) != noErr) {
-		fprint(2, "apple pasteboard GetItemCount failed - Error %d\n", err);
-		return 0;
-	}
-
-	uint32_t i;
-	// Yes, based at 1.  Silly API.
-	for(i = 1; i <= nItems; ++i) {
-		PasteboardItemID itemID;
-		CFArrayRef flavorTypeArray;
-		CFIndex flavorCount;
-
-		if((err = PasteboardGetItemIdentifier(appleclip, i, &itemID)) != noErr){
-			fprint(2, "Can't get pasteboard item identifier: %d\n", err);
-			return 0;
-		}
-
-		if((err = PasteboardCopyItemFlavors(appleclip, itemID, &flavorTypeArray))!=noErr){
-			fprint(2, "Can't copy pasteboard item flavors: %d\n", err);
-			return 0;
-		}
-
-		flavorCount = CFArrayGetCount(flavorTypeArray);
-		CFIndex flavorIndex;
-		for(flavorIndex = 0; flavorIndex < flavorCount; ++flavorIndex){
-			CFStringRef flavorType;
-			flavorType = (CFStringRef)CFArrayGetValueAtIndex(flavorTypeArray, flavorIndex);
-			if (UTTypeConformsTo(flavorType, CFSTR("public.utf16-plain-text"))){
-				if((err = PasteboardCopyItemFlavorData(appleclip, itemID,
-					CFSTR("public.utf16-plain-text"), &cfdata)) != noErr){
-					fprint(2, "apple pasteboard CopyItem failed - Error %d\n", err);
-					return 0;
-				}
-				CFIndex length = CFDataGetLength(cfdata);
-				if (length > sizeof rsnarf) length = sizeof rsnarf;
-				CFDataGetBytes(cfdata, CFRangeMake(0, length), (uint8_t *)rsnarf);
-				snprint(snarf, sizeof snarf, "%.*S", length/sizeof(Rune), rsnarf);
-				char *s = snarf;
-				while (*s) {
-					if (*s == '\r') *s = '\n';
-					s++;
-				}
-				CFRelease(cfdata);
-				return strdup(snarf);
-			}
-		}
-	}
-	return 0;
-}
-
-int
-clipwrite(char *snarf)
-{
-	CFDataRef cfdata;
-	PasteboardSyncFlags flags;
-
-	runesnprint(rsnarf, nelem(rsnarf), "%s", snarf);
-	if(PasteboardClear(appleclip) != noErr){
-		fprint(2, "apple pasteboard clear failed\n");
-		return 0;
-	}
-	flags = PasteboardSynchronize(appleclip);
-	if((flags&kPasteboardModified) || !(flags&kPasteboardClientIsOwner)){
-		fprint(2, "apple pasteboard cannot assert ownership\n");
-		return 0;
-	}
-	cfdata = CFDataCreate(kCFAllocatorDefault, 
-		(uchar*)rsnarf, runestrlen(rsnarf)*2);
-	if(cfdata == nil){
-		fprint(2, "apple pasteboard cfdatacreate failed\n");
-		return 0;
-	}
-	if(PasteboardPutItemFlavor(appleclip, (PasteboardItemID)1,
-		CFSTR("public.utf16-plain-text"), cfdata, 0) != noErr){
-		fprint(2, "apple pasteboard putitem failed\n");
-		CFRelease(cfdata);
-		return 0;
-	}
-	CFRelease(cfdata);
-	return 1;
-}
-
-
-void
-mouseset(Point xy)
-{
-	CGPoint pnt;
-	pnt.x = xy.x + winRect.left;
-	pnt.y = xy.y + winRect.top;
-	CGWarpMouseCursorPosition(pnt);
-}
-
-void
-screenload(Rectangle r, int depth, uchar *p, Point pt, int step)
-{
-	CGRect rbounds;
-	rbounds.size.width = r.max.x - r.min.x;
-	rbounds.size.height = r.max.y - r.min.y;
-	rbounds.origin.x = r.min.x;
-	rbounds.origin.y = r.min.y;
-		
-	if(depth != gscreen->depth)
-		panic("screenload: bad ldepth");
-		
-	QDBeginCGContext( GetWindowPort(theWindow), &context);
-	
-	// The sub-image is relative to our whole screen image.
-	CGImageRef subimg = CGImageCreateWithImageInRect(fullScreenImage, rbounds);
-	
-	// Drawing the sub-image is relative to the window.
-	rbounds.origin.y = winRect.bottom - winRect.top - r.min.y - rbounds.size.height;
-	CGContextDrawImage(context, rbounds, subimg);
-	CGContextFlush(context);
-	CGImageRelease(subimg);
-	QDEndCGContext( GetWindowPort(theWindow), &context);
-
-}
-
-// PAL: these don't work.
-// SetCursor and InitCursor are marked as deprecated in 10.4, and I can't for the
-// life of me find out what has replaced them.
-void
-setcursor(void)
-{
-    Cursor crsr;
-    int i;
-    
-	for(i=0; i<16; i++){
-		crsr.data[i] = ((ushort*)cursor.set)[i];
-		crsr.mask[i] = crsr.data[i] | ((ushort*)cursor.clr)[i];
-	}
-	crsr.hotSpot.h = -cursor.offset.x;
-	crsr.hotSpot.v = -cursor.offset.y;
-	SetCursor(&crsr);
-}
-
-void
-cursorarrow(void)
-{
-	InitCursor();
-}
-
-void
-guimain(void)
-{
-	cpubody();
-}
--- a/gui-osx/wstrtoutf.c
+++ /dev/null
@@ -1,35 +1,0 @@
-#include <u.h>
-#include <libc.h>
-
-int
-wstrutflen(Rune *s)
-{
-	int n;
-	
-	for(n=0; *s; n+=runelen(*s),s++)
-		;
-	return n;
-}
-
-int
-wstrtoutf(char *s, Rune *t, int n)
-{
-	int i;
-	char *s0;
-
-	s0 = s;
-	if(n <= 0)
-		return wstrutflen(t)+1;
-	while(*t) {
-		if(n < UTFmax+1 && n < runelen(*t)+1) {
-			*s = 0;
-			return i+wstrutflen(t)+1;
-		}
-		i = runetochar(s, t);
-		s += i;
-		n -= i;
-		t++;
-	}
-	*s = 0;
-	return s-s0;
-}