// enviromt.c // Two-letter descriptor: en // **************************************************************************** // Copyright (C) B. Cameron Lesiuk, 1999. All rights reserved. // Permission to use/copy this code is granted for non-commercial use only. // B. Cameron Lesiuk // Victoria, BC, Canada // wi961@freenet.victoria.bc.ca // **************************************************************************** // This module just provides some tools to save/load the // environment. Winfuck calls these sorts of things "profile" settings. #include<windows.h> #include<stdio.h> /* Globals used exclusively in this file */ char *g_enInitFile; WINDOWPLACEMENT g_enPlacement; BOOL enInitEnvironment(char *p_inifile) { g_enInitFile=p_inifile; return TRUE; } void enShutdownEnvironment() { return; } WINDOWPLACEMENT *enRestoreWindowPlacement(char *p_section,int p_defLeft, int p_defTop,int p_defRight,int p_defBottom) { if (!p_section) return NULL; g_enPlacement.length=sizeof(WINDOWPLACEMENT); g_enPlacement.flags=(UINT)GetPrivateProfileInt(p_section,"flags", 0,g_enInitFile); g_enPlacement.showCmd=(UINT)GetPrivateProfileInt(p_section,"showCmd", SW_SHOWNA,g_enInitFile); g_enPlacement.ptMinPosition.x=(int)GetPrivateProfileInt(p_section,"ptMinX", 100,g_enInitFile); g_enPlacement.ptMinPosition.y=(int)GetPrivateProfileInt(p_section,"ptMinY", 100,g_enInitFile); g_enPlacement.ptMaxPosition.y=(int)GetPrivateProfileInt(p_section,"ptMaxY", 0,g_enInitFile); g_enPlacement.ptMaxPosition.y=(int)GetPrivateProfileInt(p_section,"ptMaxY", 0,g_enInitFile); g_enPlacement.rcNormalPosition.left=(int)GetPrivateProfileInt(p_section,"rcNormalLeft", p_defLeft,g_enInitFile); g_enPlacement.rcNormalPosition.top=(int)GetPrivateProfileInt(p_section,"rcNormalTop", p_defTop,g_enInitFile); g_enPlacement.rcNormalPosition.right=(int)GetPrivateProfileInt(p_section,"rcNormalRight", p_defRight,g_enInitFile); g_enPlacement.rcNormalPosition.bottom=(int)GetPrivateProfileInt(p_section,"rcNormalBottom", p_defBottom,g_enInitFile); return &g_enPlacement; } void enSaveWindowPlacement(char *p_section,HWND p_hWnd) { char l_buf[30]; if ((!p_section)||(!p_hWnd)) return; g_enPlacement.length=sizeof(WINDOWPLACEMENT); GetWindowPlacement(p_hWnd,&g_enPlacement); sprintf(l_buf,"%i",g_enPlacement.length); WritePrivateProfileString(p_section,"length",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.flags); WritePrivateProfileString(p_section,"flags",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.showCmd); WritePrivateProfileString(p_section,"showCmd",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.ptMinPosition.x); WritePrivateProfileString(p_section,"ptMinX",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.ptMinPosition.y); WritePrivateProfileString(p_section,"ptMinY",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.ptMaxPosition.x); WritePrivateProfileString(p_section,"ptMaxX",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.ptMaxPosition.y); WritePrivateProfileString(p_section,"ptMaxY",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.rcNormalPosition.left); WritePrivateProfileString(p_section,"rcNormalLeft",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.rcNormalPosition.top); WritePrivateProfileString(p_section,"rcNormalTop",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.rcNormalPosition.right); WritePrivateProfileString(p_section,"rcNormalRight",l_buf,g_enInitFile); sprintf(l_buf,"%i",g_enPlacement.rcNormalPosition.bottom); WritePrivateProfileString(p_section,"rcNormalBottom",l_buf,g_enInitFile); return; } void enSaveLong(char *p_Section, char *p_Entry, unsigned long p_Long) { char l_buf[20]; sprintf(l_buf,"%lu",p_Long); WritePrivateProfileString(p_Section,p_Entry,l_buf,g_enInitFile); return; } unsigned long enRestoreLong(char *p_Section, char *p_Entry, unsigned long p_Default) { char l_buf[20],l_buf2[20]; unsigned long l_Long; sprintf(l_buf2,"%lu",p_Default); GetPrivateProfileString(p_Section,p_Entry,l_buf2,l_buf,20,g_enInitFile); sscanf(l_buf,"%lu",&l_Long); return l_Long; } void enSaveInt(char *p_Section, char *p_Entry, unsigned int p_Int) { char l_buf[20]; sprintf(l_buf,"%u",p_Int); WritePrivateProfileString(p_Section,p_Entry,l_buf,g_enInitFile); return; } unsigned int enRestoreInt(char *p_Section, char *p_Entry, unsigned int p_Default) { char l_buf[20],l_buf2[20]; unsigned int l_Int; sprintf(l_buf2,"%u",p_Default); GetPrivateProfileString(p_Section,p_Entry,l_buf2,l_buf,20,g_enInitFile); sscanf(l_buf,"%u",&l_Int); return l_Int; } void enSaveString(char *p_Section, char *p_Entry, unsigned char *p_Str) { WritePrivateProfileString(p_Section,p_Entry,(char*)p_Str,g_enInitFile); } void enRestoreString(char *p_Section, char *p_Entry, char *p_Default, unsigned char *p_Str, unsigned long p_StrLen) { GetPrivateProfileString(p_Section,p_Entry,p_Default,(char*)p_Str, p_StrLen,g_enInitFile); } void enSaveYesNo(char *p_Section, char *p_Entry, BOOL p_yesno) { if (p_yesno) WritePrivateProfileString(p_Section,p_Entry,"Yes",g_enInitFile); else WritePrivateProfileString(p_Section,p_Entry,"No",g_enInitFile); } BOOL enRestoreYesNo(char *p_Section, char *p_Entry, BOOL p_Default) { char l_buf[20],*l_default; if (p_Default) l_default="Yes"; else l_default="No"; GetPrivateProfileString(p_Section,p_Entry,l_default,l_buf,20,g_enInitFile); switch(l_buf[0]) { case 'y': case 'Y': case '1': return TRUE; case 'n': case 'N': case '0': default: return FALSE; } } void enSaveLogFont(char *p_Section, LOGFONT *p_LogFont) { #ifdef WIN32 enSaveLong(p_Section,"LF_lfHeight",(unsigned long)p_LogFont->lfHeight); enSaveLong(p_Section,"LF_lfWidth",(unsigned long)p_LogFont->lfWidth); enSaveLong(p_Section,"LF_lfEscapement",(unsigned long)p_LogFont->lfEscapement); enSaveLong(p_Section,"LF_lfOrientation",(unsigned long)p_LogFont->lfOrientation); enSaveLong(p_Section,"LF_lfWeight",(unsigned long)p_LogFont->lfWeight); #else enSaveInt(p_Section,"LF_lfHeight",(unsigned int)p_LogFont->lfHeight); enSaveInt(p_Section,"LF_lfWidth",(unsigned int)p_LogFont->lfWidth); enSaveInt(p_Section,"LF_lfEscapement",(unsigned int)p_LogFont->lfEscapement); enSaveInt(p_Section,"LF_lfOrientation",(unsigned int)p_LogFont->lfOrientation); enSaveInt(p_Section,"LF_lfWeight",(unsigned int)p_LogFont->lfWeight); #endif enSaveInt(p_Section,"LF_lfItalic",(unsigned int)p_LogFont->lfItalic); enSaveInt(p_Section,"LF_lfUnderline",(unsigned int)p_LogFont->lfUnderline); enSaveInt(p_Section,"LF_lfStrikeOut",(unsigned int)p_LogFont->lfStrikeOut); enSaveInt(p_Section,"LF_lfCharSet",(unsigned int)p_LogFont->lfCharSet); enSaveInt(p_Section,"LF_lfOutPrecision",(unsigned int)p_LogFont->lfOutPrecision); enSaveInt(p_Section,"LF_lfClipPrecision",(unsigned int)p_LogFont->lfClipPrecision); enSaveInt(p_Section,"LF_lfQuality",(unsigned int)p_LogFont->lfQuality); enSaveInt(p_Section,"LF_lfPitchAndFamily",(unsigned int)p_LogFont->lfPitchAndFamily); enSaveString(p_Section,"LF_lfFaceName",(unsigned char*)p_LogFont->lfFaceName); } void enRestoreLogFont(char *p_Section, LOGFONT *p_LogFont) { #ifdef WIN32 p_LogFont->lfHeight=(long)enRestoreLong(p_Section,"LF_lfHeight",0L); p_LogFont->lfWidth=(long)enRestoreLong(p_Section,"LF_lfWidth",0L); p_LogFont->lfEscapement=(long)enRestoreLong(p_Section,"LF_lfEscapement",0L); p_LogFont->lfOrientation=(long)enRestoreLong(p_Section,"LF_lfOrientation",0L); p_LogFont->lfWeight=(long)enRestoreLong(p_Section,"LF_lfWeight",0L); #else p_LogFont->lfHeight=(int)enRestoreInt(p_Section,"LF_lfHeight",0); p_LogFont->lfWidth=(int)enRestoreInt(p_Section,"LF_lfWidth",0); p_LogFont->lfEscapement=(int)enRestoreInt(p_Section,"LF_lfEscapement",0); p_LogFont->lfOrientation=(int)enRestoreInt(p_Section,"LF_lfOrientation",0); p_LogFont->lfWeight=(int)enRestoreInt(p_Section,"LF_lfWeight",0); #endif p_LogFont->lfItalic=(BYTE)enRestoreInt(p_Section,"LF_lfItalic",0); p_LogFont->lfUnderline=(BYTE)enRestoreInt(p_Section,"LF_lfUnderline",0); p_LogFont->lfStrikeOut=(BYTE)enRestoreInt(p_Section,"LF_lfStrikeOut",0); p_LogFont->lfCharSet=(BYTE)enRestoreInt(p_Section,"LF_lfCharSet",0); p_LogFont->lfOutPrecision=(BYTE)enRestoreInt(p_Section,"LF_lfOutPrecision",0); p_LogFont->lfClipPrecision=(BYTE)enRestoreInt(p_Section,"LF_lfClipPrecision",0); p_LogFont->lfQuality=(BYTE)enRestoreInt(p_Section,"LF_lfQuality",0); p_LogFont->lfPitchAndFamily=(BYTE)enRestoreInt(p_Section,"LF_lfPitchAndFamily",0); enRestoreString(p_Section,"LF_lfFaceName","", (unsigned char*)p_LogFont->lfFaceName,LF_FACESIZE); }