This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

tvtime-1.0.2-full.patch

By: a guest on May 29th, 2011  |  syntax: C++  |  size: 410.61 KB  |  views: 133  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. diff -Nurp tvtime-1.0.2/configure.ac tvtime-1.0.2-custom/configure.ac
  2. --- tvtime-1.0.2/configure.ac   2005-09-14 23:40:44.000000000 +0200
  3. +++ tvtime-1.0.2-custom/configure.ac    2011-05-29 13:07:28.219041386 +0200
  4. @@ -10,12 +10,7 @@ if test x"$host_alias" = x""; then host_
  5.  
  6.  # Check for compilers.
  7.  AC_PROG_CC
  8. -AC_CHECK_PROG(found_cc, "$CC", yes, no)
  9. -test "x$found_cc" = "xyes" || exit 1
  10. -
  11.  AC_PROG_CXX
  12. -AC_CHECK_PROG(found_cxx, "$CXX", yes, no)
  13. -test "x$found_cxx" = "xyes" || exit 1
  14.  
  15.  # Check for libtool.
  16.  AC_PROG_LIBTOOL
  17. @@ -74,18 +69,26 @@ dnl ------------------------------------
  18.  dnl libxml2
  19.  dnl ---------------------------------------------
  20.  dnl Test for libxml2
  21. -
  22.  AC_PATH_PROG(LIBXML2_CONFIG,xml2-config,no)
  23.  if test "$LIBXML2_CONFIG" = "no" ; then
  24.         AC_MSG_ERROR(libxml2 needed and xml2-config not found)
  25.  else
  26.         XML2_LIBS="`$LIBXML2_CONFIG --libs`"
  27.         XML2_FLAG="`$LIBXML2_CONFIG --cflags`"
  28. -       AC_DEFINE(HAVE_LIBXML2,,[LIBXML2 support])     
  29. +       AC_DEFINE(HAVE_LIBXML2,,[LIBXML2 support])
  30.  fi
  31.  AC_SUBST(XML2_LIBS)
  32.  AC_SUBST(XML2_FLAG)
  33.  
  34. +dnl ---------------------------------------------
  35. +dnl libasound2
  36. +dnl ---------------------------------------------
  37. +dnl Test for ALSA
  38. +AM_PATH_ALSA(1.0.9,
  39. +       [ AC_DEFINE(HAVE_ALSA,1,[Define this if you have Alsa (libasound) installed]) ],
  40. +       AC_MSG_RESULT(libasound needed and not found))
  41. +AM_CONDITIONAL(HAVE_ALSA, test x"$no_alsa" != "yes")
  42. +
  43.  
  44.  dnl ---------------------------------------------
  45.  dnl check for gtk+-2.0
  46. @@ -99,6 +102,8 @@ dnl ------------------------------------
  47.  dnl check for X11, Xv and XF86VidModeExtension
  48.  dnl ---------------------------------------------
  49.  AC_PATH_XTRA
  50. +AC_ARG_WITH([xinerama],
  51. +    [AS_HELP_STRING([--without-xinerama], [Disable Xinerama extension support (default: check)])])
  52.  if test x"$no_x" != x"yes"; then
  53.      dnl check for Xshm
  54.      AC_CHECK_LIB([Xext],[XShmCreateImage],
  55. @@ -112,16 +117,18 @@ if test x"$no_x" != x"yes"; then
  56.             X11_LIBS="$X11_LIBS -lXv"],,
  57.             [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
  58.  
  59. -       dnl check for Xinerama
  60. -       AC_CHECK_LIB([Xinerama],[XineramaQueryScreens],
  61. -           [AC_DEFINE([HAVE_XINERAMA],,[Xinerama support])
  62. -           X11_LIBS="$X11_LIBS -lXinerama"],,
  63. -           [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
  64. -
  65. -       dnl check for XTest
  66. -        AC_CHECK_LIB([Xtst],[XTestFakeKeyEvent],
  67. -            [AC_DEFINE([HAVE_XTESTEXTENSION],,[XTest support])
  68. -            X11_LIBS="$X11_LIBS -lXtst"],,
  69. +       if test "x$with_xinerama" != "xno"; then
  70. +               dnl check for Xinerama
  71. +               AC_CHECK_LIB([Xinerama],[XineramaQueryScreens],
  72. +                   [AC_DEFINE([HAVE_XINERAMA],,[Xinerama support])
  73. +                   X11_LIBS="$X11_LIBS -lXinerama"],,
  74. +                   [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
  75. +       fi
  76. +
  77. +       dnl check for XSs
  78. +        AC_CHECK_LIB([Xss],[XScreenSaverSuspend],
  79. +            [AC_DEFINE([HAVE_XSSEXTENSION],,[XSs support])
  80. +            X11_LIBS="$X11_LIBS -lXss"],,
  81.             [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
  82.  
  83.         dnl check for Xvidmode
  84. diff -Nurp tvtime-1.0.2/configure.ac.orig tvtime-1.0.2-custom/configure.ac.orig
  85. --- tvtime-1.0.2/configure.ac.orig      1970-01-01 01:00:00.000000000 +0100
  86. +++ tvtime-1.0.2-custom/configure.ac.orig       2011-05-29 13:07:28.159040652 +0200
  87. @@ -0,0 +1,244 @@
  88. +# Process this file with autoconf to produce a configure script.
  89. +AC_PREREQ(2.52)
  90. +AC_INIT(tvtime, 1.0.2, http://tvtime.net/)
  91. +AC_CONFIG_SRCDIR([src/tvtime.c])
  92. +AM_INIT_AUTOMAKE(tvtime,1.0.2)
  93. +AM_CONFIG_HEADER(config.h)
  94. +AM_MAINTAINER_MODE
  95. +AC_CANONICAL_HOST
  96. +if test x"$host_alias" = x""; then host_alias="$host"; fi
  97. +
  98. +# Check for compilers.
  99. +AC_PROG_CC
  100. +AC_CHECK_PROG(found_cc, "$CC", yes, no)
  101. +test "x$found_cc" = "xyes" || exit 1
  102. +
  103. +AC_PROG_CXX
  104. +AC_CHECK_PROG(found_cxx, "$CXX", yes, no)
  105. +test "x$found_cxx" = "xyes" || exit 1
  106. +
  107. +# Check for libtool.
  108. +AC_PROG_LIBTOOL
  109. +
  110. +# Checks for header files.
  111. +AC_HEADER_STDC
  112. +AC_CHECK_HEADERS([ctype.h dirent.h errno.h fcntl.h getopt.h langinfo.h math.h netinet/in.h pwd.h signal.h stdint.h stdio.h stdlib.h string.h sys/ioctl.h sys/mman.h sys/resource.h sys/stat.h sys/time.h sys/wait.h sys/types.h unistd.h wordexp.h locale.h])
  113. +
  114. +# Checks for typedefs, structures, and compiler characteristics.
  115. +AC_HEADER_TIME
  116. +
  117. +# Checks for library functions.
  118. +AC_PROG_GCC_TRADITIONAL
  119. +AC_FUNC_MMAP
  120. +AC_CHECK_FUNCS([asprintf atexit fork execlp getopt_long getpriority gettimeofday seteuid memset setreuid setpriority signal sigemptyset sigaction strerror vsscanf wordexp wordfree])
  121. +
  122. +# Check for gettext
  123. +AM_GNU_GETTEXT
  124. +
  125. +dnl ---------------------------------------------
  126. +dnl zlib
  127. +dnl ---------------------------------------------
  128. +dnl Test for libz
  129. +AC_CHECK_LIB(z, gzsetparams,
  130. +        [ AC_CHECK_HEADER(zlib.h,
  131. +          have_zlib=yes
  132. +          ZLIB_LIBS="-lz",)], AC_MSG_ERROR(zlib needed))
  133. +
  134. +AM_CONDITIONAL(HAVE_ZLIB, [test x"$have_zlib" = "xyes"])
  135. +AC_SUBST(ZLIB_LIBS)
  136. +
  137. +
  138. +dnl ---------------------------------------------
  139. +dnl libpng
  140. +dnl ---------------------------------------------
  141. +dnl Test for libpng
  142. +AC_CHECK_LIB(png, png_read_png,
  143. +        [ AC_CHECK_HEADER(png.h,
  144. +          have_libpng=yes
  145. +          PNG_LIBS="-lpng $ZLIB_LIBS -lm",)], AC_MSG_ERROR(libpng needed), "$ZLIB_LIBS" -lm)
  146. +
  147. +AM_CONDITIONAL(HAVE_LIBPNG, [test x"$have_libpng" = "xyes"])
  148. +AC_SUBST(PNG_LIBS)
  149. +
  150. +
  151. +dnl ---------------------------------------------
  152. +dnl freetype
  153. +dnl ---------------------------------------------
  154. +dnl Test for freetype
  155. +AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
  156. +if test "$FREETYPE_CONFIG" = "no" ; then
  157. +  AC_MSG_ERROR(freetype2 needed and freetype-config not found)
  158. +fi
  159. +
  160. +dnl ---------------------------------------------
  161. +dnl libxml2
  162. +dnl ---------------------------------------------
  163. +dnl Test for libxml2
  164. +AC_PATH_PROG(LIBXML2_CONFIG,xml2-config,no)
  165. +if test "$LIBXML2_CONFIG" = "no" ; then
  166. +       AC_MSG_ERROR(libxml2 needed and xml2-config not found)
  167. +else
  168. +       XML2_LIBS="`$LIBXML2_CONFIG --libs`"
  169. +       XML2_FLAG="`$LIBXML2_CONFIG --cflags`"
  170. +       AC_DEFINE(HAVE_LIBXML2,,[LIBXML2 support])
  171. +fi
  172. +AC_SUBST(XML2_LIBS)
  173. +AC_SUBST(XML2_FLAG)
  174. +
  175. +dnl ---------------------------------------------
  176. +dnl libasound2
  177. +dnl ---------------------------------------------
  178. +dnl Test for ALSA
  179. +AM_PATH_ALSA(1.0.9,
  180. +       [ AC_DEFINE(HAVE_ALSA,1,[Define this if you have Alsa (libasound) installed]) ],
  181. +       AC_MSG_RESULT(libasound needed and not found))
  182. +AM_CONDITIONAL(HAVE_ALSA, test x"$no_alsa" != "yes")
  183. +
  184. +
  185. +dnl ---------------------------------------------
  186. +dnl check for gtk+-2.0
  187. +dnl ---------------------------------------------
  188. +dnl PKG_CHECK_MODULES(GTK, gtk+-2.0)
  189. +dnl AC_SUBST(GTK_CFLAGS)
  190. +dnl AC_SUBST(GTK_LIBS)
  191. +
  192. +
  193. +dnl ---------------------------------------------
  194. +dnl check for X11, Xv and XF86VidModeExtension
  195. +dnl ---------------------------------------------
  196. +AC_PATH_XTRA
  197. +AC_ARG_WITH([xinerama],
  198. +    [AS_HELP_STRING([--without-xinerama], [Disable Xinerama extension support (default: check)])])
  199. +if test x"$no_x" != x"yes"; then
  200. +    dnl check for Xshm
  201. +    AC_CHECK_LIB([Xext],[XShmCreateImage],
  202. +       [AC_DEFINE([HAVE_X11],,[X11 support])
  203. +       X11_CFLAGS="$X_CFLAGS"
  204. +       X11_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext"
  205. +
  206. +       dnl check for Xv
  207. +       AC_CHECK_LIB([Xv],[XvShmCreateImage],
  208. +           [AC_DEFINE([HAVE_XV],,[Xv support])
  209. +           X11_LIBS="$X11_LIBS -lXv"],,
  210. +           [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
  211. +
  212. +       if test "x$with_xinerama" != "xno"; then
  213. +               dnl check for Xinerama
  214. +               AC_CHECK_LIB([Xinerama],[XineramaQueryScreens],
  215. +                   [AC_DEFINE([HAVE_XINERAMA],,[Xinerama support])
  216. +                   X11_LIBS="$X11_LIBS -lXinerama"],,
  217. +                   [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
  218. +       fi
  219. +
  220. +       dnl check for XTest
  221. +        AC_CHECK_LIB([Xtst],[XTestFakeKeyEvent],
  222. +            [AC_DEFINE([HAVE_XTESTEXTENSION],,[XTest support])
  223. +            X11_LIBS="$X11_LIBS -lXtst"],,
  224. +           [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
  225. +
  226. +       dnl check for Xvidmode
  227. +       AC_CHECK_LIB([Xxf86vm],[XF86VidModeGetModeLine],
  228. +           [AC_DEFINE([HAVE_XF86VIDMODE],,[XF86VidModeExtension support])
  229. +           X11_LIBS="$X11_LIBS -lXxf86vm"],,
  230. +           [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])],,
  231. +       [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS])
  232. +else
  233. +    AC_MSG_ERROR(X needed and no X libraries or development headers found)
  234. +fi
  235. +AC_SUBST(X11_CFLAGS)
  236. +AC_SUBST(X11_LIBS)
  237. +
  238. +dnl This stuff looked kinda cool in the mpeg2dec source tree.
  239. +
  240. +dnl GCC-specific flags
  241. +if test x"$GCC" = x"yes"; then
  242. +
  243. +    dnl -Wall -Werror moved to the end to not disturb the configure script
  244. +
  245. +    dnl -O3
  246. +    changequote(<<,>>)
  247. +    OPT_CFLAGS=`echo "$CFLAGS"|sed "s/-O[0-9]*//g;"`
  248. +    changequote([,])
  249. +    OPT_CFLAGS="$OPT_CFLAGS -O3"
  250. +    AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS])
  251. +
  252. +    dnl -fomit-frame-pointer
  253. +    OPT_CFLAGS="$CFLAGS -fomit-frame-pointer"
  254. +    AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS])
  255. +
  256. +    dnl -std=gnu99
  257. +    OPT_CFLAGS="$CFLAGS -std=gnu99"
  258. +    AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS])
  259. +
  260. +    dnl arch-specific flags
  261. +    case "$host_alias" in
  262. +    i?86-* | k?-*)
  263. +           AC_DEFINE([ARCH_X86],,[x86 architecture])
  264. +           AC_DEFINE([ARCH_386],,[386 architecture])
  265. +           ARCH_X86=yes
  266. +           ARCH_386=yes
  267. +           OPT_CFLAGS="$CFLAGS"
  268. +           AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);;
  269. +    x86_64-*)
  270. +            AC_DEFINE([ARCH_X86],,[x86 architecture])
  271. +            AC_DEFINE([ARCH_X86_64],,[x86_64 architecture])
  272. +            ARCH_X86=yes
  273. +            ARCH_X86_64=yes;;
  274. +    ppc-* | powerpc-*)
  275. +           OPT_CFLAGS="$CFLAGS -Wa,-m7400"
  276. +           AC_TRY_CFLAGS([$OPT_CFLAGS],
  277. +           [CFLAGS=$OPT_CFLAGS; AC_DEFINE([ARCH_PPC],,[ppc architecture])]);;
  278. +    sparc-* | sparc64-*)
  279. +           OPT_CFLAGS="$CFLAGS -mcpu=ultrasparc -mvis -Wa,-Av9"
  280. +           AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);;
  281. +    mips-sgi-irix6.*)  dnl do we need to be that specific ?
  282. +           OPT_CFLAGS="$CFLAGS -mabi=64"
  283. +           AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);;
  284. +    esac
  285. +elif test x"$CC" = x"tcc"; then
  286. +    dnl TenDRA portability checking compiler
  287. +    CFLAGS="-Xp -Yansi -f`pwd`/include/tendra.h"
  288. +    enable_mlib=no
  289. +    no_x=yes
  290. +    enable_sdl=no
  291. +else
  292. +    dnl non-gcc flags - we probably need exact configuration triplets here.
  293. +    case "$host_alias" in
  294. +    mips-sgi-irix6.*)
  295. +       OPT_CFLAGS="$CFLAGS -64"
  296. +       AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);;
  297. +    sparc-sun-solaris*)
  298. +       OPT_CFLAGS="$CFLAGS -xCC -fast -xO5"
  299. +       AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);;
  300. +    esac
  301. +fi
  302. +AM_CONDITIONAL(ARCH_X86, [test "$ARCH_X86" = "yes"])
  303. +AM_CONDITIONAL(ARCH_386, [test "$ARCH_386" = "yes"])
  304. +AM_CONDITIONAL(ARCH_X86_64, [test "$ARCH_X86_64" = "yes"])
  305. +
  306. +dnl Checks for library functions.
  307. +AC_CHECK_FUNCS([memalign])
  308. +AC_TYPE_SIGNAL
  309. +
  310. +dnl Checks for typedefs, structures, and compiler characteristics.
  311. +AC_C_CONST
  312. +AC_C_INLINE
  313. +AC_TYPE_SIZE_T
  314. +AC_C_BIGENDIAN
  315. +AC_C_ATTRIBUTE_ALIGNED
  316. +
  317. +AC_CONFIG_FILES([
  318. +       Makefile
  319. +       docs/Makefile
  320. +       data/Makefile
  321. +       plugins/Makefile
  322. +       src/Makefile
  323. +       intl/Makefile
  324. +       po/Makefile.in
  325. +       m4/Makefile
  326. +       docs/man/Makefile
  327. +       docs/man/de/Makefile
  328. +       docs/man/en/Makefile
  329. +       docs/man/es/Makefile
  330. +])
  331. +AC_OUTPUT
  332. diff -Nurp tvtime-1.0.2/docs/html/default.tvtime.xml tvtime-1.0.2-custom/docs/html/default.tvtime.xml
  333. --- tvtime-1.0.2/docs/html/default.tvtime.xml   2005-09-08 06:06:57.000000000 +0200
  334. +++ tvtime-1.0.2-custom/docs/html/default.tvtime.xml    2011-05-29 13:07:28.139040408 +0200
  335. @@ -116,13 +116,15 @@
  336.    <option name="VBIDevice" value="/dev/vbi0"/>
  337.  
  338.    <!--
  339. -    This sets the mixer device and channel to use.  The format is device
  340. -    name:channel name.  Valid channels are:
  341. +    This sets the mixer device and channel to use.  The format for OSS
  342. +    is device name:channel name.  Valid OSS channels are:
  343.        vol, bass, treble, synth, pcm, speaker, line, mic, cd, mix, pcm2,
  344.        rec, igain, ogain, line1, line2, line3, dig1, dig2, dig3, phin,
  345.        phout, video, radio, monitor
  346. +    The format for ALSA mixer is device/channel (e.g., "default/Line"
  347. +    or "hw:0/CD")
  348.     -->
  349. -  <option name="MixerDevice" value="/dev/mixer:line"/>
  350. +   <option name="MixerDevice" value="default/Line"/>
  351.  
  352.    <!--
  353.      This option enables 16:9 aspect ratio mode by default on startup.
  354. diff -Nurp tvtime-1.0.2/docs/man/en/tvtime.xml.5 tvtime-1.0.2-custom/docs/man/en/tvtime.xml.5
  355. --- tvtime-1.0.2/docs/man/en/tvtime.xml.5       2005-09-08 06:05:35.000000000 +0200
  356. +++ tvtime-1.0.2-custom/docs/man/en/tvtime.xml.5        2011-05-29 13:07:28.139040408 +0200
  357. @@ -234,7 +234,10 @@ This sets which device to use for VBI de
  358.  .TP
  359.  <option name="MixerDevice" value="/dev/mixer:line"/>
  360.  This sets the mixer device and channel to use.  The format is device
  361. -name:channel name.  Valid channels are:
  362. +name:channel name for OSS mixer (e.g., "/dev/mixer:Line") or device/channel
  363. +for ALSA (e.g., "hw:0/CD").
  364. +
  365. +Valid OSS channels are:
  366.  
  367.  .nh
  368.  .IR vol ", " bass ", " treble ", " synth ", " pcm ", " speaker ", "
  369. diff -Nurp tvtime-1.0.2/plugins/greedyh.asm tvtime-1.0.2-custom/plugins/greedyh.asm
  370. --- tvtime-1.0.2/plugins/greedyh.asm    2005-08-14 18:16:43.000000000 +0200
  371. +++ tvtime-1.0.2-custom/plugins/greedyh.asm     2011-05-29 13:07:28.085706424 +0200
  372. @@ -18,7 +18,7 @@
  373.  
  374.  #include "x86-64_macros.inc"
  375.  
  376. -void DScalerFilterGreedyH::FUNCT_NAME(TDeinterlaceInfo* pInfo)
  377. +void FUNCT_NAME(TDeinterlaceInfo* pInfo)
  378.  {
  379.      int64_t i;
  380.      bool InfoIsOdd = (pInfo->PictureHistory[0]->Flags & PICTURE_INTERLACED_ODD) ? 1 : 0;
  381. diff -Nurp tvtime-1.0.2/plugins/tomsmocomp/TomsMoCompAll2.inc tvtime-1.0.2-custom/plugins/tomsmocomp/TomsMoCompAll2.inc
  382. --- tvtime-1.0.2/plugins/tomsmocomp/TomsMoCompAll2.inc  2004-10-20 17:31:05.000000000 +0200
  383. +++ tvtime-1.0.2-custom/plugins/tomsmocomp/TomsMoCompAll2.inc   2011-05-29 13:07:28.085706424 +0200
  384. @@ -5,9 +5,9 @@
  385.  #endif
  386.  
  387.  #ifdef USE_STRANGE_BOB
  388. -#define SEARCH_EFFORT_FUNC(n) DScalerFilterTomsMoComp::SEFUNC(n##_SB)
  389. +#define SEARCH_EFFORT_FUNC(n) SEFUNC(n##_SB)
  390.  #else
  391. -#define SEARCH_EFFORT_FUNC(n) DScalerFilterTomsMoComp::SEFUNC(n)
  392. +#define SEARCH_EFFORT_FUNC(n) SEFUNC(n)
  393.  #endif
  394.  
  395.  int SEARCH_EFFORT_FUNC(0)              // we don't try at all ;-)
  396. diff -Nurp tvtime-1.0.2/plugins/tomsmocomp.cpp tvtime-1.0.2-custom/plugins/tomsmocomp.cpp
  397. --- tvtime-1.0.2/plugins/tomsmocomp.cpp 2004-10-20 19:38:04.000000000 +0200
  398. +++ tvtime-1.0.2-custom/plugins/tomsmocomp.cpp  2011-05-29 13:07:28.089039798 +0200
  399. @@ -31,7 +31,7 @@ public:
  400.  
  401.  #define IS_MMX
  402.  #define SSE_TYPE MMX
  403. -#define FUNCT_NAME DScalerFilterTomsMoComp::filterDScaler_MMX
  404. +#define FUNCT_NAME filterDScaler_MMX
  405.  #include "tomsmocomp/TomsMoCompAll.inc"
  406.  #undef  IS_MMX
  407.  #undef  SSE_TYPE
  408. @@ -39,7 +39,7 @@ public:
  409.  
  410.  #define IS_3DNOW
  411.  #define SSE_TYPE 3DNOW
  412. -#define FUNCT_NAME DScalerFilterTomsMoComp::filterDScaler_3DNOW
  413. +#define FUNCT_NAME filterDScaler_3DNOW
  414.  #include "tomsmocomp/TomsMoCompAll.inc"
  415.  #undef  IS_3DNOW
  416.  #undef  SSE_TYPE
  417. @@ -47,7 +47,7 @@ public:
  418.  
  419.  #define IS_SSE
  420.  #define SSE_TYPE SSE
  421. -#define FUNCT_NAME DScalerFilterTomsMoComp::filterDScaler_SSE
  422. +#define FUNCT_NAME filterDScaler_SSE
  423.  #include "tomsmocomp/TomsMoCompAll.inc"
  424.  #undef  IS_SSE
  425.  #undef  SSE_TYPE
  426. diff -Nurp tvtime-1.0.2/src/commands.c tvtime-1.0.2-custom/src/commands.c
  427. --- tvtime-1.0.2/src/commands.c 2005-11-10 03:39:05.000000000 +0100
  428. +++ tvtime-1.0.2-custom/src/commands.c  2011-05-29 13:07:28.169040774 +0200
  429. @@ -128,6 +128,7 @@ struct commands_s {
  430.      int togglepulldowndetection;
  431.      int togglematte;
  432.      int togglequiet;
  433. +    int changedoverscan;
  434.      int framerate;
  435.      int scan_channels;
  436.      int pause;
  437. @@ -2900,7 +2901,7 @@ void commands_handle( commands_t *cmd, i
  438.      case TVTIME_OVERSCAN_DOWN:
  439.          cmd->overscan = cmd->overscan + ( (tvtime_cmd == TVTIME_OVERSCAN_UP) ? 0.0025 : -0.0025 );
  440.          if( cmd->overscan > 0.4 ) cmd->overscan = 0.4; if( cmd->overscan < 0.0 ) cmd->overscan = 0.0;
  441. -
  442. +        cmd->changedoverscan = 1;
  443.          if( cmd->osd ) {
  444.              char message[ 200 ];
  445.              snprintf( message, sizeof( message ), _("Overscan: %.1f%%"),
  446. @@ -3056,10 +3057,10 @@ void commands_handle( commands_t *cmd, i
  447.          break;
  448.  
  449.      case TVTIME_MIXER_TOGGLE_MUTE:
  450. -        mixer_mute( !mixer_ismute() );
  451. +        mixer->mute( !mixer->ismute() );
  452.  
  453.          if( cmd->osd ) {
  454. -            tvtime_osd_show_data_bar( cmd->osd, _("Volume"), (mixer_get_volume()) & 0xff );
  455. +            tvtime_osd_show_data_bar( cmd->osd, _("Volume"), (mixer->get_volume()) & 0xff );
  456.          }
  457.          break;
  458.  
  459. @@ -3073,9 +3074,9 @@ void commands_handle( commands_t *cmd, i
  460.          /* Check to see if an argument was passed, if so, use it. */
  461.          if (atoi(arg) > 0) {
  462.              int perc = atoi(arg);
  463. -            volume = mixer_set_volume( ( (tvtime_cmd == TVTIME_MIXER_UP) ? perc : -perc ) );
  464. +            volume = mixer->set_volume( ( (tvtime_cmd == TVTIME_MIXER_UP) ? perc : -perc ) );
  465.          } else {
  466. -            volume = mixer_set_volume( ( (tvtime_cmd == TVTIME_MIXER_UP) ? 1 : -1 ) );
  467. +            volume = mixer->set_volume( ( (tvtime_cmd == TVTIME_MIXER_UP) ? 1 : -1 ) );
  468.          }
  469.  
  470.          if( cmd->osd ) {
  471. @@ -3492,6 +3493,7 @@ void commands_next_frame( commands_t *cm
  472.      cmd->togglepulldowndetection = 0;
  473.      cmd->togglematte = 0;
  474.      cmd->togglequiet = 0;
  475. +    cmd->changedoverscan = 0;
  476.      cmd->resizewindow = 0;
  477.      cmd->setdeinterlacer = 0;
  478.      cmd->setfreqtable = 0;
  479. @@ -3539,6 +3541,11 @@ int commands_toggle_aspect( commands_t *
  480.      return cmd->toggleaspect;
  481.  }
  482.  
  483. +int commands_get_changed_overscan( commands_t *cmd )
  484. +{
  485. +    return cmd->changedoverscan;
  486. +}
  487. +
  488.  int commands_toggle_alwaysontop( commands_t *cmd )
  489.  {
  490.      return cmd->togglealwaysontop;
  491. diff -Nurp tvtime-1.0.2/src/commands.c.orig tvtime-1.0.2-custom/src/commands.c.orig
  492. --- tvtime-1.0.2/src/commands.c.orig    1970-01-01 01:00:00.000000000 +0100
  493. +++ tvtime-1.0.2-custom/src/commands.c.orig     2011-05-29 13:07:28.102373294 +0200
  494. @@ -0,0 +1,3771 @@
  495. +/**
  496. + * Copyright (C) 2002 Doug Bell <drbell@users.sourceforge.net>.
  497. + * Copyright (C) 2003 Billy Biggs <vektor@dumbterm.net>.
  498. + *
  499. + * This program is free software; you can redistribute it and/or modify
  500. + * it under the terms of the GNU General Public License as published by
  501. + * the Free Software Foundation; either version 2, or (at your option)
  502. + * any later version.
  503. + *
  504. + * This program is distributed in the hope that it will be useful,
  505. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  506. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  507. + * GNU General Public License for more details.
  508. + *
  509. + * You should have received a copy of the GNU General Public License
  510. + * along with this program; if not, write to the Free Software Foundation,
  511. + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  512. + */
  513. +
  514. +#include <stdio.h>
  515. +#include <stdlib.h>
  516. +#include <string.h>
  517. +#include <unistd.h>
  518. +#include <ctype.h>
  519. +#include <time.h>
  520. +#ifdef HAVE_CONFIG_H
  521. +# include "config.h"
  522. +#endif
  523. +#ifdef ENABLE_NLS
  524. +# define _(string) gettext (string)
  525. +# include "gettext.h"
  526. +#else
  527. +# define _(string) (string)
  528. +#endif
  529. +#include "station.h"
  530. +#include "mixer.h"
  531. +#include "input.h"
  532. +#include "commands.h"
  533. +#include "utils.h"
  534. +#include "xmltv.h"
  535. +#include "tvtimeglyphs.h"
  536. +
  537. +#define NUM_FAVORITES 9
  538. +#define MAX_USER_MENUS 64
  539. +
  540. +/* Maximum number of steps to increment sleeptimer. */
  541. +#define SLEEPTIMER_NUMSTEPS 13
  542. +
  543. +enum menu_type
  544. +{
  545. +    MENU_REDIRECT,
  546. +    MENU_FAVORITES,
  547. +    MENU_USER
  548. +};
  549. +
  550. +typedef struct menu_names_s {
  551. +    const char *name;
  552. +    int menutype;
  553. +    const char *dest;
  554. +} menu_names_t;
  555. +
  556. +static menu_names_t menu_table[] = {
  557. +    { "root", MENU_REDIRECT, "root-tuner" },
  558. +    { "picture", MENU_REDIRECT, "picture-tuner" },
  559. +    { "input", MENU_REDIRECT, "input-ntsc" },
  560. +    { "favorites", MENU_FAVORITES, 0 },
  561. +};
  562. +
  563. +static int tvtime_num_builtin_menus( void )
  564. +{
  565. +    return ( sizeof( menu_table ) / sizeof( menu_names_t ) );
  566. +}
  567. +
  568. +static void set_redirect( const char *menu, const char *dest )
  569. +{
  570. +    int i;
  571. +
  572. +    for( i = 0; i < tvtime_num_builtin_menus(); i++ ) {
  573. +        if( !strcasecmp( menu, menu_table[ i ].name ) ) {
  574. +            menu_table[ i ].dest = dest;
  575. +            return;
  576. +        }
  577. +    }
  578. +}
  579. +
  580. +
  581. +static int sleeptimer_function( int step )
  582. +{
  583. +    if( step < 3 ) {
  584. +       return step * 10;
  585. +    } else {
  586. +       return (step - 2) * 30;
  587. +    }
  588. +}
  589. +
  590. +struct commands_s {
  591. +    config_t *cfg;
  592. +    videoinput_t *vidin;
  593. +    tvtime_osd_t *osd;
  594. +    station_mgr_t *stationmgr;
  595. +    char next_chan_buffer[ 5 ];
  596. +    int frame_counter;
  597. +    int digit_counter;
  598. +    int quit;
  599. +    int sleeptimer;
  600. +    time_t sleeptimer_start;
  601. +
  602. +    xmltv_t *xmltv;
  603. +
  604. +    int picturemode;
  605. +    int brightness;
  606. +    int contrast;
  607. +    int saturation;
  608. +    int hue;
  609. +
  610. +    int boost;
  611. +
  612. +    int displayinfo;
  613. +    int screenshot;
  614. +    char screenshotfile[ 2048 ];
  615. +    int printdebug;
  616. +    int showbars;
  617. +    int showdeinterlacerinfo;
  618. +    int togglefullscreen;
  619. +    int toggleaspect;
  620. +    int togglealwaysontop;
  621. +    int toggledeinterlacer;
  622. +    int togglepulldowndetection;
  623. +    int togglematte;
  624. +    int togglequiet;
  625. +    int framerate;
  626. +    int scan_channels;
  627. +    int pause;
  628. +    int halfsize;
  629. +    int resizewindow;
  630. +    int restarttvtime;
  631. +    int setdeinterlacer;
  632. +    int normset;
  633. +    const char *newnorm;
  634. +    int newinputwidth;
  635. +    char deinterlacer[ 128 ];
  636. +    int setfreqtable;
  637. +    char newfreqtable[ 128 ];
  638. +    int checkfreq;
  639. +    int usexds;
  640. +    int pulldown_alg;
  641. +    char newmatte[ 16 ];
  642. +    char newpos[ 16 ];
  643. +
  644. +    int delay;
  645. +
  646. +    int change_channel;
  647. +    int renumbering;
  648. +    int xmltvupdated;
  649. +    int tunerreset;
  650. +
  651. +    int apply_invert;
  652. +    int apply_mirror;
  653. +    int apply_chroma_kill;
  654. +
  655. +    double overscan;
  656. +
  657. +    vbidata_t *vbi;
  658. +    int capturemode;
  659. +
  660. +    int curfavorite;
  661. +    int numfavorites;
  662. +    int favorites[ NUM_FAVORITES ];
  663. +
  664. +    int menuactive;
  665. +    int curmenu;
  666. +    int curmenupos;
  667. +    int curmenusize;
  668. +    menu_t *curusermenu;
  669. +    menu_t *menus[ MAX_USER_MENUS ];
  670. +};
  671. +
  672. +static void menu_set_value( menu_t *menu, int newval, const char *icon )
  673. +{
  674. +    char string[ 128 ];
  675. +    snprintf( string, sizeof( string ), "%s  %s: %d",
  676. +              icon, _("Current"), newval );
  677. +    menu_set_text( menu, 1, string );
  678. +}
  679. +
  680. +static void update_xmltv_channel( commands_t *cmd )
  681. +{
  682. +    if( cmd->xmltv && cmd->osd ) {
  683. +        if( station_get_current_xmltv_id( cmd->stationmgr ) ) {
  684. +            xmltv_set_channel( cmd->xmltv, station_get_current_xmltv_id( cmd->stationmgr ) );
  685. +        } else {
  686. +            xmltv_set_channel( cmd->xmltv, xmltv_lookup_channel( cmd->xmltv,
  687. +                               station_get_current_channel_name( cmd->stationmgr ) ) );
  688. +        }
  689. +    } else if( cmd->osd ) {
  690. +        tvtime_osd_show_program_info( cmd->osd, 0, 0, 0 );
  691. +        tvtime_osd_set_info_available( cmd->osd, 0 );
  692. +    }
  693. +}
  694. +
  695. +static void display_xmltv_description( commands_t *cmd, const char *title,
  696. +                                       const char *subtitle,
  697. +                                       const char *description,
  698. +                                       const char *next_title )
  699. +{
  700. +    int cur = 0;
  701. +
  702. +    if( title ) {
  703. +        /* Using set_multitext for one line only gives you the truncating. */
  704. +        cur = tvtime_osd_list_set_multitext( cmd->osd, cur, title, 1 );
  705. +    } else {
  706. +        tvtime_osd_list_set_text( cmd->osd, cur++,
  707. +        /* TRANSLATORS: This refers to a TV program, not a computer program. */
  708. +                                  _("No program information available") );
  709. +    }
  710. +
  711. +    if( subtitle && *subtitle ) {
  712. +        cur = tvtime_osd_list_set_multitext( cmd->osd, cur, subtitle, 1 );
  713. +    } else {
  714. +        tvtime_osd_list_set_text( cmd->osd, cur++,
  715. +                                  _("No program information available") );
  716. +    }
  717. +
  718. +    if( description && *description ) {
  719. +        tvtime_osd_list_set_text( cmd->osd, cur++, "" );
  720. +        cur = tvtime_osd_list_set_multitext( cmd->osd, cur, description, 6 );
  721. +    }
  722. +
  723. +    if( next_title && *next_title ) {
  724. +        tvtime_osd_list_set_text( cmd->osd, cur++, "" );
  725. +        cur = tvtime_osd_list_set_multitext( cmd->osd, cur, next_title, 1 );
  726. +    }
  727. +    tvtime_osd_list_set_lines( cmd->osd, cur );
  728. +    tvtime_osd_list_set_hilight( cmd->osd, -1 );
  729. +    tvtime_osd_show_list( cmd->osd, 1, 1 );
  730. +}
  731. +
  732. +static void update_xmltv_display( commands_t *cmd )
  733. +{
  734. +    if( cmd->xmltv && cmd->osd ) {
  735. +        const char *desc;
  736. +        const char *title;
  737. +        time_t timestamp;
  738. +        char start_time[ 50 ];
  739. +        char end_time[ 50 ];
  740. +        char next_title[ 1024 ];
  741. +        char subtitle[ 1024 ];
  742. +
  743. +        timestamp = xmltv_get_start_time( cmd->xmltv );
  744. +        if( timestamp == 0 ) {
  745. +            /* No information available */
  746. +            start_time[0] = '\0';
  747. +            end_time[0] = '\0';
  748. +            subtitle[0] = '\0';
  749. +            title = 0;
  750. +            desc = 0;
  751. +        } else {
  752. +            strftime( start_time, 50, "%H:%M", localtime( &timestamp ) );
  753. +            timestamp = xmltv_get_end_time( cmd->xmltv );
  754. +            strftime( end_time, 50, "%H:%M", localtime( &timestamp ) );
  755. +
  756. +            if( xmltv_get_sub_title( cmd->xmltv ) ) {
  757. +               snprintf( subtitle, sizeof( subtitle ), "%s - %s - %s",
  758. +                         start_time, end_time,
  759. +                         xmltv_get_sub_title( cmd->xmltv ) );
  760. +            } else {
  761. +               snprintf( subtitle, sizeof( subtitle ), "%s - %s",
  762. +                         start_time, end_time );
  763. +            }
  764. +
  765. +            title = xmltv_get_title( cmd->xmltv );
  766. +            desc = xmltv_get_description( cmd->xmltv );
  767. +        }
  768. +
  769. +        if( xmltv_get_next_title( cmd->xmltv ) ) {
  770. +            snprintf( next_title, sizeof( next_title ),
  771. +                      _("Next: %s"), xmltv_get_next_title( cmd->xmltv ) );
  772. +        } else {
  773. +            *next_title = '\0';
  774. +        }
  775. +
  776. +        if( !cmd->displayinfo || cmd->menuactive ) {
  777. +            tvtime_osd_show_program_info( cmd->osd, title, subtitle, next_title );
  778. +            tvtime_osd_set_info_available( cmd->osd, desc && *desc );
  779. +        } else {
  780. +            tvtime_osd_show_program_info( cmd->osd, 0, 0, 0 );
  781. +            display_xmltv_description( cmd, title, subtitle, desc, next_title );
  782. +            tvtime_osd_set_info_available( cmd->osd, 0 );
  783. +        }
  784. +    }
  785. +}
  786. +
  787. +static void update_xmltv_listings( commands_t *cmd )
  788. +{
  789. +    if( cmd->xmltv && cmd->osd && cmd->vidin &&
  790. +        videoinput_has_tuner( cmd->vidin ) &&
  791. +        xmltv_needs_refresh( cmd->xmltv ) ) {
  792. +
  793. +        xmltv_refresh( cmd->xmltv );
  794. +        update_xmltv_display( cmd );
  795. +        cmd->xmltvupdated = 1;
  796. +    }
  797. +}
  798. +
  799. +static void reset_stations_menu( menu_t *menu, int ntsc, int pal, int secam,
  800. +                                 int ntsccable, int active, int signaldetect,
  801. +                                 int scanning, int v4l2, int default_paldk,
  802. +                                 int paldk )
  803. +{
  804. +    char string[ 128 ];
  805. +    int cur;
  806. +
  807. +    /* Start over. */
  808. +    menu_reset_num_lines( menu );
  809. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "root" );
  810. +    cur = 1;
  811. +
  812. +    if( !ntsc ) {
  813. +        snprintf( string, sizeof( string ), TVTIME_ICON_RENUMBERCHANNEL "  %s",
  814. +                  _("Renumber current channel") );
  815. +        menu_set_text( menu, cur, string );
  816. +        menu_set_enter_command( menu, cur, TVTIME_CHANNEL_RENUMBER, "" );
  817. +        cur++;
  818. +    }
  819. +
  820. +    if( active ) {
  821. +        snprintf( string, sizeof( string ), TVTIME_ICON_GENERALTOGGLEON "  %s",
  822. +                  _("Current channel active in list") );
  823. +    } else {
  824. +        snprintf( string, sizeof( string ), TVTIME_ICON_GENERALTOGGLEOFF "  %s",
  825. +                  _("Current channel active in list") );
  826. +    }
  827. +    menu_set_text( menu, cur, string );
  828. +    menu_set_enter_command( menu, cur, TVTIME_CHANNEL_SKIP, "" );
  829. +    cur++;
  830. +
  831. +    if( signaldetect ) {
  832. +        if( scanning ) {
  833. +            snprintf( string, sizeof( string ),
  834. +                      TVTIME_ICON_SCANFORSTATIONS "  %s",
  835. +                      _("Stop channel scan") );
  836. +        } else {
  837. +            snprintf( string, sizeof( string ),
  838. +                      TVTIME_ICON_SCANFORSTATIONS "  %s",
  839. +                      _("Scan channels for signal") );
  840. +        }
  841. +        menu_set_text( menu, cur, string );
  842. +        menu_set_enter_command( menu, cur, TVTIME_CHANNEL_SCAN, "" );
  843. +        cur++;
  844. +    }
  845. +
  846. +    snprintf( string, sizeof( string ), TVTIME_ICON_ALLCHANNELSACTIVE "  %s",
  847. +              _("Reset all channels as active") );
  848. +    menu_set_text( menu, cur, string );
  849. +    menu_set_enter_command( menu, cur, TVTIME_CHANNEL_ACTIVATE_ALL, "" );
  850. +    cur++;
  851. +
  852. +    snprintf( string, sizeof( string ), TVTIME_ICON_FINETUNECHANNEL "  %s",
  853. +              _("Finetune current channel") );
  854. +    menu_set_text( menu, cur, string );
  855. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "finetune" );
  856. +    cur++;
  857. +
  858. +    if( ntsccable ) {
  859. +        snprintf( string, sizeof( string ), TVTIME_ICON_CHANGENTSCMODE "  %s",
  860. +                  _("Change NTSC cable mode") );
  861. +        menu_set_text( menu, cur, string );
  862. +        menu_set_enter_command( menu, cur, TVTIME_TOGGLE_NTSC_CABLE_MODE, "" );
  863. +        cur++;
  864. +    } else if( pal || secam ) {
  865. +        snprintf( string, sizeof( string ), TVTIME_ICON_TVLOGO "  %s", pal?
  866. +                  _("Set current channel as SECAM"):
  867. +                  _("Set current channel as PAL") );
  868. +        menu_set_text( menu, cur, string );
  869. +        menu_set_enter_command( menu, cur, TVTIME_TOGGLE_PAL_SECAM, "" );
  870. +        cur++;
  871. +    }
  872. +
  873. +    if( pal && v4l2 ) {
  874. +        const char *amode = "PAL-BG";
  875. +        if( paldk == VIDEOINPUT_PAL_I_AUDIO ) {
  876. +            amode = "PAL-I";
  877. +        } else if( paldk == VIDEOINPUT_PAL_DK_AUDIO ) {
  878. +            amode = "PAL-DK";
  879. +        }
  880. +        snprintf( string, sizeof( string ),
  881. +                  TVTIME_ICON_VIDEOINPUT "  %s (%s)",
  882. +                  _("Switch audio standard"), amode );
  883. +        menu_set_text( menu, cur, string );
  884. +        menu_set_enter_command( menu, cur, TVTIME_TOGGLE_CHANNEL_PAL_DK, "" );
  885. +        cur++;
  886. +    }
  887. +
  888. +    snprintf( string, sizeof( string ), TVTIME_ICON_FREQUENCYTABLESEL "  %s",
  889. +              _("Change frequency table") );
  890. +    menu_set_text( menu, cur, string );
  891. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "frequencies" );
  892. +    cur++;
  893. +
  894. +    snprintf( string, sizeof( string ), TVTIME_ICON_STATIONMANAGEMENT "  %s",
  895. +              signaldetect?  _("Disable signal detection"):
  896. +              _("Enable signal detection") );
  897. +    menu_set_text( menu, cur, string );
  898. +    menu_set_enter_command( menu, cur, TVTIME_TOGGLE_SIGNAL_DETECTION, "" );
  899. +    cur++;
  900. +
  901. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  902. +              _("Back") );
  903. +    menu_set_text( menu, cur, string );
  904. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "root" );
  905. +}
  906. +
  907. +static void reset_xmltv_languages_menu( menu_t *menu, xmltv_t *xmltv )
  908. +{
  909. +    int num = xmltv_get_num_languages( xmltv );
  910. +    const char *cur = xmltv_get_language( xmltv );
  911. +    char string[ 128 ];
  912. +    int i;
  913. +
  914. +    if( !xmltv ) return;
  915. +
  916. +    menu_reset_num_lines( menu );
  917. +    menu_set_back_command( menu, TVTIME_MENU_EXIT, 0 );
  918. +    snprintf( string, sizeof( string ), "%s  %s",
  919. +              cur? TVTIME_ICON_RADIOOFF : TVTIME_ICON_RADIOON,
  920. +              _("Default language") );
  921. +    menu_set_text( menu, 1, string );
  922. +    menu_set_enter_command( menu, 1, TVTIME_SET_XMLTV_LANGUAGE, "none" );
  923. +
  924. +    for( i = 1; i <= num; i++ ) {
  925. +        const char *code = xmltv_get_language_code( xmltv, i );
  926. +        const char *name = xmltv_get_language_name( xmltv, i );
  927. +        const char *radio;
  928. +
  929. +        if( cur && code && !strncasecmp( cur, code, 2 ) ) {
  930. +            radio = TVTIME_ICON_RADIOON;
  931. +        } else {
  932. +            radio = TVTIME_ICON_RADIOOFF;
  933. +        }
  934. +
  935. +        snprintf( string, sizeof( string ), "%s  %s (%s)",
  936. +                  radio, name? name : _("Unknown language"), code );
  937. +        menu_set_text( menu, i + 1, string );
  938. +        menu_set_enter_command( menu, i + 1,
  939. +                                TVTIME_SET_XMLTV_LANGUAGE, code );
  940. +    }
  941. +
  942. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  943. +              _("Back") );
  944. +    menu_set_text( menu, num + 2, string );
  945. +    menu_set_enter_command( menu, num + 2, TVTIME_MENU_EXIT, 0 );
  946. +}
  947. +
  948. +static void reinit_tuner( commands_t *cmd )
  949. +{
  950. +    /* Setup the tuner if available. */
  951. +    if( cmd->vbi ) {
  952. +        vbidata_reset( cmd->vbi );
  953. +        vbidata_capture_mode( cmd->vbi, cmd->capturemode );
  954. +    }
  955. +
  956. +    set_redirect( "root", "root-notuner" );
  957. +    set_redirect( "picture", "picture-notuner" );
  958. +
  959. +    if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  960. +        int norm;
  961. +
  962. +        set_redirect( "root", "root-tuner" );
  963. +        set_redirect( "picture", "picture-tuner" );
  964. +
  965. +        cmd->tunerreset = 1;
  966. +
  967. +        videoinput_set_tuner_freq( cmd->vidin, station_get_current_frequency( cmd->stationmgr )
  968. +                                   + ((station_get_current_finetune( cmd->stationmgr ) * 1000)/16) );
  969. +        menu_set_value( commands_get_menu( cmd, "finetune" ), station_get_current_finetune( cmd->stationmgr ), TVTIME_ICON_FINETUNECHANNEL );
  970. +        commands_refresh_menu( cmd );
  971. +
  972. +        norm = videoinput_get_norm_number( station_get_current_norm( cmd->stationmgr ) );
  973. +        if( norm >= 0 ) {
  974. +            videoinput_switch_pal_secam( cmd->vidin, norm );
  975. +        }
  976. +        videoinput_set_pal_audio_mode( cmd->vidin,
  977. +                                       station_get_current_audio_norm( cmd->stationmgr ) );
  978. +
  979. +        if( config_get_save_restore_picture( cmd->cfg ) ) {
  980. +            int brightness = station_get_current_brightness( cmd->stationmgr );
  981. +            int contrast = station_get_current_contrast( cmd->stationmgr );
  982. +            int saturation = station_get_current_saturation( cmd->stationmgr );
  983. +            int hue = station_get_current_hue( cmd->stationmgr );
  984. +
  985. +            if( brightness >= 0 ) {
  986. +                videoinput_set_brightness( cmd->vidin, brightness );
  987. +            } else {
  988. +                videoinput_set_brightness( cmd->vidin, cmd->brightness );
  989. +            }
  990. +            if( contrast >= 0 ) {
  991. +                videoinput_set_contrast( cmd->vidin, contrast );
  992. +            } else {
  993. +                videoinput_set_contrast( cmd->vidin, cmd->contrast );
  994. +            }
  995. +            if( saturation >= 0 ) {
  996. +                videoinput_set_saturation( cmd->vidin, saturation );
  997. +            } else {
  998. +                videoinput_set_saturation( cmd->vidin, cmd->saturation );
  999. +            }
  1000. +            if( hue >= 0 ) {
  1001. +                videoinput_set_hue( cmd->vidin, hue );
  1002. +            } else {
  1003. +                videoinput_set_hue( cmd->vidin, cmd->hue );
  1004. +            }
  1005. +        }
  1006. +
  1007. +        if( cmd->osd ) {
  1008. +            char channel_display[ 20 ];
  1009. +            const char *xmltv_name = 0;
  1010. +
  1011. +            snprintf( channel_display, sizeof( channel_display ), "%d",
  1012. +                      station_get_current_id( cmd->stationmgr ) );
  1013. +            update_xmltv_channel( cmd );
  1014. +            if ( cmd->xmltv && !strcmp( station_get_current_channel_name( cmd->stationmgr ), channel_display ) ) {
  1015. +                xmltv_name = xmltv_lookup_channel_name( cmd->xmltv, xmltv_get_channel( cmd->xmltv ) );
  1016. +                if ( xmltv_name ) {
  1017. +                    tvtime_osd_set_channel_name( cmd->osd, xmltv_name );
  1018. +                }
  1019. +            }
  1020. +            if ( !xmltv_name ) {
  1021. +                tvtime_osd_set_channel_name( cmd->osd, station_get_current_channel_name( cmd->stationmgr ) );
  1022. +            }
  1023. +            tvtime_osd_set_norm( cmd->osd, videoinput_get_norm_name( videoinput_get_norm( cmd->vidin ) ) );
  1024. +            tvtime_osd_set_audio_mode( cmd->osd, videoinput_get_audio_mode_name( cmd->vidin, videoinput_get_audio_mode( cmd->vidin ) ) );
  1025. +            tvtime_osd_set_freq_table( cmd->osd, station_get_current_band( cmd->stationmgr ) );
  1026. +            tvtime_osd_set_channel_number( cmd->osd, channel_display );
  1027. +            tvtime_osd_set_network_call( cmd->osd, station_get_current_network_call_letters( cmd->stationmgr ) );
  1028. +            tvtime_osd_set_network_name( cmd->osd, station_get_current_network_name( cmd->stationmgr ) );
  1029. +            tvtime_osd_set_show_name( cmd->osd, "" );
  1030. +            tvtime_osd_set_show_rating( cmd->osd, "" );
  1031. +            tvtime_osd_set_show_start( cmd->osd, "" );
  1032. +            tvtime_osd_set_show_length( cmd->osd, "" );
  1033. +            tvtime_osd_show_info( cmd->osd );
  1034. +
  1035. +            reset_stations_menu( commands_get_menu( cmd, "stations" ),
  1036. +                                 (videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC ||
  1037. +                                  videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC_JP),
  1038. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_PAL,
  1039. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_SECAM,
  1040. +                                 (!strcasecmp( cmd->newfreqtable, "us-cable" ) ||
  1041. +                                  !strcasecmp( cmd->newfreqtable, "us-cable100" )),
  1042. +                                 station_get_current_active( cmd->stationmgr ), cmd->checkfreq,
  1043. +                                 cmd->scan_channels,
  1044. +                                 videoinput_is_v4l2( cmd->vidin ),
  1045. +                                 station_get_default_audio_norm( cmd->stationmgr ),
  1046. +                                 station_get_current_audio_norm( cmd->stationmgr ) );
  1047. +            commands_refresh_menu( cmd );
  1048. +        }
  1049. +        cmd->frame_counter = 0;
  1050. +    } else if( cmd->osd ) {
  1051. +        tvtime_osd_set_audio_mode( cmd->osd, "" );
  1052. +        tvtime_osd_set_freq_table( cmd->osd, "" );
  1053. +        tvtime_osd_set_channel_number( cmd->osd, "" );
  1054. +        tvtime_osd_set_channel_name( cmd->osd, "" );
  1055. +        tvtime_osd_set_network_call( cmd->osd, "" );
  1056. +        tvtime_osd_set_network_name( cmd->osd, "" );
  1057. +        tvtime_osd_set_show_name( cmd->osd, "" );
  1058. +        tvtime_osd_set_show_rating( cmd->osd, "" );
  1059. +        tvtime_osd_set_show_start( cmd->osd, "" );
  1060. +        tvtime_osd_set_show_length( cmd->osd, "" );
  1061. +        tvtime_osd_show_program_info( cmd->osd, 0, 0, 0 );
  1062. +        tvtime_osd_set_info_available( cmd->osd, 0 );
  1063. +        tvtime_osd_show_info( cmd->osd );
  1064. +        tvtime_osd_clear( cmd->osd );
  1065. +    }
  1066. +
  1067. +    if( config_get_save_restore_picture( cmd->cfg ) && cmd->vidin && !videoinput_has_tuner( cmd->vidin ) ) {
  1068. +        if( cmd->brightness >= 0 ) {
  1069. +            videoinput_set_brightness( cmd->vidin, cmd->brightness );
  1070. +        }
  1071. +        if( cmd->contrast >= 0 ) {
  1072. +            videoinput_set_contrast( cmd->vidin, cmd->contrast );
  1073. +        }
  1074. +        if( cmd->saturation >= 0 ) {
  1075. +            videoinput_set_saturation( cmd->vidin, cmd->saturation );
  1076. +        }
  1077. +        if( cmd->hue >= 0 ) {
  1078. +            videoinput_set_hue( cmd->vidin, cmd->hue );
  1079. +        }
  1080. +    }
  1081. +
  1082. +    if( cmd->vidin ) {
  1083. +        menu_set_value (commands_get_menu (cmd, "brightness"),
  1084. +                        videoinput_get_brightness (cmd->vidin),
  1085. +                        TVTIME_ICON_BRIGHTNESS);
  1086. +        menu_set_value (commands_get_menu (cmd, "contrast"),
  1087. +                        videoinput_get_contrast (cmd->vidin),
  1088. +                        TVTIME_ICON_CONTRAST);
  1089. +        menu_set_value (commands_get_menu (cmd, "saturation"),
  1090. +                        videoinput_get_saturation (cmd->vidin),
  1091. +                        TVTIME_ICON_SATURATION);
  1092. +        menu_set_value (commands_get_menu (cmd, "hue"),
  1093. +                        videoinput_get_hue (cmd->vidin),
  1094. +                        TVTIME_ICON_HUE);
  1095. +    }
  1096. +}
  1097. +
  1098. +static void reset_pal_input_menu( menu_t *menu, videoinput_t *vidin, station_mgr_t *stationmgr )
  1099. +{
  1100. +    char string[ 128 ];
  1101. +    int cur = 2;
  1102. +
  1103. +    snprintf( string, sizeof( string ), TVTIME_ICON_STATIONMANAGEMENT "  %s",
  1104. +              _("Preferred audio mode") );
  1105. +    menu_set_text( menu, cur, string );
  1106. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "audiomode" );
  1107. +    cur++;
  1108. +
  1109. +    if( videoinput_is_v4l2( vidin ) ) {
  1110. +        const char *curnorm = "PAL-BG";
  1111. +        int defnorm = station_get_default_audio_norm( stationmgr );
  1112. +        if( defnorm == VIDEOINPUT_PAL_I_AUDIO ) {
  1113. +            curnorm = "PAL-I";
  1114. +        } else if( defnorm == VIDEOINPUT_PAL_DK_AUDIO ) {
  1115. +            curnorm = "PAL-DK";
  1116. +        }
  1117. +        snprintf( string, sizeof( string ),
  1118. +                  TVTIME_ICON_TVPGICON "  %s (%s)",
  1119. +                  _("Change default audio standard"), curnorm );
  1120. +        menu_set_text( menu, cur, string );
  1121. +        menu_set_enter_command( menu, cur, TVTIME_TOGGLE_PAL_DK_AUDIO, "" );
  1122. +        cur++;
  1123. +    }
  1124. +
  1125. +    snprintf( string, sizeof( string ), TVTIME_ICON_STATIONMANAGEMENT "  %s",
  1126. +              _("Audio volume boost") );
  1127. +    menu_set_text( menu, cur, string );
  1128. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "audioboost" );
  1129. +    cur++;
  1130. +
  1131. +    snprintf( string, sizeof( string ), TVTIME_ICON_TELEVISIONSTANDARD "  %s",
  1132. +              _("Television standard") );
  1133. +    menu_set_text( menu, cur, string );
  1134. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "norm" );
  1135. +    cur++;
  1136. +
  1137. +    snprintf( string, sizeof( string ), TVTIME_ICON_INPUTWIDTH "  %s",
  1138. +              _("Horizontal resolution") );
  1139. +    menu_set_text( menu, cur, string );
  1140. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "hres" );
  1141. +    cur++;
  1142. +
  1143. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1144. +              _("Back") );
  1145. +    menu_set_text( menu, cur, string );
  1146. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "root" );
  1147. +    cur++;
  1148. +}
  1149. +
  1150. +static void reset_frequency_menu( menu_t *menu, int norm, const char *tablename )
  1151. +{
  1152. +    char string[ 128 ];
  1153. +
  1154. +    if( norm == VIDEOINPUT_NTSC || norm == VIDEOINPUT_PAL_M || norm == VIDEOINPUT_PAL_NC ) {
  1155. +        snprintf( string, sizeof( string ),
  1156. +                  !strcasecmp( tablename, "us-cable" ) ?
  1157. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1158. +                  _("Cable") );
  1159. +        menu_set_text( menu, 1, string );
  1160. +        menu_set_enter_command( menu, 1, TVTIME_SET_FREQUENCY_TABLE, "us-cable" );
  1161. +        menu_set_back_command( menu, TVTIME_SHOW_MENU, "stations" );
  1162. +
  1163. +        snprintf( string, sizeof( string ),
  1164. +                  !strcasecmp( tablename, "us-broadcast" ) ?
  1165. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1166. +                  _("Broadcast") );
  1167. +        menu_set_text( menu, 2, string );
  1168. +        menu_set_enter_command( menu, 2, TVTIME_SET_FREQUENCY_TABLE, "us-broadcast" );
  1169. +
  1170. +        snprintf( string, sizeof( string ),
  1171. +                  !strcasecmp( tablename, "us-cable100" ) ?
  1172. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1173. +                  _("Cable with channels 100+") );
  1174. +        menu_set_text( menu, 3, string );
  1175. +        menu_set_enter_command( menu, 3, TVTIME_SET_FREQUENCY_TABLE, "us-cable100" );
  1176. +
  1177. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1178. +                  _("Back") );
  1179. +        menu_set_text( menu, 4, string );
  1180. +        menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "stations" );
  1181. +    } else if( norm == VIDEOINPUT_NTSC_JP ) {
  1182. +        snprintf( string, sizeof( string ),
  1183. +                  !strcasecmp( tablename, "japan-cable" ) ?
  1184. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1185. +                  _("Cable") );
  1186. +        menu_set_text( menu, 1, string );
  1187. +        menu_set_back_command( menu, TVTIME_SHOW_MENU, "stations" );
  1188. +        menu_set_enter_command( menu, 1, TVTIME_SET_FREQUENCY_TABLE, "japan-cable" );
  1189. +
  1190. +        snprintf( string, sizeof( string ),
  1191. +                  !strcasecmp( tablename, "japan-broadcast" ) ?
  1192. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1193. +                  _("Broadcast") );
  1194. +        menu_set_text( menu, 2, string );
  1195. +        menu_set_enter_command( menu, 2, TVTIME_SET_FREQUENCY_TABLE, "japan-broadcast" );
  1196. +
  1197. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1198. +                  _("Back") );
  1199. +        menu_set_text( menu, 3, string );
  1200. +        menu_set_enter_command( menu, 3, TVTIME_SHOW_MENU, "input" );
  1201. +    } else {
  1202. +        snprintf( string, sizeof( string ),
  1203. +                  !strcasecmp( tablename, "europe" ) ?
  1204. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1205. +                  _("Europe") );
  1206. +        menu_set_text( menu, 1, string );
  1207. +        menu_set_enter_command( menu, 1, TVTIME_SET_FREQUENCY_TABLE, "europe" );
  1208. +        menu_set_back_command( menu, TVTIME_SHOW_MENU, "stations" );
  1209. +
  1210. +        snprintf( string, sizeof( string ),
  1211. +                  !strcasecmp( tablename, "russia" ) ?
  1212. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1213. +                  _("Russia") );
  1214. +        menu_set_text( menu, 2, string );
  1215. +        menu_set_enter_command( menu, 2, TVTIME_SET_FREQUENCY_TABLE, "russia" );
  1216. +
  1217. +        snprintf( string, sizeof( string ),
  1218. +                  !strcasecmp( tablename, "france" ) ?
  1219. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1220. +                  _("France") );
  1221. +        menu_set_text( menu, 3, string );
  1222. +        menu_set_enter_command( menu, 3, TVTIME_SET_FREQUENCY_TABLE, "france" );
  1223. +
  1224. +        snprintf( string, sizeof( string ),
  1225. +                  !strcasecmp( tablename, "australia" ) ?
  1226. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1227. +                  _("Australia") );
  1228. +        menu_set_text( menu, 4, string );
  1229. +        menu_set_enter_command( menu, 4, TVTIME_SET_FREQUENCY_TABLE, "australia" );
  1230. +
  1231. +        snprintf( string, sizeof( string ),
  1232. +                  !strcasecmp( tablename, "australia-optus" ) ?
  1233. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1234. +                  _("Australia (Optus)") );
  1235. +        menu_set_text( menu, 5, string );
  1236. +        menu_set_enter_command( menu, 5, TVTIME_SET_FREQUENCY_TABLE, "australia-optus" );
  1237. +
  1238. +        snprintf( string, sizeof( string ),
  1239. +                  !strcasecmp( tablename, "newzealand" ) ?
  1240. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1241. +                  _("New Zealand") );
  1242. +        menu_set_text( menu, 6, string );
  1243. +        menu_set_enter_command( menu, 6, TVTIME_SET_FREQUENCY_TABLE, "newzealand" );
  1244. +
  1245. +        snprintf( string, sizeof( string ),
  1246. +                  !strcasecmp( tablename, "china-broadcast" ) ?
  1247. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1248. +                  _("China Broadcast") );
  1249. +        menu_set_text( menu, 7, string );
  1250. +        menu_set_enter_command( menu, 7, TVTIME_SET_FREQUENCY_TABLE, "china-broadcast" );
  1251. +        
  1252. +        snprintf( string, sizeof( string ),
  1253. +                  !strcasecmp( tablename, "southafrica" ) ?
  1254. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1255. +                  _("South Africa") );
  1256. +        menu_set_text( menu, 8, string );
  1257. +        menu_set_enter_command( menu, 8, TVTIME_SET_FREQUENCY_TABLE, "southafrica" );
  1258. +
  1259. +        snprintf( string, sizeof( string ),
  1260. +                  !strcasecmp( tablename, "custom" ) ?
  1261. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1262. +                  _("Custom (first run tvtime-scanner)") );
  1263. +        menu_set_text( menu, 9, string );
  1264. +        menu_set_enter_command( menu, 9, TVTIME_SET_FREQUENCY_TABLE, "custom" );
  1265. +
  1266. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1267. +                  _("Back") );
  1268. +        menu_set_text( menu, 10, string );
  1269. +        menu_set_enter_command( menu, 10, TVTIME_SHOW_MENU, "stations" );
  1270. +    }
  1271. +}
  1272. +
  1273. +static void reset_audio_boost_menu( menu_t *menu, int curvol )
  1274. +{
  1275. +    char string[ 128 ];
  1276. +
  1277. +    snprintf( string, sizeof( string ), (curvol == -1) ?
  1278. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1279. +              _("Disabled") );
  1280. +    menu_set_text( menu, 1, string );
  1281. +    menu_set_enter_command( menu, 1, TVTIME_SET_AUDIO_BOOST, "-1" );
  1282. +
  1283. +    snprintf( string, sizeof( string ), (curvol == 50) ?
  1284. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1285. +              _("Quiet") );
  1286. +    menu_set_text( menu, 2, string );
  1287. +    menu_set_enter_command( menu, 2, TVTIME_SET_AUDIO_BOOST, "50" );
  1288. +
  1289. +    snprintf( string, sizeof( string ), (curvol == 90) ?
  1290. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1291. +              _("Medium") );
  1292. +    menu_set_text( menu, 3, string );
  1293. +    menu_set_enter_command( menu, 3, TVTIME_SET_AUDIO_BOOST, "90" );
  1294. +
  1295. +    snprintf( string, sizeof( string ), (curvol == 100) ?
  1296. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1297. +              _("Full") );
  1298. +    menu_set_text( menu, 4, string );
  1299. +    menu_set_enter_command( menu, 4, TVTIME_SET_AUDIO_BOOST, "100" );
  1300. +
  1301. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1302. +              _("Back") );
  1303. +    menu_set_text( menu, 5, string );
  1304. +    menu_set_enter_command( menu, 5, TVTIME_SHOW_MENU, "input" );
  1305. +}
  1306. +
  1307. +static void reset_inputwidth_menu( menu_t *menu, int inputwidth, int maxwidth )
  1308. +{
  1309. +    char string[ 128 ];
  1310. +    int entry_num;
  1311. +
  1312. +    snprintf( string, sizeof( string ),
  1313. +              _("%s  Current: %d pixels"), TVTIME_ICON_INPUTWIDTH, inputwidth );
  1314. +    menu_set_text( menu, 1, string );
  1315. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "input" );
  1316. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "input" );
  1317. +
  1318. +    snprintf( string, sizeof( string ), (inputwidth == 360) ?
  1319. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1320. +              _("Low (360 pixels)") );
  1321. +    menu_set_text( menu, 2, string );
  1322. +    menu_set_enter_command( menu, 2, TVTIME_SET_INPUT_WIDTH, "360" );
  1323. +
  1324. +    snprintf( string, sizeof( string ), (inputwidth == 576) ?
  1325. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1326. +              _("Moderate (576 pixels)") );
  1327. +    menu_set_text( menu, 3, string );
  1328. +    menu_set_enter_command( menu, 3, TVTIME_SET_INPUT_WIDTH, "576" );
  1329. +
  1330. +    snprintf( string, sizeof( string ), (inputwidth == 720) ?
  1331. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1332. +              _("Standard (720 pixels)") );
  1333. +    menu_set_text( menu, 4, string );
  1334. +    menu_set_enter_command( menu, 4, TVTIME_SET_INPUT_WIDTH, "720" );
  1335. +
  1336. +    snprintf( string, sizeof( string ), (inputwidth == 768) ?
  1337. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1338. +              _("High (768 pixels)") );
  1339. +    menu_set_text( menu, 5, string );
  1340. +    menu_set_enter_command( menu, 5, TVTIME_SET_INPUT_WIDTH, "768" );
  1341. +
  1342. +    entry_num = 6;
  1343. +    if( maxwidth > 768 ) {
  1344. +        snprintf( string, sizeof( string ), _("%s  Maximum (%d pixels)"),
  1345. +                  (inputwidth == maxwidth) ?
  1346. +                      TVTIME_ICON_RADIOON : TVTIME_ICON_RADIOOFF, maxwidth );
  1347. +        menu_set_text( menu, entry_num, string );
  1348. +        snprintf( string, sizeof( string ), "%d", maxwidth );
  1349. +        menu_set_enter_command( menu, entry_num,
  1350. +                                TVTIME_SET_INPUT_WIDTH, string );
  1351. +        entry_num++;
  1352. +    }
  1353. +    snprintf( string, sizeof( string ), TVTIME_ICON_RESTART "  %s",
  1354. +              _("Restart with new settings") );
  1355. +    menu_set_text( menu, entry_num, string );
  1356. +    menu_set_enter_command( menu, entry_num, TVTIME_RESTART, "" );
  1357. +    entry_num++;
  1358. +
  1359. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1360. +              _("Back") );
  1361. +    menu_set_text( menu, entry_num, string );
  1362. +    menu_set_enter_command( menu, entry_num, TVTIME_SHOW_MENU, "input" );
  1363. +}
  1364. +
  1365. +static void reset_norm_menu( menu_t *menu, const char *norm )
  1366. +{
  1367. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "input" );
  1368. +
  1369. +    menu_set_text (menu, 1, strcasecmp (norm, "ntsc") == 0 ?
  1370. +                   TVTIME_ICON_RADIOON "  NTSC" :
  1371. +                   TVTIME_ICON_RADIOOFF "  NTSC");
  1372. +    menu_set_enter_command( menu, 1, TVTIME_SET_NORM, "ntsc" );
  1373. +
  1374. +    menu_set_text (menu, 2, strcasecmp (norm, "pal") == 0 ?
  1375. +                   TVTIME_ICON_RADIOON "  PAL" :
  1376. +                   TVTIME_ICON_RADIOOFF "  PAL");
  1377. +    menu_set_enter_command( menu, 2, TVTIME_SET_NORM, "pal" );
  1378. +
  1379. +    menu_set_text (menu, 3, strcasecmp (norm, "secam") == 0 ?
  1380. +                   TVTIME_ICON_RADIOON "  SECAM" :
  1381. +                   TVTIME_ICON_RADIOOFF "  SECAM");
  1382. +    menu_set_enter_command( menu, 3, TVTIME_SET_NORM, "secam" );
  1383. +
  1384. +    menu_set_text (menu, 4, strcasecmp (norm, "pal-nc") == 0 ?
  1385. +                   TVTIME_ICON_RADIOON "  PAL-NC" :
  1386. +                   TVTIME_ICON_RADIOOFF "  PAL-NC");
  1387. +    menu_set_enter_command( menu, 4, TVTIME_SET_NORM, "pal-nc" );
  1388. +
  1389. +    menu_set_text (menu, 5, strcasecmp (norm, "pal-m") == 0 ?
  1390. +                   TVTIME_ICON_RADIOON "  PAL-M" :
  1391. +                   TVTIME_ICON_RADIOOFF "  PAL-M");
  1392. +    menu_set_enter_command( menu, 5, TVTIME_SET_NORM, "pal-m" );
  1393. +
  1394. +    menu_set_text (menu, 6, strcasecmp (norm, "pal-n") == 0 ?
  1395. +                   TVTIME_ICON_RADIOON "  PAL-N" :
  1396. +                   TVTIME_ICON_RADIOOFF "  PAL-N");
  1397. +    menu_set_enter_command( menu, 6, TVTIME_SET_NORM, "pal-n" );
  1398. +
  1399. +    menu_set_text (menu, 7, strcasecmp (norm, "ntsc-jp") == 0 ?
  1400. +                   TVTIME_ICON_RADIOON "  NTSC-JP" :
  1401. +                   TVTIME_ICON_RADIOOFF "  NTSC-JP");
  1402. +    menu_set_enter_command( menu, 7, TVTIME_SET_NORM, "ntsc-jp" );
  1403. +
  1404. +    menu_set_text (menu, 8, strcasecmp (norm, "pal-60") == 0 ?
  1405. +                   TVTIME_ICON_RADIOON "  PAL-60" :
  1406. +                   TVTIME_ICON_RADIOOFF "  PAL-60");
  1407. +    menu_set_enter_command( menu, 8, TVTIME_SET_NORM, "pal-60" );
  1408. +}
  1409. +
  1410. +static void reset_audio_mode_menu( menu_t *menu, int ntsc, int curmode )
  1411. +{
  1412. +    char string[ 128 ];
  1413. +
  1414. +    snprintf( string, sizeof( string ), curmode == VIDEOINPUT_MONO ?
  1415. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1416. +              _("Mono") );
  1417. +    menu_set_text( menu, 1, string );
  1418. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "input" );
  1419. +    menu_set_enter_command( menu, 1, TVTIME_SET_AUDIO_MODE, "mono" );
  1420. +
  1421. +    snprintf( string, sizeof( string ), curmode == VIDEOINPUT_STEREO ?
  1422. +              TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1423. +              _("Stereo") );
  1424. +    menu_set_text( menu, 2, string );
  1425. +    menu_set_enter_command( menu, 2, TVTIME_SET_AUDIO_MODE, "stereo" );
  1426. +
  1427. +    if( ntsc ) {
  1428. +        snprintf( string, sizeof( string ), (curmode == VIDEOINPUT_LANG1 ||
  1429. +                                            curmode == VIDEOINPUT_LANG2) ?
  1430. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1431. +                  _("SAP") );
  1432. +        menu_set_text( menu, 3, string );
  1433. +        menu_set_enter_command( menu, 3, TVTIME_SET_AUDIO_MODE, "sap" );
  1434. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1435. +                  _("Back") );
  1436. +
  1437. +        menu_set_text( menu, 4, string );
  1438. +        menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "input" );
  1439. +    } else {
  1440. +        snprintf( string, sizeof( string ), (curmode == VIDEOINPUT_LANG1) ?
  1441. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1442. +                  _("Primary Language") );
  1443. +        menu_set_text( menu, 3, string );
  1444. +        menu_set_enter_command( menu, 3, TVTIME_SET_AUDIO_MODE, "lang1" );
  1445. +        snprintf( string, sizeof( string ), (curmode == VIDEOINPUT_LANG2) ?
  1446. +                  TVTIME_ICON_RADIOON "  %s" : TVTIME_ICON_RADIOOFF "  %s",
  1447. +                  _("Secondary Language") );
  1448. +        menu_set_text( menu, 4, string );
  1449. +        menu_set_enter_command( menu, 4, TVTIME_SET_AUDIO_MODE, "lang2" );
  1450. +
  1451. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1452. +                  _("Back") );
  1453. +        menu_set_text( menu, 5, string );
  1454. +        menu_set_enter_command( menu, 5, TVTIME_SHOW_MENU, "input" );
  1455. +    }
  1456. +}
  1457. +
  1458. +static void reset_overscan_menu( menu_t *menu, double overscan )
  1459. +{
  1460. +    char string[ 128 ];
  1461. +
  1462. +    snprintf( string, sizeof( string ), TVTIME_ICON_TVLOGO "  %s: %.1f%%",
  1463. +              _("Current"), overscan * 2.0 * 100.0 );
  1464. +    menu_set_text( menu, 1, string );
  1465. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "output" );
  1466. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "output" );
  1467. +
  1468. +    snprintf( string, sizeof( string ),
  1469. +              TVTIME_ICON_PLUSBUTTON "  %s", _("Increase") );
  1470. +    menu_set_text( menu, 2, string );
  1471. +    menu_set_enter_command( menu, 2, TVTIME_OVERSCAN_UP, "" );
  1472. +
  1473. +    snprintf( string, sizeof( string ),
  1474. +              TVTIME_ICON_MINUSBUTTON "  %s", _("Decrease") );
  1475. +    menu_set_text( menu, 3, string );
  1476. +    menu_set_enter_command( menu, 3, TVTIME_OVERSCAN_DOWN, "" );
  1477. +
  1478. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1479. +              _("Back") );
  1480. +    menu_set_text( menu, 4, string );
  1481. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "output" );
  1482. +}
  1483. +
  1484. +static void reset_filters_menu( menu_t *menu, int apply_invert,
  1485. +                                int apply_mirror, int apply_chroma_kill,
  1486. +                                int isntsc, int apply_pulldown )
  1487. +{
  1488. +    char string[ 128 ];
  1489. +    int cur = 1;
  1490. +
  1491. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "processing" );
  1492. +
  1493. +    if( isntsc ) {
  1494. +        snprintf( string, sizeof( string ), apply_pulldown ?
  1495. +                  TVTIME_ICON_GENERALTOGGLEON "  %s" :
  1496. +                  TVTIME_ICON_GENERALTOGGLEOFF "  %s",
  1497. +                  _("2-3 pulldown inversion") );
  1498. +        menu_set_text( menu, cur, string );
  1499. +        menu_set_enter_command( menu, cur, TVTIME_TOGGLE_PULLDOWN_DETECTION, "" );
  1500. +        cur++;
  1501. +    }
  1502. +
  1503. +    snprintf( string, sizeof( string ), apply_invert ?
  1504. +              TVTIME_ICON_GENERALTOGGLEON "  %s" :
  1505. +              TVTIME_ICON_GENERALTOGGLEOFF "  %s",
  1506. +              _("Colour invert") );
  1507. +    menu_set_text( menu, cur, string );
  1508. +    menu_set_enter_command( menu, cur, TVTIME_TOGGLE_COLOUR_INVERT, "" );
  1509. +    cur++;
  1510. +
  1511. +    snprintf( string, sizeof( string ), apply_mirror ?
  1512. +              TVTIME_ICON_GENERALTOGGLEON "  %s" :
  1513. +              TVTIME_ICON_GENERALTOGGLEOFF "  %s",
  1514. +              _("Mirror") );
  1515. +    menu_set_text( menu, cur, string );
  1516. +    menu_set_enter_command( menu, cur, TVTIME_TOGGLE_MIRROR, "" );
  1517. +    cur++;
  1518. +
  1519. +    snprintf( string, sizeof( string ), apply_chroma_kill ?
  1520. +              TVTIME_ICON_GENERALTOGGLEON "  %s" :
  1521. +              TVTIME_ICON_GENERALTOGGLEOFF "  %s",
  1522. +              _("Chroma killer") );
  1523. +    menu_set_text( menu, cur, string );
  1524. +    menu_set_enter_command( menu, cur, TVTIME_TOGGLE_CHROMA_KILL, "" );
  1525. +    cur++;
  1526. +
  1527. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1528. +              _("Back") );
  1529. +    menu_set_text( menu, cur, string );
  1530. +    menu_set_enter_command( menu, cur, TVTIME_SHOW_MENU, "processing" );
  1531. +}
  1532. +
  1533. +commands_t *commands_new( config_t *cfg, videoinput_t *vidin,
  1534. +                          station_mgr_t *mgr, tvtime_osd_t *osd,
  1535. +                          int fieldtime )
  1536. +{
  1537. +    commands_t *cmd = malloc( sizeof( struct commands_s ) );
  1538. +    char string[ 128 ];
  1539. +    menu_t *menu;
  1540. +    int maxwidth;
  1541. +    int curpos = 0;
  1542. +
  1543. +    if( !cmd ) {
  1544. +        return 0;
  1545. +    }
  1546. +
  1547. +    cmd->cfg = cfg;
  1548. +    cmd->vidin = vidin;
  1549. +    cmd->osd = osd;
  1550. +    cmd->stationmgr = mgr;
  1551. +    memset( cmd->next_chan_buffer, 0, sizeof( cmd->next_chan_buffer ) );
  1552. +    cmd->frame_counter = 0;
  1553. +    cmd->digit_counter = 0;
  1554. +    cmd->quit = 0;
  1555. +    cmd->sleeptimer = 0;
  1556. +    cmd->sleeptimer_start = 0;
  1557. +
  1558. +    if( config_get_xmltv_file( cfg ) && strcasecmp( config_get_xmltv_file( cfg ), "none" ) ) {
  1559. +        if( config_get_xmltv_language( cfg ) && strcasecmp( config_get_xmltv_language( cfg ), "none" ) ) {
  1560. +            cmd->xmltv = xmltv_new( config_get_xmltv_file( cfg ),
  1561. +                                    config_get_xmltv_language( cfg ) );
  1562. +        } else {
  1563. +            cmd->xmltv = xmltv_new( config_get_xmltv_file( cfg ), 0 );
  1564. +        }
  1565. +    } else {
  1566. +        cmd->xmltv = 0;
  1567. +    }
  1568. +
  1569. +    cmd->picturemode = 3;
  1570. +    cmd->brightness = config_get_global_brightness( cfg );
  1571. +    cmd->contrast = config_get_global_contrast( cfg );
  1572. +    cmd->saturation = config_get_global_saturation( cfg );
  1573. +    cmd->hue = config_get_global_hue( cfg );
  1574. +
  1575. +    cmd->displayinfo = 0;
  1576. +    cmd->screenshot = 0;
  1577. +    memset( cmd->screenshotfile, 0, sizeof( cmd->screenshotfile ) );
  1578. +    cmd->printdebug = 0;
  1579. +    cmd->showbars = 0;
  1580. +    cmd->showdeinterlacerinfo = 0;
  1581. +    cmd->togglefullscreen = 0;
  1582. +    cmd->toggleaspect = 0;
  1583. +    cmd->togglealwaysontop = 0;
  1584. +    cmd->toggledeinterlacer = 0;
  1585. +    cmd->togglepulldowndetection = 0;
  1586. +    cmd->togglematte = 0;
  1587. +    cmd->togglequiet = 0;
  1588. +    cmd->framerate = FRAMERATE_FULL;
  1589. +    cmd->scan_channels = 0;
  1590. +    cmd->pause = 0;
  1591. +    cmd->halfsize = 0;
  1592. +    cmd->resizewindow = 0;
  1593. +    cmd->restarttvtime = 0;
  1594. +    cmd->setdeinterlacer = 0;
  1595. +    cmd->normset = 0;
  1596. +    cmd->newnorm = 0;
  1597. +    cmd->newinputwidth = 0;
  1598. +    memset( cmd->deinterlacer, 0, sizeof( cmd->deinterlacer ) );
  1599. +    cmd->setfreqtable = 0;
  1600. +    snprintf( cmd->newfreqtable, sizeof( cmd->newfreqtable ), "%s", config_get_v4l_freq( cfg ) );
  1601. +    cmd->checkfreq = config_get_check_freq_present( cfg );
  1602. +    cmd->usexds = config_get_usexds( cfg );
  1603. +    cmd->pulldown_alg = 0;
  1604. +    memset( cmd->newmatte, 0, sizeof( cmd->newmatte ) );
  1605. +    memset( cmd->newpos, 0, sizeof( cmd->newpos ) );
  1606. +
  1607. +    /* Number of frames to wait for next channel digit. */
  1608. +    cmd->delay = 1000000 / fieldtime;
  1609. +
  1610. +    cmd->change_channel = 0;
  1611. +    cmd->renumbering = 0;
  1612. +    cmd->xmltvupdated = 0;
  1613. +    cmd->tunerreset = 0;
  1614. +
  1615. +    cmd->apply_invert = config_get_invert( cfg );
  1616. +    cmd->apply_mirror = config_get_mirror( cfg );
  1617. +    cmd->apply_chroma_kill = 0;
  1618. +
  1619. +    cmd->boost = config_get_audio_boost( cfg );
  1620. +
  1621. +    cmd->overscan = config_get_overscan( cfg );
  1622. +    if( cmd->overscan > 0.4 ) cmd->overscan = 0.4; if( cmd->overscan < 0.0 ) cmd->overscan = 0.0;
  1623. +
  1624. +    cmd->vbi = 0;
  1625. +    cmd->capturemode = config_get_cc( cfg ) ? CAPTURE_CC1 : CAPTURE_OFF;
  1626. +
  1627. +    cmd->curfavorite = 0;
  1628. +    cmd->numfavorites = 0;
  1629. +    memset( cmd->favorites, 0, sizeof( cmd->favorites ) );
  1630. +
  1631. +    cmd->menuactive = 0;
  1632. +    cmd->curmenu = MENU_FAVORITES;
  1633. +    cmd->curmenupos = 0;
  1634. +    cmd->curmenusize = 0;
  1635. +    cmd->curusermenu = 0;
  1636. +    memset( cmd->menus, 0, sizeof( cmd->menus ) );
  1637. +
  1638. +    if( vidin && videoinput_get_norm( vidin ) != VIDEOINPUT_NTSC &&
  1639. +                 videoinput_get_norm( vidin ) != VIDEOINPUT_NTSC_JP ) {
  1640. +        set_redirect( "input", "input-pal" );
  1641. +    }
  1642. +
  1643. +    if( vidin && (videoinput_get_norm( vidin ) == VIDEOINPUT_PAL ||
  1644. +                  videoinput_get_norm( vidin ) == VIDEOINPUT_SECAM) ) {
  1645. +        if( cmd->checkfreq ) {
  1646. +            set_redirect( "stations", "stations-palsecam-signal" );
  1647. +        } else {
  1648. +            set_redirect( "stations", "stations-palsecam-nosignal" );
  1649. +        }
  1650. +    } else if( vidin && videoinput_get_norm( vidin ) == VIDEOINPUT_NTSC &&
  1651. +               (!strcasecmp( config_get_v4l_freq( cfg ), "us-cable" ) ||
  1652. +                !strcasecmp( config_get_v4l_freq( cfg ), "us-cable100" )) ) {
  1653. +        if( cmd->checkfreq ) {
  1654. +            set_redirect( "stations", "stations-ntsccable-signal" );
  1655. +        } else {
  1656. +            set_redirect( "stations", "stations-ntsccable-nosignal" );
  1657. +        }
  1658. +    }
  1659. +
  1660. +    menu = menu_new( "root-tuner" );
  1661. +    menu_set_back_command( menu, TVTIME_MENU_EXIT, 0 );
  1662. +
  1663. +    menu_set_text( menu, 0, _("Setup") );
  1664. +
  1665. +    snprintf( string, sizeof( string ),
  1666. +              TVTIME_ICON_STATIONMANAGEMENT "  %s", _("Channel management") );
  1667. +    menu_set_text( menu, 1, string );
  1668. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "stations" );
  1669. +
  1670. +    snprintf( string, sizeof( string ),
  1671. +              TVTIME_ICON_INPUTCONF "  %s", _("Input configuration") );
  1672. +    menu_set_text( menu, 2, string );
  1673. +    menu_set_enter_command( menu, 2, TVTIME_SHOW_MENU, "input" );
  1674. +
  1675. +    snprintf( string, sizeof( string ),
  1676. +             TVTIME_ICON_PICTURESETTINGS "  %s", _("Picture settings") );
  1677. +    menu_set_text( menu, 3, string );
  1678. +    menu_set_enter_command( menu, 3, TVTIME_SHOW_MENU, "picture" );
  1679. +
  1680. +    snprintf( string, sizeof( string ),
  1681. +             TVTIME_ICON_VIDEOPROCESSING "  %s", _("Video processing") );
  1682. +    menu_set_text( menu, 4, string );
  1683. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "processing" );
  1684. +
  1685. +    snprintf( string, sizeof( string ),
  1686. +             TVTIME_ICON_OUTPUTCONF "  %s", _("Output configuration") );
  1687. +    menu_set_text( menu, 5, string );
  1688. +    menu_set_enter_command( menu, 5, TVTIME_SHOW_MENU, "output" );
  1689. +
  1690. +    snprintf( string, sizeof( string ),
  1691. +              TVTIME_ICON_EXIT "  %s", _("Exit menu") );
  1692. +    menu_set_text( menu, 6, string );
  1693. +    menu_set_enter_command( menu, 6, TVTIME_MENU_EXIT, 0 );
  1694. +
  1695. +    commands_add_menu( cmd, menu );
  1696. +
  1697. +    menu = menu_new( "root-notuner" );
  1698. +    menu_set_text( menu, 0, _("Setup") );
  1699. +    menu_set_back_command( menu, TVTIME_MENU_EXIT, 0 );
  1700. +
  1701. +    snprintf( string, sizeof( string ),
  1702. +              TVTIME_ICON_INPUTCONF "  %s", _("Input configuration") );
  1703. +    menu_set_text( menu, 1, string );
  1704. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "input" );
  1705. +
  1706. +    snprintf( string, sizeof( string ),
  1707. +              TVTIME_ICON_PICTURESETTINGS "  %s", _("Picture settings") );
  1708. +    menu_set_text( menu, 2, string );
  1709. +    menu_set_enter_command( menu, 2, TVTIME_SHOW_MENU, "picture" );
  1710. +
  1711. +    snprintf( string, sizeof( string ),
  1712. +              TVTIME_ICON_VIDEOPROCESSING "  %s", _("Video processing") );
  1713. +    menu_set_text( menu, 3, string );
  1714. +    menu_set_enter_command( menu, 3, TVTIME_SHOW_MENU, "processing" );
  1715. +
  1716. +    snprintf( string, sizeof( string ),
  1717. +              TVTIME_ICON_OUTPUTCONF "  %s", _("Output configuration") );
  1718. +    menu_set_text( menu, 4, string );
  1719. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "output" );
  1720. +
  1721. +    snprintf( string, sizeof( string ),
  1722. +              TVTIME_ICON_EXIT "  %s", _("Exit menu") );
  1723. +    menu_set_text( menu, 5, string );
  1724. +    menu_set_enter_command( menu, 5, TVTIME_MENU_EXIT, 0 );
  1725. +
  1726. +    commands_add_menu( cmd, menu );
  1727. +
  1728. +    menu = menu_new( "stations" );
  1729. +    snprintf( string, sizeof( string ), "%s - %s",
  1730. +              _("Setup"), _("Channel management") );
  1731. +    menu_set_text( menu, 0, string);
  1732. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "stations" );
  1733. +    commands_add_menu( cmd, menu );
  1734. +    if( vidin ) {
  1735. +        reset_stations_menu( commands_get_menu( cmd, "stations" ),
  1736. +                             (videoinput_get_norm( vidin ) == VIDEOINPUT_NTSC ||
  1737. +                              videoinput_get_norm( vidin ) == VIDEOINPUT_NTSC_JP),
  1738. +                             videoinput_get_norm( vidin ) == VIDEOINPUT_PAL,
  1739. +                             videoinput_get_norm( vidin ) == VIDEOINPUT_SECAM,
  1740. +                             (!strcasecmp( cmd->newfreqtable, "us-cable" ) ||
  1741. +                              !strcasecmp( cmd->newfreqtable, "us-cable100" )),
  1742. +                             station_get_current_active( cmd->stationmgr ),
  1743. +                             cmd->checkfreq, cmd->scan_channels,
  1744. +                             videoinput_is_v4l2( cmd->vidin ),
  1745. +                             station_get_default_audio_norm( cmd->stationmgr ),
  1746. +                             station_get_current_audio_norm( cmd->stationmgr ) );
  1747. +    }
  1748. +
  1749. +    menu = menu_new( "frequencies" );
  1750. +    snprintf( string, sizeof( string ), "%s - %s - %s", _("Setup"),
  1751. +              _("Channel management"), _("Frequency table") );
  1752. +    menu_set_text( menu, 0, string );
  1753. +    commands_add_menu( cmd, menu );
  1754. +    if( vidin ) {
  1755. +        reset_frequency_menu( commands_get_menu( cmd, "frequencies" ),
  1756. +                              videoinput_get_norm( vidin ),
  1757. +                              config_get_v4l_freq( cfg ) );
  1758. +    }
  1759. +
  1760. +    menu = menu_new( "finetune" );
  1761. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "stations" );
  1762. +    snprintf( string, sizeof( string ), "%s - %s - %s", _("Setup"),
  1763. +              _("Channel management"), _("Finetune") );
  1764. +    menu_set_text( menu, 0, string );
  1765. +    snprintf( string, sizeof( string ),
  1766. +              TVTIME_ICON_TVLOGO "  %s: ---", _("Current") );
  1767. +    menu_set_text( menu, 1, string );
  1768. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "stations" );
  1769. +
  1770. +    menu_set_default_cursor( menu, 1 );
  1771. +    snprintf( string, sizeof( string ),
  1772. +              TVTIME_ICON_PLUSBUTTON "  %s", _("Increase") );
  1773. +    menu_set_text( menu, 2, string );
  1774. +    menu_set_enter_command( menu, 2, TVTIME_FINETUNE_UP, "" );
  1775. +
  1776. +    snprintf( string, sizeof( string ),
  1777. +              TVTIME_ICON_MINUSBUTTON "  %s",_("Decrease") );
  1778. +    menu_set_text( menu, 3, string );
  1779. +    menu_set_enter_command( menu, 3, TVTIME_FINETUNE_DOWN, "" );
  1780. +
  1781. +    snprintf( string, sizeof( string ),
  1782. +              TVTIME_ICON_PLAINLEFTARROW "  %s", _("Back") );
  1783. +    menu_set_text( menu, 4, string );
  1784. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "stations" );
  1785. +
  1786. +    commands_add_menu( cmd, menu );
  1787. +
  1788. +    menu = menu_new( "input-ntsc" );
  1789. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "root" );
  1790. +    snprintf( string, sizeof( string ), "%s - %s", _("Setup"),
  1791. +              _("Input configuration") );
  1792. +    menu_set_text( menu, 0, string );
  1793. +    if( vidin ) {
  1794. +        snprintf( string, sizeof( string ), TVTIME_ICON_VIDEOINPUT "  %s: %s",
  1795. +                  _("Change video source"), videoinput_get_input_name( vidin ) );
  1796. +    } else {
  1797. +        snprintf( string, sizeof( string ), TVTIME_ICON_VIDEOINPUT "  %s",
  1798. +                  _("Change video source") );
  1799. +    }
  1800. +    menu_set_text( menu, 1, string );
  1801. +    menu_set_enter_command( menu, 1, TVTIME_TOGGLE_INPUT, "" );
  1802. +
  1803. +    snprintf( string, sizeof( string ), TVTIME_ICON_STATIONMANAGEMENT "  %s",
  1804. +              _("Preferred audio mode") );
  1805. +    menu_set_text( menu, 2, string );
  1806. +    menu_set_enter_command( menu, 2, TVTIME_SHOW_MENU, "audiomode" );
  1807. +
  1808. +    snprintf( string, sizeof( string ), TVTIME_ICON_STATIONMANAGEMENT "  %s",
  1809. +              _("Audio volume boost") );
  1810. +    menu_set_text( menu, 3, string );
  1811. +    menu_set_enter_command( menu, 3, TVTIME_SHOW_MENU, "audioboost" );
  1812. +
  1813. +    snprintf( string, sizeof( string ), TVTIME_ICON_TELEVISIONSTANDARD "  %s",
  1814. +              _("Television standard") );
  1815. +    menu_set_text( menu, 4, string );
  1816. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "norm" );
  1817. +
  1818. +    snprintf( string, sizeof( string ), TVTIME_ICON_INPUTWIDTH "  %s",
  1819. +              _("Horizontal resolution") );
  1820. +    menu_set_text( menu, 5, string );
  1821. +    menu_set_enter_command( menu, 5, TVTIME_SHOW_MENU, "hres" );
  1822. +
  1823. +    snprintf( string, sizeof( string ), TVTIME_ICON_CLOSEDCAPTIONICON "  %s",
  1824. +              _("Toggle closed captions") );
  1825. +    menu_set_text( menu, 6, string );
  1826. +    menu_set_enter_command( menu, 6, TVTIME_TOGGLE_CC, "" );
  1827. +
  1828. +    snprintf( string, sizeof( string ), TVTIME_ICON_TVPGICON "  %s",
  1829. +              _("Toggle XDS decoding") );
  1830. +    menu_set_text( menu, 7, string );
  1831. +    menu_set_enter_command( menu, 7, TVTIME_TOGGLE_XDS, "" );
  1832. +
  1833. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1834. +              _("Back") );
  1835. +    menu_set_text( menu, 8, string );
  1836. +    menu_set_enter_command( menu, 8, TVTIME_SHOW_MENU, "root" );
  1837. +
  1838. +    commands_add_menu( cmd, menu );
  1839. +
  1840. +    menu = menu_new( "input-pal" );
  1841. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "root" );
  1842. +    snprintf( string, sizeof( string ),
  1843. +              "%s - %s", _("Setup"), _("Input configuration") );
  1844. +    menu_set_text (menu, 0, string);
  1845. +    if( vidin ) {
  1846. +        snprintf( string, sizeof( string ), TVTIME_ICON_VIDEOINPUT "  %s: %s",
  1847. +                  _("Change video source"), videoinput_get_input_name( vidin ) );
  1848. +    } else {
  1849. +        snprintf( string, sizeof( string ), TVTIME_ICON_VIDEOINPUT "  %s",
  1850. +                  _("Change video source") );
  1851. +    }
  1852. +    menu_set_text( menu, 1, string );
  1853. +    menu_set_enter_command( menu, 1, TVTIME_TOGGLE_INPUT, "" );
  1854. +    if( vidin ) {
  1855. +        reset_pal_input_menu( menu, vidin, cmd->stationmgr );
  1856. +    }
  1857. +    commands_add_menu( cmd, menu );
  1858. +
  1859. +    menu = menu_new( "hres" );
  1860. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  1861. +              _("Setup"), _("Input configuration"), _("Horizontal resolution") );
  1862. +    menu_set_text( menu, 0, string );
  1863. +    menu_set_default_cursor( menu, 1 );
  1864. +    commands_add_menu( cmd, menu );
  1865. +    maxwidth = cmd->vidin? videoinput_get_maxwidth( cmd->vidin ) : 0;
  1866. +    reset_inputwidth_menu( commands_get_menu( cmd, "hres" ),
  1867. +                           config_get_inputwidth( cfg ), maxwidth);
  1868. +
  1869. +    menu = menu_new( "audiomode" );
  1870. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  1871. +              _("Setup"), _("Input configuration"), _("Preferred audio mode") );
  1872. +    menu_set_text( menu, 0, string );
  1873. +    commands_add_menu( cmd, menu );
  1874. +    if( cmd->vidin ) {
  1875. +        reset_audio_mode_menu( commands_get_menu( cmd, "audiomode" ),
  1876. +                               videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC,
  1877. +                               videoinput_get_audio_mode( cmd->vidin ) );
  1878. +    } else {
  1879. +        reset_audio_mode_menu( commands_get_menu( cmd, "audiomode" ), 0, 0 );
  1880. +    }
  1881. +
  1882. +    menu = menu_new( "audioboost" );
  1883. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  1884. +              _("Setup"), _("Input configuration"), _("Audio volume boost") );
  1885. +    menu_set_text( menu, 0, string );
  1886. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "input" );
  1887. +    commands_add_menu( cmd, menu );
  1888. +    reset_audio_boost_menu( commands_get_menu( cmd, "audioboost" ),
  1889. +                            cmd->boost );
  1890. +
  1891. +    menu = menu_new( "norm" );
  1892. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  1893. +              _("Setup"), _("Input configuration"), _("Television standard") );
  1894. +    menu_set_text( menu, 0, string );
  1895. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "root" );
  1896. +    snprintf( string, sizeof( string ), TVTIME_ICON_RESTART "  %s",
  1897. +              _("Restart with new settings") );
  1898. +    menu_set_text( menu, 9, string );
  1899. +    menu_set_enter_command( menu, 9, TVTIME_RESTART, "" );
  1900. +
  1901. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1902. +              _("Back") );
  1903. +    menu_set_text( menu, 10, string );
  1904. +    menu_set_enter_command( menu, 10, TVTIME_SHOW_MENU, "input" );
  1905. +
  1906. +    if( !strcasecmp( config_get_v4l_norm( cfg ), "pal" ) ) {
  1907. +        cmd->newnorm = "PAL";
  1908. +    } else if( !strcasecmp( config_get_v4l_norm( cfg ), "secam" ) ) {
  1909. +        cmd->newnorm = "SECAM";
  1910. +    } else if( !strcasecmp( config_get_v4l_norm( cfg ), "pal-nc" ) ) {
  1911. +        cmd->newnorm = "PAL-Nc";
  1912. +    } else if( !strcasecmp( config_get_v4l_norm( cfg ), "pal-m" ) ) {
  1913. +        cmd->newnorm = "PAL-M";
  1914. +    } else if( !strcasecmp( config_get_v4l_norm( cfg ), "pal-n" ) ) {
  1915. +        cmd->newnorm = "PAL-N";
  1916. +    } else if( !strcasecmp( config_get_v4l_norm( cfg ), "ntsc-jp" ) ) {
  1917. +        cmd->newnorm = "NTSC-JP";
  1918. +    } else if( !strcasecmp( config_get_v4l_norm( cfg ), "pal-60" ) ) {
  1919. +        cmd->newnorm = "PAL-60";
  1920. +    } else {
  1921. +        cmd->newnorm = "NTSC";
  1922. +    }
  1923. +    reset_norm_menu( menu, cmd->newnorm );
  1924. +    commands_add_menu( cmd, menu );
  1925. +
  1926. +    menu = menu_new( "output" );
  1927. +    snprintf( string, sizeof( string ), "%s - %s",
  1928. +              _("Setup"), _("Output configuration") );
  1929. +    menu_set_text( menu, 0, string );
  1930. +    commands_add_menu( cmd, menu );
  1931. +
  1932. +    menu = menu_new( "matte" );
  1933. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  1934. +              _("Setup"), _("Output configuration"), _("Apply matte") );
  1935. +    menu_set_text( menu, 0, string );
  1936. +    commands_add_menu( cmd, menu );
  1937. +
  1938. +    menu = menu_new( "overscan" );
  1939. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  1940. +              _("Setup"), _("Output configuration"), _("Overscan") );
  1941. +    menu_set_text( menu, 0, string );
  1942. +    commands_add_menu( cmd, menu );
  1943. +    reset_overscan_menu( commands_get_menu( cmd, "overscan" ), cmd->overscan );
  1944. +
  1945. +    menu = menu_new( "fspos" );
  1946. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  1947. +              _("Setup"), _("Output configuration"), _("Fullscreen position") );
  1948. +    menu_set_text( menu, 0, string );
  1949. +    commands_add_menu( cmd, menu );
  1950. +
  1951. +    menu = menu_new( "processing" );
  1952. +    snprintf( string, sizeof( string ), "%s - %s",
  1953. +              _("Setup"), _("Video processing") );
  1954. +    menu_set_text( menu, 0, string );
  1955. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "root" );
  1956. +    snprintf( string, sizeof( string ), TVTIME_ICON_DEINTERLACERCONF "  %s",
  1957. +              _("Deinterlacer configuration") );
  1958. +    menu_set_text( menu, 1, string );
  1959. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "deinterlacer" );
  1960. +
  1961. +    snprintf( string, sizeof( string ), TVTIME_ICON_DEINTERLACERDESC "  %s",
  1962. +              _("Current deinterlacer description") );
  1963. +    menu_set_text( menu, 2, string );
  1964. +    menu_set_enter_command( menu, 2, TVTIME_SHOW_MENU, "deintdescription" );
  1965. +    snprintf( string, sizeof( string ), TVTIME_ICON_ATTEMPTEDFRAMERATE "  %s",
  1966. +              _("Attempted framerate") );
  1967. +    menu_set_text( menu, 3, string );
  1968. +    menu_set_enter_command( menu, 3, TVTIME_SHOW_MENU, "framerate" );
  1969. +    snprintf( string, sizeof( string ), TVTIME_ICON_INPUTFILTERS "  %s",
  1970. +              _("Input filters") );
  1971. +    menu_set_text( menu, 4, string );
  1972. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "filters" );
  1973. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  1974. +              _("Back") );
  1975. +    menu_set_text( menu, 5, string );
  1976. +    menu_set_enter_command( menu, 5, TVTIME_SHOW_MENU, "root" );
  1977. +    commands_add_menu( cmd, menu );
  1978. +
  1979. +    menu = menu_new( "deinterlacer" );
  1980. +
  1981. +    snprintf( string, sizeof( string ), "%s - %s - %s", _("Setup"),
  1982. +              _("Video processing"), _("Deinterlacer configuration") );
  1983. +    menu_set_text( menu, 0, string );
  1984. +    commands_add_menu( cmd, menu );
  1985. +
  1986. +    menu = menu_new( "deintdescription" );
  1987. +    snprintf( string, sizeof( string ), "%s - %s - %s", _("Setup"),
  1988. +              _("Video processing"), _("Deinterlacer description") );
  1989. +    menu_set_text( menu, 0, string );
  1990. +
  1991. +    commands_add_menu( cmd, menu );
  1992. +
  1993. +    menu = menu_new( "framerate" );
  1994. +
  1995. +    snprintf( string, sizeof( string ), "%s - %s - %s", _("Setup"),
  1996. +              _("Video processing"), _("Attempted framerate") );
  1997. +    menu_set_text( menu, 0, string );
  1998. +    commands_add_menu( cmd, menu );
  1999. +
  2000. +    menu = menu_new( "filters" );
  2001. +    snprintf( string, sizeof( string ), "%s - %s - %s", _("Setup"),
  2002. +              _("Video processing"), _("Input filters") );
  2003. +    menu_set_text( menu, 0, string );
  2004. +    commands_add_menu( cmd, menu );
  2005. +    reset_filters_menu( commands_get_menu( cmd, "filters" ),
  2006. +                        cmd->apply_invert, cmd->apply_mirror,
  2007. +                        cmd->apply_chroma_kill,
  2008. +                        cmd->vidin && videoinput_get_height( cmd->vidin ) == 480,
  2009. +                        cmd->pulldown_alg );
  2010. +
  2011. +    menu = menu_new( "picture-notuner" );
  2012. +    snprintf( string, sizeof( string ), "%s - %s", _("Setup"), _("Picture") );
  2013. +    menu_set_text( menu, 0, string );
  2014. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "root" );
  2015. +    snprintf( string, sizeof( string ), TVTIME_ICON_BRIGHTNESS "  %s",
  2016. +              _("Brightness") );
  2017. +    menu_set_text( menu, 1, string );
  2018. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "brightness" );
  2019. +
  2020. +    snprintf( string, sizeof( string ), TVTIME_ICON_CONTRAST "  %s",
  2021. +              _("Contrast") );
  2022. +    menu_set_text( menu, 2, string );
  2023. +    menu_set_enter_command( menu, 2, TVTIME_SHOW_MENU, "contrast" );
  2024. +
  2025. +    snprintf( string, sizeof( string ), TVTIME_ICON_SATURATION "  %s", _("Saturation") );
  2026. +    menu_set_text( menu, 3, string );
  2027. +    menu_set_enter_command( menu, 3, TVTIME_SHOW_MENU, "saturation" );
  2028. +
  2029. +    curpos = 4;
  2030. +    if( cmd->vidin && videoinput_get_height( cmd->vidin ) == 480 &&
  2031. +        videoinput_get_norm( cmd->vidin ) != VIDEOINPUT_PAL_60 ) {
  2032. +        /* Hue only applies to NTSC norms. */
  2033. +        snprintf( string, sizeof( string ), TVTIME_ICON_HUE "  %s", _("Hue") );
  2034. +        menu_set_text( menu, curpos, string );
  2035. +        menu_set_enter_command( menu, curpos, TVTIME_SHOW_MENU, "hue" );
  2036. +        curpos++;
  2037. +    }
  2038. +
  2039. +    if (config_get_save_restore_picture (cfg)) {
  2040. +        snprintf( string, sizeof( string ),
  2041. +                  TVTIME_ICON_SAVEPICTUREGLOBAL "  %s",
  2042. +                  _("Save current settings as defaults") );
  2043. +        menu_set_text( menu, curpos, string );
  2044. +        menu_set_enter_command( menu, curpos, TVTIME_SAVE_PICTURE_GLOBAL, "" );
  2045. +        curpos++;
  2046. +
  2047. +        snprintf( string, sizeof( string ), TVTIME_ICON_RESETTODEFAULTS "  %s",
  2048. +                  _("Reset to global defaults") );
  2049. +        menu_set_text( menu, curpos, string );
  2050. +        menu_set_enter_command( menu, curpos, TVTIME_AUTO_ADJUST_PICT, "" );
  2051. +        curpos++;
  2052. +
  2053. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2054. +                  _("Back") );
  2055. +        menu_set_text( menu, curpos, string );
  2056. +        menu_set_enter_command( menu, curpos, TVTIME_SHOW_MENU, "root" );
  2057. +        commands_add_menu( cmd, menu );
  2058. +    } else {
  2059. +        snprintf( string, sizeof( string ), TVTIME_ICON_RESETTODEFAULTS "  %s",
  2060. +                  _("Reset to global defaults") );
  2061. +        menu_set_text( menu, curpos, string );
  2062. +        menu_set_enter_command( menu, curpos, TVTIME_AUTO_ADJUST_PICT, "" );
  2063. +        curpos++;
  2064. +
  2065. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2066. +                  _("Back") );
  2067. +        menu_set_text( menu, curpos, string );
  2068. +        menu_set_enter_command( menu, curpos, TVTIME_SHOW_MENU, "root" );
  2069. +        commands_add_menu( cmd, menu );
  2070. +    }
  2071. +
  2072. +    menu = menu_new( "picture-tuner" );
  2073. +    snprintf( string, sizeof( string ), "%s - %s", _("Setup"), _("Picture") );
  2074. +    menu_set_text( menu, 0, string);
  2075. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "root" );
  2076. +
  2077. +    snprintf( string, sizeof( string ), TVTIME_ICON_BRIGHTNESS "  %s",
  2078. +              _("Brightness") );
  2079. +    menu_set_text( menu, 1, string );
  2080. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "brightness" );
  2081. +
  2082. +    snprintf( string, sizeof( string ), TVTIME_ICON_CONTRAST "  %s",
  2083. +              _("Contrast") );
  2084. +    menu_set_text( menu, 2, string );
  2085. +    menu_set_enter_command( menu, 2, TVTIME_SHOW_MENU, "contrast" );
  2086. +
  2087. +    snprintf( string, sizeof( string ), TVTIME_ICON_SATURATION "  %s", _("Saturation") );
  2088. +    menu_set_text( menu, 3, string );
  2089. +    menu_set_enter_command( menu, 3, TVTIME_SHOW_MENU, "saturation" );
  2090. +
  2091. +    curpos = 4;
  2092. +    if( cmd->vidin && videoinput_get_height( cmd->vidin ) == 480 &&
  2093. +        videoinput_get_norm( cmd->vidin ) != VIDEOINPUT_PAL_60 ) {
  2094. +        snprintf( string, sizeof( string ), TVTIME_ICON_HUE "  %s", _("Hue") );
  2095. +        menu_set_text( menu, curpos, string );
  2096. +        menu_set_enter_command( menu, curpos, TVTIME_SHOW_MENU, "hue" );
  2097. +        curpos++;
  2098. +    }
  2099. +
  2100. +    if( config_get_save_restore_picture( cfg ) ) {
  2101. +        snprintf( string, sizeof( string ),
  2102. +                  TVTIME_ICON_SAVEPICTUREGLOBAL "  %s",
  2103. +                  _("Save current settings as global defaults") );
  2104. +        menu_set_text( menu, curpos, string );
  2105. +        menu_set_enter_command( menu, curpos, TVTIME_SAVE_PICTURE_GLOBAL, "" );
  2106. +        curpos++;
  2107. +
  2108. +        snprintf( string, sizeof( string ),
  2109. +                  TVTIME_ICON_SAVEPICTURECHANNEL "  %s",
  2110. +                  _("Save current settings as channel defaults") );
  2111. +        menu_set_text( menu, curpos, string );
  2112. +        menu_set_enter_command( menu, curpos, TVTIME_SAVE_PICTURE_CHANNEL, "" );
  2113. +        curpos++;
  2114. +
  2115. +        snprintf( string, sizeof( string ), TVTIME_ICON_RESETTODEFAULTS " %s",
  2116. +                  _("Reset to global defaults") );
  2117. +        menu_set_text( menu, curpos, string );
  2118. +        menu_set_enter_command( menu, curpos, TVTIME_AUTO_ADJUST_PICT, "" );
  2119. +        curpos++;
  2120. +
  2121. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2122. +                  _("Back") );
  2123. +        menu_set_text( menu, curpos, string );
  2124. +        menu_set_enter_command( menu, curpos, TVTIME_SHOW_MENU, "root" );
  2125. +
  2126. +        commands_add_menu( cmd, menu );
  2127. +    } else {
  2128. +        snprintf( string, sizeof( string ), TVTIME_ICON_RESETTODEFAULTS "  %s",
  2129. +                  _("Reset to global defaults") );
  2130. +        menu_set_text( menu, curpos, string );
  2131. +        menu_set_enter_command( menu, curpos, TVTIME_AUTO_ADJUST_PICT, "" );
  2132. +        curpos++;
  2133. +
  2134. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2135. +                  _("Back") );
  2136. +        menu_set_text( menu, curpos, string );
  2137. +        menu_set_enter_command( menu, curpos, TVTIME_SHOW_MENU, "root" );
  2138. +        curpos++;
  2139. +
  2140. +        commands_add_menu( cmd, menu );
  2141. +    }
  2142. +
  2143. +
  2144. +    menu = menu_new( "brightness" );
  2145. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  2146. +              _("Setup"), _("Picture"), _("Brightness") );
  2147. +    menu_set_text( menu, 0, string );
  2148. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "picture" );
  2149. +    snprintf( string, sizeof( string ), TVTIME_ICON_TVLOGO "  %s: ---",
  2150. +              _("Current") );
  2151. +    menu_set_text( menu, 1, string );
  2152. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "picture" );
  2153. +
  2154. +    menu_set_default_cursor( menu, 1 );
  2155. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLUSBUTTON "  %s",
  2156. +              _("Increase") );
  2157. +    menu_set_text( menu, 2, string );
  2158. +    menu_set_enter_command( menu, 2, TVTIME_BRIGHTNESS_UP, "" );
  2159. +
  2160. +    snprintf( string, sizeof( string ), TVTIME_ICON_MINUSBUTTON "  %s",
  2161. +              _("Decrease") );
  2162. +    menu_set_text( menu, 3, string );
  2163. +    menu_set_enter_command( menu, 3, TVTIME_BRIGHTNESS_DOWN, "" );
  2164. +
  2165. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2166. +              _("Back") );
  2167. +    menu_set_text( menu, 4, string );
  2168. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "picture" );
  2169. +
  2170. +    commands_add_menu( cmd, menu );
  2171. +    if( vidin ) {
  2172. +        menu_set_value (commands_get_menu (cmd, "brightness"),
  2173. +                        videoinput_get_brightness (cmd->vidin),
  2174. +                        TVTIME_ICON_BRIGHTNESS);
  2175. +    }
  2176. +
  2177. +    menu = menu_new( "contrast" );
  2178. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  2179. +              _("Setup"), _("Picture"), _("Contrast") );
  2180. +    menu_set_text( menu, 0, string );
  2181. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "picture" );
  2182. +    snprintf( string, sizeof( string ), TVTIME_ICON_TVLOGO "  %s: ---",
  2183. +              _("Current") );
  2184. +    menu_set_text( menu, 1, string );
  2185. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "picture" );
  2186. +    menu_set_default_cursor( menu, 1 );
  2187. +
  2188. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLUSBUTTON "  %s",
  2189. +              _("Increase") );
  2190. +    menu_set_text( menu, 2, string );
  2191. +    menu_set_enter_command( menu, 2, TVTIME_CONTRAST_UP, "" );
  2192. +
  2193. +    snprintf( string, sizeof( string ), TVTIME_ICON_MINUSBUTTON "  %s",
  2194. +              _("Decrease") );
  2195. +    menu_set_text( menu, 3, string );
  2196. +    menu_set_enter_command( menu, 3, TVTIME_CONTRAST_DOWN, "" );
  2197. +
  2198. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2199. +              _("Back") );
  2200. +    menu_set_text( menu, 4, string );
  2201. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "picture" );
  2202. +
  2203. +    commands_add_menu( cmd, menu );
  2204. +    if( vidin ) {
  2205. +        menu_set_value (commands_get_menu( cmd, "contrast" ),
  2206. +                        videoinput_get_contrast( cmd->vidin ),
  2207. +                        TVTIME_ICON_CONTRAST);
  2208. +    }
  2209. +
  2210. +    menu = menu_new( "saturation" );
  2211. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  2212. +              _("Setup"), _("Picture"), _("Saturation") );
  2213. +    menu_set_text( menu, 0, string );
  2214. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "picture" );
  2215. +    snprintf( string, sizeof( string ), TVTIME_ICON_TVLOGO "  %s: ---",
  2216. +              _("Current") );
  2217. +    menu_set_text( menu, 1, string );
  2218. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "picture" );
  2219. +
  2220. +    menu_set_default_cursor( menu, 1 );
  2221. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLUSBUTTON "  %s",
  2222. +              _("Increase") );
  2223. +    menu_set_text( menu, 2, string );
  2224. +    menu_set_enter_command( menu, 2, TVTIME_SATURATION_UP, "" );
  2225. +
  2226. +    snprintf( string, sizeof( string ), TVTIME_ICON_MINUSBUTTON "  %s",
  2227. +              _("Decrease") );
  2228. +    menu_set_text( menu, 3, string );
  2229. +    menu_set_enter_command( menu, 3, TVTIME_SATURATION_DOWN, "" );
  2230. +
  2231. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2232. +              _("Back") );
  2233. +    menu_set_text( menu, 4, string );
  2234. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "picture" );
  2235. +
  2236. +    commands_add_menu( cmd, menu );
  2237. +    if( vidin ) {
  2238. +        menu_set_value (commands_get_menu (cmd, "saturation" ),
  2239. +                        videoinput_get_saturation (cmd->vidin),
  2240. +                        TVTIME_ICON_SATURATION);
  2241. +    }
  2242. +
  2243. +    menu = menu_new( "hue" );
  2244. +    snprintf( string, sizeof( string ), "%s - %s - %s",
  2245. +              _("Setup"), _("Picture"), _("Hue") );
  2246. +    menu_set_text( menu, 0, string );
  2247. +    menu_set_back_command( menu, TVTIME_SHOW_MENU, "picture" );
  2248. +    snprintf( string, sizeof( string ), TVTIME_ICON_TVLOGO "  %s: ---",
  2249. +              _("Current") );
  2250. +    menu_set_text( menu, 1, string );
  2251. +    menu_set_enter_command( menu, 1, TVTIME_SHOW_MENU, "picture" );
  2252. +    menu_set_default_cursor( menu, 1 );
  2253. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLUSBUTTON "  %s",
  2254. +              _("Increase") );
  2255. +    menu_set_text( menu, 2, string );
  2256. +    menu_set_enter_command( menu, 2, TVTIME_HUE_UP, "" );
  2257. +
  2258. +    snprintf( string, sizeof( string ), TVTIME_ICON_MINUSBUTTON "  %s",
  2259. +              _("Decrease") );
  2260. +    menu_set_text( menu, 3, string );
  2261. +    menu_set_enter_command( menu, 3, TVTIME_HUE_DOWN, "" );
  2262. +
  2263. +    snprintf( string, sizeof( string ), TVTIME_ICON_PLAINLEFTARROW "  %s",
  2264. +              _("Back") );
  2265. +    menu_set_text( menu, 4, string );
  2266. +    menu_set_enter_command( menu, 4, TVTIME_SHOW_MENU, "picture" );
  2267. +
  2268. +    commands_add_menu( cmd, menu );
  2269. +    if( vidin ) {
  2270. +        menu_set_value (commands_get_menu (cmd, "hue"),
  2271. +                        videoinput_get_hue (cmd->vidin),
  2272. +                        TVTIME_ICON_HUE);
  2273. +    }
  2274. +
  2275. +    if( cmd->xmltv ) {
  2276. +        menu = menu_new( "xmltv-language" );
  2277. +        snprintf( string, sizeof( string ), "%s",
  2278. +                  _("Preferred XMLTV language") );
  2279. +        menu_set_text( menu, 0, string );
  2280. +        commands_add_menu( cmd, menu );
  2281. +        reset_xmltv_languages_menu( menu, cmd->xmltv );
  2282. +    }
  2283. +
  2284. +    reinit_tuner( cmd );
  2285. +
  2286. +    return cmd;
  2287. +}
  2288. +
  2289. +void commands_delete( commands_t *cmd )
  2290. +{
  2291. +    int i;
  2292. +
  2293. +    for( i = 0; i < MAX_USER_MENUS; i++ ) {
  2294. +        if( cmd->menus[ i ] ) {
  2295. +            menu_delete( cmd->menus[ i ] );
  2296. +        }
  2297. +    }
  2298. +
  2299. +    if( cmd->xmltv ) xmltv_delete( cmd->xmltv );
  2300. +    free( cmd );
  2301. +}
  2302. +
  2303. +static void add_to_favorites( commands_t *cmd, int pos )
  2304. +{
  2305. +    int i;
  2306. +
  2307. +    for( i = 0; i < NUM_FAVORITES; i++ ) {
  2308. +        if( cmd->favorites[ i ] == pos ) return;
  2309. +    }
  2310. +    cmd->favorites[ cmd->curfavorite ] = pos;
  2311. +    cmd->curfavorite = (cmd->curfavorite + 1) % NUM_FAVORITES;
  2312. +    if( cmd->numfavorites < NUM_FAVORITES ) {
  2313. +        cmd->numfavorites++;
  2314. +    }
  2315. +}
  2316. +
  2317. +static void osd_list_audio_modes( tvtime_osd_t *osd, int ntsc, int curmode )
  2318. +{
  2319. +    tvtime_osd_list_set_lines( osd, ntsc ? 4 : 5 );
  2320. +    tvtime_osd_list_set_text( osd, 0, _("Preferred audio mode") );
  2321. +    tvtime_osd_list_set_text( osd, 1, _("Mono") );
  2322. +    tvtime_osd_list_set_text( osd, 2, _("Stereo") );
  2323. +    tvtime_osd_list_set_text( osd, 3, ntsc ?
  2324. +                              _("SAP") : _("Primary Language") );
  2325. +    if( !ntsc ) tvtime_osd_list_set_text( osd, 4, _("Secondary Language") );
  2326. +    if( curmode == VIDEOINPUT_MONO ) {
  2327. +        tvtime_osd_list_set_hilight( osd, 1 );
  2328. +    } else if( curmode == VIDEOINPUT_STEREO ) {
  2329. +        tvtime_osd_list_set_hilight( osd, 2 );
  2330. +    } else if( curmode == VIDEOINPUT_LANG1 || (ntsc && curmode == VIDEOINPUT_LANG2) ) {
  2331. +        tvtime_osd_list_set_hilight( osd, 3 );
  2332. +    } else if( curmode == VIDEOINPUT_LANG2 ) {
  2333. +        tvtime_osd_list_set_hilight( osd, 4 );
  2334. +    }
  2335. +    tvtime_osd_show_list( osd, 1, 0 );
  2336. +}
  2337. +
  2338. +/**
  2339. + * Hardcoded menus.
  2340. + */
  2341. +
  2342. +static void menu_off( commands_t *cmd )
  2343. +{
  2344. +    tvtime_osd_list_hold( cmd->osd, 0 );
  2345. +    tvtime_osd_show_list( cmd->osd, 0, 0 );
  2346. +    cmd->menuactive = 0;
  2347. +}
  2348. +
  2349. +static void menu_enter( commands_t *cmd )
  2350. +{
  2351. +    if( cmd->curmenu == MENU_FAVORITES ) {
  2352. +        if( cmd->curmenupos == cmd->numfavorites ) {
  2353. +            add_to_favorites( cmd, station_get_current_id( cmd->stationmgr ) );
  2354. +        } else {
  2355. +            if( cmd->curmenupos < cmd->numfavorites ) {
  2356. +                station_set( cmd->stationmgr, cmd->favorites[ cmd->curmenupos ] );
  2357. +                cmd->change_channel = 1;
  2358. +            }
  2359. +        }
  2360. +        menu_off( cmd );
  2361. +    } else if( cmd->curmenu == MENU_USER ) {
  2362. +        int command = menu_get_enter_command( cmd->curusermenu, cmd->curmenupos + 1 );
  2363. +        const char *argument = menu_get_enter_argument( cmd->curusermenu, cmd->curmenupos + 1 );
  2364. +
  2365. +        /* I check for MENU_ENTER just to avoid a malicious infinite loop. */
  2366. +        if( command != TVTIME_MENU_ENTER ) {
  2367. +            commands_handle( cmd, command, argument );
  2368. +        }
  2369. +    }
  2370. +}
  2371. +
  2372. +static void menu_back( commands_t *cmd )
  2373. +{
  2374. +    if( cmd->curmenu == MENU_FAVORITES ) {
  2375. +        commands_handle( cmd, TVTIME_SHOW_MENU, "stations" );
  2376. +    } else if( cmd->curmenu == MENU_USER ) {
  2377. +        int command = menu_get_back_command( cmd->curusermenu );
  2378. +        const char *argument = menu_get_back_argument( cmd->curusermenu );
  2379. +
  2380. +        /* I check for MENU_ENTER just to avoid a malicious infinite loop. */
  2381. +        if( command != TVTIME_MENU_ENTER ) {
  2382. +            commands_handle( cmd, command, argument );
  2383. +        }
  2384. +    }
  2385. +}
  2386. +
  2387. +static void display_current_menu( commands_t *cmd )
  2388. +{
  2389. +    int i;
  2390. +
  2391. +    if( cmd->curmenu == MENU_FAVORITES ) {
  2392. +        char string[ 128 ];
  2393. +        tvtime_osd_list_set_lines( cmd->osd, cmd->numfavorites + 3 );
  2394. +        tvtime_osd_list_set_text( cmd->osd, 0, _("Favorites") );
  2395. +        for( i = 0; i < cmd->numfavorites; i++ ) {
  2396. +            char text[ 32 ];
  2397. +            snprintf( text, sizeof (text), "%d", cmd->favorites[ i ] );
  2398. +            tvtime_osd_list_set_text( cmd->osd, i + 1, text );
  2399. +        }
  2400. +        snprintf( string, sizeof( string ), TVTIME_ICON_PLUSBUTTON "  %s",
  2401. +                  _("Add current channel") );
  2402. +        tvtime_osd_list_set_text( cmd->osd, cmd->numfavorites + 1, string );
  2403. +        snprintf( string, sizeof( string ), TVTIME_ICON_EXIT "  %s", _("Exit") );
  2404. +        tvtime_osd_list_set_text( cmd->osd, cmd->numfavorites + 2, string );
  2405. +        cmd->curmenusize = cmd->numfavorites + 2;
  2406. +    } else if( cmd->curmenu == MENU_USER && cmd->curusermenu ) {
  2407. +        tvtime_osd_list_set_lines( cmd->osd, menu_get_num_lines( cmd->curusermenu ) );
  2408. +        for( i = 0; i < menu_get_num_lines( cmd->curusermenu ); i++ ) {
  2409. +            tvtime_osd_list_set_text( cmd->osd, i, menu_get_text( cmd->curusermenu, i ) );
  2410. +        }
  2411. +        cmd->curmenusize = menu_get_num_lines( cmd->curusermenu ) - 1;
  2412. +    }
  2413. +
  2414. +    tvtime_osd_list_set_hilight( cmd->osd, cmd->curmenupos + 1 );
  2415. +    tvtime_osd_show_list( cmd->osd, 1, 0 );
  2416. +    tvtime_osd_list_hold( cmd->osd, 1 );
  2417. +}
  2418. +
  2419. +menu_t *commands_get_menu( commands_t *cmd, const char *menuname )
  2420. +{
  2421. +    int i;
  2422. +
  2423. +    for( i = 0; i < tvtime_num_builtin_menus(); i++ ) {
  2424. +        if( !strcasecmp( menu_table[ i ].name, menuname ) ) {
  2425. +            if( menu_table[ i ].menutype == MENU_REDIRECT ) {
  2426. +                return commands_get_menu( cmd, menu_table[ i ].dest );
  2427. +            } else {
  2428. +                return 0;
  2429. +            }
  2430. +        }
  2431. +    }
  2432. +
  2433. +    for( i = 0; i < MAX_USER_MENUS; i++ ) {
  2434. +        if( !cmd->menus[ i ] ) break;
  2435. +
  2436. +        if( !strcasecmp( menuname, menu_get_name( cmd->menus[ i ] ) ) ) {
  2437. +            return cmd->menus[ i ];
  2438. +            cmd->curusermenu = cmd->menus[ i ];
  2439. +            break;
  2440. +        }
  2441. +    }
  2442. +
  2443. +    return 0;
  2444. +}
  2445. +
  2446. +static int set_menu( commands_t *cmd, const char *menuname )
  2447. +{
  2448. +    int i;
  2449. +
  2450. +    if( !menuname || !*menuname ) {
  2451. +        return 0;
  2452. +    }
  2453. +
  2454. +    cmd->menuactive = 1;
  2455. +    cmd->curusermenu = 0;
  2456. +
  2457. +    for( i = 0; i < tvtime_num_builtin_menus(); i++ ) {
  2458. +        if( !strcasecmp( menu_table[ i ].name, menuname ) ) {
  2459. +            if( menu_table[ i ].menutype == MENU_REDIRECT ) {
  2460. +                return set_menu( cmd, menu_table[ i ].dest );
  2461. +            } else {
  2462. +                cmd->curmenu = menu_table[ i ].menutype;
  2463. +                cmd->curmenupos = 0;
  2464. +                return 1;
  2465. +            }
  2466. +        }
  2467. +    }
  2468. +
  2469. +    cmd->curmenu = MENU_USER;
  2470. +    cmd->curusermenu = 0;
  2471. +
  2472. +    if( menuname && *menuname ) {
  2473. +        for( i = 0; i < MAX_USER_MENUS; i++ ) {
  2474. +            if( !cmd->menus[ i ] ) {
  2475. +                break;
  2476. +            }
  2477. +
  2478. +            if( !strcasecmp( menuname, menu_get_name( cmd->menus[ i ] ) ) ) {
  2479. +                cmd->curusermenu = cmd->menus[ i ];
  2480. +                break;
  2481. +            }
  2482. +        }
  2483. +    }
  2484. +
  2485. +    if( cmd->curusermenu ) {
  2486. +        cmd->curmenupos = menu_get_cursor( cmd->curusermenu );
  2487. +        cmd->curmenusize = menu_get_num_lines( cmd->curusermenu ) - 1;
  2488. +        return 1;
  2489. +    }
  2490. +
  2491. +    cmd->menuactive = 0;
  2492. +    return 0;
  2493. +}
  2494. +
  2495. +void commands_refresh_menu( commands_t *cmd )
  2496. +{
  2497. +    if( cmd->menuactive ) {
  2498. +        if( cmd->curmenu == MENU_USER ) {
  2499. +            const char *curname = menu_get_name( cmd->curusermenu );
  2500. +            int i;
  2501. +
  2502. +            for( i = 0; i < tvtime_num_builtin_menus(); i++ ) {
  2503. +                if( !strncasecmp( menu_table[ i ].name, curname, strlen( menu_table[ i ].name ) ) ) {
  2504. +                    if( menu_table[ i ].menutype == MENU_REDIRECT ) {
  2505. +                        set_menu( cmd, menu_table[ i ].name );
  2506. +                        break;
  2507. +                    }
  2508. +                }
  2509. +            }
  2510. +        }
  2511. +        display_current_menu( cmd );
  2512. +    }
  2513. +}
  2514. +
  2515. +void commands_add_menu( commands_t *cmd, menu_t *menu )
  2516. +{
  2517. +    int i;
  2518. +
  2519. +    for( i = 0; i < MAX_USER_MENUS; i++ ) {
  2520. +        if( !cmd->menus[ i ] ) {
  2521. +            cmd->menus[ i ] = menu;
  2522. +            return;
  2523. +        }
  2524. +    }
  2525. +}
  2526. +
  2527. +void commands_set_station_mgr( commands_t *cmd, station_mgr_t *mgr )
  2528. +{
  2529. +    cmd->stationmgr = mgr;
  2530. +    reinit_tuner( cmd );
  2531. +}
  2532. +
  2533. +void commands_clear_menu_positions( commands_t *cmd )
  2534. +{
  2535. +    int i;
  2536. +
  2537. +    for( i = 0; i < MAX_USER_MENUS; i++ ) {
  2538. +        if( cmd->menus[ i ] ) {
  2539. +            menu_set_cursor( cmd->menus[ i ], menu_get_default_cursor( cmd->menus[ i ] ) );
  2540. +        } else {
  2541. +            return;
  2542. +        }
  2543. +    }
  2544. +}
  2545. +
  2546. +int commands_in_menu( commands_t *cmd )
  2547. +{
  2548. +    return cmd->menuactive;
  2549. +}
  2550. +
  2551. +static void osd_list_xmltv_languages( tvtime_osd_t *osd, commands_t *cmd )
  2552. +{
  2553. +    int num = xmltv_get_num_languages( cmd->xmltv );
  2554. +    const char *cur = xmltv_get_language( cmd->xmltv );
  2555. +    char string[ 128 ];
  2556. +    int i;
  2557. +
  2558. +    if( !cmd->xmltv ) return;
  2559. +
  2560. +    tvtime_osd_list_set_hilight( osd, 1 );
  2561. +    tvtime_osd_list_set_lines( osd, num + 2);
  2562. +    tvtime_osd_list_set_text( osd, 0, _("Preferred XMLTV language") );
  2563. +    tvtime_osd_list_set_text( osd, 1, _("Default language") );
  2564. +    for( i = 1; i <= num; i++ ) {
  2565. +        const char *code = xmltv_get_language_code( cmd->xmltv, i );
  2566. +        const char *name = xmltv_get_language_name( cmd->xmltv, i );
  2567. +        snprintf( string, sizeof( string ), "%s (%s)",
  2568. +                  name? name : _("Unknown language"), code );
  2569. +        tvtime_osd_list_set_text( osd, i + 1, string );
  2570. +        if( cur && code && !strncasecmp( cur, code, 2 ) ) {
  2571. +            tvtime_osd_list_set_hilight( osd, i + 1 );
  2572. +        }
  2573. +    }
  2574. +    tvtime_osd_show_list( osd, 1, 0 );
  2575. +}
  2576. +
  2577. +void commands_handle( commands_t *cmd, int tvtime_cmd, const char *arg )
  2578. +{
  2579. +    time_t now;
  2580. +    int volume;
  2581. +    int key;
  2582. +
  2583. +    if( tvtime_cmd == TVTIME_NOCOMMAND ) return;
  2584. +
  2585. +    if( cmd->menuactive && tvtime_is_menu_command( tvtime_cmd ) ) {
  2586. +        int x, y, line;
  2587. +        switch( tvtime_cmd ) {
  2588. +        case TVTIME_MENU_EXIT:
  2589. +            menu_off( cmd );
  2590. +            break;
  2591. +        case TVTIME_MENU_UP:
  2592. +            cmd->curmenupos = (cmd->curmenupos + cmd->curmenusize - 1) % (cmd->curmenusize);
  2593. +            if( cmd->curusermenu ) menu_set_cursor( cmd->curusermenu, cmd->curmenupos );
  2594. +            display_current_menu( cmd );
  2595. +            break;
  2596. +        case TVTIME_MENU_DOWN:
  2597. +            cmd->curmenupos = (cmd->curmenupos + 1) % (cmd->curmenusize);
  2598. +            if( cmd->curusermenu ) menu_set_cursor( cmd->curusermenu, cmd->curmenupos );
  2599. +            display_current_menu( cmd );
  2600. +            break;
  2601. +        case TVTIME_MENU_BACK: menu_back( cmd ); break;
  2602. +        case TVTIME_MENU_ENTER: menu_enter( cmd ); break;
  2603. +        case TVTIME_SHOW_MENU:
  2604. +            if( set_menu( cmd, arg ) ) {
  2605. +                display_current_menu( cmd );
  2606. +            } else {
  2607. +                menu_off( cmd );
  2608. +            }
  2609. +            break;
  2610. +        case TVTIME_MOUSE_MOVE:
  2611. +            sscanf( arg, "%d %d", &x, &y );
  2612. +            if( cmd->halfsize ) y *= 2;
  2613. +            line = tvtime_osd_list_get_line_pos( cmd->osd, y );
  2614. +            if( line > 0 ) {
  2615. +                cmd->curmenupos = (line - 1);
  2616. +                if( cmd->curusermenu ) menu_set_cursor( cmd->curusermenu, cmd->curmenupos );
  2617. +                display_current_menu( cmd );
  2618. +            }
  2619. +            break;
  2620. +        }
  2621. +        return;
  2622. +    }
  2623. +
  2624. +    switch( tvtime_cmd ) {
  2625. +    case TVTIME_NOOP:
  2626. +        break;
  2627. +
  2628. +    case TVTIME_QUIT:
  2629. +        cmd->quit = 1;
  2630. +        break;
  2631. +
  2632. +    case TVTIME_SHOW_MENU:
  2633. +        if( cmd->osd ) {
  2634. +            commands_clear_menu_positions( cmd );
  2635. +            if( set_menu( cmd, arg ) || set_menu( cmd, "root" ) ) {
  2636. +                display_current_menu( cmd );
  2637. +            }
  2638. +        }
  2639. +        break;
  2640. +
  2641. +    case TVTIME_KEY_EVENT:
  2642. +        key = input_string_to_special_key( arg );
  2643. +        if( !key ) key = arg[ 0 ];
  2644. +        tvtime_cmd = config_key_to_command( cmd->cfg, key );
  2645. +        if( tvtime_cmd != TVTIME_KEY_EVENT ) {
  2646. +            commands_handle( cmd, tvtime_cmd, arg );
  2647. +        }
  2648. +        break;
  2649. +
  2650. +    case TVTIME_UP:
  2651. +        if( cmd->menuactive ) {
  2652. +            commands_handle( cmd, TVTIME_MENU_UP, "" );
  2653. +        } else {
  2654. +            commands_handle( cmd, TVTIME_CHANNEL_INC, "" );
  2655. +        }
  2656. +        break;
  2657. +    case TVTIME_DOWN:
  2658. +        if( cmd->menuactive ) {
  2659. +            commands_handle( cmd, TVTIME_MENU_DOWN, "" );
  2660. +        } else {
  2661. +            commands_handle( cmd, TVTIME_CHANNEL_DEC, "" );
  2662. +        }
  2663. +        break;
  2664. +    case TVTIME_LEFT:
  2665. +        if( cmd->menuactive ) {
  2666. +            commands_handle( cmd, TVTIME_MENU_BACK, "" );
  2667. +        } else {
  2668. +            commands_handle( cmd, TVTIME_MIXER_DOWN, "" );
  2669. +        }
  2670. +        break;
  2671. +    case TVTIME_RIGHT:
  2672. +        if( cmd->menuactive ) {
  2673. +            commands_handle( cmd, TVTIME_MENU_ENTER, "" );
  2674. +        } else {
  2675. +            commands_handle( cmd, TVTIME_MIXER_UP, "" );
  2676. +        }
  2677. +        break;
  2678. +
  2679. +    case TVTIME_SLEEP:
  2680. +        time( &now );
  2681. +        /**
  2682. +         * increment sleeptimer by SLEEPTIMER_STEP if user hits
  2683. +         * button within 5 seconds else turn it off
  2684. +         */
  2685. +        if( cmd->sleeptimer_start && (now > (cmd->sleeptimer_start + 5)) ) {
  2686. +            cmd->sleeptimer = 0;
  2687. +            cmd->sleeptimer_start = 0;
  2688. +        } else if( cmd->sleeptimer > SLEEPTIMER_NUMSTEPS ) {
  2689. +            cmd->sleeptimer = 0;
  2690. +            cmd->sleeptimer_start = 0;
  2691. +        } else {
  2692. +            cmd->sleeptimer++;
  2693. +            cmd->sleeptimer_start = now;
  2694. +        }
  2695. +
  2696. +        if( cmd->osd ) {
  2697. +            char message[ 256 ];
  2698. +
  2699. +            if( cmd->sleeptimer ) {
  2700. +                snprintf( message, sizeof (message), _("Sleep in %d minutes."),
  2701. +                          sleeptimer_function( cmd->sleeptimer ) );
  2702. +            } else {
  2703. +                snprintf( message, sizeof (message), _("Sleep off.") );
  2704. +            }
  2705. +
  2706. +            tvtime_osd_show_message( cmd->osd, message );
  2707. +        }
  2708. +        break;
  2709. +
  2710. +    case TVTIME_SHOW_DEINTERLACER_INFO:
  2711. +        cmd->showdeinterlacerinfo = 1;
  2712. +        break;
  2713. +
  2714. +    case TVTIME_SHOW_STATS:
  2715. +        cmd->printdebug = 1;
  2716. +        break;
  2717. +
  2718. +    case TVTIME_RESTART:
  2719. +        cmd->restarttvtime = 1;
  2720. +        break;
  2721. +
  2722. +    case TVTIME_SCREENSHOT:
  2723. +        if( arg ) {
  2724. +            snprintf( cmd->screenshotfile, sizeof( cmd->screenshotfile ),
  2725. +                      "%s", arg );
  2726. +        } else {
  2727. +            *cmd->screenshotfile = 0;
  2728. +        }
  2729. +        cmd->screenshot = 1;
  2730. +        break;
  2731. +
  2732. +    case TVTIME_TOGGLE_CHANNEL_PAL_DK:
  2733. +        if( cmd->vidin ) {
  2734. +            int new_mode = (station_get_current_audio_norm( cmd->stationmgr ) + 1) % 3;
  2735. +            station_set_current_audio_norm( cmd->stationmgr, new_mode );
  2736. +            videoinput_set_pal_audio_mode( cmd->vidin,
  2737. +                                           station_get_current_audio_norm( cmd->stationmgr ) );
  2738. +            if( cmd->osd ) {
  2739. +                char message[ 128 ];
  2740. +                if( new_mode == VIDEOINPUT_PAL_I_AUDIO ) {
  2741. +                    snprintf( message, sizeof( message ),
  2742. +                              _("Using PAL-I audio decoding for this channel.") );
  2743. +                } else if( new_mode == VIDEOINPUT_PAL_DK_AUDIO ) {
  2744. +                    snprintf( message, sizeof( message ),
  2745. +                              _("Using PAL-DK audio decoding for this channel.") );
  2746. +                } else {
  2747. +                    snprintf( message, sizeof( message ),
  2748. +                              _("Using PAL-BG audio decoding for this channel.") );
  2749. +                }
  2750. +                reset_stations_menu( commands_get_menu( cmd, "stations" ),
  2751. +                                     (videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC ||
  2752. +                                      videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC_JP),
  2753. +                                     videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_PAL,
  2754. +                                     videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_SECAM,
  2755. +                                     (!strcasecmp( cmd->newfreqtable, "us-cable" ) ||
  2756. +                                      !strcasecmp( cmd->newfreqtable, "us-cable100" )),
  2757. +                                     station_get_current_active( cmd->stationmgr ), cmd->checkfreq,
  2758. +                                     cmd->scan_channels,
  2759. +                                     videoinput_is_v4l2( cmd->vidin ),
  2760. +                                     station_get_default_audio_norm( cmd->stationmgr ),
  2761. +                                     station_get_current_audio_norm( cmd->stationmgr ) );
  2762. +                commands_refresh_menu( cmd );
  2763. +                tvtime_osd_show_message( cmd->osd, message );
  2764. +            }
  2765. +        }
  2766. +        break;
  2767. +
  2768. +    case TVTIME_TOGGLE_PAL_DK_AUDIO:
  2769. +        if( cmd->vidin ) {
  2770. +            int dk_default = station_get_default_audio_norm( cmd->stationmgr );
  2771. +            char message[ 128 ];
  2772. +            dk_default = (dk_default + 1) % 3;
  2773. +            station_set_default_audio_norm( cmd->stationmgr, dk_default );
  2774. +            videoinput_set_pal_audio_mode( cmd->vidin,
  2775. +                                           station_get_current_audio_norm( cmd->stationmgr ) );
  2776. +            if( cmd->osd ) {
  2777. +                if( dk_default == VIDEOINPUT_PAL_I_AUDIO ) {
  2778. +                    snprintf( message, sizeof( message ),
  2779. +                              _("Defaulting to PAL-I audio decoding.") );
  2780. +                } else if( dk_default == VIDEOINPUT_PAL_DK_AUDIO ) {
  2781. +                    snprintf( message, sizeof( message ),
  2782. +                              _("Defaulting to PAL-DK audio decoding.") );
  2783. +                } else {
  2784. +                    snprintf( message, sizeof( message ),
  2785. +                              _("Defaulting to PAL-BG audio decoding.") );
  2786. +                }
  2787. +                reset_pal_input_menu( commands_get_menu( cmd, "input-pal" ),
  2788. +                                      cmd->vidin, cmd->stationmgr );
  2789. +                commands_refresh_menu( cmd );
  2790. +                tvtime_osd_show_message( cmd->osd, message );
  2791. +            }
  2792. +        }
  2793. +        break;
  2794. +
  2795. +    case TVTIME_TOGGLE_BARS:
  2796. +        cmd->showbars = !cmd->showbars;
  2797. +        break;
  2798. +
  2799. +    case TVTIME_TOGGLE_FULLSCREEN:
  2800. +        cmd->togglefullscreen = 1;
  2801. +        break;
  2802. +
  2803. +    case TVTIME_TOGGLE_FRAMERATE:
  2804. +        cmd->framerate = (cmd->framerate + 1) % FRAMERATE_MAX;
  2805. +        break;
  2806. +
  2807. +    case TVTIME_CHANNEL_SKIP:
  2808. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  2809. +            station_set_current_active( cmd->stationmgr, !station_get_current_active( cmd->stationmgr ) );
  2810. +            if( cmd->osd ) {
  2811. +                if( station_get_current_active( cmd->stationmgr ) ) {
  2812. +                    tvtime_osd_show_message( cmd->osd,
  2813. +                        _("Channel marked as active in the browse list.") );
  2814. +                } else {
  2815. +                    tvtime_osd_show_message( cmd->osd,
  2816. +                        _("Channel disabled from the browse list.") );
  2817. +                }
  2818. +            }
  2819. +            reset_stations_menu( commands_get_menu( cmd, "stations" ),
  2820. +                                 (videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC ||
  2821. +                                  videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC_JP),
  2822. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_PAL,
  2823. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_SECAM,
  2824. +                                 (!strcasecmp( cmd->newfreqtable, "us-cable" ) ||
  2825. +                                  !strcasecmp( cmd->newfreqtable, "us-cable100" )),
  2826. +                                 station_get_current_active( cmd->stationmgr ), cmd->checkfreq,
  2827. +                                 cmd->scan_channels,
  2828. +                                 videoinput_is_v4l2( cmd->vidin ),
  2829. +                                 station_get_default_audio_norm( cmd->stationmgr ),
  2830. +                                 station_get_current_audio_norm( cmd->stationmgr ) );
  2831. +            commands_refresh_menu( cmd );
  2832. +            station_writeconfig( cmd->stationmgr );
  2833. +        }
  2834. +        break;
  2835. +
  2836. +    case TVTIME_SET_AUDIO_BOOST:
  2837. +        cmd->boost = atoi( arg );
  2838. +        if( cmd->vidin ) {
  2839. +            videoinput_set_capture_volume( cmd->vidin, cmd->boost );
  2840. +        }
  2841. +        if( cmd->osd ) {
  2842. +            menu_t *boostmenu = commands_get_menu( cmd, "audioboost" );
  2843. +            char message[ 128 ];
  2844. +            reset_audio_boost_menu( boostmenu, cmd->boost );
  2845. +            commands_refresh_menu( cmd );
  2846. +            if( cmd->boost < 0 ) {
  2847. +                snprintf( message, sizeof( message ),
  2848. +                          _("Capture card volume will not be set by tvtime.") );
  2849. +            } else {
  2850. +                snprintf( message, sizeof( message ),
  2851. +                          _("Setting capture card volume to %d%%."),
  2852. +                          cmd->boost );
  2853. +            }
  2854. +            tvtime_osd_show_message( cmd->osd, message );
  2855. +        }
  2856. +        break;
  2857. +
  2858. +    case TVTIME_SET_DEINTERLACER:
  2859. +        cmd->setdeinterlacer = 1;
  2860. +        snprintf( cmd->deinterlacer, sizeof( cmd->deinterlacer ), "%s", arg );
  2861. +        break;
  2862. +
  2863. +    case TVTIME_SET_FREQUENCY_TABLE:
  2864. +        cmd->setfreqtable = 1;
  2865. +        snprintf( cmd->newfreqtable, sizeof( cmd->newfreqtable ), "%s", arg );
  2866. +        if( cmd->vidin ) {
  2867. +            reset_frequency_menu( commands_get_menu( cmd, "frequencies" ),
  2868. +                                  videoinput_get_norm( cmd->vidin ), cmd->newfreqtable );
  2869. +            commands_refresh_menu( cmd );
  2870. +        }
  2871. +        break;
  2872. +
  2873. +    case TVTIME_SET_FRAMERATE:
  2874. +        if( !strcasecmp( arg, "full" ) ) {
  2875. +            cmd->framerate = FRAMERATE_FULL;
  2876. +        } else if( !strcasecmp( arg, "top" ) ) {
  2877. +            cmd->framerate = FRAMERATE_HALF_TFF;
  2878. +        } else {
  2879. +            cmd->framerate = FRAMERATE_HALF_BFF;
  2880. +        }
  2881. +        if( cmd->osd ) {
  2882. +            if( cmd->framerate == FRAMERATE_FULL ) {
  2883. +                tvtime_osd_show_message( cmd->osd,
  2884. +                    _("Processing every input field.") );
  2885. +            } else if( cmd->framerate == FRAMERATE_HALF_TFF ) {
  2886. +                tvtime_osd_show_message( cmd->osd,
  2887. +                    _("Processing every top field.") );
  2888. +            } else {
  2889. +                tvtime_osd_show_message( cmd->osd,
  2890. +                    _("Processing every bottom field.") );
  2891. +            }
  2892. +        }
  2893. +        break;
  2894. +
  2895. +    case TVTIME_SET_INPUT_WIDTH:
  2896. +        cmd->newinputwidth = atoi( arg );
  2897. +        if( cmd->osd ) {
  2898. +            const char *curname = menu_get_name( cmd->curusermenu );
  2899. +            menu_t *sharpmenu = commands_get_menu( cmd, "hres" );
  2900. +            char message[ 128 ];
  2901. +            int maxw = cmd->vidin? videoinput_get_maxwidth( cmd->vidin ) : 0;
  2902. +            reset_inputwidth_menu( sharpmenu, cmd->newinputwidth, maxw );
  2903. +            curname = menu_get_name( cmd->curusermenu );
  2904. +            commands_refresh_menu( cmd );
  2905. +            snprintf( message, sizeof( message ),
  2906. +                      _("Horizontal resolution will be %d pixels on restart."),
  2907. +                      cmd->newinputwidth );
  2908. +            tvtime_osd_show_message( cmd->osd, message );
  2909. +        }
  2910. +        break;
  2911. +
  2912. +    case TVTIME_SET_FULLSCREEN_POSITION:
  2913. +        if( arg ) {
  2914. +            snprintf( cmd->newpos, sizeof( cmd->newpos ), "%s", arg );
  2915. +        }
  2916. +        break;
  2917. +
  2918. +    case TVTIME_SET_MATTE:
  2919. +        if( arg ) {
  2920. +            snprintf( cmd->newmatte, sizeof( cmd->newmatte ), "%s", arg );
  2921. +        }
  2922. +        break;
  2923. +
  2924. +    case TVTIME_SET_STATION:
  2925. +        if( arg ) {
  2926. +            if( isdigit( arg[ 0 ] ) ) {
  2927. +                station_set( cmd->stationmgr, atoi( arg ) );
  2928. +            } else {
  2929. +                station_set_by_name( cmd->stationmgr, arg );
  2930. +            }
  2931. +            cmd->change_channel = 1;
  2932. +        }
  2933. +        break;
  2934. +
  2935. +    case TVTIME_SET_NORM:
  2936. +        if( !arg || !*arg ) {
  2937. +            cmd->newnorm = "NTSC";
  2938. +        } else if( !strcasecmp( arg, "pal" ) ) {
  2939. +            cmd->newnorm = "PAL";
  2940. +        } else if( !strcasecmp( arg, "secam" ) ) {
  2941. +            cmd->newnorm = "SECAM";
  2942. +        } else if( !strcasecmp( arg, "pal-nc" ) ) {
  2943. +            cmd->newnorm = "PAL-Nc";
  2944. +        } else if( !strcasecmp( arg, "pal-m" ) ) {
  2945. +            cmd->newnorm = "PAL-M";
  2946. +        } else if( !strcasecmp( arg, "pal-n" ) ) {
  2947. +            cmd->newnorm = "PAL-N";
  2948. +        } else if( !strcasecmp( arg, "ntsc-jp" ) ) {
  2949. +            cmd->newnorm = "NTSC-JP";
  2950. +        } else if( !strcasecmp( arg, "pal-60" ) ) {
  2951. +            cmd->newnorm = "PAL-60";
  2952. +        } else {
  2953. +            cmd->newnorm = "NTSC";
  2954. +        }
  2955. +        cmd->normset = 1;
  2956. +
  2957. +        if( cmd->osd ) {
  2958. +            menu_t *normmenu = commands_get_menu( cmd, "norm" );
  2959. +            char message[ 128 ];
  2960. +            reset_norm_menu( normmenu, cmd->newnorm );
  2961. +            commands_refresh_menu( cmd );
  2962. +            snprintf( message, sizeof (message),
  2963. +                      _("Television standard will be %s on restart."),
  2964. +                      cmd->newnorm );
  2965. +            tvtime_osd_show_message( cmd->osd, message );
  2966. +        }
  2967. +        break;
  2968. +
  2969. +    case TVTIME_SET_XMLTV_LANGUAGE:
  2970. +        if( cmd->xmltv && arg ) {
  2971. +            if( isdigit( arg[ 0 ] ) ) {
  2972. +                xmltv_select_language( cmd->xmltv, atoi( arg ) );
  2973. +            } else if( !strcasecmp( arg, "none" ) ) {
  2974. +                xmltv_set_language( cmd->xmltv, 0 );
  2975. +            } else {
  2976. +                xmltv_set_language( cmd->xmltv, arg );
  2977. +            }
  2978. +            update_xmltv_listings( cmd );
  2979. +
  2980. +            if( cmd->osd ) {
  2981. +                char message[ 128 ];
  2982. +                menu_t *langmenu = commands_get_menu( cmd, "xmltv-language" );
  2983. +                int i = xmltv_get_langnum( cmd->xmltv );
  2984. +                const char *code = xmltv_get_language_code( cmd->xmltv, i );
  2985. +                const char *name = xmltv_get_language_name( cmd->xmltv, i );
  2986. +
  2987. +                reset_xmltv_languages_menu( langmenu, cmd->xmltv );
  2988. +                commands_refresh_menu( cmd );
  2989. +                if( !code ) {
  2990. +                    snprintf( message, sizeof( message ),
  2991. +                              _("Using default language for XMLTV data.") );
  2992. +                } else if( !name ) {
  2993. +                    snprintf( message, sizeof( message ),
  2994. +                              _("Using unknown language (%s) for XMLTV data."),
  2995. +                              code );
  2996. +                } else {
  2997. +                    snprintf( message, sizeof( message ),
  2998. +                              _("XMLTV language set to %s (%s)."),
  2999. +                              name, code );
  3000. +                }
  3001. +                tvtime_osd_show_message( cmd->osd, message );
  3002. +            }
  3003. +
  3004. +            config_save( cmd->cfg, "XMLTVLanguage", arg );
  3005. +        }
  3006. +        break;
  3007. +
  3008. +    case TVTIME_TOGGLE_ASPECT:
  3009. +        cmd->toggleaspect = 1;
  3010. +        break;
  3011. +
  3012. +    case TVTIME_TOGGLE_ALWAYSONTOP:
  3013. +        cmd->togglealwaysontop = 1;
  3014. +        break;
  3015. +
  3016. +    case TVTIME_CHANNEL_SAVE_TUNING:
  3017. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3018. +            char freq[ 32 ];
  3019. +            int pos;
  3020. +
  3021. +            snprintf( freq, sizeof( freq ), "%f", ((double) videoinput_get_tuner_freq( cmd->vidin )) / 1000.0 );
  3022. +            pos = station_add( cmd->stationmgr, 0, "Custom", freq, 0 );
  3023. +            station_writeconfig( cmd->stationmgr );
  3024. +            station_set( cmd->stationmgr, pos );
  3025. +            cmd->change_channel = 1;
  3026. +        }
  3027. +        break;
  3028. +
  3029. +    case TVTIME_CHANNEL_ACTIVATE_ALL:
  3030. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3031. +            if( cmd->osd ) {
  3032. +                tvtime_osd_show_message( cmd->osd,
  3033. +                                         _("All channels re-activated.") );
  3034. +            }
  3035. +            station_activate_all_channels( cmd->stationmgr );
  3036. +            station_writeconfig( cmd->stationmgr );
  3037. +        }
  3038. +        break;
  3039. +
  3040. +    case TVTIME_CHANNEL_RENUMBER:
  3041. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3042. +            /* If we're scanning and suddenly want to renumber, stop scanning. */
  3043. +            if( cmd->scan_channels ) {
  3044. +                commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3045. +            }
  3046. +
  3047. +            /* Accept input of the destination channel. */
  3048. +            if( cmd->digit_counter == 0 ) memset( cmd->next_chan_buffer, 0, 5 );
  3049. +            cmd->frame_counter = cmd->delay;
  3050. +            cmd->renumbering = 1;
  3051. +            if( cmd->osd ) {
  3052. +                char message[ 256 ];
  3053. +                snprintf( message, sizeof( message ),
  3054. +                          _("Remapping %d.  Enter new channel number."),
  3055. +                          station_get_current_id( cmd->stationmgr ) );
  3056. +                tvtime_osd_set_hold_message( cmd->osd, message, 0 );
  3057. +            }
  3058. +        }
  3059. +        break;
  3060. +
  3061. +    case TVTIME_CHANNEL_SCAN:
  3062. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3063. +            if( !cmd->checkfreq ) {
  3064. +                if( cmd->osd ) {
  3065. +                    tvtime_osd_show_message( cmd->osd,
  3066. +                      _("Scanner unavailable with signal checking disabled.") );
  3067. +                }
  3068. +            } else {
  3069. +                cmd->scan_channels = !cmd->scan_channels;
  3070. +
  3071. +                if( cmd->scan_channels && cmd->renumbering ) {
  3072. +                    memset( cmd->next_chan_buffer, 0, 5 );
  3073. +                    cmd->digit_counter = 0;
  3074. +                    cmd->frame_counter = 0;
  3075. +                    if( cmd->osd ) tvtime_osd_set_hold_message( cmd->osd, "", 0 );
  3076. +                    cmd->renumbering = 0;
  3077. +                }
  3078. +
  3079. +                if( cmd->osd ) {
  3080. +                    reset_stations_menu( commands_get_menu( cmd, "stations" ),
  3081. +                                         (videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC ||
  3082. +                                          videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC_JP),
  3083. +                                         videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_PAL,
  3084. +                                         videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_SECAM,
  3085. +                                         (!strcasecmp( cmd->newfreqtable, "us-cable" ) ||
  3086. +                                          !strcasecmp( cmd->newfreqtable, "us-cable100" )),
  3087. +                                         station_get_current_active( cmd->stationmgr ), cmd->checkfreq,
  3088. +                                         cmd->scan_channels,
  3089. +                                         videoinput_is_v4l2( cmd->vidin ),
  3090. +                                         station_get_default_audio_norm( cmd->stationmgr ),
  3091. +                                         station_get_current_audio_norm( cmd->stationmgr ) );
  3092. +                    commands_refresh_menu( cmd );
  3093. +
  3094. +                    if( cmd->scan_channels ) {
  3095. +                        tvtime_osd_set_hold_message( cmd->osd,
  3096. +                            _("Scanning for channels being broadcast."), 0 );
  3097. +                    } else {
  3098. +                        /* Nuke the hold message, and make sure we show nothing (hack). */
  3099. +                        tvtime_osd_set_hold_message( cmd->osd, "", 0 );
  3100. +                        tvtime_osd_show_message( cmd->osd, " " );
  3101. +                    }
  3102. +                    tvtime_osd_show_info( cmd->osd );
  3103. +                }
  3104. +            }
  3105. +        }
  3106. +        break;
  3107. +
  3108. +    case TVTIME_TOGGLE_CC:
  3109. +        if( cmd->vbi ) {
  3110. +            vbidata_capture_mode( cmd->vbi, cmd->capturemode ? CAPTURE_OFF : CAPTURE_CC1 );
  3111. +            if( cmd->capturemode ) {
  3112. +                if( cmd->osd ) {
  3113. +                    tvtime_osd_show_message( cmd->osd,
  3114. +                        _("Closed captions disabled.") );
  3115. +                }
  3116. +                cmd->capturemode = CAPTURE_OFF;
  3117. +            } else {
  3118. +                if( cmd->osd ) {
  3119. +                    tvtime_osd_show_message( cmd->osd,
  3120. +                        _("Closed captions enabled.") );
  3121. +                }
  3122. +                cmd->capturemode = CAPTURE_CC1;
  3123. +            }
  3124. +            if( cmd->capturemode ) {
  3125. +                config_save( cmd->cfg, "ShowCC", "1" );
  3126. +            } else {
  3127. +                config_save( cmd->cfg, "ShowCC", "0" );
  3128. +            }
  3129. +        } else {
  3130. +            if( cmd->osd ) {
  3131. +                tvtime_osd_show_message( cmd->osd,
  3132. +                    _("No VBI device configured for CC decoding.") );
  3133. +            }
  3134. +        }
  3135. +        break;
  3136. +
  3137. +    case TVTIME_TOGGLE_PAL_SECAM:
  3138. +        videoinput_toggle_pal_secam( cmd->vidin );
  3139. +        if( videoinput_has_tuner( cmd->vidin ) ) {
  3140. +            station_set_current_norm( cmd->stationmgr, videoinput_get_norm_name( videoinput_get_norm( cmd->vidin ) ) );
  3141. +            station_writeconfig( cmd->stationmgr );
  3142. +        }
  3143. +        if( cmd->osd ) {
  3144. +            char message[ 128 ];
  3145. +            tvtime_osd_set_norm( cmd->osd, videoinput_get_norm_name( videoinput_get_norm( cmd->vidin ) ) );
  3146. +            tvtime_osd_show_info( cmd->osd );
  3147. +            snprintf( message, sizeof( message ),
  3148. +                      _("Colour decoding for this channel set to %s."),
  3149. +                      videoinput_get_norm_name( videoinput_get_norm( cmd->vidin ) ) );
  3150. +            tvtime_osd_show_message( cmd->osd, message );
  3151. +
  3152. +            reset_stations_menu( commands_get_menu( cmd, "stations" ),
  3153. +                                 (videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC ||
  3154. +                                  videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC_JP),
  3155. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_PAL,
  3156. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_SECAM,
  3157. +                                 (!strcasecmp( cmd->newfreqtable, "us-cable" ) ||
  3158. +                                  !strcasecmp( cmd->newfreqtable, "us-cable100" )),
  3159. +                                 station_get_current_active( cmd->stationmgr ), cmd->checkfreq,
  3160. +                                 cmd->scan_channels,
  3161. +                                 videoinput_is_v4l2( cmd->vidin ),
  3162. +                                 station_get_default_audio_norm( cmd->stationmgr ),
  3163. +                                 station_get_current_audio_norm( cmd->stationmgr ) );
  3164. +            commands_refresh_menu( cmd );
  3165. +        }
  3166. +
  3167. +        break;
  3168. +
  3169. +    case TVTIME_DISPLAY_MESSAGE:
  3170. +        if( cmd->osd && arg ) tvtime_osd_show_message( cmd->osd, arg );
  3171. +        break;
  3172. +
  3173. +    case TVTIME_DISPLAY_INFO:
  3174. +        cmd->displayinfo = !cmd->displayinfo;
  3175. +        if( cmd->osd ) {
  3176. +            if( cmd->xmltv && cmd->vidin &&
  3177. +                videoinput_has_tuner( cmd->vidin ) ) {
  3178. +                update_xmltv_display( cmd );
  3179. +            }
  3180. +            if( cmd->displayinfo ) {
  3181. +                tvtime_osd_hold( cmd->osd, 1 );
  3182. +                tvtime_osd_show_info( cmd->osd );
  3183. +            } else {
  3184. +                tvtime_osd_hold( cmd->osd, 0 );
  3185. +                tvtime_osd_clear( cmd->osd );
  3186. +            }
  3187. +        }
  3188. +        break;
  3189. +
  3190. +    case TVTIME_RUN_COMMAND:
  3191. +        if( arg ) {
  3192. +            char commandline[ 256 ];
  3193. +            snprintf( commandline, sizeof (commandline), "%s &", arg );
  3194. +            if( cmd->osd ) {
  3195. +                char message[ 256 ];
  3196. +                snprintf( message, sizeof (message), _("Running: %s"), arg );
  3197. +                tvtime_osd_show_message( cmd->osd, message );
  3198. +            }
  3199. +            system( commandline );
  3200. +        }
  3201. +        break;
  3202. +
  3203. +    case TVTIME_TOGGLE_CREDITS:
  3204. +        break;
  3205. +
  3206. +    case TVTIME_SET_AUDIO_MODE:
  3207. +        if( cmd->vidin ) {
  3208. +            if( !strcasecmp( arg, "mono" ) ) {
  3209. +                videoinput_set_audio_mode( cmd->vidin, VIDEOINPUT_MONO );
  3210. +            } else if( !strcasecmp( arg, "stereo" ) ) {
  3211. +                videoinput_set_audio_mode( cmd->vidin, VIDEOINPUT_STEREO );
  3212. +            } else if( !strcasecmp( arg, "sap" ) || !strcasecmp( arg, "lang1" ) ) {
  3213. +                videoinput_set_audio_mode( cmd->vidin, VIDEOINPUT_LANG1 );
  3214. +            } else {
  3215. +                videoinput_set_audio_mode( cmd->vidin, VIDEOINPUT_LANG2 );
  3216. +            }
  3217. +            if( cmd->osd ) {
  3218. +                if( !cmd->menuactive ) {
  3219. +                    osd_list_audio_modes( cmd->osd, videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC,
  3220. +                                          videoinput_get_audio_mode( cmd->vidin ) );
  3221. +                }
  3222. +                tvtime_osd_set_audio_mode( cmd->osd, videoinput_get_audio_mode_name( cmd->vidin, videoinput_get_audio_mode( cmd->vidin ) ) );
  3223. +                tvtime_osd_show_info( cmd->osd );
  3224. +                reset_audio_mode_menu( commands_get_menu( cmd, "audiomode" ),
  3225. +                                       videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC,
  3226. +                                       videoinput_get_audio_mode( cmd->vidin ) );
  3227. +                commands_refresh_menu( cmd );
  3228. +            }
  3229. +        }
  3230. +        break;
  3231. +
  3232. +    case TVTIME_TOGGLE_AUDIO_MODE:
  3233. +        if( cmd->vidin ) {
  3234. +            videoinput_set_audio_mode( cmd->vidin, videoinput_get_audio_mode( cmd->vidin ) << 1 );
  3235. +            if( cmd->osd ) {
  3236. +                osd_list_audio_modes( cmd->osd, videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC,
  3237. +                                      videoinput_get_audio_mode( cmd->vidin ) );
  3238. +                tvtime_osd_set_audio_mode( cmd->osd, videoinput_get_audio_mode_name( cmd->vidin, videoinput_get_audio_mode( cmd->vidin ) ) );
  3239. +                tvtime_osd_show_info( cmd->osd );
  3240. +                reset_audio_mode_menu( commands_get_menu( cmd, "audiomode" ),
  3241. +                                       videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC,
  3242. +                                       videoinput_get_audio_mode( cmd->vidin ) );
  3243. +                commands_refresh_menu( cmd );
  3244. +            }
  3245. +        }
  3246. +        break;
  3247. +
  3248. +    case TVTIME_TOGGLE_DEINTERLACER:
  3249. +        cmd->toggledeinterlacer = 1;
  3250. +        break;
  3251. +
  3252. +    case TVTIME_TOGGLE_PULLDOWN_DETECTION:
  3253. +        cmd->togglepulldowndetection = 1;
  3254. +        break;
  3255. +
  3256. +    case TVTIME_TOGGLE_SIGNAL_DETECTION:
  3257. +        cmd->checkfreq = !cmd->checkfreq;
  3258. +        if( !cmd->checkfreq && cmd->scan_channels ) {
  3259. +            commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3260. +        }
  3261. +        if( cmd->osd ) {
  3262. +            reset_stations_menu( commands_get_menu( cmd, "stations" ),
  3263. +                                 (videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC ||
  3264. +                                  videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_NTSC_JP),
  3265. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_PAL,
  3266. +                                 videoinput_get_norm( cmd->vidin ) == VIDEOINPUT_SECAM,
  3267. +                                 (!strcasecmp( cmd->newfreqtable, "us-cable" ) ||
  3268. +                                  !strcasecmp( cmd->newfreqtable, "us-cable100" )),
  3269. +                                 station_get_current_active( cmd->stationmgr ), cmd->checkfreq,
  3270. +                                 cmd->scan_channels,
  3271. +                                 videoinput_is_v4l2( cmd->vidin ),
  3272. +                                 station_get_default_audio_norm( cmd->stationmgr ),
  3273. +                                 station_get_current_audio_norm( cmd->stationmgr ) );
  3274. +            if( cmd->checkfreq ) {
  3275. +                tvtime_osd_show_message( cmd->osd,
  3276. +                    _("Signal detection enabled.") );
  3277. +            } else {
  3278. +                tvtime_osd_show_message( cmd->osd,
  3279. +                    _("Signal detection disabled.") );
  3280. +            }
  3281. +            commands_refresh_menu( cmd );
  3282. +        }
  3283. +        break;
  3284. +
  3285. +    case TVTIME_TOGGLE_XDS:
  3286. +        if( cmd->vidin && videoinput_get_height( cmd->vidin ) == 480 && cmd->vbi ) {
  3287. +            cmd->usexds = !cmd->usexds;
  3288. +            vbidata_capture_xds( cmd->vbi, cmd->usexds );
  3289. +            if( cmd->osd ) {
  3290. +                if( cmd->usexds ) {
  3291. +                    tvtime_osd_show_message( cmd->osd,
  3292. +                        _("XDS decoding enabled.") );
  3293. +                } else {
  3294. +                    tvtime_osd_show_message( cmd->osd,
  3295. +                        _("XDS decoding disabled.") );
  3296. +                }
  3297. +            }
  3298. +        }
  3299. +        break;
  3300. +
  3301. +    case TVTIME_CHANNEL_CHAR:
  3302. +        if( arg && isdigit( arg[ 0 ] ) && cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3303. +
  3304. +            /* If we're scanning and the user hits a key, stop scanning. */
  3305. +            if( cmd->scan_channels ) {
  3306. +                commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3307. +            }
  3308. +
  3309. +            /* Decode the input char from commands.  */
  3310. +            if( cmd->digit_counter == 0 ) memset( cmd->next_chan_buffer, 0, 5 );
  3311. +            cmd->next_chan_buffer[ cmd->digit_counter ] = arg[ 0 ];
  3312. +            cmd->digit_counter++;
  3313. +            cmd->frame_counter = cmd->delay;
  3314. +
  3315. +            /**
  3316. +             * Send an enter command if we type more
  3317. +             * digits than there are channels.
  3318. +             */
  3319. +            if( cmd->digit_counter > 0 && (station_get_max_position( cmd->stationmgr ) < 10) ) {
  3320. +                commands_handle( cmd, TVTIME_ENTER, 0 );
  3321. +            } else if( cmd->digit_counter > 1 && (station_get_max_position( cmd->stationmgr ) < 100) ) {
  3322. +                commands_handle( cmd, TVTIME_ENTER, 0 );
  3323. +            } else if( cmd->digit_counter > 2 ) {
  3324. +                commands_handle( cmd, TVTIME_ENTER, 0 );
  3325. +            }
  3326. +        }
  3327. +        break;
  3328. +
  3329. +    case TVTIME_TOGGLE_COLOUR_INVERT:
  3330. +        cmd->apply_invert = !cmd->apply_invert;
  3331. +        if( cmd->osd ) {
  3332. +            reset_filters_menu( commands_get_menu( cmd, "filters" ),
  3333. +                                cmd->apply_invert, cmd->apply_mirror,
  3334. +                                cmd->apply_chroma_kill,
  3335. +                                cmd->vidin && videoinput_get_height( cmd->vidin ) == 480,
  3336. +                                cmd->pulldown_alg );
  3337. +            commands_refresh_menu( cmd );
  3338. +
  3339. +            if( cmd->apply_invert ) {
  3340. +                tvtime_osd_show_message( cmd->osd, _("Colour invert enabled.") );
  3341. +            } else {
  3342. +                tvtime_osd_show_message( cmd->osd, _("Colour invert disabled.") );
  3343. +            }
  3344. +        }
  3345. +        if( cmd->apply_invert ) {
  3346. +            config_save( cmd->cfg, "ColourInvert", "1" );
  3347. +        } else {
  3348. +            config_save( cmd->cfg, "ColourInvert", "0" );
  3349. +        }
  3350. +        break;
  3351. +
  3352. +    case TVTIME_TOGGLE_MIRROR:
  3353. +        cmd->apply_mirror = !cmd->apply_mirror;
  3354. +        if( cmd->osd ) {
  3355. +            reset_filters_menu( commands_get_menu( cmd, "filters" ),
  3356. +                                cmd->apply_invert, cmd->apply_mirror,
  3357. +                                cmd->apply_chroma_kill,
  3358. +                                cmd->vidin && videoinput_get_height( cmd->vidin ) == 480,
  3359. +                                cmd->pulldown_alg );
  3360. +            commands_refresh_menu( cmd );
  3361. +
  3362. +            if( cmd->apply_mirror ) {
  3363. +                tvtime_osd_show_message( cmd->osd, _("Mirror enabled.") );
  3364. +            } else {
  3365. +                tvtime_osd_show_message( cmd->osd, _("Mirror disabled.") );
  3366. +            }
  3367. +        }
  3368. +        if( cmd->apply_mirror ) {
  3369. +            config_save( cmd->cfg, "MirrorInput", "1" );
  3370. +        } else {
  3371. +            config_save( cmd->cfg, "MirrorInput", "0" );
  3372. +        }
  3373. +        break;
  3374. +
  3375. +    case TVTIME_TOGGLE_CHROMA_KILL:
  3376. +        cmd->apply_chroma_kill = !cmd->apply_chroma_kill;
  3377. +        if( cmd->osd ) {
  3378. +            reset_filters_menu( commands_get_menu( cmd, "filters" ),
  3379. +                                cmd->apply_invert, cmd->apply_mirror,
  3380. +                                cmd->apply_chroma_kill,
  3381. +                                cmd->vidin && videoinput_get_height( cmd->vidin ) == 480,
  3382. +                                cmd->pulldown_alg );
  3383. +            commands_refresh_menu( cmd );
  3384. +
  3385. +            if( cmd->apply_chroma_kill ) {
  3386. +                tvtime_osd_show_message( cmd->osd, _("Chroma kill enabled.") );
  3387. +            } else {
  3388. +                tvtime_osd_show_message( cmd->osd, _("Chroma kill disabled.") );
  3389. +            }
  3390. +        }
  3391. +        break;
  3392. +
  3393. +    case TVTIME_OVERSCAN_UP:
  3394. +    case TVTIME_OVERSCAN_DOWN:
  3395. +        cmd->overscan = cmd->overscan + ( (tvtime_cmd == TVTIME_OVERSCAN_UP) ? 0.0025 : -0.0025 );
  3396. +        if( cmd->overscan > 0.4 ) cmd->overscan = 0.4; if( cmd->overscan < 0.0 ) cmd->overscan = 0.0;
  3397. +
  3398. +        if( cmd->osd ) {
  3399. +            char message[ 200 ];
  3400. +            snprintf( message, sizeof( message ), _("Overscan: %.1f%%"),
  3401. +                      cmd->overscan * 2.0 * 100.0 );
  3402. +            tvtime_osd_show_message( cmd->osd, message );
  3403. +            reset_overscan_menu( commands_get_menu( cmd, "overscan" ), cmd->overscan );
  3404. +            commands_refresh_menu( cmd );
  3405. +        }
  3406. +        break;
  3407. +
  3408. +    case TVTIME_AUTO_ADJUST_PICT:
  3409. +        if( cmd->vidin ) {
  3410. +            if( cmd->brightness >= 0 ) {
  3411. +                videoinput_set_brightness( cmd->vidin, cmd->brightness );
  3412. +            } else {
  3413. +                videoinput_set_brightness( cmd->vidin, 50 );
  3414. +            }
  3415. +            if( cmd->contrast >= 0 ) {
  3416. +                videoinput_set_contrast( cmd->vidin, cmd->contrast );
  3417. +            } else {
  3418. +                videoinput_set_contrast( cmd->vidin, 50 );
  3419. +            }
  3420. +            if( cmd->saturation >= 0 ) {
  3421. +                videoinput_set_saturation( cmd->vidin, cmd->saturation );
  3422. +            } else {
  3423. +                videoinput_set_saturation( cmd->vidin, 50 );
  3424. +            }
  3425. +            if( cmd->hue >= 0 ) {
  3426. +                videoinput_set_hue( cmd->vidin, cmd->hue );
  3427. +            } else {
  3428. +                videoinput_set_hue( cmd->vidin, 50 );
  3429. +            }
  3430. +            if( cmd->osd ) {
  3431. +                tvtime_osd_show_message( cmd->osd,
  3432. +                    _("Picture settings reset to defaults.") );
  3433. +                menu_set_value( commands_get_menu( cmd, "brightness" ),
  3434. +                                videoinput_get_brightness( cmd->vidin ),
  3435. +                                TVTIME_ICON_BRIGHTNESS );
  3436. +                menu_set_value( commands_get_menu( cmd, "contrast" ),
  3437. +                                videoinput_get_brightness( cmd->vidin ),
  3438. +                                TVTIME_ICON_CONTRAST );
  3439. +                menu_set_value( commands_get_menu( cmd, "saturation" ),
  3440. +                                videoinput_get_brightness( cmd->vidin ),
  3441. +                                TVTIME_ICON_SATURATION );
  3442. +                menu_set_value( commands_get_menu( cmd, "hue" ),
  3443. +                                videoinput_get_brightness( cmd->vidin ),
  3444. +                                TVTIME_ICON_HUE );
  3445. +            }
  3446. +        }
  3447. +        break;
  3448. +
  3449. +    case TVTIME_AUTO_ADJUST_WINDOW:
  3450. +        cmd->resizewindow = 1;
  3451. +        break;
  3452. +
  3453. +    case TVTIME_TOGGLE_NTSC_CABLE_MODE:
  3454. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3455. +            station_toggle_us_cable_mode( cmd->stationmgr );
  3456. +            if( station_get_us_cable_mode( cmd->stationmgr ) == NTSC_CABLE_MODE_STANDARD ) {
  3457. +                config_save( cmd->cfg, "NTSCCableMode", "Nominal" );
  3458. +                if( cmd->osd ) {
  3459. +                    tvtime_osd_show_message( cmd->osd,
  3460. +                        _("Using nominal NTSC cable frequencies.") );
  3461. +                }
  3462. +            } else if( station_get_us_cable_mode( cmd->stationmgr ) == NTSC_CABLE_MODE_IRC ) {
  3463. +                config_save( cmd->cfg, "NTSCCableMode", "IRC" );
  3464. +                if( cmd->osd ) {
  3465. +                    tvtime_osd_show_message( cmd->osd,
  3466. +                        _("Using IRC cable frequencies.") );
  3467. +                }
  3468. +            } else if( station_get_us_cable_mode( cmd->stationmgr ) == NTSC_CABLE_MODE_HRC ) {
  3469. +                config_save( cmd->cfg, "NTSCCableMode", "HRC" );
  3470. +                if( cmd->osd ) {
  3471. +                    tvtime_osd_show_message( cmd->osd,
  3472. +                        _("Using HRC cable frequencies.") );
  3473. +                }
  3474. +            }
  3475. +            cmd->change_channel = 1;
  3476. +        }
  3477. +        break;
  3478. +
  3479. +    case TVTIME_FINETUNE_DOWN:
  3480. +    case TVTIME_FINETUNE_UP:
  3481. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3482. +            station_set_current_finetune( cmd->stationmgr, station_get_current_finetune( cmd->stationmgr )
  3483. +                                          + (tvtime_cmd == TVTIME_FINETUNE_UP ? 1 : -1) );
  3484. +            videoinput_set_tuner_freq( cmd->vidin, station_get_current_frequency( cmd->stationmgr )
  3485. +                                       + ((station_get_current_finetune( cmd->stationmgr ) * 1000)/16) );
  3486. +
  3487. +            if( cmd->vbi ) {
  3488. +                vbidata_reset( cmd->vbi );
  3489. +                vbidata_capture_mode( cmd->vbi, cmd->capturemode );
  3490. +            }
  3491. +
  3492. +            if( cmd->osd ) {
  3493. +                menu_set_value (commands_get_menu (cmd, "finetune"),
  3494. +                                station_get_current_finetune (cmd->stationmgr),
  3495. +                                TVTIME_ICON_FINETUNECHANNEL);
  3496. +                commands_refresh_menu( cmd );
  3497. +                tvtime_osd_show_data_bar_centered( cmd->osd, _("Finetune"),
  3498. +                                                   station_get_current_finetune( cmd->stationmgr ) );
  3499. +            }
  3500. +        } else if( cmd->osd ) {
  3501. +            tvtime_osd_show_info( cmd->osd );
  3502. +        }
  3503. +        break;
  3504. +
  3505. +    case TVTIME_CHANNEL_INC:
  3506. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3507. +
  3508. +            /**
  3509. +             * If we're scanning and the user hits a key, stop scanning.
  3510. +             * arg will be 0 if the scanner has called us.
  3511. +             */
  3512. +            if( cmd->scan_channels && arg ) {
  3513. +                commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3514. +            }
  3515. +
  3516. +            station_inc( cmd->stationmgr );
  3517. +            cmd->change_channel = 1;
  3518. +        } else if( cmd->osd ) {
  3519. +            tvtime_osd_show_info( cmd->osd );
  3520. +        }
  3521. +        break;
  3522. +    case TVTIME_CHANNEL_DEC:
  3523. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3524. +
  3525. +            /* If we're scanning and the user hits a key, stop scanning. */
  3526. +            if( cmd->scan_channels ) {
  3527. +                commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3528. +            }
  3529. +
  3530. +            station_dec( cmd->stationmgr );
  3531. +            cmd->change_channel = 1;
  3532. +        } else if( cmd->osd ) {
  3533. +            tvtime_osd_show_info( cmd->osd );
  3534. +        }
  3535. +        break;
  3536. +
  3537. +    case TVTIME_CHANNEL_PREV:
  3538. +        if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3539. +
  3540. +            /* If we're scanning and the user hits a key, stop scanning. */
  3541. +            if( cmd->scan_channels ) {
  3542. +                commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3543. +            }
  3544. +
  3545. +            station_prev( cmd->stationmgr );
  3546. +            cmd->change_channel = 1;
  3547. +        } else if( cmd->osd ) {
  3548. +            tvtime_osd_show_info( cmd->osd );
  3549. +        }
  3550. +        break;
  3551. +
  3552. +    case TVTIME_MIXER_TOGGLE_MUTE:
  3553. +        mixer->mute( !mixer->ismute() );
  3554. +
  3555. +        if( cmd->osd ) {
  3556. +            tvtime_osd_show_data_bar( cmd->osd, _("Volume"), (mixer->get_volume()) & 0xff );
  3557. +        }
  3558. +        break;
  3559. +
  3560. +    case TVTIME_MIXER_UP:
  3561. +    case TVTIME_MIXER_DOWN:
  3562. +
  3563. +        /* If the user hits the volume control, drop us out of mute mode. */
  3564. +        if( cmd->vidin && videoinput_get_muted( cmd->vidin ) ) {
  3565. +            commands_handle( cmd, TVTIME_TOGGLE_MUTE, 0 );
  3566. +        }
  3567. +        /* Check to see if an argument was passed, if so, use it. */
  3568. +        if (atoi(arg) > 0) {
  3569. +            int perc = atoi(arg);
  3570. +            volume = mixer->set_volume( ( (tvtime_cmd == TVTIME_MIXER_UP) ? perc : -perc ) );
  3571. +        } else {
  3572. +            volume = mixer->set_volume( ( (tvtime_cmd == TVTIME_MIXER_UP) ? 1 : -1 ) );
  3573. +        }
  3574. +
  3575. +        if( cmd->osd ) {
  3576. +            tvtime_osd_show_data_bar( cmd->osd, _("Volume"), volume & 0xff );
  3577. +        }
  3578. +        break;
  3579. +
  3580. +    case TVTIME_TOGGLE_MUTE:
  3581. +        if( cmd->vidin ) {
  3582. +            videoinput_mute( cmd->vidin, !videoinput_get_muted( cmd->vidin ) );
  3583. +            if( cmd->osd ) {
  3584. +                tvtime_osd_volume_muted( cmd->osd, videoinput_get_muted( cmd->vidin ) );
  3585. +            }
  3586. +        }
  3587. +        break;
  3588. +
  3589. +    case TVTIME_TOGGLE_INPUT:
  3590. +        if( cmd->vidin ) {
  3591. +            cmd->frame_counter = 0;
  3592. +
  3593. +            if( cmd->renumbering ) {
  3594. +                memset( cmd->next_chan_buffer, 0, sizeof( cmd->next_chan_buffer ) );
  3595. +                commands_handle( cmd, TVTIME_ENTER, 0 );
  3596. +            }
  3597. +
  3598. +            if( cmd->scan_channels ) {
  3599. +                commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3600. +            }
  3601. +
  3602. +            videoinput_set_input_num( cmd->vidin, ( videoinput_get_input_num( cmd->vidin ) + 1 ) % videoinput_get_num_inputs( cmd->vidin ) );
  3603. +            reinit_tuner( cmd );
  3604. +
  3605. +            if( cmd->osd ) {
  3606. +                char string[ 128 ];
  3607. +                snprintf( string, sizeof( string ),
  3608. +                          TVTIME_ICON_VIDEOINPUT "  %s: %s",
  3609. +                          _("Change video source"),
  3610. +                          videoinput_get_input_name( cmd->vidin ) );
  3611. +                menu_set_text( commands_get_menu( cmd, "input" ), 1, string );
  3612. +                commands_refresh_menu( cmd );
  3613. +                tvtime_osd_set_input( cmd->osd, videoinput_get_input_name( cmd->vidin ) );
  3614. +                tvtime_osd_show_info( cmd->osd );
  3615. +            }
  3616. +        }
  3617. +        break;
  3618. +
  3619. +    case TVTIME_SET_INPUT:
  3620. +        if( cmd->vidin ) {
  3621. +            cmd->frame_counter = 0;
  3622. +
  3623. +            if( cmd->renumbering ) {
  3624. +                memset( cmd->next_chan_buffer, 0, sizeof( cmd->next_chan_buffer ) );
  3625. +                commands_handle( cmd, TVTIME_ENTER, 0 );
  3626. +            }
  3627. +
  3628. +            if( cmd->scan_channels ) {
  3629. +                commands_handle( cmd, TVTIME_CHANNEL_SCAN, 0 );
  3630. +            }
  3631. +
  3632. +            videoinput_set_input_num( cmd->vidin, atoi( arg ) % videoinput_get_num_inputs( cmd->vidin ) );
  3633. +            reinit_tuner( cmd );
  3634. +
  3635. +            if( cmd->osd ) {
  3636. +                char string[ 128 ];
  3637. +                snprintf( string, sizeof( string ),
  3638. +                          TVTIME_ICON_VIDEOINPUT "  %s: %s",
  3639. +                          _("Change video source"),
  3640. +                          videoinput_get_input_name( cmd->vidin ) );
  3641. +                menu_set_text( commands_get_menu( cmd, "input" ), 1, string );
  3642. +                commands_refresh_menu( cmd );
  3643. +                tvtime_osd_set_input( cmd->osd, videoinput_get_input_name( cmd->vidin ) );
  3644. +                tvtime_osd_show_info( cmd->osd );
  3645. +            }
  3646. +        }
  3647. +        break;
  3648. +
  3649. +    case TVTIME_HUE_UP:
  3650. +    case TVTIME_HUE_DOWN:
  3651. +        if( cmd->vidin ) {
  3652. +            videoinput_set_hue_relative( cmd->vidin, (tvtime_cmd == TVTIME_HUE_UP) ? 1 : -1 );
  3653. +            if( cmd->osd ) {
  3654. +                int hue = videoinput_get_hue( cmd->vidin );
  3655. +                tvtime_osd_show_data_bar( cmd->osd, _("Hue"), hue );
  3656. +                menu_set_value (commands_get_menu (cmd, "hue"), hue,
  3657. +                                TVTIME_ICON_HUE);
  3658. +                commands_refresh_menu( cmd );
  3659. +            }
  3660. +        }
  3661. +        break;
  3662. +
  3663. +    case TVTIME_BRIGHTNESS_UP:
  3664. +    case TVTIME_BRIGHTNESS_DOWN:
  3665. +        if( cmd->vidin ) {
  3666. +            videoinput_set_brightness_relative( cmd->vidin, (tvtime_cmd == TVTIME_BRIGHTNESS_UP) ? 1 : -1 );
  3667. +            if( cmd->osd ) {
  3668. +                int brightness = videoinput_get_brightness( cmd->vidin );
  3669. +                tvtime_osd_show_data_bar( cmd->osd, _("Brightness"), brightness );
  3670. +                menu_set_value (commands_get_menu (cmd, "brightness"),
  3671. +                                brightness, TVTIME_ICON_BRIGHTNESS);
  3672. +                commands_refresh_menu( cmd );
  3673. +            }
  3674. +        }
  3675. +        break;
  3676. +
  3677. +    case TVTIME_CONTRAST_UP:
  3678. +    case TVTIME_CONTRAST_DOWN:
  3679. +        if( cmd->vidin ) {
  3680. +            videoinput_set_contrast_relative( cmd->vidin, (tvtime_cmd == TVTIME_CONTRAST_UP) ? 1 : -1 );
  3681. +            if( cmd->osd ) {
  3682. +                int contrast = videoinput_get_contrast( cmd->vidin );
  3683. +                tvtime_osd_show_data_bar( cmd->osd, _("Contrast"), contrast );
  3684. +                menu_set_value (commands_get_menu (cmd, "contrast"),
  3685. +                                contrast, TVTIME_ICON_CONTRAST);
  3686. +                commands_refresh_menu( cmd );
  3687. +            }
  3688. +        }
  3689. +        break;
  3690. +
  3691. +    case TVTIME_SATURATION_UP:
  3692. +    case TVTIME_SATURATION_DOWN:
  3693. +        if( cmd->vidin ) {
  3694. +            videoinput_set_saturation_relative( cmd->vidin, (tvtime_cmd == TVTIME_SATURATION_UP) ? 1 : -1 );
  3695. +            if( cmd->osd ) {
  3696. +                int saturation = videoinput_get_saturation( cmd->vidin );
  3697. +                tvtime_osd_show_data_bar( cmd->osd, _("Saturation"), saturation );
  3698. +                menu_set_value (commands_get_menu (cmd, "saturation"),
  3699. +                                saturation, TVTIME_ICON_SATURATION);
  3700. +                commands_refresh_menu( cmd );
  3701. +            }
  3702. +        }
  3703. +        break;
  3704. +
  3705. +    case TVTIME_PICTURE:
  3706. +        cmd->picturemode = (cmd->picturemode + 1) % 4;
  3707. +        if( cmd->osd && cmd->vidin ) {
  3708. +            if( cmd->picturemode == 0 ) {
  3709. +                int cur = videoinput_get_brightness( cmd->vidin );
  3710. +                tvtime_osd_show_data_bar( cmd->osd, _("Brightness"), cur );
  3711. +            } else if( cmd->picturemode == 1 ) {
  3712. +                int cur = videoinput_get_contrast( cmd->vidin );
  3713. +                tvtime_osd_show_data_bar( cmd->osd, _("Contrast"), cur );
  3714. +            } else if( cmd->picturemode == 2 ) {
  3715. +                int cur = videoinput_get_saturation( cmd->vidin );
  3716. +                tvtime_osd_show_data_bar( cmd->osd, _("Saturation"), cur );
  3717. +            } else if( cmd->picturemode == 3 ) {
  3718. +                int cur = videoinput_get_hue( cmd->vidin );
  3719. +                tvtime_osd_show_data_bar( cmd->osd, _("Hue"), cur );
  3720. +            }
  3721. +        }
  3722. +        break;
  3723. +
  3724. +    case TVTIME_PICTURE_UP:
  3725. +        if( cmd->picturemode == 0 ) {
  3726. +            commands_handle( cmd, TVTIME_BRIGHTNESS_UP, "" );
  3727. +        } else if( cmd->picturemode == 1 ) {
  3728. +            commands_handle( cmd, TVTIME_CONTRAST_UP, "" );
  3729. +        } else if( cmd->picturemode == 2 ) {
  3730. +            commands_handle( cmd, TVTIME_SATURATION_UP, "" );
  3731. +        } else if( cmd->picturemode == 3 ) {
  3732. +            commands_handle( cmd, TVTIME_HUE_UP, "" );
  3733. +        }
  3734. +        break;
  3735. +
  3736. +    case TVTIME_PICTURE_DOWN:
  3737. +        if( cmd->picturemode == 0 ) {
  3738. +            commands_handle( cmd, TVTIME_BRIGHTNESS_DOWN, "" );
  3739. +        } else if( cmd->picturemode == 1 ) {
  3740. +            commands_handle( cmd, TVTIME_CONTRAST_DOWN, "" );
  3741. +        } else if( cmd->picturemode == 2 ) {
  3742. +            commands_handle( cmd, TVTIME_SATURATION_DOWN, "" );
  3743. +        } else if( cmd->picturemode == 3 ) {
  3744. +            commands_handle( cmd, TVTIME_HUE_DOWN, "" );
  3745. +        }
  3746. +        break;
  3747. +
  3748. +    case TVTIME_SAVE_PICTURE_GLOBAL:
  3749. +        if( cmd->vidin && config_get_save_restore_picture( cmd->cfg ) ) {
  3750. +            cmd->brightness = videoinput_get_brightness( cmd->vidin );
  3751. +            cmd->contrast = videoinput_get_contrast( cmd->vidin );
  3752. +            cmd->saturation = videoinput_get_saturation( cmd->vidin );
  3753. +            cmd->hue = videoinput_get_hue( cmd->vidin );
  3754. +            if( cmd->osd ) {
  3755. +                tvtime_osd_show_message( cmd->osd,
  3756. +                    _("Saved current picture settings as global defaults.\n") );
  3757. +            }
  3758. +        }
  3759. +        break;
  3760. +    case TVTIME_SAVE_PICTURE_CHANNEL:
  3761. +        if( cmd->stationmgr && cmd->vidin && config_get_save_restore_picture( cmd->cfg ) ) {
  3762. +            station_set_current_brightness( cmd->stationmgr, videoinput_get_brightness( cmd->vidin ) );
  3763. +            station_set_current_contrast( cmd->stationmgr, videoinput_get_contrast( cmd->vidin ) );
  3764. +            station_set_current_saturation( cmd->stationmgr, videoinput_get_saturation( cmd->vidin ) );
  3765. +            station_set_current_hue( cmd->stationmgr, videoinput_get_hue( cmd->vidin ) );
  3766. +            if( cmd->osd ) {
  3767. +                char message[ 128 ];
  3768. +                snprintf( message, sizeof (message),
  3769. +                          _("Saved current picture settings on channel %d.\n"),
  3770. +                         station_get_current_id( cmd->stationmgr ) );
  3771. +                tvtime_osd_show_message( cmd->osd, message );
  3772. +            }
  3773. +        }
  3774. +        break;
  3775. +
  3776. +    case TVTIME_ENTER:
  3777. +        if( cmd->next_chan_buffer[ 0 ] ) {
  3778. +            if( cmd->renumbering ) {
  3779. +                station_remap( cmd->stationmgr, atoi( cmd->next_chan_buffer ) );
  3780. +                station_writeconfig( cmd->stationmgr );
  3781. +                cmd->renumbering = 0;
  3782. +                if( cmd->osd ) tvtime_osd_set_hold_message( cmd->osd, "", 0 );
  3783. +            }
  3784. +            if( station_set( cmd->stationmgr, atoi( cmd->next_chan_buffer ) ) ) {
  3785. +                cmd->change_channel = 1;
  3786. +            } else {
  3787. +                snprintf( cmd->next_chan_buffer, sizeof( cmd->next_chan_buffer ),
  3788. +                          "%d", station_get_current_id( cmd->stationmgr ) );
  3789. +                if( cmd->osd ) {
  3790. +                    tvtime_osd_set_channel_number( cmd->osd, cmd->next_chan_buffer );
  3791. +                    tvtime_osd_show_info( cmd->osd );
  3792. +                }
  3793. +            }
  3794. +        } else {
  3795. +            if( cmd->renumbering ) {
  3796. +                cmd->renumbering = 0;
  3797. +                if( cmd->osd ) tvtime_osd_set_hold_message( cmd->osd, "", 0 );
  3798. +            }
  3799. +            snprintf( cmd->next_chan_buffer, sizeof( cmd->next_chan_buffer ),
  3800. +                      "%d", station_get_current_id( cmd->stationmgr ) );
  3801. +            if( cmd->osd ) {
  3802. +                if( cmd->vidin && videoinput_has_tuner( cmd->vidin ) ) {
  3803. +                    tvtime_osd_set_channel_number( cmd->osd,
  3804. +                                                   cmd->next_chan_buffer );
  3805. +                }
  3806. +                commands_handle( cmd, TVTIME_DISPLAY_INFO, "" );
  3807. +            }
  3808. +        }
  3809. +        cmd->frame_counter = 0;
  3810. +        break;
  3811. +
  3812. +    case TVTIME_CHANNEL_1:
  3813. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "1" );
  3814. +        break;
  3815. +
  3816. +    case TVTIME_CHANNEL_2:
  3817. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "2" );
  3818. +        break;
  3819. +
  3820. +    case TVTIME_CHANNEL_3:
  3821. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "3" );
  3822. +        break;
  3823. +
  3824. +    case TVTIME_CHANNEL_4:
  3825. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "4" );
  3826. +        break;
  3827. +
  3828. +    case TVTIME_CHANNEL_5:
  3829. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "5" );
  3830. +        break;
  3831. +
  3832. +    case TVTIME_CHANNEL_6:
  3833. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "6" );
  3834. +        break;
  3835. +
  3836. +    case TVTIME_CHANNEL_7:
  3837. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "7" );
  3838. +        break;
  3839. +
  3840. +    case TVTIME_CHANNEL_8:
  3841. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "8" );
  3842. +        break;
  3843. +
  3844. +    case TVTIME_CHANNEL_9:
  3845. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "9" );
  3846. +        break;
  3847. +
  3848. +    case TVTIME_CHANNEL_0:
  3849. +        commands_handle( cmd, TVTIME_CHANNEL_CHAR, "0" );
  3850. +        break;
  3851. +
  3852. +    case TVTIME_TOGGLE_PAUSE:
  3853. +        cmd->pause = !(cmd->pause);
  3854. +        if( cmd->osd ) {
  3855. +            tvtime_osd_show_message( cmd->osd,
  3856. +                  cmd->pause ? _("Paused.") : _("Resumed.") );
  3857. +        }
  3858. +        break;
  3859. +
  3860. +    case TVTIME_TOGGLE_MATTE:
  3861. +        cmd->togglematte = 1;
  3862. +        break;
  3863. +
  3864. +    case TVTIME_TOGGLE_QUIET_SCREENSHOTS:
  3865. +        cmd->togglequiet = 1;
  3866. +        break;
  3867. +
  3868. +    case TVTIME_TOGGLE_XMLTV_LANGUAGE:
  3869. +        if( cmd->xmltv ) {
  3870. +            const char *lang;
  3871. +            int i = xmltv_get_langnum( cmd->xmltv ) + 1;
  3872. +            if( i > xmltv_get_num_languages( cmd->xmltv ) ) i = 0;
  3873. +            xmltv_select_language( cmd->xmltv, i );
  3874. +            update_xmltv_listings( cmd );
  3875. +            if( cmd->osd ) {
  3876. +                menu_t *langmenu = commands_get_menu( cmd, "xmltv-language" );
  3877. +                reset_xmltv_languages_menu( langmenu, cmd->xmltv );
  3878. +                if( !cmd->menuactive ) {
  3879. +                    osd_list_xmltv_languages( cmd->osd, cmd );
  3880. +                } else {
  3881. +                    commands_refresh_menu( cmd );
  3882. +                }
  3883. +            }
  3884. +            if( cmd->osd && !cmd->menuactive ) {
  3885. +                osd_list_xmltv_languages( cmd->osd, cmd );
  3886. +            }
  3887. +            lang = xmltv_get_language( cmd->xmltv );
  3888. +            config_save( cmd->cfg, "XMLTVLanguage", lang? lang : "none" );
  3889. +        }
  3890. +        break;
  3891. +    }
  3892. +}
  3893. +
  3894. +void commands_next_frame( commands_t *cmd )
  3895. +{
  3896. +    cmd->tunerreset = 0;
  3897. +
  3898. +    /* Decrement the frame counter if user is typing digits */
  3899. +    if( cmd->frame_counter > 0 ) {
  3900. +        cmd->frame_counter--;
  3901. +        if( cmd->frame_counter == 0 ) {
  3902. +            /* Switch to the next channel if the countdown expires. */
  3903. +            commands_handle( cmd, TVTIME_ENTER, 0 );
  3904. +        }
  3905. +    }
  3906. +
  3907. +    if( cmd->frame_counter == 0 ) {
  3908. +        memset( cmd->next_chan_buffer, 0, 5 );
  3909. +        cmd->digit_counter = 0;
  3910. +        if( cmd->renumbering ) {
  3911. +            if( cmd->osd ) tvtime_osd_set_hold_message( cmd->osd, "", 0 );
  3912. +            cmd->renumbering = 0;
  3913. +        }
  3914. +    }
  3915. +
  3916. +    if( cmd->frame_counter > 0 && !(cmd->frame_counter % 5)) {
  3917. +        char input_text[6];
  3918. +
  3919. +        strcpy( input_text, cmd->next_chan_buffer );
  3920. +        if( !(cmd->frame_counter % 10) ) {
  3921. +            strcat( input_text, "_" );
  3922. +        } else {
  3923. +            strcat( input_text, " " );
  3924. +        }
  3925. +        if( cmd->osd ) {
  3926. +            tvtime_osd_set_channel_number( cmd->osd, input_text );
  3927. +            tvtime_osd_show_info( cmd->osd );
  3928. +        }
  3929. +    }
  3930. +
  3931. +    if( cmd->change_channel ) {
  3932. +        char number[ 6 ];
  3933. +        reinit_tuner( cmd );
  3934. +        cmd->change_channel = 0;
  3935. +        snprintf( number, 4, "%d",
  3936. +                  station_get_current_id( cmd->stationmgr ) );
  3937. +        config_save( cmd->cfg, "Channel", number );
  3938. +    }
  3939. +
  3940. +    cmd->xmltvupdated = 0;
  3941. +    update_xmltv_listings( cmd );
  3942. +    if( cmd->vbi ) {
  3943. +        if( *(vbidata_get_network_name( cmd->vbi )) ) {
  3944. +            /* If the network name has changed, save it to the config file. */
  3945. +            if( strcmp( station_get_current_network_name( cmd->stationmgr ),
  3946. +                        vbidata_get_network_name( cmd->vbi ) ) ) {
  3947. +                station_set_current_network_name( cmd->stationmgr,
  3948. +                                                  vbidata_get_network_name( cmd->vbi ) );
  3949. +                station_writeconfig( cmd->stationmgr );
  3950. +            }
  3951. +
  3952. +            if( cmd->osd ) {
  3953. +                tvtime_osd_set_network_name( cmd->osd, station_get_current_network_name( cmd->stationmgr ) );
  3954. +            }
  3955. +        }
  3956. +
  3957. +        if( *(vbidata_get_network_call_letters( cmd->vbi )) ) {
  3958. +            /* If the call letters have changed, save them to the config file. */
  3959. +            if( strcmp( station_get_current_network_call_letters( cmd->stationmgr ),
  3960. +                        vbidata_get_network_call_letters( cmd->vbi ) ) ) {
  3961. +                station_set_current_network_call_letters( cmd->stationmgr,
  3962. +                                                          vbidata_get_network_call_letters( cmd->vbi ) );
  3963. +                station_writeconfig( cmd->stationmgr );
  3964. +            }
  3965. +
  3966. +            if( cmd->osd ) {
  3967. +                tvtime_osd_set_network_call( cmd->osd, station_get_current_network_call_letters( cmd->stationmgr ) );
  3968. +            }
  3969. +        }
  3970. +
  3971. +        if( cmd->osd ) {
  3972. +            tvtime_osd_set_show_name( cmd->osd, vbidata_get_program_name( cmd->vbi ) );
  3973. +            tvtime_osd_set_show_rating( cmd->osd, vbidata_get_program_rating( cmd->vbi ) );
  3974. +            tvtime_osd_set_show_start( cmd->osd, vbidata_get_program_start_time( cmd->vbi ) );
  3975. +            tvtime_osd_set_show_length( cmd->osd, vbidata_get_program_length( cmd->vbi ) );
  3976. +        }
  3977. +    }
  3978. +
  3979. +    cmd->printdebug = 0;
  3980. +    cmd->showdeinterlacerinfo = 0;
  3981. +    cmd->screenshot = 0;
  3982. +    cmd->togglefullscreen = 0;
  3983. +    cmd->toggleaspect = 0;
  3984. +    cmd->togglealwaysontop = 0;
  3985. +    cmd->toggledeinterlacer = 0;
  3986. +    cmd->togglepulldowndetection = 0;
  3987. +    cmd->togglematte = 0;
  3988. +    cmd->togglequiet = 0;
  3989. +    cmd->resizewindow = 0;
  3990. +    cmd->setdeinterlacer = 0;
  3991. +    cmd->setfreqtable = 0;
  3992. +    memset( cmd->newmatte, 0, sizeof( cmd->newmatte ) );
  3993. +    memset( cmd->newpos, 0, sizeof( cmd->newpos ) );
  3994. +}
  3995. +
  3996. +int commands_quit( commands_t *cmd )
  3997. +{
  3998. +    return cmd->quit;
  3999. +}
  4000. +
  4001. +int commands_print_debug( commands_t *cmd )
  4002. +{
  4003. +    return cmd->printdebug;
  4004. +}
  4005. +
  4006. +int commands_show_bars( commands_t *cmd )
  4007. +{
  4008. +    return cmd->showbars;
  4009. +}
  4010. +
  4011. +int commands_take_screenshot( commands_t *cmd )
  4012. +{
  4013. +    return cmd->screenshot;
  4014. +}
  4015. +
  4016. +const char *commands_screenshot_filename( commands_t *cmd )
  4017. +{
  4018. +    return cmd->screenshotfile;
  4019. +}
  4020. +
  4021. +int commands_toggle_fullscreen( commands_t *cmd )
  4022. +{
  4023. +    return cmd->togglefullscreen;
  4024. +}
  4025. +
  4026. +int commands_get_framerate( commands_t *cmd )
  4027. +{
  4028. +    return cmd->framerate;
  4029. +}
  4030. +
  4031. +int commands_toggle_aspect( commands_t *cmd )
  4032. +{
  4033. +    return cmd->toggleaspect;
  4034. +}
  4035. +
  4036. +int commands_toggle_alwaysontop( commands_t *cmd )
  4037. +{
  4038. +    return cmd->togglealwaysontop;
  4039. +}
  4040. +
  4041. +int commands_toggle_deinterlacer( commands_t *cmd )
  4042. +{
  4043. +    return cmd->toggledeinterlacer;
  4044. +}
  4045. +
  4046. +int commands_toggle_pulldown_detection( commands_t *cmd )
  4047. +{
  4048. +    return cmd->togglepulldowndetection;
  4049. +}
  4050. +
  4051. +int commands_toggle_matte( commands_t *cmd )
  4052. +{
  4053. +    return cmd->togglematte;
  4054. +}
  4055. +
  4056. +int commands_toggle_quiet_screenshots( commands_t *cmd )
  4057. +{
  4058. +    return cmd->togglequiet;
  4059. +}
  4060. +
  4061. +void commands_set_vbidata( commands_t *cmd, vbidata_t *vbi )
  4062. +{
  4063. +    cmd->vbi = vbi;
  4064. +}
  4065. +
  4066. +int commands_scan_channels( commands_t *cmd )
  4067. +{
  4068. +    return cmd->scan_channels;
  4069. +}
  4070. +
  4071. +int commands_pause( commands_t *cmd )
  4072. +{
  4073. +    return cmd->pause;
  4074. +}
  4075. +
  4076. +int commands_apply_colour_invert( commands_t *cmd )
  4077. +{
  4078. +    return cmd->apply_invert;
  4079. +}
  4080. +
  4081. +int commands_apply_mirror( commands_t *cmd )
  4082. +{
  4083. +    return cmd->apply_mirror;
  4084. +}
  4085. +
  4086. +int commands_apply_chroma_kill( commands_t *cmd )
  4087. +{
  4088. +    return cmd->apply_chroma_kill;
  4089. +}
  4090. +
  4091. +double commands_get_overscan( commands_t *cmd )
  4092. +{
  4093. +    return cmd->overscan;
  4094. +}
  4095. +
  4096. +int commands_resize_window( commands_t *cmd )
  4097. +{
  4098. +    return cmd->resizewindow;
  4099. +}
  4100. +
  4101. +void commands_set_framerate( commands_t *cmd, int framerate )
  4102. +{
  4103. +    cmd->framerate = framerate % FRAMERATE_MAX;
  4104. +}
  4105. +
  4106. +int commands_show_deinterlacer_info( commands_t *cmd )
  4107. +{
  4108. +    return cmd->showdeinterlacerinfo;
  4109. +}
  4110. +
  4111. +int commands_restart_tvtime( commands_t *cmd )
  4112. +{
  4113. +    return cmd->restarttvtime;
  4114. +}
  4115. +
  4116. +const char *commands_get_new_norm( commands_t *cmd )
  4117. +{
  4118. +    if( cmd->normset ) {
  4119. +        return cmd->newnorm;
  4120. +    } else {
  4121. +        return 0;
  4122. +    }
  4123. +}
  4124. +
  4125. +int commands_set_deinterlacer( commands_t *cmd )
  4126. +{
  4127. +    return cmd->setdeinterlacer;
  4128. +}
  4129. +
  4130. +const char *commands_get_new_deinterlacer( commands_t *cmd )
  4131. +{
  4132. +    return cmd->deinterlacer;
  4133. +}
  4134. +
  4135. +int commands_menu_active( commands_t *cmd )
  4136. +{
  4137. +    return cmd->menuactive;
  4138. +}
  4139. +
  4140. +void commands_set_half_size( commands_t *cmd, int halfsize )
  4141. +{
  4142. +    cmd->halfsize = halfsize;
  4143. +}
  4144. +
  4145. +int commands_get_new_input_width( commands_t *cmd )
  4146. +{
  4147. +    return cmd->newinputwidth;
  4148. +}
  4149. +
  4150. +int commands_get_global_brightness( commands_t *cmd )
  4151. +{
  4152. +    return cmd->brightness;
  4153. +}
  4154. +
  4155. +int commands_get_global_contrast( commands_t *cmd )
  4156. +{
  4157. +    return cmd->contrast;
  4158. +}
  4159. +
  4160. +int commands_get_global_saturation( commands_t *cmd )
  4161. +{
  4162. +    return cmd->saturation;
  4163. +}
  4164. +
  4165. +int commands_get_global_hue( commands_t *cmd )
  4166. +{
  4167. +    return cmd->hue;
  4168. +}
  4169. +
  4170. +int commands_set_freq_table( commands_t *cmd )
  4171. +{
  4172. +    return cmd->setfreqtable;
  4173. +}
  4174. +
  4175. +const char *commands_get_new_freq_table( commands_t *cmd )
  4176. +{
  4177. +    return cmd->newfreqtable;
  4178. +}
  4179. +
  4180. +int commands_check_freq_present( commands_t *cmd )
  4181. +{
  4182. +    return cmd->checkfreq;
  4183. +}
  4184. +
  4185. +int commands_sleeptimer( commands_t *cmd )
  4186. +{
  4187. +    return cmd->sleeptimer;
  4188. +}
  4189. +
  4190. +int commands_sleeptimer_do_shutdown( commands_t *cmd )
  4191. +{
  4192. +    time_t now;
  4193. +
  4194. +    time( &now );
  4195. +
  4196. +    return (now >= ((sleeptimer_function( cmd->sleeptimer ) * 60) + cmd->sleeptimer_start));
  4197. +}
  4198. +
  4199. +void commands_set_pulldown_alg( commands_t *cmd, int pulldown_alg )
  4200. +{
  4201. +    cmd->pulldown_alg = pulldown_alg;
  4202. +    reset_filters_menu( commands_get_menu( cmd, "filters" ),
  4203. +                        cmd->apply_invert, cmd->apply_mirror,
  4204. +                        cmd->apply_chroma_kill,
  4205. +                        cmd->vidin && videoinput_get_height( cmd->vidin ) == 480,
  4206. +                        cmd->pulldown_alg );
  4207. +    commands_refresh_menu( cmd );
  4208. +}
  4209. +
  4210. +const char *commands_get_matte_mode( commands_t *cmd )
  4211. +{
  4212. +    if( *cmd->newmatte ) {
  4213. +        return cmd->newmatte;
  4214. +    } else {
  4215. +        return 0;
  4216. +    }
  4217. +}
  4218. +
  4219. +const char *commands_get_fs_pos( commands_t *cmd )
  4220. +{
  4221. +    if( *cmd->newpos ) {
  4222. +        return cmd->newpos;
  4223. +    } else {
  4224. +        return 0;
  4225. +    }
  4226. +}
  4227. +
  4228. +int commands_get_audio_boost( commands_t *cmd )
  4229. +{
  4230. +    return cmd->boost;
  4231. +}
  4232. +
  4233. +int commands_xmltv_updated( commands_t *cmd )
  4234. +{
  4235. +    return cmd->xmltvupdated;
  4236. +}
  4237. +
  4238. +int commands_tuner_reset( commands_t *cmd )
  4239. +{
  4240. +    return cmd->tunerreset;
  4241. +}
  4242. +
  4243. +const char *commands_get_xmltv_title( commands_t *cmd )
  4244. +{
  4245. +    if( cmd->xmltv ) {
  4246. +        return xmltv_get_title( cmd->xmltv );
  4247. +    } else {
  4248. +        return 0;
  4249. +    }
  4250. +}
  4251. +
  4252. +void commands_get_menu_bounding_box( commands_t *cmd, int *x, int *y,
  4253. +                                     int *width, int *height )
  4254. +{
  4255. +    if( cmd->osd ) {
  4256. +        tvtime_osd_list_get_bounding_box( cmd->osd, x, y, width, height );
  4257. +        if( cmd->halfsize ) {
  4258. +            *y /= 2;
  4259. +            *height /= 2;
  4260. +        }
  4261. +    } else {
  4262. +        *x = *y = *width = *height = 0;
  4263. +    }
  4264. +}
  4265. +
  4266. diff -Nurp tvtime-1.0.2/src/commands.h tvtime-1.0.2-custom/src/commands.h
  4267. --- tvtime-1.0.2/src/commands.h 2004-10-28 02:50:24.000000000 +0200
  4268. +++ tvtime-1.0.2-custom/src/commands.h  2011-05-29 13:07:28.169040774 +0200
  4269. @@ -64,6 +64,7 @@ void commands_set_pulldown_alg( commands
  4270.  int commands_quit( commands_t *cmd );
  4271.  int commands_toggle_fullscreen( commands_t *cmd );
  4272.  int commands_toggle_aspect( commands_t *cmd );
  4273. +int commands_get_changed_overscan( commands_t *cmd );
  4274.  int commands_toggle_deinterlacer( commands_t *cmd );
  4275.  int commands_toggle_pulldown_detection( commands_t *cmd );
  4276.  int commands_toggle_matte( commands_t *cmd );
  4277. diff -Nurp tvtime-1.0.2/src/cpu_accel.c tvtime-1.0.2-custom/src/cpu_accel.c
  4278. --- tvtime-1.0.2/src/cpu_accel.c        2004-04-04 18:48:37.000000000 +0200
  4279. +++ tvtime-1.0.2-custom/src/cpu_accel.c 2011-05-29 13:07:28.149040530 +0200
  4280. @@ -35,7 +35,7 @@ static inline uint32_t arch_accel (void)
  4281.      int AMD;
  4282.      uint32_t caps;
  4283.  
  4284. -#ifndef PIC
  4285. +#if !defined(__PIC__) || defined(__x86_64__)
  4286.  #define cpuid(op,eax,ebx,ecx,edx)      \
  4287.      __asm__ ("cpuid"                   \
  4288.              : "=a" (eax),              \
  4289. diff -Nurp tvtime-1.0.2/src/Makefile.am tvtime-1.0.2-custom/src/Makefile.am
  4290. --- tvtime-1.0.2/src/Makefile.am        2005-02-08 06:00:16.000000000 +0100
  4291. +++ tvtime-1.0.2-custom/src/Makefile.am 2011-05-29 13:42:33.649601355 +0200
  4292. @@ -29,6 +29,11 @@ OPT_CFLAGS = -Wall -pedantic -I. -DDATAD
  4293.         -DCONFDIR="\"$(pkgsysconfdir)\"" -DFIFODIR="\"$(tmpdir)\"" \
  4294.         -D_LARGEFILE64_SOURCE -DLOCALEDIR="\"$(localedir)\""
  4295.  
  4296. +if HAVE_ALSA
  4297. +ALSA_SRCS =    mixer-alsa.c
  4298. +else
  4299. +ALSA_SRCS =
  4300. +endif
  4301.  COMMON_SRCS = mixer.c videoinput.c rtctimer.c leetft.c osdtools.c tvtimeconf.c \
  4302.         pngoutput.c tvtimeosd.c input.c cpu_accel.c speedy.c pnginput.c \
  4303.         deinterlace.c videotools.c attributes.h deinterlace.h leetft.h \
  4304. @@ -40,7 +45,7 @@ COMMON_SRCS = mixer.c videoinput.c rtcti
  4305.         utils.h utils.c pulldown.h pulldown.c hashtable.h hashtable.c \
  4306.         cpuinfo.h cpuinfo.c videodev.h videodev2.h menu.c menu.h \
  4307.         outputfilter.h outputfilter.c xmltv.h xmltv.c gettext.h tvtimeglyphs.h \
  4308. -       copyfunctions.h copyfunctions.c
  4309. +       copyfunctions.h copyfunctions.c mixer-oss.c $(ALSA_SRCS)
  4310.  
  4311.  if ARCH_X86
  4312.  DSCALER_SRCS = $(top_srcdir)/plugins/dscalerapi.h \
  4313. @@ -74,10 +79,10 @@ bin_PROGRAMS = tvtime tvtime-command tvt
  4314.  
  4315.  tvtime_SOURCES = $(COMMON_SRCS) $(OUTPUT_SRCS) $(PLUGIN_SRCS) tvtime.c
  4316.  tvtime_CFLAGS = $(TTF_CFLAGS) $(PNG_CFLAGS) $(OPT_CFLAGS) \
  4317. -       $(PLUGIN_CFLAGS) $(X11_CFLAGS) $(XML2_FLAG) \
  4318. +       $(PLUGIN_CFLAGS) $(X11_CFLAGS) $(XML2_FLAG) $(ALSA_CFLAGS) \
  4319.         $(FONT_CFLAGS) $(AM_CFLAGS)
  4320.  tvtime_LDFLAGS  = $(TTF_LIBS) $(ZLIB_LIBS) $(PNG_LIBS) \
  4321. -       $(X11_LIBS) $(XML2_LIBS) -lm -lstdc++
  4322. +       $(X11_LIBS) $(XML2_LIBS) $(ALSA_LIBS) -lm -lsupc++
  4323.  
  4324.  tvtime_command_SOURCES = utils.h utils.c tvtimeconf.h tvtimeconf.c \
  4325.         tvtime-command.c
  4326. @@ -90,6 +95,6 @@ tvtime_configure_LDFLAGS  = $(ZLIB_LIBS)
  4327.  tvtime_scanner_SOURCES = utils.h utils.c videoinput.h videoinput.c \
  4328.         tvtimeconf.h tvtimeconf.c station.h station.c tvtime-scanner.c \
  4329.         mixer.h mixer.c
  4330. -tvtime_scanner_CFLAGS = $(OPT_CFLAGS) $(XML2_FLAG) $(AM_CFLAGS)
  4331. -tvtime_scanner_LDFLAGS  = $(ZLIB_LIBS) $(XML2_LIBS)
  4332. +tvtime_scanner_CFLAGS = $(OPT_CFLAGS) $(XML2_FLAG) $(ALSA_CFLAGS) $(AM_CFLAGS)
  4333. +tvtime_scanner_LDFLAGS  = $(ZLIB_LIBS) $(XML2_LIBS) $(ALSA_LIBS)
  4334.  
  4335. diff -Nurp tvtime-1.0.2/src/mixer-alsa.c tvtime-1.0.2-custom/src/mixer-alsa.c
  4336. --- tvtime-1.0.2/src/mixer-alsa.c       1970-01-01 01:00:00.000000000 +0100
  4337. +++ tvtime-1.0.2-custom/src/mixer-alsa.c        2011-05-29 13:07:28.122373538 +0200
  4338. @@ -0,0 +1,240 @@
  4339. +/**
  4340. + * Copyright (C) 2006 Philipp Hahn <pmhahn@users.sourceforge.net>
  4341. + *
  4342. + * This program is free software; you can redistribute it and/or modify
  4343. + * it under the terms of the GNU General Public License as published by
  4344. + * the Free Software Foundation; either version 2, or (at your option)
  4345. + * any later version.
  4346. + *
  4347. + * This program is distributed in the hope that it will be useful,
  4348. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  4349. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  4350. + * GNU General Public License for more details.
  4351. + *
  4352. + * You should have received a copy of the GNU General Public License
  4353. + * along with this program; if not, write to the Free Software Foundation,
  4354. + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  4355. + */
  4356. +
  4357. +#include <stdio.h>
  4358. +#include <sys/types.h>
  4359. +#include <string.h>
  4360. +#include <math.h>
  4361. +#include <alsa/asoundlib.h>
  4362. +#include "utils.h"
  4363. +#include "mixer.h"
  4364. +
  4365. +static const char alsa_core_devnames[] = "default";
  4366. +static char *card, *channel;
  4367. +static int muted = 0;
  4368. +static int mutecount = 0;
  4369. +static snd_mixer_t *handle = NULL;
  4370. +static snd_mixer_elem_t *elem = NULL;
  4371. +
  4372. +static long alsa_min, alsa_max, alsa_vol;
  4373. +
  4374. +static void alsa_open_mixer( void )
  4375. +{
  4376. +    int err;
  4377. +    static snd_mixer_selem_id_t *sid = NULL;
  4378. +    if ((err = snd_mixer_open (&handle, 0)) < 0) {
  4379. +        fprintf(stderr, "mixer: open error: %s\n", snd_strerror(err));
  4380. +        return;
  4381. +    }
  4382. +    if ((err = snd_mixer_attach (handle, card)) < 0) {
  4383. +        fprintf(stderr, "mixer: attach error: %s\n", snd_strerror(err));
  4384. +        goto error;
  4385. +    }
  4386. +    if ((err = snd_mixer_selem_register (handle, NULL, NULL)) < 0) {
  4387. +        fprintf(stderr, "mixer: register error: %s\n", snd_strerror(err));
  4388. +        goto error;
  4389. +    }
  4390. +    if ((err = snd_mixer_load (handle)) < 0) {
  4391. +        fprintf(stderr, "mixer: load error: %s\n", snd_strerror(err));
  4392. +        goto error;
  4393. +    }
  4394. +    snd_mixer_selem_id_malloc(&sid);
  4395. +    if (sid == NULL)
  4396. +        goto error;
  4397. +    snd_mixer_selem_id_set_name(sid, channel);
  4398. +    if (!(elem = snd_mixer_find_selem(handle, sid))) {
  4399. +        fprintf(stderr, "mixer: find error: %s\n", snd_strerror(err));
  4400. +        goto error;
  4401. +    }
  4402. +    if (!snd_mixer_selem_has_playback_volume(elem)) {
  4403. +        fprintf(stderr, "mixer: no playback\n");
  4404. +        goto error;
  4405. +    }
  4406. +    snd_mixer_selem_get_playback_volume_range(elem, &alsa_min, &alsa_max);
  4407. +    if ((alsa_max - alsa_min) <= 0) {
  4408. +        fprintf(stderr, "mixer: no valid playback range\n");
  4409. +        goto error;
  4410. +    }
  4411. +    snd_mixer_selem_id_free(sid);
  4412. +    return;
  4413. +
  4414. +error:
  4415. +    if (sid)
  4416. +        snd_mixer_selem_id_free(sid);
  4417. +    if (handle) {
  4418. +        snd_mixer_close(handle);
  4419. +        handle = NULL;
  4420. +    }
  4421. +    return;
  4422. +}
  4423. +
  4424. +/* Volume saved to file */
  4425. +static int alsa_get_unmute_volume( void )
  4426. +{
  4427. +    long val;
  4428. +    assert (elem);
  4429. +
  4430. +    if (snd_mixer_selem_is_playback_mono(elem)) {
  4431. +        snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_MONO, &val);
  4432. +        return val;
  4433. +    } else {
  4434. +        int c, n = 0;
  4435. +        long sum = 0;
  4436. +        for (c = 0; c <= SND_MIXER_SCHN_LAST; c++) {
  4437. +            if (snd_mixer_selem_has_playback_channel(elem, c)) {
  4438. +                snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &val);
  4439. +                sum += val;
  4440. +                n++;
  4441. +            }
  4442. +        }
  4443. +        if (! n) {
  4444. +            return 0;
  4445. +        }
  4446. +
  4447. +        val = sum / n;
  4448. +        sum = (long)((double)(alsa_vol * (als