The following patch allows extended magnification (up to x32) for the
waterfall spectrum analyzer. It is very useful, for example, during the
calibration of the crystal oscillators using a reference tone being
transmitted on the air (by WWV, WWVH or RWM).

IZ6RDB (iz6rdb@trentalancia.com)

--- gmfsk-0.7pre1-orig/src/interface.c	2005-02-20 22:12:22.000000000 +0100
+++ gmfsk-0.7pre1/src/interface.c	2015-12-18 15:45:29.524744132 +0100
@@ -1691,6 +1691,27 @@ static GnomeUIInfo menu8_uiinfo[] =
     GNOME_APP_PIXMAP_NONE, NULL,
     0, (GdkModifierType) 0, NULL
   },
+  {
+    GNOME_APP_UI_ITEM, N_("x 8"),
+    NULL,
+    (gpointer) NULL, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("x 16"),
+    NULL,
+    (gpointer) NULL, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("x 32"),
+    NULL,
+    (gpointer) NULL, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
   GNOMEUIINFO_END
 };
 
@@ -4113,6 +4134,9 @@ create_confdialog (void)
   GLADE_HOOKUP_OBJECT (confdialog, menu8_uiinfo[0].widget, "menuitem36");
   GLADE_HOOKUP_OBJECT (confdialog, menu8_uiinfo[1].widget, "menuitem37");
   GLADE_HOOKUP_OBJECT (confdialog, menu8_uiinfo[2].widget, "menuitem38");
+  GLADE_HOOKUP_OBJECT (confdialog, menu8_uiinfo[2].widget, "menuitem39");
+  GLADE_HOOKUP_OBJECT (confdialog, menu8_uiinfo[2].widget, "menuitem40");
+  GLADE_HOOKUP_OBJECT (confdialog, menu8_uiinfo[2].widget, "menuitem41");
   GLADE_HOOKUP_OBJECT (confdialog, wfspeedoptionmenu, "wfspeedoptionmenu");
   GLADE_HOOKUP_OBJECT (confdialog, menu6, "menu6");
   GLADE_HOOKUP_OBJECT (confdialog, menu6_uiinfo[0].widget, "menuitem30");
--- gmfsk-0.7pre1-orig/src/waterfall.c	2005-01-01 20:57:03.000000000 +0100
+++ gmfsk-0.7pre1/src/waterfall.c	2015-12-18 22:49:34.374807549 +0100
@@ -1391,6 +1391,27 @@ void waterfall_set_magnification(Waterfa
 		}
 		wf->fftlen = WATERFALL_FFTLEN_4;
 		break;
+	case WATERFALL_MAG_8:
+		if (wf->fftlen == WATERFALL_FFTLEN_8) {
+			g_mutex_unlock(wf->mutex);
+			return;
+		}
+		wf->fftlen = WATERFALL_FFTLEN_8;
+		break;
+	case WATERFALL_MAG_16:
+		if (wf->fftlen == WATERFALL_FFTLEN_16) {
+			g_mutex_unlock(wf->mutex);
+			return;
+		}
+		wf->fftlen = WATERFALL_FFTLEN_16;
+		break;
+	case WATERFALL_MAG_32:
+		if (wf->fftlen == WATERFALL_FFTLEN_32) {
+			g_mutex_unlock(wf->mutex);
+			return;
+		}
+		wf->fftlen = WATERFALL_FFTLEN_32;
+		break;
 	default:
 		g_warning(_("Unsupported magnification: %d\n"), mag);
 		g_mutex_unlock(wf->mutex);
--- gmfsk-0.7pre1-orig/src/waterfall.h	2004-04-16 17:04:19.000000000 +0200
+++ gmfsk-0.7pre1/src/waterfall.h	2015-12-18 22:50:39.595566955 +0100
@@ -64,7 +64,10 @@ typedef enum {
 typedef enum {
 	WATERFALL_MAG_1,
 	WATERFALL_MAG_2,
-	WATERFALL_MAG_4
+	WATERFALL_MAG_4,
+	WATERFALL_MAG_8,
+	WATERFALL_MAG_16,
+	WATERFALL_MAG_32
 } wf_mag_t;
 
 typedef enum {
@@ -86,7 +89,10 @@ typedef struct {
 #define	WATERFALL_FFTLEN_1		2048
 #define	WATERFALL_FFTLEN_2		(WATERFALL_FFTLEN_1 * 2)
 #define	WATERFALL_FFTLEN_4		(WATERFALL_FFTLEN_1 * 4)
-#define	WATERFALL_FFTLEN_MAX		WATERFALL_FFTLEN_4
+#define	WATERFALL_FFTLEN_8		(WATERFALL_FFTLEN_1 * 8)
+#define	WATERFALL_FFTLEN_16		(WATERFALL_FFTLEN_1 * 16)
+#define	WATERFALL_FFTLEN_32		(WATERFALL_FFTLEN_1 * 32)
+#define	WATERFALL_FFTLEN_MAX		WATERFALL_FFTLEN_32
 
 /*
  * These are only defaults now.
