185 lines
4.8 KiB
C++
185 lines
4.8 KiB
C++
#include <stdlib.h>
|
|
#include <mdiwin/profile.hpp>
|
|
#include <mdiwin/main.hpp>
|
|
|
|
Profile::Profile(void)
|
|
: mIniFileName(String(STRING_INIFILENAME,Main::processInstance())),
|
|
mStringUnset(STRING_UNSET,Main::processInstance())
|
|
{
|
|
}
|
|
|
|
Profile::Profile(String &iniFileName)
|
|
: mIniFileName(iniFileName),
|
|
mStringUnset(STRING_UNSET,Main::processInstance())
|
|
{
|
|
}
|
|
|
|
Profile::~Profile()
|
|
{
|
|
}
|
|
|
|
WORD Profile::verifyInitializationFile(void)const
|
|
{
|
|
HFILE hFile;
|
|
OFSTRUCT pof;
|
|
String iniPathFileName;
|
|
|
|
iniPathFileName.reserve(String::MaxString);
|
|
if(!::GetWindowsDirectory(iniPathFileName,String::MaxString-1))return FALSE;
|
|
iniPathFileName+="\\";
|
|
iniPathFileName+=mIniFileName;
|
|
if(-1==(hFile=::OpenFile(iniPathFileName,&pof,OF_READ|OF_EXIST)))return FALSE;
|
|
::_lclose(hFile);
|
|
return TRUE;
|
|
}
|
|
|
|
WORD Profile::verifyDirectory(String &pathDirectoryName)
|
|
{
|
|
/* String currentWorkDir;
|
|
int resultCode;
|
|
|
|
::getcwd(currentWorkDir,String::MaxString);
|
|
resultCode=::chdir(pathDirectoryName);
|
|
::chdir(currentWorkDir);
|
|
return !resultCode; */
|
|
return FALSE;
|
|
}
|
|
|
|
WORD Profile::readProfileString(String §ionString,String &itemString,String &returnString)
|
|
{
|
|
String currentDriveString;
|
|
|
|
returnString.reserve(String::MaxString);
|
|
::GetPrivateProfileString((LPSTR)sectionString,(LPSTR)itemString,(LPSTR)mStringUnset,
|
|
(LPSTR)returnString,String::MaxString,(LPSTR)mIniFileName);
|
|
if(!(returnString==mStringUnset))
|
|
{
|
|
expandEmbeddedMacro(returnString);
|
|
return TRUE;
|
|
}
|
|
drivePathName(currentDriveString);
|
|
currentDriveString+=mIniFileName;
|
|
::GetPrivateProfileString((LPSTR)sectionString,(LPSTR)itemString,(LPSTR)mStringUnset,
|
|
(LPSTR)returnString,String::MaxString,(LPSTR)currentDriveString);
|
|
if(!(returnString==mStringUnset))
|
|
{
|
|
expandEmbeddedMacro(returnString);
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
WORD Profile::readProfileBlock(String §ionString,Block<String> §ionBlock)
|
|
{
|
|
String tempString;
|
|
String itemString;
|
|
Block<String> tempBlock;
|
|
size_t sectionItems(0);
|
|
char *ptr;
|
|
|
|
sectionBlock.remove();
|
|
tempString.reserve(String::MaxString);
|
|
itemString.reserve(String::MaxString);
|
|
if(!readProfileString(sectionString,String((char*)0),tempString))return FALSE;
|
|
ptr=(LPSTR)tempString;
|
|
while(TRUE)
|
|
{
|
|
if(!ptr||!*ptr)break;
|
|
tempBlock.insert(&String(ptr));
|
|
ptr+=(::strlen(ptr)+1);
|
|
}
|
|
if(0==(sectionItems=(int)tempBlock.size()))return 0;
|
|
for(int i=0;i<sectionItems;i++)
|
|
{
|
|
readProfileString(sectionString,tempBlock[i],itemString);
|
|
tempString=tempBlock[i];
|
|
tempString+="=";
|
|
tempString+=itemString;
|
|
expandEmbeddedMacro(tempString);
|
|
sectionBlock.insert(&tempString);
|
|
}
|
|
return (int)sectionBlock.size();
|
|
}
|
|
|
|
WORD Profile::writeProfileString(String §ionString,String &itemString,String &textString)
|
|
{
|
|
String currentDriveString;
|
|
|
|
if(::WritePrivateProfileString((LPSTR)sectionString,(LPSTR)itemString,(LPSTR)textString,(LPSTR)mIniFileName))return TRUE;
|
|
drivePathName(currentDriveString);
|
|
currentDriveString+=mIniFileName;
|
|
return ::WritePrivateProfileString((LPSTR)sectionString,(LPSTR)itemString,(LPSTR)textString,(LPSTR)currentDriveString);
|
|
}
|
|
|
|
WORD Profile::writeProfileBlock(String §ionString,Block<String> &itemStrings,Block<String> &textStrings)
|
|
{
|
|
WORD blockSize((int)itemStrings.size());
|
|
if(textStrings.size()!=blockSize)return FALSE;
|
|
for(int i=0;i<blockSize;i++)writeProfileString(sectionString,itemStrings[i],textStrings[i]);
|
|
return TRUE;
|
|
}
|
|
|
|
void Profile::makePathFileName(String &fileNameString)
|
|
{
|
|
String tempString(fileNameString);
|
|
String currentDriveString;
|
|
|
|
drivePathName(currentDriveString);
|
|
currentDriveString+=fileNameString;
|
|
fileNameString=currentDriveString;
|
|
}
|
|
|
|
WORD Profile::makeFileName(String &pathFileName)
|
|
{
|
|
/* String tempString(pathFileName);
|
|
int extLen;
|
|
char *ptr;
|
|
|
|
ptr=::strchr(tempString,'.');
|
|
if(!ptr||(extLen=::strlen(ptr))<4)return FALSE;
|
|
if(extLen>4)*(ptr+4)=0;
|
|
while(*ptr!='\\'&&*ptr!='/'&&*ptr!=':'&&ptr>=tempString)ptr--;
|
|
if(::strlen(++ptr)>12)return FALSE;
|
|
pathFileName=ptr; */
|
|
return TRUE;
|
|
}
|
|
|
|
void Profile::drivePathName(String ¤tDriveString,int appendDirConst)
|
|
{
|
|
/* String tempString;
|
|
|
|
tempString.reserve(String::MaxString);
|
|
currentDriveString.reserve(String::MaxString);
|
|
::sprintf((LPSTR)currentDriveString,"%c:\\",::getdisk()+'A');
|
|
::getcurdir(::getdisk()+1,(LPSTR)tempString);
|
|
currentDriveString+=tempString;
|
|
if(appendDirConst)currentDriveString+="\\"; */
|
|
}
|
|
|
|
void Profile::expandEmbeddedMacro(String &someString)
|
|
{
|
|
String macroSyncChar("$(");
|
|
String macroEndChar(")");
|
|
String macroString;
|
|
String tempString(someString);
|
|
String resultString;
|
|
char *ptr;
|
|
char *envPtr;
|
|
char tempChar;
|
|
|
|
ptr=::strstr(tempString,macroSyncChar);
|
|
if(!ptr)return;
|
|
tempChar=*ptr;
|
|
*ptr=0;
|
|
resultString=tempString;
|
|
*ptr=tempChar;
|
|
ptr+=2;
|
|
ptr=::strtok(ptr,macroEndChar);
|
|
if(!ptr)return;
|
|
if(0==(envPtr=::getenv(ptr)))resultString+=mStringUnset;
|
|
else resultString+=envPtr;
|
|
ptr=::strtok(0,"\0");
|
|
if(ptr)resultString+=ptr;
|
|
someString=resultString;
|
|
}
|