Dave Kleber wrote:

I just noticed in the new release of FLMSG 1.1.0, under the NTS/Radiogram form, periods in the message body are now being converted to "DOT" rather than "X" after the check button is clicked. I apologize for not catching this on the alpha. I just came across this during our 80m net this morning when sending a message to one of our checkins.

Also, on the ICS-205 form, the FEMA version of the form states "System/Cache" for the first column rather than "Radio Type" as it does in FLMSG.

-Dave, KB3FXI

The rule iaw W3YVQ.v1.04-5/02 PSCM APP.-B NTS MPG-MESSAGE FORMAT P 1-1, CHAPTER 1 - THE ARRL MESSAGE FORMAT:

1.3.1 PUNCTUATION
PUNCTUATION characters are not used in the text except as follows:
/: The slash, "/", is used to separate characters within a group, as in 304/BA. Since the "/" is part of the group it does not qualify as a separate group for the check. Although usually not used as a group by itself (a space on the left and on the right),
if so used it would be counted in the check.
X: The letter "X" used to denote a period. The letter "X" is never used as the last
group of the text. The "X" is a separate group and IS counted for the check.
R: The letter "R" is used in place of a decimal in mixed figure groups, as in 7013R5 (7013.5), or 146R670 (146.670). Since the "R" is part of the group it does not qualify as a separate group for the check. (The inclusion of the "R" makes the
group a "mixed group" for transmission on voice.)

1.3.2 EMAIL, PACKET or INTERNET ADDRESSES

Punctuation is not permitted. Appropriate spelled words are used as substitutes where required,
i.e.:
W3XXX ATSIGN AOL DOT COM ("AT" may be used for "ATSIGN")
W3XXX ATSIGN WB3XXX DOT MD DOT USA DOT NA
HTTP COLON SLASH SLASH WWW DOT HOMEPAGE DOT COM
Notes: "\" is written as "BACKSLASH", "/" is written as "SLASH".
"TILDE", "UNDERSCORE", "POUNDSIGN", etc., are often encountered.
Use "UPPERCASE" or "LOWERCASE" where required to specify case.
Use "SPACE" and "DASH" where they are an integral part of an address group.

The way that flmsg tries to find the occurrence of the period is thus:

A period followed by a space i.e. ". " is converted to "X "

All embedded periods such as "bellsouth.com" are converted to "DOT" as in "BELLSOUTH DOT COM"

"3.14159" becomes "3R14159"

This is archaic behaviour dictated by the historic transmission schemes used before we entered the world of digital communications. They continue since we have no way of knowing how a Radiogram might be handled in route.

Check your original text Dave to see where the period occurred. If the conversion to DOT was not in accordance with the above then the code needs to be changed.

73,
Dave


P.S.  some pseudo code that shows how this is accomplished

*// punctuation to text table*
const char *punctuation[] = {
". ", " X ",
",", " COMMA ",
"?", " QUERY ",
"\\", " BACKSLASH ",
"://", " COLON SLASH SLASH ",
"~", " TILDE ",
"_", " UNDERSCORE ",
"@", " AT ",
"#", " POUNDSIGN ",
"\"", " QUOTE ",
"\'", "",
0, 0 };

void cb_rg_check()
{
   string temp = txt_rg_msg->buffer()->text();
   if (temp.empty()) {
       txt_rg_check->value("");
       btn_rg_check->labelcolor(FL_BLACK);
       btn_rg_check->redraw_label();
       return;
   }

   // convert to uppercase
   for (size_t n = 0; n < temp.length(); n++)
       temp[n] = toupper(temp[n]);

   size_t pos = string::npos;

   strip_lfs(temp);
*    // remove trailing period*
   if (temp[temp.length()-1] == '.') temp.erase(temp.length()-1,1);
*    // convert punctuation*
   for (int n = 0; punctuation[n]; n += 2)
       while ((pos = temp.find(punctuation[n])) != string::npos)
           temp.replace(pos,1,punctuation[n+1]);
*    //convert embedded periods*
   while ((pos = temp.find(".")) != string::npos)
       if (isdigit(temp[pos-1]) || isdigit(temp[pos+1]))
           temp[pos] = 'R';
       else
           temp.replace(pos, 1, " DOT ");

*    // remove any user inserted end-of-lines*
   while ((pos = temp.find('\n')) != string::npos) temp[pos] = ' ';

*    // only single spaces no trailing spaces, no leading spaces*
   while ((pos = temp.find("  ")) != string::npos) temp.erase(pos,1);
   while (temp[temp.length() -1] == ' ') temp.erase(temp.length()-1, 1);
   if (temp[0] == ' ') temp.erase(0,1);

*    // count number of words in textdef_rg_filename*
   int numwords = 1;
   if (temp.length()) {
       pos = 0;
       while ((pos = temp.find(" ", pos + 1)) != string::npos) numwords++;
   }

*    // no more than 5 words to a line*
   if (numwords > progStatus.wpl) {
       int wc = numwords;
       size_t pos = 0;
       while (wc > progStatus.wpl) {
for (int i = 0; i < progStatus.wpl; i++) pos = temp.find(' ', pos + 1);
           temp[pos] = '\n';
           wc -= progStatus.wpl;
       }
   }
*    // insert trailing end-of-line*
   temp += '\n';

_______________________________________________
fldigi-alpha mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/fldigi-alpha

Reply via email to