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

📄 chatprint.c

📁 基于cc1010的设计实例
💻 C
字号:
/*****************************************************************************
 *                                                                           *
 *        **********                                                         *
 *       ************                                                        *
 *      ***        ***                                                       *
 *      ***   +++   ***                                                      *
 *      ***   + +   ***                                                      *
 *      ***   +                    CHIPCON CC1010 EXAMPLE PROGRAM            *
 *      ***   + +   ***                      CC1010 CHAT                     *
 *      ***   +++   ***                                                      *
 *      ***       ***                                                        *
 *       ***********                                                         *
 *        *********                                                          *
 *                                                                           *
 *****************************************************************************
 * Author:              JOL                                                  *
 *****************************************************************************
 * Revision history:                                                         *
 *                                                                           *
 * $Log: chatPrint.c,v $
 * Revision 1.1  2002/10/14 10:02:28  tos
 * Initial version in CVS.
 *
 *                                                                           *
 ****************************************************************************/

/*****************************************************************************
 *****************************************************************************
 *************    PRINTING FUNCTIONS (FOR THE TERMINAL WINDOW)   *************
 *****************************************************************************
 ****************************************************************************/
#include "chat.h"


//----------------------------------------------------------------------------
//  void printMessage(char *pName, bool isPrivate, char *pMessage, ...)
//
//  Description:
//      Print a message in the chat section of the terminal window
//
//  Arguments:
//      char xdata *pName
//			Pointer to the name of the message source
//
//      bool isPrivate
//			Is the message private (encrypted)?
//
//		char xdata *pMessage
//			Pointer to the message
//
//		byte messageLen
//			Length(*pMessage)
//----------------------------------------------------------------------------
void printMessage(char xdata *pName, bool isPrivate, char xdata *pMessage, byte messageLen) {
	byte n;

	// Switch to polled I/O
	INT_ENABLE(INUM_UART0, INT_OFF);
	INT_SETFLAG(INUM_UART0_TX, INT_SET);

	VT100_CHAT_SECTION();

	// Indicate private messages by printing it on a red background
	if (isPrivate) {
		VT100_SET_BGCOLOR(YELLOW, DIM);
	}

	// Print "Name: The message"
	printf("\n%s: ", pName);
	for (n = 0; n < messageLen; n++) {
		putchar(*(pMessage + n));
	}

	VT100_INPUT_SECTION();
	
	// Switch back to interrupt-driven I/O
	INT_SETFLAG(INUM_UART0_TX, INT_CLR);
	INT_ENABLE(INUM_UART0, INT_ON);

} // printMessage




//----------------------------------------------------------------------------
//  void printStatus(byte messageCode)
//
//  Description:
//      Print a status message at the top of the chat window
//
//  Arguments:
//      byte statusCode
//			Key exchange failed
//----------------------------------------------------------------------------
void printStatus(byte statusCode, byte address) {
	CLIENT_INFO xdata *pCI;

	// Switch to polled I/O
	INT_ENABLE(INUM_UART0, INT_OFF);
	INT_SETFLAG(INUM_UART0_TX, INT_SET);

	VT100_STATUS_SECTION();

	// Print the status message
	switch (statusCode) {
	case KEY_EXCHANGE_FAILED:
		VT100_SET_BGCOLOR(RED, DIM);
		VT100_SET_FGCOLOR(WHITE, BRIGHT);
		VT100_CLEAR_LINE();
		pCI = getClientInfo(address);
		printf("KEY EXCHANGE WITH %s FAILED! (THE MESSAGE WAS NOT SENT)", pCI->name);
		break;

	case KEY_EXCHANGE_OK:
		VT100_SET_BGCOLOR(GREEN, DIM);
		VT100_SET_FGCOLOR(WHITE, BRIGHT);
		VT100_CLEAR_LINE();
		pCI = getClientInfo(address);
		printf("KEY EXCHANGE WITH %s OK!", pCI->name);
		break;

	case DECRYPTION_MODE:
		VT100_SET_BGCOLOR(BLUE, DIM);
		VT100_SET_FGCOLOR(WHITE, BRIGHT);
		VT100_CLEAR_LINE();
		if (noDecryption) {
			printf("MESSAGE DECRYPTION IS OFF!", pCI->name);
		} else {
			printf("MESSAGE DECRYPTION IS ON!", pCI->name);
		}
		break;

	case DISCONNECTED:
		VT100_SET_BGCOLOR(RED, DIM);
		VT100_SET_FGCOLOR(WHITE, BRIGHT);
		VT100_CLEAR_LINE();
		printf("DISCONNECTED FROM SERVER!", pCI->name);
		break;
	}

	VT100_INPUT_SECTION();
	
	// Switch back to interrupt-driven I/O
	INT_SETFLAG(INUM_UART0_TX, INT_CLR);
	INT_ENABLE(INUM_UART0, INT_ON);

} // printMessage




//----------------------------------------------------------------------------
//  void printClientList(void)
//
//  Description:
//      Print the client list, 4 rows, 4 columns. 
//----------------------------------------------------------------------------
void printClientList(void) {
	byte col, row;
	byte n;

	// Switch to polled I/O
	INT_ENABLE(INUM_UART0, INT_OFF);
	INT_SETFLAG(INUM_UART0_TX, INT_SET);

	VT100_CLIENT_LIST_SECTION();

	// Clear old names
	for (n = 0; n < 4; n++) {
		VT100_GO_TO_POS((21 + n), 1);
		VT100_CLEAR_LINE();
	}
	
	// Initialize positions
	row = 21;
	col = 1;

	for (n = 0; n < MAX_CLIENTS; n++) {
		VT100_GO_TO_POS(row, (20 * col - 19));

		// Print "[index] Name"
		if (CI[n].address != INVALID_ADDRESS) {
			printf("[%02X] %s", (unsigned int) CI[n].address, CI[n].name);
			if (++col > 4) {
				col = 1;
				row++;
			}
		}		
	}

	VT100_INPUT_SECTION();
	
	// Switch back to interrupt-driven I/O
	INT_SETFLAG(INUM_UART0_TX, INT_CLR);
	INT_ENABLE(INUM_UART0, INT_ON);

} // printClientList




//----------------------------------------------------------------------------
//  void clearInputSection(void)
//
//  Description:
//      Clears the input line (dark cyan)
//----------------------------------------------------------------------------
void clearInputSection(void) {

	// Switch to polled I/O
	INT_ENABLE(INUM_UART0, INT_OFF);
	INT_SETFLAG(INUM_UART0_TX, INT_SET);

	VT100_INPUT_SECTION();
	VT100_CLEAR_LINE();

	// Switch back to interrupt-driven I/O
	INT_SETFLAG(INUM_UART0_TX, INT_CLR);
	INT_ENABLE(INUM_UART0, INT_ON);

} // clearInputSection

⌨️ 快捷键说明

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