⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winmain.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   StartupInfo.cb = sizeof(STARTUPINFO) ;
   GetStartupInfo ( & StartupInfo ) ;

   if ( StartupInfo.dwFlags & STARTF_USESHOWWINDOW ) return 0 ;
   else                                              return 1 ;

}



#endif // defined _CONSOLE && ! defined NOCRT



////////////////////////////////////////////
//              GETARGUMENT               //
////////////////////////////////////////////



#if ! defined NOARG && ( defined _CONSOLE || defined _WINDOWS && ! defined _USRDLL ) && ! defined NOCRT



#ifndef _MSC_VER
static wchar_t **wargv_dummy_ ;
#endif



// 堷悢傪庢摼偡傞乮ANSI斉乯
char *GetArgumentA ( int nCount ) {
   return __argv [ nCount ] ;
}



// 堷悢傪庢摼偡傞乮UNICODE斉乯
wchar_t *GetArgumentW ( int nCount ) {
   return __wargv [ nCount ] ;
}



#ifdef _UNICODE
// 堷悢傪弶婜壔偡傞乮ANSI斉乯
// 惉岟偡傟偽 0 傪丄幐攕偡傟偽 0 埲奜傪曉偡
static int SetArgumentA ( void ) {

   if ( ! ( __argv = (char**) malloc ( ( __argc + 1 ) * sizeof(char*) ) ) ) return 1 ;

   for ( int nCount = 0 ; nCount <= __argc ; nCount ++ ) {
      if ( ! __wargv [ nCount ] ) __argv [ nCount ] = NULL ;
      else {
         char *string = w2adup ( __wargv [ nCount ] ) ;
         if ( ! string ) return 1 ;
         __argv [ nCount ] = string ;
      }
   }

   return 0 ;
}
#else
// 堷悢傪弶婜壔偡傞乮UNICODE斉乯
// 惉岟偡傟偽 0 傪丄幐攕偡傟偽 0 埲奜傪曉偡
static int SetArgumentW ( void ) {

   if ( ! ( __wargv = (wchar_t**) malloc ( ( __argc + 1 ) * sizeof(wchar_t*) ) ) ) return 1 ;

   for ( int nCount = 0 ; nCount <= __argc ; nCount ++ ) {
      if ( ! __argv [ nCount ] ) __wargv [ nCount ] = NULL ;
      else {
         wchar_t *string = a2wdup ( __argv [ nCount ] ) ;
         if ( ! string ) return 1 ;
         __wargv [ nCount ] = string ;
      }
   }

   return 0 ;
}
#endif



#endif // ! defined NOARG && ( defined _CONSOLE || defined _WINDOWS && ! defined _USRDLL ) && ! defined NOCRT



////////////////////////////////////////////
//            GETWINMAINCMDLINE           //
////////////////////////////////////////////



#if defined NOARG && ! defined _USRDLL



#ifdef NOCRT
#undef ismbblead
#define ismbblead IsDBCSLeadByte
#endif



// WinMain 宍幃偺堷悢傪庢摼偡傞乮ANSI斉乯
char *GetWinMainCmdLineA ( void ) {

   char *szCommandLine ;
   static char szDummy [] = "" ;
   int IsInQuote = 0 ;

   szCommandLine = GetCommandLineA () ;
   if ( ! szCommandLine ) szCommandLine = szDummy ;

   while ( *szCommandLine > 0x20 || *szCommandLine && IsInQuote ) {
      if ( *szCommandLine == '\"' ) IsInQuote = ! IsInQuote ;
      if ( ismbblead ( (unsigned char) *szCommandLine ) && *( szCommandLine + 1 ) ) szCommandLine ++ ;
      szCommandLine ++ ;
   }

   while ( *szCommandLine && *szCommandLine <= 0x20 ) szCommandLine ++ ;

   return szCommandLine ;
}


// WinMain 宍幃偺堷悢傪庢摼偡傞乮UNICODE斉乯
wchar_t *GetWinMainCmdLineW ( void ) {

   wchar_t *szCommandLine ;
   static wchar_t szDummy [] = L"" ;
   int IsInQuote = 0 ;

   szCommandLine = GetCommandLineW () ;
   if ( ! szCommandLine ) szCommandLine = szDummy ;

   while ( *szCommandLine > 0x20 || *szCommandLine && IsInQuote ) {
      if ( *szCommandLine == '\"' ) IsInQuote = ! IsInQuote ;
      szCommandLine ++ ;
   }

   while ( *szCommandLine && *szCommandLine <= 0x20 ) szCommandLine ++ ;

   return szCommandLine ;
}



#endif // defined NOARG && ! defined _USRDLL



////////////////////////////////////////////
//                a/wdup ()               //
////////////////////////////////////////////



#if ! defined NOCRT



// ANSI暥帤楍傪儚僀僪暥帤偵曄姺偟偰暋惢偡傞
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
wchar_t *a2wdup ( const char *string ) {
   return a2wduplen ( string, -1, NULL ) ;
}



// ANSI暥帤楍傪儚僀僪暥帤偵曄姺偟偰暋惢偡傞乮挿偝傪庢摼乯
// 挿偝偑 -1 側傜僰儖廔抂暥帤楍偲尒側偡
// 弌椡偝傟偨挿偝傪 p_dstlen 偵奿擺乮昁梫偱側偗傟偽 NULL 偱傕壜乯
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
wchar_t *a2wduplen ( const char *string, int srclen, int *p_dstlen ) {

   int length ;
   wchar_t *buffer ;

   if ( ! ( length = MultiByteToWideChar ( CP_ACP, 0, string, srclen, NULL, 0 ) ) ) return NULL ;
   if ( ! ( buffer = (wchar_t*) malloc ( length * sizeof(wchar_t) ) ) ) return NULL ;
   if ( ! ( length = MultiByteToWideChar ( CP_ACP, 0, string, srclen, buffer, length ) ) ) { free ( buffer ) ; return NULL ; }

   if ( p_dstlen ) *p_dstlen = length ;

   return buffer ;
}



