void plConfigValueBase::ConfigWrite(plConfigInfo * opts) { if (fWriteEvaluate()) { opts->AddValue(GetConfigGroup(),GetConfigName(),fWriteModify(GetValue()),kAlwaysAdd); } }
static int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) { MAIN_CSM *csm=(MAIN_CSM*)data; if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id)) { csm->csm.state=-3; } if(msg->msg == MSG_RECONFIGURE_REQ) { char *successed_conf_name=GetConfigName (); if (strncasecmp(successed_conf_name, (char *)msg->data0, strlen(successed_conf_name) ) == 0 ) { InitConfig(ELF_NAME); IsFontCfgUpdate=1; char upd_msg[128]; sprintf (upd_msg, "%s::%s", ELF_NAME, "Config updated!"); ShowMSG (1, (int)upd_msg); } } return(1); }
bool VideoBackend::Initialize(void *window_handle) { InitializeShared(); InitBackendInfo(); frameCount = 0; g_Config.Load(File::GetUserPath(D_CONFIG_IDX) + GetConfigName() + ".ini"); g_Config.GameIniLoad(); g_Config.UpdateProjectionHack(); g_Config.VerifyValidity(); UpdateActiveConfig(); InitInterface(); GLInterface->SetMode(GLInterfaceMode::MODE_DETECT); if (!GLInterface->Create(window_handle)) return false; // Do our OSD callbacks OSD::DoCallbacks(OSD::OSD_INIT); s_BackendInitialized = true; return true; }
void FbDatabase::AttachConfig() { wxString sql = wxT("ATTACH ? AS config"); FbSQLite3Statement stmt = PrepareStatement(sql); stmt.Bind(1, GetConfigName()); stmt.ExecuteUpdate(); }
void FbConfigDatabase::Open() { wxString filename = GetConfigName(); bool bExists = wxFileExists(filename); FbDatabase::Open(filename, wxEmptyString, WXSQLITE_OPEN_READWRITE | WXSQLITE_OPEN_CREATE | WXSQLITE_OPEN_FULLMUTEX); ExecuteUpdate(fbT("PRAGMA temp_store=2")); if (!bExists) CreateDatabase(); UpgradeDatabase(DB_CONFIG_VERSION); }
void VideoBackend::ShowConfig(void *_hParent) { #if defined(HAVE_WX) && HAVE_WX if (!s_BackendInitialized) InitBackendInfo(); VideoConfigDiag diag((wxWindow*)_hParent, _trans("Direct3D11"), GetConfigName()); diag.ShowModal(); #endif }
void plConfigValueBase::ConfigRead(plConfigInfo * opts) { if (fReadEvaluate()) { std::string value; bool found; value = opts->GetValue(GetConfigGroup(),GetConfigName(),"",&found); if (found) SetValue(fReadModify(value).c_str()); } }
MOboolean moResource::Init() { if (!(GetConfigName()==moText(""))) { if (moMoldeoObject::Init()) { if (moMoldeoObject::CreateConnectors()) { return true; } else { MODebug2->Error("Errors creating connectors or loading param values for " + GetConfigName() + " configuration file"); return false; } } } MODebug2->Message("No " + GetName() + " configuration file defined. Continue."); return true; }
bool VideoBackend::Initialize(void *window_handle) { InitializeShared(); InitBackendInfo(); frameCount = 0; const SConfig& core_params = SConfig::GetInstance(); g_Config.Load((File::GetUserPath(D_CONFIG_IDX) + GetConfigName() + ".ini").c_str()); g_Config.GameIniLoad(); g_Config.UpdateProjectionHack(); g_Config.VerifyValidity(); UpdateActiveConfig(); m_window_handle = window_handle; s_BackendInitialized = true; return true; }
FbLocalDatabase::FbLocalDatabase() { FbDatabase::Open(GetConfigName()); ExecuteUpdate(fbT("PRAGMA temp_store=2")); SetCollation(wxT("CYR"), &sm_collation); }
void moEffect::LoadCodes(moIODeviceManager *consolaesarray) { moText texto; MOint nroparam; MOuint i,j,k; MOint coddisp,accioncod; moText strcod; if(m_EffectState.fulldebug==MO_ACTIVATED) MODebug2->Message(moText("Cargando codigos de dispositivo especificos...")); nroparam = m_Config.GetParamIndex("codes"); if(nroparam==MO_PARAM_NOT_FOUND) return;//se va, no hay codigos m_Config.SetCurrentParamIndex(nroparam); m_Config.FirstValue(); ncodes = (MOint)m_Config.GetValuesCount(nroparam); devicecode = new moDeviceCodeList [ncodes]; #ifdef MO_DEBUG texto = moText("\nCargando codigos efecto "); texto += GetName(); texto += moText(" ncodes: "); texto += IntToStr(ncodes); //printf(texto); MODebug2->Log( texto ); #endif if(ncodes>0) for( i = 0; i < (MOuint)ncodes; i++) { m_Config.SetCurrentValueIndex(nroparam,i); for( k = 1; k < m_Config.GetParam().GetValue().GetSubValueCount(); k++) { accioncod = i; coddisp = -1; strcod = m_Config.GetParam().GetValue().GetSubValue(k).Text(); for( j=0 ; j < consolaesarray->IODevices().Count(); j++) { moIODevice* pIODevice; pIODevice = consolaesarray->IODevices().GetRef(j); if (pIODevice) { if (strcod.Trim().Length()>0) { coddisp = pIODevice->GetCode(strcod); } else { MODebug2->Error("string code is empty: [" + moText(strcod) +"]."); } } else { MODebug2->Error("Device id:" + IntToStr(j) +" is null."); } if(coddisp != -1) break; //lo encontramos "j" es el nro de disp y "coddisp" el id } if((accioncod>=0) &&(accioncod<ncodes)) { if(coddisp==-1) { texto = moText("\n"); texto += GetConfigName(); texto += moText(".cfg: no se encontrĂ³ en ningun dispositivo el codigo de dispositivo correspondiente a: "); texto += strcod; MODebug2->Error(texto); } else { devicecode[accioncod].Add(j,coddisp); //agregar un cod disp a la lista #ifdef MO_DEBUG texto = moText("\naccioncod: "); texto += IntToStr(accioncod); texto += moText(" strcod: "); texto += strcod; texto += moText(" dispositivo: "); texto += IntToStr(j); texto += moText(" codisp: "); texto += IntToStr(coddisp); MODebug2->Log(texto); #endif } } else { MODebug2->Error("error: codigo de la accion fuera de rango"); } } } if(m_EffectState.fulldebug==MO_ACTIVATED) MODebug2->Push(moText("Codes loaded.")); }
void DoConfig (){ WSHDR *ws=AllocWS (256); str_2ws(ws,GetConfigName(), 256); ExecuteFile(ws, NULL, NULL); FreeWS(ws); }
void CommandData::ParseArg(char *Arg,wchar *ArgW) { if (IsSwitch(*Arg) && !NoMoreSwitches) if (Arg[1]=='-') NoMoreSwitches=true; else ProcessSwitch(&Arg[1],(ArgW!=NULL && *ArgW!=0 ? &ArgW[1]:NULL)); else if (*Command==0) { strncpyz(Command,Arg,ASIZE(Command)); if (ArgW!=NULL) strncpyw(CommandW,ArgW,sizeof(CommandW)/sizeof(CommandW[0])); if (etoupper(*Command)=='S') { const char *SFXName=Command[1] ? Command+1:DefSFXName; if (PointToName(SFXName)!=SFXName || FileExist(SFXName)) strcpy(SFXModule,SFXName); else GetConfigName(SFXName,SFXModule,true); } #ifndef GUI *Command=etoupper(*Command); if (*Command!='I' && *Command!='S') strupper(Command); #endif } else if (*ArcName==0) { strncpyz(ArcName,Arg,ASIZE(ArcName)); if (ArgW!=NULL) strncpyzw(ArcNameW,ArgW,ASIZE(ArcNameW)); } else { size_t Length=strlen(Arg); char EndChar=Length==0 ? 0:Arg[Length-1]; char CmdChar=etoupper(*Command); bool Add=strchr("AFUM",CmdChar)!=NULL; bool Extract=CmdChar=='X' || CmdChar=='E'; if ((IsDriveDiv(EndChar) || IsPathDiv(EndChar)) && !Add) { strncpyz(ExtrPath,Arg,ASIZE(ExtrPath)); if (ArgW!=NULL) strncpyzw(ExtrPathW,ArgW,ASIZE(ExtrPathW)); } else if ((Add || CmdChar=='T') && *Arg!='@') FileArgs->AddString(Arg); else { struct FindData FileData; bool Found=FindFile::FastFind(Arg,NULL,&FileData); if (!Found && *Arg=='@' && !IsWildcard(Arg)) { FileLists=true; RAR_CHARSET Charset=FilelistCharset; #if defined(_WIN_32) && !defined(GUI) // for compatibility reasons we use OEM encoding // in Win32 console version by default if (Charset==RCH_DEFAULT) Charset=RCH_OEM; #endif ReadTextFile(Arg+1,FileArgs,false,true,Charset,true,true,true); } else if (Found && FileData.IsDir && Extract && *ExtrPath==0) { strcpy(ExtrPath,Arg); AddEndSlash(ExtrPath); } else FileArgs->AddString(Arg); } } }
bool ReadTextFile(char *Name,StringList *List,bool Config,bool AbortOnError, bool ConvertToAnsi,bool Unquote,bool SkipComments) { char FileName[NM]; if (Config) GetConfigName(Name,FileName,true); else strcpy(FileName,Name); File SrcFile; if (*FileName) { bool OpenCode=AbortOnError ? SrcFile.WOpen(FileName):SrcFile.Open(FileName); if (!OpenCode) { if (AbortOnError) ErrHandler.Exit(OPEN_ERROR); return(false); } } else SrcFile.SetHandleType(FILE_HANDLESTD); unsigned int DataSize=0,ReadSize; const int ReadBlock=1024; Array<char> Data(ReadBlock+5); while ((ReadSize=SrcFile.Read(&Data[DataSize],ReadBlock))!=0) { DataSize+=ReadSize; Data.Add(ReadSize); } memset(&Data[DataSize],0,5); if (IsUnicode((byte *)&Data[0],DataSize)) { wchar *CurStr=(wchar *)&Data[2]; Array<char> AnsiName; while (*CurStr!=0) { wchar *NextStr=CurStr,*CmtPtr=NULL; while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) { if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') { *NextStr=0; CmtPtr=NextStr; } NextStr++; } *NextStr=0; for (wchar *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) { if (*SpacePtr!=' ' && *SpacePtr!='\t') break; *SpacePtr=0; } if (*CurStr) { int Length=strlenw(CurStr); int AddSize=Length-AnsiName.Size()+1; if (AddSize>0) AnsiName.Add(AddSize); if (Unquote && *CurStr=='\"' && CurStr[Length-1]=='\"') { CurStr[Length-1]=0; CurStr++; } WideToChar(CurStr,&AnsiName[0]); List->AddString(&AnsiName[0],CurStr); } CurStr=NextStr+1; while (*CurStr=='\r' || *CurStr=='\n') CurStr++; } } else { char *CurStr=&Data[0]; while (*CurStr!=0) { char *NextStr=CurStr,*CmtPtr=NULL; while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) { if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') { *NextStr=0; CmtPtr=NextStr; } NextStr++; } *NextStr=0; for (char *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) { if (*SpacePtr!=' ' && *SpacePtr!='\t') break; *SpacePtr=0; } if (*CurStr) { if (Unquote && *CurStr=='\"') { int Length=strlen(CurStr); if (CurStr[Length-1]=='\"') { CurStr[Length-1]=0; CurStr++; } } #if defined(_WIN_32) && !defined(_XBOX) && !defined(_LINUX) if (ConvertToAnsi) OemToChar(CurStr,CurStr); #endif List->AddString(CurStr); } CurStr=NextStr+1; while (*CurStr=='\r' || *CurStr=='\n') CurStr++; } } return(true); }
MOboolean moNetOSCIn::Init() { int dev; MOuint i, n, n_dev, n_hosts; moText conf, dev_name; //========================== // CORRESPONDE A UN PREINIT //========================== // Loading config file. conf = m_pResourceManager->GetDataMan()->GetDataPath() + moSlash; conf += GetConfigName(); conf += moText(".cfg"); if (m_Config.LoadConfig(conf) != MO_CONFIG_OK ) { moText text = "Couldn't load netoscin config"; MODebug->Push(text); return false; } //========================== // INIT //========================== moDefineParamIndex( NETOSCIN_INLET, moText("inlet") ); moDefineParamIndex( NETOSCIN_OUTLET, moText("outlet") ); moDefineParamIndex( NETOSCIN_HOSTS , moText("hosts") ); moDefineParamIndex( NETOSCIN_PORT , moText("port") ); moDefineParamIndex( NETOSCIN_RECEIVEEVENTS, moText("receive_events") ); bool events_present; bool trackersystem_present; events_present = false; trackersystem_present = false; for( int i=0; i<m_Config.GetParam( moR(NETOSCIN_OUTLET) ).GetValuesCount(); i++) { moValue val( m_Config.GetParam( moR(NETOSCIN_OUTLET) ).GetValue(i)); if ( val.GetSubValue().Text()==moText("EVENTS")) { events_present = true; } if ( val.GetSubValue().Text()==moText("TRACKERSYSTEM")) { trackersystem_present = true; } } if (!events_present) { m_Config.GetParam( moR(NETOSCIN_OUTLET) ).AddValue( moValue( "EVENTS", "TXT", "DATA", "TXT" ).Ref() ); } if (!trackersystem_present) { m_Config.GetParam( moR(NETOSCIN_OUTLET) ).AddValue( moValue( "EVENTS", "TXT", "DATA", "TXT" ).Ref() ); } moMoldeoObject::Init(); for(int a=0; a <GetOutlets()->Count(); a++) { if ( m_Outlets[a]->GetConnectorLabelName() == moText("EVENTS") ) { m_pEvents = m_Outlets[a]; } } // Reading hosts names and ports. n = m_Config.GetParamIndex("hosts"); n_hosts = m_Config.GetValuesCount(n); host_name.Init(n_hosts, moText("")); host_port.Init(n_hosts, 0); for(i = 0; i < n_hosts; i++) { host_name.Set(i, m_Config.GetParam(n).GetValue(i).GetSubValue(0).Text()); host_port.Set(i, m_Config.GetParam(n).GetValue(i).GetSubValue(1).Int()); } for(i = 0; i < n_hosts; i++) { moOscPacketListener* pListener = NULL; pListener = new moOscPacketListener(); if (pListener) { /* if ( host_name[i] == moText("all") ) { if (host_port[i]>0) pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, host_port[i] ), pListener ) ); else pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, IpEndpointName::ANY_PORT ), pListener ) ); } else if ( host_name[i] != moText("") ) { moTextArray ipNumbers; unsigned long ipaddress = 0; unsigned long i1=0, i2=0, i3=0, i4=0; ipNumbers = host_name[i].Explode("."); if (ipNumbers.Count()==4) { i1 = atoi(ipNumbers[0]); i2 = atoi(ipNumbers[1]); i3 = atoi(ipNumbers[2]); i4 = atoi(ipNumbers[3]); ipaddress = (i1 << 24) & (i2<<16) & (i3<<8) & i4; } else { ipaddress = IpEndpointName::ANY_ADDRESS; } if (host_port[i]>0) pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( ipaddress, host_port[i] ), pListener ) ); else pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( ipaddress, IpEndpointName::ANY_PORT ), pListener ) ); } else { pListener->Set( new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, IpEndpointName::ANY_PORT ), pListener ) ); } */ UdpListeningReceiveSocket *socket = NULL; try { socket = new UdpListeningReceiveSocket( IpEndpointName( IpEndpointName::ANY_ADDRESS, host_port[i] ), pListener ); } catch (std::exception &e) { MODebug2->Error(moText("could not bind to UDP port ")); socket = NULL; } if (socket!=NULL) { if (!socket->IsBound()) { delete socket; socket = NULL; MODebug2->Error( moText("NETOSCIN UDP socket not connected:") + + (moText)host_name[i] + moText(" PORT:") + IntToStr(host_port[i]) ); } else { MODebug2->Message( moText("NetOSCIn listening to OSC messages on UDP port ")); pListener->Set(socket); } } if (socket) { m_OscPacketListeners.Add( pListener ); if (pListener->CreateThread()) { MODebug2->Message( moText(" NETOSCIN OK: HOST NAME:") + (moText)host_name[i] + moText(" PORT:") + IntToStr(host_port[i]) ); } else { MODebug2->Error( moText("NETOSCIN:") + + (moText)host_name[i] + moText(" PORT:") + IntToStr(host_port[i]) ); } } } } return true; }
MOboolean moMidi::Init() { moText conf; MOint i; // Loading config file. //levantamos el config del keyboard conf = m_pResourceManager->GetDataMan()->GetDataPath()+moText("/"); conf += GetConfigName(); conf += moText(".cfg"); if (m_Config.LoadConfig(conf) != MO_CONFIG_OK ) { moText text = "Couldn't load midi config"; MODebug2->Error(text); return false; } moMoldeoObject::Init(); moDefineParamIndex( MIDI_DEVICE, moText("mididevice") ); mididevices = m_Config.GetParamIndex("mididevice"); MOint nvalues = m_Config.GetValuesCount( mididevices ); m_Config.SetCurrentParamIndex( mididevices ); /* MO_MIDI_SYTEM_LABELNAME 0 MO_MIDI_SYSTEM_ON 1 */ for( int i = 0; i < nvalues; i++) { m_Config.SetCurrentValueIndex( mididevices, i ); moMidiDevicePtr pDevice = NULL; pDevice = new moMidiDevice(); if (pDevice!=NULL) { pDevice->MODebug = MODebug; moText MidiDeviceCode = m_Config.GetParam().GetValue().GetSubValue(MO_MIDI_SYTEM_LABELNAME).Text(); if ( pDevice->Init( MidiDeviceCode ) ) { pDevice->SetActive( m_Config.GetParam().GetValue().GetSubValue(MO_MIDI_SYSTEM_ON).Int() ); } else { MODebug2->Error( moText("Midi Device not found: ") + (moText)MidiDeviceCode ); } } m_MidiDevices.Add( pDevice ); } //levantamos los codes definidos MOint coparam = m_Config.GetParamIndex("code"); m_Config.SetCurrentParamIndex(coparam); MOint ncodes = m_Config.GetValuesCount(coparam); m_Config.FirstValue(); printf("\nMIDI: ncodes:%i\n",ncodes); for( i = 0; i < ncodes; i++) { moMidiDataCode mididatacode; mididatacode.strcode = m_Config.GetParam().GetValue().GetSubValue(0).Text(); mididatacode.devcode = i; mididatacode.mididata.m_Type = (moEncoderType)m_Config.GetParam().GetValue().GetSubValue(1).Int(); mididatacode.mididata.m_Channel = m_Config.GetParam().GetValue().GetSubValue(2).Int(); mididatacode.mididata.m_CC = m_Config.GetParam().GetValue().GetSubValue(3).Int(); mididatacode.mididata.m_Val = 0; mididatacode.state = MO_FALSE; /* Codes[i].value = MO_FALSE; */ m_Codes.Add( mididatacode ); m_Config.NextValue(); } return true; }
bool ReadTextFile( const char *Name, const wchar *NameW, StringList *List, bool Config, bool AbortOnError, RAR_CHARSET SrcCharset, bool Unquote, bool SkipComments, bool ExpandEnvStr) { char FileName[NM]; *FileName=0; if (Name!=NULL) { if (Config) GetConfigName(Name,FileName,true); else strcpy(FileName,Name); } wchar FileNameW[NM]; *FileNameW=0; #ifdef _WIN_ALL if (NameW!=NULL) { if (Config) GetConfigName(NameW,FileNameW,true); else wcscpy(FileNameW,NameW); } #endif File SrcFile; if ((FileName!=NULL && *FileName!=0) || (FileNameW!=NULL && *FileNameW!=0)) { bool OpenCode=AbortOnError ? SrcFile.WOpen(FileName,FileNameW):SrcFile.Open(FileName,FileNameW,0); if (!OpenCode) { if (AbortOnError) ErrHandler.Exit(RARX_OPEN); return(false); } } else SrcFile.SetHandleType(FILE_HANDLESTD); unsigned int DataSize=0,ReadSize; const int ReadBlock=1024; Array<char> Data(ReadBlock+5); while ((ReadSize=SrcFile.Read(&Data[DataSize],ReadBlock))!=0) { DataSize+=ReadSize; Data.Add(ReadSize); } memset(&Data[DataSize],0,5); if ((SrcCharset==RCH_UNICODE) || (SrcCharset==RCH_DEFAULT && IsUnicode((byte *)&Data[0],DataSize))) { // Unicode in native system format, can be more than 2 bytes per character. Array<wchar> DataW(Data.Size()/2+1); for (size_t I=2;I<Data.Size()-1;I+=2) { // Need to convert Data to (byte) first to prevent the sign extension // to higher bytes. DataW[(I-2)/2]=(wchar)((byte)Data[I])+(wchar)((byte)Data[I+1])*256; } wchar *CurStr=&DataW[0]; Array<char> AnsiName; while (*CurStr!=0) { wchar *NextStr=CurStr,*CmtPtr=NULL; while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) { if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') { *NextStr=0; CmtPtr=NextStr; } NextStr++; } *NextStr=0; for (wchar *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) { if (*SpacePtr!=' ' && *SpacePtr!='\t') break; *SpacePtr=0; } if (*CurStr) { // Length and AddSize must be defined as signed, because AddSize // can be negative. int Length=(int)wcslen(CurStr); int AddSize=4*(Length-(int)AnsiName.Size()+1); if (AddSize>0) AnsiName.Add(AddSize); if (Unquote && *CurStr=='\"' && CurStr[Length-1]=='\"') { CurStr[Length-1]=0; CurStr++; } WideToChar(CurStr,&AnsiName[0],AnsiName.Size()); bool Expanded=false; #if defined(_WIN_ALL) && !defined(_WIN_CE) if (ExpandEnvStr && *CurStr=='%') { // Expanding environment variables in Windows version. char ExpName[NM]; wchar ExpNameW[NM]; *ExpNameW=0; int ret,retw=1; ret=ExpandEnvironmentStringsA(&AnsiName[0],ExpName,ASIZE(ExpName)); if (ret!=0 && WinNT()) retw=ExpandEnvironmentStringsW(CurStr,ExpNameW,ASIZE(ExpNameW)); Expanded=ret!=0 && ret<ASIZE(ExpName) && retw!=0 && retw<ASIZE(ExpNameW); if (Expanded) List->AddString(ExpName,ExpNameW); } #endif if (!Expanded) List->AddString(&AnsiName[0],CurStr); } CurStr=NextStr+1; while (*CurStr=='\r' || *CurStr=='\n') CurStr++; } } else { char *CurStr=&Data[0]; while (*CurStr!=0) { char *NextStr=CurStr,*CmtPtr=NULL; while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) { if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') { *NextStr=0; CmtPtr=NextStr; } NextStr++; } *NextStr=0; for (char *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) { if (*SpacePtr!=' ' && *SpacePtr!='\t') break; *SpacePtr=0; } if (*CurStr) { if (Unquote && *CurStr=='\"') { size_t Length=strlen(CurStr); if (CurStr[Length-1]=='\"') { CurStr[Length-1]=0; CurStr++; } } #if defined(_WIN_ALL) if (SrcCharset==RCH_OEM) OemToCharA(CurStr,CurStr); #endif bool Expanded=false; #if defined(_WIN_ALL) && !defined(_WIN_CE) if (ExpandEnvStr && *CurStr=='%') { // Expanding environment variables in Windows version. char ExpName[NM]; int ret=ExpandEnvironmentStringsA(CurStr,ExpName,ASIZE(ExpName)); Expanded=ret!=0 && ret<ASIZE(ExpName); if (Expanded) List->AddString(ExpName); } #endif if (!Expanded) List->AddString(CurStr); } CurStr=NextStr+1; while (*CurStr=='\r' || *CurStr=='\n') CurStr++; } } return(true); }
bool ReadTextFile(char *Name,StringList *List,bool Config,bool AbortOnError, RAR_CHARSET SrcCharset,bool Unquote,bool SkipComments) { char FileName[NM]; if (Config) GetConfigName(Name,FileName,true); else strcpy(FileName,Name); File SrcFile; if (*FileName) { bool OpenCode=AbortOnError ? SrcFile.WOpen(FileName):SrcFile.Open(FileName); if (!OpenCode) { if (AbortOnError) ErrHandler.Exit(OPEN_ERROR); return(false); } } else SrcFile.SetHandleType(FILE_HANDLESTD); unsigned int DataSize=0,ReadSize; const int ReadBlock=1024; Array<char> Data(ReadBlock+5); while ((ReadSize=SrcFile.Read(&Data[DataSize],ReadBlock))!=0) { DataSize+=ReadSize; Data.Add(ReadSize); } memset(&Data[DataSize],0,5); if (SrcCharset==RCH_UNICODE || SrcCharset==RCH_DEFAULT && IsUnicode((byte *)&Data[0],DataSize)) { // Unicode in native system format, can be more than 2 bytes per character Array<wchar> DataW(Data.Size()/2+1); for (int I=2;I<Data.Size()-1;I+=2) DataW[(I-2)/2]=(wchar)Data[I]+(wchar)Data[I+1]*256; wchar *CurStr=&DataW[0]; Array<char> AnsiName; while (*CurStr!=0) { wchar *NextStr=CurStr,*CmtPtr=NULL; while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) { if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') { *NextStr=0; CmtPtr=NextStr; } NextStr++; } *NextStr=0; for (wchar *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) { if (*SpacePtr!=' ' && *SpacePtr!='\t') break; *SpacePtr=0; } if (*CurStr) { int Length=strlenw(CurStr); int AddSize=4*(Length-AnsiName.Size()+1); if (AddSize>0) AnsiName.Add(AddSize); if (Unquote && *CurStr=='\"' && CurStr[Length-1]=='\"') { CurStr[Length-1]=0; CurStr++; } WideToChar(CurStr,&AnsiName[0],AnsiName.Size()); List->AddString(&AnsiName[0],CurStr); } CurStr=NextStr+1; while (*CurStr=='\r' || *CurStr=='\n') CurStr++; } } else { char *CurStr=&Data[0]; while (*CurStr!=0) { char *NextStr=CurStr,*CmtPtr=NULL; while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) { if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') { *NextStr=0; CmtPtr=NextStr; } NextStr++; } *NextStr=0; for (char *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) { if (*SpacePtr!=' ' && *SpacePtr!='\t') break; *SpacePtr=0; } if (*CurStr) { if (Unquote && *CurStr=='\"') { int Length=strlen(CurStr); if (CurStr[Length-1]=='\"') { CurStr[Length-1]=0; CurStr++; } } #if defined(_WIN_32) if (SrcCharset==RCH_OEM) OemToChar(CurStr,CurStr); #endif List->AddString(CurStr); } CurStr=NextStr+1; while (*CurStr=='\r' || *CurStr=='\n') CurStr++; } } return(true); }
void CommandData::ProcessSwitch(char *Switch) { switch(toupper(Switch[0])) { case 'I': if (strnicomp(&Switch[1],"LOG",3)==0) { strncpy(LogName,Switch[4] ? Switch+4:DefLogName,sizeof(LogName)); break; } if (stricomp(&Switch[1],"SND")==0) { Sound=true; break; } if (stricomp(&Switch[1],"ERR")==0) { MsgStream=MSG_STDERR; break; } if (strnicomp(&Switch[1],"EML",3)==0) { strncpy(EmailTo,Switch[4] ? Switch+4:"@",sizeof(EmailTo)); EmailTo[sizeof(EmailTo)-1]=0; break; } if (stricomp(&Switch[1],"NUL")==0) { MsgStream=MSG_NULL; break; } if (toupper(Switch[1])=='D') { for (int I=2;Switch[I]!=0;I++) switch(toupper(Switch[I])) { case 'Q': MsgStream=MSG_ERRONLY; break; case 'C': DisableCopyright=true; break; case 'D': DisableDone=true; break; case 'P': DisablePercentage=true; break; } break; } if (stricomp(&Switch[1],"OFF")==0) { Shutdown=true; break; } break; case 'T': switch(toupper(Switch[1])) { case 'K': ArcTime=ARCTIME_KEEP; break; case 'L': ArcTime=ARCTIME_LATEST; break; case 'O': FileTimeBefore.SetAgeText(Switch+2); break; case 'N': FileTimeAfter.SetAgeText(Switch+2); break; case 'B': FileTimeBefore.SetIsoText(Switch+2); break; case 'A': FileTimeAfter.SetIsoText(Switch+2); break; case 'S': { EXTTIME_MODE Mode=EXTTIME_HIGH3; bool CommonMode=Switch[2]>='0' && Switch[2]<='4'; if (CommonMode) Mode=(EXTTIME_MODE)(Switch[2]-'0'); if (Switch[2]=='-') Mode=EXTTIME_NONE; if (CommonMode || Switch[2]=='-' || Switch[2]=='+' || Switch[2]==0) xmtime=xctime=xatime=Mode; else { if (Switch[3]>='0' && Switch[3]<='4') Mode=(EXTTIME_MODE)(Switch[3]-'0'); if (Switch[3]=='-') Mode=EXTTIME_NONE; switch(toupper(Switch[2])) { case 'M': xmtime=Mode; break; case 'C': xctime=Mode; break; case 'A': xatime=Mode; break; case 'R': xarctime=Mode; break; } } } break; case '-': Test=false; break; case 0: Test=true; break; default: BadSwitch(Switch); break; } break; case 'A': switch(toupper(Switch[1])) { case 'C': ClearArc=true; break; case 'D': AppendArcNameToPath=true; break; case 'G': if (Switch[2]=='-' && Switch[3]==0) GenerateArcName=0; else { GenerateArcName=true; strncpy(GenerateMask,Switch+2,sizeof(GenerateMask)); } break; case 'N': //reserved for archive name break; case 'O': AddArcOnly=true; break; case 'P': strcpy(ArcPath,Switch+2); break; case 'S': SyncFiles=true; break; } break; case 'D': if (Switch[2]==0) switch(toupper(Switch[1])) { case 'S': DisableSortSolid=true; break; case 'H': OpenShared=true; break; case 'F': DeleteFiles=true; break; } break; case 'O': switch(toupper(Switch[1])) { case '+': Overwrite=OVERWRITE_ALL; break; case '-': Overwrite=OVERWRITE_NONE; break; case 'W': ProcessOwners=true; break; #ifdef SAVE_LINKS case 'L': SaveLinks=true; break; #endif #ifdef _WIN_32 case 'S': SaveStreams=true; break; case 'C': SetCompressedAttr=true; break; #endif default : BadSwitch(Switch); break; } break; case 'R': switch(toupper(Switch[1])) { case 0: Recurse=RECURSE_ALWAYS; break; case '-': Recurse=0; break; case '0': Recurse=RECURSE_WILDCARDS; break; case 'I': { Priority=atoi(Switch+2); char *ChPtr=strchr(Switch+2,':'); if (ChPtr!=NULL) { SleepTime=atoi(ChPtr+1); InitSystemOptions(SleepTime); } SetPriority(Priority); } break; } break; case 'Y': AllYes=true; break; case 'N': case 'X': if (Switch[1]!=0) { StringList *Args=toupper(Switch[0])=='N' ? InclArgs:ExclArgs; if (Switch[1]=='@' && !IsWildcard(Switch)) ReadTextFile(Switch+2,Args,false,true,true,true,true); else Args->AddString(Switch+1); } break; case 'E': switch(toupper(Switch[1])) { case 'P': switch(Switch[2]) { case 0: ExclPath=EXCL_SKIPWHOLEPATH; break; case '1': ExclPath=EXCL_BASEPATH; break; case '2': ExclPath=EXCL_SAVEFULLPATH; break; case '3': ExclPath=EXCL_ABSPATH; break; } break; case 'D': ExclEmptyDir=true; break; case 'E': ProcessEA=false; break; case 'N': NoEndBlock=true; break; default: if (Switch[1]=='+') { InclFileAttr=GetExclAttr(&Switch[2]); InclAttrSet=true; } else ExclFileAttr=GetExclAttr(&Switch[1]); break; } break; case 'P': if (Switch[1]==0) { GetPassword(PASSWORD_GLOBAL,NULL,Password,sizeof(Password)); eprintf("\n"); } else strncpy(Password,Switch+1,sizeof(Password)); break; case 'H': if (toupper(Switch[1])=='P') { EncryptHeaders=true; if (Switch[2]!=0) strncpy(Password,Switch+2,sizeof(Password)); else if (*Password==0) { GetPassword(PASSWORD_GLOBAL,NULL,Password,sizeof(Password)); eprintf("\n"); } } break; case 'Z': strncpy(CommentFile,Switch[1]!=0 ? Switch+1:"stdin",sizeof(CommentFile)); break; case 'M': switch(toupper(Switch[1])) { case 'C': { char *Str=Switch+2; if (*Str=='-') for (int I=0;I<sizeof(FilterModes)/sizeof(FilterModes[0]);I++) FilterModes[I].State=FILTER_DISABLE; else while (*Str) { int Param1=0,Param2=0; FilterState State=FILTER_AUTO; FilterType Type=FILTER_NONE; if (isdigit(*Str)) { Param1=atoi(Str); while (isdigit(*Str)) Str++; } if (*Str==':' && isdigit(Str[1])) { Param2=atoi(++Str); while (isdigit(*Str)) Str++; } switch(toupper(*(Str++))) { case 'T': Type=FILTER_PPM; break; case 'E': Type=FILTER_E8; break; case 'D': Type=FILTER_DELTA; break; case 'A': Type=FILTER_AUDIO; break; case 'C': Type=FILTER_RGB; break; case 'I': Type=FILTER_ITANIUM; break; case 'L': Type=FILTER_UPCASETOLOW; break; } if (*Str=='+' || *Str=='-') State=*(Str++)=='+' ? FILTER_FORCE:FILTER_DISABLE; FilterModes[Type].State=State; FilterModes[Type].Param1=Param1; FilterModes[Type].Param2=Param2; } } break; case 'M': break; case 'D': { if ((WinSize=atoi(&Switch[2]))==0) WinSize=0x10000<<(toupper(Switch[2])-'A'); else WinSize*=1024; if (!CheckWinSize()) BadSwitch(Switch); } break; case 'S': { char *Names=Switch+2,DefNames[512]; if (*Names==0) { strcpy(DefNames,DefaultStoreList); Names=DefNames; } while (*Names!=0) { char *End=strchr(Names,';'); if (End!=NULL) *End=0; if (*Names=='.') Names++; char Mask[NM]; if (strpbrk(Names,"*?.")==NULL) sprintf(Mask,"*.%s",Names); else strcpy(Mask,Names); StoreArgs->AddString(Mask); if (End==NULL) break; Names=End+1; } } break; default: Method=Switch[1]-'0'; if (Method>5 || Method<0) BadSwitch(Switch); break; } break; case 'V': switch(toupper(Switch[1])) { #ifdef _WIN_32 case 'D': EraseDisk=true; break; #endif case 'N': OldNumbering=true; break; case 'P': VolumePause=true; break; case 'E': if (toupper(Switch[2])=='R') VersionControl=atoi(Switch+3)+1; break; case '-': VolSize=0; break; default: { Int64 NewVolSize=atoil(&Switch[1]); if (NewVolSize==0) NewVolSize=INT64ERR; else switch (Switch[strlen(Switch)-1]) { case 'f': case 'F': switch(int64to32(NewVolSize)) { case 360: NewVolSize=362496; break; case 720: NewVolSize=730112; break; case 1200: NewVolSize=1213952; break; case 1440: NewVolSize=1457664; break; case 2880: NewVolSize=2915328; break; } break; case 'k': NewVolSize*=1024; break; case 'm': NewVolSize*=1024*1024; break; case 'M': NewVolSize*=1000*1000; break; case 'g': NewVolSize*=1024*1024; NewVolSize*=1024; break; case 'G': NewVolSize*=1000*1000; NewVolSize*=1000; break; case 'b': case 'B': break; default: NewVolSize*=1000; break; } if (VolSize==0) VolSize=NewVolSize; else NextVolSizes.Push(NewVolSize); } break; } break; case 'F': if (Switch[1]==0) FreshFiles=true; break; case 'U': if (Switch[1]==0) UpdateFiles=true; break; case 'W': strncpy(TempPath,&Switch[1],sizeof(TempPath)-1); AddEndSlash(TempPath); break; case 'S': if (strnicomp(Switch,"SFX",3)==0) { const char *SFXName=Switch[3] ? Switch+3:DefSFXName; if (PointToName(SFXName)!=SFXName || FileExist(SFXName)) strcpy(SFXModule,SFXName); else GetConfigName(SFXName,SFXModule,true); } if (isdigit(Switch[1])) { Solid|=SOLID_COUNT; SolidCount=atoi(&Switch[1]); } else switch(toupper(Switch[1])) { case 0: Solid|=SOLID_NORMAL; break; case '-': Solid=SOLID_NONE; break; case 'E': Solid|=SOLID_FILEEXT; break; case 'V': Solid|=Switch[2]=='-' ? SOLID_VOLUME_DEPENDENT:SOLID_VOLUME_INDEPENDENT; break; case 'D': Solid|=SOLID_VOLUME_DEPENDENT; break; } break; case 'C': if (Switch[2]==0) switch(toupper(Switch[1])) { case '-': DisableComment=true; break; case 'U': ConvertNames=NAMES_UPPERCASE; break; case 'L': ConvertNames=NAMES_LOWERCASE; break; } break; case 'K': switch(toupper(Switch[1])) { case 'B': KeepBroken=true; break; case 0: Lock=true; break; } break; #ifndef GUI case '?' : OutHelp(); break; #endif default : BadSwitch(Switch); break; } }
void CommandData::ParseArg(char *Arg,wchar *ArgW) { if (IsSwitch(*Arg) && !NoMoreSwitches) if (Arg[1]=='-') NoMoreSwitches=true; else ProcessSwitch(&Arg[1]); else if (*Command==0) { strncpy(Command,Arg,sizeof(Command)); if (ArgW!=NULL) strncpyw(CommandW,ArgW,sizeof(CommandW)/sizeof(CommandW[0])); if (toupper(*Command)=='S') { const char *SFXName=Command[1] ? Command+1:DefSFXName; if (PointToName(SFXName)!=SFXName || FileExist(SFXName)) strcpy(SFXModule,SFXName); else GetConfigName(SFXName,SFXModule,true); } #ifndef GUI *Command=toupper(*Command); if (*Command!='I' && *Command!='S') strupper(Command); #endif } else if (*ArcName==0) { strncpy(ArcName,Arg,sizeof(ArcName)); if (ArgW!=NULL) strncpyw(ArcNameW,ArgW,sizeof(ArcNameW)/sizeof(ArcNameW[0])); } else { int Length=strlen(Arg); char EndChar=Arg[Length-1]; char CmdChar=toupper(*Command); bool Add=strchr("AFUM",CmdChar)!=NULL; bool Extract=CmdChar=='X' || CmdChar=='E'; if ((IsDriveDiv(EndChar) || IsPathDiv(EndChar)) && !Add) strcpy(ExtrPath,Arg); else if ((Add || CmdChar=='T') && *Arg!='@') FileArgs->AddString(Arg); else { struct FindData FileData; bool Found=FindFile::FastFind(Arg,NULL,&FileData); if (!Found && *Arg=='@' && !IsWildcard(Arg)) { ReadTextFile(Arg+1,FileArgs,false,true,true,true,true); FileLists=true; } else if (Found && FileData.IsDir && Extract && *ExtrPath==0) { strcpy(ExtrPath,Arg); AddEndSlash(ExtrPath); } else FileArgs->AddString(Arg); } } }
void VideoBackend::ShowConfig(void *_hParent) { if (!s_BackendInitialized) InitBackendInfo(); Host_ShowVideoConfig(_hParent, GetDisplayName(), GetConfigName()); }