?? micqcomponents.cpp
字號:
}
receiveURL.DoModal();
// M_print( " URL Message.\n Description: " MESSCOL "%s" NOCOL "\n", url_desc );
// M_print( " URL : " MESSCOL "%s" NOCOL "\n", url_data );
}
else if (type == CONTACT_MESS || type==MRCONTACT_MESS)
{
tmp = strchr( data, '\xFE' );
*tmp = 0;
M_print( "\nContact List.\n" MESSCOL "============================================\n" NOCOL "%d Contacts\n", atoi(data) );
tmp++;
m = atoi(data);
for(x=0; m > x ; x++)
{
data = tmp;
tmp = strchr( tmp, '\xFE' );
*tmp = 0;
M_print( CONTACTCOL "%s\t\t\t", data );
tmp++;
data = tmp;
tmp = strchr( tmp, '\xFE' );
*tmp = 0;
M_print( MESSCOL "%s" NOCOL "\n" , data );
tmp++;
}
}
else
{
// rus_conv ("wk",data);
log_event("You received instant message",data,uin);
if (!strcmp(String_Print_UIN_Name( uin ),"")) {
CRecvMsgDlg *newMessage;
newMessage = new CRecvMsgDlg;
newMessage->m_received_from_uin=uin;
newMessage->m_received_from_nick="Unknown";
newMessage->m_received_msg=(char*)data;
newMessage->DoModal();
}
else {
CRecvMsgDlg *newMessage;
newMessage = new CRecvMsgDlg;
newMessage->m_received_from_uin=uin;
newMessage->m_received_from_nick=String_Print_UIN_Name( uin );
newMessage->m_received_msg=(char*)data;
newMessage->DoModal();
/* CRecvDlgThread *pThread;
pThread = new CRecvDlgThread;
pThread->received_uin=uin;
pThread->received_nick=String_Print_UIN_Name( uin );
pThread->received_msg=(char*)data;
pThread->CreateThread();
*/ }
// M_print( NOCOL "\n" );
}
}
const char *Get_Country_Name( int code )
{
int i;
for ( i = 0; Country_Codes[i].code != 0xffff; i++)
{
if ( Country_Codes[i].code == code )
{
return Country_Codes[i].name;
}
}
if ( Country_Codes[i].code == code )
{
return Country_Codes[i].name;
}
return NULL;
}
/***************************************************************
Turns keybord echo off for the password
****************************************************************/
S_DWORD Echo_Off( void )
{
#ifdef UNIX
struct termios attr; /* used for getting and setting terminal
attributes */
/* Now turn off echo */
if (tcgetattr(STDIN_FILENO, &attr) != 0) return(-1);
/* Start by getting current attributes. This call copies
all of the terminal paramters into attr */
attr.c_lflag &= ~(ECHO);
/* Turn off echo flag. NOTE: We are careful not to modify any
bits except ECHO */
if (tcsetattr(STDIN_FILENO,TCSAFLUSH,&attr) != 0) return(-2);
/* Wait for all of the data to be printed. */
/* Set all of the terminal parameters from the (slightly)
modified struct termios */
/* Discard any characters that have been typed but not yet read */
#endif
return 0;
}
/***************************************************************
Turns keybord echo back on after the password
****************************************************************/
S_DWORD Echo_On( void )
{
#ifdef UNIX
struct termios attr; /* used for getting and setting terminal
attributes */
if (tcgetattr(STDIN_FILENO, &attr) != 0) return(-1);
attr.c_lflag |= ECHO;
if(tcsetattr(STDIN_FILENO,TCSANOW,&attr) != 0) return(-1);
#endif
return 0;
}
/**************************************************************
Same as fM_print but for FD_T's
***************************************************************/
void M_fdprint( FD_T fd, char *str, ... )
{
va_list args;
int k;
char buf[2048]; /* this should big enough */
assert( buf != NULL );
assert( 2048 >= strlen( str ) );
va_start( args, str );
vsprintf( buf, str, args );
k = write( fd, buf, strlen( buf ) );
if ( k != (int)strlen( buf ) )
{
perror(str);
exit ( 10);
}
va_end( args );
}
/************************************************************
Prints the preformated sting to stdout.
Plays sounds if appropriate.
************************************************************/
static void M_prints( char *str )
{
/* int i;
for ( i=0; str[i] != 0; i++ )
{
if ( str[i] != '\a' )
printf( "%c", str[i] );
else if ( SOUND_ON == Sound )
printf( "\a" );
}
*/
AfxMessageBox(str);
}
/**************************************************************
M_print with colors.
***************************************************************/
void M_print( char *str, ... )
{
va_list args;
char buf[2048];
char *str1, *str2;
va_start( args, str );
#ifndef CURSES_UI
vsprintf( buf, str, args );
str2 = buf;
while ( (void *) NULL != ( str1 = strchr( str2, '\x1b' ) ) )
{
str1[0] = 0;
M_prints( str2 );
str1[0] = 0x1B;
str2 = str1;
if ( FALSE ) {;}
/* ADD_COLOR( NOCOL )
ADD_COLOR( SERVCOL )
ADD_COLOR( MESSCOL )
ADD_COLOR( CONTACTCOL )
ADD_COLOR( CLIENTCOL )
*/ else
{
str2++;
}
}
M_prints( str2 );
#else
#error No curses support included yet.
#error You must add it yourself.
#endif
va_end( args );
}
/***********************************************************
Reads a line of input from the file descriptor fd into buf
an entire line is read but no more than len bytes are
actually stored
************************************************************/
int M_fdnreadln( FD_T fd, char *buf, size_t len )
{
int i,j;
char tmp;
assert( buf != NULL );
assert( len > 0 );
tmp = 0;
for ( i=-1; ( tmp != '\n' ) ; )
{
if ( ( i < len ) || ( i == -1 ) )
{
i++;
j = read( fd, &buf[i], 1 );
tmp = buf[i];
}
else
{
j = read( fd, &tmp, 1 );
}
assert( j != -1 );
if ( j == 0 )
{
buf[i] = 0;
return -1;
}
}
if ( i < 1 )
{
buf[i] = 0;
}
else
{
if ( buf[i-1] == '\r' )
{
buf[i-1] = 0;
}
else
{
buf[i] = 0;
}
}
return 0;
}
/********************************************
returns a string describing the status or
a NULL if no such string exists
*********************************************/
char *Convert_Status_2_Str( int status )
{
if ( STATUS_OFFLINE == status ) /* this because -1 & 0xFFFF is not -1 */
{
return "Offline";
}
switch ( status & 0xffff )
{
case STATUS_ONLINE:
return "Online";
break;
case STATUS_DND:
return "Do not disturb";
break;
case STATUS_AWAY:
return "Away";
break;
case STATUS_OCCUPIED:
return "Occupied";
break;
case STATUS_NA:
return "Not available";
break;
case STATUS_INVISIBLE:
return "Invisible";
break;
case STATUS_INVISIBLE_2:
return "Invisible mode 2";
break;
case STATUS_FREE_CHAT:
return "Free for chat";
break;
default :
return NULL;
break;
}
}
/********************************************
prints out the status of new_status as a string
if possible otherwise as a hex number
*********************************************/
void Print_Status( DWORD new_status )
{
if ( Convert_Status_2_Str( new_status ) != NULL )
{
M_print( "%s", Convert_Status_2_Str( new_status ) );
if ( Verbose )
M_print( " %02X",( WORD ) ( new_status >> 16 ) );
}
else
{
M_print( "%08lX", new_status );
}
}
/**********************************************
* Returns the nick of a UIN if we know it else
* it will return Unknow UIN
**********************************************/
char *UIN2nick( DWORD uin)
{
int i;
for ( i=0; i < Num_Contacts; i++ )
{
if ( Contacts[i].uin == uin )
break;
}
if ( i == Num_Contacts )
{
return "Unknow UIN";
}
else
{
return Contacts[i].nick;
}
}
/**********************************************
Prints the name of a user or there UIN if name
is not know.
***********************************************/
int Print_UIN_Name( DWORD uin )
{
int i;
for ( i=0; i < Num_Contacts; i++ )
{
if ( Contacts[i].uin == uin )
break;
}
if ( i == Num_Contacts )
{
// M_print( CLIENTCOL "%lu" NOCOL, uin );
return -1 ;
}
else
{
// M_print( "%s%s%s", CONTACTCOL, Contacts[i].nick, NOCOL );
return i;
}
}
/*********************************************
Converts a nick name into a uin from the contact
list.
**********************************************/
DWORD nick2uin( char *nick )
{
int i;
BOOL non_numeric=FALSE;
for ( i=0; i< Num_Contacts; i++ )
{
if ( ! strncasecmp( nick, Contacts[i].nick, 19 ) )
{
if ( (S_DWORD) Contacts[i].uin > 0 )
return Contacts[i].uin;
else
return -Contacts[i].uin; /* alias */
}
}
for ( i=0; i < strlen( nick ); i++ )
{
if ( ! isdigit( (int) nick[i] ) )
{
non_numeric=TRUE;
break;
}
}
if ( non_numeric )
return -1; /* not found and not a number */
else
return atoi( nick );
}
/**************************************************
Automates the process of creating a new user.
***************************************************/
void Init_New_User( void )
{
SOK_T sok;
srv_net_icq_pak pak;
int s;
struct timeval tv;
fd_set readfds;
#ifdef _WIN32
WSADATA wsaData;
int i;
#endif
#ifdef _WIN32
i = WSAStartup( 0x0101, &wsaData );
if ( i != 0 ) {
#ifdef FUNNY_MSGS
perror("Windows Sockets broken blame Bill -");
#else
perror("Sorry, can't initialize Windows Sockets...");
#endif
exit(1);
}
#endif
M_print( "\nCreating Connection...\n");
sok = Connect_Remote( server, remote_port, STDERR );
if ( ( sok == -1 ) || ( sok == 0 ) )
{
M_print( "Couldn't establish connection\n" );
exit( 1 );
}
M_print( "Sending Request...\n" );
reg_new_user( sok, passwd );
for ( ; ; )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -