int GetIniString( char *pszSection, char *pszEntry, char *pszDefault, char *pszReturnBuffer, int nBufferLen, char *pszFileName) { FILE *pfile; int nReturn = 0; /* open the file */ pfile = fopen( pszFileName, "rt" ); if ( pfile ) { /* find the right section */ if (FindIniSection( pfile, pszSection ) ) { /* find the right entry and read the value */ if ( GetIniEntry( pfile, pszEntry, pszReturnBuffer, nBufferLen ) ) { /* success */ nReturn = strlen( pszReturnBuffer ); } } fclose(pfile); } /* if we did not find the file, section or entry... */ if ( nReturn == 0 ) { /* copy the default string into the buffer */ strncpy( pszReturnBuffer, pszDefault, nBufferLen ); nReturn = strlen( pszReturnBuffer ); } return( nReturn ); }
char *IniStrValue(LIST *o, char *key) { INI_ENTRY *e; // Validate arguments if (o == NULL || key == NULL) { return 0; } e = GetIniEntry(o, key); if (e == NULL) { return ""; } return e->Value; }
// Get a value from the INI UINT IniIntValue(LIST *o, char *key) { INI_ENTRY *e; // Validate arguments if (o == NULL || key == NULL) { return 0; } e = GetIniEntry(o, key); if (e == NULL) { return 0; } return ToInt(e->Value); }
wchar_t *IniUniStrValue(LIST *o, char *key) { INI_ENTRY *e; // 引数チェック if (o == NULL || key == NULL) { return 0; } e = GetIniEntry(o, key); if (e == NULL) { return L""; } return e->UnicodeValue; }
UINT64 IniInt64Value(LIST *o, char *key) { INI_ENTRY *e; // 引数チェック if (o == NULL || key == NULL) { return 0; } e = GetIniEntry(o, key); if (e == NULL) { return 0; } return ToInt64(e->Value); }
/* 利用可能なコマンドラインオプション /ch 物理チャンネル (e.g. /ch 13) /chi チャンネルインデックス /chspace チューニング空間 (e.g. /chspace 1) /d ドライバの指定 (e.g. /d BonDriver.dll) /f /fullscreen フルスクリーン /ini INIファイル名 /init 初期設定ダイアログを表示する /inikey INIファイルの値を設定 /log 終了時にログを保存する /max 最大化状態で起動 /min 最小化状態で起動 /tray 起動時にタスクトレイに格納 /posx ウィンドウの左位置の指定 /posy ウィンドウの上位置の指定 /width ウィンドウの幅の指定 /height ウィンドウの高さの指定 /mute 消音 /nd TSプロセッサーを無効にする /nid ネットワークID /nodriver BonDriverを読み込まない /nodshow DirectShowの初期化をしない /noplugin プラグインを読み込まない /noview プレビュー無効 /mpeg2 MPEG-2を有効 /h264 H.264を有効 /h265 H.265を有効 /1seg ワンセグモード /nr ネットワークリモコンを使用する /p /port UDP のポート番号 (e.g. /p 1234) /plugin- 指定されたプラグインを読み込まない /plugindir プラグインのフォルダ /rch リモコンチャンネル /rec 録画 /reccurservice 現在のサービスのみ録画 /recstarttime 録画開始日時 /recdelay 録画までの時間 /recduration 録画時間 /recexit 録画終了時にプログラムを終了 /recfile 録画ファイル名 /reconly 録画専用モード /recstop 録画停止 /s 複数起動しない /sid サービスID /silent エラー時にダイアログを表示しない /standby 待機状態で起動 /tsid トランスポートストリームID /volume 音量 /noepg EPG情報の取得を行わない /epg EPG番組表を表示する /epgonly EPG番組表のみ表示する /epgtuner EPG番組表のデフォルトチューナー /epgspace EPG番組表のデフォルトチューニング空間 /home ホーム画面表示 /chdisplay チャンネル選択画面表示 /style スタイルファイル名 /command コマンド実行 /jumplist ジャンプリストからの起動 */ void CCommandLineOptions::Parse(LPCWSTR pszCmdLine) { CArgsParser Args(pszCmdLine); if (Args.IsEnd()) return; do { if (Args.IsSwitch()) { if (!Args.GetOption(TEXT("1seg"),&m_f1Seg) && !Args.GetOption(TEXT("ch"),&m_Channel) && !Args.GetOption(TEXT("chdisplay"),&m_fChannelDisplay) && !Args.GetOption(TEXT("chi"),&m_ChannelIndex) && !Args.GetOption(TEXT("chspace"),&m_TuningSpace) && !Args.GetOption(TEXT("command"),&m_Command) && !Args.GetOption(TEXT("d"),&m_DriverName) && !Args.GetOption(TEXT("epg"),&m_fShowProgramGuide) && !Args.GetOption(TEXT("epgonly"),&m_fProgramGuideOnly) && !Args.GetOption(TEXT("epgspace"),&m_ProgramGuideSpace) && !Args.GetOption(TEXT("epgtuner"),&m_ProgramGuideTuner) && !Args.GetOption(TEXT("f"),&m_fFullscreen) && !Args.GetOption(TEXT("fullscreen"),&m_fFullscreen) && !Args.GetOption(TEXT("h264"),&m_fH264) && !Args.GetOption(TEXT("h265"),&m_fH265) && !Args.GetOption(TEXT("height"),&m_WindowHeight) && !Args.GetOption(TEXT("home"),&m_fHomeDisplay) && !Args.GetOption(TEXT("ini"),&m_IniFileName) && !Args.GetOption(TEXT("init"),&m_fInitialSettings) && !Args.GetOption(TEXT("jumplist"),&m_fJumpList) && !Args.GetOption(TEXT("log"),&m_fSaveLog) && !Args.GetOption(TEXT("max"),&m_fMaximize) && !Args.GetOption(TEXT("min"),&m_fMinimize) && !Args.GetOption(TEXT("mpeg2"),&m_fMpeg2) && !Args.GetOption(TEXT("mute"),&m_fMute) && !Args.GetOption(TEXT("nd"),&m_fNoTSProcessor) && !Args.GetOption(TEXT("nodriver"),&m_fNoDriver) && !Args.GetOption(TEXT("nodshow"),&m_fNoDirectShow) && !Args.GetOption(TEXT("noepg"),&m_fNoEpg) && !Args.GetOption(TEXT("noplugin"),&m_fNoPlugin) && !Args.GetOption(TEXT("noview"),&m_fNoView) && !Args.GetOption(TEXT("nr"),&m_fUseNetworkRemocon) && !Args.GetOption(TEXT("nid"),&m_NetworkID) && !Args.GetOption(TEXT("p"),&m_UDPPort) && !Args.GetOption(TEXT("port"),&m_UDPPort) && !Args.GetOption(TEXT("posx"),&m_WindowLeft) && !Args.GetOption(TEXT("posy"),&m_WindowTop) && !Args.GetOption(TEXT("plugindir"),&m_PluginsDirectory) && !Args.GetOption(TEXT("pluginsdir"),&m_PluginsDirectory) && !Args.GetOption(TEXT("rec"),&m_fRecord) && !Args.GetOption(TEXT("reccurservice"),&m_fRecordCurServiceOnly) && !Args.GetOption(TEXT("recstarttime"),&m_RecordStartTime) && !Args.GetDurationOption(TEXT("recdelay"),&m_RecordDelay) && !Args.GetDurationOption(TEXT("recduration"),&m_RecordDuration) && !Args.GetOption(TEXT("recexit"),&m_fExitOnRecordEnd) && !Args.GetOption(TEXT("recfile"),&m_RecordFileName) && !Args.GetOption(TEXT("reconly"),&m_fRecordOnly) && !Args.GetOption(TEXT("recstop"),&m_fRecordStop) && !Args.GetOption(TEXT("rch"),&m_ControllerChannel) && !Args.GetOption(TEXT("s"),&m_fSingleTask) && !Args.GetOption(TEXT("sid"),&m_ServiceID) && !Args.GetOption(TEXT("silent"),&m_fSilent) && !Args.GetOption(TEXT("standby"),&m_fStandby) && !Args.GetOption(TEXT("style"),&m_StyleFileName) && !Args.GetOption(TEXT("tray"),&m_fTray) && !Args.GetOption(TEXT("tsid"),&m_TransportStreamID) && !Args.GetOption(TEXT("volume"),&m_Volume) && !Args.GetOption(TEXT("width"),&m_WindowWidth)) { if (Args.IsOption(TEXT("inikey"))) { if (Args.Next()) { IniEntry Entry; if (GetIniEntry(Args.GetText(),&Entry)) m_IniValueList.push_back(Entry); } } else if (Args.IsOption(TEXT("plugin-"))) { if (Args.Next()) { TCHAR szPlugin[MAX_PATH]; if (Args.GetText(szPlugin,MAX_PATH)) m_NoLoadPlugins.push_back(TVTest::String(szPlugin)); } } else if (Args.IsOption(TEXT("did"))) { if (Args.Next()) { const WCHAR DID=Args.GetText()[0]; if (DID>=L'A' && DID<=L'Z') m_TvRockDID=DID-L'A'; else if (DID>=L'a' && DID<=L'z') m_TvRockDID=DID-L'a'; } } #ifdef _DEBUG else { TRACE(TEXT("Unknown command line option %s\n"),Args.GetText()); // プラグインで解釈するオプションもあるので… //GetAppClass().AddLong(TEXT("不明なコマンドラインオプション %s を無視します。"),Args.GetText()); } #endif } } else { // なぜかudp://@:1234のようにポートを指定できると思っている人が多いので、対応しておく if (::wcsncmp(Args.GetText(),L"udp://@:",8)==0) m_UDPPort=::_wtoi(Args.GetText()+8); } } while (Args.Next()); if (m_fRecordOnly) { m_fNoDirectShow=true; } /* #ifdef _DEBUG // コマンドラインの解析のテスト { CArgsParser Args(L"/d 120 /d -45 /d 1h30m5s /t 2011/12/25-1:30:25 /t 1:30 /t 12/25 /t 12/25-1:30 /t 12/25-26:25"); do { if (Args.IsSwitch()) { int Duration; FILETIME Time; if (Args.GetDurationOption(L"d",&Duration)) { TRACE(L"Commandline parse test : \"%s\" %d\n", Args.GetText(),Duration); } else if (Args.GetOption(L"t",&Time)) { SYSTEMTIME st; ::FileTimeToSystemTime(&Time,&st); TRACE(L"Commandline parse test : \"%s\" %d/%d/%d %d:%d:%d\n", Args.GetText(), st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); } } } while (Args.Next()); } #endif */ }