/*
* Default settings that are specific to pterm.
*/
-FontSpec platform_default_fontspec(const char *name)
+FontSpec *platform_default_fontspec(const char *name)
{
- FontSpec ret;
if (!strcmp(name, "Font"))
- strcpy(ret.name, "server:fixed");
+ return fontspec_new("server:fixed");
else
- *ret.name = '\0';
- return ret;
+ return fontspec_new("");
}
-Filename platform_default_filename(const char *name)
+Filename *platform_default_filename(const char *name)
{
- Filename ret;
if (!strcmp(name, "LogFileName"))
- strcpy(ret.path, "putty.log");
+ return filename_from_str("putty.log");
else
- *ret.path = '\0';
- return ret;
+ return filename_from_str("");
}
char *platform_default_s(const char *name)
return term_data_untrusted(inst->term, data, len);
}
+int from_backend_eof(void *frontend)
+{
+ return TRUE; /* do respond to incoming EOF with outgoing */
+}
+
int get_userpass_input(prompts_t *p, unsigned char *in, int inlen)
{
struct gui_data *inst = (struct gui_data *)p->frontend;
*/
output_charset = CS_UTF8;
{
- wchar_t widedata[32], *wp;
+ wchar_t widedata[32];
+ const wchar_t *wp;
int wlen;
int ulen;
* if we aren't in direct-to-font mode using the D800 hack.
*/
if (!inst->direct_to_font) {
- wchar_t *tmp = data;
+ const wchar_t *tmp = data;
int tmplen = len;
XTextProperty tp;
char *list[1];
rlen*widefactor*inst->font_width, inst->font_height);
gdk_gc_set_foreground(gc, &inst->cols[nfg]);
- {
- gchar *gcs;
-
- /*
- * FIXME: this length is hardwired on the assumption that
- * conversions from wide to multibyte characters will
- * never generate more than 10 bytes for a single wide
- * character.
- */
- gcs = snewn(len*10+1, gchar);
-
- for (combining = 0; combining < ncombining; combining++) {
- int mblen = wc_to_mb(inst->fonts[fontid]->real_charset, 0,
- text + combining, len, gcs, len*10+1, ".",
- NULL, NULL);
- unifont_draw_text(inst->pixmap, gc, inst->fonts[fontid],
- x*inst->font_width+inst->window_border,
- y*inst->font_height+inst->window_border+inst->fonts[0]->ascent,
- gcs, mblen, widefactor > 1, bold, inst->font_width);
- }
-
- sfree(gcs);
+ for (combining = 0; combining < ncombining; combining++) {
+ unifont_draw_text(inst->pixmap, gc, inst->fonts[fontid],
+ x*inst->font_width+inst->window_border,
+ y*inst->font_height+inst->window_border+inst->fonts[0]->ascent,
+ text + combining, len, widefactor > 1,
+ bold, inst->font_width);
}
if (attr & ATTR_UNDER) {
}
if (!strcmp(p, "-fn") || !strcmp(p, "-font")) {
- FontSpec fs;
+ FontSpec *fs;
EXPECTS_ARG;
SECOND_PASS_ONLY;
- strncpy(fs.name, val, sizeof(fs.name));
- fs.name[sizeof(fs.name)-1] = '\0';
- conf_set_fontspec(conf, CONF_font, &fs);
+ fs = fontspec_new(val);
+ conf_set_fontspec(conf, CONF_font, fs);
+ fontspec_free(fs);
} else if (!strcmp(p, "-fb")) {
- FontSpec fs;
+ FontSpec *fs;
EXPECTS_ARG;
SECOND_PASS_ONLY;
- strncpy(fs.name, val, sizeof(fs.name));
- fs.name[sizeof(fs.name)-1] = '\0';
- conf_set_fontspec(conf, CONF_boldfont, &fs);
+ fs = fontspec_new(val);
+ conf_set_fontspec(conf, CONF_boldfont, fs);
+ fontspec_free(fs);
} else if (!strcmp(p, "-fw")) {
- FontSpec fs;
+ FontSpec *fs;
EXPECTS_ARG;
SECOND_PASS_ONLY;
- strncpy(fs.name, val, sizeof(fs.name));
- fs.name[sizeof(fs.name)-1] = '\0';
- conf_set_fontspec(conf, CONF_widefont, &fs);
+ fs = fontspec_new(val);
+ conf_set_fontspec(conf, CONF_widefont, fs);
+ fontspec_free(fs);
} else if (!strcmp(p, "-fwb")) {
- FontSpec fs;
+ FontSpec *fs;
EXPECTS_ARG;
SECOND_PASS_ONLY;
- strncpy(fs.name, val, sizeof(fs.name));
- fs.name[sizeof(fs.name)-1] = '\0';
- conf_set_fontspec(conf, CONF_wideboldfont, &fs);
+ fs = fontspec_new(val);
+ conf_set_fontspec(conf, CONF_wideboldfont, fs);
+ fontspec_free(fs);
} else if (!strcmp(p, "-cs")) {
EXPECTS_ARG;
conf_set_str(conf, CONF_wintitle, val);
} else if (!strcmp(p, "-log")) {
- Filename fn;
+ Filename *fn;
EXPECTS_ARG;
SECOND_PASS_ONLY;
- strncpy(fn.path, val, sizeof(fn.path));
- fn.path[sizeof(fn.path)-1] = '\0';
- conf_set_filename(conf, CONF_logfilename, &fn);
+ fn = filename_from_str(val);
+ conf_set_filename(conf, CONF_logfilename, fn);
conf_set_int(conf, CONF_logtype, LGTYP_DEBUG);
+ filename_free(fn);
} else if (!strcmp(p, "-ut-") || !strcmp(p, "+ut")) {
SECOND_PASS_ONLY;
gdk_input_remove(id);
}
+int frontend_net_pending_error_idle_id;
+int frontend_got_net_pending_errors = FALSE;
+gboolean frontend_net_pending_errors(gpointer data)
+{
+ net_pending_errors();
+ gtk_idle_remove(frontend_net_pending_error_idle_id);
+ frontend_got_net_pending_errors = FALSE;
+ return FALSE;
+}
+void frontend_net_error_pending(void)
+{
+ if (!frontend_got_net_pending_errors) {
+ frontend_got_net_pending_errors = TRUE;
+ frontend_net_pending_error_idle_id =
+ gtk_idle_add(frontend_net_pending_errors, NULL);
+ }
+}
+
void setup_fonts_ucs(struct gui_data *inst)
{
int shadowbold = conf_get_int(inst->conf, CONF_shadowbold);
unifont_destroy(inst->fonts[3]);
fs = conf_get_fontspec(inst->conf, CONF_font);
- inst->fonts[0] = unifont_create(inst->area, fs->name, FALSE, FALSE,
- shadowboldoffset, shadowbold);
+ inst->fonts[0] = multifont_create(inst->area, fs->name, FALSE, FALSE,
+ shadowboldoffset, shadowbold);
if (!inst->fonts[0]) {
fprintf(stderr, "%s: unable to load font \"%s\"\n", appname,
fs->name);
if (shadowbold || !fs->name[0]) {
inst->fonts[1] = NULL;
} else {
- inst->fonts[1] = unifont_create(inst->area, fs->name, FALSE, TRUE,
- shadowboldoffset, shadowbold);
+ inst->fonts[1] = multifont_create(inst->area, fs->name, FALSE, TRUE,
+ shadowboldoffset, shadowbold);
if (!inst->fonts[1]) {
fprintf(stderr, "%s: unable to load bold font \"%s\"\n", appname,
fs->name);
fs = conf_get_fontspec(inst->conf, CONF_widefont);
if (fs->name[0]) {
- inst->fonts[2] = unifont_create(inst->area, fs->name, TRUE, FALSE,
- shadowboldoffset, shadowbold);
+ inst->fonts[2] = multifont_create(inst->area, fs->name, TRUE, FALSE,
+ shadowboldoffset, shadowbold);
if (!inst->fonts[2]) {
fprintf(stderr, "%s: unable to load wide font \"%s\"\n", appname,
fs->name);
if (shadowbold || !fs->name[0]) {
inst->fonts[3] = NULL;
} else {
- inst->fonts[3] = unifont_create(inst->area, fs->name, TRUE, TRUE,
- shadowboldoffset, shadowbold);
+ inst->fonts[3] = multifont_create(inst->area, fs->name, TRUE, TRUE,
+ shadowboldoffset, shadowbold);
if (!inst->fonts[3]) {
fprintf(stderr, "%s: unable to load wide bold font \"%s\"\n", appname,
fs->name);
*/
if (strcmp(conf_get_str(oldconf, CONF_wintitle),
conf_get_str(newconf, CONF_wintitle)))
- set_title(inst, conf_get_str(oldconf, CONF_wintitle));
+ set_title(inst, conf_get_str(newconf, CONF_wintitle));
set_window_titles(inst);
/*
conf_get_fontspec(newconf, CONF_wideboldfont)->name) ||
strcmp(conf_get_str(oldconf, CONF_line_codepage),
conf_get_str(newconf, CONF_line_codepage)) ||
+ conf_get_int(oldconf, CONF_utf8_override) !=
+ conf_get_int(newconf, CONF_utf8_override) ||
conf_get_int(oldconf, CONF_vtmode) !=
conf_get_int(newconf, CONF_vtmode) ||
conf_get_int(oldconf, CONF_shadowbold) !=