]> www.vanbest.org Git - sasc-ng.git/commitdiff
release 0.8.3 0.8.3
authorleslie <unknown>
Thu, 27 Dec 2007 21:01:00 +0000 (22:01 +0100)
committerleslie <unknown>
Thu, 27 Dec 2007 21:01:00 +0000 (22:01 +0100)
30 files changed:
HISTORY
Makefile
README
README.po2i18n [new file with mode: 0644]
cam.c
cam.h
diff.exclude
i18n-template.c [new file with mode: 0644]
i18n.c [deleted file]
log.c
log.h
parse.c
po/de_DE.po
po/fi_FI.po
po/fr_FR.po
po/it_IT.po
po/nl_NL.po
po/pl_PL.po
po/ru_RU.po
po/sc.pot [new file with mode: 0644]
po/sv_SE.po
po2i18n.pl [new file with mode: 0644]
sc.c
systems/nagra/nagra2-0101.c
systems/nagra/nagra2-0501.c
systems/nagra/nagra2.c
systems/viaccess/tps.c
systems/viaccess/tps.h
systems/viaccess/viaccess.c
version.h

diff --git a/HISTORY b/HISTORY
index c17ca68feb07c1d0348a17b3a8fc506d3ec1b500..e8cdfbc4d9414189dd344c0e9047476e2bffd4fd 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,6 +1,20 @@
 VDR Plugin 'sc' Revision History
 --------------------------------
 
+15.09.2007: Version 0.8.3
+- Added Nagra2 3101 MECM (same as 0501).
+- Added Nagra2 0901 new 0x40 MECM and rev248 morph (from sasc-ng).
+- Changed TPS AU instruction limit for st20 emulation. Fixed callback pointer
+  search and decryption in case super encryption is disabled temporarily.
+- Added a setup option to limit the size of the logfile.
+- Fixed Makefile for Debian compile.
+- Some fixes for sasc-ng compile/operation.
+- Now autogenerating i18n.c file with po2i18n.pl from po files on VDR < 1.5.7.
+  Note that after changes to the *.c files the po files have to be recreated, so
+  you should have gettext package installed.
+- Fixed plugin .mo filename for VDR 1.5.7.
+- Updated finnish translations.
+
 02.09.2007: Version 0.8.2
 - Reworked Nagra2 EMM nano handling, key updates and map core (the latter is
   partly based on Emunation 2.0.0 code).
index 14522aac8d5fc56a27e7bcbfa4ddf8087f064456..96bd6a1c8c9a7a5258f220a6c1252c1a51c029f9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -73,15 +73,25 @@ PACKAGE = vdr-$(ARCHIVE)
 
 ### The object files (add further files here):
 
-OBJS = $(PLUGIN).o data.o filter.o system.o i18n.o misc.o cam.o \
+OBJS = $(PLUGIN).o data.o filter.o system.o misc.o cam.o \
        smartcard.o network.o crypto.o system-common.o parse.o log.o
 
 ### Internationalization (I18N):
 
 PODIR     = po
 I18Npot   = $(PODIR)/$(PLUGIN).pot
