1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-06-30 11:02:48 -05:00

Created new data types Filename' and FontSpec', intended to be

opaque to all platform-independent modules and only handled within
per-platform code. `Filename' is there because the Mac has a magic
way to store filenames (though currently this checkin doesn't
support it!); `FontSpec' is there so that all the auxiliary stuff
such as font height and charset and so on which is needed under
Windows but not Unix can be kept where it belongs, and so that I can
have a hope in hell of dealing with a font chooser in the forthcoming
cross-platform config box code, and best of all it gets the horrid
font height wart out of settings.c and into the Windows code where
it should be.
The Mac part of this checkin is a bunch of random guesses which will
probably not quite compile, but which look roughly right to me.
Sorry if I screwed it up, Ben :-)

[originally from svn r2765]
This commit is contained in:
Simon Tatham
2003-02-01 12:54:40 +00:00
parent ccf35b8a26
commit f26b7aa0d3
30 changed files with 612 additions and 271 deletions

View File

@ -88,10 +88,28 @@ char *x_get_default(const char *key)
/*
* Default settings that are specific to pterm.
*/
FontSpec platform_default_fontspec(const char *name)
{
FontSpec ret;
if (!strcmp(name, "Font"))
strcpy(ret.name, "fixed");
else
*ret.name = '\0';
return ret;
}
Filename platform_default_filename(const char *name)
{
Filename ret;
if (!strcmp(name, "LogFileName"))
strcpy(ret.path, "putty.log");
else
*ret.path = '\0';
return ret;
}
char *platform_default_s(const char *name)
{
if (!strcmp(name, "Font"))
return "fixed";
return NULL;
}
@ -112,7 +130,7 @@ void ldisc_update(void *frontend, int echo, int edit)
*/
}
int askappend(void *frontend, char *filename)
int askappend(void *frontend, Filename filename)
{
/*
* Logging in an xterm-alike is liable to be something you only
@ -2022,26 +2040,26 @@ int do_cmdline(int argc, char **argv, int do_everything, Config *cfg)
if (!strcmp(p, "-fn") || !strcmp(p, "-font")) {
EXPECTS_ARG;
SECOND_PASS_ONLY;
strncpy(cfg->font, val, sizeof(cfg->font));
cfg->font[sizeof(cfg->font)-1] = '\0';
strncpy(cfg->font.name, val, sizeof(cfg->font.name));
cfg->font.name[sizeof(cfg->font.name)-1] = '\0';
} else if (!strcmp(p, "-fb")) {
EXPECTS_ARG;
SECOND_PASS_ONLY;
strncpy(cfg->boldfont, val, sizeof(cfg->boldfont));
cfg->boldfont[sizeof(cfg->boldfont)-1] = '\0';
strncpy(cfg->boldfont.name, val, sizeof(cfg->boldfont.name));
cfg->boldfont.name[sizeof(cfg->boldfont.name)-1] = '\0';
} else if (!strcmp(p, "-fw")) {
EXPECTS_ARG;
SECOND_PASS_ONLY;
strncpy(cfg->widefont, val, sizeof(cfg->widefont));
cfg->widefont[sizeof(cfg->widefont)-1] = '\0';
strncpy(cfg->widefont.name, val, sizeof(cfg->widefont.name));
cfg->widefont.name[sizeof(cfg->widefont.name)-1] = '\0';
} else if (!strcmp(p, "-fwb")) {
EXPECTS_ARG;
SECOND_PASS_ONLY;
strncpy(cfg->wideboldfont, val, sizeof(cfg->wideboldfont));
cfg->wideboldfont[sizeof(cfg->wideboldfont)-1] = '\0';
strncpy(cfg->wideboldfont.name, val, sizeof(cfg->wideboldfont.name));
cfg->wideboldfont.name[sizeof(cfg->wideboldfont.name)-1] = '\0';
} else if (!strcmp(p, "-cs")) {
EXPECTS_ARG;
@ -2122,8 +2140,8 @@ int do_cmdline(int argc, char **argv, int do_everything, Config *cfg)
} else if (!strcmp(p, "-log")) {
EXPECTS_ARG;
SECOND_PASS_ONLY;
strncpy(cfg->logfilename, val, sizeof(cfg->logfilename));
cfg->logfilename[sizeof(cfg->logfilename)-1] = '\0';
strncpy(cfg->logfilename.path, val, sizeof(cfg->logfilename.path));
cfg->logfilename.path[sizeof(cfg->logfilename.path)-1] = '\0';
cfg->logtype = LGTYP_DEBUG;
} else if (!strcmp(p, "-ut-") || !strcmp(p, "+ut")) {
@ -2278,37 +2296,38 @@ int main(int argc, char **argv)
if (do_cmdline(argc, argv, 1, &inst->cfg))
exit(1); /* post-defaults, do everything */
inst->fonts[0] = gdk_font_load(inst->cfg.font);
inst->fonts[0] = gdk_font_load(inst->cfg.font.name);
if (!inst->fonts[0]) {
fprintf(stderr, "pterm: unable to load font \"%s\"\n", inst->cfg.font);
fprintf(stderr, "pterm: unable to load font \"%s\"\n",
inst->cfg.font.name);
exit(1);
}
font_charset = set_font_info(inst, 0);
if (inst->cfg.boldfont[0]) {
inst->fonts[1] = gdk_font_load(inst->cfg.boldfont);
if (inst->cfg.boldfont.name[0]) {
inst->fonts[1] = gdk_font_load(inst->cfg.boldfont.name);
if (!inst->fonts[1]) {
fprintf(stderr, "pterm: unable to load bold font \"%s\"\n",
inst->cfg.boldfont);
inst->cfg.boldfont.name);
exit(1);
}
set_font_info(inst, 1);
} else
inst->fonts[1] = NULL;
if (inst->cfg.widefont[0]) {
inst->fonts[2] = gdk_font_load(inst->cfg.widefont);
if (inst->cfg.widefont.name[0]) {
inst->fonts[2] = gdk_font_load(inst->cfg.widefont.name);
if (!inst->fonts[2]) {
fprintf(stderr, "pterm: unable to load wide font \"%s\"\n",
inst->cfg.boldfont);
inst->cfg.widefont.name);
exit(1);
}
set_font_info(inst, 2);
} else
inst->fonts[2] = NULL;
if (inst->cfg.wideboldfont[0]) {
inst->fonts[3] = gdk_font_load(inst->cfg.wideboldfont);
if (inst->cfg.wideboldfont.name[0]) {
inst->fonts[3] = gdk_font_load(inst->cfg.wideboldfont.name);
if (!inst->fonts[3]) {
fprintf(stderr, "pterm: unable to load wide/bold font \"%s\"\n",
inst->cfg.boldfont);
inst->cfg.wideboldfont.name);
exit(1);
}
set_font_info(inst, 3);

View File

@ -1,8 +1,18 @@
#ifndef PUTTY_UNIX_H
#define PUTTY_UNIX_H
#include <stdio.h> /* for FILENAME_MAX */
#include "charset.h"
struct Filename {
char path[FILENAME_MAX];
};
#define f_open(filename, mode) ( fopen((filename).path, (mode)) )
struct FontSpec {
char name[256];
};
typedef void *Context; /* FIXME: probably needs changing */
extern Backend pty_backend;

View File

@ -184,7 +184,7 @@ void askcipher(void *frontend, char *ciphername, int cs)
* Ask whether to wipe a session log file before writing to it.
* Returns 2 for wipe, 1 for append, 0 for cancel (don't log).
*/
int askappend(void *frontend, char *filename)
int askappend(void *frontend, Filename filename)
{
static const char msgtemplate[] =
"The session log file \"%.*s\" already exists.\n"
@ -202,11 +202,11 @@ int askappend(void *frontend, char *filename)
char line[32];
if (console_batch_mode) {
fprintf(stderr, msgtemplate_batch, FILENAME_MAX, filename);
fprintf(stderr, msgtemplate_batch, FILENAME_MAX, filename.path);
fflush(stderr);
return 0;
}
fprintf(stderr, msgtemplate, FILENAME_MAX, filename);
fprintf(stderr, msgtemplate, FILENAME_MAX, filename.path);
fflush(stderr);
{

View File

@ -5,6 +5,8 @@
#include <stdio.h>
#include <sys/time.h>
#include "putty.h"
unsigned long getticks(void)
{
struct timeval tv;
@ -15,3 +17,26 @@ unsigned long getticks(void)
*/
return tv.tv_sec * 1000000 + tv.tv_usec;
}
Filename filename_from_str(char *str)
{
Filename ret;
strncpy(ret.path, str, sizeof(ret.path));
ret.path[sizeof(ret.path)-1] = '\0';
return ret;
}
char *filename_to_str(Filename fn)
{
return fn.path;
}
int filename_equal(Filename f1, Filename f2)
{
return !strcmp(f1.path, f2.path);
}
int filename_is_null(Filename fn)
{
return !*fn.path;
}

View File

@ -136,6 +136,23 @@ int platform_default_i(const char *name, int def)
return def;
}
FontSpec platform_default_fontspec(const char *name)
{
FontSpec ret;
*ret.name = '\0';
return ret;
}
Filename platform_default_filename(const char *name)
{
Filename ret;
if (!strcmp(name, "LogFileName"))
strcpy(ret.path, "putty.log");
else
*ret.path = '\0';
return ret;
}
char *x_get_default(const char *key)
{
return NULL; /* this is a stub */

View File

@ -134,6 +134,24 @@ int read_setting_i(void *handle, const char *key, int defvalue)
return atoi(val);
}
int read_setting_fontspec(void *handle, const char *name, FontSpec *result)
{
return !!read_setting_s(handle, name, result->name, sizeof(result->name));
}
int read_setting_filename(void *handle, const char *name, Filename *result)
{
return !!read_setting_s(handle, name, result->path, sizeof(result->path));
}
void write_setting_fontspec(void *handle, const char *name, FontSpec result)
{
write_setting_s(handle, name, result.name);
}
void write_setting_filename(void *handle, const char *name, Filename result)
{
write_setting_s(handle, name, result.path);
}
void close_settings_r(void *handle)
{
}