diff --git a/lib/include/libv4l2.h b/lib/include/libv4l2.h
index ea1870db0..a0ec0a91e 100644
--- a/lib/include/libv4l2.h
+++ b/lib/include/libv4l2.h
@@ -58,6 +58,10 @@ LIBV4L_PUBLIC extern FILE *v4l2_log_file;
    invalid memory address will not lead to failure with errno being EFAULT,
    as it would with a real ioctl, but will cause libv4l2 to break, and you
    get to keep both pieces.
+
+   You can open complex pipelines by passing ".cv" file with pipeline
+   description to v4l2_open(). libv4l2 will open all the required
+   devices automatically in that case.
 */
 
 LIBV4L_PUBLIC int v4l2_open(const char *file, int oflag, ...);
diff --git a/lib/libv4l2/libv4l2-priv.h b/lib/libv4l2/libv4l2-priv.h
index 1924c91f6..1ee697a62 100644
--- a/lib/libv4l2/libv4l2-priv.h
+++ b/lib/libv4l2/libv4l2-priv.h
@@ -104,6 +104,7 @@ struct v4l2_dev_info {
 	void *plugin_library;
 	void *dev_ops_priv;
 	const struct libv4l_dev_ops *dev_ops;
+	struct v4l2_controls_map *map;
 };
 
 /* From v4l2-plugin.c */
@@ -130,4 +131,20 @@ static inline void v4l2_plugin_cleanup(void *plugin_lib, void *plugin_priv,
 extern const char *v4l2_ioctls[];
 void v4l2_log_ioctl(unsigned long int request, void *arg, int result);
 
+
+struct v4l2_control_map {
+	unsigned long control;
+	int fd;
+};
+
+struct v4l2_controls_map {
+	int main_fd;
+	int num_fds;
+	int num_controls;
+	struct v4l2_control_map map[];
+};
+
+int v4l2_open_pipeline(struct v4l2_controls_map *map, int v4l2_flags);
+LIBV4L_PUBLIC int v4l2_get_fd_for_control(int fd, unsigned long control);
+
 #endif
diff --git a/lib/libv4l2/libv4l2.c b/lib/libv4l2/libv4l2.c
index 9ebf8c18e..268a5101d 100644
--- a/lib/libv4l2/libv4l2.c
+++ b/lib/libv4l2/libv4l2.c
@@ -70,6 +70,8 @@
 #include <sys/types.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
+#include <dirent.h>
+
 #include "libv4l2.h"
 #include "libv4l2-priv.h"
 #include "libv4l-plugin.h"
@@ -618,6 +620,8 @@ static void v4l2_update_fps(int index, struct v4l2_streamparm *parm)
 		devices[index].fps = 0;
 }
 
+static int v4l2_open_complex(int fd, int v4l2_flags);
+
 int v4l2_open(const char *file, int oflag, ...)
 {
 	int fd;
@@ -641,6 +645,20 @@ int v4l2_open(const char *file, int oflag, ...)
 	if (fd == -1)
 		return fd;
 
+	int len = strlen(file);
+	char *end = ".cv";
+	int len2 = strlen(end);
+	if ((len > len2) && (!strcmp(file + len - len2, end))) {
+		/* .cv extension */
+		struct stat sb;
+
+		if (fstat(fd, &sb) == 0) {
+			if ((sb.st_mode & S_IFMT) == S_IFREG) {
+				return v4l2_open_complex(fd, 0);
+			}
+		}
+	}
+
 	if (v4l2_fd_open(fd, 0) == -1) {
 		int saved_err = errno;
 
@@ -787,6 +805,8 @@ no_capture:
 	if (index >= devices_used)
 		devices_used = index + 1;
 
+	devices[index].map = NULL;
+
 	/* Note we always tell v4lconvert to optimize src fmt selection for
 	   our default fps, the only exception is the app explicitly selecting
 	   a frame rate using the S_PARM ioctl after a S_FMT */
@@ -1056,12 +1076,47 @@ static int v4l2_s_fmt(int index, struct v4l2_format *dest_fmt)
 	return 0;
 }
 
+int v4l2_get_fd_for_control(int fd, unsigned long control)
+{
+	int index = v4l2_get_index(fd);
+	struct v4l2_controls_map *map;
+	int lo = 0;
+	int hi;
+
+	if (index < 0)
+		return fd;
+
+	map = devices[index].map;
+	if (!map)
+		return fd;
+	hi = map->num_controls;
+
+	while (lo < hi) {
+		int i = (lo + hi) / 2;
+		if (map->map[i].control == control) {
+			return map->map[i].fd;
+		}
+		if (map->map[i].control > control) {
+			hi = i;
+			continue;
+		}
+		if (map->map[i].control < control) {
+			lo = i+1;
+			continue;
+		}
+		printf("Bad: impossible condition in binary search\n");
+		exit(1);
+	}
+	return fd;
+}
+
 int v4l2_ioctl(int fd, unsigned long int request, ...)
 {
 	void *arg;
 	va_list ap;
 	int result, index, saved_err;
-	int is_capture_request = 0, stream_needs_locking = 0;
+	int is_capture_request = 0, stream_needs_locking = 0,
+	    is_subdev_request = 0;
 
 	va_start(ap, request);
 	arg = va_arg(ap, void *);
@@ -1081,13 +1136,14 @@ int v4l2_ioctl(int fd, unsigned long int request, ...)
 
 	/* Is this a capture request and do we need to take the stream lock? */
 	switch (request) {
-	case VIDIOC_QUERYCAP:
 	case VIDIOC_QUERYCTRL:
 	case VIDIOC_G_CTRL:
 	case VIDIOC_S_CTRL:
 	case VIDIOC_G_EXT_CTRLS:
-	case VIDIOC_TRY_EXT_CTRLS:
 	case VIDIOC_S_EXT_CTRLS:
+		is_subdev_request = 1;
+	case VIDIOC_QUERYCAP:
+	case VIDIOC_TRY_EXT_CTRLS:
 	case VIDIOC_ENUM_FRAMESIZES:
 	case VIDIOC_ENUM_FRAMEINTERVALS:
 		is_capture_request = 1;
@@ -1151,10 +1207,15 @@ int v4l2_ioctl(int fd, unsigned long int request, ...)
 	}
 
 	if (!is_capture_request) {
+		int sub_fd;
 no_capture_request:
+		sub_fd = fd;
+		if (is_subdev_request) {
+			sub_fd = v4l2_get_fd_for_control(index, ((struct v4l2_queryctrl *) arg)->id);
+		}
 		result = devices[index].dev_ops->ioctl(
 				devices[index].dev_ops_priv,
-				fd, request, arg);
+				sub_fd, request, arg);
 		saved_err = errno;
 		v4l2_log_ioctl(request, arg, result);
 		errno = saved_err;
@@ -1782,3 +1843,193 @@ int v4l2_get_control(int fd, int cid)
 			(qctrl.maximum - qctrl.minimum) / 2) /
 		(qctrl.maximum - qctrl.minimum);
 }
+
+int v4l2_open_pipeline(struct v4l2_controls_map *map, int v4l2_flags)
+{
+	int index;
+	int i;
+
+	for (i=0; i<map->num_controls; i++) {
+		if (map->map[i].fd <= 0) {
+			V4L2_LOG_ERR("v4l2_open_pipeline: Bad fd in map.\n");
+			return -1;
+		}
+		if (i>=1 && map->map[i].control <= map->map[i-1].control) {
+			V4L2_LOG_ERR("v4l2_open_pipeline: Controls not sorted.\n");
+			return -1;
+		}
+	}
+
+	i = v4l2_fd_open(map->main_fd, v4l2_flags);
+	index = v4l2_get_index(map->main_fd);
+	devices[index].map = map;
+	return i;
+}
+
+static void scan_devices(char **device_names, int *device_fds, int num)
+{
+	struct dirent **namelist;
+	int n;
+	char *class_v4l = "/sys/class/video4linux";
+
+	n = scandir(class_v4l, &namelist, NULL, alphasort);
+	if (n < 0) {
+		perror("scandir");
+		return;
+	}
+
+	while (n--) {
+		if (namelist[n]->d_name[0] != '.') {
+			char filename[1024], content[1024];
+			sprintf(filename, "%s/%s/name", class_v4l, namelist[n]->d_name);
+			FILE *f = fopen(filename, "r");
+			if (!f) {
+				printf("Strange, can't open %s", filename);
+			} else {
+				fgets(content, 1024, f);
+				fclose(f);
+
+				int i;
+				for (i = num-1; i >=0; i--) {
+					if (!strcmp(content, device_names[i])) {
+						sprintf(filename, "/dev/%s", namelist[n]->d_name);
+						device_fds[i] = open(filename, O_RDWR);
+						if (device_fds[i] < 0) {
+							V4L2_LOG_ERR("Error opening %s: %m\n", filename);
+						}
+					}
+				}
+			}
+		}
+		free(namelist[n]);
+	}
+	free(namelist);
+  
+}
+
+static int v4l2_open_complex(int fd, int v4l2_flags)
+{
+#define perr(s) V4L2_LOG_ERR("open_complex: " s "\n")
+#define BUF 256
+	FILE *f = fdopen(fd, "r");
+
+	int res = -1;
+	char buf[BUF];
+	int version, num_modes, num_devices, num_controls;
+	int dev, control;
+
+	if (!f) {
+		perr("open of .cv file failed: %m");
+		goto err;
+	}
+
+	if (fscanf(f, "Complex Video: %d\n", &version) != 1) {
+		perr(".cv file does not have required header");
+		goto close;
+	}
+
+	if (version != 0) {
+		perr(".cv file has unknown version");
+		goto close;
+	}
+
+	if (fscanf(f, "#modes: %d\n", &num_modes) != 1) {
+		perr("could not parse modes");
+		goto close;
+	}
+
+	if (num_modes != 1) {
+		perr("only single mode is supported for now");
+		goto close;
+	}
+
+	if (fscanf(f, "Mode: %s\n", buf) != 1) {
+		perr("could not parse mode name");
+		goto close;
+	}
+
+	if (fscanf(f, " #devices: %d\n", &num_devices) != 1) {
+		perr("could not parse number of devices");
+		goto close;
+	}
+#define MAX_DEVICES 16
+	char *device_names[MAX_DEVICES] = { NULL, };
+	int device_fds[MAX_DEVICES];
+	if (num_devices > MAX_DEVICES) {
+		perr("too many devices");
+		goto close;
+	}
+
+	for (dev = 0; dev < num_devices; dev++) {
+		int tmp;
+		if (fscanf(f, "%d: ", &tmp) != 1) {
+			perr("could not parse device");
+			goto free_devices;
+		}
+		if (tmp != dev) {
+			perr("bad device number");
+			goto free_devices;
+		}
+		fgets(buf, BUF, f);
+		device_names[dev] = strdup(buf);
+		device_fds[dev] = -1;
+	}
+
+	scan_devices(device_names, device_fds, num_devices);
+
+	for (dev = 0; dev < num_devices; dev++) {
+		if (device_fds[dev] == -1) {
+			perr("Could not open all required devices");
+			goto close_devices;
+		}
+	}
+
+	if (fscanf(f, " #controls: %d\n", &num_controls) != 1) {
+		perr("can not parse number of controls");
+		goto close_devices;
+	}
+
+	struct v4l2_controls_map *map = malloc(sizeof(struct v4l2_controls_map) +
+					       num_controls*sizeof(struct v4l2_control_map));
+
+	map->num_controls = num_controls;
+	map->num_fds = num_devices;
+	map->main_fd = device_fds[0];
+
+	for (control = 0; control < num_controls; control++) {
+		unsigned long num;
+		int dev;
+		if (fscanf(f, "0x%lx: %d\n", &num, &dev) != 2) {
+			perr("could not parse control");
+			goto free_map;
+		}
+		if ((dev < 0) || (dev >= num_devices)) {
+			perr("device out of range");
+			goto free_map;
+		}
+		map->map[control].control = num;
+		map->map[control].fd = device_fds[dev];
+	}
+	if (fscanf(f, "%s", buf) > 0) {
+		perr("junk at end of file");
+		goto free_map;
+	}
+
+	res = v4l2_open_pipeline(map, v4l2_flags);
+
+	if (res < 0) {
+free_map:
+		free(map);
+close_devices:
+		for (dev = 0; dev < num_devices; dev++)
+			close(device_fds[dev]);
+	}
+free_devices:
+	for (dev = 0; dev < num_devices; dev++) {
+		free(device_names[dev]);
+	}
+close:
+	fclose(f);
+err:
+	return res;
+}
diff --git a/lib/libv4lconvert/control/libv4lcontrol.c b/lib/libv4lconvert/control/libv4lcontrol.c
index 0b0a346e4..8d2516126 100644
--- a/lib/libv4lconvert/control/libv4lcontrol.c
+++ b/lib/libv4lconvert/control/libv4lcontrol.c
@@ -865,6 +865,7 @@ int v4lcontrol_vidioc_queryctrl(struct v4lcontrol_data *data, void *arg)
 	struct v4l2_queryctrl *ctrl = arg;
 	int retval;
 	uint32_t orig_id = ctrl->id;
+	int fd;
 
 	/* if we have an exact match return it */
 	for (i = 0; i < V4LCONTROL_COUNT; i++)
@@ -874,8 +875,9 @@ int v4lcontrol_vidioc_queryctrl(struct v4lcontrol_data *data, void *arg)
 			return 0;
 		}
 
+	fd = v4l2_get_fd_for_control(data->fd, ctrl->id);
 	/* find out what the kernel driver would respond. */
-	retval = data->dev_ops->ioctl(data->dev_ops_priv, data->fd,
+	retval = data->dev_ops->ioctl(data->dev_ops_priv, fd,
 			VIDIOC_QUERYCTRL, arg);
 
 	if ((data->priv_flags & V4LCONTROL_SUPPORTS_NEXT_CTRL) &&
@@ -905,6 +907,7 @@ int v4lcontrol_vidioc_g_ctrl(struct v4lcontrol_data *data, void *arg)
 {
 	int i;
 	struct v4l2_control *ctrl = arg;
+	int fd;
 
 	for (i = 0; i < V4LCONTROL_COUNT; i++)
 		if ((data->controls & (1 << i)) &&
@@ -913,7 +916,8 @@ int v4lcontrol_vidioc_g_ctrl(struct v4lcontrol_data *data, void *arg)
 			return 0;
 		}
 
-	return data->dev_ops->ioctl(data->dev_ops_priv, data->fd,
+	fd = v4l2_get_fd_for_control(data->fd, ctrl->id);
+	return data->dev_ops->ioctl(data->dev_ops_priv, fd,
 			VIDIOC_G_CTRL, arg);
 }
 
@@ -996,6 +1000,7 @@ int v4lcontrol_vidioc_s_ctrl(struct v4lcontrol_data *data, void *arg)
 {
 	int i;
 	struct v4l2_control *ctrl = arg;
+	int fd;
 
 	for (i = 0; i < V4LCONTROL_COUNT; i++)
 		if ((data->controls & (1 << i)) &&
@@ -1010,7 +1015,8 @@ int v4lcontrol_vidioc_s_ctrl(struct v4lcontrol_data *data, void *arg)
 			return 0;
 		}
 
-	return data->dev_ops->ioctl(data->dev_ops_priv, data->fd,
+	fd = v4l2_get_fd_for_control(data->fd, ctrl->id);
+	return data->dev_ops->ioctl(data->dev_ops_priv, fd,
 			VIDIOC_S_CTRL, arg);
 }
 
diff --git a/v4l-utils-po/de.po b/v4l-utils-po/de.po
index 764393af2..2c576ffc6 100644
--- a/v4l-utils-po/de.po
+++ b/v4l-utils-po/de.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: v4l-utils 1.18.0-1\n"
 "Report-Msgid-Bugs-To: linux-media@vger.Kernel.org\n"
-"POT-Creation-Date: 2019-09-22 12:03+0200\n"
+"POT-Creation-Date: 2018-09-21 15:56-0300\n"
 "PO-Revision-Date: 2019-11-23 18:34+0200\n"
 "Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -18,25 +18,22 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
-#: utils/keytable/keytable.c:239
 # rc = radio control, Funkfernbedienung
+#: utils/keytable/keytable.c:225
+#, fuzzy
 msgid ""
 "\n"
-"Lists Remote Controller devices, loads rc keymaps, tests events, and "
-"adjusts\n"
-"other Remote Controller options. Rather than loading a rc keymap, it is "
-"also\n"
-"possible to set protocol decoders and set rc scancode to keycode mappings\n"
-"directly.\n"
+"Allows get/set IR keycode/scancode tables\n"
 "You need to have read permissions on /dev/input for the program to work\n"
 "\n"
 "On the options below, the arguments are:\n"
-"  SYSDEV    - the rc device as found at /sys/class/rc\n"
-"  KEYMAP    - a keymap file with protocols and scancode to keycode mappings\n"
+"  DEV       - the /dev/input/event* device to control\n"
+"  SYSDEV    - the ir class as found at /sys/class/rc\n"
+"  TABLE     - a file with a set of scancode=keycode value pairs\n"
 "  SCANKEY   - a set of scancode1=keycode1,scancode2=keycode2.. value pairs\n"
 "  PROTOCOL  - protocol name (nec, rc-5, rc-6, jvc, sony, sanyo, rc-5-sz, "
 "lirc,\n"
-"              sharp, mce_kbd, xmp, imon, rc-mm, other, all) to be enabled,\n"
+"              sharp, mce_kbd, xmp, imon, other, all) to be enabled,\n"
 "              or a bpf protocol name or file\n"
 "  DELAY     - Delay before repeating a keystroke\n"
 "  PERIOD    - Period to repeat a keystroke\n"
@@ -52,9 +49,11 @@ msgstr ""
 "testet\n"
 "Ereignisse und passt andere Fernbedienungsoptionen an. Anstatt eine\n"
 "Funkfernbedienungsschlüsselcodetabellen zu laden, ist es auch möglich,\n"
-"Protokolldekodierer zu setzen und Zuordnungen von Scancodes zu Schlüsselcodes\n"
+"Protokolldekodierer zu setzen und Zuordnungen von Scancodes zu "
+"Schlüsselcodes\n"
 "direkt zu setzen.\n"
-"Damit das Programm funktioniert, müssen Sie Leserechte für /dev/input haben.\n"
+"Damit das Programm funktioniert, müssen Sie Leserechte für /dev/input "
+"haben.\n"
 "\n"
 "Die Argumente für die Optionen unten sind:\n"
 "  SYSDEV    - die Fernbedienungsklasse, wie unter /sys/class/rc beschrieben\n"
@@ -65,66 +64,83 @@ msgstr ""
 "              Scancode1=Schlüsselcode1,Scancode2=Schlüsselcode2 …\n"
 "  PROTOCOL  - Protokollname (nec, rc-5, rc-6, jvc, sony, sanyo, rc-5-sz, "
 "lirc,\n"
-"              sharp, mce_kbd, xmp, imon, rc-mm, andere, alle), der aktiviert\n"
+"              sharp, mce_kbd, xmp, imon, rc-mm, andere, alle), der "
+"aktiviert\n"
 "              werden soll oder ein BPF-Protokollname oder eine Datei\n"
 "  DELAY     - Verzögerung vor dem Wiederholen eines Tastendrucks\n"
 "  PERIOD    - Zeitspanne, um einen Tastendruck zu wiederholen\n"
-"  PARAMETER - ein Satz von Name1=Zahl1,[Name2=Zahl2] … für das BPF-Protokoll\n"
+"  PARAMETER - ein Satz von Name1=Zahl1,[Name2=Zahl2] … für das BPF-"
+"Protokoll\n"
 "  CFGFILE   - Konfigurationsdatei, die einen Treiber-/Tabellennamen mit "
 "einer\n"
 "              Schlüsselcodeabbildungsdatei verbindet\n"
 "\n"
 "Optionen können miteinander kombiniert werden."
 
-#: utils/keytable/keytable.c:260 utils/dvb/dvb-fe-tool.c:56
+#: utils/keytable/keytable.c:243 utils/dvb/dvb-fe-tool.c:56
 msgid "enables debug messages"
 msgstr "aktiviert Meldungen zur Fehlersuche."
 
-#: utils/keytable/keytable.c:261
-msgid "Clears the scancode to keycode mappings"
-msgstr "leert die die Abbildungen der Scancodes auf Schlüsselcodes."
+#: utils/keytable/keytable.c:244
+#, fuzzy
+msgid "clears the old table"
+msgstr "wertet die anderen NIT-/SDT-Tabellen aus"
 
-#: utils/keytable/keytable.c:262
+#: utils/keytable/keytable.c:245
 msgid "SYSDEV"
 msgstr "SYSDEV"
 
-#: utils/keytable/keytable.c:262
-msgid "rc device to control, defaults to rc0 if not specified"
-msgstr ""
-"zu steuernde Fernbedienung, Voreinstellung ist rc@, falls nicht angegeben"
+# LIRC = Linux Infrared Remote Control
+#: utils/keytable/keytable.c:245
+#, fuzzy
+msgid "ir class device to control"
+msgstr "zu verwendende Linux-Infrarotfernbedienung"
 
-#: utils/keytable/keytable.c:263
+#: utils/keytable/keytable.c:246
 msgid "test if IR is generating events"
 msgstr "prüft, ob die Infrarotfernbedienung Ereignisse erzeugt."
 
-#: utils/keytable/keytable.c:264
-msgid "reads the current scancode/keycode mapping"
+#: utils/keytable/keytable.c:247 utils/ir-ctl/ir-ctl.c:103
+msgid "DEV"
+msgstr "DEV"
+
+# LIRC = Linux Infrared Remote Control
+#: utils/keytable/keytable.c:247
+#, fuzzy
+msgid "ir device to control"
+msgstr "zu verwendende Linux-Infrarotfernbedienung"
+
+#: utils/keytable/keytable.c:248
+#, fuzzy
+msgid "reads the current scancode/keycode table"
 msgstr "liest die aktuelle Abbildung der Scancodes auf Schlüsselcode."
 
-#: utils/keytable/keytable.c:265 utils/keytable/keytable.c:272
-#: utils/ir-ctl/ir-ctl.c:127
-msgid "KEYMAP"
-msgstr "KEYMAP"
+#: utils/keytable/keytable.c:249
+msgid "TABLE"
+msgstr ""
 
-#: utils/keytable/keytable.c:265
-msgid "write (adds) the keymap from the specified file"
+#: utils/keytable/keytable.c:249
+#, fuzzy
+msgid ""
+"write (adds) the scancodes to the device scancode/keycode table from an "
+"specified file"
 msgstr ""
 "schreibt die Schlüsselcodetabelle aus der angegebenen Datei (oder fügt sie "
 "hinzu)."
 
-#: utils/keytable/keytable.c:266
+#: utils/keytable/keytable.c:250
 msgid "SCANKEY"
 msgstr "SCANKEY"
 
-#: utils/keytable/keytable.c:266
+#: utils/keytable/keytable.c:250
 msgid "Change scan/key pairs"
 msgstr "ändert Scan-/Schlüsselpaare."
 
-#: utils/keytable/keytable.c:267
+#: utils/keytable/keytable.c:251
 msgid "PROTOCOL"
 msgstr "PROTOCOL"
 
-#: utils/keytable/keytable.c:267
+#: utils/keytable/keytable.c:251
 msgid ""
 "Protocol to enable (the other ones will be disabled). To enable more than "
 "one, use the option more than one time"
@@ -132,168 +148,232 @@ msgstr ""
 "Protokoll, das aktiviert werden soll (die anderen werden deaktiviert). Um "
 "mehr als eins zu aktivieren, benutzen Sie die Option mehrfach."
 
-#: utils/keytable/keytable.c:268
+#: utils/keytable/keytable.c:252
 msgid "PARAMETER"
 msgstr "PARAMETER"
 
-#: utils/keytable/keytable.c:268
+#: utils/keytable/keytable.c:252
 msgid "Set a parameter for the protocol decoder"
 msgstr "setzt einen Parameter für den Protokolldekodierer."
 
-#: utils/keytable/keytable.c:269
+#: utils/keytable/keytable.c:253
 msgid "DELAY"
 msgstr "DELAY"
 
-#: utils/keytable/keytable.c:269
+#: utils/keytable/keytable.c:253
 msgid "Sets the delay before repeating a keystroke"
 msgstr "setzt die Verzögerung, bevor ein Tastendruck wiederholt wird."
 
-#: utils/keytable/keytable.c:270
+#: utils/keytable/keytable.c:254
 msgid "PERIOD"
 msgstr "PERIOD"
 
-#: utils/keytable/keytable.c:270
+#: utils/keytable/keytable.c:254
 msgid "Sets the period to repeat a keystroke"
 msgstr "setzt eine Zeitspanne zum Wiederholen eines Tastendrucks."
 
-#: utils/keytable/keytable.c:271
+#: utils/keytable/keytable.c:255
 msgid "CFGFILE"
 msgstr "CFGFILE"
 
-#: utils/keytable/keytable.c:271
+#: utils/keytable/keytable.c:255
+#, fuzzy
 msgid ""
-"Auto-load keymaps, based on a configuration file. Only works with --sysdev."
+"Auto-load a table, based on a configuration file. Only works with sysdev."
 msgstr ""
 "lädt automatisch eine Schlüsselcodeabbildung basierend auf einer "
 "Konfigurationsdatei. Dies funktioniert nur mit --sysdev."
 
-#: utils/keytable/keytable.c:272
-msgid "Test if keymap is valid"
-msgstr "Testet, ob die Schlüsselcodeabbildung gültig ist."
-
-#: utils/keytable/keytable.c:273 utils/dvb/dvb-fe-tool.c:70
+#: utils/keytable/keytable.c:256 utils/dvb/dvb-fe-tool.c:70
 #: utils/dvb/dvb-format-convert.c:62 utils/dvb/dvbv5-scan.c:93
 #: utils/dvb/dvbv5-zap.c:134
 msgid "Give this help list"
 msgstr "gibt diese Hilfeliste aus."
 
-#: utils/keytable/keytable.c:274 utils/dvb/dvb-fe-tool.c:71
+#: utils/keytable/keytable.c:257 utils/dvb/dvb-fe-tool.c:71
 #: utils/dvb/dvb-format-convert.c:63 utils/dvb/dvbv5-scan.c:94
 #: utils/dvb/dvbv5-zap.c:135
 msgid "Give a short usage message"
 msgstr "gibt eine kurze Benutzungsnachricht aus."
 
-#: utils/keytable/keytable.c:275 utils/dvb/dvb-fe-tool.c:72
+#: utils/keytable/keytable.c:258 utils/dvb/dvb-fe-tool.c:72
 #: utils/dvb/dvb-format-convert.c:64 utils/dvb/dvbv5-scan.c:95
 #: utils/dvb/dvbv5-zap.c:136
 msgid "Print program version"
 msgstr "gibt die Programmversion aus."
 
-#: utils/keytable/keytable.c:398 utils/keytable/keytable.c:424
+#: utils/keytable/keytable.c:263
+msgid ""
+"--device [/dev/input/event* device]\n"
+"--sysdev [ir class (f. ex. rc0)]\n"
+"[for using the rc0 sysdev]"
+msgstr ""
+
+#: utils/keytable/keytable.c:380
+#, fuzzy, c-format
+msgid "Parsing %s keycode file as plain text\n"
+msgstr "Konfigurationsdatei %s wird ausgewertet\n"
+
+#: utils/keytable/keytable.c:415
+#, fuzzy, c-format
+msgid "Protocol %s invalid\n"
+msgstr "Protokoll %s ist %s\n"
+
+#: utils/keytable/keytable.c:446 utils/keytable/keytable.c:541
+#, c-format
+msgid "parsing %s=%s:"
+msgstr ""
+
+#: utils/keytable/keytable.c:449 utils/keytable/keytable.c:545
 #, c-format
 msgid "\tvalue=%d\n"
 msgstr "\tWert=%d\n"
 
-#: utils/keytable/keytable.c:403
+#: utils/keytable/keytable.c:454
+#, fuzzy
+msgid "value"
+msgstr "\tWert=%d\n"
+
+#: utils/keytable/keytable.c:473 utils/keytable/keytable.c:699
 #, c-format
-msgid "%s: keycode `%s' not recognised, no mapping for scancode %d\n"
+msgid "Invalid parameter on line %d of %s\n"
+msgstr "ungültiger Parameter in Zeile %d von %s\n"
+
+#: utils/keytable/keytable.c:488
+#, fuzzy, c-format
+msgid "protocol missing\n"
+msgstr "Protokoll %s ist %s\n"
+
+#: utils/keytable/keytable.c:493
+#, c-format
+msgid "Bad value `%s' for protocol\n"
 msgstr ""
-"%s: Schlüsselcode »%s« nicht erkannt, keine Abbildung für Scancode %d\n"
 
-#: utils/keytable/keytable.c:429
+#: utils/keytable/keytable.c:514
 #, c-format
-msgid "%s: keycode `%s' not recognised, no mapping\n"
-msgstr "%s: Schlüsselcode »%s« nicht erkannt, keine Abbildung\n"
+msgid "No [protocols.scancodes] section\n"
+msgstr ""
+
+#: utils/keytable/keytable.c:530
+#, fuzzy, c-format
+msgid "Invalid value `%s'\n"
+msgstr "ungültige Einschaltdauer »%s«"
+
+#: utils/keytable/keytable.c:535
+#, c-format
+msgid "Bad value `%s' for keycode\n"
+msgstr ""
+
+#: utils/keytable/keytable.c:550
+#, fuzzy, c-format
+msgid "keycode `%s' not recognised, no mapping for scancode %s\n"
+msgstr ""
+"%s: Schlüsselcode »%s« nicht erkannt, keine Abbildung für Scancode %d\n"
+
+#: utils/keytable/keytable.c:580
+#, fuzzy, c-format
+msgid "Parsing %s keycode file as toml\n"
+msgstr "Konfigurationsdatei %s wird ausgewertet\n"
+
+#: utils/keytable/keytable.c:589
+#, fuzzy, c-format
+msgid "Failed to parse toml: %s\n"
+msgstr "Lesen von Tabellendatei %s fehlgeschlagen"
+
+#: utils/keytable/keytable.c:595
+#, fuzzy, c-format
+msgid "Missing [protocols] section\n"
+msgstr "%s-Protokoll %s\n"
+
+#: utils/keytable/keytable.c:612
+#, fuzzy, c-format
+msgid "No protocols found\n"
+msgstr "Fehler: Protokoll »%s« nicht gefunden\n"
 
-#: utils/keytable/keytable.c:462
+#: utils/keytable/keytable.c:644
 #, c-format
 msgid "Parsing %s config file\n"
 msgstr "Konfigurationsdatei %s wird ausgewertet\n"
 
-#: utils/keytable/keytable.c:466
+#: utils/keytable/keytable.c:648
 msgid "opening keycode file"
 msgstr "Schlüsselcodedatei wird geöffnet"
 
-#: utils/keytable/keytable.c:493
+#: utils/keytable/keytable.c:675
 #, c-format
 msgid "Driver %s, Table %s => file %s\n"
 msgstr "Treiber %s, Tabelle %s => Datei %s\n"
 
-#: utils/keytable/keytable.c:517
-#, c-format
-msgid "Invalid parameter on line %d of %s\n"
-msgstr "ungültiger Parameter in Zeile %d von %s\n"
-
-#: utils/keytable/keytable.c:542
+#: utils/keytable/keytable.c:724
 #, c-format
 msgid "Invalid delay: %s"
 msgstr "ungültige Verzögerung: »%s«"
 
-#: utils/keytable/keytable.c:547
+#: utils/keytable/keytable.c:729
 #, c-format
 msgid "Invalid period: %s"
 msgstr "ungültige Zeitspanne: %s"
 
-#: utils/keytable/keytable.c:560 utils/keytable/keytable.c:695
+#: utils/keytable/keytable.c:745
 #, c-format
 msgid "Failed to read table file %s"
 msgstr "Lesen von Tabellendatei %s fehlgeschlagen"
 
-#: utils/keytable/keytable.c:564
+#: utils/keytable/keytable.c:747
 #, c-format
 msgid "Read %s table\n"
 msgstr "Lesen von Tabelle %s\n"
 
-#: utils/keytable/keytable.c:573
+#: utils/keytable/keytable.c:753
 #, c-format
 msgid "Failed to read config file %s"
 msgstr "Lesen der Konfigurationsdatei %s fehlgeschlagen"
 
-#: utils/keytable/keytable.c:582
+#: utils/keytable/keytable.c:762
 #, c-format
 msgid "Missing scancode: %s"
 msgstr "fehlender Scancode: %s"
 
-#: utils/keytable/keytable.c:588 utils/keytable/keytable.c:659
+#: utils/keytable/keytable.c:768 utils/keytable/keytable.c:839
 msgid "No memory!\n"
 msgstr "Kein Speicher!\n"
 
-#: utils/keytable/keytable.c:595
+#: utils/keytable/keytable.c:775
 #, c-format
 msgid "Invalid scancode: %s"
 msgstr "ungültiger Scancode: »%s«"
 
-#: utils/keytable/keytable.c:602
+#: utils/keytable/keytable.c:782
 msgid "Missing keycode"
 msgstr "fehlender Schlüsselcode"
 
-#: utils/keytable/keytable.c:611 utils/keytable/keytable.c:675
+#: utils/keytable/keytable.c:791 utils/keytable/keytable.c:855
 #, c-format
 msgid "Unknown keycode: %s"
 msgstr "unbekannter Schlüsselcode: %s"
 
-#: utils/keytable/keytable.c:619
+#: utils/keytable/keytable.c:799
 #, c-format
 msgid "scancode 0x%04x=%u\n"
 msgstr "Scancode 0x%04x=%u\n"
 
-#: utils/keytable/keytable.c:653
+#: utils/keytable/keytable.c:833
 #, c-format
 msgid "Missing parameter name: %s"
 msgstr "fehlender Parametername: %s"
 
-#: utils/keytable/keytable.c:668
+#: utils/keytable/keytable.c:848
 msgid "Missing value"
 msgstr "fehlender Wert"
 
-#: utils/keytable/keytable.c:680
-#, c-format
-msgid "parameter %s=%ld\n"
+#: utils/keytable/keytable.c:860
+#, fuzzy, c-format
+msgid "parameter %s=%d\n"
 msgstr "Parameter %s=%ld\n"
 
-#: utils/keytable/keytable.c:703 utils/dvb/dvb-fe-tool.c:160
+#: utils/keytable/keytable.c:874 utils/dvb/dvb-fe-tool.c:160
 #: utils/dvb/dvb-format-convert.c:88 utils/dvb/dvbv5-scan.c:421
-#: utils/dvb/dvbv5-zap.c:715
+#: utils/dvb/dvbv5-zap.c:714
 #, c-format
 msgid ""
 "\n"
@@ -302,568 +382,544 @@ msgstr ""
 "\n"
 "Melden Sie Fehler an %s.\n"
 
-#: utils/keytable/keytable.c:731
+#: utils/keytable/keytable.c:902
 #, c-format
 msgid "scancode 0x%04x = %s (0x%02x)\n"
 msgstr "Scancode 0x%04x = %s (0x%02x)\n"
 
-#: utils/keytable/keytable.c:737
+#: utils/keytable/keytable.c:908
 #, c-format
 msgid "scancode 0x%04x = '%c' (0x%02x)\n"
 msgstr "Scancode 0x%04x = »%c« (0x%02x)\n"
 
-#: utils/keytable/keytable.c:739
+#: utils/keytable/keytable.c:910
 #, c-format
 msgid "scancode 0x%04x = 0x%02x\n"
 msgstr "Scancode 0x%04x = 0x%02x\n"
 
-#: utils/keytable/keytable.c:790 utils/keytable/keytable.c:1218
+#: utils/keytable/keytable.c:961 utils/keytable/keytable.c:1368
 #, c-format
 msgid "Couldn't find any node at %s%s*.\n"
 msgstr "Bei %s%s* konnte kein Knoten gefunden werden.\n"
 
-#: utils/keytable/keytable.c:799
+#: utils/keytable/keytable.c:970
 msgid "Seek dir"
 msgstr "Suchverzeichnis"
 
-#: utils/keytable/keytable.c:831
+#: utils/keytable/keytable.c:1002
 #, c-format
 msgid "Parsing uevent %s\n"
 msgstr "Uevent %s wird ausgewertet.\n"
 
-#: utils/keytable/keytable.c:855
+#: utils/keytable/keytable.c:1026
 #, c-format
 msgid "Error on uevent information\n"
 msgstr "Fehler bei Uevent-Information\n"
 
-#: utils/keytable/keytable.c:871
+#: utils/keytable/keytable.c:1042
 #, c-format
 msgid "%s uevent %s=%s\n"
 msgstr "%s Uevent %s=%s\n"
 
-#: utils/keytable/keytable.c:900
+#: utils/keytable/keytable.c:1071
 #, c-format
 msgid "No devices found\n"
 msgstr "keine Geräte gefunden\n"
 
-#: utils/keytable/keytable.c:906
+#: utils/keytable/keytable.c:1077
 #, c-format
 msgid "Found device %s\n"
 msgstr "Gerät %s gefunden\n"
 
-#: utils/keytable/keytable.c:930
+#: utils/keytable/keytable.c:1101
 #, c-format
 msgid "Not found device %s\n"
 msgstr "Gerät %s nicht gefunden\n"
 
-#: utils/keytable/keytable.c:986
+#: utils/keytable/keytable.c:1136
 #, c-format
 msgid "%s protocol %s\n"
 msgstr "%s-Protokoll %s\n"
 
-#: utils/keytable/keytable.c:1051
+#: utils/keytable/keytable.c:1201
 #, c-format
 msgid "%s has invalid content: '%s'\n"
 msgstr "%s hat ungültigen Inhalt: »%s«\n"
 
-#: utils/keytable/keytable.c:1058
+#: utils/keytable/keytable.c:1208
 #, c-format
 msgid "protocol %s is %s\n"
 msgstr "Protokoll %s ist %s\n"
 
-#: utils/keytable/keytable.c:1059 utils/keytable/keytable.c:1126
+#: utils/keytable/keytable.c:1209 utils/keytable/keytable.c:1276
 msgid "enabled"
 msgstr "aktiviert"
 
-#: utils/keytable/keytable.c:1059 utils/keytable/keytable.c:1126
+#: utils/keytable/keytable.c:1209 utils/keytable/keytable.c:1276
 msgid "disabled"
 msgstr "deaktiviert"
 
-#: utils/keytable/keytable.c:1125
+#: utils/keytable/keytable.c:1275
 #, c-format
 msgid "%s protocol %s (%s)\n"
 msgstr "%s-Protokoll %s (%s)\n"
 
-#: utils/keytable/keytable.c:1153
+#: utils/keytable/keytable.c:1303
 #, c-format
 msgid "Protocols for device can not be changed\n"
 msgstr "Protokolle für das Gerät können nicht geändert werden.\n"
 
-#: utils/keytable/keytable.c:1210
+#: utils/keytable/keytable.c:1360
 #, c-format
 msgid "Found more than one input interface. This is currently unsupported\n"
 msgstr ""
 "Es wurde mehr als eine Eingabeschnittstelle gefunden. Dies wird derzeit "
 "nicht unterstützt.\n"
 
-#: utils/keytable/keytable.c:1214
+#: utils/keytable/keytable.c:1364
 #, c-format
 msgid "Input sysfs node is %s\n"
 msgstr "Eingabe-Sysfs-Knoten ist %s\n"
 
-#: utils/keytable/keytable.c:1226
+#: utils/keytable/keytable.c:1376
 #, c-format
 msgid "Found more than one event interface. This is currently unsupported\n"
 msgstr ""
 "Es wurde mehr als eine Ereignisschnittstelle gefunden. Dies wird derzeit "
 "nicht unterstützt.\n"
 
-#: utils/keytable/keytable.c:1230
+#: utils/keytable/keytable.c:1380
 #, c-format
 msgid "Event sysfs node is %s\n"
 msgstr "Ereignis-Sysfs-Knoten ist %s\n"
 
-#: utils/keytable/keytable.c:1249
+#: utils/keytable/keytable.c:1399
 #, c-format
 msgid "Input device name not found.\n"
 msgstr "Eingabegerätename nicht gefunden\n"
 
-#: utils/keytable/keytable.c:1274
+#: utils/keytable/keytable.c:1424
 #, c-format
 msgid "input device is %s\n"
 msgstr "Eingabegerät ist %s\n"
 
-#: utils/keytable/keytable.c:1352
+#: utils/keytable/keytable.c:1502
 #, c-format
 msgid "Unable to query evdev protocol version: %s\n"
 msgstr "Edev-Protokollversion kann nicht abgefragt werden: %s\n"
 
-#: utils/keytable/keytable.c:1357
+#: utils/keytable/keytable.c:1507
 #, c-format
 msgid "Input Protocol version: 0x%08x\n"
 msgstr "Eingabeprotokollversion: 0x%08x\n"
 
-#: utils/keytable/keytable.c:1388
+#: utils/keytable/keytable.c:1538
 #, c-format
 msgid "Deleting entry %d\n"
 msgstr "Eintrag %d wird gelöscht.\n"
 
-#: utils/keytable/keytable.c:1410
+#: utils/keytable/keytable.c:1560
 #, c-format
 msgid "Setting scancode 0x%04x with 0x%04x via "
 msgstr "Scancode 0x%04x mit 0x%04x wird gesetzt über "
 
-#: utils/keytable/keytable.c:1428
+#: utils/keytable/keytable.c:1578
 #, c-format
 msgid "Current kernel protocols: "
 msgstr "Aktuelle Kernelprotokolle: "
 
-#: utils/keytable/keytable.c:1430
+#: utils/keytable/keytable.c:1580
 #, c-format
 msgid "Enabled kernel protocols: "
 msgstr "Aktivierte Kernelprotokolle: "
 
-#: utils/keytable/keytable.c:1454
+#: utils/keytable/keytable.c:1604
 #, c-format
 msgid "%llu.%06llu: "
 msgstr "%llu.%06llu: "
 
-#: utils/keytable/keytable.c:1459
+#: utils/keytable/keytable.c:1609
 #, c-format
 msgid "lirc protocol(%s): scancode = 0x%llx"
 msgstr "Linux-Infrarotfernbedienungsprotokoll(%s): Scancode = 0x%llx"
 
-#: utils/keytable/keytable.c:1462
+#: utils/keytable/keytable.c:1612
 #, c-format
 msgid "lirc protocol(%d): scancode = 0x%llx"
 msgstr "Linux-Infrarotfernbedienungsprotokoll(%d): Scancode = 0x%llx"
 
-#: utils/keytable/keytable.c:1466
+#: utils/keytable/keytable.c:1616
 #, c-format
 msgid " repeat"
 msgstr " wiederholen"
 
-#: utils/keytable/keytable.c:1468
+#: utils/keytable/keytable.c:1618
 #, c-format
 msgid " toggle=1"
 msgstr " umschalten=1"
 
-#: utils/keytable/keytable.c:1489
+#: utils/keytable/keytable.c:1639
 msgid "Can't open lirc device"
 msgstr "Linux-Infrarotfernbedienungsgerät kann nicht geöffnet werden"
 
-#: utils/keytable/keytable.c:1499
+#: utils/keytable/keytable.c:1649
 #, c-format
 msgid "Testing events. Please, press CTRL-C to abort.\n"
 msgstr ""
 "Ereignisse werden getestet. Bitte drücken Sie STRG-C, um abzubrechen.\n"
 
-#: utils/keytable/keytable.c:1510
+#: utils/keytable/keytable.c:1660
 msgid "poll returned error"
 msgstr "Abfrage gab Fehler zurück"
 
-#: utils/keytable/keytable.c:1519
+#: utils/keytable/keytable.c:1669
 msgid "Error reading lirc scancode"
 msgstr "Fehler beim Lesen des Linux-Infrarotfernbedienungs-Scancodes"
 
-#: utils/keytable/keytable.c:1530
+#: utils/keytable/keytable.c:1680
 msgid "Error reading event"
 msgstr "Fehler beim Lesen des Ereignisses"
 
-#: utils/keytable/keytable.c:1535
+#: utils/keytable/keytable.c:1685
 #, c-format
 msgid "%ld.%06ld: event type %s(0x%02x)"
 msgstr "%ld.%06ld: Ereignistyp %s(0x%02x)"
 
-#: utils/keytable/keytable.c:1544
+#: utils/keytable/keytable.c:1694
 #, c-format
 msgid " key_%s: %s(0x%04x)\n"
 msgstr " key_%s: %s(0x%04x)\n"
 
-#: utils/keytable/keytable.c:1545
+#: utils/keytable/keytable.c:1695
 msgid "up"
 msgstr "hoch"
 
-#: utils/keytable/keytable.c:1545
+#: utils/keytable/keytable.c:1695
 msgid "down"
 msgstr "runter"
 
-#: utils/keytable/keytable.c:1550 utils/keytable/keytable.c:1556
+#: utils/keytable/keytable.c:1700 utils/keytable/keytable.c:1706
 #, c-format
 msgid ": %s (0x%04x) value=%d\n"
 msgstr ": %s (0x%04x) Wert=%d\n"
 
-#: utils/keytable/keytable.c:1563
+#: utils/keytable/keytable.c:1713
 #, c-format
 msgid ": scancode = 0x%02x\n"
 msgstr ": Scancode = 0x%02x\n"
 
-#: utils/keytable/keytable.c:1565
+#: utils/keytable/keytable.c:1715
 #, c-format
 msgid ": code = %s(0x%02x), value = %d\n"
 msgstr ": Code = %s(0x%02x), Wert = %d\n"
 
-#: utils/keytable/keytable.c:1570
+#: utils/keytable/keytable.c:1720
 #, c-format
 msgid ": value = %d\n"
 msgstr ": Wert = %d\n"
 
-#: utils/keytable/keytable.c:1579
+#: utils/keytable/keytable.c:1729
 #, c-format
 msgid ": code = 0x%02x, value = %d\n"
 msgstr ": Code = 0x%02x, Wert = %d\n"
 
-#: utils/keytable/keytable.c:1648
+#: utils/keytable/keytable.c:1798
 #, c-format
 msgid "Changed Repeat delay to %d ms and repeat period to %d ms\n"
 msgstr ""
 "Wiederholungsverzögerung auf %d ms und Wiederholungsdauer auf %d ms "
 "geändert\n"
 
-#: utils/keytable/keytable.c:1662
+#: utils/keytable/keytable.c:1812
 #, c-format
 msgid "Repeat delay = %d ms, repeat period = %d ms\n"
 msgstr "Wiederholungsverzögerung = %d ms, Wiederholungsperiode = %d ms\n"
 
-#: utils/keytable/keytable.c:1681
+#: utils/keytable/keytable.c:1831
 #, c-format
 msgid "%sName: %.*s\n"
 msgstr "%sName: %.*s\n"
 
-#: utils/keytable/keytable.c:1694
+#: utils/keytable/keytable.c:1844
 #, c-format
 msgid "%sbus: %d, vendor/product: %04x:%04x, version: 0x%04x\n"
 msgstr "%sbus: %d, Anbieter/Produkt: %04x:%04x, Version: 0x%04x\n"
 
-#: utils/keytable/keytable.c:1725
+#: utils/keytable/keytable.c:1870
 #, c-format
 msgid "%s: not a raw IR receiver\n"
 msgstr "%s: kein Empfangsgerät für unverarbeitetes Infrarot\n"
 
-#: utils/keytable/keytable.c:1773
+#: utils/keytable/keytable.c:1908
 #, c-format
 msgid "\tAttached BPF protocols: "
 msgstr "\tangefügte BPF-Protokolle: "
 
-#: utils/keytable/keytable.c:1791
+#: utils/keytable/keytable.c:1926
 #, c-format
 msgid "\n"
 msgstr "\n"
 
-#: utils/keytable/keytable.c:1794
+#: utils/keytable/keytable.c:1929
 #, c-format
 msgid "\tAttached BPF protocols: %m\n"
 msgstr "\ttangefügte BPF-Protokolle: %m\n"
 
-#: utils/keytable/keytable.c:1829
+#: utils/keytable/keytable.c:1964
 #, c-format
 msgid "BPF protocol prog_id %d\n"
 msgstr "BPF-Protokoll prog_id %d\n"
 
-#: utils/keytable/keytable.c:1833
+#: utils/keytable/keytable.c:1968
 #, c-format
 msgid "Failed to get BPF prog id %u: %m\n"
 msgstr "Holen der BPF-Programmkennung %u fehlgeschlagen: %m\n"
 
-#: utils/keytable/keytable.c:1845
+#: utils/keytable/keytable.c:1980
 #, c-format
 msgid "BPF protocols removed\n"
 msgstr "BPF-Protokolle entfernt\n"
 
-#: utils/keytable/keytable.c:1850
+#: utils/keytable/keytable.c:1985
 #, c-format
 msgid "error: ir-keytable was compiled without BPF support\n"
 msgstr ""
 "Fehler: Infrarot-Schlüsselcodetabelle wurde ohne BPF-Unterstützung "
 "kompiliert\n"
 
-#: utils/keytable/keytable.c:1869
-#, c-format
-msgid "Found %s with:\n"
+#: utils/keytable/keytable.c:2003
+#, fuzzy, c-format
+msgid "Found %s (%s) with:\n"
 msgstr "%s gefunden mit:\n"
 
-#: utils/keytable/keytable.c:1872
+#: utils/keytable/keytable.c:2007
 #, c-format
 msgid "\tName: %s\n"
 msgstr "\tName: %s\n"
 
-#: utils/keytable/keytable.c:1874
-#, c-format
-msgid "\tDriver: %s\n"
-msgstr "\tTreiber %s\n"
-
-#: utils/keytable/keytable.c:1876
-#, c-format
-msgid "\tDefault keymap: %s\n"
-msgstr "\tStandardschlüsselcodeabbildung: %s\n"
-
-#: utils/keytable/keytable.c:1878
-#, c-format
-msgid "\tInput device: %s\n"
-msgstr "\tEingabegerät: %s\n"
+#: utils/keytable/keytable.c:2009
+#, fuzzy, c-format
+msgid "\tDriver: %s, table: %s\n"
+msgstr "Treiber %s, Tabelle %s => Datei %s\n"
 
-#: utils/keytable/keytable.c:1881
+#: utils/keytable/keytable.c:2013
 #, c-format
 msgid "\tLIRC device: %s\n"
 msgstr "\tLinux-Infrarotfernbedienung : %s\n"
 
-#: utils/keytable/keytable.c:1885
+#: utils/keytable/keytable.c:2017
 #, c-format
 msgid "\tSupported kernel protocols: "
 msgstr "\tunterstützte Kernelprotokolle: "
 
-#: utils/keytable/keytable.c:1897
+#: utils/keytable/keytable.c:2029
 #, c-format
 msgid "\tExtra capabilities: <access denied>\n"
 msgstr "\tzusätzliche Fähigkeiten: <Zugriff verweigert>\n"
 
-#: utils/keytable/keytable.c:1913 utils/keytable/keytable.c:1920
+#: utils/keytable/keytable.c:2045 utils/keytable/keytable.c:2052
 #, c-format
 msgid "asprintf failed: %m\n"
 msgstr "asprintf fehlgeschlagen: %m\n"
 
-#: utils/keytable/keytable.c:1925
+#: utils/keytable/keytable.c:2057
 #, c-format
 msgid "Can't find %s bpf protocol in %s or %s\n"
 msgstr "BPF-Protokoll %s konnte weder in %s noch in %s gefunden werden.\n"
 
-#: utils/keytable/keytable.c:1987
-#, c-format
-msgid ""
-"Auto-mode can be used only with --read, --verbose and --sysdev options\n"
+#: utils/keytable/keytable.c:2101
+#, fuzzy
+msgid "Can't open device"
+msgstr "Linux-Infrarotfernbedienungsgerät kann nicht geöffnet werden"
+
+#: utils/keytable/keytable.c:2119
+#, fuzzy, c-format
+msgid "Auto-mode can be used only with --read, --debug and --sysdev options\n"
 msgstr ""
 "Automatischer Modus kann nur mit den Optionen --read, --verbose und --sysdev "
 "benutzt werden.\n"
 
+#: utils/keytable/keytable.c:2153
+#, c-format
+msgid "Table for %s, %s not found. Keep as-is\n"
+msgstr "Tabelle für %s, %s nicht gefunden. Istzustand beibehalten\n"
+
 # Treibername, Schlüsseltabellenname, Dateiname
-#: utils/keytable/keytable.c:2017
+#: utils/keytable/keytable.c:2158
 #, c-format
 msgid "Table for %s, %s is on %s file.\n"
 msgstr "Tabelle für %s, %s ist in der Datei %s.\n"
 
-#: utils/keytable/keytable.c:2026
+#: utils/keytable/keytable.c:2165
 #, c-format
 msgid "Can't load %s table\n"
 msgstr "Tabelle %s kann nicht geladen werden.\n"
 
-#: utils/keytable/keytable.c:2046
+#: utils/keytable/keytable.c:2182
 #, c-format
 msgid "Can't load %s table from %s or %s\n"
 msgstr "Tabelle %s kann nicht von %s oder %s geladen werden.\n"
 
-#: utils/keytable/keytable.c:2054
+#: utils/keytable/keytable.c:2187
 #, c-format
 msgid "Empty table %s\n"
 msgstr "leere Tabelle %s\n"
 
-#: utils/keytable/keytable.c:2063
-#, c-format
-msgid "Table for %s, %s not found. Keep as-is\n"
-msgstr "Tabelle für %s, %s nicht gefunden. Istzustand beibehalten\n"
-
-#: utils/keytable/keytable.c:2070
+#: utils/keytable/keytable.c:2194
 #, c-format
 msgid "Opening %s\n"
 msgstr "%s wird geöffnet.\n"
 
-#: utils/keytable/keytable.c:2086
+#: utils/keytable/keytable.c:2210
 #, c-format
 msgid "Old keytable cleared\n"
 msgstr "alte Schlüsseltabelle geleert\n"
 
-#: utils/keytable/keytable.c:2094
+#: utils/keytable/keytable.c:2218
 #, c-format
 msgid "Wrote %d keycode(s) to driver\n"
 msgstr "%d Schlüsselcode(s) wurden in den Treiber geschrieben.\n"
 
-#: utils/keytable/keytable.c:2106
+#: utils/keytable/keytable.c:2229
 #, c-format
 msgid "Couldn't change the IR protocols\n"
 msgstr "Die Fernbedienungsprotokolle konnten nicht geändert werden\n"
 
-#: utils/keytable/keytable.c:2108
+#: utils/keytable/keytable.c:2231
 #, c-format
 msgid "Protocols changed to "
 msgstr "Protokolle geändert in "
 
-#: utils/keytable/keytable.c:2118
+#: utils/keytable/keytable.c:2241
 #, c-format
 msgid "Error: unable to attach bpf program, lirc device name was not found\n"
 msgstr ""
-"Fehler: BPF-Programm kann nicht angefügt werden, Name der "
-"Linux-Infrarotfernbedienung wurde nicht gefunden\n"
+"Fehler: BPF-Programm kann nicht angefügt werden, Name der Linux-"
+"Infrarotfernbedienung wurde nicht gefunden\n"
 
-#: utils/keytable/keytable.c:2126
+#: utils/keytable/keytable.c:2249
 #, c-format
 msgid "Loaded BPF protocol %s\n"
 msgstr "geladenes BPF-Protokoll %s\n"
 
-#: utils/ir-ctl/ir-ctl.c:110
-msgid "DEV"
-msgstr "DEV"
-
 # LIRC = Linux Infrared Remote Control
-#: utils/ir-ctl/ir-ctl.c:110
+#: utils/ir-ctl/ir-ctl.c:103
 msgid "lirc device to use"
 msgstr "zu verwendende Linux-Infrarotfernbedienung"
 
-#: utils/ir-ctl/ir-ctl.c:111
+#: utils/ir-ctl/ir-ctl.c:104
 msgid "list lirc device features"
 msgstr "Liste der Linux-Infrarotfernbedienungsfunktionalitäten"
 
-#: utils/ir-ctl/ir-ctl.c:112 utils/ir-ctl/ir-ctl.c:113
+#: utils/ir-ctl/ir-ctl.c:105 utils/ir-ctl/ir-ctl.c:106
 msgid "FILE"
 msgstr "FILE"
 
-#: utils/ir-ctl/ir-ctl.c:112
+#: utils/ir-ctl/ir-ctl.c:105
 msgid "receive IR to stdout or file"
 msgstr "empfängt Infrarot auf Standardausgabe oder Datei"
 
-#: utils/ir-ctl/ir-ctl.c:113
+#: utils/ir-ctl/ir-ctl.c:106
 msgid "send IR pulse and space file"
 msgstr "sendet Fernbedienungsimpuls und Datei mit Leerzeichen"
 
-#: utils/ir-ctl/ir-ctl.c:114
+#: utils/ir-ctl/ir-ctl.c:107
 msgid "SCANCODE"
 msgstr "SCANCODE"
 
-#: utils/ir-ctl/ir-ctl.c:114
+#: utils/ir-ctl/ir-ctl.c:107
 msgid "send IR scancode in protocol specified"
 msgstr "sendet Fernbedienungs-Scancode im angegebenen Protokoll"
 
-#: utils/ir-ctl/ir-ctl.c:115
-msgid "KEYCODE"
-msgstr "SCHLÜSSELCODE"
-
-#: utils/ir-ctl/ir-ctl.c:115
-msgid "send IR keycode from keymap"
-msgstr "sendet Infrarotschlüsselcode aus der Schlüsselcode-Abbildung"
-
-#: utils/ir-ctl/ir-ctl.c:116
+#: utils/ir-ctl/ir-ctl.c:108
 msgid "verbose output"
 msgstr "detaillierte Ausgabe"
 
-#: utils/ir-ctl/ir-ctl.c:117
+#: utils/ir-ctl/ir-ctl.c:109
 msgid "Receiving options:"
 msgstr "Empfangsoptionen:"
 
-#: utils/ir-ctl/ir-ctl.c:118
+#: utils/ir-ctl/ir-ctl.c:110
 msgid "end receiving after first message"
 msgstr "Empfang nach erster Nachricht beenden"
 
-#: utils/ir-ctl/ir-ctl.c:119
-msgid "output in mode2 format"
-msgstr "Ausgabe im Modus-2-Format "
-
-#: utils/ir-ctl/ir-ctl.c:120
+#: utils/ir-ctl/ir-ctl.c:111
 msgid "use wideband receiver aka learning mode"
 msgstr "Breitbandempfänger alias Lernmodus verwenden"
 
-#: utils/ir-ctl/ir-ctl.c:121
-msgid "use narrowband receiver, disable learning mode"
+#: utils/ir-ctl/ir-ctl.c:112
+#, fuzzy
+msgid "use normal narrowband receiver, disable learning mode"
 msgstr "normalen Schmalbandempfänger verwenden, Lernmodus deaktivieren"
 
-#: utils/ir-ctl/ir-ctl.c:122
+#: utils/ir-ctl/ir-ctl.c:113
 msgid "RANGE"
 msgstr "RANGE"
 
-#: utils/ir-ctl/ir-ctl.c:122
+#: utils/ir-ctl/ir-ctl.c:113
 msgid "set receiver carrier range"
 msgstr "setzt Trägerbereich des Empfängers"
 
-#: utils/ir-ctl/ir-ctl.c:123
+#: utils/ir-ctl/ir-ctl.c:114
 msgid "report carrier frequency"
 msgstr "berichtet die Trägerfrequenz"
 
-#: utils/ir-ctl/ir-ctl.c:124
+#: utils/ir-ctl/ir-ctl.c:115
 msgid "disable reporting carrier frequency"
 msgstr "deaktiviert das Berichten der Trägerfrequenz"
 
-#: utils/ir-ctl/ir-ctl.c:125
+#: utils/ir-ctl/ir-ctl.c:116
 msgid "TIMEOUT"
 msgstr "TIMEOUT"
 
-#: utils/ir-ctl/ir-ctl.c:125
+#: utils/ir-ctl/ir-ctl.c:116
 msgid "set receiving timeout"
 msgstr "setzt die Empfangszeitüberschreitung"
 
-#: utils/ir-ctl/ir-ctl.c:126
+#: utils/ir-ctl/ir-ctl.c:117
 msgid "Sending options:"
 msgstr "Sendeoptionen:"
 
-#: utils/ir-ctl/ir-ctl.c:127
-msgid "use keymap to send key from"
-msgstr "Schlüsselcodeabbildung verwenden zum Schlüsselversand von"
-
-#: utils/ir-ctl/ir-ctl.c:128
+#: utils/ir-ctl/ir-ctl.c:118
 msgid "CARRIER"
 msgstr "CARRIER"
 
-#: utils/ir-ctl/ir-ctl.c:128
+#: utils/ir-ctl/ir-ctl.c:118
 msgid "set send carrier"
 msgstr "setzt den Sendeträger"
 
-#: utils/ir-ctl/ir-ctl.c:129
+#: utils/ir-ctl/ir-ctl.c:119
 msgid "DUTY"
 msgstr "DUTY"
 
-#: utils/ir-ctl/ir-ctl.c:129
-msgid "set send duty cycle"
+#: utils/ir-ctl/ir-ctl.c:119
+#, fuzzy
+msgid "set duty cycle"
 msgstr "setzt die Sendebetriebsdauer"
 
-#: utils/ir-ctl/ir-ctl.c:130
+#: utils/ir-ctl/ir-ctl.c:120
 msgid "EMITTERS"
 msgstr "EMITTERS"
 
-#: utils/ir-ctl/ir-ctl.c:130
+#: utils/ir-ctl/ir-ctl.c:120
 msgid "set send emitters"
 msgstr "setzt die Sendeimpulsgeber"
 
-#: utils/ir-ctl/ir-ctl.c:131
+#: utils/ir-ctl/ir-ctl.c:121
 msgid "GAP"
 msgstr "ABSTAND"
 
-#: utils/ir-ctl/ir-ctl.c:131
+#: utils/ir-ctl/ir-ctl.c:121
 msgid "set gap between files or scancodes"
 msgstr "setzt den Abstand zwischen Dateien oder Scancodes."
 
-#: utils/ir-ctl/ir-ctl.c:136
+#: utils/ir-ctl/ir-ctl.c:126
+#, fuzzy
 msgid ""
 "--features\n"
 "--receive [save to file]\n"
 "--send [file to send]\n"
 "--scancode [scancode to send]\n"
-"--keycode [keycode to send]\n"
 "[to set lirc option]"
 msgstr ""
 "--features\n"
@@ -872,24 +928,23 @@ msgstr ""
 "--scancode [Scancode, der gesendet werden soll]\n"
 "[zum Setzen der Linux-Infrarotfernbedienungsoption]"
 
-#: utils/ir-ctl/ir-ctl.c:144
+#: utils/ir-ctl/ir-ctl.c:133
+#, fuzzy
 msgid ""
 "\n"
 "Receive IR, send IR and list features of lirc device\n"
 "You will need permission on /dev/lirc for the program to work\n"
 "\n"
 "On the options below, the arguments are:\n"
-"  DEV      - the /dev/lirc* device to use\n"
+"  DEV\t    - the /dev/lirc* device to use\n"
 "  FILE     - a text file containing pulses and spaces\n"
 "  CARRIER  - the carrier frequency to use for sending\n"
 "  DUTY     - the duty cycle to use for sending\n"
 "  EMITTERS - comma separated list of emitters to use for sending, e.g. 1,2\n"
-"  GAP      - gap between sending in microseconds\n"
+"  GAP      - gap between pulse and files or scancodes in microseconds\n"
 "  RANGE    - set range of accepted carrier frequencies, e.g. 20000-40000\n"
 "  TIMEOUT  - set length of space before receiving stops in microseconds\n"
-"  KEYCODE  - key code in keymap\n"
 "  SCANCODE - protocol:scancode, e.g. nec:0xa814\n"
-"  KEYMAP   - a rc keymap file from which to send keys\n"
 "\n"
 "Note that most lirc setting have global state, i.e. the device will remain\n"
 "in this state until set otherwise."
@@ -921,398 +976,355 @@ msgstr ""
 "bis\n"
 "es anderweitig gesetzt wird."
 
-#: utils/ir-ctl/ir-ctl.c:219 utils/ir-ctl/ir-ctl.c:380
-#: utils/ir-ctl/ir-ctl.c:536
+#: utils/ir-ctl/ir-ctl.c:207
+#, c-format
+msgid "%s: could not open: %m\n"
+msgstr "%s: konnte nicht öffnen: %m\n"
+
+#: utils/ir-ctl/ir-ctl.c:213 utils/ir-ctl/ir-ctl.c:390
 #, c-format
 msgid "Failed to allocate memory\n"
 msgstr "Reservieren von Speicher fehlgeschlagen\n"
 
-#: utils/ir-ctl/ir-ctl.c:238
+#: utils/ir-ctl/ir-ctl.c:231
 #, c-format
 msgid "warning: %s:%d: missing argument\n"
 msgstr "Warnung: %s:%d: fehlendes Argument\n"
 
-#: utils/ir-ctl/ir-ctl.c:254
-#, c-format
+#: utils/ir-ctl/ir-ctl.c:247
+#, fuzzy, c-format
 msgid ""
-"error: %s:%d: scancode argument '%s' should be in protocol:scancode format\n"
+"error: %s:%d: scancode argument '%s' should in protocol:scancode format\n"
 msgstr ""
 "Fehler: %s:%d: Scancode-Argument »%s« sollte das Format Protokoll:Scancode\n"
 "haben.\n"
 
-#: utils/ir-ctl/ir-ctl.c:263
+#: utils/ir-ctl/ir-ctl.c:254
 #, c-format
 msgid "error: %s:%d: protocol '%s' not found\n"
 msgstr "Fehler: %s:%d: Protokoll »%s« nicht gefunden\n"
 
-#: utils/ir-ctl/ir-ctl.c:270
+#: utils/ir-ctl/ir-ctl.c:259
 #, c-format
 msgid "error: %s:%d: invalid scancode '%s'\n"
 msgstr "Fehler: %s:%d: ungültiger Scancode »%s«\n"
 
-#: utils/ir-ctl/ir-ctl.c:277
+#: utils/ir-ctl/ir-ctl.c:264
 #, c-format
 msgid "error: %s:%d: no encoder available for `%s'\n"
 msgstr "Fehler: %s:%d: kein gültiger Kodierer für »%s« verfügbar\n"
 
-#: utils/ir-ctl/ir-ctl.c:286
+#: utils/ir-ctl/ir-ctl.c:269
+#, fuzzy, c-format
+msgid "error: %s:%d: invalid scancode '%s' for protocol '%s'\n"
+msgstr "Fehler: %s:%d: ungültiger Scancode »%s«\n"
+
+#: utils/ir-ctl/ir-ctl.c:274
 #, c-format
 msgid "error: %s:%d: too much IR for one transmit\n"
 msgstr "Fehler: %s:%d: zu viel Infrarot für einen Versendevorgang\n"
 
-#: utils/ir-ctl/ir-ctl.c:294
+#: utils/ir-ctl/ir-ctl.c:280
 #, c-format
 msgid "error: %s:%d: carrier already specified\n"
 msgstr "Fehler: %s:%d: Träger bereits angegeben\n"
 
-#: utils/ir-ctl/ir-ctl.c:305
+#: utils/ir-ctl/ir-ctl.c:291
 #, c-format
 msgid "warning: %s:%d: invalid argument '%s'\n"
 msgstr "Warnung: %s:%d: ungültiges Argument »%s«\n"
 
-#: utils/ir-ctl/ir-ctl.c:311
+#: utils/ir-ctl/ir-ctl.c:297
 #, c-format
 msgid "warning: %s:%d: '%s' unexpected\n"
 msgstr "Warnung: %s:%d: »%s« nicht erwartet\n"
 
-#: utils/ir-ctl/ir-ctl.c:318
+#: utils/ir-ctl/ir-ctl.c:304
 #, c-format
 msgid "warning: %s:%d: leading space ignored\n"
 msgstr "Warnung: %s:%d: führendes Leerzeichen ignoriert\n"
 
-#: utils/ir-ctl/ir-ctl.c:336
+#: utils/ir-ctl/ir-ctl.c:322
 #, c-format
 msgid "warning: %s:%d: carrier already specified\n"
 msgstr "Warnung: %s:%d: Träger bereits angegeben\n"
 
-#: utils/ir-ctl/ir-ctl.c:341
+#: utils/ir-ctl/ir-ctl.c:327
 #, c-format
 msgid "warning: %s:%d: unknown keyword '%s' ignored\n"
 msgstr "Warnung: %s:%d: unbekanntes Schlüsselwort »%s« ignoriert\n"
 
-#: utils/ir-ctl/ir-ctl.c:346 utils/ir-ctl/ir-ctl.c:437
+#: utils/ir-ctl/ir-ctl.c:332
 #, c-format
 msgid "warning: %s:%d: IR cannot exceed %u edges\n"
 msgstr "Warnung: %s:%d: Infrarot kann %u Ränder nicht übersteigen\n"
 
-#: utils/ir-ctl/ir-ctl.c:354 utils/ir-ctl/ir-ctl.c:448
+#: utils/ir-ctl/ir-ctl.c:340
 #, c-format
 msgid "%s: no pulses or spaces found\n"
 msgstr "%s: keine Impulse oder Leerzeichen gefunden\n"
 
-#: utils/ir-ctl/ir-ctl.c:360 utils/ir-ctl/ir-ctl.c:454
+#: utils/ir-ctl/ir-ctl.c:346
 #, c-format
 msgid "warning: %s:%d: trailing space ignored\n"
 msgstr "Warnung: %s:%d: führenden Leerzeichen ignoriert\n"
 
-#: utils/ir-ctl/ir-ctl.c:402
-#, c-format
-msgid "%s:%d: error: expected integer, got `%s'\n"
-msgstr "%s:%d: Fehler: Ganzzahl erwartet, »%s« erhalten\n"
-
-#: utils/ir-ctl/ir-ctl.c:411
-#, c-format
-msgid "%s:%d: error: pulse found where space expected `%s'\n"
-msgstr "%s:%d: Fehler: Impuls gefunden, wo Pause erwartet wurde »%s«\n"
-
-#: utils/ir-ctl/ir-ctl.c:419
-#, c-format
-msgid "%s:%d: error: space found where pulse expected `%s'\n"
-msgstr "%s:%d: Fehler: Pause gefunden, wo Impuls erwartet wurde »%s«\n"
-
-#: utils/ir-ctl/ir-ctl.c:428
-#, c-format
-msgid "%s:%d: error: value `%s' out of range\n"
-msgstr "%s:%d: Fehler: Wert »%s« außerhalb des Bereichs\n"
-
-#: utils/ir-ctl/ir-ctl.c:470
-#, c-format
-msgid "%s: could not open: %m\n"
-msgstr "%s: konnte nicht öffnen: %m\n"
-
-#: utils/ir-ctl/ir-ctl.c:500
-#, c-format
-msgid "%s: file is empty\n"
-msgstr "%s: Datei ist leer\n"
-
-#: utils/ir-ctl/ir-ctl.c:514
+#: utils/ir-ctl/ir-ctl.c:365
 #, c-format
 msgid "error: scancode '%s' must be in protocol:scancode format\n"
 msgstr "Fehler: Scancode »%s« muss das Format Protokoll:Scancode haben\n"
 
-#: utils/ir-ctl/ir-ctl.c:521
+#: utils/ir-ctl/ir-ctl.c:372
 #, c-format
 msgid "error: protocol '%s' not found\n"
 msgstr "Fehler: Protokoll »%s« nicht gefunden\n"
 
-#: utils/ir-ctl/ir-ctl.c:528
+#: utils/ir-ctl/ir-ctl.c:379
 #, c-format
 msgid "error: invalid scancode '%s'\n"
 msgstr "Fehler: ungültiger Scancode »%s«\n"
 
-#: utils/ir-ctl/ir-ctl.c:557
+#: utils/ir-ctl/ir-ctl.c:384
+#, fuzzy, c-format
+msgid "error: invalid scancode '%s' for protocol '%s'\n"
+msgstr "Fehler: ungültiger Scancode »%s«\n"
+
+#: utils/ir-ctl/ir-ctl.c:409
 msgid "features can not be combined with receive or send option"
 msgstr ""
 "Funktionalitäten können nicht mit Empfangs- oder Sendeoptionen kombiniert "
 "werden."
 
-#: utils/ir-ctl/ir-ctl.c:563
+#: utils/ir-ctl/ir-ctl.c:415
 msgid "receive can not be combined with features or send option"
 msgstr ""
 "Empfang kann nicht mit Funktionalitäten oder Sendeoptionen kombiniert werden."
 
-#: utils/ir-ctl/ir-ctl.c:568
+#: utils/ir-ctl/ir-ctl.c:420
 msgid "receive filename already set"
 msgstr "Empfangsdateiname bereits gesetzt"
 
-#: utils/ir-ctl/ir-ctl.c:584 utils/ir-ctl/ir-ctl.c:590
+#: utils/ir-ctl/ir-ctl.c:433 utils/ir-ctl/ir-ctl.c:439
 msgid "cannot enable and disable carrier reports"
 msgstr "Trägerberichte können nicht aktiviert oder deaktiviert werden."
 
-#: utils/ir-ctl/ir-ctl.c:596 utils/ir-ctl/ir-ctl.c:602
+#: utils/ir-ctl/ir-ctl.c:445 utils/ir-ctl/ir-ctl.c:451
 msgid "cannot use narrowband and wideband receiver at once"
 msgstr ""
 "Schmal- und Breitbandempfänger können nicht gleichzeitig benutzt werden."
 
-#: utils/ir-ctl/ir-ctl.c:612 utils/ir-ctl/ir-ctl.c:615
+#: utils/ir-ctl/ir-ctl.c:461 utils/ir-ctl/ir-ctl.c:464
 #, c-format
 msgid "cannot parse carrier range `%s'"
 msgstr "Trägerbereich »%s« kann nicht ausgewertet werden."
 
-#: utils/ir-ctl/ir-ctl.c:624
+#: utils/ir-ctl/ir-ctl.c:473
 #, c-format
 msgid "cannot parse timeout `%s'"
 msgstr "Zeitüberschreitung »%s« kann nicht ausgewertet werden."
 
-#: utils/ir-ctl/ir-ctl.c:634
+#: utils/ir-ctl/ir-ctl.c:483
 #, c-format
 msgid "cannot parse carrier `%s'"
 msgstr "Träger »%s« kann nicht ausgewertet werden."
 
-#: utils/ir-ctl/ir-ctl.c:639
+#: utils/ir-ctl/ir-ctl.c:488
 #, c-format
 msgid "cannot parse emitters `%s'"
 msgstr "Versender »%s« kann nicht ausgewertet werden."
 
-#: utils/ir-ctl/ir-ctl.c:644
+#: utils/ir-ctl/ir-ctl.c:493
 #, c-format
 msgid "cannot parse gap `%s'"
 msgstr "Abstand »%s« kann nicht ausgewertet werden."
 
-#: utils/ir-ctl/ir-ctl.c:649
+#: utils/ir-ctl/ir-ctl.c:498
 #, c-format
 msgid "invalid duty cycle `%s'"
 msgstr "ungültige Einschaltdauer »%s«"
 
-#: utils/ir-ctl/ir-ctl.c:653 utils/ir-ctl/ir-ctl.c:669
+#: utils/ir-ctl/ir-ctl.c:502 utils/ir-ctl/ir-ctl.c:518
 msgid "send can not be combined with receive or features option"
 msgstr ""
-"Senden kann nicht mit Empfangs- oder Funktionalitätenoption kombiniert werden."
-
-#: utils/ir-ctl/ir-ctl.c:686
-msgid "key send can not be combined with receive or features option"
-msgstr ""
-"Senden des Schlüssels kann nicht mit Empfangs- oder Funktionalitätenoption "
-"kombiniert werden."
-
-#: utils/ir-ctl/ir-ctl.c:790
-#, c-format
-msgid "error: protocol '%s' not supported\n"
-msgstr "Fehler: Protokoll »%s« nicht unterstützt\n"
-
-#: utils/ir-ctl/ir-ctl.c:797
-#, c-format
-msgid "error: keycode `%s' not found in keymap\n"
-msgstr "Fehler: Schlüsselcode »%s« nicht in Schlüsselcodeabbildung gefunden\n"
-
-#: utils/ir-ctl/ir-ctl.c:802
-#, c-format
-msgid "warning: keycode `%s' has %d definitions in keymaps, using first\n"
-msgstr ""
-"Warnung: Schlüsselcode »%s« hat %d Definitionen in Schlüsselcodeabbildungen, "
-"die erste wird benutzt.\n"
+"Senden kann nicht mit Empfangs- oder Funktionalitätenoption kombiniert "
+"werden."
 
-#: utils/ir-ctl/ir-ctl.c:820
+#: utils/ir-ctl/ir-ctl.c:561
 #, c-format
 msgid "%s: cannot open: %m\n"
 msgstr "%s: Öffnen nicht möglich: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:827
+#: utils/ir-ctl/ir-ctl.c:568
 #, c-format
 msgid "%s: cannot stat: %m\n"
 msgstr "%s: Stat nicht möglich: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:833
+#: utils/ir-ctl/ir-ctl.c:574
 #, c-format
 msgid "%s: not character device\n"
 msgstr "%s: kein zeichenorientiertes Gerät\n"
 
-#: utils/ir-ctl/ir-ctl.c:840
+#: utils/ir-ctl/ir-ctl.c:581
 #, c-format
 msgid "%s: failed to get lirc features: %m\n"
 msgstr ""
 "%s: Holen von Linux-Infrarotfernbedienungsfunktionalitäten fehlgeschlagen: "
 "%m\n"
 
-#: utils/ir-ctl/ir-ctl.c:853
+#: utils/ir-ctl/ir-ctl.c:594
 #, c-format
 msgid "warning: %s: failed to set carrier: %m\n"
 msgstr "Warnung: %s: Setzen des Trägers fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:855
+#: utils/ir-ctl/ir-ctl.c:596
 #, c-format
 msgid "warning: %s: set send carrier returned %d, should return 0\n"
 msgstr ""
 "Warnung: %s: Setzen des Sendeträgers gab %d zurück, sollte jedoch 0 "
 "zurückgeben.\n"
 
-#: utils/ir-ctl/ir-ctl.c:857
+#: utils/ir-ctl/ir-ctl.c:598
 #, c-format
 msgid "warning: %s: does not support setting send carrier\n"
 msgstr "Warnung: %s: Einstellung des Sendeträgers wird nicht unterstützt.\n"
 
-#: utils/ir-ctl/ir-ctl.c:869
+#: utils/ir-ctl/ir-ctl.c:610
 #, c-format
 msgid "%s: failed to set receiving timeout\n"
 msgstr "%s: Setzen der Empfangszeitüberschreitung fehlgeschlagen\n"
 
-#: utils/ir-ctl/ir-ctl.c:871
+#: utils/ir-ctl/ir-ctl.c:612
 #, c-format
 msgid "%s: device does not support setting timeout\n"
 msgstr "%s: Gerät unterstützt die Einstellung der Zeitüberschreitung nicht.\n"
 
-#: utils/ir-ctl/ir-ctl.c:879
+#: utils/ir-ctl/ir-ctl.c:620
 #, c-format
 msgid "%s: failed to set wideband receiver %s\n"
 msgstr "%s: Setzen des Breitbandempfängers %s fehlgeschlagen\n"
 
-#: utils/ir-ctl/ir-ctl.c:879 utils/ir-ctl/ir-ctl.c:889
+#: utils/ir-ctl/ir-ctl.c:620 utils/ir-ctl/ir-ctl.c:630
 msgid "on"
 msgstr "an"
 
-#: utils/ir-ctl/ir-ctl.c:879 utils/ir-ctl/ir-ctl.c:889
+#: utils/ir-ctl/ir-ctl.c:620 utils/ir-ctl/ir-ctl.c:630
 msgid "off"
 msgstr "aus"
 
-#: utils/ir-ctl/ir-ctl.c:881
+#: utils/ir-ctl/ir-ctl.c:622
 #, c-format
 msgid "%s: device does not have wideband receiver\n"
 msgstr "%s: Gerät hat keinen Breitbandempfänger.\n"
 
 # %s = Gerät, %s = on/off
-#: utils/ir-ctl/ir-ctl.c:889
+#: utils/ir-ctl/ir-ctl.c:630
 #, c-format
 msgid "%s: failed to set carrier reports %s\n"
 msgstr "%s: Setzen von Trägerberichten auf %s fehlgeschlagen\n"
 
-#: utils/ir-ctl/ir-ctl.c:891
+#: utils/ir-ctl/ir-ctl.c:632
 #, c-format
 msgid "%s: device cannot measure carrier\n"
 msgstr "%s: Gerät kann Träger nicht messen.\n"
 
 # %s = Gerät, %s = on/off
-#: utils/ir-ctl/ir-ctl.c:898
+#: utils/ir-ctl/ir-ctl.c:639
 #, c-format
 msgid "%s: failed to enable timeout reports: %m\n"
 msgstr "%s: Aktivieren von Zeitüberschreitungsberichten fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:905
+#: utils/ir-ctl/ir-ctl.c:646
 #, c-format
 msgid "%s: failed to set low carrier range: %m\n"
 msgstr "%s: Setzen des niedrigen Trägerbereichs fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:908
+#: utils/ir-ctl/ir-ctl.c:649
 #, c-format
 msgid "%s: failed to set high carrier range: %m\n"
 msgstr "%s: Setzen des höheren Trägerbereichs fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:910
+#: utils/ir-ctl/ir-ctl.c:651
 #, c-format
 msgid "%s: device does not support setting receiver carrier range\n"
 msgstr ""
 "%s: Gerät unterstützt die Einstellung des Empfangsträgerbereichs nicht.\n"
 
-#: utils/ir-ctl/ir-ctl.c:920
+#: utils/ir-ctl/ir-ctl.c:661
 #, c-format
 msgid "warning: %s: failed to set duty cycle: %m\n"
 msgstr "Warnung: %s: Setzen der Einschaltdauer fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:922
+#: utils/ir-ctl/ir-ctl.c:663
 #, c-format
 msgid "warning: %s: does not support setting send duty cycle\n"
 msgstr "Warnung: %s: Einstellung der Einschaltdauer wird nicht unterstützt.\n"
 
-#: utils/ir-ctl/ir-ctl.c:929
+#: utils/ir-ctl/ir-ctl.c:670
 #, c-format
 msgid "warning: %s: failed to set send transmitters: only %d available\n"
 msgstr "Warnung: %s: Setzen des Senders fehlgeschlagen: nur %d verfügbar\n"
 
-#: utils/ir-ctl/ir-ctl.c:931
+#: utils/ir-ctl/ir-ctl.c:672
 #, c-format
 msgid "warning: %s: failed to set send transmitters: %m\n"
 msgstr "Warnung: %s: Setzen des Senders fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:933
+#: utils/ir-ctl/ir-ctl.c:674
 #, c-format
 msgid "warning: %s: does not support setting send transmitters\n"
 msgstr "Warnung: %s: Einstellung des Senders wird nicht unterstützt.\n"
 
-#: utils/ir-ctl/ir-ctl.c:949
+#: utils/ir-ctl/ir-ctl.c:690
 #, c-format
 msgid "warning: %s: device returned resolution of 0\n"
 msgstr "Warnung: %s: Gerät lieferte Auflösung von 0 zurück\n"
 
-#: utils/ir-ctl/ir-ctl.c:951
+#: utils/ir-ctl/ir-ctl.c:692
 #, c-format
 msgid "warning: %s: unexpected error while retrieving resolution: %m\n"
 msgstr "Warnung: %s: unerwarteter Fehler beim Abfragen der Auflösung: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:954
+#: utils/ir-ctl/ir-ctl.c:695
 #, c-format
 msgid "Receive features %s:\n"
 msgstr "Empfangsfunktionalitäten %s:\n"
 
-#: utils/ir-ctl/ir-ctl.c:956
+#: utils/ir-ctl/ir-ctl.c:697
 #, c-format
 msgid " - Device can receive scancodes\n"
 msgstr " - Gerät kann Scancodes empfangen.\n"
 
-#: utils/ir-ctl/ir-ctl.c:958
+#: utils/ir-ctl/ir-ctl.c:699
 #, c-format
 msgid " - Device can receive raw IR\n"
 msgstr " - Gerät kann unverarbeitetes Infrarot empfangen.\n"
 
-#: utils/ir-ctl/ir-ctl.c:960
+#: utils/ir-ctl/ir-ctl.c:701
 #, c-format
 msgid " - Can report decoded scancodes and protocol\n"
 msgstr " - kann dekodierte Scancodes und Protokolle berichten\n"
 
-#: utils/ir-ctl/ir-ctl.c:962
+#: utils/ir-ctl/ir-ctl.c:703
 #, c-format
 msgid " - Resolution %u microseconds\n"
 msgstr " - Auflösung %u Mikrosekunden\n"
 
-#: utils/ir-ctl/ir-ctl.c:964
+#: utils/ir-ctl/ir-ctl.c:705
 #, c-format
 msgid " - Set receive carrier\n"
 msgstr " - Empfangsträger setzen\n"
 
-#: utils/ir-ctl/ir-ctl.c:966
+#: utils/ir-ctl/ir-ctl.c:707
 #, c-format
 msgid " - Use wideband receiver\n"
 msgstr " - Breitbandempfänger verwenden\n"
 
-#: utils/ir-ctl/ir-ctl.c:968
+#: utils/ir-ctl/ir-ctl.c:709
 #, c-format
 msgid " - Can measure carrier\n"
 msgstr " - Träger kann gemessen werden.\n"
 
-#: utils/ir-ctl/ir-ctl.c:975
-#, c-format
-msgid " - Receiving timeout %u microseconds\n"
-msgstr " - Empfangszeitüberschreitung %u Mikrosekunden\n"
-
-#: utils/ir-ctl/ir-ctl.c:978
+#: utils/ir-ctl/ir-ctl.c:714
 #, c-format
 msgid ""
 "warning: %s: device supports setting receiving timeout but "
@@ -1321,7 +1333,7 @@ msgstr ""
 "Warnung: %s: Gerät unterstützt die Einstellung zum Empfangen der "
 "Zeitüberschreitungen, LIRC_GET_MIN_TIMEOUT gibt jedoch folgendes zurück: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:981
+#: utils/ir-ctl/ir-ctl.c:717
 #, c-format
 msgid ""
 "warning: %s: device supports setting receiving timeout but min timeout is 0\n"
@@ -1329,7 +1341,7 @@ msgstr ""
 "Warnung: %s: Gerät unterstützt die Einstellung zum Empfangen der "
 "Zeitüberschreitungen, die minimale Zeitüberschreitung ist jedoch 0\n"
 
-#: utils/ir-ctl/ir-ctl.c:984
+#: utils/ir-ctl/ir-ctl.c:720
 #, c-format
 msgid ""
 "warning: %s: device supports setting receiving timeout but "
@@ -1338,7 +1350,7 @@ msgstr ""
 "Warnung: %s: Gerät unterstützt die Einstellung zum Empfangen der "
 "Zeitüberschreitungen, LIRC_GET_MAX_TIMEOUT gibt jedoch folgendes zurück: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:987
+#: utils/ir-ctl/ir-ctl.c:723
 #, c-format
 msgid ""
 "warning: %s: device supports setting receiving timeout but max timeout is 0\n"
@@ -1346,14 +1358,14 @@ msgstr ""
 "Warnung: %s: Gerät unterstützt die Einstellung zum Empfangen der "
 "Zeitüberschreitungen, die maximale Zeitüberschreitung ist jedoch 0\n"
 
-#: utils/ir-ctl/ir-ctl.c:991
-#, c-format
-msgid " - Can set receiving timeout min %u microseconds, max %u microseconds\n"
+#: utils/ir-ctl/ir-ctl.c:727
+#, fuzzy, c-format
+msgid " - Can set receiving timeout min:%u microseconds max:%u microseconds\n"
 msgstr ""
 " - Empfangszeitüberschreitung kann auf minimal %u Millisekunden und maximal "
 "%u Mikrosekunden gesetzt werden\n"
 
-#: utils/ir-ctl/ir-ctl.c:994
+#: utils/ir-ctl/ir-ctl.c:730
 #, c-format
 msgid ""
 " - Device can receive using device dependent LIRCCODE mode (not supported)\n"
@@ -1361,37 +1373,37 @@ msgstr ""
 " - Gerät kann mittels eines geräteabhängigen LIRCCODE-Modus empfangen (nicht "
 "unterstützt)\n"
 
-#: utils/ir-ctl/ir-ctl.c:996
+#: utils/ir-ctl/ir-ctl.c:732
 #, c-format
 msgid " - Device cannot receive\n"
 msgstr " - Gerät nicht empfangsbereit\n"
 
-#: utils/ir-ctl/ir-ctl.c:999
+#: utils/ir-ctl/ir-ctl.c:735
 #, c-format
 msgid "Send features %s:\n"
 msgstr "Sendefunktionalitäten %s:\n"
 
-#: utils/ir-ctl/ir-ctl.c:1001
+#: utils/ir-ctl/ir-ctl.c:737
 #, c-format
 msgid " - Device can send raw IR\n"
 msgstr " - Gerät kann unverarbeitetes Infrarot senden\n"
 
-#: utils/ir-ctl/ir-ctl.c:1003
+#: utils/ir-ctl/ir-ctl.c:739
 #, c-format
 msgid " - IR scancode encoder\n"
 msgstr " - Infrarot-Scancode-Kodierer\n"
 
-#: utils/ir-ctl/ir-ctl.c:1005
+#: utils/ir-ctl/ir-ctl.c:741
 #, c-format
 msgid " - Set carrier\n"
 msgstr " - Träger setzen\n"
 
-#: utils/ir-ctl/ir-ctl.c:1007
+#: utils/ir-ctl/ir-ctl.c:743
 #, c-format
 msgid " - Set duty cycle\n"
 msgstr " - Einschaltdauer setzen\n"
 
-#: utils/ir-ctl/ir-ctl.c:1012
+#: utils/ir-ctl/ir-ctl.c:748
 #, c-format
 msgid ""
 "warning: %s: device supports setting transmitter mask but returns 0 as "
@@ -1400,19 +1412,19 @@ msgstr ""
 "Warnung: %s: Gerät unterstützt die Einstellung der Sendermaske, gibt jedoch "
 "als Anzahl der Sender 0 zurück\n"
 
-#: utils/ir-ctl/ir-ctl.c:1014
+#: utils/ir-ctl/ir-ctl.c:750
 #, c-format
 msgid "warning: %s: device supports setting transmitter mask but returns: %m\n"
 msgstr ""
 "Warnung: %s: Gerät unterstützt die Einstellung der Sendermaske, gibt jedoch "
 "folgendes zurück: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:1016
+#: utils/ir-ctl/ir-ctl.c:752
 #, c-format
 msgid " - Set transmitter (%d available)\n"
 msgstr " - Sender setzen (%d verfügbar)\n"
 
-#: utils/ir-ctl/ir-ctl.c:1019
+#: utils/ir-ctl/ir-ctl.c:755
 #, c-format
 msgid ""
 " - Device can send using device dependent LIRCCODE mode (not supported)\n"
@@ -1420,72 +1432,67 @@ msgstr ""
 " - Gerät kann mittels eines geräteabhängigen LIRCCODE-Modus senden (nicht "
 "unterstützt)\n"
 
-#: utils/ir-ctl/ir-ctl.c:1021
+#: utils/ir-ctl/ir-ctl.c:757
 #, c-format
 msgid " - Device cannot send\n"
 msgstr " - Gerät kann nicht senden.\n"
 
-#: utils/ir-ctl/ir-ctl.c:1032
+#: utils/ir-ctl/ir-ctl.c:768
 #, c-format
 msgid "%s: device cannot send\n"
 msgstr "%s: Gerät kann nicht senden.\n"
 
-#: utils/ir-ctl/ir-ctl.c:1058
+#: utils/ir-ctl/ir-ctl.c:790
 #, c-format
 msgid "%s: cannot set send mode\n"
 msgstr "%s: Sendemodus kann nicht gesetzt werden\n"
 
-#: utils/ir-ctl/ir-ctl.c:1066
+#: utils/ir-ctl/ir-ctl.c:798
 #, c-format
 msgid "%s: no encoder available for `%s'\n"
 msgstr "%s: kein Kodierer für »%s« verfügbar\n"
 
-#: utils/ir-ctl/ir-ctl.c:1075
+#: utils/ir-ctl/ir-ctl.c:807
 #, c-format
 msgid "warning: %s: carrier specified but overwritten on command line\n"
 msgstr ""
 "Warnung: %s: Träger angegeben, jedoch auf der Befehlszeile überschrieben\n"
 
-#: utils/ir-ctl/ir-ctl.c:1089
+#: utils/ir-ctl/ir-ctl.c:820
 #, c-format
 msgid "%s: failed to send: %m\n"
 msgstr "%s: Senden fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:1094
+#: utils/ir-ctl/ir-ctl.c:825
 #, c-format
 msgid "warning: %s: sent %zd out %zd edges\n"
 msgstr "Warnung: %s: %zd von %zd Rändern gesendet\n"
 
-#: utils/ir-ctl/ir-ctl.c:1114
+#: utils/ir-ctl/ir-ctl.c:845
 #, c-format
 msgid "%s: device cannot receive raw ir\n"
 msgstr "%s Gerät kann kein unbearbeitetes Infrarot empfangen.\n"
 
-#: utils/ir-ctl/ir-ctl.c:1120
+#: utils/ir-ctl/ir-ctl.c:851
 #, c-format
 msgid "%s: failed to set receive mode: %m\n"
 msgstr "%s: Setzen des Empfangsmodus fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:1127
+#: utils/ir-ctl/ir-ctl.c:858
 #, c-format
 msgid "%s: failed to open for writing: %m\n"
 msgstr "%s: Öffnen zum Schreiben fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:1140
+#: utils/ir-ctl/ir-ctl.c:870
 #, c-format
 msgid "%s: failed read: %m\n"
 msgstr "%s: Lesen fehlgeschlagen: %m\n"
 
-#: utils/ir-ctl/ir-ctl.c:1145
+#: utils/ir-ctl/ir-ctl.c:875
 #, c-format
 msgid "%s: read returned %zd bytes\n"
 msgstr "%s: Lesen gab %zd Byte zurück\n"
 
-#: utils/ir-ctl/ir-ctl.c:1255
-#, c-format
-msgid "error: no keymap specified\n"
-msgstr "Fehler: keine Schlüsselcodeabbildung angegeben\n"
-
 # DVB = Digital Video Broadcasting („Digitales Fernsehen“)
 #: utils/dvb/dvb-fe-tool.c:48
 msgid ""
@@ -1592,43 +1599,43 @@ msgid "dvb_fe_get_stats failed"
 msgstr "»dvb_fe_get_stats« fehlgeschlagen"
 
 #: utils/dvb/dvb-fe-tool.c:199 utils/dvb/dvbv5-scan.c:146
-#: utils/dvb/dvbv5-zap.c:445
+#: utils/dvb/dvbv5-zap.c:444
 msgid "Quality"
 msgstr "Qualität"
 
 #: utils/dvb/dvb-fe-tool.c:202 utils/dvb/dvbv5-scan.c:149
-#: utils/dvb/dvbv5-zap.c:448
+#: utils/dvb/dvbv5-zap.c:447
 msgid "Signal"
 msgstr "Signal"
 
 # Carrier/Noise (Signal-/Rausch-Verhältnis)
 #: utils/dvb/dvb-fe-tool.c:205 utils/dvb/dvbv5-scan.c:152
-#: utils/dvb/dvbv5-zap.c:451
+#: utils/dvb/dvbv5-zap.c:450
 msgid "C/N"
 msgstr "S/R"
 
 #: utils/dvb/dvb-fe-tool.c:208 utils/dvb/dvbv5-scan.c:155
-#: utils/dvb/dvbv5-zap.c:454
+#: utils/dvb/dvbv5-zap.c:453
 msgid "UCB"
 msgstr "UCB (Anzahl unkorrigierter Fehler)"
 
 # BER = Bit-Fehlerrate
 #: utils/dvb/dvb-fe-tool.c:211 utils/dvb/dvbv5-scan.c:158
-#: utils/dvb/dvbv5-zap.c:457
+#: utils/dvb/dvbv5-zap.c:456
 msgid "postBER"
 msgstr "postBER"
 
 #: utils/dvb/dvb-fe-tool.c:214 utils/dvb/dvbv5-scan.c:161
-#: utils/dvb/dvbv5-zap.c:460
+#: utils/dvb/dvbv5-zap.c:459
 msgid "preBER"
 msgstr "preBER"
 
 #: utils/dvb/dvb-fe-tool.c:217 utils/dvb/dvbv5-scan.c:164
-#: utils/dvb/dvbv5-zap.c:463
+#: utils/dvb/dvbv5-zap.c:462
 msgid "PER"
 msgstr "PER"
 
-#: utils/dvb/dvb-fe-tool.c:346 utils/dvb/dvbv5-zap.c:1100
+#: utils/dvb/dvb-fe-tool.c:346 utils/dvb/dvbv5-zap.c:1098
 #, c-format
 msgid "Connecting to %s:%d\n"
 msgstr "Verbinden mit %s:%d\n"
@@ -1845,12 +1852,12 @@ msgstr "Scan-Frequenz #%d %d"
 msgid "<initial file>"
 msgstr "<Anfangsdatei>"
 
-#: utils/dvb/dvbv5-scan.c:496 utils/dvb/dvbv5-zap.c:1086
+#: utils/dvb/dvbv5-scan.c:496 utils/dvb/dvbv5-zap.c:1084
 #, c-format
 msgid "Please select one of the LNBf's below:\n"
 msgstr "Bitte wählen Sie einen der nachfolgenden LNBfs aus:\n"
 
-#: utils/dvb/dvbv5-scan.c:500 utils/dvb/dvbv5-zap.c:1090
+#: utils/dvb/dvbv5-scan.c:500 utils/dvb/dvbv5-zap.c:1088
 #, c-format
 msgid "Using LNBf "
 msgstr "Verwendet wird LNBf "
@@ -1860,17 +1867,17 @@ msgstr "Verwendet wird LNBf "
 msgid "ERROR: Please specify a valid format\n"
 msgstr "FEHLER: Bitte geben Sie ein gültiges Format an.\n"
 
-#: utils/dvb/dvbv5-scan.c:529 utils/dvb/dvbv5-zap.c:1112
+#: utils/dvb/dvbv5-scan.c:529 utils/dvb/dvbv5-zap.c:1110
 #, c-format
 msgid "Couldn't find demux device node\n"
 msgstr "Es wurde kein Demultiplexer-Geräteknoten gefunden.\n"
 
-#: utils/dvb/dvbv5-scan.c:536 utils/dvb/dvbv5-zap.c:1128
+#: utils/dvb/dvbv5-scan.c:536 utils/dvb/dvbv5-zap.c:1126
 #, c-format
 msgid "using demux '%s'\n"
 msgstr "Demultiplexer »%s« wird verwendet.\n"
 
-#: utils/dvb/dvbv5-scan.c:556 utils/dvb/dvbv5-zap.c:1160
+#: utils/dvb/dvbv5-scan.c:556 utils/dvb/dvbv5-zap.c:1158
 #, c-format
 msgid "Failed to set the country code:%s\n"
 msgstr "Setzen des Länderkennzeichens fehlgeschlagen:%s\n"
@@ -1956,8 +1963,8 @@ msgstr "packets_per_sec"
 
 #: utils/dvb/dvbv5-zap.c:128
 msgid ""
-"sets DVB low traffic threshold. PIDs with less than this amount of "
-"packets per second will be ignored. Default: 1 packet per second"
+"sets DVB low traffic threshold. PIDs with less than this amount of packets "
+"per second will be ignored. Default: 1 packet per second"
 msgstr ""
 "setzt die untere Schwelle für DVB-Datenaufkommen. PIDs mit einem kleineren "
 "Betrag von Paketen pro Sekunde werden ignoriert. Voreinstellung: 1 Paket pro "
@@ -1989,170 +1996,245 @@ msgstr "Dienst hat PID-Typ %02x: "
 msgid "tuning to %i Hz\n"
 msgstr "Einstellen auf %i Hz\n"
 
-#: utils/dvb/dvbv5-zap.c:566
+#: utils/dvb/dvbv5-zap.c:565
 #, c-format
 msgid "buffer overrun at %lld\n"
 msgstr "Pufferüberlauf bei %lld\n"
 
-#: utils/dvb/dvbv5-zap.c:568
+#: utils/dvb/dvbv5-zap.c:567
 #, c-format
 msgid "buffer overrun after %lld.%02ld seconds\n"
 msgstr "Pufferüberlauf nach %lld.%02ld Sekunden\n"
 
-#: utils/dvb/dvbv5-zap.c:593 utils/dvb/dvbv5-zap.c:835
+#: utils/dvb/dvbv5-zap.c:592 utils/dvb/dvbv5-zap.c:834
 msgid "Write failed"
 msgstr "Schreiben fehlgeschlagen"
 
-#: utils/dvb/dvbv5-zap.c:601
+#: utils/dvb/dvbv5-zap.c:600
 #, c-format
 msgid "received %lld bytes (%lld Kbytes/sec)\n"
 msgstr "%lld Byte empfangen (%lld Kilobyte/Sek)\n"
 
-#: utils/dvb/dvbv5-zap.c:604
+#: utils/dvb/dvbv5-zap.c:603
 #, c-format
 msgid "received %lld bytes\n"
 msgstr "%lld Byte empfangen\n"
 
-#: utils/dvb/dvbv5-zap.c:777 utils/dvb/dvbv5-zap.c:1253
+#: utils/dvb/dvbv5-zap.c:776 utils/dvb/dvbv5-zap.c:1251
 #, c-format
 msgid "dvb_dev_set_bufsize: buffer set to %d\n"
 msgstr "dvb_dev_set_bufsize: Puffer auf %d gesetzt\n"
 
-#: utils/dvb/dvbv5-zap.c:787
+#: utils/dvb/dvbv5-zap.c:786
 #, c-format
 msgid "  dvb_set_pesfilter to 0x2000\n"
 msgstr "  dvb_set_pesfilter auf 0x2000\n"
 
-#: utils/dvb/dvbv5-zap.c:796
+#: utils/dvb/dvbv5-zap.c:795
 #, c-format
 msgid "Can't get timespec\n"
 msgstr "Timespec kann nicht geholt werden\n"
 
-#: utils/dvb/dvbv5-zap.c:802
+#: utils/dvb/dvbv5-zap.c:801
 #, c-format
 msgid "%.2fs: Starting capture\n"
 msgstr "%.2fs: Aufnahme wird gestartet\n"
 
-#: utils/dvb/dvbv5-zap.c:814
+#: utils/dvb/dvbv5-zap.c:813
 #, c-format
 msgid "%.2fs: buffer overrun\n"
 msgstr "%.2fs: Pufferüberlauf\n"
 
-#: utils/dvb/dvbv5-zap.c:817
+#: utils/dvb/dvbv5-zap.c:816
 #, c-format
 msgid "%.2fs: read() returned error %zd\n"
 msgstr "%.2fs: read() gab den Fehler %zd zurück\n"
 
-#: utils/dvb/dvbv5-zap.c:840
+#: utils/dvb/dvbv5-zap.c:839
 #, c-format
 msgid "%.2fs: only read %zd bytes\n"
 msgstr "%.2fs: nur %zd Byte gelesen\n"
 
-#: utils/dvb/dvbv5-zap.c:847
+#: utils/dvb/dvbv5-zap.c:846
 #, c-format
 msgid "%.2fs: invalid sync byte. Discarding %zd bytes\n"
 msgstr "%.2fs: ungültiges Synchronisations-Byte. %zd Byte werden verworfen.\n"
 
-#: utils/dvb/dvbv5-zap.c:870
+#: utils/dvb/dvbv5-zap.c:869
 #, c-format
 msgid "%.2fs: invalid pid: 0x%04x\n"
 msgstr "%.2fs: ungültige PID: 0x%04x\n"
 
-#: utils/dvb/dvbv5-zap.c:897
+#: utils/dvb/dvbv5-zap.c:896
 #, c-format
 msgid "%.2fs: pid %d has adaption layer, but size is too small!\n"
 msgstr "%.2fs: PID %d hat Anpassungsebene, aber die Größe ist zu gering!\n"
 
-#: utils/dvb/dvbv5-zap.c:908
+#: utils/dvb/dvbv5-zap.c:907
 #, c-format
 msgid "%.2fs: pid %d, expecting %d received %d\n"
 msgstr "%.2fs: PID %d, erwartet %d empfangen %d\n"
 
-#: utils/dvb/dvbv5-zap.c:953
+#: utils/dvb/dvbv5-zap.c:952
 #, c-format
 msgid " PID           FREQ         SPEED       TOTAL\n"
 msgstr " PID           FREQ         TEMPO       GESAMT\n"
 
-#: utils/dvb/dvbv5-zap.c:978
+#: utils/dvb/dvbv5-zap.c:977
 #, c-format
 msgid "OTHER"
 msgstr "ANDERE"
 
-#: utils/dvb/dvbv5-zap.c:1004
+#: utils/dvb/dvbv5-zap.c:1003
 #, c-format
 msgid "%.2fs: Stopping capture\n"
 msgstr "%.2fs: Aufnahme wird gestoppt\n"
 
-#: utils/dvb/dvbv5-zap.c:1042
+#: utils/dvb/dvbv5-zap.c:1039
 msgid "DVB zap utility"
 msgstr "DVB-Umschaltwerkzeug"
 
-#: utils/dvb/dvbv5-zap.c:1043
+#: utils/dvb/dvbv5-zap.c:1040
 msgid "<channel name> [or <frequency> if in monitor mode]"
 msgstr "<Kanalname> [oder <Frequenz>, falls im Überwachungsmodus]"
 
-#: utils/dvb/dvbv5-zap.c:1120
+#: utils/dvb/dvbv5-zap.c:1118
 #, c-format
 msgid "Couldn't find dvr device node\n"
 msgstr "Es wurde kein DVR-Geräteknoten gefunden\n"
 
-#: utils/dvb/dvbv5-zap.c:1141
+#: utils/dvb/dvbv5-zap.c:1139
 #, c-format
 msgid "reading channels from file '%s'\n"
 msgstr "Kanäle werden aus Datei »%s« gelesen.\n"
 
-#: utils/dvb/dvbv5-zap.c:1182 utils/dvb/dvbv5-zap.c:1302
-#: utils/dvb/dvbv5-zap.c:1354
+#: utils/dvb/dvbv5-zap.c:1180 utils/dvb/dvbv5-zap.c:1300
+#: utils/dvb/dvbv5-zap.c:1352
 #, c-format
 msgid "open of '%s' failed"
 msgstr "Öffnen von »%s« fehlgeschlagen"
 
-#: utils/dvb/dvbv5-zap.c:1193
+#: utils/dvb/dvbv5-zap.c:1191
 #, c-format
 msgid "Service id 0x%04x was not specified at the file\n"
 msgstr "Dienstkennung 0x%04x wurde nicht in der Datei angegeben.\n"
 
-#: utils/dvb/dvbv5-zap.c:1206
+#: utils/dvb/dvbv5-zap.c:1204
 #, c-format
 msgid "couldn't find pmt-pid for sid %04x\n"
 msgstr "PMT-PID für SID %04x konnte nicht gefunden werden.\n"
 
-#: utils/dvb/dvbv5-zap.c:1240
+#: utils/dvb/dvbv5-zap.c:1238
 #, c-format
 msgid "pass all PID's to TS\n"
 msgstr "reicht alle PIDs an TS weiter.\n"
 
-#: utils/dvb/dvbv5-zap.c:1242
+#: utils/dvb/dvbv5-zap.c:1240
 #, c-format
 msgid "video pid %d\n"
 msgstr "Video-PID %d\n"
 
-#: utils/dvb/dvbv5-zap.c:1251 utils/dvb/dvbv5-zap.c:1277
+#: utils/dvb/dvbv5-zap.c:1249 utils/dvb/dvbv5-zap.c:1275
 #, c-format
 msgid "  dvb_set_pesfilter %d\n"
 msgstr "  dvb_set_pesfilter %d\n"
 
-#: utils/dvb/dvbv5-zap.c:1270
+#: utils/dvb/dvbv5-zap.c:1268
 #, c-format
 msgid "audio pid %d\n"
 msgstr "Audio-PID %d\n"
 
-#: utils/dvb/dvbv5-zap.c:1288
+#: utils/dvb/dvbv5-zap.c:1286
 #, c-format
 msgid "frontend doesn't lock\n"
 msgstr "Oberfläche sperrt nicht\n"
 
-#: utils/dvb/dvbv5-zap.c:1319
+#: utils/dvb/dvbv5-zap.c:1317
 #, c-format
 msgid "Record to file '%s' started\n"
 msgstr "Aufzeichnung in Datei »%s« gestartet\n"
 
-#: utils/dvb/dvbv5-zap.c:1338
+#: utils/dvb/dvbv5-zap.c:1336
 #, c-format
 msgid "DVR pipe interface '%s' will be opened\n"
 msgstr "DVR-Pipe-Schnittstelle »%s« wird geöffnet.\n"
 
-#: utils/dvb/dvbv5-zap.c:1362
+#: utils/dvb/dvbv5-zap.c:1360
 #, c-format
 msgid "DVR interface '%s' can now be opened\n"
 msgstr "DVR-Schnittstelle »%s« kann nun geöffnet werden.\n"
+
+#~ msgid "Clears the scancode to keycode mappings"
+#~ msgstr "leert die die Abbildungen der Scancodes auf Schlüsselcodes."
+
+#~ msgid "rc device to control, defaults to rc0 if not specified"
+#~ msgstr ""
+#~ "zu steuernde Fernbedienung, Voreinstellung ist rc@, falls nicht angegeben"
+
+#~ msgid "KEYMAP"
+#~ msgstr "KEYMAP"
+
+#~ msgid "Test if keymap is valid"
+#~ msgstr "Testet, ob die Schlüsselcodeabbildung gültig ist."
+
+#~ msgid "%s: keycode `%s' not recognised, no mapping\n"
+#~ msgstr "%s: Schlüsselcode »%s« nicht erkannt, keine Abbildung\n"
+
+#~ msgid "\tDriver: %s\n"
+#~ msgstr "\tTreiber %s\n"
+
+#~ msgid "\tDefault keymap: %s\n"
+#~ msgstr "\tStandardschlüsselcodeabbildung: %s\n"
+
+#~ msgid "\tInput device: %s\n"
+#~ msgstr "\tEingabegerät: %s\n"
+
+#~ msgid "KEYCODE"
+#~ msgstr "SCHLÜSSELCODE"
+
+#~ msgid "send IR keycode from keymap"
+#~ msgstr "sendet Infrarotschlüsselcode aus der Schlüsselcode-Abbildung"
+
+#~ msgid "output in mode2 format"
+#~ msgstr "Ausgabe im Modus-2-Format "
+
+#~ msgid "use keymap to send key from"
+#~ msgstr "Schlüsselcodeabbildung verwenden zum Schlüsselversand von"
+
+#~ msgid "%s:%d: error: expected integer, got `%s'\n"
+#~ msgstr "%s:%d: Fehler: Ganzzahl erwartet, »%s« erhalten\n"
+
+#~ msgid "%s:%d: error: pulse found where space expected `%s'\n"
+#~ msgstr "%s:%d: Fehler: Impuls gefunden, wo Pause erwartet wurde »%s«\n"
+
+#~ msgid "%s:%d: error: space found where pulse expected `%s'\n"
+#~ msgstr "%s:%d: Fehler: Pause gefunden, wo Impuls erwartet wurde »%s«\n"
+
+#~ msgid "%s:%d: error: value `%s' out of range\n"
+#~ msgstr "%s:%d: Fehler: Wert »%s« außerhalb des Bereichs\n"
+
+#~ msgid "%s: file is empty\n"
+#~ msgstr "%s: Datei ist leer\n"
+
+#~ msgid "key send can not be combined with receive or features option"
+#~ msgstr ""
+#~ "Senden des Schlüssels kann nicht mit Empfangs- oder "
+#~ "Funktionalitätenoption kombiniert werden."
+
+#~ msgid "error: protocol '%s' not supported\n"
+#~ msgstr "Fehler: Protokoll »%s« nicht unterstützt\n"
+
+#~ msgid "error: keycode `%s' not found in keymap\n"
+#~ msgstr ""
+#~ "Fehler: Schlüsselcode »%s« nicht in Schlüsselcodeabbildung gefunden\n"
+
+#~ msgid "warning: keycode `%s' has %d definitions in keymaps, using first\n"
+#~ msgstr ""
+#~ "Warnung: Schlüsselcode »%s« hat %d Definitionen in "
+#~ "Schlüsselcodeabbildungen, die erste wird benutzt.\n"
+
+#~ msgid " - Receiving timeout %u microseconds\n"
+#~ msgstr " - Empfangszeitüberschreitung %u Mikrosekunden\n"
+
+#~ msgid "error: no keymap specified\n"
+#~ msgstr "Fehler: keine Schlüsselcodeabbildung angegeben\n"
