Files
Work/mdiwin/PROFILE.CPP
2024-08-07 09:16:27 -04:00

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 &sectionString,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 &sectionString,Block<String> &sectionBlock)
{
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 &sectionString,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 &sectionString,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 &currentDriveString,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;
}