-I18Nmsgs  = $(addprefix $(LOCALEDIR)/,$(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo,$(notdir $(foreach file, $(wildcard $(PODIR)/*.po), $(basename $(file))))))
+ifeq ($(strip $(APIVERSION)),1.5.7)
+  I18Nmo  = $(PLUGIN).mo
+else
+  I18Nmo  = vdr-$(PLUGIN).mo
+endif
+I18Nmsgs  = $(addprefix $(LOCALEDIR)/,$(addsuffix /LC_MESSAGES/$(I18Nmo),$(notdir $(foreach file, $(wildcard $(PODIR)/*.po), $(basename $(file))))))
 LOCALEDIR = $(VDRDIR)/locale
+HASLOCALE = $(shell grep -l 'I18N_DEFAULT_LOCALE' $(VDRDIR)/include/vdr/i18n.h)
+
+ifeq ($(strip $(HASLOCALE)),)
+  OBJS += i18n.o
+endif
 
 #
 # generic stuff
@@ -129,8 +139,8 @@ export CXXFLAGS
 
 MAKEDEP = g++ -MM -MG
 DEPFILE = .dependencies
-$(DEPFILE): $(OBJS:%.o=%.c) $(wildcard *.h)
-       @$(MAKEDEP) $(DEFINES) $(SHAREDDEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
+$(DEPFILE): $(subst i18n.c,,$(OBJS:%.o=%.c)) $(wildcard *.h)
+       @$(MAKEDEP) $(DEFINES) $(SHAREDDEFINES) $(INCLUDES) $(subst i18n.c,,$(OBJS:%.o=%.c)) > $@
 
 -include $(DEPFILE)
 
@@ -143,7 +153,7 @@ else
 BUILDTARGETS = $(LIBDIR)/libvdr-$(PLUGIN).so.$(APIVERSION) systems systems-pre
 endif
 
-ifneq ($(shell grep -l 'Phrases' $(VDRDIR)/i18n.c),$(VDRDIR)/i18n.c)
+ifneq ($(strip $(HASLOCALE)),)
 BUILDTARGETS += i18n
 endif
 
@@ -176,12 +186,15 @@ $(I18Npot): $(shell grep -rl '\(tr\|trNOOP\)(\".*\")' *.c $(SYSDIR))
 %.mo: %.po
        msgfmt -c -o $@ $<
 
-$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
+$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/$(I18Nmo): $(PODIR)/%.mo
        @mkdir -p $(dir $@)
        cp $< $@
 
 i18n: $(I18Nmsgs)
 
+i18n.c: $(PODIR)/*.po i18n-template.c po2i18n.pl
+       ./po2i18n.pl <i18n-template.c >i18n.c
+
 systems:
        @for i in `ls -A -I ".*" $(SYSDIR)`; do $(MAKE) -f ../../Makefile.system -C "$(SYSDIR)/$$i" all || exit 1; done
 
@@ -193,11 +206,11 @@ clean-systems:
 
 clean-core:
        @$(MAKE) -C testing clean
-       @$(MAKE) -C $(FFDECSADIR) clean
+       @test -d $(FFDECSADIR) && $(MAKE) -C $(FFDECSADIR) clean
        @-rm -f $(LIBDIR)/libsc-*-$(SCAPIVERS).so.$(APIVERSION)
        @-rm -f $(LIBDIR)/libvdr-$(PLUGIN).a $(LIBDIR)/libsc-*.a
-       @-rm -f $(OBJS) $(DEPFILE) *.so *.tar.gz core* *~
-       @-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
+       @-rm -f $(OBJS) $(DEPFILE) i18n.c *.so *.tar.gz core* *~
+       @-rm -f $(PODIR)/*.mo
 
 clean-pre:
        @-find "$(PREDIR)" -type f -not -iname "*-$(SCAPIVERS).so.*" | xargs rm -f
diff --git a/README b/README
index 61384821c19a42b8bec4bb7460260191b0458fa7..90ad096e6f273001b926c591c3e16fd7f742a1d2 100644 (file)
--- a/README
+++ b/README
@@ -8,16 +8,6 @@ Description: SoftCAM for Irdeto, Seca, Viaccess, Nagra, Conax & Cryptoworks
 
 
 
-WARNING! This is the SC plugin development branch !!
-
-This is a beta release. We encourage everybody to try this release, nevertheless
-it should be used under controlled conditions.
-
-Feel free to put your bugreports, suggestions and/or wishes to the 4free or DVBN
-board. A bugreports should at least include the console log.
-
-
-
 What is it ?
 ------------
 
@@ -26,10 +16,6 @@ the world. But probably you already know this...
 
 SC means softcam, which means a software CAM emulation.
 
-The main development goal for this branch is a full-featured implementation
-without the needs to patch VDR. Recent changes in the new VDR development branch
-opened a possibility for that.
-
 The plugin captures the DVB devices in an early startup stage of VDR startup
 (before VDR itself has got access to them) and makes VDR believe that there is
 another CAM connected to the device. This CAM is emulated from the plugin by
@@ -98,9 +84,14 @@ You should use commandline option -B to force detection as a budget card in such
 a case. This commandline option takes a device number as argument and may appear
 multiple times (compare VDR commandline option -D).
 
-For testing purpose you should start VDR in foreground always. The plugin gives
-a lot of additional information to the console. This may be helpful in case it
-doesn't work at once.
+By default the plugin logs his messages to console only. For testing purpose
+it's a good idea to start VDR in foreground so you can see any error messages.
+Other available log targets are file and syslog. You can enable/disable any of
+the log targets in the plugin setup menu. For the file target you have to set a
+destination filename too. If you set a filesize limit (in KByte) and the logfile
+grows bigger than the limit, the current logfile is renamed to logfile.old and a
+new logfile is started. If the filesize limit is zero, the logfile never is
+rotated.
 
 
 
diff --git a/README.po2i18n b/README.po2i18n
new file mode 100644 (file)
index 0000000..c690235
--- /dev/null
@@ -0,0 +1,44 @@
+        
+                  po2i18n - Converter for po files
+
+
+Written by:              Udo Richter <udo_richter@gmx.de>
+Project's homepage:      http://www.udo-richter.de/vdr/scripts.html#po2i18n
+                         http://www.udo-richter.de/vdr/scripts.en.html#po2i18n
+
+
+
+About
+--------------------------------------------------------------------------
+po2i18n is a perl script that generates an i18n.c file compatible to the i18n
+system of VDR 1.2.0 - VDR 1.5.6, based on the .po files of VDR 1.5.7. This
+allows plugins to transit to the translation system of VDR 1.5.7 while 
+maintaining compatibility to earlier versions. The script can be used manually
+or automatically as part of the Makefile.
+
+
+Use
+--------------------------------------------------------------------------
+po2i18n.pl is a filter and can be used manually like this:
+
+  ./po2i18n.pl < i18n-template.c > i18n.c
+  
+The filter reads all relevant ./po/*.po files and writes the i18n strings
+into the template file. Strings will be added between the following two lines:
+
+  // START I18N
+  // END I18N
+
+See also the sample i18n.h and i18n-template.c file. Note that the phrases data
+structure is encapsulated in #if VDRVERSNUM < 10507, so the i18n strings won't 
+be in the plugin file after 1.5.7. The call to RegisterI18n() of your plugin 
+should also be encapsulated like this.
+
+po2i18n can also generate the i18n.c file on the fly while compiling. The 
+changes to the Makefile are demonstrated by the included Makefile.diff sample.
+With these changes, the i18n.c file will be generated on VDR up to 1.5.6, and
+the whole gettext conversion is skipped. From 1.5.7 on, the i18n-template.c 
+file will be simply copied as a dummy, and the new locale system will run.
+
+As a drawback, the automatic .dependencies for i18n.c won't work.
+
diff --git a/cam.c b/cam.c
index c8b3e2af86dda9173042cab7a08c885963969a3e..a4b35b3a96cb0fb19bcd13508193cab10f57e0db 100644 (file)
--- a/cam.c
+++ b/cam.c
@@ -2898,10 +2898,15 @@ void cScDvbDevice::DumpAV7110(void)
 
 cScDvbDevice::cScDvbDevice(int n, int cafd)
 :cDvbDevice(n)
-{}
+{
+  softcsa=false;
+  cam=new cCam(this,n);
+}
 
 cScDvbDevice::~cScDvbDevice()
-{}
+{
+  delete cam;
+}
 
 void cScDvbDevice::Shutdown(void)
 {}
diff --git a/cam.h b/cam.h
index f2d3d350382787873145220242d7b73224f1585f..50121f3057fe211e185a1081f4356fa5a8a960a8 100644 (file)
--- a/cam.h
+++ b/cam.h
@@ -202,12 +202,12 @@ public:
   static void Shutdown(void);
   static void SetForceBudget(int n);
   static bool ForceBudget(int n);
-  bool SetCaDescr(ca_descr_t *ca_descr, bool initial);
-  bool SetCaPid(ca_pid_t *ca_pid);
+  virtual bool SetCaDescr(ca_descr_t *ca_descr, bool initial);
+  virtual bool SetCaPid(ca_pid_t *ca_pid);
   void DumpAV7110(void);
   cCam *Cam(void) { return cam; }
   bool SoftCSA(void) { return softcsa; }
-  bool GetPrgCaids(int source, int transponder, int prg, caid_t *c);
+  virtual bool GetPrgCaids(int source, int transponder, int prg, caid_t *c);
   };
 
 #endif // ___CAM_H
index bf65518d06cad1604f19b44f8971b5d5612643af..06430473aabc5e88276a8cae6ced211c2b242c35 100644 (file)
@@ -10,3 +10,5 @@ diff.exclude
 *.rej
 *.bak
 nagra2-prov.c
+*.mo
+*.pot
diff --git a/i18n-template.c b/i18n-template.c
new file mode 100644 (file)
index 0000000..2678e03
--- /dev/null
@@ -0,0 +1,18 @@
+/* 
+ * Auto generated file, do not edit
+ * Will be overwritten/deleted without warning
+ * 
+ * Edit the .po files if you want to update translations!!
+ */
+
+#include "i18n.h"
+
+#if VDRVERSNUM < 10507
+
+const tI18nPhrase ScPhrases[] = {
+// START I18N
+// END I18N
+  { NULL }
+  };
+
+#endif
diff --git a/i18n.c b/i18n.c
deleted file mode 100644 (file)
index 0b8b491..0000000
--- a/i18n.c
+++ /dev/null
@@ -1,974 +0,0 @@
-/*
- * Softcam plugin to VDR (C++)
- *
- * This code is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This code is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
- */
-
-#include "i18n.h"
-
-#if APIVERSNUM < 10507
-
-const tI18nPhrase ScPhrases[] = {
-  { "Update keys (AU)",
-    "Keys updaten (AU)",
-    "",
-    "",
-    "Keys updaten (AU)",
-    "",
-    "Mise à jour des Clés (AU)",
-    "",
-    "Tilausten päivitys (AU)",
-    "Aktualizuj klucze (AU)",
-    "",
-    "",
-    "Nyckeluppdatering (AU)",
-    "",
-    "",
-    "",
-    "¾ÑÝÞÒÛïâì ÚÛîçØ (AU)",
-  },
-  { "off",
-    "aus",
-    "",
-    "",
-    "uit",
-    "",
-    "off",
-    ""
-    "pois",
-    "wy³±cz",
-    "",
-    "",
-    "av",
-    "",
-    "",
-    "",
-    "ÒëÚÛ",
-  },
-  { "active CAIDs",
-    "aktive CAIDs",
-    "",
-    "",
-    "actieve CAIDS",
-    "",
-    "CAIDs actifs",
-    "",
-    "aktiiviset CAID:t",
-    "aktywne CAID",
-    "",
-    "",
-    "aktiva CAID",
-    "",
-    "",
-    "",
-    "ÐÚâØÒÝëÕ CAID",
-  },
-  { "all CAIDs",
-    "alle CAIDs",
-    "",
-    "",
-    "alle CAIDs",
-    "",
-    "tous les CAIDs",
-    "",
-    "kaikki CAID:t",
-    "wszystkie CAID",
-    "",
-    "",
-    "alla CAID",
-    "",
-    "",
-    "",
-    "ÒáÕ CAID",
-  },
-  { "Active on DVB card",
-    "Aktiv auf DVB Karte",
-    "",
-    "",
-    "Actief op DVB kaart",
-    "",
-    "Actif sur la carte DVB",
-    "",
-    "Aktiivinen DVB-kortilla",
-    "Aktywny na karcie DVB",
-    "",
-    "",
-    "Aktiv på DVB-kort",
-    "",
-    "",
-    "",
-    "°ÚâØÒÝëÙ ÝРßÛÐâÕ DVB",
-  },
-  { "Concurrent FF streams",
-    "Gleichzeitige FF Streams",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Yhtäaikainen salauksenpurku (FF)",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¿ÐàÐÛÛÕÛìÝëÕ ßÞâÞÚØ FF",
-  },
-  { "Force TransferMode",
-    "Transfermodus erzwingen",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-  },
-  { "Prefer local systems",
-    "Lokale Systeme bevorzugen",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Suosi paikallista salauksenpurkua",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¿àÕÔßÞçØâÐâì ÛÞÚÐÛìÝëÕ áØáâÕÜë",
-  },
-  { "Ignore CAID",
-    "Ignoriere CAID",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Jätä huomioimatta CAID",
-    "",
-    "",
-    "",
-    "Ignorera CAID",
-    "",
-    "",
-    "",
-    "¸ÓÝÞàØàÞÒÐâì CAID",
-  },
-  { "Key update status:",
-    "Key update Status:",
-    "",
-    "",
-    "Key update status:",
-    "",
-    "Mise à jour des clés Statut:",
-    "",
-    "Tilausten päivitys:",
-    "Stan aktualizacji kluczy:",
-    "",
-    "",
-    "Nyckeluppdateringsstatus:",
-    "",
-    "",
-    "",
-    "¾ÑÝÞÒÛÕÝØÕ ÚÛîçÕÙ:",
-  },
-  { "  [Seen keys]",      // 2 leading spaces
-    "  [Gefundene Keys]",
-    "",
-    "  [Chiavi trovate]",
-    "",
-    "  [Gevonden keys]",
-    "  [Clés trouvées]",
-    "",
-    "  [Löydetyt päivitykset]",
-    "  [widzianych kluczy]",
-    "",
-    "  [vriskomena klidia]",
-    "  [Påträffade nycklar]",
-    "",
-    "",
-    "",
-    "  [ÚÛîçÕÙ ÝÐÙÔÕÝÞ]",
-  },
-  { "  [New keys]",       // 2 leading spaces
-    "  [Neue Keys]",
-    "",
-    "  [Nuove chiavi]",
-    "  [Nieuwe keys]",
-    "",
-    "  [Nouvelles clés]",
-    "",
-    "  [Uudet päivitykset]",
-    "  [nowych kluczy]",
-    "",
-    "  [Nea klidia]",
-    "  [Nya nycklar]",
-    "",
-    "",
-    "",
-    "  [ÝÞÒëå ÚÛîçÕÙ]",
-  },
-  { "Current keys:",
-    "Aktuelle Keys:",
-    "",
-    "Chiave in uso:",
-    "Huidige keys:",
-    "",
-    "Clé courante:",
-    "",
-    "Nykyiset avaimet:",
-    "Obecne klucze:",
-    "",
-    "Energo klidi kartas:",
-    "Aktuell nyckel:",
-    "",
-    "",
-    "",
-    "¸áßÞÛì×ãÕÜëÕ ÚÛîçØ:",
-  },
-  { "(none)",
-    "(keiner)",
-    "",
-    "(nessuno)",
-    "(geen)",
-    "",
-    "(aucune)",
-    "",
-    "(ei)",
-    "(brak)",
-    "",
-    "(kanena)",
-    "(ingen)",
-    "",
-    "",
-    "",
-    "(ÝÕâ)",
-  },
-  { "undisclosed key",
-    "unbekannter Key",
-    "",
-    "",
-    "onbekende key",
-    "",
-    "Clé non-révélée",
-    "",
-    "tuntematon avain",
-    "niejawny klucz",
-    "",
-    "",
-    "ej avslöjad nyckel",
-    "",
-    "",
-    "",
-    "ÝÕØ×ÒÕáâÝëÙ ÚÛîç",
-  },
-  { "Status information...",
-    "Status Informationen...",
-    "",
-    "",
-    "Status informatie...",
-    "",
-    "Statut information...",
-    "",
-    "Tilannetiedot...",
-    "Informacje o stanie...",
-    "",
-    "",
-    "Statusinformation...",
-    "",
-    "",
-    "",
-    "ÁÞáâÞïÝØÕ...",
-  },
-  { "Flush ECM cache",
-    "ECM Zwischenspeicher leeren",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Tyhjennä ECM-välimuisti",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¾çØáâØâì Úíè ECM",
-  },
-  { "Really flush ECM cache?",
-    "ECM Zwischenspeicher wirklich leeren?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Tyhjennetäänkö ECM-välimuisti?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "´ÕÙáâÒØâÕÛìÝÞ ÞçØáâØâì Úíè ECM?",
-  },
-  { "Reload files",
-    "Dateien neu laden",
-    "",
-    "",
-    "Opnieuw laden bestanden?",
-    "",
-    "Recharger les fichiers",
-    "",
-    "Lataa avaintiedostot uudelleen",
-    "Prze³aduj pliki",
-    "",
-    "Ksanadiavasma arxeion",
-    "Ladda om filer",
-    "",
-    "",
-    "",
-    "¿ÕàÕ×ÐÓàãרâì äÐÙÛë",
-  },
-  { "Really reload files?",
-    "Dateien wirklich neu laden?",
-    "",
-    "Ricarica il file delle chiavi?",
-    "Werkelijk opnieuw laden bestanden?",
-    "",
-    "Vraiment recharger les fichiers?",
-    "",
-    "Ladataanko avaintiedostot uudelleen?",
-    "Na pewno prze³adowaæ klucze?",
-    "",
-    "Na diavastoun pali ta arxeia?",
-    "Bekräfta omladdning av filer?",
-    "",
-    "",
-    "",
-    "´ÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐÓàãרâì äÐÙÛë?",
-  },
-  { "Active! Can't reload files now",
-    "Aktiv! Kann Dateien jetzt nicht neu laden",
-    "",
-    "Chiave in uso!",
-    "Actief! Kan bestanden niet herladen",
-    "",
-    "Actif ! Je ne peux pas recharger maintenant",
-    "",
-    "Aktiivinen! Uudelleen lataus ei onnistu",
-    "Aktywny! Nie mo¿na teraz prze³adowaæ plików.",
-    "",
-    "Energo! Den ine dinato to ksanadiavasma",
-    "Aktiv! Kan inte ladda om filer nu",
-    "",
-    "",
-    "",
-    "·ÐÝïâ! ½Õ ÜÞÓã ßÕàÕ×ÐÓàãרâì äÐÙÛë",
-  },
-  { "Smartcard",
-    "Smartcard",
-    "",
-    "",
-    "Smartcard",
-    "",
-    "Smartcard",
-    "",
-    "Älykortti",
-    "Smartcard",
-    "",
-    "",
-    "Smartcard",
-    "",
-    "",
-    "",
-    "ºÐàâÞçÚÐ",
-  },
-  { "Reset card",
-    "Karte reseten",
-    "",
-    "",
-    "Reset smartcard",
-    "",
-    "Réinitialiser la carte",
-    "",
-    "Nollaa kortti",
-    "Resetuj kartê",
-    "",
-    "",
-    "Nollställ kortet",
-    "",
-    "",
-    "",
-    "ÁÑàÞáØâì ÚÐàâÞçÚã",
-  },
-  { "Really reset card?",
-    "Karte wirklich reseten?",
-    "",
-    "",
-    "Werkelijk smartcard resetten?",
-    "",
-    "Réinitialiser vraiment la carte?",
-    "",
-    "Nollataanko kortti?",
-    "Na pewno zrestartowaæ kartê?",
-    "",
-    "",
-    "Bekräfta nollställning av kortet?",
-    "",
-    "",
-    "",
-    "´ÕÙáâÒØâÕÛìÝÞ áÑàÞáØâì ÚÐàâÞçÚã?",
-  },
-  { "Smartcard interface",
-    "Smartcard Interface",
-    "",
-    "",
-    "Smartcard interface",
-    "",
-    "Interface Smartcard",
-    "",
-    "Älykorttiliitäntä",
-    "Interfejs Smartcard",
-    "",
-    "",
-    "Smartcard-gränssnitt",
-    "",
-    "",
-    "",
-    "ºÐàâÞçÝëÙ ÜÞÔãÛì",
-  },
-  { "(empty)",
-    "(leer)",
-    "",
-    "(nessuna)",
-    "(leeg)",
-    "",
-    "(vide)",
-    "",
-    "(tyhjä)",
-    "(puste)",
-    "",
-    "",
-    "(tom)",
-    "",
-    "",
-    "",
-    "(ßãáâÞ)",
-  },
-  { "SoftCAM",
-    "SoftCAM",
-    "",
-    "SoftCAM",
-    "SoftCAM",
-    "",
-    "SoftCAM",
-    "",
-    "SoftCAM",
-    "SoftCAM",
-    "",
-    "SoftCAM",
-    "SoftCAM",
-    "",
-    "",
-    "",
-    "SoftCAM",
-  },
-  { "A software emulated CAM",
-    "Ein Software emuliertes CAM",
-    "",
-    "",
-    "In software geëmuleerde CAM",
-    "",
-    "Un logiciel emulateur de CAM",
-    "",
-    "Ohjelmistopohjainen salauksenpurku",
-    "Programowo emulowany CAM",
-    "",
-    "",
-    "En mjukvaruemulerad CAM",
-    "",
-    "",
-    "",
-    "¿àÞÓàÐÜÝëÙ íÜãÛïâÞà CAM",
-  },
-  { "Cryptsystem options...",
-    "Cryptsystem Optionen...",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Salausjärjestelmien asetukset...",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¾ßæØØ ÚàØßâÞáØáâÕÜ...",
-  },
-  { "Cryptsystem options",
-    "Cryptsystem Optionen",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Salausjärjestelmien asetukset",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¾ßæØØ ÚàØßâÞáØáâÕÜ",
-  },
-  { "Message logging...",
-    "Meldungsprotokolierung...",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Viestien tulostus...",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¿àÞâÞÚÞÛØàÞÒÐÝØÕ áÞÞÑéÕÝØÙ...",
-  },
-  { "Message logging",
-    "Meldungsprotokolierung",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Viestien tulostus",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¿àÞâÞÚÞÛØàÞÒÐÝØÕ áÞÞÑéÕÝØÙ",
-  },
-  { "Log to console",
-    "Meldungen auf Konsole",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Tulosta konsoliin",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "ÁÞÞÑéÕÝØï Ò ÚÞÝáÞÛÕ",
-  },
-  { "Log to file",
-    "Meldungen in Datei",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Tulosta tiedostoon",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "ÁÞÞÑéÕÝØï Ò äÐÙÛ",
-  },
-  { "Filename",
-    "Dateiname",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Tiedoston nimi",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "½Ð×ÒÐÝØÕ äÐÙÛÐ",
-  },
-  { "Log to syslog",
-    "Meldungen in Syslog",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Tulosta systeemilokiin",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "ÁÞÞÑéÕÝØï Ò Syslog",
-  },
-  { "Disable ALL modules",
-    "ALLE Module ausschalten",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Poista kaikki moduulit käytöstä",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "²ëÚÛîçØâì ÒáÕ ÜÞÔãÛØ",
-  },
-  { "Really disable ALL modules?",
-    "Wirklich ALLE Module ausschalten?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Poistetaanko kaikki moduulit käytöstä?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "´ÕÙáâÒØâÕÛìÝÞ ÒëÚÛîçØâì ÒáÕ ÜÞÔãÛØ?",
-  },
-  { "Reset ALL modules to default",
-    "ALLE Module auf Standard zurücksetzen",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Nollaa kaikki moduulit oletusarvoihin",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "ÁÑàÞáØâì ÒáÕ ÜÞÔãÛØ ßÞ ãÜÞÛçÐÝØî",
-  },
-  { "Really reset ALL modules to default?",
-    "Wirklich ALLE Module auf Standard zurücksetzen?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Nollataanko kaikki moduulit oletusarvoihin?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "´ÕÙáâÒØâÕÛìÝÞ áÑàÞáØâì ÒáÕ ÜÞÔãÛØ ßÞ ãÜÞÛçÐÝØî?",
-  },
-  { "Module",
-    "Modul",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Moduuli",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "¼ÞÔãÛì",
-  },
-  { "Module config",
-    "Modul Einstellungen",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Moduulin asetukset",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "½ÐáâàÞÙÚРÜÞÔãÛï",
-  },
-  { "Reset module to default",
-    "Modul auf Standard zurücksetzen",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Nollaa moduuli oletusarvoihin",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "ÁÑàÞá ÜÞÔãÛï ßÞ ãÜÞÛçÐÝØî",
-  },
-  { "Really reset module to default?",
-    "Wirklich Modul auf Standard zurücksetzen?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "Nollataanko moduuli oletusarvoihin?",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "´ÕÙáâÒØâÕÛìÝÞ áÑàÞáØâì ÜÞÔãÛì ßÞ ãÜÞÛçÐÝØî?",
-  },
-  { "Cardclient: connect immediately",
-    "Cardclient: sofort verbinden",
-    "",
-    "",
-    "Cardclient: direct contact maken",
-    "",
-    "Cardclient: connecter immediatement",
-    "",
-    "Korttiasiakas: yhdistä välittömästi",
-    "Klient karty: pod³±cz natychmiast",
-    "",
-    "",
-    "",
-  },
-  { "Nagra: min. ECM processing time",
-    "Nagra: min. ECM Bearbeitungszeit",
-    "",
-    "",
-    "Nagra: min. ECM bewerkingstijd",
-    "",
-    "Nagra: min. durée du processus ECM",
-    "",
-    "Nagra: Min. ECM-prosessointiaika",
-    "Nagra: min. czas przetwarzania ECM",
-    "",
-    "",
-    "",
-  },
-  { "SC-Cryptoworks: Parental rating",
-    "SC-Cryptoworks: Altersbeschränkung",
-    "",
-    "",
-    "SC-Cryptoworks: Leeftijdsadvies",
-    "",
-    "SC-Cryptoworks: Autorisation parentale",
-    "",
-    "SC-Cryptoworks: Ikäraja",
-    "SC-Cryptoworks: wska¼nik rodzica",
-    "",
-    "",
-    "",
-  },
-  { "don't touch",
-    "nicht ändern",
-    "",
-    "",
-    "niet wijzigen",
-    "",
-    "Ne pas modifier",
-    "",
-    "älä koske",
-    "nie dotykaj",
-    "",
-    "",
-    "",
-  },
-  { "disable",
-    "ausschalten",
-    "",
-    "",
-    "uitschakelen",
-    "",
-    "Désactiver",
-    "",
-    "poista",
-    "wy³±cz",
-    "",
-    "",
-    "",
-  },
-  { "SC-Seca: EMM updates",
-    "SC-Seca: EMM updates",
-    "",
-    "",
-    "SC-Seca: EMM updates",
-    "",
-    "SC-Seca: Mise à jour EMM",
-    "",
-    "SC-Seca: EMM-päivitykset",
-    "SC-Seca: aktualizacje EMM",
-    "",
-    "",
-    "",
-  },
-  { "allow ALL",
-    "alle erlauben",
-    "",
-    "",
-    "ALLES toestaan",
-    "",
-    "Permettre tous",
-    "",
-    "salli kaikki",
-    "dopu¶æ wszystkie",
-    "",
-    "",
-    "",
-  },
-  { "block UNIQUE",
-    "UNIQUE blocken",
-    "",
-    "",
-    "UNIEKE blokkeren",
-    "",
-    "Bloquer UNIQUE",
-    "",
-    "estä uniikit",
-    "blokuj unikaty",
-    "",
-    "",
-    "",
-  },
-  { "block SHARED",
-    "SHARED blocken",
-    "",
-    "",
-    "GEDEELDE blokkeren",
-    "",
-    "Bloquer PARTAGE",
-    "",
-    "estä jaetut",
-    "blokuj dzielone",
-    "",
-    "",
-    "",
-  },
-  { "block ALL",
-    "alle blocken",
-    "",
-    "",
-    "ALLES blokkeren",
-    "",
-    "Bloquer TOUS",
-    "",
-    "estä kaikki",
-    "blokuj wszystkie",
-    "",
-    "",
-    "",
-  },
-  { "SC-Seca: activate PPV",
-    "SC-Seca: PPV aktivieren",
-    "",
-    "",
-    "SC-Seca: activeer PPV",
-    "",
-    "SC-Seca: activer PPV",
-    "",
-    "SC-Seca: Aktivoi PPV",
-    "SC-Seca: aktywuj PPV",
-    "",
-    "",
-    "",
-  },
-  { NULL }
-  };
-
-#endif
diff --git a/log.c b/log.c
index 58b12eaf7f8282d73acf9244813929e6c34aa248..66447063a4d5b88f2a44ca6b8240e42a22bf261b 100644 (file)
--- a/log.c
+++ b/log.c
@@ -40,6 +40,7 @@ struct LogHeader {
 
 struct LogConfig logcfg = {
   1,0,0,
+  0,
   "/var/log/vdr-sc"
   };
 
@@ -55,6 +56,7 @@ static int cmask[LMOD_SUP]  = { LMOD_ENABLE|L_GEN_ALL };
 static cMutex logfileMutex;
 static FILE *logfile=0;
 static bool logfileShutup=false, logfileReopen=false;
+static long long logfileSize;
 
 static unsigned int lastCrc=0;
 static int lastC=0, lastCount=0;
@@ -125,37 +127,56 @@ void cLogging::LogLine(const struct LogHeader *lh, const char *txt, bool doCrc)
       }
     }
 
-  if(logcfg.logCon)
-    printf("%s [%s] %s\n",lh->stamp,lh->tag,txt);
-
   if(logcfg.logFile) {
-    if((!logfile && !logfileShutup) || logfileReopen) {
-      logfileMutex.Lock();
-      if(logfileReopen) {
-        logfileReopen=false;
-        if(logfile) {
-          PRINTF(L_GEN_DEBUG,"logfile closed, reopen as '%s'",logcfg.logFilename);
-          fclose(logfile);
-          logfile=0;
-          }
+    logfileMutex.Lock();
+    if(logfileReopen) {
+      logfileReopen=false; logfileShutup=false;
+      if(logfile) {
+        PRINTF(L_GEN_DEBUG,"logfile closed, reopen as '%s'",logcfg.logFilename);
+        fclose(logfile);
+        logfile=0;
         }
-      if(!logfile) {
-        logfile=fopen(logcfg.logFilename,"a");
-        if(logfile) {
-          setlinebuf(logfile);
-          PRINTF(L_GEN_DEBUG,"logfile '%s' opened",logcfg.logFilename);
+      }
+    if(!logfile && !logfileShutup) {
+      logfile=fopen(logcfg.logFilename,"a");
+      if(logfile) {
+        setlinebuf(logfile);
+        logfileSize=ftell(logfile);
+        if(logfileSize<0) {
+          logfileSize=0;
+          PRINTF(L_GEN_ERROR,"cannot determine size of logfile '%s', assuming zero",logcfg.logFilename);
           }
-        else {
+        PRINTF(L_GEN_DEBUG,"logfile '%s' opened",logcfg.logFilename);
+        }
+      else {
+        logfileShutup=true;
+        PRINTF(L_GEN_ERROR,"failed to open logfile '%s': %s",logcfg.logFilename,strerror(errno));
+        }
+      }
+    if(logfile) {
+      int q=fprintf(logfile,"%s [%s] %s\n",lh->stamp,lh->tag,txt);
+      if(q>0) logfileSize+=q;
+
+      if(logcfg.maxFilesize>0 && logfileSize>((long long)logcfg.maxFilesize*1024)) {
+        fprintf(logfile,"%s [%s] %s\n",lh->stamp,lh->tag,"logfile closed, filesize limit reached");
+        fclose(logfile);
+        logfile=0; logfileShutup=false;
+        char *name;
+        asprintf(&name,"%s.old",logcfg.logFilename);
+        if(rename(logcfg.logFilename,name)) {
           logfileShutup=true;
-          PRINTF(L_GEN_ERROR,"failed to open logfile '%s': %s",logcfg.logFilename,strerror(errno));
+          PRINTF(L_GEN_ERROR,"failed to rotate logfile: %s",strerror(errno));
+          PRINTF(L_GEN_ERROR,"logging to file disabled!");
           }
+        free(name);
         }
-      logfileMutex.Unlock();
       }
-    if(logfile)
-      fprintf(logfile,"%s [%s] %s\n",lh->stamp,lh->tag,txt);
+    logfileMutex.Unlock();
     }
 
+  if(logcfg.logCon)
+    printf("%s [%s] %s\n",lh->stamp,lh->tag,txt);
+
   if(logcfg.logSys || LMOD(lh->c)==L_GEN) {
     int pri=-1;
     switch(lh->c) {
diff --git a/log.h b/log.h
index 196500291dfc4477916260cda48717ac3edb3b61..7f4a4f6d16a53026f6ad7b6fe6a600414d4185c0 100644 (file)
--- a/log.h
+++ b/log.h
@@ -69,6 +69,7 @@
 
 struct LogConfig {
   int logCon, logFile, logSys;
+  int maxFilesize;
   char logFilename[128];
   };
 
diff --git a/parse.c b/parse.c
index e03c491910bb25b100001b5039a0f911e6e65513..856a674305f46a4915b90c258c32e546968879f5 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -744,16 +744,16 @@ bool cParseNDS::HasAddr(const unsigned char *data, const unsigned char *a)
 const unsigned char *cParseNDS::PayloadStart(const unsigned char *data)
 {
   //return &data[4 + NumAddr(data)*4 + 2];
-  if(AddrMode(data)==0) return &data[4 + 2];
-  else                  return &data[4 + NumAddr(data)*4];
+  if(AddrMode(data)==0) return &data[4];
+  else                  return &data[4+NumAddr(data)*4];
 }
 
 int cParseNDS::PayloadSize(const unsigned char *data)
 {
   //return emm[2]+emm[3]+4-1+5;
   int l=SCT_LEN(data);
-  if(AddrMode(data)==0) return l-(4 + 2);
-  else                  return l-(4 + NumAddr(data)*4);
+  if(AddrMode(data)==0) return l-(4);
+  else                  return l-(4+NumAddr(data)*4);
 }
 
 int cParseNDS::Assemble(cAssembleData *ad, const unsigned char *a)
index 80d8ade472d736b08c01a561eeefa29a9cc526e0..e06fa0000bb64b2fb499079165eb485cc5edc18d 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr "Dateiname"
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr "Dateigrößenlimit (KB)"
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr "Meldungen in Syslog"
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr "Ein Software emuliertes CAM"
 
index 0d37daa5f3391028c987a626aca75f4aa4a4ed1b..ff89dd7592ad18a5242edac5773db32cff268c6e 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -154,7 +154,7 @@ msgstr "Yht
 
 #: sc.c:1202
 msgid "Force TransferMode"
-msgstr ""
+msgstr "Pakota siirtotila"
 
 #: sc.c:1203
 msgid "Prefer local systems"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr "Tiedoston nimi"
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr "Tulosta systeemilokiin"
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr "Ohjelmistopohjainen salauksenpurku"
 
index 64bab217b59cdf2555e73933385bfdf7f9f8b2fe..2ae8a2839504e2612efa918f2eda346e2d3ccacb 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr ""
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr ""
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr "Un logiciel emulateur de CAM"
 
index 95f98f2c083bc99246c3a61f40fe2042be35082e..cc5fccb25874ec77b789c8522b329e909dd3686a 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr ""
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr ""
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr ""
 
index e7ed5fa425fc705cf8117acbc2a1b9e2b6228ff2..5c6b2874df57bfe16c8554db4b457e4ee0683ac8 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr ""
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr ""
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr "In software geëmuleerde CAM"
 
index 4653f39793774c8f27582fcc5ac2c7db80b40c37..e124f63c9993c0e9e005861d58a69061565b2930 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr ""
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr ""
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr "Programowo emulowany CAM"
 
index 6f493b91627faa7a1a6e6b4e9fda84bb4fc1e544..a39a04be2a11f0d26f555582e52d1f3683160de8 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr "½Ð×ÒÐÝØÕ äÐÙÛÐ"
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr "ÁÞÞÑéÕÝØï Ò Syslog"
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr "¿àÞÓàÐÜÝëÙ íÜãÛïâÞà CAM"
 
diff --git a/po/sc.pot b/po/sc.pot
new file mode 100644 (file)
index 0000000..04f1efb
--- /dev/null
+++ b/po/sc.pot
@@ -0,0 +1,243 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: sc.c:117 sc.c:1198
+msgid "off"
+msgstr ""
+
+#: sc.c:546 sc.c:852
+msgid "SoftCAM"
+msgstr ""
+
+#: sc.c:548
+msgid "Current keys:"
+msgstr ""
+
+#: sc.c:563
+msgid "Key update status:"
+msgstr ""
+
+#. TRANSLATORS: 2 leading spaces!
+#: sc.c:567
+msgid "  [Seen keys]"
+msgstr ""
+
+#. TRANSLATORS: 2 leading spaces!
+#: sc.c:569
+msgid "  [New keys]"
+msgstr ""
+
+#: sc.c:593
+msgid "Smartcard"
+msgstr ""
+
+#: sc.c:598
+msgid "Reset card"
+msgstr ""
+
+#: sc.c:604
+msgid "Really reset card?"
+msgstr ""
+
+#: sc.c:643
+msgid "Module config"
+msgstr ""
+
+#: sc.c:646
+msgid "Reset module to default"
+msgstr ""
+
+#: sc.c:680
+msgid "Really reset module to default?"
+msgstr ""
+
+#: sc.c:721
+msgid "Module"
+msgstr ""
+
+#: sc.c:736
+msgid "Message logging"
+msgstr ""
+
+#: sc.c:739
+msgid "Disable ALL modules"
+msgstr ""
+
+#: sc.c:740
+msgid "Reset ALL modules to default"
+msgstr ""
+
+#: sc.c:763
+msgid "Really disable ALL modules?"
+msgstr ""
+
+#: sc.c:771
+msgid "Really reset ALL modules to default?"
+msgstr ""
+
+#: sc.c:801
+msgid "Cryptsystem options"
+msgstr ""
+
+#: sc.c:858
+msgid "Cryptsystem options..."
+msgstr ""
+
+#: sc.c:859
+msgid "Message logging..."
+msgstr ""
+
+#: sc.c:864
+msgid "Smartcard interface"
+msgstr ""
+
+#: sc.c:866
+msgid "(empty)"
+msgstr ""
+
+#: sc.c:869
+msgid "Status information..."
+msgstr ""
+
+#: sc.c:870
+msgid "Flush ECM cache"
+msgstr ""
+
+#: sc.c:871
+msgid "Reload files"
+msgstr ""
+
+#: sc.c:898
+msgid "Really flush ECM cache?"
+msgstr ""
+
+#: sc.c:917
+msgid "Really reload files?"
+msgstr ""
+
+#: sc.c:924
+msgid "Active! Can't reload files now"
+msgstr ""
+
+#: sc.c:1033
+msgid "(none)"
+msgstr ""
+
+#: sc.c:1198
+msgid "active CAIDs"
+msgstr ""
+
+#: sc.c:1198
+msgid "all CAIDs"
+msgstr ""
+
+#: sc.c:1200
+msgid "Update keys (AU)"
+msgstr ""
+
+#: sc.c:1201
+msgid "Concurrent FF streams"
+msgstr ""
+
+#: sc.c:1202
+msgid "Force TransferMode"
+msgstr ""
+
+#: sc.c:1203
+msgid "Prefer local systems"
+msgstr ""
+
+#: sc.c:1204
+msgid "Active on DVB card"
+msgstr ""
+
+#: sc.c:1205
+msgid "Ignore CAID"
+msgstr ""
+
+#: sc.c:1207
+msgid "Log to console"
+msgstr ""
+
+#: sc.c:1208
+msgid "Log to file"
+msgstr ""
+
+#: sc.c:1209
+msgid "Filename"
+msgstr ""
+
+#: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
+msgid "Log to syslog"
+msgstr ""
+
+#: sc.c:1281
+msgid "A software emulated CAM"
+msgstr ""
+
+#: system.c:250
+msgid "undisclosed key"
+msgstr ""
+
+#: systems/cardclient/cc.c:241
+msgid "Cardclient: connect immediately"
+msgstr ""
+
+#: systems/nagra/nagra1.c:977
+msgid "Nagra: min. ECM processing time"
+msgstr ""
+
+#: systems/sc-cryptoworks/sc-cryptoworks.c:81
+msgid "don't touch"
+msgstr ""
+
+#: systems/sc-cryptoworks/sc-cryptoworks.c:82
+msgid "disable"
+msgstr ""
+
+#: systems/sc-cryptoworks/sc-cryptoworks.c:86
+msgid "SC-Cryptoworks: Parental rating"
+msgstr ""
+
+#: systems/sc-seca/sc-seca.c:81
+msgid "allow ALL"
+msgstr ""
+
+#: systems/sc-seca/sc-seca.c:82
+msgid "block UNIQUE"
+msgstr ""
+
+#: systems/sc-seca/sc-seca.c:83
+msgid "block SHARED"
+msgstr ""
+
+#: systems/sc-seca/sc-seca.c:84
+msgid "block ALL"
+msgstr ""
+
+#: systems/sc-seca/sc-seca.c:100
+msgid "SC-Seca: EMM updates"
+msgstr ""
+
+#: systems/sc-seca/sc-seca.c:101
+msgid "SC-Seca: activate PPV"
+msgstr ""
index 7a96db420b55599353efb26f5c83628f42844b54..f620518ed16a5f925bfe33df6cc9473b9fbc82b1 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 1.5.9\n"
 "Report-Msgid-Bugs-To: <noone@nowhere.org>\n"
-"POT-Creation-Date: 2007-08-27 14:30+0200\n"
+"POT-Creation-Date: 2007-09-13 19:11+0200\n"
 "PO-Revision-Date: 2007-08-27 12:45+0200\n"
 "Last-Translator: somebody\n"
 "Language-Team: somebody\n"
@@ -181,10 +181,14 @@ msgid "Filename"
 msgstr ""
 
 #: sc.c:1210
+msgid "Filesize limit (KB)"
+msgstr ""
+
+#: sc.c:1211
 msgid "Log to syslog"
 msgstr ""
 
-#: sc.c:1280
+#: sc.c:1281
 msgid "A software emulated CAM"
 msgstr "En mjukvaruemulerad CAM"
 
diff --git a/po2i18n.pl b/po2i18n.pl
new file mode 100644 (file)
index 0000000..cef8092
--- /dev/null
@@ -0,0 +1,156 @@
+#!/usr/bin/perl
+#
+#  po2i18n - Convert plugin po files in into i18n.c-format
+#
+#  See the README file for copyright information and how to reach the author.
+#
+
+use strict;
+use warnings;
+
+my @LANGS = (
+  "en_US",
+  "de_DE",
+  "sl_SI",
+  "it_IT",
+  "nl_NL",
+  "pt_PT",
+  "fr_FR",
+  "nn_NO",
+  "fi_FI",
+  "pl_PL",
+  "es_ES",
+  "el_GR",
+  "sv_SE",
+  "ro_RO",
+  "hu_HU",
+  "ca_ES",
+  "ru_RU",
+  "hr_HR",
+  "et_EE",
+  "da_DK",
+  "cs_CZ",
+  "tr_TR"
+  );
+
+my %VERS = (
+  "en_US" => 10200,
+  "de_DE" => 10200,
+  "sl_SI" => 10200,
+  "it_IT" => 10200,
+  "nl_NL" => 10200,
+  "pt_PT" => 10200,
+  "fr_FR" => 10200,
+  "nn_NO" => 10200,
+  "fi_FI" => 10200,
+  "pl_PL" => 10200,
+  "es_ES" => 10200,
+  "el_GR" => 10200,
+  "sv_SE" => 10200,
+  "ro_RO" => 10200,
+  "hu_HU" => 10200,
+  "ca_ES" => 10200,
+  "ru_RU" => 10302,
+  "hr_HR" => 10307,
+  "et_EE" => 10313,
+  "da_DK" => 10316,
+  "cs_CZ" => 10342,
+  "tr_TR" => 10502
+  );
+
+
+my %strings;
+
+foreach my $lang (@LANGS) { $strings{$lang} = { }; }
+
+
+sub LoadLanguage(*) {
+    my ($lang) = @_;
+    
+    if (!open FILE, "<", "po/$lang.po") {
+        return 0;   
+    }
+    
+    my $msgid = "";
+    my $msgstr = "";
+    my $last = 0; # 0=init, 1=msgid was last, 2=msgstr was last
+    
+    while (<FILE>) {
+        chomp;
+        my $line = $_;
+        
+        if ($line =~ /^msgid "(.*)"$/) {
+            if ($last eq 2) {
+                $strings{$lang}->{$msgid} = $msgstr;
+                $strings{"en_US"}->{$msgid} = $msgid;
+            }
+            $msgid = $1;
+            $last = 1;
+        } elsif ($line =~ /^msgstr "(.*)"/) {
+            $msgstr = $1;
+            $last = 2;
+        } elsif ($line =~ /^"(.*)"/) {
+            if ($last eq 1) {
+                $msgid = $msgid . $1;
+            } elsif ($last eq 2) {
+                $msgstr = $msgstr . $1;
+            }
+        }       
+    }
+    if ($last eq 2) {
+        $strings{$lang}->{$msgid} = $msgstr;
+        $strings{"en_US"}->{$msgid} = $msgid;
+    }
+    
+    close FILE;
+}
+
+
+
+foreach my $lang (@LANGS) { 
+    LoadLanguage($lang);
+}
+
+my @msgids = sort keys %{$strings{"en_US"}};
+
+
+my $silent = 0;
+
+while (<>) {
+    my $line = $_;
+
+    if ($line =~ /^\/\/ START I18N/) {
+        print "// START I18N - automatically generated by po2i18n.pl\n";
+        for my $msgid (@msgids) {
+            next if $msgid eq "";
+
+            my $head = "  { ";
+            my $endif = "";
+            my $versnum = 10200;
+            
+            for my $lang (@LANGS) {
+                if ($VERS{$lang} ne $versnum) {
+                    $versnum = $VERS{$lang};
+                    print $endif;
+                    print "#if VDRVERSNUM >= $versnum\n";
+                    $endif = "#endif\n";
+                }
+                my $msgstr = $strings{$lang}->{$msgid};
+                $msgstr = "" if !defined $msgstr;
+                
+                print "$head\"$msgstr\",\n";
+                $head = "    ";
+            }
+            print $endif;
+            print "  },\n";
+        }
+        $silent = 1;
+    }
+
+    if (!$silent) { print $line; }
+
+    if ($line =~ /^\/\/ END I18N/) { 
+        print "// END I18N - automatically generated by po2i18n.pl\n";
+        $silent = 0; 
+    }    
+}
diff --git a/sc.c b/sc.c
index 7f05483d9fc5af76436752989b03b5d18bac4b0f..86682454e18eb7a38477b543be77b71f11de49a3 100644 (file)
--- a/sc.c
+++ b/sc.c
@@ -1203,10 +1203,11 @@ cScPlugin::cScPlugin(void)
   ScOpts->Add(new cOptBool ("LocalPriority",trNOOP("Prefer local systems") ,&ScSetup.LocalPriority));
   ScOpts->Add(new cOptMInt ("ScCaps"       ,trNOOP("Active on DVB card")   , ScSetup.ScCaps,MAXSCCAPS,0));
   ScOpts->Add(new cOptMInt ("CaIgnore"     ,trNOOP("Ignore CAID")          , ScSetup.CaIgnore,MAXCAIGN,2));
-  LogOpts=new cOpts(0,4);
+  LogOpts=new cOpts(0,5);
   LogOpts->Add(new cOptBool ("LogConsole"  ,trNOOP("Log to console")      ,&logcfg.logCon));
   LogOpts->Add(new cOptBool ("LogFile"     ,trNOOP("Log to file")         ,&logcfg.logFile));
   LogOpts->Add(new cOptStr  ("LogFileName" ,trNOOP("Filename")            ,logcfg.logFilename,sizeof(logcfg.logFilename),FileNameChars));
+  LogOpts->Add(new cOptInt  ("LogFileLimit",trNOOP("Filesize limit (KB)") ,&logcfg.maxFilesize,0,2000000));
   LogOpts->Add(new cOptBool ("LogSyslog"   ,trNOOP("Log to syslog")       ,&logcfg.logSys));
 #ifndef STATICBUILD
   dlls.Load();
index 3899eef8653f88cd91db6c1a29785bf6c0366458..e543b320180ba8643872016406cbbb1cb7c16be9 100644 (file)
@@ -172,6 +172,8 @@ class cN2Prov0101 : public cN2Prov, public cN2Emu, private cMap0101 {
 private:
   bool special05;
 protected:
+  int hwCount;
+  //
   virtual bool Algo(int algo, const unsigned char *hd, unsigned char *hw);
   virtual void Stepper(void);
   virtual void WriteHandler(unsigned char seg, unsigned short ea, unsigned char &op);
@@ -188,12 +190,13 @@ cN2Prov0101::cN2Prov0101(int Id, int Flags)
 {
   hasWriteHandler=hasReadHandler=true;
   special05=false;
+  hwCount=2;
 }
 
 bool cN2Prov0101::Algo(int algo, const unsigned char *hd, unsigned char *hw)
 {
   if(algo==0x40) {
-    memcpy(hw,hd,3);
+    memcpy(hw,hd,hwCount+1);
     ExpandInput(hw);
     hw[0x18]|=1; hw[0x40]|=1;
     DoMap(SETSIZE,0,2);
@@ -208,9 +211,8 @@ bool cN2Prov0101::Algo(int algo, const unsigned char *hd, unsigned char *hw)
     DoMap(0x43);
     DoMap(0x44,hw);
     DoMap(0x44,hw+64);
-    hw[0]=hw[64+4]; // ctx.h3&0xFF
-    hw[1]=hw[64+5]; //(ctx.h3>>8)&0xFF
-    memset(&hw[2],0,128-2);
+    memcpy(&hw[0],&hw[64+4],hwCount);
+    memset(&hw[hwCount],0,128-hwCount);
     return true;
     }
   else if(algo==0x60) { // map 4D/4E/57
@@ -342,12 +344,18 @@ void cN2Prov0101::Stepper(void)
 
 class cN2Prov0901 : public cN2Prov0101 {
 public:
-  cN2Prov0901(int Id, int Flags):cN2Prov0101(Id,Flags) {}
+  cN2Prov0901(int Id, int Flags);
   virtual int ProcessBx(unsigned char *data, int len, int pos);
   };
 
 static cN2ProvLinkReg<cN2Prov0901,0x0901,N2FLAG_MECM|N2FLAG_Bx> staticPL0901;
 
+cN2Prov0901::cN2Prov0901(int Id, int Flags)
+:cN2Prov0101(Id,Flags)
+{
+  hwCount=4;
+}
+
 int cN2Prov0901::ProcessBx(unsigned char *data, int len, int pos)
 {
   if(Init(0x0801,102)) {
index 761337cbea4b4efd2d33d65785629e05e41ebc4d..f398d1ca5550ca378935d3d2c8b4f500ccf397b2 100644 (file)
@@ -99,23 +99,13 @@ bool cN2Prov0501::Algo(int algo, const unsigned char *hd, unsigned char *hw)
 
 // -- cN2Prov0511 ----------------------------------------------------------------
 
-/*
-class cN2Prov0511 : public cN2Prov0501 {
-public:
-  cN2Prov0511(int Id, int Flags):cN2Prov0501(Id,Flags) {}
-  };
-*/
-
 static cN2ProvLinkReg<cN2Prov0501,0x0511,N2FLAG_MECM|N2FLAG_INV> staticPL0511;
 
 // -- cN2Prov1101 ----------------------------------------------------------------
 
-/*
-class cN2Prov1101 : public cN2Prov0501 {
-public:
-  cN2Prov1101(int Id, int Flags):cN2Prov0501(Id,Flags) {}
-  };
-*/
-
 static cN2ProvLinkReg<cN2Prov0501,0x1101,N2FLAG_MECM|N2FLAG_INV> staticPL1101;
 
+// -- cN2Prov3101 ----------------------------------------------------------------
+
+static cN2ProvLinkReg<cN2Prov0501,0x3101,N2FLAG_MECM|N2FLAG_INV> staticPL3101;
+
index 53f6fa21c825f13c2cd570c163af86df8400a8c0..53e595056f5179ef8efbd4331420bd10ea42548e 100644 (file)
@@ -604,6 +604,14 @@ cSystemNagra2::~cSystemNagra2()
 
 bool cSystemNagra2::ProcessECM(const cEcmInfo *ecm, unsigned char *data)
 {
+  if((ecm->provId>>8)==0x09 && data[4]==101) { // BEV rev248 morph
+    data[0x05]=9;                              // I _HATE_ this provider
+    data[0x06]&=0x1F;                          // specific stuff :(
+    data[0x07]=data[0x07]&0x10|0x86;
+    data[0x08]=0;
+    data[0x09]=data[0x09]&0x80|0x08;
+    }
+
   int cmdLen=data[4]-5;
   int id=(data[5]*256)+data[6];
   cTimeMs minTime;
@@ -830,7 +838,6 @@ void cSystemNagra2::ProcessEMM(int pid, int caid, unsigned char *buffer)
       case 0xAE: i+=11;break;
       case 0x12: i+=emmdata[i+1]+2; break;      // create tier
       case 0x20: i+=19; break;                  // modify tier
-//      case 0x13 ... 0x17: i+=4; break;               // Date
       case 0xE3: i+=emmdata[i+4]+5; break;     // Eeprom update
       case 0xE1:
       case 0xE2:
index dfa2ca00a7900b05997a3d0a01cff3c687cb7376..6989e43cda43e0472349d19744bf50a5a0052587 100644 (file)
@@ -571,6 +571,25 @@ const cTpsKey *cTpsKeys::GetKey(time_t t)
   return 0;
 }
 
+const cTpsKey *cTpsKeys::GetV2Key(int id)
+{
+  unsigned char tmp[56];
+  memset(tmp,0,sizeof(tmp));
+  cPlainKey *pk=keys.FindKey('V',id,MBC3('T','P','S'),16,0);
+  if(pk) {
+    pk->Get(&tmp[4+2*16]);
+    tmp[52+2]=1;
+    tmp[52+3]=0x1C;
+    cTpsKey *tk=new cTpsKey;
+    if(tk) {
+      tk->Set(tmp);
+      return tk;
+      }
+    }
+  else PRINTF(L_SYS_KEY,"missing %.4x TPS key\n",id);
+  return 0;
+}
+
 void cTpsKeys::Check(time_t now, int cardnum)
 {
   checkMutex.Lock();
@@ -709,7 +728,10 @@ bool cTpsKeys::ProcessAu(const cOpenTVModule *mod)
               }
             }
           if(hits==3) cb3=addr;
-          else if(hits==2) cb2=addr;
+          else if(hits==2) {
+            if(cb2==0) cb2=addr;
+            else if(cb3==0) cb3=addr;
+            }
           }
         }
       }
@@ -1094,7 +1116,7 @@ bool cTPSDecrypt::DecryptAlgo3(const unsigned char *key, unsigned char *data)
     for(int i=0; i<16; i++) st20.WriteByte(RAMS+0x400+i,key[i]);
     st20.Init(FLASHS+cb2off,RAMS+0xF000);
     st20.SetCallFrame(0,RAMS+0x400,RAMS+0x800,0);
-    int err=st20.Decode(20000);
+    int err=st20.Decode(30000);
     if(err<0) {
       PRINTF(L_SYS_TPS,"ST20 processing failed in callback2 (%d)",err);
       return false;
@@ -1140,19 +1162,20 @@ int cTPS::Decrypt(int cardNum, int Source, int Transponder, unsigned char *data,
   if(now<0) return -1;
 
   const cTpsKey *k=tpskeys.GetKey(now);
-  if(!k) {
-    PRINTF(L_SYS_TPS,"no TPS key available for current time of day");
-    return -1;
-    }
   doPost=0;
-  int opmode=k->Opmode(), doTPS=0, doPre=0, hasDF=0, ret=0;
+  int opmode=k?k->Opmode():4, doTPS=0, doPre=0, hasDF=0, ret=0;
   if((opmode&4) && data[0]==0xD2 && data[1]==0x01 && data[2]==0x01) {
     data+=3; len-=3; ret=3;
     if(data[0]==0x90) PRINTF(L_SYS_TPS,"TPS v1 is no longer supported");
     if(data[0]==0x40) data[0]=0x90;
     doTPS=1;
+    if(!k) k=tpskeys.GetV2Key(0x7c00);
     }
-  for(int i=0; i<len; i+=data[i+1]+2)
+  for(int i=0; i<len; i+=data[i+1]+2) {
+    if(!k && (doTPS || doPre || doPost)) {
+      PRINTF(L_SYS_TPS,"no TPS key available for current time of day");
+      return -1;
+      }
     switch(data[i]) {
       case 0xDF:
         if(!(opmode&4)) doTPS =(0x6996>>((data[i+2]&0xF)^(data[i+2]>>4)))&1;
@@ -1165,6 +1188,7 @@ int cTPS::Decrypt(int cardNum, int Source, int Transponder, unsigned char *data,
         if(doTPS) TpsDecrypt(&data[i+2],(hasDF)?k->Mode(2):1,k->Key(2));
         break;
       }
+    }
   postMode=k->Mode(1); memcpy(postKey,k->Key(1),sizeof(postKey));
   return ret;
 }
index 375eb62fb0fcc1b24311c045874dbf56b9d05fcf..7cfae113a4c0e5a8066f2711393240c612446b2d 100644 (file)
@@ -127,6 +127,7 @@ public:
   cTpsKeys(void);
   ~cTpsKeys();
   const cTpsKey *GetKey(time_t t);
+  const cTpsKey *GetV2Key(int id);
   void Check(time_t now, int cardnum);
   virtual bool ParseLine(const char *line, bool fromCache);
   virtual bool Save(FILE *f);
index c649f418a4af30662a917ec608e7f42173541f98..96b2ba9ee48cb00cae9afc4f8fe36bff24dc77af 100644 (file)
@@ -107,7 +107,16 @@ bool cPlainKeyVia::Parse(const char *line)
 
 cString cPlainKeyVia::PrintKeyNr(void)
 {
-  return cString::sprintf((keynr==MBC3('T','P','S'))?"TPS":"%02X",keynr);
+  char tmp[8], *kn=tmp;
+  switch(keynr) {
+    case MBC3('T','P','S'):
+      kn="TPS"; break;
+    case MBC3('M','K',0) ... MBC3('M','K',9):
+      snprintf(tmp,sizeof(tmp),"MK%d",C3(keynr)); break;
+    default:
+      snprintf(tmp,sizeof(tmp),"%02X",keynr); break;
+    }
+  return kn;
 }
 
 // -- cViaccessCardInfo --------------------------------------------------------
index 39f77b27fb1b079dfe9a93025b918f54353c8b2f..058a93ad4641d6a140757ed1f5627f9bedb8eb6a 100644 (file)
--- a/version.h
+++ b/version.h
@@ -21,8 +21,8 @@
 #define ___VERSION_H
 
 // all release versions must end with 0xFF !!
-#define SCVERSNUM 0x000802FF
-#define SCVERSION "0.8.2"
+#define SCVERSNUM 0x000803FF
+#define SCVERSION "0.8.3"
 
 extern const char *ScVersion;