📄 sc.c
字号:
if((opts=MALLOC(cOpt *,numOpts))) memset(opts,0,sizeof(cOpt *)*numOpts);}cOpts::~cOpts(){ if(opts) { for(int i=0; i<numOpts; i++) delete opts[i]; free(opts); }}void cOpts::Add(cOpt *opt){ if(opts && numAdd<numOpts) opts[numAdd++]=opt;}bool cOpts::Parse(const char *Name, const char *Value){ if(opts) { for(int i=0; i<numAdd; i++) if(opts[i] && opts[i]->Persistant() && !strcasecmp(Name,opts[i]->Name())) { opts[i]->Parse(Value); return true; } } return false;}bool cOpts::Store(bool AsIs){ bool res=false; if(opts) { for(int i=0; i<numAdd; i++) if(opts[i]) { if(!AsIs && opts[i]->Set()) res=true; if(opts[i]->Persistant()) opts[i]->Store(preStr); } } return res;}void cOpts::Backup(void){ if(opts) { for(int i=0; i<numAdd; i++) if(opts[i]) opts[i]->Backup(); }}void cOpts::Create(cOsdMenu *menu){ if(opts) { for(int i=0; i<numAdd; i++) if(opts[i]) opts[i]->Create(menu); }}// --- cMenuInfoSc -------------------------------------------------------------class cMenuInfoSc : public cOsdMenu {public: cMenuInfoSc(void); virtual eOSState ProcessKey(eKeys Key); };cMenuInfoSc::cMenuInfoSc(void):cOsdMenu(tr("SoftCAM"),25){ Add(new cScInfoItem(tr("Current keys:"))); for(int d=0; d<MAXDVBDEVICES; d++) { int n=0; char *ks; do { if((ks=cSoftCAM::CurrKeyStr(d,n))) { char buffer[32]; snprintf(buffer,sizeof(buffer)," [%s %d:%d]","DVB",d+1,n+1); Add(new cScInfoItem(buffer,ks)); free(ks); } n++; } while(ks); } if(Feature.KeyFile()) { Add(new cScInfoItem(tr("Key update status:"))); int fk, nk; cSystem::KeyStats(fk,nk); Add(new cScInfoItem(tr(" [Seen keys]"),fk)); Add(new cScInfoItem(tr(" [New keys]"), nk)); } Display();}eOSState cMenuInfoSc::ProcessKey(eKeys Key){ eOSState state=cOsdMenu::ProcessKey(Key); if(state==osUnknown && Key==kOk) state=osBack; return state;}// --- cMenuInfoCard -----------------------------------------------------------class cMenuInfoCard : public cMenuText {private: int port; char infoStr[1024];public: cMenuInfoCard(int Port); virtual eOSState ProcessKey(eKeys Key); };cMenuInfoCard::cMenuInfoCard(int Port):cMenuText(tr("Smartcard"),0,fontFix){ port=Port; smartcards.CardInfo(port,infoStr,sizeof(infoStr)); SetText(infoStr); SetHelp(tr("Reset card")); Display();}eOSState cMenuInfoCard::ProcessKey(eKeys Key){ if(Key==kRed && Interface->Confirm(tr("Really reset card?"))) { smartcards.CardReset(port); return osEnd; } eOSState state=cMenuText::ProcessKey(Key); if(state==osUnknown) state=osContinue; return state;}// --- cLogOptItem -------------------------------------------------------------class cLogOptItem : public cMenuEditBoolItem {private: int o;public: cLogOptItem(const char *Name, int O, int *val); int Option(void) { return o; } };cLogOptItem::cLogOptItem(const char *Name, int O, int *val):cMenuEditBoolItem(Name,val){ o=O;}// --- cMenuLogMod -------------------------------------------------------------class cMenuLogMod : public cOsdMenu {private: int m; int v[LOPT_NUM], cfg[LOPT_NUM]; // void Store(void);public: cMenuLogMod(int M); virtual eOSState ProcessKey(eKeys Key); };cMenuLogMod::cMenuLogMod(int M):cOsdMenu(tr("Module config"),33){ m=M; Add(new cOsdItem(tr("Reset module to default"),osUser9)); const char *name=cLogging::GetModuleName(LCLASS(m,0)); int o=cLogging::GetModuleOptions(LCLASS(m,0)); if(o>=0) { for(int i=0; i<LOPT_NUM; i++) { const char *opt; if(i==0) opt="enable"; else opt=cLogging::GetOptionName(LCLASS(m,1<<i)); if(opt) { char buff[64]; snprintf(buff,sizeof(buff),"%s.%s",name,opt); cfg[i]=(o&(1<<i)) ? 1:0; v[i]=1; Add(new cLogOptItem(buff,i,&cfg[i])); } else v[i]=0; } } Display();}void cMenuLogMod::Store(void){ int o=0; for(int i=0; i<LOPT_NUM; i++) if(v[i] && cfg[i]) o|=(1<<i); cLogging::SetModuleOptions(LCLASS(m,o)); ScSetup.Store(false);}eOSState cMenuLogMod::ProcessKey(eKeys Key){ eOSState state=cOsdMenu::ProcessKey(Key); switch(state) { case osUser9: if(Interface->Confirm(tr("Really reset module to default?"))) { cLogging::SetModuleDefault(LCLASS(m,0)); ScSetup.Store(false); state=osBack; } break; case osContinue: if(NORMALKEY(Key)==kLeft || NORMALKEY(Key)==kRight) { cLogOptItem *item=dynamic_cast<cLogOptItem *>(Get(Current())); if(item) { int o=item->Option(); cLogging::SetModuleOption(LCLASS(m,1<<o),cfg[o]); } } break; case osUnknown: if(Key==kOk) { Store(); state=osBack; } break; default: break; } return state;}// --- cLogModItem -------------------------------------------------------------class cLogModItem : public cOsdItem {private: int m;public: cLogModItem(const char *Name, int M); int Module(void) { return m; } };cLogModItem::cLogModItem(const char *Name, int M):cOsdItem(osUnknown){ m=M; char buf[64]; snprintf(buf,sizeof(buf),"%s '%s'...",tr("Module"),Name); SetText(buf,true);}// --- cMenuLogSys -------------------------------------------------------------class cMenuLogSys : public cOsdMenu {private: void Store(void);public: cMenuLogSys(void); virtual eOSState ProcessKey(eKeys Key); };cMenuLogSys::cMenuLogSys(void):cOsdMenu(tr("Message logging"),33){ LogOpts->Backup(); LogOpts->Create(this); Add(new cOsdItem(tr("Disable ALL modules"),osUser9)); Add(new cOsdItem(tr("Reset ALL modules to default"),osUser8)); for(int m=1; m<LMOD_MAX; m++) { const char *name=cLogging::GetModuleName(LCLASS(m,0)); if(name) Add(new cLogModItem(name,m)); } Display();}void cMenuLogSys::Store(void){ char *lf=strdup(logcfg.logFilename); ScSetup.Store(false); if(!lf || strcmp(lf,logcfg.logFilename)) cLogging::ReopenLogfile(); free(lf);}eOSState cMenuLogSys::ProcessKey(eKeys Key){ eOSState state=cOsdMenu::ProcessKey(Key); switch(state) { case osUser9: if(Interface->Confirm(tr("Really disable ALL modules?"))) { for(int m=1; m<LMOD_MAX; m++) cLogging::SetModuleOption(LCLASS(m,LMOD_ENABLE),false); Store(); state=osBack; } break; case osUser8: if(Interface->Confirm(tr("Really reset ALL modules to default?"))) { for(int m=1; m<LMOD_MAX; m++) cLogging::SetModuleDefault(LCLASS(m,0)); Store(); state=osBack; } break; case osUnknown: if(Key==kOk) { cLogModItem *item=dynamic_cast<cLogModItem *>(Get(Current())); if(item) state=AddSubMenu(new cMenuLogMod(item->Module())); else { Store(); state=osBack; } } break; default: break; } return state;}// --- cMenuSysOpts -------------------------------------------------------------class cMenuSysOpts : public cOsdMenu {public: cMenuSysOpts(void); virtual eOSState ProcessKey(eKeys Key); };cMenuSysOpts::cMenuSysOpts(void):cOsdMenu(tr("Cryptsystem options"),33){ for(cOpts *opts=0; (opts=cSystems::GetSystemOpts(opts==0));) { opts->Backup(); opts->Create(this); } Display();}eOSState cMenuSysOpts::ProcessKey(eKeys Key){ eOSState state=cOsdMenu::ProcessKey(Key); switch(state) { case osContinue: if(NORMALKEY(Key)==kUp || NORMALKEY(Key)==kDown) { cOsdItem *item=Get(Current()); if(item) item->ProcessKey(kNone); } break; case osUnknown: if(Key==kOk) { ScSetup.Store(false); state=osBack; } break; default: break; } return state;}// --- cMenuSetupSc ------------------------------------------------------------class cMenuSetupSc : public cMenuSetupPage {private: char *cfgdir;protected: virtual void Store(void);public: cMenuSetupSc(const char *CfgDir); virtual ~cMenuSetupSc(); virtual eOSState ProcessKey(eKeys Key); };static eOSState portStates[] = { osUser1,osUser2,osUser3,osUser4 };#if MAX_PORTS!=4#error Update portStates[]#endifcMenuSetupSc::cMenuSetupSc(const char *CfgDir){ cfgdir=strdup(CfgDir); SetSection(tr("SoftCAM")); ScOpts->Backup(); LogOpts->Backup(); for(cOpts *opts=0; (opts=cSystems::GetSystemOpts(opts==0));) opts->Backup(); ScOpts->Create(this); Add(new cOsdItem(tr("Cryptsystem options..."),osUser5)); Add(new cOsdItem(tr("Message logging..."),osUser6)); if(Feature.SmartCard()) { char id[IDSTR_LEN]; for(int i=0; smartcards.ListCard(i,id,sizeof(id)); i++) { char buff[32]; snprintf(buff,sizeof(buff),"%s %d",tr("Smartcard interface"),i); if(id[0]) Add(new cScInfoItem(buff,id,portStates[i])); else Add(new cScInfoItem(buff,tr("(empty)"))); } } Add(new cOsdItem(tr("Status information..."),osUser8)); Add(new cOsdItem(tr("Flush ECM cache"),osUser7)); Add(new cOsdItem(tr("Reload files"),osUser9));}cMenuSetupSc::~cMenuSetupSc(){ free(cfgdir);}void cMenuSetupSc::Store(void){ ScSetup.Store(false);}eOSState cMenuSetupSc::ProcessKey(eKeys Key){ eOSState state = cOsdMenu::ProcessKey(Key); switch(state) { case osUser1...osUser4: if(Feature.SmartCard()) { for(unsigned int i=0; i<sizeof(portStates)/sizeof(eOSState); i++) if(portStates[i]==state) return(AddSubMenu(new cMenuInfoCard(i))); } state=osContinue; break; case osUser7: state=osContinue; if(Interface->Confirm(tr("Really flush ECM cache?"))) { ecmcache.Flush(); cLoaders::SaveCache(); state=osEnd; } break; case osUser8: return AddSubMenu(new cMenuInfoSc); case osUser6: return AddSubMenu(new cMenuLogSys); case osUser5: return AddSubMenu(new cMenuSysOpts); case osUser9: state=osContinue; if(!cSoftCAM::Active()) { if(Interface->Confirm(tr("Really reload files?"))) { Store(); cSoftCAM::Load(cfgdir); state=osEnd; } } else Skins.Message(mtError,tr("Active! Can't reload files now")); break; case osContinue: if(NORMALKEY(Key)==kUp || NORMALKEY(Key)==kDown) { cOsdItem *item=Get(Current()); if(item) item->ProcessKey(kNone); } break; case osUnknown: if(Key==kOk) { Store(); state=osBack; } break; default: break; } return state;}// --- cScSetup ---------------------------------------------------------------cScSetup ScSetup;cScSetup::cScSetup(void){ AutoUpdate = 1; memset(ScCaps,0,sizeof(ScCaps)); ScCaps[0] = 1; ScCaps[1] = 2; ConcurrentFF = 0; memset(CaIgnore,0,sizeof(CaIgnore)); LocalPriority = 0; ForceTransfer = 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -