-/* $Id: macterm.c,v 1.71 2003/02/15 16:22:15 ben Exp $ */
+/* $Id$ */
/*
* Copyright (c) 1999 Simon Tatham
* Copyright (c) 1999, 2002 Ben Harris
void mac_startsession(Session *s)
{
- char *errmsg;
+ const char *errmsg;
int i;
WinInfo *wi;
s->window = GetNewCWindow(wTerminal, NULL, (WindowPtr)-1);
else
s->window = GetNewWindow(wTerminal, NULL, (WindowPtr)-1);
- wi = smalloc(sizeof(*wi));
+ wi = snew(WinInfo);
memset(wi, 0, sizeof(*wi));
wi->s = s;
wi->wtype = wTerminal;
s->logctx = log_init(s->term, &s->cfg);
term_provide_logctx(s->term, s->logctx);
- errmsg = s->back->init(s->term, &s->backhandle, &s->cfg, s->cfg.host,
- s->cfg.port, &s->realhost, s->cfg.tcp_nodelay);
+ errmsg = s->back->init(s, &s->backhandle, &s->cfg, s->cfg.host,
+ s->cfg.port, &s->realhost, s->cfg.tcp_nodelay,
+ s->cfg.tcp_keepalives);
if (errmsg != NULL)
fatalbox("%s", errmsg);
s->back->provide_logctx(s->backhandle, s->logctx);
const char text = 'W';
FontInfo fi;
#if TARGET_API_MAC_CARBON
- CQDProcsPtr gp = GetPortGrafProcs(GetWindowPort(s->window));;
+ CQDProcsPtr gp = GetPortGrafProcs(GetWindowPort(s->window));
#else
- QDProcsPtr gp = s->window->grafProcs;;
+ QDProcsPtr gp = s->window->grafProcs;
#endif
numer.v = denom.v = 1; /* always */
Session *s;
for (s = sesslist; s != NULL; s = s->next) {
- term_out(s->term);
term_update(s->term);
}
}
if (data[i] == 0x2028)
data[i] = 0x000d;
- mactextbuf = smalloc(len); /* XXX DBCS */
+ mactextbuf = snewn(len, char); /* XXX DBCS */
if (s->uni_to_font != NULL) {
err = ConvertFromUnicodeToText(s->uni_to_font, len * sizeof(UniChar),
(UniChar *)data,
texth = NewHandle(0);
textlen = GetScrap(texth, kScrapFlavorTypeText, &offset);
HLock(texth);
- data = smalloc(textlen * 2);
+ data = snewn(textlen, wchar_t);
/* XXX should use 'styl' scrap if it's there. */
if (mac_gestalts.encvvers != 0 &&
UpgradeScriptInfoToTextEncoding(smSystemScript,
*
* x and y are text row and column (zero-based)
*/
-void do_text(Context ctx, int x, int y, char *text, int len,
+void do_text(Context ctx, int x, int y, wchar_t *text, int len,
unsigned long attr, int lattr)
{
Session *s = ctx;
RgnHandle visrgn;
#endif
char mactextbuf[1024];
- UniChar unitextbuf[1024];
wchar_t *unitextptr;
int i, fontwidth;
ByteCount iread, olen;
assert(len <= 1024);
+ /* SGT, 2004-10-14: I don't know how to support combining characters
+ * on the Mac. Hopefully the first person to fail this assertion will
+ * know how to do it better than me... */
+ assert(!(attr & TATTR_COMBINING));
+
SetPort((GrafPtr)GetWindowPort(s->window));
fontwidth = s->font_width;
return;
#endif
- /* Unpack Unicode from the mad format we get passed */
- for (i = 0; i < len; i++)
- unitextbuf[i] = (unsigned char)text[i] | (attr & CSET_MASK);
-
if (s->uni_to_font != NULL) {
err = ConvertFromUnicodeToText(s->uni_to_font, len * sizeof(UniChar),
- unitextbuf, kUnicodeUseFallbacksMask,
+ text, kUnicodeUseFallbacksMask,
0, NULL, NULL, NULL,
1024, &iread, &olen, mactextbuf);
if (err != noErr && err != kTECUsedFallbacksStatus)
olen = 0;
} else if (s->font_charset != CS_NONE) {
/* XXX this is bogus if wchar_t and UniChar are different sizes. */
- unitextptr = (wchar_t *)unitextbuf;
+ unitextptr = (wchar_t *)text;
olen = charset_from_unicode(&unitextptr, &len, mactextbuf, 1024,
s->font_charset, NULL, ".", 1);
} else
return 2;
}
+int from_backend(void *frontend, int is_stderr, const char *data, int len)
+{
+ Session *s = frontend;
+
+ return term_data(s->term, is_stderr, data, len);
+}
+
/*
* Emacs magic:
* Local Variables: