--- wmtv-0.6.5.orig/Makefile +++ wmtv-0.6.5/Makefile @@ -1,26 +1,35 @@ # # Makefile for wmtv # -INCDIR = -I/usr/X11R6/include -LIBDIR = -L/usr/X11R6/lib -LIBS = -lXpm -lXext -lX11 -lXxf86dga -lXxf86vm -OBJS = src/wmtv.o \ - src/wmgeneral/wmgeneral.o \ + +CPPFLAGS= -DGLOBALCONFFILE="\"$(ETCDIR)/wmtvrc\"" +CFLAGS = -O2 -Wall +LDFLAGS = -L/usr/X11R6/lib +LIBS = -lXpm -lXext -lX11 -lXxf86dga -lXxf86vm +OBJS = src/wmtv.o src/wmgeneral/wmgeneral.o +PROG = wmtv + +INSTALL = install +INSTALL_FILE = $(INSTALL) -p -o root -g root -m 644 +INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 755 + +DESTDIR = +BINDIR = /usr/X11R6/bin +ETCDIR = /etc .c.o: - cc -c -O2 -Wall -D$(shell echo `uname -s`) $< -o $*.o $(INCDIR) + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ -all: wmtv +all: $(PROG) -wmtv: $(OBJS) - cc -o wmtv $^ $(LIBDIR) $(LIBS) +$(PROG): $(OBJS) + $(CC) $(LDFLAGS) $^ $(LIBS) -o $@ -install:: all - install -s -m 4755 -o root wmtv /usr/X11R6/bin - install -m 0644 -o root -g root wmtvrc.sample /etc/wmtvrc +install: $(PROG) + $(INSTALL_PROGRAM) $(PROG) $(DESTDIR)$(BINDIR)/$(PROG) + $(INSTALL_FILE) wmtvrc.sample $(DESTDIR)$(ETCDIR)/wmtvrc clean: - for i in $(OBJS) ; do \ - rm -f $$i; \ - done - rm -f wmtv + rm -f $(OBJS) $(PROG) + +.PHONY: all install clean --- wmtv-0.6.5.orig/wmtvrc.sample +++ wmtv-0.6.5/wmtvrc.sample @@ -1,13 +1,16 @@ source = Television -freqnorm = pal-australia -maxpreset = 7 -mode = pal +freqnorm = ntsc-bcast +maxpreset = 10 +mode = ntsc [channel] -2 -7 -9 -10 -32 -S21 -SE11 +2 (0) +6 (0) +10 (0) +12 (0) +17 (0) +22 (0) +35 (0) +44 (3) +46 (-4) +57 (-2) --- wmtv-0.6.5.orig/debian/rules +++ wmtv-0.6.5/debian/rules @@ -0,0 +1,59 @@ +#!/usr/bin/make -f +#-*- makefile -*- +# Made with the aid of dh_make, by Craig Small +# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. +# Some lines taken from debmake, by Christoph Lameter. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This is the debhelper compatability version to use. +export DH_COMPAT=3 + +CFLAGS = -Wall -g +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) +CFLAGS += -O0 +else +CFLAGS += -O2 +endif + +build: build-stamp +build-stamp: + dh_testdir + $(MAKE) CFLAGS="$(CFLAGS)" + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + -$(MAKE) clean + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + $(MAKE) install BINDIR=/usr/bin DESTDIR=`pwd`/debian/wmtv + +binary-indep: build install +# We have nothing to do. + +binary-arch: build install + dh_testdir + dh_testroot + dh_installdocs + dh_installman debian/wmtv.1 + dh_installchangelogs CHANGES + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary --- wmtv-0.6.5.orig/debian/dirs +++ wmtv-0.6.5/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +etc --- wmtv-0.6.5.orig/debian/README.Debian +++ wmtv-0.6.5/debian/README.Debian @@ -0,0 +1,22 @@ +The upstream author of wmtv seams to have disappeared and not to take +care of wmtv any more. The web page where wmtv used to be has even +disappeared. So, wmtv is now fully maintained within Debian. + +After fixing a few bugs, features are now being added to wmtv. + +It is now possible to pass some parameters to the external application +(declared by the -e or --exe option) through % codes: + * %% is replaced by a single raw % + * %n is replaced by the name of the current channel + * %# is replaced by the number of the current channel + * %f is replaced by the current frequency +Other % codes my lead to unspecified behaviors. + +Hence, if you use both wmtv and xawtv, and if the channels are +declared with the same names in your .wmtvrc and .xawtv, you may want +to run + wmtv -e 'xawtv "%n"' +Then, when you double-click in wmtv's window, xawtv is run on the +same channel! + + -- Nicolas Boullis , Mon, 18 Feb 2001 1:26:32 +0100 --- wmtv-0.6.5.orig/debian/wmtv.1 +++ wmtv-0.6.5/debian/wmtv.1 @@ -0,0 +1,244 @@ +.TH WMTV 1 "August 2005" + +.SH "NAME" +wmtv \- dockable video4linux TV player for WindowMaker. + +.SH "SYNOPSIS" +.B wmtv +.I "[--exe program]" + +.SH "DESCRIPTION" +.BR wmtv +is a dockable video4linux TV player. It supports channel presets, +PAL/Secam/NTSC, fine tuning, full screen display, ... + +.SH "OPTIONS" +.TP +.B \-c, \-\-device +Specifies the video4linux device to use. + +.TP +.B \-d, \-\-display +Specifies the X server to contact. + +.TP +.B \-e, \-\-exe +Launch an external TV player when the screen is double clicked. It is +possible to pass some parameters to this external application with % +codes. + +.SH "USAGE" +This sections describes how to use the application in docked +state. See below for fullscreen mode usage. + +Button map: +.br + [ < ] [ > ] [ 0 ] +.br + <1> <2> <3> + +There are 3 modes of operation on this applications. You can cycle +through the 3 modes by clicking on the right most button <3>. + +The 3 modes are described below: + +.in +5 +.B "On mode" +.br +Clicking on the rightmost button <3> for the first time (after the +start of WMTV) will turn the TV on. While in this mode, the left <1> +and right <2> buttons change to preset channels which has been defined +in your config file. Use the left button to move down one channel and +the right button to move up one channel. + +.B "Tune mode" +.br +Clicking again on button <3> after On mode will change WMTV into tune +mode. Left-clicking on the left <1> or right <2> button performs a +channel scan. Scanning stops when there is a strong signal +strength. Right-clicking on the left <1> or right <2> button fine +tunes the current channel. After tuning, clicking on button <3> saves +the fine tuning to your config file and brings you back into "On +mode". + +.B "Off mode" +.br +Holding down button <3> for about 3 seconds from any of the two +modes described above turns the TV off. +.in -5 + +Right-clicking the TV screen mutes/unmutes the audio. + +Double left-clicking the TV screen launches the application specified +with --exe. If --exe was not specified, then the built-in full-screen +mode is used instead. Double middle-clicking will always invoke the +built-in full screen mode. + + +.SH "FULL SCREEN MODE" +To exit full screen mode, click. + +.B Keyboard functions +.br +.in +2 +Up - Change to next preset channel. +.br +Down - Change to previous preset channel. +.br +Right - Increase volume. (If supported by the v4l device.) +.br +Left - Decrease volume. (If supported.) +.br +Escape - Leave full screen mode. +.br +m - mute/unmute. +.br +.in -2 + +.SH "EXTERNAL APPLICATION" +It is possible to pass some parameters to the external application +through % codes: +.br +.in +2 +.B %% +is replaced by a single %. +.br +.B %n +is replaced by the name of the current channel. +.br +.B %# +is replaced by the number of the current channel. +.br +.B %f +is replaced by the current frequency in MHz. +.br +.in -2 +The behavior of other % codes is undefined and subject to change. + +Example: wmtv -e 'xawtv "%n"' + +.SH "CONFIGURATION FILE" +This section describes the format of WMTV's configuration file. It is +located in your home directory under ".wmtvrc". + +Excerpt from a sample config file: +.in +5 +.br +/*----------------------- +.sp +source = Television +.br +freqnorm = pal-australia +.br +maxpreset = 7 +.br +mode = pal +.br +fullscreen = 640x480 +.br + +.sp +[channel] +.br +2 NAME +.br +7 FOO +.br +9 BAR +.br +10 FOOBAR +.br +32 (50) +.br +SE11 +.br +S21 LAST CHANNEL +.br +-------------------------*/ +.br +.in -5 + +.B Settings +.br +source = { Television | CompositeX | S-Video } (X is an integer) +.br +.sp +freqnorm = { ntsc-bcast | ntsc-cable | ntsc-cable-hrc | ntsc-bcast-jp +| ntsc-cable-jp | pal-europe | pal-europe-east | pal-italy | +pal-newzealand | pal-australia | pal-ireland | secam-france } + +maxpreset = integer (maximum channel presets) + +mode = { pal | ntsc | secam } + +fullscreen = widthxheight + +[channel] +.br +Choose a total of from the below channels. +.br +Separate the channels with a new line as in the sample config file above. +.br +{ +.in +2 +.br +E2 | E3 | E4 | +.br +S01 | S02 | S03 | +.br +R1 | R2 | R3 | R4 | R5 | +.br +SE1 | SE2 | SE3 | SE4 | SE5 | SE6 | SE7 | SE8 | SE9 | SE10 | +.br +E5 | E6 | E7 | E8 | E9 | E10 | E11 | E12 | +.br +R6 | R7 | R8 | R9 | R10 | R11 | R12 | +.br +SE11 | SE12 | SE13 | SE14 | SE15 | SE16 | SE17 | SE18 | SE19 | SE20 | +.br +S21 | S22 | S23 | S24 | S25 | S26 | S27 | S28 | S29 | S30 | S31 | S32 +| S33 | S34 | S35 | S36 | S37 | S38 | S39 | S40 | S41 | +.br +T7 | T8 | T9 | T10 | T11 | T12 | T13 | T14 | +.br +K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K10 | +.br +KB | KC | KD | KE | KF | KG | KH | KI | KJ | KK | KL | KM | KN | KO | +KP | KQ | +.br +H01 | H02 | H03 | H04 | H05 | H06 | H07 | H08 | H09 | H10 | H11 | H12 +| H13 | H14 | H15 | H16 | H17 | H18 | H19 | +.br +1 - 125 +.br +.in -2 +} +.br +Finetune parameters could be added in brackets, spaced after the +channel. +.br +A name for the channel can also be specified, tabbed after the +finetune. +.br +.sp +for example: + 32 (50) # channel 32 plus 50 + or + SE11 LAST CHANNEL # channel SE11 called "LAST CHANNEL" + +.SH "FILES" +.TP +.I /etc/wmtvrc +System wide config file. +.TP +.I ~/.wmtvrc +Users config file. + +.SH AUTHOR +This manual page was first written by Remi Lefebvre , +and then modified by Nicolas Boullis , +for the Debian GNU/Linux system (but may be used by others). + +This manual page was written for the Debian GNU/Linux distribution +because the original program does not have a manual page. It is widely +based on the README provided with the program. --- wmtv-0.6.5.orig/debian/docs +++ wmtv-0.6.5/debian/docs @@ -0,0 +1 @@ +README --- wmtv-0.6.5.orig/debian/changelog +++ wmtv-0.6.5/debian/changelog @@ -0,0 +1,147 @@ +wmtv (0.6.5-16.1) unstable; urgency=low + + * Non-maintainer upload. + * debian/control: Build-Depends: libv4l-dev and replace + linux/videodev.h by libv4l1-videodev.h. Closes: #621952. + + -- Bart Martens Fri, 30 Sep 2011 23:01:13 +0200 + +wmtv (0.6.5-16) unstable; urgency=low + + * Move the wmtv binary from /usr/X11R6/bin to /usr/bin. + * Move the wmtv manpage from section 1x to section 1. + * Build-depend on the needed libx*-dev packages rather than xlibs-dev (that + misses both libxxf86dga-dev and libxxf86vm-dev). + * Bump Standards-Version: to 3.6.2 (no change needed). + * Add a new -c option to choose the video4linux device to use. + + -- Nicolas Boullis Wed, 3 Aug 2005 19:44:25 +0200 + +wmtv (0.6.5-15) unstable; urgency=low + + * Fixed long description thanks to Colin Watson. + * Fixed manpages thanks to Anthony DeRobertis. + * Fixed versionned build-dependency on debhelper thanks to lintian. + * Removed superfluous "(s)" to "Upstream Author(s)" to please lintian. + * Updated Makefile and debian/rules to support noopt in + $DEB_BUILD_OPTIONS. + * Bump Standards-Version: to 3.6.1. + + -- Nicolas Boullis Thu, 28 Aug 2003 22:53:19 +0200 + +wmtv (0.6.5-14) unstable; urgency=low + + * Removed duplicate entry in wmtv.conffiles. + * Changed maintainer's e-mail. + * wmtv now suggests xawtv. + + -- Nicolas Boullis Fri, 26 Jul 2002 21:29:21 +0200 + +wmtv (0.6.5-13) unstable; urgency=medium + + * Added missing #include in wmtv.c. + * Automatically restarts the TV when the external application finishes. + * In fullscreen mode, the left and right arrow keys now behave as + specified in the README file and in the manpage. (Closes: #133301) + * Added the ability to pass some parameters to the external + application. + * Enhanced the manpage with descriptions of the new (or previously + undocumented) features. + + -- Nicolas Boullis Wed, 20 Feb 2002 02:21:14 +0100 + +wmtv (0.6.5-12) unstable; urgency=low + + * Catch SIGCHLD signals to remove zombies. (Closes: #129435) + + -- Nicolas Boullis Tue, 29 Jan 2002 01:06:24 +0100 + +wmtv (0.6.5-11) unstable; urgency=medium + + * Corrected a bug introduced in version 0.6.5-9, causing the program to + segfault while reverting from fullscreen back to normal mode. + (Closes: #128409) + + -- Nicolas Boullis Wed, 9 Jan 2002 19:48:47 +0100 + +wmtv (0.6.5-10) unstable; urgency=low + + * Corrected capitalization in description. (Closes: #125501) + * Trying to change channel while the TV is off does nothing, and does + not segfault anymore. + * Cleaned Makefile. + * Corrected strange behavior when the mouse was moved out of a pressed + button. + * Upgraded policy version to 3.5.6. + + -- Nicolas Boullis Sat, 5 Jan 2002 02:40:18 +0100 + +wmtv (0.6.5-9) unstable; urgency=medium + + * The program does not need any more to be setuid root. + (Closes: #120832) + + -- Nicolas Boullis Thu, 29 Nov 2001 00:56:56 +0100 + +wmtv (0.6.5-8) unstable; urgency=high + + * New maintainer. + * Added support for french channels. (Closes: #119767) + * Can now start even if the user has no configuration file. + (Closes: #120024) + * Does not shorten the user's configuration file any more. + (Closes: #120035) + * Drop privileges to access files, and then regain privileges. + (Closes: #120825) + * A new user's configuration file is automatically created when needed. + * Cleaned up a few possible buffer overflows. + + -- Nicolas Boullis Sun, 25 Nov 2001 19:40:37 +0100 + +wmtv (0.6.5-7) unstable; urgency=high + + * Drop privileges before calling external program. Thanks to + Nicolas Boullis. (Closes: #118778) + + -- Remi Lefebvre Mon, 12 Nov 2001 17:44:25 -0500 + +wmtv (0.6.5-6) unstable; urgency=low + + * Added build depend on xlibs-dev (Closes: #106438). + + -- Remi Lefebvre Tue, 24 Jul 2001 18:40:11 -0400 + +wmtv (0.6.5-5) unstable; urgency=low + + * Patch to fix bytes per line calculation (Closes: #93439). + * Config file handling patch from Yann Vernier (Closes: #105325). + + -- Remi Lefebvre Sat, 21 Jul 2001 09:28:54 -0400 + +wmtv (0.6.5-4) unstable; urgency=low + + * Replaced dh_suidregister call. (Closes: #84515) + + -- Remi Lefebvre Sun, 4 Feb 2001 11:17:56 -0500 + +wmtv (0.6.5-3) unstable; urgency=low + + * Depend on libxpm4 rather than xpm4g (Closes: #67988). + + -- Remi Lefebvre Sun, 30 Jul 2000 16:22:09 -0400 + +wmtv (0.6.5-2) unstable; urgency=low + + * Complies with new policy. + + -- Remi Lefebvre Wed, 29 Sep 1999 15:54:10 -0400 + +wmtv (0.6.5-1) unstable; urgency=low + + * Initial Release. + + -- Remi Lefebvre Sun, 8 Aug 1999 14:52:41 -0400 + +Local variables: +mode: debian-changelog +End: --- wmtv-0.6.5.orig/debian/copyright +++ wmtv-0.6.5/debian/copyright @@ -0,0 +1,15 @@ +This package was debianized by Remi Lefebvre on +Sun, 8 Aug 1999 14:52:41 -0400. + +It was downloaded from http://www.student.uwa.edu.au/~wliang + +Upstream Author: Wee Liang + +Copyright: +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +You can find a copy of the GPLv2 in /usr/share/common-licenses/GPL +on Debian GNU/Linux systems. --- wmtv-0.6.5.orig/debian/control +++ wmtv-0.6.5/debian/control @@ -0,0 +1,15 @@ +Source: wmtv +Section: x11 +Priority: extra +Maintainer: Nicolas Boullis +Build-Depends: debhelper (>=3.0.0), libxt-dev, libxpm-dev, libxext-dev, libx11-dev, libxxf86dga-dev, libxxf86vm-dev, libv4l-dev +Standards-Version: 3.6.2 + +Package: wmtv +Architecture: any +Depends: ${shlibs:Depends}, v4l-conf +Suggests: xawtv +Description: Dockable video4linux TV player for WindowMaker + A miniature size dockable TV application. It currently supports + channel presets, PAL/SECAM/NTSC, fine tuning, scanning of TV + stations, use of external TV applications, and more. --- wmtv-0.6.5.orig/src/wmtv.c +++ wmtv-0.6.5/src/wmtv.c @@ -29,11 +29,12 @@ #include #include #include +#include #include #include #include #include -#include +#include #include #include @@ -75,13 +76,16 @@ #define SETUNE 2 #define SETSPD 3 -#define MAXCHAN 100 -#define OPTIONS "hvd:g:e:b:" +#define MAXCHAN 99 +#define OPTIONS "hvd:g:e:b:c:" #define TELEVISION 0 #define COMPOSITE 1 #define SVIDEO 2 +#ifndef GLOBALCONFFILE +#define GLOBALCONFFILE "/etc/wmtvrc" +#endif /* Global Variables */ int tfd; @@ -111,11 +115,12 @@ int tml; int fswidth = 0; int fsheight = 0; +pid_t child_pid = -1; +int restart = FALSE; unsigned long ccrfreq; unsigned long rfreq; unsigned long st; -unsigned long offset; char *norm = NULL; char *source; @@ -123,11 +128,14 @@ char *fullscreen = NULL; int freqnorm = -1; char *cname[MAXCHAN]; -char *wcname[MAXCHAN]; -int ftune[MAXCHAN]; +char *comment[MAXCHAN]; +long ftune[MAXCHAN]; char *progname; char *dev = "/dev/video"; +char *sysConfFile = GLOBALCONFFILE; +char *usrConfFile; + int wmtv_mask_width = 64; int wmtv_mask_height = 64; char wmtv_mask_bits[64*64]; @@ -196,22 +204,91 @@ void ParseRCFile(const char *, rckeys *); void ParseRCFile2(const char *); -void WriteRCFile(const char *); +void WriteRCFile(const char *, rckeys *); void InitConfig(void); void InitPalette(void); void Usage(void); void Version(void); +void +sigchld_handler(int i) +{ + pid_t pid; + pid = waitpid((pid_t)-1, NULL, WNOHANG); + while (pid>(pid_t)0) { + if (pid == child_pid) { + child_pid = -1; + restart = TRUE; + } + pid = waitpid((pid_t)-1, NULL, WNOHANG); + } +} + +void +init_signal() +{ + struct sigaction sa; + + sa.sa_handler = &sigchld_handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sigaction(SIGCHLD, &sa, NULL); +} + +char * +expand_format(char *format, char *letters, char **expansions) +{ + char *string; + unsigned int string_pos = 0; + unsigned int size; + size = strlen(format)+1; + string = (char *)malloc(size*sizeof(char)); + for (; *format != '\0'; format++) { + if (*format == '%') { + format++; + if (*format != '%') { + unsigned int i; + for (i = 0; letters[i] != '\0'; i++) { + if (letters[i] == *format) + break; + } + if (letters[i] != '\0') { + unsigned int expansion_size; + expansion_size = strlen(expansions[i]); + while (string_pos+expansion_size+1 > size) { + size *= 2; + string = realloc(string, size*sizeof(char)); + } + memcpy(string+string_pos, expansions[i], expansion_size); + string_pos += expansion_size; + continue; + } + else { + format--; + } + } + } + while (string_pos+1+1 > size) { + size *= 2; + string = realloc(string, size*sizeof(char)); + } + string[string_pos] = *format; + string_pos++; + } + string[string_pos] = '\0'; + return string; +} /* main function */ int main(int argc, char *argv[]) { - int i, c, opind; - // pid_t pid; - char cfile[128]; + int c, opind; + int pressed_button = -1; + /* pid_t pid; */ static struct option long_options[] = { + {"device", 1, 0, 'c'}, {"display", 1, 0, 'd'}, {"geometry", 1, 0, 'g'}, {"bpp", 1, 0, 'b'}, @@ -223,8 +300,18 @@ progname = strdup(argv[0]); - strncpy(cfile, (char *)getenv("HOME"), sizeof(char)*128); - strcat(cfile, "/.wmtvrc"); + { + char *home = getenv("HOME"); + + if (home == NULL) { + fprintf(stderr, "wmtv: $HOME should be set.\n"); + exit(1); + } + + usrConfFile = (char *)malloc(sizeof(char)*(strlen(home)+8+1)); + strcpy(usrConfFile, home); + strcat(usrConfFile, "/.wmtvrc"); + } while (1) { opind = 0; @@ -250,7 +337,10 @@ break; case 'e': exe = strdup(optarg); - strcat(exe, " &"); + /* strcat(exe, " &"); */ + break; + case 'c': + dev = strdup(optarg); break; case 'b': fprintf(stderr, "wmtv: option not implemented yet\n"); @@ -278,9 +368,21 @@ AddMouseRegion (SCANRB, 35, 48, 47, 59); /* Right Preset/Scan Button */ AddMouseRegion (FULLSB, 5, 5, 59, 44); /* Toggle FullScreen */ + init_signal(); + /* wmtv main loop */ while (1) { + if (restart) { + TVOn(); + if (ntfb_status == SETOFF) { + ntfb_status = SETON; + RedrawWindow(); + XFlush(display); + } + restart = FALSE; + continue; + } while (XPending(display)) { XNextEvent(display, &Event); @@ -303,8 +405,8 @@ RetScreen(); } else { - i = CheckMouseRegion (Event.xbutton.x, Event.xbutton.y); - switch (i) { + pressed_button = CheckMouseRegion (Event.xbutton.x, Event.xbutton.y); + switch (pressed_button) { case NTFB: ButtonDown(NTFB); t_lc = Event.xbutton.time; @@ -326,7 +428,7 @@ break; } } - else + else if (ntfb_status == SETON) ChanDown(); break; case SCANRB: @@ -345,7 +447,7 @@ break; } } - else + else if (ntfb_status == SETON) ChanUp(); break; case FULLSB: @@ -372,8 +474,7 @@ } break; case ButtonRelease: - i = CheckMouseRegion (Event.xbutton.x, Event.xbutton.y); - switch (i) { + switch (pressed_button) { case NTFB: ButtonUp(NTFB); if (but_pressed) { @@ -384,8 +485,10 @@ } if (ntfb_status == SETOFF) { + if (child_pid == -1) { ntfb_status = SETON; TVOn(); + } } else if (ntfb_status == SETON) { if (!btime) { @@ -402,9 +505,9 @@ } else if (ntfb_status == SETUNE) { if (!btime) { - offset = (rfreq - ccrfreq); - // fprintf(stderr, "wmtv: finetune offset = %ld\n", offset); - WriteRCFile(cfile); + ftune[cchannel] = (rfreq - ccrfreq); + /* fprintf(stderr, "wmtv: finetune offset = %ld\n", ftune[cchannel]); */ + WriteRCFile(usrConfFile, wmtv_keys); ntfb_status = SETON; DrawPresetChan(cchannel); } @@ -438,13 +541,43 @@ { if ((ntfb_status == SETON) || (ntfb_status == SETUNE)) { if (exe) { + pid_t pid; + char *command; + char *letters = "#nf"; + char *(expansions[3]); ntfb_status = SETOFF; TVOff(); - system(exe); - /* + expansions[0] = malloc(3*sizeof(char)); + snprintf(expansions[0], 3, "%d", cchannel+1); + expansions[1] = comment[cchannel]; + expansions[2] = malloc(15*sizeof(char)); + snprintf(expansions[2], 15, "%.3f", (double)rfreq/(double)st); + command = expand_format(exe, letters, expansions); + /* system(exe); */ + child_pid = fork(); + if (child_pid == (pid_t) 0) { + char *argv[4]; + argv[0] = "sh"; + argv[1] = "-c"; + argv[2] = command; + argv[3] = NULL; + execv("/bin/sh", argv); + exit(-1); + } + free(expansions[0]); + free(expansions[2]); + free(command); + pid = waitpid(child_pid, NULL, WNOHANG); + if (pid != 0) { + child_pid = -1; + restart = TRUE; + } + /* printf("Returned pid:\n"); */ + +#if 0 pid = fork(); - // child + /* child */ if (pid == (pid_t) 0) { execlp("xawtv", "xawtv", "&", (char *) 0); } @@ -453,11 +586,11 @@ perror("fork"); } - // parent + /* parent */ else { if (waitpid(pid, NULL, 0) < 0) { perror("waitpid"); - */ +#endif } else { DoFullScreen(); @@ -545,12 +678,10 @@ ChanDown(); break; case XK_Right: - if (isource == TELEVISION) - FineTuneUp(); + VolumeUp(); break; case XK_Left: - if (isource == TELEVISION) - FineTuneDown(); + VolumeDown(); break; case XK_m: if (!mute) { @@ -633,7 +764,6 @@ int rx, ry; char *p; - XWindowAttributes winattr; if (!XGetWindowAttributes (display, iconwin, &winattr)) { @@ -647,6 +777,18 @@ fprintf(stderr, "wmtv: error translating coordinates\n"); } + /* This part was taken from xawtv's source code */ + switch (system("v4l-conf -q")) { + case -1: /* can't run */ + fprintf(stderr,"could'nt start v4l-conf\n"); + break; + case 0: /* ok */ + break; + default: /* non-zero return */ + fprintf(stderr,"v4l-conf had some trouble, " + "trying to continue anyway\n"); + } + /* End of "stolen" part */ InitConfig(); GetFrameBuffer(); InitPalette(); @@ -707,7 +849,7 @@ if (vaud.flags & VIDEO_AUDIO_MUTE) { vaud.flags &= ~VIDEO_AUDIO_MUTE; /* Unmute */ - vaud.volume = (0xFFFF/2)+1; + vaud.volume = 0xFFFF; } if (isource == TELEVISION) { @@ -778,9 +920,11 @@ VolumeUp(void) { if(vchn.flags & VIDEO_VC_AUDIO) { - if (vaud.volume <= 0xFFFF) { + if ((vaud.flags & VIDEO_AUDIO_VOLUME) == 0) + fprintf(stderr, "Warning: v4l device does not support volume control.\n"); + else if (vaud.volume <= 0xEEEE) { vaud.audio = tvsource; - vaud.volume += (0xFFFF/10); + vaud.volume += 0x1111; if (ioctl(tfd, VIDIOCSAUDIO, &vaud) < 0) perror("ioctl VIDIOCSAUDIO"); } @@ -793,9 +937,11 @@ VolumeDown(void) { if (vchn.flags & VIDEO_VC_AUDIO) { - if (vaud.volume > 0) { + if ((vaud.flags & VIDEO_AUDIO_VOLUME) == 0) + fprintf(stderr, "Warning: v4l device does not support volume control.\n"); + else if (vaud.volume >= 0x1111) { vaud.audio = tvsource; - vaud.volume -= (0xFFFF/10); + vaud.volume -= 0x1111; if (ioctl(tfd, VIDIOCSAUDIO, &vaud) < 0) perror("ioctl VIDIOCSAUDIO"); } @@ -808,7 +954,7 @@ { if (vchn.flags & VIDEO_VC_AUDIO) { vaud.audio = tvsource; - // vaud.volume = 0; + /* vaud.volume = 0; */ vaud.flags |= VIDEO_AUDIO_MUTE; if (ioctl(tfd, VIDIOCSAUDIO, &vaud) < 0) perror("ioctl VIDIOCSAUDIO"); @@ -823,7 +969,7 @@ { if ((vchn.flags & VIDEO_VC_AUDIO) && (vaud.flags & VIDEO_AUDIO_MUTE)) { vaud.audio = tvsource; - // vaud.volume = (0xFFFF/2)+1; + /* vaud.volume = (0xFFFF/2)+1; */ vaud.flags &= ~VIDEO_AUDIO_MUTE; if (ioctl(tfd, VIDIOCSAUDIO, &vaud) < 0) perror("ioctl VIDIOCSAUDIO"); @@ -900,7 +1046,7 @@ ChanUp(void) { int i; - if (cchannel != maxpst) + if (cchannel < maxpst) ++cchannel; for (i=0; i < CHAN_ENTRIES; i++) { if (!strcmp(cname[cchannel], tvtuner[i].name)) { @@ -947,7 +1093,7 @@ int k=6; if (isource == TELEVISION) { - sprintf(temp, "%02d", cchannel); + sprintf(temp, "%02d", cchannel+1); if (*p == '0') { copyXPMArea(66, 79, 5, 7, k, 50); @@ -980,7 +1126,7 @@ void ParseRCFile(const char *filename, rckeys *keys) { - char *p,*q; + char *p; char temp[128]; char *tokens = " =\t\n"; FILE *fp; @@ -993,20 +1139,17 @@ } norcfile = 0; while (fgets(temp, 128, fp)) { - key = 0; - q = strdup(temp); - if (*q != '\n') { - q = strtok(q, tokens); - while (key >= 0 && keys[key].label) { - if ((!strcmp(q, keys[key].label))) { + if (temp[0] != '\n') { + p = strtok(temp, tokens); + for (key=0; keys[key].label; key++) { + if ((!strcmp(p, keys[key].label))) { p = strtok(NULL, tokens); free(*keys[key].var); *keys[key].var = strdup(p); - key = -1; - } else key++; + break; + } } } - free(q); } fclose(fp); } @@ -1017,12 +1160,9 @@ ParseRCFile2(const char *filename) { int menu = FALSE; - char temp[128]; - char tp[10]; - char *tokens = " \t\n()"; - char *q, *p; + char temp[128], name[128]; FILE *fp; - int i = 0; + int len, i = 0; if ((fp = fopen(filename, "r")) == NULL) { fprintf(stderr, "wmtv: %s\n", strerror(errno)); @@ -1031,79 +1171,56 @@ } norcfile = 0; while (fgets(temp, 128, fp)) { - q = strdup(temp); - if (*q != '\n') { - q = strtok(q, tokens); + if (*temp != '\n') { if (menu) { - cname[i] = (char *)malloc(sizeof(q)); - strncpy(cname[i], q, sizeof(q)); - p = q; - p = strtok(NULL, tokens); - if (p != NULL) { - if (*p == '-') { - p++; - ftune[i] = -1*atoi(p); - } - else if (*p == '+') { - p++; - ftune[i] = atoi(p); - } - else { - ftune[i] = atoi(p); + ftune[i]=0; + if(sscanf(temp, " %s %n(%ld) %n", name, &len, &ftune[i], &len)>=1) { + char *pos; + cname[i]=strdup(name); + comment[i]=temp[len]?strdup(temp+len):""; + /* Remove the end-of-line symbol */ + for (pos = comment[i]; *pos != '\0'; pos++) { + if (*pos == '\n') { + *pos = '\0'; + break; + } } } - else { - ftune[i] = 0; - } - wcname[i] = (char *)malloc(sizeof(cname[i])+sizeof(p)); - wcname[i] = strdup(cname[i]); - sprintf(tp, " (%d) ", ftune[i]); - strcat(wcname[i], tp); - i++; - tpst = i; + if(++i>=MAXCHAN) + break; } - if ((q = strchr(q, '[')) != NULL) { + else if (strchr(temp, '[')) { menu = TRUE; } } } + tpst = i; fclose(fp); } /* WriteRCFile function */ void -WriteRCFile(const char *filename) +WriteRCFile(const char *filename, rckeys *keys) { - int i; - char temp[128]; - char tp[10]; - char *tokens = " \t\n()"; - char *q; + long i; FILE *fp; + int key; - if ((fp = fopen(filename, "r+")) == NULL) { + if ((fp = fopen(filename, "w")) == NULL) { fprintf(stderr, "wmtv: %s\n", strerror(errno)); return; } + for (key=0; keys[key].label; key++) + if (*keys[key].var) + fprintf(fp, "%s = %s\n", keys[key].label, *keys[key].var); + + fprintf(fp, "\n[channel]\n"); + + for (i = 0; i <= maxpst; i++) + fprintf(fp, "%s (%ld)\t%s\n", cname[i], ftune[i], comment[i]); - while (fgets(temp, 128, fp)) { - q = strdup(temp); - if (*q != '\n') { - q = strtok(temp, tokens); - if ((q = strchr(q, '[')) != NULL) { - for (i = 0; i <= maxpst; i++) { - // fprintf(stderr, "offset is %ld\n", offset); - sprintf(tp, " (%ld) ", offset); - strtok(wcname[cchannel], tokens); - strcat(wcname[cchannel], tp); - fputs(wcname[i], fp); - fputs("\n", fp); - } - } - } - } fclose(fp); } @@ -1155,20 +1272,18 @@ InitConfig(void) { int i; - char temp[128]; - strcpy(temp, "/etc/wmtvrc"); - ParseRCFile(temp, wmtv_keys); - ParseRCFile2(temp); - - strncpy(temp, (char *)getenv("HOME"), (sizeof(char)*128)); - strcat(temp, "/.wmtvrc"); - ParseRCFile(temp, wmtv_keys); - ParseRCFile2(temp); + ParseRCFile(usrConfFile, wmtv_keys); + ParseRCFile2(usrConfFile); if (norcfile) { - fprintf(stderr, "wmtv: error - config file not found\n"); - exit(1); + ParseRCFile(sysConfFile, wmtv_keys); + ParseRCFile2(sysConfFile); + + if (norcfile) { + fprintf(stderr, "wmtv: error - config file not found\n"); + exit(1); + } } if (maxpreset != NULL) @@ -1297,17 +1412,20 @@ void GetFrameBuffer(void) { +#if 0 void *baseaddr = NULL; int evbr, erbr, flr = 0; int bankr, memr, depth; int i, n; int bytesperline, bitsperpixel; XPixmapFormatValues *pf; +#endif if (!XGetWindowAttributes(display, DefaultRootWindow(display), &Winattr)) { fprintf(stderr, "wmtv: error getting winattr of root\n"); } +#if 0 depth = Winattr.depth; if (XF86DGAQueryExtension(display, &evbr, &erbr)) { @@ -1331,8 +1449,8 @@ } } - bitsperpixel = (depth+7) & 0xf8; /* Taken from */ - bytesperline = Winattr.width * bitsperpixel / 8; /* Gerd Knorr's xawtv */ + bitsperpixel = (depth+7) & 0xf8; + bytesperline *= bitsperpixel/8; vfb.base = baseaddr; vfb.height = Winattr.height; @@ -1346,6 +1464,7 @@ if (ioctl(tfd, VIDIOCSFBUF, &vfb) < 0) { perror("ioctl VIDIOCSFBUF"); } +#endif } @@ -1562,6 +1681,7 @@ fprintf(stderr, "\n"); fprintf(stderr, "wmtv v%s, Copyright (c) 1999 Wee Liang \n", VERSION); fprintf(stderr, "usage: wmtv [%s]\n", OPTIONS); + fprintf(stderr, " -c, --device \tsets video4linux device to use\n"); fprintf(stderr, " -d, --display \tsets display name\n"); fprintf(stderr, " -g, --geometry <{+-}XP{+-}YP>\tsets geometry\n"); fprintf(stderr, " -b, --bpp\t\t\tdisplay color depth\n"); --- wmtv-0.6.5.orig/src/channels.h +++ wmtv-0.6.5/src/channels.h @@ -93,229 +93,275 @@ struct freqlist { char name[4]; - int freq[12]; + int freq[13]; }; struct freqlist tvtuner[] = { -/* CH US-TV US-CATV US-HRC JP-TV JP-CATV EUROPE EUR-E ITALY NZ AU UHF_GHI */ -{"E2", { 0, 0, 0, 0, 0, 48250, 0, 0, 0, 0, 0}}, -{"E3", { 0, 0, 0, 0, 0, 55250, 0, 0, 0, 0, 0}}, -{"E4", { 0, 0, 0, 0, 0, 62250, 0, 0, 0, 0, 0}}, - -{"S01", { 0, 0, 0, 0, 0, 69250, 0, 0, 0, 0, 0}}, -{"S02", { 0, 0, 0, 0, 0, 76250, 0, 0, 0, 0, 0}}, -{"S03", { 0, 0, 0, 0, 0, 83250, 0, 0, 0, 0, 0}}, - -{"R1", { 0, 0, 0, 0, 0, 0, 49750, 0, 0, 0, 0}}, -{"R2", { 0, 0, 0, 0, 0, 0, 59250, 0, 0, 0, 0}}, -{"R3", { 0, 0, 0, 0, 0, 0, 77250, 0, 0, 0, 0}}, -{"R4", { 0, 0, 0, 0, 0, 0, 84250, 0, 0, 0, 0}}, -{"R5", { 0, 0, 0, 0, 0, 0, 93250, 0, 0, 0, 0}}, - -{"SE1", { 0, 0, 0, 0, 0, 105250, 105250, 0, 0, 0, 0}}, -{"SE2", { 0, 0, 0, 0, 0, 112250, 112250, 0, 0, 0, 0}}, -{"SE3", { 0, 0, 0, 0, 0, 119250, 119250, 0, 0, 0, 0}}, -{"SE4", { 0, 0, 0, 0, 0, 126250, 126250, 0, 0, 0, 0}}, -{"SE5", { 0, 0, 0, 0, 0, 133250, 133250, 0, 0, 0, 0}}, -{"SE6", { 0, 0, 0, 0, 0, 140250, 140250, 0, 0, 0, 0}}, -{"SE7", { 0, 0, 0, 0, 0, 147250, 147250, 0, 0, 0, 0}}, -{"SE8", { 0, 0, 0, 0, 0, 154250, 154250, 0, 0, 0, 0}}, -{"SE9", { 0, 0, 0, 0, 0, 161250, 161250, 0, 0, 0, 0}}, -{"SE10",{ 0, 0, 0, 0, 0, 168250, 168250, 0, 0, 0, 0}}, - -{"E5", { 0, 0, 0, 0, 0, 175250, 0, 0, 0, 0, 0}}, -{"E6", { 0, 0, 0, 0, 0, 182250, 0, 0, 0, 0, 0}}, -{"E7", { 0, 0, 0, 0, 0, 189250, 0, 0, 0, 0, 0}}, -{"E8", { 0, 0, 0, 0, 0, 196250, 0, 0, 0, 0, 0}}, -{"E9", { 0, 0, 0, 0, 0, 203250, 0, 0, 0, 0, 0}}, -{"E10", { 0, 0, 0, 0, 0, 210250, 0, 0, 0, 0, 0}}, -{"E11", { 0, 0, 0, 0, 0, 217250, 0, 0, 0, 0, 0}}, -{"E12", { 0, 0, 0, 0, 0, 224250, 0, 0, 0, 0, 0}}, - -{"R6", { 0, 0, 0, 0, 0, 0, 175250, 0, 0, 0, 0}}, -{"R7", { 0, 0, 0, 0, 0, 0, 183250, 0, 0, 0, 0}}, -{"R8", { 0, 0, 0, 0, 0, 0, 191250, 0, 0, 0, 0}}, -{"R9", { 0, 0, 0, 0, 0, 0, 199250, 0, 0, 0, 0}}, -{"R10", { 0, 0, 0, 0, 0, 0, 207250, 0, 0, 0, 0}}, -{"R11", { 0, 0, 0, 0, 0, 0, 215250, 0, 0, 0, 0}}, -{"R12", { 0, 0, 0, 0, 0, 0, 223250, 0, 0, 0, 0}}, - -{"SE11",{ 0, 0, 0, 0, 0, 231250, 231250, 0, 0, 0, 0}}, -{"SE12",{ 0, 0, 0, 0, 0, 238250, 238250, 0, 0, 0, 0}}, -{"SE13",{ 0, 0, 0, 0, 0, 245250, 245250, 0, 0, 0, 0}}, -{"SE14",{ 0, 0, 0, 0, 0, 252250, 252250, 0, 0, 0, 0}}, -{"SE15",{ 0, 0, 0, 0, 0, 259250, 259250, 0, 0, 0, 0}}, -{"SE16",{ 0, 0, 0, 0, 0, 266250, 266250, 0, 0, 0, 0}}, -{"SE17",{ 0, 0, 0, 0, 0, 273250, 273250, 0, 0, 0, 0}}, -{"SE18",{ 0, 0, 0, 0, 0, 280250, 280250, 0, 0, 0, 0}}, -{"SE19",{ 0, 0, 0, 0, 0, 287250, 287250, 0, 0, 0, 0}}, -{"SE20",{ 0, 0, 0, 0, 0, 294250, 294250, 0, 0, 0, 0}}, - -{"S21", { 0, 0, 0, 0, 0, 303250, 303250, 0, 0, 0, 0}}, -{"S22", { 0, 0, 0, 0, 0, 311250, 311250, 0, 0, 0, 0}}, -{"S23", { 0, 0, 0, 0, 0, 319250, 319250, 0, 0, 0, 0}}, -{"S24", { 0, 0, 0, 0, 0, 327250, 327250, 0, 0, 0, 0}}, -{"S25", { 0, 0, 0, 0, 0, 335250, 335250, 0, 0, 0, 0}}, -{"S26", { 0, 0, 0, 0, 0, 343250, 343250, 0, 0, 0, 0}}, -{"S27", { 0, 0, 0, 0, 0, 351250, 351250, 0, 0, 0, 0}}, -{"S28", { 0, 0, 0, 0, 0, 359250, 359250, 0, 0, 0, 0}}, -{"S29", { 0, 0, 0, 0, 0, 367250, 367250, 0, 0, 0, 0}}, -{"S30", { 0, 0, 0, 0, 0, 375250, 375250, 0, 0, 0, 0}}, -{"S31", { 0, 0, 0, 0, 0, 383250, 383250, 0, 0, 0, 0}}, -{"S32", { 0, 0, 0, 0, 0, 391250, 391250, 0, 0, 0, 0}}, -{"S33", { 0, 0, 0, 0, 0, 399250, 399250, 0, 0, 0, 0}}, -{"S34", { 0, 0, 0, 0, 0, 407250, 407250, 0, 0, 0, 0}}, -{"S35", { 0, 0, 0, 0, 0, 415250, 415250, 0, 0, 0, 0}}, -{"S36", { 0, 0, 0, 0, 0, 423250, 423250, 0, 0, 0, 0}}, -{"S37", { 0, 0, 0, 0, 0, 431250, 431250, 0, 0, 0, 0}}, -{"S38", { 0, 0, 0, 0, 0, 439250, 439250, 0, 0, 0, 0}}, -{"S39", { 0, 0, 0, 0, 0, 447250, 447250, 0, 0, 0, 0}}, -{"S40", { 0, 0, 0, 0, 0, 455250, 455250, 0, 0, 0, 0}}, -{"S41", { 0, 0, 0, 0, 0, 463250, 463250, 0, 0, 0, 0}}, - -{"0", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 46250, 45750}}, -{"1", { 0, 73250, 72000, 91250, 0, 0, 0, 0, 45250, 57250, 53750}}, -{"2", { 55250, 55250, 54000, 97250, 0, 0, 0, 53750, 55250, 64250, 61750}}, -{"3", { 61250, 61250, 60000, 103250, 0, 0, 0, 62250, 62250, 86250, 175250}}, -{"4", { 67250, 67250, 66000, 171250, 0, 0, 0, 82250, 175250, 95250, 183250}}, -{"5", { 77250, 77250, 78000, 177250, 0, 0, 0, 175250, 182250, 102250, 191250}}, -{"5A", { 0, 0, 138250, 0, 0, 0, 0, 0, 138250, 0}}, -{"6", { 83250, 83250, 84000, 183250, 0, 0, 0, 183750, 189250, 175250, 199250}}, -{"7", {175250, 175250, 174000, 189250, 0, 0, 0, 192250, 196250, 182250, 207250}}, -{"8", {181250, 181250, 180000, 193250, 0, 0, 0, 201250, 203250, 189250, 215250}}, -{"9", {187250, 187250, 186000, 199250, 0, 0, 0, 210250, 210250, 196250, 0}}, -{"10", {193250, 193250, 192000, 205250, 0, 0, 0, 210250, 217250, 209250, 0}}, -{"11", {199250, 199250, 198000, 211250, 0, 0, 0, 217250, 0, 216250, 0}}, -{"12", {205250, 205250, 204000, 217250, 0, 0, 0, 224250, 0, 0, 0}}, - -{"13", {211250, 211250, 210000, 0, 109250, 0, 0, 0, 0, 0, 0}}, -{"14", {471250, 121250, 120000, 0, 115250, 0, 0, 0, 0, 0, 0}}, -{"15", {477250, 127250, 126000, 0, 121250, 0, 0, 0, 0, 0, 0}}, -{"16", {483250, 133250, 132000, 0, 127250, 0, 0, 0, 0, 0, 0}}, -{"17", {489250, 139250, 138000, 0, 133250, 0, 0, 0, 0, 0, 0}}, -{"18", {495250, 145250, 144000, 0, 139250, 0, 0, 0, 0, 0, 0}}, -{"19", {501250, 151250, 150000, 0, 145250, 0, 0, 0, 0, 0, 0}}, -{"20", {507250, 157250, 156000, 0, 151250, 0, 0, 0, 0, 0, 0}}, +/* CH US-TV US-CATV US-HRC JP-TV JP-CATV EUROPE EUR-E ITALY NZ AU UHF_GHI FR */ +{"E2", { 0, 0, 0, 0, 0, 48250, 0, 0, 0, 0, 0, 0}}, +{"E3", { 0, 0, 0, 0, 0, 55250, 0, 0, 0, 0, 0, 0}}, +{"E4", { 0, 0, 0, 0, 0, 62250, 0, 0, 0, 0, 0, 0}}, + +{"S01", { 0, 0, 0, 0, 0, 69250, 0, 0, 0, 0, 0, 0}}, +{"S02", { 0, 0, 0, 0, 0, 76250, 0, 0, 0, 0, 0, 0}}, +{"S03", { 0, 0, 0, 0, 0, 83250, 0, 0, 0, 0, 0, 0}}, + +{"R1", { 0, 0, 0, 0, 0, 0, 49750, 0, 0, 0, 0, 0}}, +{"R2", { 0, 0, 0, 0, 0, 0, 59250, 0, 0, 0, 0, 0}}, +{"R3", { 0, 0, 0, 0, 0, 0, 77250, 0, 0, 0, 0, 0}}, +{"R4", { 0, 0, 0, 0, 0, 0, 84250, 0, 0, 0, 0, 0}}, +{"R5", { 0, 0, 0, 0, 0, 0, 93250, 0, 0, 0, 0, 0}}, + +{"SE1", { 0, 0, 0, 0, 0, 105250, 105250, 0, 0, 0, 0, 0}}, +{"SE2", { 0, 0, 0, 0, 0, 112250, 112250, 0, 0, 0, 0, 0}}, +{"SE3", { 0, 0, 0, 0, 0, 119250, 119250, 0, 0, 0, 0, 0}}, +{"SE4", { 0, 0, 0, 0, 0, 126250, 126250, 0, 0, 0, 0, 0}}, +{"SE5", { 0, 0, 0, 0, 0, 133250, 133250, 0, 0, 0, 0, 0}}, +{"SE6", { 0, 0, 0, 0, 0, 140250, 140250, 0, 0, 0, 0, 0}}, +{"SE7", { 0, 0, 0, 0, 0, 147250, 147250, 0, 0, 0, 0, 0}}, +{"SE8", { 0, 0, 0, 0, 0, 154250, 154250, 0, 0, 0, 0, 0}}, +{"SE9", { 0, 0, 0, 0, 0, 161250, 161250, 0, 0, 0, 0, 0}}, +{"SE10",{ 0, 0, 0, 0, 0, 168250, 168250, 0, 0, 0, 0, 0}}, + +{"E5", { 0, 0, 0, 0, 0, 175250, 0, 0, 0, 0, 0, 0}}, +{"E6", { 0, 0, 0, 0, 0, 182250, 0, 0, 0, 0, 0, 0}}, +{"E7", { 0, 0, 0, 0, 0, 189250, 0, 0, 0, 0, 0, 0}}, +{"E8", { 0, 0, 0, 0, 0, 196250, 0, 0, 0, 0, 0, 0}}, +{"E9", { 0, 0, 0, 0, 0, 203250, 0, 0, 0, 0, 0, 0}}, +{"E10", { 0, 0, 0, 0, 0, 210250, 0, 0, 0, 0, 0, 0}}, +{"E11", { 0, 0, 0, 0, 0, 217250, 0, 0, 0, 0, 0, 0}}, +{"E12", { 0, 0, 0, 0, 0, 224250, 0, 0, 0, 0, 0, 0}}, + +{"R6", { 0, 0, 0, 0, 0, 0, 175250, 0, 0, 0, 0, 0}}, +{"R7", { 0, 0, 0, 0, 0, 0, 183250, 0, 0, 0, 0, 0}}, +{"R8", { 0, 0, 0, 0, 0, 0, 191250, 0, 0, 0, 0, 0}}, +{"R9", { 0, 0, 0, 0, 0, 0, 199250, 0, 0, 0, 0, 0}}, +{"R10", { 0, 0, 0, 0, 0, 0, 207250, 0, 0, 0, 0, 0}}, +{"R11", { 0, 0, 0, 0, 0, 0, 215250, 0, 0, 0, 0, 0}}, +{"R12", { 0, 0, 0, 0, 0, 0, 223250, 0, 0, 0, 0, 0}}, + +{"SE11",{ 0, 0, 0, 0, 0, 231250, 231250, 0, 0, 0, 0, 0}}, +{"SE12",{ 0, 0, 0, 0, 0, 238250, 238250, 0, 0, 0, 0, 0}}, +{"SE13",{ 0, 0, 0, 0, 0, 245250, 245250, 0, 0, 0, 0, 0}}, +{"SE14",{ 0, 0, 0, 0, 0, 252250, 252250, 0, 0, 0, 0, 0}}, +{"SE15",{ 0, 0, 0, 0, 0, 259250, 259250, 0, 0, 0, 0, 0}}, +{"SE16",{ 0, 0, 0, 0, 0, 266250, 266250, 0, 0, 0, 0, 0}}, +{"SE17",{ 0, 0, 0, 0, 0, 273250, 273250, 0, 0, 0, 0, 0}}, +{"SE18",{ 0, 0, 0, 0, 0, 280250, 280250, 0, 0, 0, 0, 0}}, +{"SE19",{ 0, 0, 0, 0, 0, 287250, 287250, 0, 0, 0, 0, 0}}, +{"SE20",{ 0, 0, 0, 0, 0, 294250, 294250, 0, 0, 0, 0, 0}}, + +{"S21", { 0, 0, 0, 0, 0, 303250, 303250, 0, 0, 0, 0, 0}}, +{"S22", { 0, 0, 0, 0, 0, 311250, 311250, 0, 0, 0, 0, 0}}, +{"S23", { 0, 0, 0, 0, 0, 319250, 319250, 0, 0, 0, 0, 0}}, +{"S24", { 0, 0, 0, 0, 0, 327250, 327250, 0, 0, 0, 0, 0}}, +{"S25", { 0, 0, 0, 0, 0, 335250, 335250, 0, 0, 0, 0, 0}}, +{"S26", { 0, 0, 0, 0, 0, 343250, 343250, 0, 0, 0, 0, 0}}, +{"S27", { 0, 0, 0, 0, 0, 351250, 351250, 0, 0, 0, 0, 0}}, +{"S28", { 0, 0, 0, 0, 0, 359250, 359250, 0, 0, 0, 0, 0}}, +{"S29", { 0, 0, 0, 0, 0, 367250, 367250, 0, 0, 0, 0, 0}}, +{"S30", { 0, 0, 0, 0, 0, 375250, 375250, 0, 0, 0, 0, 0}}, +{"S31", { 0, 0, 0, 0, 0, 383250, 383250, 0, 0, 0, 0, 0}}, +{"S32", { 0, 0, 0, 0, 0, 391250, 391250, 0, 0, 0, 0, 0}}, +{"S33", { 0, 0, 0, 0, 0, 399250, 399250, 0, 0, 0, 0, 0}}, +{"S34", { 0, 0, 0, 0, 0, 407250, 407250, 0, 0, 0, 0, 0}}, +{"S35", { 0, 0, 0, 0, 0, 415250, 415250, 0, 0, 0, 0, 0}}, +{"S36", { 0, 0, 0, 0, 0, 423250, 423250, 0, 0, 0, 0, 0}}, +{"S37", { 0, 0, 0, 0, 0, 431250, 431250, 0, 0, 0, 0, 0}}, +{"S38", { 0, 0, 0, 0, 0, 439250, 439250, 0, 0, 0, 0, 0}}, +{"S39", { 0, 0, 0, 0, 0, 447250, 447250, 0, 0, 0, 0, 0}}, +{"S40", { 0, 0, 0, 0, 0, 455250, 455250, 0, 0, 0, 0, 0}}, +{"S41", { 0, 0, 0, 0, 0, 463250, 463250, 0, 0, 0, 0, 0}}, + +{"0", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 46250, 45750, 0}}, +{"1", { 0, 73250, 72000, 91250, 0, 0, 0, 0, 45250, 57250, 53750, 0}}, +{"2", { 55250, 55250, 54000, 97250, 0, 0, 0, 53750, 55250, 64250, 61750, 0}}, +{"3", { 61250, 61250, 60000, 103250, 0, 0, 0, 62250, 62250, 86250, 175250, 0}}, +{"4", { 67250, 67250, 66000, 171250, 0, 0, 0, 82250, 175250, 95250, 183250, 0}}, +{"5", { 77250, 77250, 78000, 177250, 0, 0, 0, 175250, 182250, 102250, 191250, 0}}, +{"5A", { 0, 0, 138250, 0, 0, 0, 0, 0, 138250, 0, 0, 0}}, +{"6", { 83250, 83250, 84000, 183250, 0, 0, 0, 183750, 189250, 175250, 199250, 0}}, +{"7", {175250, 175250, 174000, 189250, 0, 0, 0, 192250, 196250, 182250, 207250, 0}}, +{"8", {181250, 181250, 180000, 193250, 0, 0, 0, 201250, 203250, 189250, 215250, 0}}, +{"9", {187250, 187250, 186000, 199250, 0, 0, 0, 210250, 210250, 196250, 0, 0}}, +{"10", {193250, 193250, 192000, 205250, 0, 0, 0, 210250, 217250, 209250, 0, 0}}, +{"11", {199250, 199250, 198000, 211250, 0, 0, 0, 217250, 0, 216250, 0, 0}}, +{"12", {205250, 205250, 204000, 217250, 0, 0, 0, 224250, 0, 0, 0, 0}}, + +{"13", {211250, 211250, 210000, 0, 109250, 0, 0, 0, 0, 0, 0, 0}}, +{"14", {471250, 121250, 120000, 0, 115250, 0, 0, 0, 0, 0, 0, 0}}, +{"15", {477250, 127250, 126000, 0, 121250, 0, 0, 0, 0, 0, 0, 0}}, +{"16", {483250, 133250, 132000, 0, 127250, 0, 0, 0, 0, 0, 0, 0}}, +{"17", {489250, 139250, 138000, 0, 133250, 0, 0, 0, 0, 0, 0, 0}}, +{"18", {495250, 145250, 144000, 0, 139250, 0, 0, 0, 0, 0, 0, 0}}, +{"19", {501250, 151250, 150000, 0, 145250, 0, 0, 0, 0, 0, 0, 0}}, +{"20", {507250, 157250, 156000, 0, 151250, 0, 0, 0, 0, 0, 0, 0}}, -{"21", {513250, 163250, 162000, 0, 157250, 471250, 471250, 0, 0, 0, 471250}}, -{"22", {519250, 169250, 168000, 0, 165250, 479250, 479250, 0, 0, 0, 479250}}, -{"23", {525250, 217250, 216000, 0, 223250, 487250, 487250, 0, 0, 0, 487250}}, -{"24", {531250, 223250, 222000, 0, 231250, 495250, 495250, 0, 0, 0, 495250}}, -{"25", {537250, 229250, 228000, 0, 237250, 503250, 503250, 0, 0, 0, 503250}}, -{"26", {543250, 235250, 234000, 0, 243250, 511250, 511250, 0, 0, 0, 511250}}, -{"27", {549250, 241250, 240000, 0, 249250, 519250, 519250, 0, 0, 0, 519250}}, -{"28", {555250, 247250, 246000, 0, 253250, 527250, 527250, 0, 0, 527250, 527250}}, -{"29", {561250, 253250, 252000, 0, 259250, 535250, 535250, 0, 0, 534250, 535250}}, -{"30", {567250, 259250, 258000, 0, 265250, 543250, 543250, 0, 0, 541250, 543250}}, -{"31", {573250, 265250, 264000, 0, 271250, 551250, 551250, 0, 0, 548250, 551250}}, -{"32", {579250, 271250, 270000, 0, 277250, 559250, 559250, 0, 0, 555250, 559250}}, -{"33", {585250, 277250, 276000, 0, 283250, 567250, 567250, 0, 0, 562250, 567250}}, -{"34", {591250, 283250, 282000, 0, 289250, 575250, 575250, 0, 0, 569250, 575250}}, -{"35", {597250, 289250, 288000, 0, 295250, 583250, 583250, 0, 0, 576250, 583250}}, -{"36", {603250, 295250, 294000, 0, 301250, 591250, 591250, 0, 0, 0, 591250}}, -{"37", {609250, 301250, 300000, 0, 307250, 599250, 599250, 0, 0, 0, 599250}}, -{"38", {615250, 307250, 306000, 0, 313250, 607250, 607250, 0, 0, 0, 607250}}, -{"39", {621250, 313250, 312000, 0, 319250, 615250, 615250, 0, 0, 604250, 615250}}, -{"40", {627250, 319250, 318000, 0, 325250, 623250, 623250, 0, 0, 611250, 623250}}, -{"41", {633250, 325250, 324000, 0, 331250, 631250, 631250, 0, 0, 618250, 631250}}, -{"42", {639250, 331250, 330000, 0, 337250, 639250, 639250, 0, 0, 625250, 639250}}, -{"43", {645250, 337250, 336000, 0, 343250, 647250, 647250, 0, 0, 632250, 647250}}, -{"44", {651250, 343250, 342000, 0, 349250, 655250, 655250, 0, 0, 639250, 655250}}, -{"45", {657250, 349250, 348000, 663250, 355250, 663250, 663250, 0, 0, 646250, 663250}}, -{"46", {663250, 355250, 354000, 669250, 361250, 671250, 671250, 0, 0, 653250, 671250}}, -{"47", {669250, 361250, 360000, 675250, 367250, 679250, 679250, 0, 0, 660250, 679250}}, -{"48", {675250, 367250, 366000, 681250, 373250, 687250, 687250, 0, 0, 667250, 687250}}, -{"49", {681250, 373250, 372000, 687250, 379250, 695250, 695250, 0, 0, 674250, 695250}}, -{"50", {687250, 379250, 378000, 693250, 385250, 703250, 703250, 0, 0, 681250, 703250}}, -{"51", {693250, 385250, 384000, 699250, 391250, 711250, 711250, 0, 0, 688250, 711250}}, -{"52", {699250, 391250, 390000, 705250, 397250, 719250, 719250, 0, 0, 695250, 719250}}, -{"53", {705250, 397250, 396000, 711250, 403250, 727250, 727250, 0, 0, 702250, 727250}}, -{"54", {711250, 403250, 402000, 717250, 409250, 735250, 735250, 0, 0, 709250, 735250}}, -{"55", {717250, 409250, 408000, 723250, 415250, 743250, 743250, 0, 0, 716250, 743250}}, -{"56", {723250, 415250, 414000, 729250, 421250, 751250, 751250, 0, 0, 723250, 751250}}, -{"57", {729250, 421250, 420000, 735250, 427250, 759250, 759250, 0, 0, 730250, 759250}}, -{"58", {735250, 427250, 426000, 741250, 433250, 767250, 767250, 0, 0, 737250, 767250}}, -{"59", {741250, 433250, 432000, 747250, 439250, 775250, 775250, 0, 0, 744250, 775250}}, -{"60", {747250, 439250, 438000, 753250, 445250, 783250, 783250, 0, 0, 751250, 783250}}, -{"61", {753250, 445250, 444000, 759250, 451250, 791250, 791250, 0, 0, 758250, 791250}}, -{"62", {759250, 451250, 450000, 765250, 457250, 799250, 799250, 0, 0, 765250, 799250}}, -{"63", {765250, 457250, 456000, 0, 463250, 807250, 807250, 0, 0, 772250, 807250}}, -{"64", {771250, 463250, 462000, 0, 0, 815250, 815250, 0, 0, 779250, 815250}}, -{"65", {777250, 469250, 468000, 0, 0, 823250, 823250, 0, 0, 786250, 823250}}, -{"66", {783250, 475250, 474000, 0, 0, 831250, 831250, 0, 0, 793250, 831250}}, -{"67", {789250, 481250, 480000, 0, 0, 839250, 839250, 0, 0, 800250, 839250}}, -{"68", {795250, 487250, 486000, 0, 0, 847250, 847250, 0, 0, 807250, 847250}}, -{"69", {801250, 493250, 492000, 0, 0, 855250, 855250, 0, 0, 814250, 855250}}, +{"21", {513250, 163250, 162000, 0, 157250, 471250, 471250, 0, 0, 0, 471250, 471250}}, +{"22", {519250, 169250, 168000, 0, 165250, 479250, 479250, 0, 0, 0, 479250, 479250}}, +{"23", {525250, 217250, 216000, 0, 223250, 487250, 487250, 0, 0, 0, 487250, 487250}}, +{"24", {531250, 223250, 222000, 0, 231250, 495250, 495250, 0, 0, 0, 495250, 495250}}, +{"25", {537250, 229250, 228000, 0, 237250, 503250, 503250, 0, 0, 0, 503250, 503250}}, +{"26", {543250, 235250, 234000, 0, 243250, 511250, 511250, 0, 0, 0, 511250, 511250}}, +{"27", {549250, 241250, 240000, 0, 249250, 519250, 519250, 0, 0, 0, 519250, 519250}}, +{"28", {555250, 247250, 246000, 0, 253250, 527250, 527250, 0, 0, 527250, 527250, 527250}}, +{"29", {561250, 253250, 252000, 0, 259250, 535250, 535250, 0, 0, 534250, 535250, 535250}}, +{"30", {567250, 259250, 258000, 0, 265250, 543250, 543250, 0, 0, 541250, 543250, 543250}}, +{"31", {573250, 265250, 264000, 0, 271250, 551250, 551250, 0, 0, 548250, 551250, 551250}}, +{"32", {579250, 271250, 270000, 0, 277250, 559250, 559250, 0, 0, 555250, 559250, 559250}}, +{"33", {585250, 277250, 276000, 0, 283250, 567250, 567250, 0, 0, 562250, 567250, 567250}}, +{"34", {591250, 283250, 282000, 0, 289250, 575250, 575250, 0, 0, 569250, 575250, 575250}}, +{"35", {597250, 289250, 288000, 0, 295250, 583250, 583250, 0, 0, 576250, 583250, 583250}}, +{"36", {603250, 295250, 294000, 0, 301250, 591250, 591250, 0, 0, 0, 591250, 591250}}, +{"37", {609250, 301250, 300000, 0, 307250, 599250, 599250, 0, 0, 0, 599250, 599250}}, +{"38", {615250, 307250, 306000, 0, 313250, 607250, 607250, 0, 0, 0, 607250, 607250}}, +{"39", {621250, 313250, 312000, 0, 319250, 615250, 615250, 0, 0, 604250, 615250, 615250}}, +{"40", {627250, 319250, 318000, 0, 325250, 623250, 623250, 0, 0, 611250, 623250, 623250}}, +{"41", {633250, 325250, 324000, 0, 331250, 631250, 631250, 0, 0, 618250, 631250, 631250}}, +{"42", {639250, 331250, 330000, 0, 337250, 639250, 639250, 0, 0, 625250, 639250, 639250}}, +{"43", {645250, 337250, 336000, 0, 343250, 647250, 647250, 0, 0, 632250, 647250, 647250}}, +{"44", {651250, 343250, 342000, 0, 349250, 655250, 655250, 0, 0, 639250, 655250, 655250}}, +{"45", {657250, 349250, 348000, 663250, 355250, 663250, 663250, 0, 0, 646250, 663250, 663250}}, +{"46", {663250, 355250, 354000, 669250, 361250, 671250, 671250, 0, 0, 653250, 671250, 671250}}, +{"47", {669250, 361250, 360000, 675250, 367250, 679250, 679250, 0, 0, 660250, 679250, 679250}}, +{"48", {675250, 367250, 366000, 681250, 373250, 687250, 687250, 0, 0, 667250, 687250, 687250}}, +{"49", {681250, 373250, 372000, 687250, 379250, 695250, 695250, 0, 0, 674250, 695250, 695250}}, +{"50", {687250, 379250, 378000, 693250, 385250, 703250, 703250, 0, 0, 681250, 703250, 703250}}, +{"51", {693250, 385250, 384000, 699250, 391250, 711250, 711250, 0, 0, 688250, 711250, 711250}}, +{"52", {699250, 391250, 390000, 705250, 397250, 719250, 719250, 0, 0, 695250, 719250, 719250}}, +{"53", {705250, 397250, 396000, 711250, 403250, 727250, 727250, 0, 0, 702250, 727250, 727250}}, +{"54", {711250, 403250, 402000, 717250, 409250, 735250, 735250, 0, 0, 709250, 735250, 735250}}, +{"55", {717250, 409250, 408000, 723250, 415250, 743250, 743250, 0, 0, 716250, 743250, 743250}}, +{"56", {723250, 415250, 414000, 729250, 421250, 751250, 751250, 0, 0, 723250, 751250, 751250}}, +{"57", {729250, 421250, 420000, 735250, 427250, 759250, 759250, 0, 0, 730250, 759250, 759250}}, +{"58", {735250, 427250, 426000, 741250, 433250, 767250, 767250, 0, 0, 737250, 767250, 767250}}, +{"59", {741250, 433250, 432000, 747250, 439250, 775250, 775250, 0, 0, 744250, 775250, 775250}}, +{"60", {747250, 439250, 438000, 753250, 445250, 783250, 783250, 0, 0, 751250, 783250, 783250}}, +{"61", {753250, 445250, 444000, 759250, 451250, 791250, 791250, 0, 0, 758250, 791250, 791250}}, +{"62", {759250, 451250, 450000, 765250, 457250, 799250, 799250, 0, 0, 765250, 799250, 799250}}, +{"63", {765250, 457250, 456000, 0, 463250, 807250, 807250, 0, 0, 772250, 807250, 807250}}, +{"64", {771250, 463250, 462000, 0, 0, 815250, 815250, 0, 0, 779250, 815250, 815250}}, +{"65", {777250, 469250, 468000, 0, 0, 823250, 823250, 0, 0, 786250, 823250, 823250}}, +{"66", {783250, 475250, 474000, 0, 0, 831250, 831250, 0, 0, 793250, 831250, 831250}}, +{"67", {789250, 481250, 480000, 0, 0, 839250, 839250, 0, 0, 800250, 839250, 839250}}, +{"68", {795250, 487250, 486000, 0, 0, 847250, 847250, 0, 0, 807250, 847250, 847250}}, +{"69", {801250, 493250, 492000, 0, 0, 855250, 855250, 0, 0, 814250, 855250, 855250}}, -{"70", {807250, 499250, 498000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"71", {813250, 505250, 504000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"72", {819250, 511250, 510000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"73", {825250, 517250, 516000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"74", {831250, 523250, 522000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"75", {837250, 529250, 528000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"76", {843250, 535250, 534000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"77", {849250, 541250, 540000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"78", {855250, 547250, 546000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"79", {861250, 553250, 552000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"80", {867250, 559250, 558000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"81", {873250, 565250, 564000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"82", {879250, 571250, 570000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"83", {885250, 577250, 576000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"84", { 0, 583250, 582000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"85", { 0, 589250, 588000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"86", { 0, 595250, 594000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"87", { 0, 601250, 600000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"88", { 0, 607250, 606000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"89", { 0, 613250, 612000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"90", { 0, 619250, 618000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"91", { 0, 625250, 624000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"92", { 0, 631250, 630000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"93", { 0, 637250, 636000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"94", { 0, 643250, 642000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"95", { 0, 91250, 900000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"96", { 0, 97250, 960000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"97", { 0, 103250, 102000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"98", { 0, 109250, 108000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"99", { 0, 115250, 114000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"100", { 0, 649250, 648000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"101", { 0, 655250, 654000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"102", { 0, 661250, 660000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"103", { 0, 667250, 666000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"104", { 0, 673250, 672000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"105", { 0, 679250, 678000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"106", { 0, 685250, 684000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"107", { 0, 691250, 690000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"108", { 0, 697250, 696000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"109", { 0, 703250, 702000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"110", { 0, 709250, 708000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"111", { 0, 715250, 714000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"112", { 0, 721250, 720000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"113", { 0, 727250, 726000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"114", { 0, 733250, 732000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"115", { 0, 739250, 738000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"116", { 0, 745250, 744000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"117", { 0, 751250, 750000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"118", { 0, 757250, 756000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"119", { 0, 763250, 762000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"120", { 0, 769250, 768000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"121", { 0, 775250, 774000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"122", { 0, 781250, 780000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"123", { 0, 787250, 786000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"124", { 0, 793250, 792000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"125", { 0, 799250, 798000, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"70", {807250, 499250, 498000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"71", {813250, 505250, 504000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"72", {819250, 511250, 510000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"73", {825250, 517250, 516000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"74", {831250, 523250, 522000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"75", {837250, 529250, 528000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"76", {843250, 535250, 534000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"77", {849250, 541250, 540000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"78", {855250, 547250, 546000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"79", {861250, 553250, 552000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"80", {867250, 559250, 558000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"81", {873250, 565250, 564000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"82", {879250, 571250, 570000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"83", {885250, 577250, 576000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"84", { 0, 583250, 582000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"85", { 0, 589250, 588000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"86", { 0, 595250, 594000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"87", { 0, 601250, 600000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"88", { 0, 607250, 606000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"89", { 0, 613250, 612000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"90", { 0, 619250, 618000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"91", { 0, 625250, 624000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"92", { 0, 631250, 630000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"93", { 0, 637250, 636000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"94", { 0, 643250, 642000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"95", { 0, 91250, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"96", { 0, 97250, 960000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"97", { 0, 103250, 102000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"98", { 0, 109250, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"99", { 0, 115250, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"100", { 0, 649250, 648000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"101", { 0, 655250, 654000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"102", { 0, 661250, 660000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"103", { 0, 667250, 666000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"104", { 0, 673250, 672000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"105", { 0, 679250, 678000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"106", { 0, 685250, 684000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"107", { 0, 691250, 690000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"108", { 0, 697250, 696000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"109", { 0, 703250, 702000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"110", { 0, 709250, 708000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"111", { 0, 715250, 714000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"112", { 0, 721250, 720000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"113", { 0, 727250, 726000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"114", { 0, 733250, 732000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"115", { 0, 739250, 738000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"116", { 0, 745250, 744000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"117", { 0, 751250, 750000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"118", { 0, 757250, 756000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"119", { 0, 763250, 762000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"120", { 0, 769250, 768000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"121", { 0, 775250, 774000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"122", { 0, 781250, 780000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"123", { 0, 787250, 786000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"124", { 0, 793250, 792000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"125", { 0, 799250, 798000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T7", { 0, 8250, 7000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T8", { 0, 14250, 13000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T9", { 0, 20250, 19000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T10", { 0, 26250, 25000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T11", { 0, 32250, 31000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T12", { 0, 38250, 37000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T13", { 0, 44250, 43000, 0, 0, 0, 0, 0, 0, 0, 0}}, -{"T14", { 0, 50250, 49000, 0, 0, 0, 0, 0, 0, 0, 0}} +{"T7", { 0, 8250, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"T8", { 0, 14250, 13000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"T9", { 0, 20250, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"T10", { 0, 26250, 25000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"T11", { 0, 32250, 31000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"T12", { 0, 38250, 37000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"T13", { 0, 44250, 43000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +{"T14", { 0, 50250, 49000, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +{"K01", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47750}}, +{"K02", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55750}}, +{"K03", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60500}}, +{"K04", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63750}}, +{"K05", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176000}}, +{"K06", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184000}}, +{"K07", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192000}}, +{"K08", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200000}}, +{"K09", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208000}}, +{"K10", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216000}}, +{"KB", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116750}}, +{"KC", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128750}}, +{"KD", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140750}}, +{"KE", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159750}}, +{"KF", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164750}}, +{"KG", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176750}}, +{"KH", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188750}}, +{"KI", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200750}}, +{"KJ", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212750}}, +{"KK", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224750}}, +{"KL", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236750}}, +{"KM", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248750}}, +{"KN", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260750}}, +{"KO", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272750}}, +{"KP", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284750}}, +{"KQ", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296750}}, +{"H01", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303250}}, +{"H02", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311250}}, +{"H03", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319250}}, +{"H04", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327250}}, +{"H05", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335250}}, +{"H06", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343250}}, +{"H07", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351250}}, +{"H08", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359250}}, +{"H09", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367250}}, +{"H10", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375250}}, +{"H11", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383250}}, +{"H12", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391250}}, +{"H13", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399250}}, +{"H14", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407250}}, +{"H15", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415250}}, +{"H16", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423250}}, +{"H17", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431250}}, +{"H18", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439250}}, +{"H19", { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447250}} }; int CHAN_ENTRIES = sizeof(tvtuner)/sizeof(struct freqlist); -int CHAN_NAMES = 11; +int CHAN_NAMES = 12; struct gentab chan_names[] = { { 0, "ntsc-bcast" }, @@ -329,5 +375,6 @@ { 8, "pal-newzealand" }, { 9, "pal-australia" }, { 10, "pal-ireland" }, + { 11, "secam-france" }, { -1, NULL } };