kopia lustrzana https://github.com/jamescoxon/dl-fldigi
				
				
				
			WRAP binary files
* Add character handling in Rx for both received and transmit echo
    characters when sending binary data.
			
			
				pull/1/head
			
			
		
							rodzic
							
								
									8fdb2ca89e
								
							
						
					
					
						commit
						de95906f1d
					
				| 
						 | 
				
			
			@ -164,6 +164,7 @@
 | 
			
		|||
 | 
			
		||||
#include "notifydialog.h"
 | 
			
		||||
#include "macroedit.h"
 | 
			
		||||
#include "rx_extract.h"
 | 
			
		||||
#include "wefax-pic.h"
 | 
			
		||||
 | 
			
		||||
#define LOG_TO_FILE_MLABEL     _("Log all RX/TX text")
 | 
			
		||||
| 
						 | 
				
			
			@ -5863,7 +5864,9 @@ char *get_rxtx_data()
 | 
			
		|||
 | 
			
		||||
void add_rxtx_char(int data)
 | 
			
		||||
{
 | 
			
		||||
	if (rxtx_raw_len == RAW_BUFF_LEN) {
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
	if (rxtx_raw_len == RAW_BUFF_LEN || 
 | 
			
		||||
		((rxtx_raw_len == RAW_BUFF_LEN -1) && (data & 0xFF00))) {
 | 
			
		||||
		memset(rxtx_raw_buff, 0, RAW_BUFF_LEN+1);
 | 
			
		||||
		rxtx_raw_len = 0;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -5889,8 +5892,10 @@ char *get_rx_data()
 | 
			
		|||
 | 
			
		||||
void add_rx_char(int data)
 | 
			
		||||
{
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
	add_rxtx_char(data);
 | 
			
		||||
	if (rx_raw_len == RAW_BUFF_LEN) {
 | 
			
		||||
	if (rx_raw_len == RAW_BUFF_LEN || 
 | 
			
		||||
		((rx_raw_len == RAW_BUFF_LEN -1) && (data & 0xFF00))) {
 | 
			
		||||
		memset(rx_raw_buff, 0, RAW_BUFF_LEN+1);
 | 
			
		||||
		rx_raw_len = 0;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -5916,11 +5921,15 @@ char *get_tx_data()
 | 
			
		|||
 | 
			
		||||
void add_tx_char(int data)
 | 
			
		||||
{
 | 
			
		||||
	ENSURE_THREAD(FLMAIN_TID);
 | 
			
		||||
	add_rxtx_char(data);
 | 
			
		||||
	if (tx_raw_len == RAW_BUFF_LEN) {
 | 
			
		||||
	if (tx_raw_len == RAW_BUFF_LEN || 
 | 
			
		||||
		((tx_raw_len == RAW_BUFF_LEN -1) && (data & 0xFF00))) {
 | 
			
		||||
		memset(tx_raw_buff, 0, RAW_BUFF_LEN+1);
 | 
			
		||||
		tx_raw_len = 0;
 | 
			
		||||
	}
 | 
			
		||||
	if (data & 0xFF00) // UTF-8 character
 | 
			
		||||
		tx_raw_buff[tx_raw_len++] = (data >> 8) & 0xFF;
 | 
			
		||||
	tx_raw_buff[tx_raw_len++] = (unsigned char)data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5935,10 +5944,15 @@ static void put_rx_char_flmain(unsigned int data, int style)
 | 
			
		|||
	const char **asc = ascii3;
 | 
			
		||||
	trx_mode mode = active_modem->get_mode();
 | 
			
		||||
 | 
			
		||||
	if (mailclient || mailserver || arqmode)
 | 
			
		||||
	if (mailclient || mailserver)
 | 
			
		||||
		asc = ascii2;
 | 
			
		||||
	if (arqmode || extracting)
 | 
			
		||||
		asc = ascii3;
 | 
			
		||||
	if (mode == MODE_RTTY || mode == MODE_CW)
 | 
			
		||||
		asc = ascii;
 | 
			
		||||
	if (extracting) {
 | 
			
		||||
		style = FTextBase::RECV;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (asc == ascii2 && (data < ' ') && iscntrl(data))
 | 
			
		||||
		style = FTextBase::CTRL;
 | 
			
		||||
| 
						 | 
				
			
			@ -5949,7 +5963,10 @@ static void put_rx_char_flmain(unsigned int data, int style)
 | 
			
		|||
 | 
			
		||||
	speak(data);
 | 
			
		||||
 | 
			
		||||
	if ((data & 0x80) == 0x80) {
 | 
			
		||||
	if (extracting) {
 | 
			
		||||
		add_rx_char(data);
 | 
			
		||||
		ReceiveText->add(asc[data & 0xFF], style);
 | 
			
		||||
	} else if ((data & 0x80) == 0x80) {
 | 
			
		||||
		if (firstUTF8 == 0)
 | 
			
		||||
			firstUTF8 = data;
 | 
			
		||||
		else {
 | 
			
		||||
| 
						 | 
				
			
			@ -5967,7 +5984,7 @@ static void put_rx_char_flmain(unsigned int data, int style)
 | 
			
		|||
			ReceiveText->add('\n', style);
 | 
			
		||||
		} else {
 | 
			
		||||
			add_rx_char(data);
 | 
			
		||||
			ReceiveText->add(asc[data & 0xFF], style);
 | 
			
		||||
			ReceiveText->add(data & 0xFF, style);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6313,22 +6330,27 @@ int get_tx_char(void)
 | 
			
		|||
	return c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static string sch;
 | 
			
		||||
 | 
			
		||||
void put_echo_char(unsigned int data, int style)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	if (!data) return;
 | 
			
		||||
 | 
			
		||||
    if (progdefaults.QSKadjust && (active_modem->get_mode() == MODE_CW))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	static unsigned int last = 0;
 | 
			
		||||
	const char **asc = ascii3;
 | 
			
		||||
	const char **asc = NULL;
 | 
			
		||||
 | 
			
		||||
	add_tx_char(data);
 | 
			
		||||
 | 
			
		||||
	if (mailclient || mailserver)
 | 
			
		||||
		asc = ascii2;
 | 
			
		||||
	if (active_modem->get_mode() == MODE_RTTY ||
 | 
			
		||||
		active_modem->get_mode() == MODE_CW)
 | 
			
		||||
	else if (arq_text_available)
 | 
			
		||||
		asc = ascii3;
 | 
			
		||||
	else if ( active_modem->get_mode() == MODE_RTTY ||
 | 
			
		||||
			  active_modem->get_mode() == MODE_CW)
 | 
			
		||||
		asc = ascii;
 | 
			
		||||
 | 
			
		||||
	if (data == '\r' && last == '\r') // reject multiple CRs
 | 
			
		||||
| 
						 | 
				
			
			@ -6340,13 +6362,17 @@ void put_echo_char(unsigned int data, int style)
 | 
			
		|||
		style = FTextBase::CTRL;
 | 
			
		||||
 | 
			
		||||
#if FLDIGI_FLTK_API_MAJOR == 1 && FLDIGI_FLTK_API_MINOR == 3
 | 
			
		||||
	string sch;
 | 
			
		||||
	sch.clear();
 | 
			
		||||
	if (data & 0xFF00) {
 | 
			
		||||
		sch += (data >> 8) & 0xFF;
 | 
			
		||||
		sch += (data & 0xFF);
 | 
			
		||||
	} else
 | 
			
		||||
		sch = asc[data & 0xFF];
 | 
			
		||||
	if (asc != NULL) { // MAIL / ARQ / RTTY / CW
 | 
			
		||||
		sch.assign(asc[data & 0xFF]);
 | 
			
		||||
	} else if ((data & 0xFF00) == 0x8000) { //UTF-8 extended character
 | 
			
		||||
		sch.assign("  ");
 | 
			
		||||
		sch[0] = 0x80;
 | 
			
		||||
		sch[1] = (data & 0xFF);
 | 
			
		||||
	} else { // keyboard character including MSB set chars
 | 
			
		||||
		sch.assign(" ");
 | 
			
		||||
		sch[0] = data;
 | 
			
		||||
	}
 | 
			
		||||
	REQ(&FTextRX::addstr, ReceiveText, sch, style);
 | 
			
		||||
#else
 | 
			
		||||
	REQ(&FTextBase::addchr, ReceiveText, data, style);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,4 +26,6 @@ extern const char *txtWrapInfo;
 | 
			
		|||
extern void rx_extract_add(int c);
 | 
			
		||||
extern void select_flmsg_pathname();
 | 
			
		||||
 | 
			
		||||
extern bool extracting;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,6 +62,14 @@ const char *ascii[256] = {
 | 
			
		|||
	"t",     "u",     "v",     "w",   
 | 
			
		||||
	"x",     "y",     "z",     "{",    
 | 
			
		||||
	"|",     "}",     "~",     ""
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const char *ascii2[256] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -97,17 +105,25 @@ const char *ascii2[256] = {
 | 
			
		|||
	"t",     "u",     "v",     "w",   
 | 
			
		||||
	"x",     "y",     "z",     "{",    
 | 
			
		||||
	"|",     "}",     "~",     "<DEL>"
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const char *ascii3[256] = {
 | 
			
		||||
	".",     ".",     ".",     ".",
 | 
			
		||||
	".",     ".",     ".",     ".",
 | 
			
		||||
	"\b",    ".",     "\n",    ".", 
 | 
			
		||||
	".",    "\r",     ".",     ".",
 | 
			
		||||
	".",     ".",     ".",     ".",
 | 
			
		||||
	".",     ".",     ".",     ".",
 | 
			
		||||
	".",     ".",     ".",     ".",
 | 
			
		||||
	".",     ".",     ".",     ".",
 | 
			
		||||
	"=",     "=",     "=",     "=",
 | 
			
		||||
	"=",     "=",     "=",     "=",
 | 
			
		||||
	"=",     "=",     "\n",    "=", 
 | 
			
		||||
	"=",     "=",     "=",     "=",
 | 
			
		||||
	"=",     "=",     "=",     "=",
 | 
			
		||||
	"=",     "=",     "=",     "=",
 | 
			
		||||
	"=",     "=",     "=",     "=",
 | 
			
		||||
	"=",     "=",     "=",     "=",
 | 
			
		||||
	" ",     "!",     "\"",    "#",    
 | 
			
		||||
	"$",     "%",     "&",     "\'",   
 | 
			
		||||
	"(",     ")",     "*",     "+",    
 | 
			
		||||
| 
						 | 
				
			
			@ -132,5 +148,13 @@ const char *ascii3[256] = {
 | 
			
		|||
	"t",     "u",     "v",     "w",   
 | 
			
		||||
	"x",     "y",     "z",     "{",    
 | 
			
		||||
	"|",     "}",     "~",     "."
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
 | 
			
		||||
	"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue