freebsd-ports/comms/kb/files/patch-init.c
Diane Bruce eab2edfb13 The KB contest logging computer program runs on the Linux operating system
with the Gnome desktop. The program is under development, and currently
supports the CQ WW, CQ WPX, and ARRL DX contests, plus Field Day.
Features include on-the-fly dupe checking, CW and voice message keying,
super check partial, packet (Telnet and rf nodes), networking, and
radio control (currently for the FT-1000 only). The program is designed
to be used by U.S. stations, with some support for Canadian stations.
New features and contests are being added regularly, and I will consider
adding support for DX stations if there is sufficient demand.

(The port version has bug fixes and some modifications for Canadian stations.
- db)

Submitted by:	self
2007-12-21 16:55:15 +00:00

150 lines
4.5 KiB
C

--- init.c.orig 2007-09-10 10:34:21.000000000 -0400
+++ init.c 2007-11-24 16:43:45.000000000 -0500
@@ -30,6 +30,7 @@
static gint set_error_check(gpointer data);
static gint check_precedence(void);
static gint butt_kick(gpointer widget);
+static void set_fixed_font(GtkWidget *);
struct init_vars
{
gint row1;
@@ -108,33 +109,13 @@
(col1+9)*wcol,
(row1+9)*hrow+hrow/2,
layout);
- pfd = pango_font_description_from_string ("misc fixed 16");
- pc = gtk_widget_get_pango_context (widget);
- pl = pango_context_get_language (pc);
- pfm = pango_context_get_metrics (pc, pfd, pl);
- ipfmgadw = pango_font_metrics_get_approximate_digit_width (pfm);
- cursor_offset = 8-pango_font_metrics_get_descent (pfm)/PANGO_SCALE;
- pango_font_metrics_unref (pfm);
- if(ipfmgadw==10240)
- {
- pango_layout_set_font_description (layout, pfd);
- pango_font_description_free (pfd);
- }
- else
- {
- pango_font_description_free (pfd);
- pfd = pango_font_description_from_string ("luxi mono 12");
- pango_layout_set_font_description (layout, pfd);
- pango_font_description_free (pfd);
- printf("%s\n", missing_font);
- printf("For a more readable KB screen ");
- printf("add the Misc Fixed font to your system.\n");
- printf("%s\n", missing_font);
- write_line (row1+23, col1+20, missing_font, HI_RED, SAVEPIX);
- write_line (row1+24, col1+6,
- "Now Using Alternate Font. KB Screens May Exhibit Display Problems.",
- HI_RED, SAVEPIX);
- }
+ /* Original code would only work on a 1024 wide screen.
+ * This works for other sized screens, including mine which is 1280 wide.
+ *
+ * - Diane VA3DB db@db.net
+ */
+ set_fixed_font(widget);
+
concat(comp_mon, __DATE__, 0, 2, COPY);
concat(comp_yr, __DATE__, 7, 10, COPY);
while(strcmp(comp_mon, month_array[icm]) && icm<11)
@@ -404,6 +385,7 @@
mode = CW;
else
mode = PH;
+ shift_fkeys = 0;
if(!sccfn && strcmp(init_screen_choices[16], port_bracket[0]))
{
idisplay_type = IDT_KEYER;
@@ -1139,8 +1121,13 @@
beep = 0;
break;
case 7 :
- if(isdigit_ui(ikey) || ikey=='-')
- beep = 0;
+ /* Canadian postal codes will be ANA[space]NAN
+ * I will cheat and allow any combination of alpha, numeric and space.
+ * - Diane VA3DB <db@db.net>
+ */
+ ikey = toupper_ui(ikey);
+ if(isalpha_ui(ikey) || isdigit_ui(ikey) || ikey==' ' || ikey=='-')
+ beep = 0;
break;
case 8 :
ikey = toupper_ui(ikey);
@@ -1163,7 +1150,7 @@
edit_line (&esd);
}
else
- play_bells (BAD_KEY_SOUND);
+ play_bells (BAD_KEY_SOUND);
}
return TRUE;
}
@@ -1791,6 +1778,7 @@
}
write_ini_file ();
insert_mode = 0;
+ shift_fkeys = 0;
shift_fkeys = (strcmp(set_screen_choices[11], yn_bracket[1]));
ssd->done = TRUE;
break;
@@ -2381,3 +2369,57 @@
update_rect.height);
return TRUE;
}
+
+/*
+ * set_fixed_font
+ *
+ * Author - Diane Bruce <db@db.net> VA3DB
+ * Inputs - None
+ * Output - None
+ * Side effects - Try to find a font that fits the screen
+ * giving 80 columns across
+ * KB relies upon the width of a monospace font being equal
+ * in width to one of 80 (NUMBER_OF_COLUMNS) columns.
+ * Bugs - I am sure there must be better ways of doing this.
+ * There is probably a mapping function between
+ * font size and pixel width. I'll look for that next.
+ */
+#define SBUFSIZE 64
+static void
+set_fixed_font(GtkWidget *widget)
+{
+ int width_col;
+ char font_desc[SBUFSIZE];
+ int width_font;
+ int font_size;
+ gint ipfmgadw;
+ PangoFontDescription *pfd;
+ PangoContext *pc;
+ PangoLanguage *pl;
+ PangoFontMetrics *pfm;
+
+ width_col = widget->allocation.width/NUMBER_OF_COLUMNS;
+
+ pc = gtk_widget_get_pango_context (widget);
+ pl = pango_context_get_language (pc);
+
+ for (font_size = 10; font_size < 24; font_size++)
+ {
+ snprintf(font_desc, sizeof(font_desc)-1, "monospace %d", font_size);
+
+ pfd = pango_font_description_from_string (font_desc);
+ pfm = pango_context_get_metrics (pc, pfd, pl);
+ ipfmgadw = pango_font_metrics_get_approximate_digit_width (pfm);
+ if (ipfmgadw/PANGO_SCALE == width_col)
+ {
+ printf("Found a good font [%s]\n", font_desc);
+ pango_font_metrics_unref (pfm);
+ break;
+ }
+ pango_font_metrics_unref (pfm);
+ }
+
+ cursor_offset = 8-pango_font_metrics_get_descent (pfm)/PANGO_SCALE;
+ pango_layout_set_font_description (layout, pfd);
+ pango_font_description_free (pfd);
+}