static int borednow = FALSE;
struct mac_gestalts mac_gestalts;
UInt32 sleeptime;
+static long timing_next_time;
static void mac_startup(void);
static void mac_eventloop(void);
NewAEEventHandlerUPP(&mac_aevt_quit), 0, FALSE);
}
+void timer_change_notify(long next)
+{
+ timing_next_time = next;
+}
+
static void mac_eventloop(void) {
Boolean gotevent;
EventRecord event;
RgnHandle cursrgn;
+ long next;
+ long ticksleft;
cursrgn = NewRgn();
sleeptime = 0;
for (;;) {
mac_adjustcursor(cursrgn);
+ ticksleft=timing_next_time-GETTICKCOUNT();
+ if (sleeptime > ticksleft && ticksleft >=0)
+ sleeptime=ticksleft;
gotevent = WaitNextEvent(everyEvent, &event, sleeptime, cursrgn);
+ if (timing_next_time <= GETTICKCOUNT()) {
+ if (run_timers(timing_next_time, &next)) {
+ timer_change_notify(next);
+ }
+ }
+
/*
* XXX For now, limit sleep time to 1/10 s to work around
* wake-before-sleep race in MacTCP code.
#include "mac.h"
#include "terminal.h"
-#define NCOLOURS (lenof(((Config *)0)->colours))
-
-#define DEFAULT_FG 16
-#define DEFAULT_FG_BOLD 17
-#define DEFAULT_BG 18
-#define DEFAULT_BG_BOLD 19
-#define CURSOR_FG 20
-#define CURSOR_BG 21
+#define DEFAULT_FG 256
+#define DEFAULT_FG_BOLD 257
+#define DEFAULT_BG 258
+#define DEFAULT_BG_BOLD 259
+#define CURSOR_FG 260
+#define CURSOR_BG 261
#define PTOCC(x) ((x) < 0 ? -(-(x - s->font_width - 1) / s->font_width) : \
(x) / s->font_width)
#define PM_NORMAL ( pmTolerant | pmInhibitC2 | \
pmInhibitG2 | pmInhibitG4 | pmInhibitG8 )
#define PM_TOLERANCE 0x2000
- s->palette = NewPalette(22, NULL, PM_NORMAL, PM_TOLERANCE);
+ s->palette = NewPalette(262, NULL, PM_NORMAL, PM_TOLERANCE);
if (s->palette == NULL)
fatalbox("Unable to create palette");
/* In 2bpp, these are the colours we want most. */
#endif
char mactextbuf[1024];
wchar_t *unitextptr;
- int i, fontwidth;
+ int fontwidth;
ByteCount iread, olen;
OSStatus err;
static DeviceLoopDrawingUPP do_text_for_device_upp = NULL;
if (HAVE_COLOR_QD()) {
if (depth > 2) {
fgcolour = ((a->attr & ATTR_FGMASK) >> ATTR_FGSHIFT);
- fgcolour = (fgcolour & 0xF) * 2 + (fgcolour & 0x10 ? 1 : 0);
bgcolour = ((a->attr & ATTR_BGMASK) >> ATTR_BGSHIFT);
- bgcolour = (bgcolour & 0xF) * 2 + (bgcolour & 0x10 ? 1 : 0);
} else {
/*
* NB: bold reverse in 2bpp breaks with the usual PuTTY model and
bgcolour = tmp;
}
if (bright && depth > 2)
- fgcolour |= 1;
+ if (fgcolour < 16) fgcolour |=8;
+ else if (fgcolour >= 256) fgcolour |=1;
if ((a->attr & TATTR_ACTCURS) && depth > 1) {
fgcolour = CURSOR_FG;
bgcolour = CURSOR_BG;
}
}
-void do_cursor(Context ctx, int x, int y, char *text, int len,
+void do_cursor(Context ctx, int x, int y, wchar_t *text, int len,
unsigned long attr, int lattr)
{
void palette_set(void *frontend, int n, int r, int g, int b)
{
Session *s = frontend;
- static const int first[21] = {
- 0, 2, 4, 6, 8, 10, 12, 14,
- 1, 3, 5, 7, 9, 11, 13, 15,
- 16, 17, 18, 20, 21
- };
if (!HAVE_COLOR_QD())
return;
- real_palette_set(s, first[n], r, g, b);
- if (first[n] == 18)
- real_palette_set(s, first[n]+1, r, g, b);
- if (first[n] == DEFAULT_BG)
- mac_adjustwinbg(s);
+ real_palette_set(s, n, r, g, b);
+ if (n == DEFAULT_BG)
+ mac_adjustwinbg(s);
+
ActivatePalette(s->window);
}
Session *s = frontend;
/* This maps colour indices in cfg to those used in our palette. */
static const int ww[] = {
- 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21,
- 0, 1, 2, 3, 4, 5
+ 256, 257, 258, 259, 260, 261,
+ 0, 8, 1, 9, 2, 10, 3, 11,
+ 4, 12, 5, 13, 6, 14, 7, 15
};
+
int i;
if (!HAVE_COLOR_QD())
return;
- assert(lenof(ww) == NCOLOURS);
-
- for (i = 0; i < NCOLOURS; i++) {
- real_palette_set(s, i,
- s->cfg.colours[ww[i]][0],
- s->cfg.colours[ww[i]][1],
- s->cfg.colours[ww[i]][2]);
+ for (i = 0; i < 22; i++) {
+ int w = ww[i];
+ real_palette_set(s,w,
+ s->cfg.colours[i][0],
+ s->cfg.colours[i][1],
+ s->cfg.colours[i][2]);
}
+ for (i = 0; i < 240; i++) {
+ if (i < 216) {
+ int r = i / 36, g = (i / 6) % 6, b = i % 6;
+ real_palette_set(s,i+16,
+ r * 0x33,
+ g * 0x33,
+ b * 0x33);
+ } else {
+ int shade = i - 216;
+ shade = (shade + 1) * 0xFF / (240 - 216 + 1);
+ real_palette_set(s,i+16,shade,shade,shade);
+ }
+ }
+
+
mac_adjustwinbg(s);
ActivatePalette(s->window);
/* Palette Manager will generate update events as required. */