// 儚僀僪暥帤楍傪ANSI暥帤楍偵曄姺偟偰暋惢偡傞
// 曄姺偱偒側偄暥帤偑偁傟偽 errno 偵 EILSEQ 傪僙僢僩偡傞
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
char *w2adup ( const wchar_t *string ) {
   return w2aduplen ( string, -1, NULL ) ;
}



// 儚僀僪暥帤楍傪ANSI暥帤楍偵曄姺偟偰暋惢偡傞乮挿偝傪庢摼乯
// 挿偝偑 -1 側傜僰儖廔抂暥帤楍偲尒側偡
// 弌椡偝傟偨挿偝傪 p_dstlen 偵奿擺乮昁梫偱側偗傟偽 NULL 偱傕壜乯
// 曄姺偱偒側偄暥帤偑偁傟偽 errno 偵 EILSEQ 傪僙僢僩偡傞
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
char *w2aduplen ( const wchar_t *string, int srclen, int *p_dstlen ) {

   int IsUsedDefaultChar = 0 ;

   int length ;
   char *buffer ;

   if ( ! ( length = WideCharToMultiByte ( CP_ACP, 0, string, srclen, NULL, 0, NULL, NULL ) ) ) return NULL ;
   if ( ! ( buffer = (char*) malloc ( length * sizeof(char) ) ) ) return NULL ;
   if ( ! ( length = WideCharToMultiByte ( CP_ACP, 0, string, srclen, buffer, length, NULL, & IsUsedDefaultChar ) ) ) { free ( buffer ) ; return NULL ; }

   if ( p_dstlen ) *p_dstlen = length ;

   if ( IsUsedDefaultChar ) errno = EILSEQ ;

   return buffer ;
}



#endif // ! defined NOCRT



////////////////////////////////////////////
//            strdup_expand ()            //
////////////////////////////////////////////



#if ! defined NOCRT



// 嵟戝挿傪巜掕偟偰暥帤傪暋惢偡傞乮ANSI斉乯
// string 偺挿偝偑 maxlen 埲忋側傜 NULL 傪曉偡
// 巜掕偝傟偨挿偝傪梋暘偵妋曐偡傞
char *strdup_expand ( const char *string, size_t maxlen, size_t addlen ) {

   size_t len = strlen ( string ) ;
   if ( len >= maxlen ) return NULL ;

   char *buffer = (char*) malloc ( ( len + addlen + 1 ) * sizeof(char) ) ;
   if ( buffer ) strcpy ( buffer, string ) ;

   return buffer ;
}



// 嵟戝挿傪巜掕偟偰暥帤傪暋惢偡傞乮UNICODE斉乯
// string 偺挿偝偑 maxlen 埲忋側傜 NULL 傪曉偡
// 巜掕偝傟偨挿偝傪梋暘偵妋曐偡傞
wchar_t *wcsdup_expand ( const wchar_t *string, size_t maxlen, size_t addlen ) {

   size_t len = wcslen ( string ) ;
   if ( len >= maxlen ) return NULL ;

   wchar_t *buffer = (wchar_t*) malloc ( ( len + addlen + 1 ) * sizeof(wchar_t) ) ;
   if ( buffer ) wcscpy ( buffer, string ) ;

   return buffer ;
}



#endif // ! defined NOCRT



////////////////////////////////////////////
//             osver / winver             //
////////////////////////////////////////////



#if ! defined _MSC_VER || _MSC_VER >= 1500 || defined NOCRT || defined OSVER_WINVER_TEST



unsigned int get_osver_winver_ ( int is_get_winver ) {

   static unsigned int osver ;
   static unsigned int winver ;

   if ( ! winver ) {

#if defined NOCRT
      HANDLE hProcessHeap = GetProcessHeap () ;
      OSVERSIONINFOA *pOsVersionInfo = (OSVERSIONINFOA*) HeapAlloc ( hProcessHeap, HEAP_ZERO_MEMORY, sizeof(OSVERSIONINFOA) ) ;
#else
      OSVERSIONINFOA OsVersionInfo = { 0 } ;
      OSVERSIONINFOA *pOsVersionInfo = & OsVersionInfo ;
#endif
      if ( pOsVersionInfo ) {
         pOsVersionInfo->dwOSVersionInfoSize = sizeof(OSVERSIONINFOA) ;
         GetVersionExA ( pOsVersionInfo ) ;

         if ( pOsVersionInfo->dwPlatformId != VER_PLATFORM_WIN32_NT ) osver = ( pOsVersionInfo->dwBuildNumber & 0x7FFF ) | 0x8000 ;
         else                                                         osver = ( pOsVersionInfo->dwBuildNumber & 0x7FFF ) ;

         winver = ( pOsVersionInfo->dwMajorVersion << 8 ) + pOsVersionInfo->dwMinorVersion ;

#if defined NOCRT
         HeapFree ( hProcessHeap, 0, pOsVersionInfo ) ;
#endif
      }
   }

   if ( is_get_winver ) return winver ;
   else                 return osver ;
}



#endif // ! defined _MSC_VER || _MSC_VER >= 1500 || defined NOCRT || defined OSVER_WINVER_TEST



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -