213 lines
5.9 KiB
C
213 lines
5.9 KiB
C
|
#include "fdisk.h"
|
||
|
#include <stdio.h>
|
||
|
|
||
|
|
||
|
int ProfileWindowX,
|
||
|
ProfileWindowY,
|
||
|
ProfileWindowW,
|
||
|
ProfileWindowH;
|
||
|
|
||
|
BOOL ProfileIsMaximized,ProfileIsIconic;
|
||
|
|
||
|
#ifdef JAPAN
|
||
|
//Don't use IDS_APPNAME as registry key,
|
||
|
//because it is also used window's caption and it was localized.
|
||
|
CHAR SectionName[] = "Disk Administrator";
|
||
|
#else
|
||
|
CHAR SectionName[80];
|
||
|
#endif
|
||
|
|
||
|
CHAR szWindowPosition[] = "WindowPosition";
|
||
|
CHAR szWindowMaximized[] = "WindowMaximized";
|
||
|
CHAR szWindowIconic[] = "WindowIconic";
|
||
|
CHAR szWindowPosFormatString[] = "%d,%d,%d,%d";
|
||
|
CHAR szStatusBar[] = "StatusBar";
|
||
|
CHAR szLegend[] = "Legend";
|
||
|
CHAR szElementN[] = "Element %u Color/Pattern";
|
||
|
|
||
|
|
||
|
VOID
|
||
|
WriteProfile(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
CHAR SectionLocation[128], SectionMapping[128];
|
||
|
HKEY Key1, Key2;
|
||
|
RECT rc;
|
||
|
CHAR text[100],text2[100];
|
||
|
int i;
|
||
|
DWORD Disposition;
|
||
|
LONG Err;
|
||
|
|
||
|
|
||
|
#ifdef JAPAN
|
||
|
//Don't use IDS_APPNAME as registry key,
|
||
|
//because it is also used window's caption and it was localized.
|
||
|
#else
|
||
|
LoadStringA(hModule,IDS_APPNAME,SectionName,sizeof(SectionName));
|
||
|
#endif
|
||
|
|
||
|
// Make sure that the appropriate registry keys exits:
|
||
|
//
|
||
|
// windisk.ini key:
|
||
|
//
|
||
|
Err = RegCreateKeyExA( HKEY_LOCAL_MACHINE,
|
||
|
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\IniFileMapping\\windisk.ini",
|
||
|
0,
|
||
|
NULL,
|
||
|
REG_OPTION_NON_VOLATILE,
|
||
|
KEY_WRITE,
|
||
|
NULL,
|
||
|
&Key1,
|
||
|
&Disposition );
|
||
|
|
||
|
if( Err != ERROR_SUCCESS ) {
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if( Disposition == REG_CREATED_NEW_KEY ) {
|
||
|
|
||
|
// We need to set up the registry keys for the INI mapping.
|
||
|
// First, create the Disk Administrator value on the windisk.ini
|
||
|
// key, which indicates the location of the key which maps
|
||
|
// the Disk Administrator section.
|
||
|
//
|
||
|
strcpy( SectionLocation, "Software\\Microsoft\\" );
|
||
|
strcat( SectionLocation, SectionName );
|
||
|
|
||
|
strcpy( SectionMapping, "USR:" );
|
||
|
strcat( SectionMapping, SectionLocation );
|
||
|
|
||
|
Err = RegSetValueEx( Key1,
|
||
|
SectionName,
|
||
|
0,
|
||
|
REG_SZ,
|
||
|
SectionMapping,
|
||
|
strlen( SectionMapping ) + 1 );
|
||
|
|
||
|
if( Err != ERROR_SUCCESS ) {
|
||
|
|
||
|
RegCloseKey( Key1 );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Now create the key to which the section mapping points:
|
||
|
//
|
||
|
Err = RegCreateKeyEx( HKEY_CURRENT_USER,
|
||
|
SectionLocation,
|
||
|
0,
|
||
|
NULL,
|
||
|
REG_OPTION_NON_VOLATILE,
|
||
|
KEY_WRITE,
|
||
|
NULL,
|
||
|
&Key2,
|
||
|
&Disposition );
|
||
|
|
||
|
RegCloseKey( Key2 );
|
||
|
}
|
||
|
|
||
|
RegCloseKey( Key1 );
|
||
|
|
||
|
|
||
|
// OK, the registry location is set up. Write the initialization
|
||
|
// information.
|
||
|
//
|
||
|
|
||
|
// write window position
|
||
|
|
||
|
GetWindowRect(hwndFrame,&rc);
|
||
|
wsprintf(text,
|
||
|
szWindowPosFormatString,
|
||
|
ProfileWindowX,
|
||
|
ProfileWindowY,
|
||
|
ProfileWindowW,
|
||
|
ProfileWindowH
|
||
|
);
|
||
|
WritePrivateProfileStringA(SectionName,szWindowPosition,text,"windisk.ini");
|
||
|
wsprintf(text,"%u",IsZoomed(hwndFrame));
|
||
|
WritePrivateProfileStringA(SectionName,szWindowMaximized,text,"windisk.ini");
|
||
|
wsprintf(text,"%u",IsIconic(hwndFrame));
|
||
|
WritePrivateProfileStringA(SectionName,szWindowIconic,text,"windisk.ini");
|
||
|
|
||
|
// status bar and legend stuff
|
||
|
|
||
|
wsprintf(text,
|
||
|
"%u",
|
||
|
StatusBar
|
||
|
);
|
||
|
WritePrivateProfileStringA(SectionName,szStatusBar,text,"windisk.ini");
|
||
|
|
||
|
wsprintf(text,
|
||
|
"%u",
|
||
|
Legend
|
||
|
);
|
||
|
WritePrivateProfileStringA(SectionName,szLegend,text,"windisk.ini");
|
||
|
|
||
|
// disk graph colors/patterns
|
||
|
|
||
|
for(i=0; i<LEGEND_STRING_COUNT; i++) {
|
||
|
wsprintf(text2,szElementN,i);
|
||
|
wsprintf(text,"%u/%u",BrushColors[i],BrushHatches[i]);
|
||
|
WritePrivateProfileStringA(SectionName,text2,text,"windisk.ini");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
ReadProfile(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
CHAR text[100],text2[100];
|
||
|
int i;
|
||
|
|
||
|
#ifdef JAPAN
|
||
|
//Don't use IDS_APPNAME as registry key,
|
||
|
//because it is also used window's caption and it was localized.
|
||
|
#else
|
||
|
LoadStringA(hModule,IDS_APPNAME,SectionName,sizeof(SectionName));
|
||
|
#endif
|
||
|
|
||
|
// get the window position data
|
||
|
|
||
|
ProfileIsMaximized = GetPrivateProfileIntA(SectionName,szWindowMaximized,0,"windisk.ini");
|
||
|
ProfileIsIconic = GetPrivateProfileIntA(SectionName,szWindowIconic ,0,"windisk.ini");
|
||
|
|
||
|
*text = 0;
|
||
|
if(GetPrivateProfileStringA(SectionName,szWindowPosition,"",text,sizeof(text),"windisk.ini")
|
||
|
&& *text)
|
||
|
{
|
||
|
sscanf(text,
|
||
|
szWindowPosFormatString,
|
||
|
&ProfileWindowX,
|
||
|
&ProfileWindowY,
|
||
|
&ProfileWindowW,
|
||
|
&ProfileWindowH
|
||
|
);
|
||
|
} else {
|
||
|
ProfileWindowX = CW_USEDEFAULT;
|
||
|
ProfileWindowY = 0;
|
||
|
ProfileWindowW = CW_USEDEFAULT;
|
||
|
ProfileWindowH = 0;
|
||
|
}
|
||
|
|
||
|
// status bar and legend stuff
|
||
|
|
||
|
StatusBar = GetPrivateProfileIntA(SectionName,szStatusBar,1,"windisk.ini");
|
||
|
Legend = GetPrivateProfileIntA(SectionName,szLegend ,1,"windisk.ini");
|
||
|
|
||
|
// disk graph colors/patterns
|
||
|
|
||
|
for(i=0; i<LEGEND_STRING_COUNT; i++) {
|
||
|
wsprintf(text2,szElementN,i);
|
||
|
*text = 0;
|
||
|
if(GetPrivateProfileStringA(SectionName,text2,"",text,sizeof(text),"windisk.ini") && *text) {
|
||
|
sscanf(text,"%u/%u",&BrushColors[i],&BrushHatches[i]);
|
||
|
if( BrushHatches[i] >= NUM_AVAILABLE_HATCHES ) {
|
||
|
BrushHatches[i] = NUM_AVAILABLE_HATCHES - 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|