878 lines
15 KiB
C++
878 lines
15 KiB
C++
![]() |
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <string.h>
|
|||
|
#include <ctype.h>
|
|||
|
#include <math.h>
|
|||
|
/* WIN32_LEAN_AND_MEAN?define???WINDOWS.H???
|
|||
|
????<EFBFBD><EFBFBD>?????<EFBFBD><EFBFBD>??????????????
|
|||
|
????????????????? */
|
|||
|
#define WIN32_LEAN_AND_MEAN
|
|||
|
#include <windows.h>
|
|||
|
#include <Mmsystem.h>
|
|||
|
#include "iphlpapi.h"
|
|||
|
#pragma comment(lib, "iphlpapi.lib ")
|
|||
|
#include "../systeminc/version.h"
|
|||
|
#include "../systeminc/tool.h"
|
|||
|
|
|||
|
|
|||
|
#ifdef _TIME_GET_TIME
|
|||
|
LARGE_INTEGER tickCount;
|
|||
|
LARGE_INTEGER CurrentTick;
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
void Delay(ULONG ulMicroSeconds)
|
|||
|
{
|
|||
|
LARGE_INTEGER timeStop;
|
|||
|
LARGE_INTEGER timeStart;
|
|||
|
LARGE_INTEGER Freq;
|
|||
|
ULONG ulTimeToWait;
|
|||
|
|
|||
|
if (!QueryPerformanceFrequency(&Freq))
|
|||
|
return;
|
|||
|
|
|||
|
ulTimeToWait = Freq.QuadPart * ulMicroSeconds / 1000 / 1000;
|
|||
|
|
|||
|
QueryPerformanceCounter(&timeStart);
|
|||
|
|
|||
|
timeStop = timeStart;
|
|||
|
|
|||
|
while (timeStop.QuadPart - timeStart.QuadPart < ulTimeToWait)
|
|||
|
{
|
|||
|
QueryPerformanceCounter(&timeStop);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BOOL isXP()
|
|||
|
{
|
|||
|
OSVERSIONINFOEX os;
|
|||
|
os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
|||
|
if (GetVersionEx((OSVERSIONINFO *)&os))
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ汾<DDB0><E6B1BE>Ϣ<EFBFBD>жϲ<D0B6><CFB2><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
|||
|
switch (os.dwMajorVersion){ //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
|||
|
case 4:
|
|||
|
return FALSE;
|
|||
|
case 5:
|
|||
|
return TRUE;
|
|||
|
case 6:
|
|||
|
return FALSE;
|
|||
|
default:
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
unsigned int TimeGetTime(void)
|
|||
|
{
|
|||
|
#ifdef _TIME_GET_TIME
|
|||
|
static __int64 time;
|
|||
|
QueryPerformanceCounter(&CurrentTick);
|
|||
|
return (unsigned int)(time = CurrentTick.QuadPart / tickCount.QuadPart);
|
|||
|
//return GetTickCount();
|
|||
|
#else
|
|||
|
return GetTickCount();
|
|||
|
//return timeGetTime();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
static int copyStringUntilDelim(unsigned char *, char delim, int, unsigned char *);
|
|||
|
|
|||
|
|
|||
|
// ??<3F><>???????<3F>t??????????
|
|||
|
int wordchk(char **pp)
|
|||
|
{
|
|||
|
char *p = *pp;
|
|||
|
|
|||
|
while (*p != 0)
|
|||
|
{
|
|||
|
switch (*p)
|
|||
|
{
|
|||
|
case '\t':
|
|||
|
p++;
|
|||
|
break;
|
|||
|
|
|||
|
case ' ':
|
|||
|
p++;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
*pp = p;
|
|||
|
return 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// ??<3F><>????????<3F><>???????????<3F>h
|
|||
|
int getword(char **pp, char *q)
|
|||
|
{
|
|||
|
int i = 0;
|
|||
|
char *p = *pp;
|
|||
|
|
|||
|
wordchk(&p);
|
|||
|
|
|||
|
for (i = 0; *p != ' ' && *p != '\t' && *p != '\0'; p++, q++, i++)
|
|||
|
{
|
|||
|
*q = *p;
|
|||
|
}
|
|||
|
|
|||
|
*q = '\0';
|
|||
|
*pp = p;
|
|||
|
|
|||
|
return i;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#if 0
|
|||
|
// ?????????
|
|||
|
void freadline( char *ptbuf, FILE *fp )
|
|||
|
{
|
|||
|
char buf;
|
|||
|
int i;
|
|||
|
|
|||
|
for( i = 0; ; i++ )
|
|||
|
{
|
|||
|
if( feof( fp ) != 0 )
|
|||
|
{
|
|||
|
*ptbuf--;
|
|||
|
*ptbuf = '\0';
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
fread( &buf, 1, sizeof( unsigned char ), fp );
|
|||
|
if( buf == ' ' )
|
|||
|
{
|
|||
|
*ptbuf++ = buf;
|
|||
|
}else if (buf == '\t'){
|
|||
|
*ptbuf++ = buf;
|
|||
|
}else if (buf != 0x0d && buf != 0x0a){
|
|||
|
*ptbuf++ = buf;
|
|||
|
}else{
|
|||
|
*ptbuf++ = '\0';
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
while ( feof(fp ) == 0 ){
|
|||
|
fread( &buf ,1 , sizeof(unsigned char) , fp );
|
|||
|
if (buf != 0x0d && buf != 0x0a ){
|
|||
|
fseek( fp, -1, SEEK_CUR);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
// ?<3F><>???<3F>i?????<3F><>???<3F><>????<3F>h??
|
|||
|
int strstr2(char **pp, char *q)
|
|||
|
{
|
|||
|
char *p = *pp;
|
|||
|
int i;
|
|||
|
|
|||
|
wordchk(&p);
|
|||
|
|
|||
|
for (i = 1; *p++ == *q++; i++)
|
|||
|
{
|
|||
|
if (*q == 0)
|
|||
|
{
|
|||
|
*pp = p;
|
|||
|
return i;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// ??<3F><>????????<3F><>???????<3F>k???<3F><>??
|
|||
|
int strint2(char **pp)
|
|||
|
{
|
|||
|
char moji[1024] = "";
|
|||
|
char *p = *pp;
|
|||
|
|
|||
|
getword(&p, moji);
|
|||
|
*pp = p;
|
|||
|
|
|||
|
return atoi(moji);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// ??<3F><>????????<3F><>??????long??<3F>k???<3F><>??
|
|||
|
long strlong2(char **pp)
|
|||
|
{
|
|||
|
char moji[1024] = "";
|
|||
|
char *p = *pp;
|
|||
|
|
|||
|
getword(&p, moji);
|
|||
|
*pp = p;
|
|||
|
|
|||
|
return atol(moji);
|
|||
|
}
|
|||
|
|
|||
|
// ?<3F><>?<3F><>??<3F>S??????????<3F><>?
|
|||
|
// ??<3F>k<EFBFBD><6B>NULL?? ... ?<3F><>?<3F><>????????
|
|||
|
// NULL ... <20><>???<3F><><EFBFBD>Z???
|
|||
|
inline unsigned char *searchDelimPoint(unsigned char *src, unsigned char delim)
|
|||
|
{
|
|||
|
unsigned char *pt = src;
|
|||
|
|
|||
|
while (1)
|
|||
|
{
|
|||
|
if (*pt == '\0')
|
|||
|
return (unsigned char *)0;
|
|||
|
|
|||
|
if (*pt < 0x80)
|
|||
|
{
|
|||
|
// 1bayte<74><65>????
|
|||
|
if (*pt == delim)
|
|||
|
{
|
|||
|
// ?<3F><>?<3F><>???????????????<3F><>?
|
|||
|
pt++;
|
|||
|
return pt;
|
|||
|
}
|
|||
|
pt++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// 2byte<74><65>????
|
|||
|
pt++;
|
|||
|
if (*pt == '\0')
|
|||
|
return (unsigned char *)0;
|
|||
|
pt++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
????<EFBFBD><EFBFBD>???????????????????<EFBFBD><EFBFBD><EFBFBD>e????????<EFBFBD><EFBFBD>???
|
|||
|
??????????
|
|||
|
|
|||
|
char *src : ???<EFBFBD><EFBFBD>??
|
|||
|
char delim : ????
|
|||
|
int count : ????????????????
|
|||
|
int maxlen : out ??????<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?????
|
|||
|
char *out : <EFBFBD><EFBFBD>?
|
|||
|
|
|||
|
|
|||
|
??<EFBFBD>k 0<EFBFBD><EFBFBD>?????<EFBFBD><EFBFBD>???
|
|||
|
1:<EFBFBD><EFBFBD>??<EFBFBD><EFBFBD><EFBFBD>Z?<EFBFBD><EFBFBD>???
|
|||
|
*/
|
|||
|
int getStringToken(char *src, char delim, int count, int maxlen, char *out)
|
|||
|
{
|
|||
|
int c = 1;
|
|||
|
int i;
|
|||
|
unsigned char *pt;
|
|||
|
|
|||
|
pt = (unsigned char *)src;
|
|||
|
for (i = 0; i < count - 1; i++)
|
|||
|
{
|
|||
|
if (pt == (unsigned char *)0)
|
|||
|
break;
|
|||
|
|
|||
|
pt = searchDelimPoint(pt, delim);
|
|||
|
}
|
|||
|
|
|||
|
if (pt == (unsigned char *)0)
|
|||
|
{
|
|||
|
out[0] = '\0';
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
return copyStringUntilDelim(pt, delim, maxlen, (unsigned char *)out);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
<EFBFBD><EFBFBD>????<EFBFBD><EFBFBD>????<EFBFBD><EFBFBD>?????????????????????
|
|||
|
|
|||
|
char *src : ??<EFBFBD><EFBFBD>??
|
|||
|
char delim : ????
|
|||
|
int maxlen : ?<EFBFBD><EFBFBD>??????
|
|||
|
char *out : <EFBFBD><EFBFBD>?
|
|||
|
|
|||
|
??<EFBFBD>k 0<EFBFBD><EFBFBD>?????<EFBFBD><EFBFBD>???
|
|||
|
1:<EFBFBD><EFBFBD>??<EFBFBD><EFBFBD><EFBFBD>Z?<EFBFBD><EFBFBD>???
|
|||
|
*/
|
|||
|
static int copyStringUntilDelim(unsigned char *src, char delim,
|
|||
|
int maxlen, unsigned char *out)
|
|||
|
{
|
|||
|
int i;
|
|||
|
|
|||
|
for (i = 0; i < maxlen; i++)
|
|||
|
{
|
|||
|
if (src[i] < 0x80)
|
|||
|
{
|
|||
|
// 1byte<74><65>????
|
|||
|
|
|||
|
if (src[i] == delim)
|
|||
|
{
|
|||
|
// ?<3F><>?<3F><>????<3F><>??
|
|||
|
out[i] = '\0';
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
// ???<3F><>?????
|
|||
|
out[i] = src[i];
|
|||
|
|
|||
|
// <20><><EFBFBD>Z<EFBFBD><5A>???<3F><>??
|
|||
|
if (out[i] == '\0')
|
|||
|
return 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// 2byte<74><65>????
|
|||
|
|
|||
|
// ???<3F><>?????
|
|||
|
out[i] = src[i];
|
|||
|
|
|||
|
i++;
|
|||
|
if (i >= maxlen) // ??????<3F><>???<3F><>??
|
|||
|
break;
|
|||
|
|
|||
|
// ???<3F><>?????
|
|||
|
out[i] = src[i];
|
|||
|
|
|||
|
// <20><><EFBFBD>Z<EFBFBD><5A>???<3F><>????????????????
|
|||
|
if (out[i] == '\0')
|
|||
|
return 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
out[i] = '\0';
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
<EFBFBD><EFBFBD>???????int<EFBFBD>k??????
|
|||
|
|
|||
|
char *src : ???<EFBFBD><EFBFBD>??
|
|||
|
char delim: ???????<EFBFBD><EFBFBD>??
|
|||
|
int count :????????? ??????????
|
|||
|
|
|||
|
return value : <EFBFBD>k
|
|||
|
|
|||
|
*/
|
|||
|
int getIntegerToken(char *src, char delim, int count)
|
|||
|
{
|
|||
|
char s[128];
|
|||
|
|
|||
|
getStringToken(src, delim, count, sizeof(s)-1, s);
|
|||
|
|
|||
|
if (s[0] == '\0')
|
|||
|
return -1;
|
|||
|
|
|||
|
return atoi(s);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
double???????????
|
|||
|
char *src : ???<EFBFBD><EFBFBD>??
|
|||
|
char delim: ???????<EFBFBD><EFBFBD>??
|
|||
|
int count :????????? ??????????
|
|||
|
|
|||
|
return value: <EFBFBD>k
|
|||
|
*/
|
|||
|
double getDoubleToken(char *src, char delim, int count)
|
|||
|
{
|
|||
|
char s[128];
|
|||
|
|
|||
|
getStringToken(src, delim, count, sizeof(s)-1, s);
|
|||
|
|
|||
|
return strtod(s, NULL);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
chop??(UNIX?<EFBFBD><EFBFBD>?<EFBFBD><EFBFBD>??)
|
|||
|
|
|||
|
char *src : ??<EFBFBD><EFBFBD>??? ???????<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>???????
|
|||
|
|
|||
|
*/
|
|||
|
void chop(char *src)
|
|||
|
{
|
|||
|
int i;
|
|||
|
|
|||
|
for (i = 0;; i++)
|
|||
|
{
|
|||
|
if (src[i] == 0)
|
|||
|
break;
|
|||
|
if (src[i] == '\n' && src[i + 1] == '\0')
|
|||
|
{
|
|||
|
src[i] = '\0';
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
int?<EFBFBD><EFBFBD>?????????
|
|||
|
|
|||
|
int *a : <EFBFBD><EFBFBD>??????
|
|||
|
int siz : <EFBFBD><EFBFBD>?????
|
|||
|
int count : ???????????
|
|||
|
<EFBFBD><EFBFBD>????????????
|
|||
|
*/
|
|||
|
void shiftIntArray(int *a, int siz, int count)
|
|||
|
{
|
|||
|
int i;
|
|||
|
|
|||
|
for (i = 0; i < siz - count; i++)
|
|||
|
{
|
|||
|
a[i] = a[i + count];
|
|||
|
}
|
|||
|
for (i = siz - count; i < siz; i++)
|
|||
|
{
|
|||
|
a[i] = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// 62<36><32><EFBFBD><EFBFBD>???int?<3F><>???
|
|||
|
// 0-9,a-z(10-35),A-Z(36-61)
|
|||
|
int a62toi(char *a)
|
|||
|
{
|
|||
|
int ret = 0;
|
|||
|
int fugo = 1;
|
|||
|
|
|||
|
while (*a != NULL)
|
|||
|
{
|
|||
|
ret *= 62;
|
|||
|
if ('0' <= (*a) && (*a) <= '9')
|
|||
|
ret += (*a) - '0';
|
|||
|
else
|
|||
|
if ('a' <= (*a) && (*a) <= 'z')
|
|||
|
ret += (*a) - 'a' + 10;
|
|||
|
else
|
|||
|
if ('A' <= (*a) && (*a) <= 'Z')
|
|||
|
ret += (*a) - 'A' + 36;
|
|||
|
else
|
|||
|
if (*a == '-')
|
|||
|
fugo = -1;
|
|||
|
else
|
|||
|
return 0;
|
|||
|
a++;
|
|||
|
}
|
|||
|
return ret*fugo;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
<EFBFBD><EFBFBD>???????int<EFBFBD>k??????
|
|||
|
|
|||
|
char *src : ???<EFBFBD><EFBFBD>??
|
|||
|
char delim: ???????<EFBFBD><EFBFBD>??
|
|||
|
int count :????????? ??????????
|
|||
|
|
|||
|
return value : <EFBFBD>k
|
|||
|
|
|||
|
*/
|
|||
|
int getInteger62Token(char *src, char delim, int count)
|
|||
|
{
|
|||
|
char s[128];
|
|||
|
|
|||
|
getStringToken(src, delim, count, sizeof(s)-1, s);
|
|||
|
if (s[0] == '\0')
|
|||
|
return -1;
|
|||
|
|
|||
|
return a62toi(s);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>??<EFBFBD><EFBFBD><EFBFBD><EFBFBD>??????<EFBFBD><EFBFBD>???<EFBFBD>{????
|
|||
|
|
|||
|
char *s1 : <EFBFBD><EFBFBD>???
|
|||
|
char *s2 : <EFBFBD><EFBFBD>???
|
|||
|
int len : ?<EFBFBD><EFBFBD><EFBFBD>{?<EFBFBD><EFBFBD>???
|
|||
|
|
|||
|
|
|||
|
*/
|
|||
|
int strncmpi(char *s1, char *s2, int len)
|
|||
|
{
|
|||
|
int i;
|
|||
|
int c1, c2;
|
|||
|
|
|||
|
for (i = 0; i < len; i++)
|
|||
|
{
|
|||
|
if (s1[i] == '\0' || s2[i] == '\0')
|
|||
|
return 0;
|
|||
|
|
|||
|
c1 = tolower(s1[i]);
|
|||
|
c2 = tolower(s2[i]);
|
|||
|
|
|||
|
if (c1 != c2)
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RECT intToRect(int left, int top, int right, int bottom)
|
|||
|
{
|
|||
|
RECT rc = { left, top, right, bottom };
|
|||
|
|
|||
|
return rc;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*****************************************************************
|
|||
|
???????<EFBFBD><EFBFBD>??????1?<EFBFBD>\?<EFBFBD><EFBFBD>????????
|
|||
|
0?<EFBFBD><EFBFBD>??SJIS??
|
|||
|
******************************************************************/
|
|||
|
int isOnlySpaceChars(char *data)
|
|||
|
{
|
|||
|
int i = 0;
|
|||
|
int returnflag = 0;
|
|||
|
|
|||
|
while (data[i] != '\0')
|
|||
|
{
|
|||
|
returnflag = 0;
|
|||
|
if ((unsigned char)data[i] == ' ')
|
|||
|
returnflag = 1;
|
|||
|
if (IsDBCSLeadByte(data[i]))
|
|||
|
{
|
|||
|
if ((unsigned char)data[i] == 0x81
|
|||
|
&& (unsigned char)data[i + 1] == 0x40)
|
|||
|
{
|
|||
|
returnflag = 1;
|
|||
|
}
|
|||
|
i++;
|
|||
|
}
|
|||
|
if (returnflag == 0)
|
|||
|
return 0;
|
|||
|
i++;
|
|||
|
}
|
|||
|
|
|||
|
if (i == 0)
|
|||
|
return 0;
|
|||
|
|
|||
|
return returnflag;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/****************************
|
|||
|
<EFBFBD><EFBFBD>????????<EFBFBD><EFBFBD><EFBFBD>V???
|
|||
|
buffer: ????
|
|||
|
string: <EFBFBD><EFBFBD><EFBFBD>V??<EFBFBD><EFBFBD>??
|
|||
|
whereToinsert: ???<EFBFBD><EFBFBD><EFBFBD>V???
|
|||
|
****************************/
|
|||
|
void insertString(char *buffer, char *string, int whereToInsert)
|
|||
|
{
|
|||
|
int stringLength, bufferLength, i;
|
|||
|
|
|||
|
stringLength = strlen(string);
|
|||
|
bufferLength = strlen(buffer);
|
|||
|
|
|||
|
for (i = 0; i <= bufferLength - whereToInsert; i++)
|
|||
|
{
|
|||
|
buffer[bufferLength + stringLength - i] = buffer[bufferLength - i];
|
|||
|
}
|
|||
|
for (i = 0; i < stringLength; i++)
|
|||
|
{
|
|||
|
buffer[whereToInsert + i] = string[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/****************************
|
|||
|
<EFBFBD><EFBFBD>???????<EFBFBD><EFBFBD><EFBFBD>V???
|
|||
|
buffer: ????
|
|||
|
character: <EFBFBD><EFBFBD><EFBFBD>V??<EFBFBD><EFBFBD>??
|
|||
|
whereToinsert: ???<EFBFBD><EFBFBD><EFBFBD>V???
|
|||
|
****************************/
|
|||
|
void insertChar(char *buffer, char character, int whereToInsert)
|
|||
|
{
|
|||
|
int bufferLength, i;
|
|||
|
|
|||
|
bufferLength = strlen(buffer);
|
|||
|
|
|||
|
for (i = 0; i <= bufferLength - whereToInsert; i++)
|
|||
|
{
|
|||
|
buffer[bufferLength + 1 - i] = buffer[bufferLength - i];
|
|||
|
}
|
|||
|
buffer[whereToInsert] = character;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*************************************************************
|
|||
|
??????????????????
|
|||
|
*************************************************************/
|
|||
|
typedef struct tagEscapeChar
|
|||
|
{
|
|||
|
char escapechar;
|
|||
|
char escapedchar;
|
|||
|
} EscapeChar;
|
|||
|
|
|||
|
static EscapeChar escapeChar[] =
|
|||
|
{
|
|||
|
{ '\n', 'n' },
|
|||
|
{ ',', 'c' },
|
|||
|
{ '|', 'z' },
|
|||
|
{ '\\', 'y' },
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
// ?????<3F><>??<3F>G<EFBFBD>Ч<EFBFBD>????
|
|||
|
// ??<3F>k<EFBFBD><6B><EFBFBD>G<EFBFBD>Ч<EFBFBD>?(?????<3F><>?????????<3F><>??<3F><>?)
|
|||
|
char makeCharFromEscaped(char c)
|
|||
|
{
|
|||
|
int i;
|
|||
|
|
|||
|
for (i = 0; i < sizeof(escapeChar) / sizeof(escapeChar[0]); i++)
|
|||
|
{
|
|||
|
if (escapeChar[i].escapedchar == c)
|
|||
|
{
|
|||
|
c = escapeChar[i].escapechar;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return c;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*----------------------------------------
|
|||
|
* makeEscapeString??<EFBFBD><EFBFBD>???<EFBFBD><EFBFBD>???????
|
|||
|
* ??
|
|||
|
* src char* ????<EFBFBD><EFBFBD>????????<EFBFBD>v??
|
|||
|
* <EFBFBD><EFBFBD>?<EFBFBD>k
|
|||
|
* src ?<EFBFBD><EFBFBD>??(???<EFBFBD>V??????????)
|
|||
|
----------------------------------------*/
|
|||
|
char *makeStringFromEscaped(char *src)
|
|||
|
{
|
|||
|
int srclen = strlen(src);
|
|||
|
int searchindex = 0;
|
|||
|
for (int i = 0; i < srclen; i++){
|
|||
|
if (IsDBCSLeadByte(src[i])){
|
|||
|
src[searchindex++] = src[i++];
|
|||
|
src[searchindex++] = src[i];
|
|||
|
}
|
|||
|
else{
|
|||
|
if (src[i] == '\\'){
|
|||
|
int j;
|
|||
|
i++;
|
|||
|
for (j = 0; j < sizeof(escapeChar) / sizeof(escapeChar[0]); j++)
|
|||
|
if (escapeChar[j].escapedchar == src[i]){
|
|||
|
src[searchindex++] = escapeChar[j].escapechar;
|
|||
|
goto NEXT;
|
|||
|
}
|
|||
|
src[searchindex++] = src[i];
|
|||
|
}
|
|||
|
else
|
|||
|
src[searchindex++] = src[i];
|
|||
|
}
|
|||
|
NEXT:
|
|||
|
;
|
|||
|
}
|
|||
|
src[searchindex] = '\0';
|
|||
|
return src;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*----------------------------------------
|
|||
|
* ????????
|
|||
|
* ??
|
|||
|
* src char* ????<EFBFBD><EFBFBD>??
|
|||
|
* dest char* ????????<EFBFBD><EFBFBD>??
|
|||
|
* sizeofdest int dest ? ???
|
|||
|
* <EFBFBD><EFBFBD>?<EFBFBD>k
|
|||
|
* dest ?<EFBFBD><EFBFBD>??(???<EFBFBD>V??????????)
|
|||
|
----------------------------------------*/
|
|||
|
char *makeEscapeString(char *src, char *dest, int sizeofdest)
|
|||
|
{
|
|||
|
int srclen = strlen(src);
|
|||
|
int destindex = 0;
|
|||
|
for (int i = 0; i < srclen; i++){
|
|||
|
if (destindex + 1 >= sizeofdest)
|
|||
|
break;
|
|||
|
if (IsDBCSLeadByte(src[i])){
|
|||
|
if (destindex + 2 < sizeofdest){
|
|||
|
dest[destindex++] = src[i++];
|
|||
|
dest[destindex++] = src[i];
|
|||
|
}
|
|||
|
else
|
|||
|
break;
|
|||
|
}
|
|||
|
else{
|
|||
|
BOOL dirty = FALSE;
|
|||
|
char escapechar = '\0';
|
|||
|
for (int j = 0; j < sizeof(escapeChar) / sizeof(escapeChar[0]); j++)
|
|||
|
if (src[i] == escapeChar[j].escapechar){
|
|||
|
dirty = TRUE;
|
|||
|
escapechar = escapeChar[j].escapedchar;
|
|||
|
break;
|
|||
|
}
|
|||
|
if (dirty == TRUE){
|
|||
|
if (destindex + 2 < sizeofdest){
|
|||
|
dest[destindex++] = '\\';
|
|||
|
dest[destindex++] = escapechar;
|
|||
|
}
|
|||
|
else
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
dest[destindex++] = src[i];
|
|||
|
}
|
|||
|
}
|
|||
|
dest[destindex] = '\0';
|
|||
|
return dest;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/***************************************************************
|
|||
|
????????? by Jun
|
|||
|
***************************************************************/
|
|||
|
/*
|
|||
|
char *src <EFBFBD><EFBFBD>????adress
|
|||
|
int srclen <EFBFBD><EFBFBD>????src???<EFBFBD><EFBFBD>?
|
|||
|
int keystring ????????????
|
|||
|
char *encoded ????????<EFBFBD><EFBFBD>????<EFBFBD>t??????????
|
|||
|
int *encodedlen ????????<EFBFBD><EFBFBD>???<EFBFBD><EFBFBD>?????????
|
|||
|
int maxencodedlen ?<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?????????
|
|||
|
*/
|
|||
|
void jEncode(char *src, int srclen, int key,
|
|||
|
char *encoded, int *encodedlen, int maxencodedlen)
|
|||
|
{
|
|||
|
char sum = 0;
|
|||
|
int i;
|
|||
|
|
|||
|
if (srclen + 1 > maxencodedlen)
|
|||
|
{
|
|||
|
// ???????<3F><>?? 1 ????
|
|||
|
// ????????????????<3F>O????????
|
|||
|
*encodedlen = maxencodedlen;
|
|||
|
for (i = 0; i < (*encodedlen); i++)
|
|||
|
{
|
|||
|
encoded[i] = src[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (srclen + 1 <= maxencodedlen)
|
|||
|
{
|
|||
|
// ??????????
|
|||
|
*encodedlen = srclen + 1;
|
|||
|
for (i = 0; i < srclen; i++)
|
|||
|
{
|
|||
|
sum = sum + src[i];
|
|||
|
// <20>I<EFBFBD>d??7?<3F><>????2?<3F><>???????????<3F>T<EFBFBD><54>
|
|||
|
if (((key % 7) == (i % 5)) || ((key % 2) == (i % 2)))
|
|||
|
{
|
|||
|
src[i] = ~src[i];
|
|||
|
}
|
|||
|
}
|
|||
|
for (i = 0; i < (*encodedlen); i++)
|
|||
|
{
|
|||
|
if (abs((key%srclen)) > i)
|
|||
|
{
|
|||
|
encoded[i] = src[i] + sum*((i*i) % 3); // ?????????
|
|||
|
}
|
|||
|
else
|
|||
|
// key%srclen??<3F>t?<3F>u??????????<3F>t?
|
|||
|
if (abs((key%srclen)) == i)
|
|||
|
{
|
|||
|
encoded[i] = sum;
|
|||
|
}
|
|||
|
else
|
|||
|
if (abs((key%srclen)) < i)
|
|||
|
{
|
|||
|
encoded[i] = src[i - 1] + sum*((i*i) % 7); // ?????????
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
char *src ?????????
|
|||
|
int srclen ??????????????<EFBFBD><EFBFBD>?
|
|||
|
int key ????????<EFBFBD>i???
|
|||
|
char *decoded ???????<EFBFBD><EFBFBD>???<EFBFBD><EFBFBD>?
|
|||
|
int *decodedlen ???????<EFBFBD><EFBFBD>???<EFBFBD><EFBFBD>?
|
|||
|
*/
|
|||
|
void jDecode(char *src, int srclen, int key, char *decoded, int *decodedlen)
|
|||
|
{
|
|||
|
char sum;
|
|||
|
int i;
|
|||
|
|
|||
|
*decodedlen = srclen - 1;
|
|||
|
sum = src[abs(key % (*decodedlen))];
|
|||
|
|
|||
|
for (i = 0; i < srclen; i++)
|
|||
|
{
|
|||
|
if (abs((key % (*decodedlen))) > i)
|
|||
|
{
|
|||
|
decoded[i] = src[i] - sum*((i*i) % 3);
|
|||
|
}
|
|||
|
|
|||
|
if (abs((key % (*decodedlen))) < i)
|
|||
|
{
|
|||
|
decoded[i - 1] = src[i] - sum*((i*i) % 7);
|
|||
|
}
|
|||
|
}
|
|||
|
for (i = 0; i < (*decodedlen); i++)
|
|||
|
{
|
|||
|
if (((key % 7) == (i % 5)) || ((key % 2) == (i % 2)))
|
|||
|
{
|
|||
|
decoded[i] = ~decoded[i];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
bool GetMacAddress(char *strMac)
|
|||
|
{
|
|||
|
PIP_ADAPTER_INFO pAdapterInfo;
|
|||
|
DWORD AdapterInfoSize;
|
|||
|
TCHAR szMac[32] = { 0 };
|
|||
|
DWORD Err;
|
|||
|
AdapterInfoSize = 0;
|
|||
|
Err = GetAdaptersInfo(NULL, &AdapterInfoSize);
|
|||
|
if ((Err != 0) && (Err != ERROR_BUFFER_OVERFLOW)){
|
|||
|
//TRACE("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʧ<CFA2>ܣ<EFBFBD>");
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ڴ<EFBFBD>
|
|||
|
pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, AdapterInfoSize);
|
|||
|
if (pAdapterInfo == NULL){
|
|||
|
//TRACE("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ڴ<EFBFBD>ʧ<EFBFBD><CAA7>");
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
if (GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize) != 0){
|
|||
|
//TRACE(_T("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʧ<CFA2>ܣ<EFBFBD>\n"));
|
|||
|
GlobalFree(pAdapterInfo);
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
sprintf_s(strMac, 64, "%02X-%02X-%02X-%02X-%02X-%02X",
|
|||
|
pAdapterInfo->Address[0],
|
|||
|
pAdapterInfo->Address[1],
|
|||
|
pAdapterInfo->Address[2],
|
|||
|
pAdapterInfo->Address[3],
|
|||
|
pAdapterInfo->Address[4],
|
|||
|
pAdapterInfo->Address[5]);
|
|||
|
|
|||
|
GlobalFree(pAdapterInfo);
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|