📄 prefs.cpp
字号:
//*************************************************************************// MODULE : System Initialization Parameters support module *// AUTHOR : Ron Chernich *// PURPOSE: Class methods *// HISTORY: *// 21-MAR-95 First Version (MS Visual C++ 1.5) *//*************************************************************************#include "prefs.hpp"///////////////////////////////////////////////////////////////////////////// constructor tries to open the preferences file..//Preferences::Preferences (void){ ini.open(PREFS_NAME, PREFS_MODE); BOOL bOpen = __OPEN_TEST;// bOpen = FALSE; if (!bOpen) pBuffer = NULL; else { pBuffer = new char[MAX_PREF]; if (NULL == pBuffer) { ini.close(); bOpen = FALSE; } }}/////////// close prefs file, if open//Preferences::~Preferences (void){ if (bOpen) { ini.close(); DELETE_ARRAY pBuffer; }}/////////////////// The INI file contains lines of the form://// KEY = VALUE ;COMMENT//// (the whitespace around the VALUE and the comment are optional// This private member scans the file for a line starting// with the passed key string (ignoring case) and extracts the Value stuff// If a comment is present, it and any trailing white space are deleted.// RETURNS: pointer to the first non-space char after the equals sign or NULL//char *Preferences::FindKey (const char *pszKey){ ini.seekg(0); for (;;) { if (ini.eof()) break; ini.getline(pBuffer, MAX_PREF); char *cp = pBuffer; while (*cp) tolower(*cp++); #ifdef _DOS_ENV if (0 == strnicmp(pBuffer, pszKey, strlen(pszKey))) { #endif #ifdef UNIX // why do they use casecmp instead of icmp (which is standard?) if ( strncasecmp(pBuffer, pszKey, strlen(pszKey))) { #endif cp = strchr(pBuffer, '='); if (*cp) { while (*cp) if (SPACE != *(++cp)) break; if (*cp) { char *cp2 = strchr(cp, ';'); if (cp2) { while (SPACE == *(cp2 - 1)) --cp2; *cp2 = '\0'; } } } return cp; } } return 0;}///////////////// find and return the integer value associated with the passed key tag// string. If not found (or no INI file) return the passed default value// RETURNS: Integer value for key identifier//UINT16 Preferences::GetPrefInt (const char *pszKey, UINT16 nDef){ UINT16 nVal = nDef; if (bOpen) { char *cp = FindKey(pszKey); if (cp) nDef = (UINT16)atoi(cp); } return nDef;}////////////// find the passed key tag in the INI file and copy to the callers buffer// If not found (or no INI file) use the passed default value// RETURNS: Number of characters copied//UINT16 Preferences::GetPrefStr (const char *pszKey, const char *pszDef, char *psz, UINT16 n){ if (!bOpen) strncpy(psz, pszDef, n); else { char *cp = FindKey(pszKey); if (cp) strncpy(psz, cp, n); else strncpy(psz, pszDef, n); } return strlen(psz);}///////////////////////////////// EOF //////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -