?? micqcomponents.cpp
字號:
strcpy(alter_cmd, "alter");
if(msga_cmd[0]=='\0')
strcpy(msga_cmd, "msga");
if(url_cmd[0]=='\0')
strcpy(url_cmd, "url");
if(change_cmd[0]=='\0')
strcpy(change_cmd, "change");
if ( Verbose )
{
M_print( "UIN = %ld\n", UIN );
M_print( "port = %ld\n", remote_port );
M_print( "passwd = %s\n", passwd );
M_print( "server = %s\n", server );
M_print( "status = %ld\n", set_status );
M_print( "# of contacts = %d\n", Num_Contacts );
M_print( "UIN of contact[0] = %ld\n", Contacts[0].uin );
M_print( "Message_cmd = %s\n", message_cmd );
}
if (UIN == 0 )
{
fprintf( stderr, "Bad .micqrc file. No UIN found aborting.\a\n" );
exit( 1);
}
}
/*******************************************************
Gets config info from the rc file in the users home
directory.
********************************************************/
void Get_Unix_Config_Info( void )
{
char *path;
FD_T rcf;
#ifdef _WIN32
path = ".\\";
#endif
#ifdef UNIX
path = getenv( "HOME" );
strcat( path, "/" );
#endif
#ifdef __amigaos__
path = "PROGDIR:";
#endif
strcpy( rcfile, path );
strcat( rcfile, ".micqrc" );
rcf = open( rcfile, O_RDONLY );
if ( rcf == -1 )
{
if ( errno == ENOENT ) /* file not found */
{
Initalize_RC_File();
}
else
{
perror( "Error reading config file exiting " );
exit( 1 );
}
}
else
{
Read_RC_File( rcf );
}
}
void Print_IP( DWORD uin )
{
int i;
#if 0
struct in_addr sin;
#endif
for ( i=0; i< Num_Contacts; i++ )
{
if ( Contacts[i].uin == uin )
{
if ( * (DWORD *)Contacts[i].current_ip != -1L )
{
M_print( "%d.%d.%d.%d", Contacts[i].current_ip[0],
Contacts[i].current_ip[1],
Contacts[i].current_ip[2],
Contacts[i].current_ip[3] );
#if 0
sin.s_addr = Contacts[i].current_ip;
M_print( "%s", inet_ntoa( sin ) );
#endif
}
else
{
M_print( "unknown" );
}
return;
}
}
M_print( "unknown" );
}
/************************************************
Gets the TCP port of the specified UIN
************************************************/
DWORD Get_Port( DWORD uin )
{
int i;
for ( i=0; i< Num_Contacts; i++ )
{
if ( Contacts[i].uin == uin )
{
return Contacts[i].port;
}
}
return -1L;
}
/********************************************
Converts an intel endian character sequence to
a DWORD
*********************************************/
DWORD Chars_2_DW( unsigned char *buf )
{
DWORD i;
i= buf[3];
i <<= 8;
i+= buf[2];
i <<= 8;
i+= buf[1];
i <<= 8;
i+= buf[0];
return i;
}
/********************************************
Converts an intel endian character sequence to
a WORD
*********************************************/
WORD Chars_2_Word( unsigned char *buf )
{
WORD i;
i= buf[1];
i <<= 8;
i += buf[0];
return i;
}
/********************************************
Converts a DWORD to
an intel endian character sequence
*********************************************/
void DW_2_Chars( unsigned char *buf, DWORD num )
{
buf[3] = ( unsigned char ) ((num)>>24)& 0x000000FF;
buf[2] = ( unsigned char ) ((num)>>16)& 0x000000FF;
buf[1] = ( unsigned char ) ((num)>>8)& 0x000000FF;
buf[0] = ( unsigned char ) (num) & 0x000000FF;
}
/********************************************
Converts a WORD to
an intel endian character sequence
*********************************************/
void Word_2_Chars( unsigned char *buf, WORD num )
{
buf[1] = ( unsigned char ) (((unsigned)num)>>8) & 0x00FF;
buf[0] = ( unsigned char ) ((unsigned)num) & 0x00FF;
}
void Prompt( void )
{
/*M_print( SERVCOL "Micq> " NOCOL );*/
fflush( stdout );
}
void Time_Stamp( void )
{
struct tm *thetime;
time_t p;
p=time(NULL);
thetime=localtime(&p);
M_print( "%.02d:%.02d:%.02d",thetime->tm_hour,thetime->tm_min,thetime->tm_sec );
}
void Add_User( SOK_T sok, DWORD uin, char *name )
{
FD_T rcf;
rcf = open( rcfile, O_RDWR | O_APPEND );
M_fdprint( rcf, "%d %s\n", uin, name );
close( rcf );
Contacts[ Num_Contacts ].uin = uin;
Contacts[ Num_Contacts ].status = STATUS_OFFLINE;
Contacts[ Num_Contacts ].last_time = -1L;
Contacts[ Num_Contacts ].current_ip[0] = 0xff;
Contacts[ Num_Contacts ].current_ip[1] = 0xff;
Contacts[ Num_Contacts ].current_ip[2] = 0xff;
Contacts[ Num_Contacts ].current_ip[3] = 0xff;
Contacts[ Num_Contacts ].port = 0;
Contacts[ Num_Contacts ].sok = (SOK_T ) -1L;
Contacts[ Num_Contacts ].vis_list = FALSE;
memcpy( Contacts[ Num_Contacts ].nick, name, sizeof( Contacts->nick ) );
Num_Contacts++;
snd_contact_list( sok );
}
/************************************************
* This function should save your auto reply messages in the rc file.
*
* NOTE: the code isn't realy neat yet, I hope to change that soon.
*
* Added on 6-20-98 by Fryslan
*
***********************************************/
int Save_RC()
{
FD_T rcf;
time_t t;
int i, j;
rcf = open( rcfile, O_RDWR );
if ( rcf == -1 ) return -1;
M_fdprint( rcf, "# This file was generated by Another ICQ of %s %s\n",__TIME__,__DATE__);
t = time( NULL );
M_fdprint( rcf, "# This file was generated on %s", ctime( &t ) );
M_fdprint( rcf, "UIN %d\n", UIN );
M_fdprint( rcf, "Password %s\n", passwd );
M_fdprint( rcf, "Status %d\n", Current_Status );
M_fdprint( rcf, "Server %s\n", "icq1.mirabilis.com" );
M_fdprint( rcf, "Port %d\n", 4000 );
if ( Logging )
M_fdprint( rcf, "#No_Log\n" );
else
M_fdprint( rcf, "No_Log\n" );
if ( Russian )
M_fdprint( rcf, "\nRussian\n#if you want KOI8-R to CP1251 Russain translation uncomment the above line.\n" );
else
M_fdprint( rcf, "\n#Russian\n#if you want KOI8-R to CP1251 Russain translation uncomment the above line.\n" );
if ( auto_resp )
M_fdprint( rcf, "\n#Automatic responses on.\nAuto\n" );
else
M_fdprint( rcf, "\n#Automatic responses off.\n#Auto\n" );
M_fdprint( rcf, "\n# Below are the commands which can be changed to most anything you want :)\n" );
M_fdprint( rcf, "message_cmd %s\n",message_cmd);
M_fdprint( rcf, "info_cmd %s\n",info_cmd);
M_fdprint( rcf, "quit_cmd %s\n",quit_cmd);
M_fdprint( rcf, "reply_cmd %s\n",reply_cmd);
M_fdprint( rcf, "again_cmd %s\n",again_cmd);
M_fdprint( rcf, "list_cmd %s\n",list_cmd);
M_fdprint( rcf, "away_cmd %s\n",away_cmd);
M_fdprint( rcf, "na_cmd %s\n",na_cmd);
M_fdprint( rcf, "dnd_cmd %s\n",dnd_cmd);
M_fdprint( rcf, "online_cmd %s\n",online_cmd);
M_fdprint( rcf, "occ_cmd %s\n",occ_cmd);
M_fdprint( rcf, "ffc_cmd %s\n",ffc_cmd);
M_fdprint( rcf, "inv_cmd %s\n",inv_cmd);
M_fdprint( rcf, "search_cmd %s\n",search_cmd);
M_fdprint( rcf, "status_cmd %s\n",status_cmd);
M_fdprint( rcf, "auth_cmd %s\n",auth_cmd);
M_fdprint( rcf, "auto_cmd %s\n",auto_cmd);
M_fdprint( rcf, "add_cmd %s\n",add_cmd);
M_fdprint( rcf, "change_cmd %s\n",change_cmd);
M_fdprint( rcf, "save_cmd %s\n",save_cmd);
M_fdprint( rcf, "alter_cmd %s\n",alter_cmd);
M_fdprint( rcf, "msga_cmd %s\n",msga_cmd);
M_fdprint( rcf, "url_cmd %s\n",url_cmd);
M_fdprint( rcf, "update_cmd %s\n",update_cmd);
M_fdprint( rcf, "\n#Now auto response messages\n" );
M_fdprint( rcf, "auto_rep_str_away %s\n",auto_rep_str_away);
M_fdprint( rcf, "auto_rep_str_na %s\n",auto_rep_str_na);
M_fdprint( rcf, "auto_rep_str_dnd %s\n",auto_rep_str_dnd);
M_fdprint( rcf, "auto_rep_str_occ %s\n",auto_rep_str_occ);
M_fdprint( rcf, "auto_rep_str_inv %s\n",auto_rep_str_inv);
M_fdprint( rcf, "\n# Ok now the contact list\n" );
M_fdprint( rcf, "Contacts\n" );
/* adding contacts to the rc file. */
/* we start counting at zero in the index. */
for (i=0;i<Num_Contacts;i++)
{
if ( ! ( Contacts[i].uin & 0x80000000L ) )
{
if ( Contacts[i].vis_list )
{
M_fdprint( rcf, "*" );
}
M_fdprint( rcf, "%d %s\n",Contacts[i].uin,Contacts[i].nick);
/* M_fdprint( rcf, "#Begining of aliases for %s\n", Contacts[i].nick ); */
for ( j=0; j< Num_Contacts; j++ )
{
if ( Contacts[j].uin == -Contacts[i].uin )
{
M_fdprint( rcf, "%s ", Contacts[j].nick );
}
}
M_fdprint( rcf, "\n" );
/* M_fdprint( rcf, "\n#End of aliases for %s\n", Contacts[i].nick ); */
}
}
M_fdprint( rcf, "\n" );
return close( rcf );
}
/*************************************************************************
*
* Function: log_event
*
* Purpose: Log the event provided to the log with a time stamp.
* Andrew Frolov dron@ilm.net
*
* 6-20-98 Added names to the logs. Fryslan
*
*************************************************************************/
int log_event( char *desc, char *msg, DWORD uin )
{
FILE *msgfd;
char buffer[256];
time_t timeval;
char *path;
if ( ! Logging )
return 0;
#ifdef _WIN32
path = ".\\";
#endif
#ifdef UNIX
path = getenv( "HOME" );
path = strdup( path );
strcat( path, "/" );
#endif
#ifdef __amigaos__
path = "PROGDIR:";
#endif
strcpy( buffer, path );
strcat( buffer, "micq_log" );
if( ( msgfd = fopen(buffer, "a") ) == (FILE *) NULL )
{
fprintf(stderr, "Couldn't open %s for logging\n",
buffer);
return(-1);
}
timeval = time(0);
if ( ! strcasecmp(UIN2nick(uin),"Unknow UIN"))
fprintf(msgfd, "\n%-24.24s %s %ld\n%s\n", ctime(&timeval), desc, uin, msg);
else
fprintf(msgfd, "\n%-24.24s %s %s\n%s\n", ctime(&timeval), desc, UIN2nick(uin), msg);
fclose(msgfd);
#ifdef UNIX
chmod( buffer, 0600 );
free( path );
#endif
return(0);
}
void clrscr(void)
{
/* clears the screen */
int x;
char newline = '\n';
for(x = 0; x<=25; x++)
M_print("%c",newline);
}
/************************************************************
Displays a hex dump of buf on the screen.
*************************************************************/
void Hex_Dump( void *buffer, size_t len )
{
int i;
int j;
char *buf;
buf = (char*)buffer;
for ( i=0 ; i < len; i++ )
{
M_print( "%02x ", ( unsigned char ) buf[i] );
if ( ( i & 15 ) == 15 )
{
M_print( " " );
for ( j = 15; j >= 0; j-- )
{
if ( buf[i-j] > 31 )
M_print( "%c", buf[i-j] );
else
M_print( "." );
if ( ( (i-j) & 3 ) == 3 )
M_print( " " );
}
M_print( "\n" );
}
else if ( ( i & 7 ) == 7 )
M_print( "- " );
else if ( ( i & 3 ) == 3 )
M_print( " " );
}
M_print( " " );
for ( j = i % 16; j > 0; j-- )
{
if ( buf[i-j] > 31 )
M_print( "%c", buf[i-j] );
else
M_print( "." );
if ( ( (i-j) & 3 ) == 3 )
M_print( " " );
}
M_print( "\n" );
}
/**************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -