#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#define EDITOR_FONT_NAME "Fixedsys"
#define EDITOR_FONT_HEIGHT "16"
#define EDITOR_FONT_WEIGHT "400"
#define IS_FONT_ITALIC "0"
#define EDITOR_FONT_CHARSET_GB2132 "134"
#define MY_COLOR_CONFIG_NAME "LsColorCfgOnRadAsm"
const
char
* g_pColorCfgData = MY_COLOR_CONFIG_NAME
",12632256,8388608,8388608,16777215,15777984,12644544,12632304,12632256,8421504,8388608,16777215,0,16777215,0,16777215,0,16777215,10485760,50331647,32768,0,0,0,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,10485920,136,16711680,12632256,12632256,12632256,12632256,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,0,0"
;
BOOL
FindRadAsmInstallDir(
char
* pcInstallDir,
int
iBufLen);
BOOL
WriteRadAsmColorConfig(
char
* pcInstallDir,
int
iBufLen);
DWORD
GetIniItemCountByKey(
char
* pcIniPathName,
char
* pcIniKeyName);
int
main(
int
argc,
char
* argv[])
{
char
szRadAsmInstallDir[_MAX_PATH + 1] = {
'\0'
};
do
{
if
(!FindRadAsmInstallDir(szRadAsmInstallDir,
sizeof
(szRadAsmInstallDir) - 1)) {
printf
(
"failed : not find RadAsm install directory\n"
);
break
;
}
printf
(
"find RadAsm install directory [%s]\n"
, szRadAsmInstallDir);
if
(!WriteRadAsmColorConfig(szRadAsmInstallDir,
strlen
(szRadAsmInstallDir))) {
printf
(
"failed : write RadAsm color config\n"
);
break
;
}
printf
(
"ok : %s add to RadAsm\n"
, MY_COLOR_CONFIG_NAME);
}
while
(0);
printf
(
"END\n"
);
system
(
"pause"
);
return
0;
}
BOOL
FindRadAsmInstallDir(
char
* pcInstallDir,
int
iBufLen)
{
BOOL
bRc = FALSE;
long
lRc = ERROR_SUCCESS;
DWORD
cbData = 0;
DWORD
dwType = 0;
HKEY
hSubKey = NULL;
char
* pTmp = NULL;
do
{
ZeroMemory(pcInstallDir, iBufLen);
lRc = RegOpenKey(HKEY_LOCAL_MACHINE,
"SOFTWARE\\RadASM"
,
&hSubKey
);
if
(ERROR_SUCCESS != lRc) {
break
;
}
lRc = RegQueryValueEx(hSubKey,
""
, NULL, &dwType, NULL, &cbData);
if
(ERROR_SUCCESS != lRc) {
break
;
}
if
(((cbData >= (
DWORD
)iBufLen)) || (REG_SZ != dwType)) {
break
;
}
lRc = RegQueryValueEx(hSubKey,
""
, NULL, &dwType, (
UCHAR
*)pcInstallDir, &cbData);
if
(ERROR_SUCCESS != lRc) {
break
;
}
pTmp =
strrchr
(pcInstallDir,
'\\'
);
if
(pTmp != (pcInstallDir + cbData - 1)) {
strcat
(pcInstallDir,
"\\"
);
}
bRc = TRUE;
}
while
(0);
if
(NULL != hSubKey) {
RegCloseKey(hSubKey);
hSubKey = NULL;
}
return
bRc;
}
BOOL
WriteRadAsmColorConfig(
char
* pcInstallDir,
int
iBufLen)
{
BOOL
bRc = FALSE;
DWORD
dwTmp = 0;
DWORD
dwItemCnt = 0;
char
szPathName[_MAX_PATH + 1] = {
'\0'
};
char
szBuf[_MAX_PATH + 1] = {
'\0'
};
do
{
if
((NULL == pcInstallDir)
|| (((
DWORD
)iBufLen +
strlen
(
"RadASM.ini"
)) > (
sizeof
(szPathName) - 1))) {
break
;
}
strcpy
(szPathName, pcInstallDir);
strcat
(szPathName,
"RadASM.ini"
);
printf
(
"update %s ...\n"
, szPathName);
dwItemCnt = GetIniItemCountByKey(szPathName,
"Color"
);
sprintf
(szBuf,
"%ld"
, dwItemCnt);
if
(!WritePrivateProfileString(
"Color"
,
szBuf,
g_pColorCfgData,
szPathName
)) {
break
;
}
printf
(
"ok : add %s to RadASM\n"
, MY_COLOR_CONFIG_NAME);
strcpy
(szPathName, pcInstallDir);
strcat
(szPathName,
"masm.ini"
);
printf
(
"update %s ...\n"
, szPathName);
bRc = TRUE;
do
{
if
(!WritePrivateProfileString(
"Edit"
,
"Font"
, EDITOR_FONT_NAME, szPathName)) {
break
;
}
printf
(
"ok : change RadASM editor font to [%s]\n"
, EDITOR_FONT_NAME);
if
(!WritePrivateProfileString(
"Edit"
,
"FontHeight"
,
"-"
EDITOR_FONT_HEIGHT, szPathName)) {
break
;
}
printf
(
"ok : change RadASM editor font height to [%s]\n"
, EDITOR_FONT_HEIGHT);
if
(!WritePrivateProfileString(
"Edit"
,
"FontWeight"
, EDITOR_FONT_WEIGHT, szPathName)) {
break
;
}
printf
(
"ok : change RadASM editor font weight to [%s]\n"
, EDITOR_FONT_WEIGHT);
if
(!WritePrivateProfileString(
"Edit"
,
"FontItalic"
, IS_FONT_ITALIC, szPathName)) {
break
;
}
printf
(
"ok : change RadASM editor font italic to [%s]\n"
, (0 ==
atol
(IS_FONT_ITALIC)) ?
"TRUE"
:
"FALSE"
);
if
(!WritePrivateProfileString(
"Edit"
,
"FontCharSet"
, EDITOR_FONT_CHARSET_GB2132, szPathName)) {
break
;
}
printf
(
"ok : change RadASM editor font charset to [GB2132]\n"
);
}
while
(0);
}
while
(0);
return
bRc;
}
DWORD
GetIniItemCountByKey(
char
* pcIniPathName,
char
* pcIniKeyName)
{
DWORD
dwIniKeyItemCnt = 0;
char
* pBuf = NULL;
char
* pBufTmp = NULL;
#ifdef _DEBUG
size_t
nBufSize = 4;
#else
size_t
nBufSize = 0x1000;
#endif
DWORD
dwTmp = 0;
DWORD
dwMaxBufSize = 0;
do
{
if
((NULL == pcIniPathName) || (NULL == pcIniKeyName)) {
break
;
}
try
{
do
{
pBuf =
new
char
[nBufSize];
ZeroMemory(pBuf, nBufSize);
dwTmp = GetPrivateProfileString(pcIniKeyName, NULL, NULL, pBuf, nBufSize, pcIniPathName);
if
(dwTmp > dwMaxBufSize) {
dwMaxBufSize = dwTmp;
if
(NULL != pBuf) {
delete
[]pBuf;
pBuf = NULL;
}
nBufSize +=
sizeof
(
DWORD
);
}
else
{
if
(NULL != pBuf) {
delete
[]pBuf;
pBuf = NULL;
}
dwMaxBufSize +=
sizeof
(
WORD
);
nBufSize = dwMaxBufSize;
pBuf =
new
char
[dwMaxBufSize];
ZeroMemory(pBuf, dwMaxBufSize);
dwTmp = GetPrivateProfileString(pcIniKeyName, NULL, NULL, pBuf, nBufSize, pcIniPathName);
break
;
}
}
while
(1);
pBufTmp = pBuf;
while
((NULL != pBufTmp) && (*pBufTmp !=
'\0'
)) {
dwIniKeyItemCnt =
atol
(pBufTmp);
pBufTmp += (
strlen
(pBufTmp) + 1);
}
pBufTmp = NULL;
}
catch
(...) {
dwIniKeyItemCnt = 0;
}
if
(NULL != pBuf) {
delete
[]pBuf;
pBuf = NULL;
}
}
while
(0);
return
dwIniKeyItemCnt;
}