-/* $Id: macterm.c,v 1.48 2003/01/14 18:44:34 ben Exp $ */
+/* $Id: macterm.c,v 1.51 2003/01/18 16:54:25 ben Exp $ */
/*
* Copyright (c) 1999 Simon Tatham
* Copyright (c) 1999, 2002 Ben Harris
#include <MacTypes.h>
#include <Controls.h>
#include <ControlDefinitions.h>
+#include <FixMath.h>
#include <Fonts.h>
#include <Gestalt.h>
#include <LowMem.h>
#include <Scrap.h>
#include <Script.h>
#include <Sound.h>
-#include <StandardFile.h>
#include <TextCommon.h>
-#include <Threads.h>
#include <ToolUtils.h>
#include <UnicodeConverter.h>
#include "putty.h"
#include "charset.h"
#include "mac.h"
-#include "storage.h"
#include "terminal.h"
#define NCOLOURS (lenof(((Config *)0)->colours))
#define do_text_for_device_upp do_text_for_device
#endif /* not TARGET_RT_MAC_CFM */
-void mac_opensession(void) {
- Session *s;
- StandardFileReply sfr;
- static const OSType sftypes[] = { 'Sess', 0, 0, 0 };
- void *sesshandle;
- int i;
-
- s = smalloc(sizeof(*s));
- memset(s, 0, sizeof(*s));
-
- StandardGetFile(NULL, 1, sftypes, &sfr);
- if (!sfr.sfGood) goto fail;
-
- sesshandle = open_settings_r_fsp(&sfr.sfFile);
- if (sesshandle == NULL) goto fail;
- load_open_settings(sesshandle, TRUE, &s->cfg);
- close_settings_r(sesshandle);
-
- /*
- * Select protocol. This is farmed out into a table in a
- * separate file to enable an ssh-free variant.
- */
- s->back = NULL;
- for (i = 0; backends[i].backend != NULL; i++)
- if (backends[i].protocol == s->cfg.protocol) {
- s->back = backends[i].backend;
- break;
- }
- if (s->back == NULL) {
- fatalbox("Unsupported protocol number found");
- }
- mac_startsession(s);
- return;
-
- fail:
- sfree(s);
- return;
-}
-
void mac_startsession(Session *s)
{
char *errmsg;
+ init_ucs(s);
/* XXX: Own storage management? */
if (HAVE_COLOR_QD())
s->window = GetNewCWindow(wTerminal, NULL, (WindowPtr)-1);
s->window = GetNewWindow(wTerminal, NULL, (WindowPtr)-1);
SetWRefCon(s->window, (long)s);
s->scrollbar = GetNewControl(cVScroll, s->window);
- s->term = term_init(&s->cfg, s);
+ s->term = term_init(&s->cfg, &s->ucsdata, s);
mac_initfont(s);
mac_initpalette(s);
ShowWindow(s->window);
s->next = sesslist;
- s->prev = s->next->prev;
+ s->prev = &sesslist;
if (s->next != NULL)
s->next->prev = &s->next;
sesslist = s;
SetPort(portsave);
}
+void mac_closeterm(WindowPtr window)
+{
+ Session *s = (Session *)GetWRefCon(window);
+
+ /* XXX warn on close */
+ HideWindow(s->window);
+ *s->prev = s->next;
+ s->next->prev = s->prev;
+ ldisc_free(s->ldisc);
+ s->back->free(s->backhandle);
+ log_free(s->logctx);
+ if (s->uni_to_font != NULL)
+ DisposeUnicodeToTextInfo(&s->uni_to_font);
+ term_free(s->term);
+ DisposeWindow(s->window);
+ DisposePalette(s->palette);
+ sfree(s);
+}
+
void mac_activateterm(WindowPtr window, Boolean active) {
Session *s;