📄 mirgroup.cpp
字号:
#include "mirgroup.h"
#include <windowsx.h>
#include <stdio.h>
typedef char SHORTSTRING[64];
typedef struct
{
char AreaName[64];
char IpAddress[16];
SHORTSTRING ServerCaption[10];
SHORTSTRING ServerName[10];
DWORD dwServerCount;
}AREAINFO;
AREAINFO m_AreaInfo[100];
int m_AreaCount = 0;
char m_grpBuffer[128 * 1024];
DWORD *dwOfsList = (DWORD*)&m_grpBuffer[12];
char * GetStreamPtr( int id )
{
if( id < 0 || id >= m_AreaCount * 2 + 2 )
return NULL;
return (&m_grpBuffer[dwOfsList[id * 2]]);
}
int GetStream( int id, char * stream )
{
if( id < 0 || id >= m_AreaCount * 2 + 2 )
return NULL;
memcpy( (void*)stream, (void*)&m_grpBuffer[dwOfsList[id * 2]], dwOfsList[id * 2 + 1] );
stream[dwOfsList[id * 2 + 1]] = 0x0a;
stream[dwOfsList[id * 2 + 1]+1] = 0;
return 1;
}
int GetSetting( char * stream, char * segment, char * name, char * setting )
{
char mtmp[3024];
int ilen = 0;
if( stream == 0 )
return 0;
if( segment == 0 )
return 0;
if( name == 0 )
return 0;
if( setting == 0 )
return 0;
setting[0] = '\0';
ilen = strlen( stream );
int iptr = -1;
int lstart = 0;
int sstart = 0;
#define FLAG_SEARCHSEG 0
#define FLAG_SEARCHNAME 0xff
#define FLAG_GETSETTING 0xff00
int iflag = FLAG_SEARCHSEG;
int i = 0;
for( i = 0;i < ilen;i ++ )
{
if( stream[i] == 0x0a || stream[i] == 0x0d )
{
if( iflag == FLAG_GETSETTING )
{
memcpy( (void*)mtmp, (void*)&stream[sstart], i - sstart );
mtmp[i - sstart] = '\0';
strcpy( setting, mtmp );
//printf( "Found %s\n", mtmp );
return 1;
}
lstart = i + 1;
}
if( iflag == FLAG_SEARCHNAME )
{
if( stream[i] == '=' )
{
memcpy( (void*)mtmp, (void*)&stream[lstart],i - lstart );
mtmp[i - lstart] = '\0';
if( stricmp( mtmp, name ) == 0 )
{
iflag = FLAG_GETSETTING;
sstart = i + 1;
}
printf( "%s\n", mtmp );
}
}
if( stream[i] == '[' )
{
if( iflag == FLAG_SEARCHNAME )
{
return 0;
}
iptr = i + 1;
}
if( stream[i] == ']' )
{
memcpy( (void*)mtmp, (void*)&stream[iptr], i - iptr);
mtmp[i-iptr] = '\0';
printf( "%s\n", mtmp );
if( stricmp( mtmp, segment ) == 0 )
iflag = FLAG_SEARCHNAME;
}
}
return 0;
}
int UnGroupStream( char * stream, int size )
{
int i = 0;
if( stream == NULL )
return 0;
if( size == 0 )
return 0;
for( i = 0;i < size;i ++ )
{
if( stream[i] & 1 )
{
stream[i] --;
}
else
{
stream[i] ++;
}
}
stream[size] = '\0';
return 1;
}
int ProcAreaInfo()
{
char tmps[200];
char name[3048];
char * ptrStream;
int pptr = 0;
int i = 0;
int iptr = 0;
ptrStream = GetStreamPtr( 0 );
if( ptrStream == NULL )
return 0;
GetSetting( ptrStream, "main", "name", name );
// MessageBox(0,name, 0, 0 );
int ilen = strlen( name );
for( i = 0;i <= ilen;i ++ )
{
if( name[i] == ';' || name[i] == '\0' )
{
memcpy( (void*)tmps, (void*)&name[iptr], i - iptr );
tmps[i-iptr] = '\0';
strcpy( m_AreaInfo[pptr].AreaName, tmps );
pptr ++;
iptr = i + 1;
}
}
for( i = 0;i < m_AreaCount;i ++ )
{
ptrStream = GetStreamPtr( i * 2 + 1 );
GetStream( i * 2 + 1, name );
if( ptrStream == NULL )
return 0;
if( !GetSetting( name, "server","servercount", tmps ))
{
if( !GetSetting( name, "group", "groupnum", tmps ))
{
return 0;
}
}
pptr = atoi( tmps );
m_AreaInfo[i].dwServerCount = pptr;
if( pptr <= 0 || pptr >= 9 )
return 0;
//if( i > 50 && i < 60 )MessageBox( 0, name, 0, 0 );
for( iptr = 0;iptr < pptr;iptr ++ )
{
sprintf( tmps, "Server%dCaption", iptr + 1);
if( !GetSetting( name, "server", tmps, m_AreaInfo[i].ServerCaption[iptr] ))
{
sprintf( tmps, "Group%d", iptr );
if( !GetSetting( name, "group", tmps, m_AreaInfo[i].ServerCaption[iptr] ))
{
return 0;
}
}
sprintf( tmps, "Server%dName", iptr + 1 );
if( !GetSetting( name, "server", tmps, m_AreaInfo[i].ServerName[iptr] ) )
{
sprintf( tmps, "GroupNick%d", iptr );
if( !GetSetting( name, "group", tmps, m_AreaInfo[i].ServerName[iptr] ))
{
return 0;
}
}
// MessageBox( 0, m_AreaInfo[i].ServerName[iptr], 0, 0 );
}
ptrStream = GetStreamPtr( i * 2 + 2 );
if( ptrStream == NULL )
return 0;
GetSetting( ptrStream, "setup", "ServerAddr", m_AreaInfo[i].IpAddress );
}
return 1;
}
int SetGroupFile( char * file )
{
// DWORD *pdw = (DWORD*)m_grpBuffer;
int filelen = 0;
int i = 0;
FILE * fp;
fp = fopen( file, "rb" );
if( fp == NULL )
return 0;
fseek( fp, 0, SEEK_END );
filelen = ftell( fp );
fseek( fp, 0, SEEK_SET );
fread( (void*)m_grpBuffer, filelen, 1,fp );
fclose( fp );
m_AreaCount = (int)m_grpBuffer[8] & 0xff;
UnGroupStream( (char*)&m_grpBuffer[dwOfsList[0]], filelen - dwOfsList[0] );
if( !ProcAreaInfo())
return 0;
return 1;
}
char tmpBufname[3048];
int SetAreaList( HWND hWnd )
{
int i = 0;
for( i = 0;i < m_AreaCount;i++)
{
ComboBox_AddString( hWnd, m_AreaInfo[i].AreaName );
}
ComboBox_SetCurSel( hWnd, 0 );
return 1;
}
int SetServerCaptionList( HWND hWnd, int AreaID )
{
int i = 0;
int icnt = 0;
icnt = ComboBox_GetCount( hWnd );
ComboBox_ResetContent( hWnd );
for( i = 0;i < icnt;i ++ )
{
ComboBox_DeleteString( hWnd, i );
}
if( AreaID >= 0 && AreaID < m_AreaCount )
{
for( i = 0;i < (int)m_AreaInfo[AreaID].dwServerCount;i ++ )
{
ComboBox_AddString( hWnd, m_AreaInfo[AreaID].ServerCaption[i] );
}
ComboBox_SetCurSel( hWnd, 0 );
return 1;
}
return 0;
}
int GetServerName( int AreaID, int ServerIndex, char * ServerName )
{
if( AreaID >= 0 && AreaID < m_AreaCount )
{
if( ServerIndex >= 0 && ServerIndex < (int)m_AreaInfo[AreaID].dwServerCount )
{
strcpy( ServerName, m_AreaInfo[AreaID].ServerName[ServerIndex] );
return 1;
}
return 0;
}
return 0;
}
int GetIpAddress( int AreaID, char * IpAddr )
{
if( AreaID >= 0 && AreaID < m_AreaCount )
{
strcpy( IpAddr, m_AreaInfo[AreaID].IpAddress );
return 1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -