int parse_logcfg(char *inputbuffer) { extern int use_rxvt; extern char message[15][80]; extern char ph_message[14][80]; extern char sp_return[]; extern char cq_return[]; extern char call[]; extern char whichcontest[]; extern char logfile[]; extern int keyerport; extern int recall_mult; extern int one_point; extern int two_point; extern int three_point; extern int two_eu_three_dx_points; extern int exchange_serial; extern int country_mult; extern int wysiwyg_multi; extern int wysiwyg_once; extern int fixedmult; extern int portable_x2; extern int trx_control; extern int rit; extern int shortqsonr; extern int cluster; extern int clusterlog; extern int showscore_flag; extern int searchflg; extern int demode; extern int contest; extern int weight; extern int txdelay; extern char tonestr[]; extern int showfreq; extern int editor; extern int partials; extern int use_part; extern int mixedmode; extern char pr_hostaddress[]; extern int portnum; extern int packetinterface; extern int tncport; extern int tnc_serial_rate; extern char lastwwv[]; extern int serial_rate; #ifdef HAVE_LIBHAMLIB extern rig_model_t myrig_model; #endif extern int rig_port; extern char rigportname[]; extern int rignumber; extern char rigconf[]; extern char exchange_list[40]; extern char tncportname[]; extern int netkeyer_port; extern char netkeyer_hostaddress[]; extern char bc_hostaddress[MAXNODES][16]; extern int lan_active; extern char thisnode; extern int nodes; extern int node; extern int cqwwm2; extern int landebug; extern int call_update; extern int timeoffset; extern int time_master; extern int ctcomp; extern char multsfile[]; extern int multlist; extern int universal; extern int serial_section_mult; extern int serial_grid4_mult; extern int sectn_mult; extern int dx_arrlsections; extern int pfxmult; extern int exc_cont; extern int wpx; extern char markerfile[]; extern int xplanet; extern int nob4; extern int noautocq; extern int show_time; extern char keyer_device[10]; extern int use_vk; extern int wazmult; extern int itumult; extern int cqdelay; extern int trxmode; extern int use_bandoutput; extern int no_arrows; extern int bandindexarray[]; extern int ssbpoints; extern int cwpoints; extern int lowband_point_mult; extern int sc_sidetone; extern char sc_volume[]; extern char modem_mode[]; extern int no_rst; /* LZ3NY mods */ extern int mult_side; extern int my_country_points; extern int my_cont_points; extern int dx_cont_points; extern int countrylist_points; extern int countrylist_only; char c_temp[11]; extern int my_cont_points; extern int dx_cont_points; extern int mult_side; extern char mit_multiplier_list[][6]; char *mit_mult_array; /* end LZ3NY mods */ extern int tlfcolors[8][2]; extern char synclogfile[]; extern int scale_values[]; extern char sc_device[40]; extern char controllerport[80]; // port for multi-mode controller extern char clusterlogin[]; extern int cw_bandwidth; extern int change_rst; extern char rttyoutput[]; extern int logfrequency; extern int ignoredupe; char commands[MAX_COMMANDS][30] = { "enable", /* 0 */ /* deprecated */ "disable", /* deprecated */ "F1", "F2", "F3", "F4", /* 5 */ "F5", "F6", "F7", "F8", "F9", /* 10 */ "F10", "F11", "F12", "S&P_TU_MSG", "CQ_TU_MSG", /* 15 */ "CALL", "CONTEST", "LOGFILE", "KEYER_DEVICE", "BANDOUTPUT", /* 20 */ "RECALL_MULTS", "ONE_POINT", "THREE_POINTS", "WYSIWYG_MULTIBAND", "WYSIWYG_ONCE", /* 25 */ "RADIO_CONTROL", "RIT_CLEAR", "SHORT_SERIAL", "LONG_SERIAL", "CONTEST_MODE", /* 30 */ "CLUSTER", "BANDMAP", "SPOTLIST", /* deprecated */ "SCOREWINDOW", "CHECKWINDOW", /* 35 */ "FILTER", /* deprecated */ "SEND_DE", "CWSPEED", "CWTONE", "WEIGHT", /* 40 */ "TXDELAY", "SUNSPOTS", "SFI", "SHOW_FREQUENCY", "EDITOR", /* 45 */ "PARTIALS", "USEPARTIALS", "POWERMULT_5", "POWERMULT_2", "POWERMULT_1", /* 50 */ "MANY_CALLS", /* deprecated */ "SERIAL_EXCHANGE", "COUNTRY_MULT", "2EU3DX_POINTS", "PORTABLE_MULT_2", /* 55 */ "MIXED", "TELNETHOST", "TELNETPORT", "TNCPORT", "FIFO_INTERFACE", /* 60 */ "RIGMODEL", "RIGSPEED", "TNCSPEED", "RIGPORT", "NETKEYER", /* 65 */ "NETKEYERPORT", "NETKEYERHOST", "ADDNODE", "THISNODE", "CQWW_M2", /* 70 */ "LAN_DEBUG", "ALT_0", "ALT_1", "ALT_2", "ALT_3", /* 75 */ "ALT_4", "ALT_5", "ALT_6", "ALT_7", "ALT_8", /* 80 */ "ALT_9", "CALLUPDATE", "TIME_OFFSET", "TIME_MASTER", "CTCOMPATIBLE", /* 85 */ "TWO_POINTS", "MULT_LIST", "SERIAL+SECTION", "SECTION_MULT", "MARKERS", /* 90 */ "DX_&_SECTIONS", "MARKERDOTS", "MARKERCALLS", "NOB4", /*LZ3NY */ "COUNTRYLIST", //by lz3ny /* 95 */ "COUNTRY_LIST_POINTS", //by lz3ny "USE_COUNTRYLIST_ONLY", //by lz3ny "MY_COUNTRY_POINTS", //by lz3ny "MY_CONTINENT_POINTS", //by lz3ny "DX_POINTS", //by lz3ny /* 100 */ "SHOW_TIME", "RXVT", "VKM1", "VKM2", "VKM3", /* 105 */ "VKM4", "VKM5", "VKM6", "VKM7", "VKM8", /* 110 */ "VKM9", "VKM10", "VKM11", "VKM12", "VKSPM", /* 115 */ "VKCQM", "WAZMULT", "ITUMULT", "CQDELAY", "PFX_MULT", /* 120 */ "CONTINENT_EXCHANGE", "RULES", "NOAUTOCQ", "SSBMODE", "NO_BANDSWITCH_ARROWKEYS", /* 125 */ "RIGCONF", "TLFCOLOR1", "TLFCOLOR2", "TLFCOLOR3", "TLFCOLOR4", /* 130 */ "TLFCOLOR5", "TLFCOLOR6", "SYNCFILE", "SSBPOINTS", "CWPOINTS", /* 135 */ "SOUNDCARD", "SIDETONE_VOLUME", "S_METER", "SC_DEVICE", "MFJ1278_KEYER", /* 140 */ "CLUSTERLOGIN", "ORION_KEYER", "INITIAL_EXCHANGE", "CWBANDWIDTH", "LOWBAND_DOUBLE", /* 145 */ "CLUSTER_LOG", "SERIAL+GRID4", "CHANGE_RST", "GMFSK", "RTTYMODE", /* 150 */ "DIGIMODEM", "LOGFREQUENCY", "IGNOREDUPE", "CABRILLO", "CW_TU_MSG", /* 155 */ /* deprecated */ "VKCWR", /* deprecated */ "VKSPR", /* deprecated */ "NO_RST" }; char **fields; char teststring[80]; char buff[40]; char outputbuff[80]; int ii; char *j; int jj, hh; char *tk_ptr; /* split the inputline at '=' to max 2 elements * * leave the components in fields[0] (keyword) and * fields[1] for the parameters * * if only 1 component (no '='), it is only a keyword * g_strstrip it and test for keywordlist * * if 2 components (there is a '=' in the line) * g_strstrip first component and test for keywordlist * g_strchug second component -> strip leading space from parameters * * That allows plain keywords and also keywords with parameters (which * follows a '=' sign */ confirmation_needed = PARSE_OK; fields = g_strsplit( inputbuffer, "=", 2); g_strstrip( fields[0] ); if ( *fields[0] == '\0' ) { /* only whitespace found? */ g_strfreev( fields ); return( PARSE_OK ); } if (g_strv_length( fields ) == 2) { /* strip leading whitespace */ g_strchug( fields[1] ); /* from parameters */ } g_strlcpy( teststring, fields[0], sizeof(teststring) ); for (ii = 0; ii < MAX_COMMANDS; ii++) { if (strcmp(teststring, commands[ii]) == 0) { break; } } switch (ii) { case 0:{ KeywordNotSupported(teststring); break; } case 1:{ KeywordNotSupported(teststring); break; } case 2 ... 10:{ /* messages */ PARAMETER_NEEDED(teststring); strcpy(message[ii - 2], fields[1]); break; } case 11 ... 13:{ PARAMETER_NEEDED(teststring); strcpy(message[ii - 2], fields[1]); break; } case 14:{ PARAMETER_NEEDED(teststring); strcpy(message[12], fields[1]); strcpy(sp_return, message[12]); break; } case 15:{ PARAMETER_NEEDED(teststring); strcpy(message[13], fields[1]); strcpy(cq_return, message[13]); break; /* end messages */ } case 16:{ PARAMETER_NEEDED(teststring); if (strlen(fields[1]) > 20) { mvprintw(6,0, "WARNING: Defined call sign too long! exiting...\n"); refreshp(); exit(1); } if (strlen(fields[1]) == 0) { mvprintw(6, 0, "WARNING: No callsign defined in logcfg.dat! exiting...\n"); refreshp(); exit(1); } /* strip NL and trailing whitespace */ g_strlcpy( call, g_strchomp(fields[1]), 20 ); /* as other code parts rely on a trailing NL on the call * we add back such a NL for now */ strcat( call, "\n"); // check that call sign can be found in cty database !! break; } case 17:{ PARAMETER_NEEDED(teststring); strcpy(whichcontest, g_strchomp(fields[1])); if (strlen(whichcontest) > 40) { showmsg ("WARNING: contest name is too long! exiting..."); exit(1); } setcontest(); break; } case 18:{ PARAMETER_NEEDED(teststring); strcpy(logfile, g_strchomp(fields[1])); break; } case 19:{ PARAMETER_NEEDED(teststring); g_strlcpy(keyer_device, g_strchomp(fields[1]), sizeof(keyer_device)); break; } case 20:{ // Use the bandswitch output on parport0 /* \todo add message if parameter too short */ use_bandoutput = 1; if ((fields[1] != NULL) && (strlen(fields[1]) >= 10)) { for (jj = 0; jj <= 9; jj++) // 10x { hh = ((int) (fields[1][jj])) - 48; if (hh >= 0 && hh <= 9) bandindexarray[jj] = hh; else bandindexarray[jj] = 0; } } break; } case 21:{ recall_mult = 1; break; } case 22:{ one_point = 1; universal = 1; break; } case 23:{ three_point = 1; universal = 1; break; } case 24:{ wysiwyg_multi = 1; break; } case 25:{ wysiwyg_once = 1; break; } case 26:{ trx_control = 1; break; } case 27:{ rit = 1; break; } case 28:{ shortqsonr = 1; break; } case 29:{ shortqsonr = 0; break; } case 30:{ contest = 1; break; } case 31:{ cluster = CLUSTER; break; } case 32:{ cluster = MAP; /* init bandmap filtering */ bm_config.allband = 1; bm_config.allmode = 1; bm_config.showdupes = 1; bm_config.skipdupes = 0; bm_config.livetime = 900; /* Allow configuration of bandmap display if keyword * is followed by a '=' * Parameter format is BANDMAP=<xxx>,<number> * <xxx> - string parsed for the letters B, M, D and S * <number> - spot livetime in seconds (>=30) */ if (fields[1] != NULL) { char **bm_fields; bm_fields = g_strsplit(fields[1], ",", 2); if (bm_fields[0] != NULL) { char *ptr = bm_fields[0]; while (*ptr != '\0') { switch (*ptr++) { case 'B': bm_config.allband = 0; break; case 'M': bm_config.allmode = 0; break; case 'D': bm_config.showdupes = 0; break; case 'S': bm_config.skipdupes = 1; break; default: break; } } } if (bm_fields[1] != NULL) { int livetime; g_strstrip(bm_fields[1]); livetime = atoi(bm_fields[1]); if (livetime >= 30) /* aging called every 2 seconds */ bm_config.livetime = livetime/2; } g_strfreev(bm_fields); } break; } case 33:{ KeywordNotSupported(teststring); break; } case 34:{ showscore_flag = 1; break; } case 35:{ searchflg = 1; break; } case 36:{ KeywordNotSupported(teststring); break; } case 37:{ demode = 1; break; } case 38:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 2); SetCWSpeed(atoi(buff)); break; } case 39:{ int tone; PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); tone = atoi(buff); if ((tone > -1) && (tone < 1000)) { sprintf(tonestr, "%d", tone); } break; } case 40:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); weight = atoi(buff); if (weight < -50) weight = -50; if (weight > 50) weight = 50; break; } case 41:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); txdelay = atoi(buff); if (txdelay > 50) txdelay = 50; if (txdelay < 0) txdelay = 0; break; } case 42:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); outputbuff[0] = '\0'; sprintf(outputbuff, "WWV R=%d\n", atoi(buff)); strcpy(lastwwv, outputbuff); break; } case 43:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); outputbuff[0] = '\0'; sprintf(outputbuff, "WWV SFI=%d\n", atoi(buff)); strcpy(lastwwv, outputbuff); break; } case 44:{ showfreq = 1; break; } case 45:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if ((strncmp(buff, "MC", 2) == 0) || (strncmp(buff, "mc", 2) == 0)) { editor = EDITOR_MC; break; } j = strstr(fields[1], "joe"); if (j != NULL) { editor = EDITOR_JOE; break; } j = strstr(fields[1], "vi"); if (j != NULL) { editor = EDITOR_VI; break; } else { editor = EDITOR_E3; break; } } case 46:{ partials = 1; break; } case 47:{ use_part = 1; break; } case 48:{ fixedmult = 5; break; } case 49:{ fixedmult = 2; break; } case 50:{ fixedmult = 1; break; } case 51:{ KeywordNotSupported(teststring); break; } case 52:{ exchange_serial = 1; break; } case 53:{ country_mult = 1; break; } case 54:{ two_eu_three_dx_points = 1; break; } case 55:{ portable_x2 = 1; break; } case 56:{ mixedmode = 1; break; } case 57:{ PARAMETER_NEEDED(teststring); g_strlcpy(pr_hostaddress, g_strchomp(fields[1]), 48); break; } case 58:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 5); portnum = atoi(buff); packetinterface = TELNET_INTERFACE; break; } case 59:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if (strlen(buff) > 2) { strncpy(tncportname, buff, 39); } else tncport = atoi(buff) + 1; packetinterface = TNC_INTERFACE; break; } case 60:{ packetinterface = FIFO_INTERFACE; break; } case 61:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if (strncmp(buff, "ORION", 5) == 0) rignumber = 2000; else rignumber = atoi(buff); #ifdef HAVE_LIBHAMLIB myrig_model = (rig_model_t) rignumber; #endif break; } case 62:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); serial_rate = atoi(buff); break; } case 63:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); tnc_serial_rate = atoi(buff); break; } case 64:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strcat(buff, fields[1]); if (buff[0] == '0' || buff[0] == '1') { rig_port = atoi(buff); } else { strncpy(rigportname, buff, 39); } break; } case 65:{ keyerport = NET_KEYER; break; } case 66:{ PARAMETER_NEEDED(teststring); netkeyer_port = atoi(fields[1]); break; } case 67:{ PARAMETER_NEEDED(teststring); g_strlcpy(netkeyer_hostaddress, g_strchomp(fields[1]), 16); break; } case 68:{ PARAMETER_NEEDED(teststring); if (node < MAXNODES) { g_strlcpy(bc_hostaddress[node], g_strchomp(fields[1]), 16); if (node++ < MAXNODES) nodes++; } lan_active = 1; break; } case 69:{ char c; PARAMETER_NEEDED(teststring); c = toupper(fields[1][0]); if (c >= 'A' && c <= 'H') thisnode = 'A'; else WrongFormat(teststring); break; } case 70:{ cqwwm2 = 1; break; } case 71:{ landebug = 1; break; } case 72 ... 81:{ /* messages */ PARAMETER_NEEDED(teststring); strcpy(message[ii - 58], fields[1]); break; } case 82:{ call_update = 1; break; } case 83:{ PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncat(buff, fields[1], 3); timeoffset = atoi(buff); if (timeoffset > 23) timeoffset = 23; if (timeoffset < -23) timeoffset = -23; break; } case 84:{ time_master = 1; break; } case 85:{ ctcomp = 1; break; } case 86:{ two_point = 1; universal = 1; break; } case 87:{ PARAMETER_NEEDED(teststring); g_strlcpy(multsfile, g_strchomp(fields[1]), 80); multlist = 1; universal = 1; break; } case 88:{ serial_section_mult = 1; break; } case 89:{ sectn_mult = 1; break; } case 90:{ PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 1; break; } case 91:{ dx_arrlsections = 1; setcontest(); break; } case 92:{ PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 2; break; } case 93:{ PARAMETER_NEEDED(teststring); strcpy(markerfile, g_strchomp(fields[1])); xplanet = 3; break; } case 94:{ nob4 = 1; break; } /* LZ3NY mods */ case 95:{ /* COUNTRY_LIST (in file or listed in logcfg.dat) LZ3NY First of all we are checking if inserted data in COUNTRY_LIST= is a file name. If it is we start parsing the file. If we got our case insensitive contest name, we copy the multipliers from it into multipliers_list. If the input was not a file name we directly copy it into multiplier_list (must not have a preceeding contest name). The last step is to parse the multipliers_list into an array (mit_multiplier_list) for future use. */ int mit_fg = 0; static char multiplier_list[50] = ""; /* use only first COUNTRY_LIST definition */ char mit_multlist[255] = ""; char buffer[255] = ""; FILE *fp; PARAMETER_NEEDED(teststring); if (strlen(multiplier_list) == 0) { /* if first definition */ g_strlcpy(mit_multlist, fields[1], sizeof(mit_multlist)); g_strchomp(mit_multlist); /* drop trailing whitespace */ if ((fp = fopen(mit_multlist, "r")) != NULL) { while ( fgets(buffer, sizeof(buffer), fp) != NULL ) { g_strchomp( buffer ); /* no trailing whitespace*/ /* accept only a line starting with the contest name * (CONTEST=) followed by ':' */ if (strncasecmp (buffer, whichcontest, strlen(whichcontest) - 1) == 0) { strncpy(multiplier_list, buffer + strlen(whichcontest) + 1, strlen(buffer) - 1); } } fclose(fp); } else { /* not a file */ if (strlen(mit_multlist) > 0) strcpy(multiplier_list, mit_multlist); } } /* LZ3NY creating the array */ mit_mult_array = strtok(multiplier_list, ":,.- \t"); mit_fg = 0; if (mit_mult_array != NULL) { while (mit_mult_array) { strcpy(mit_multiplier_list[mit_fg], mit_mult_array); mit_mult_array = strtok(NULL, ":,.-_\t "); mit_fg++; } } /* on which multiplier side of the rules we are */ getpx(call); mult_side = exist_in_country_list(); setcontest(); break; } case 96:{ // COUNTRY_LIST_POINTS PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (countrylist_points == -1) countrylist_points = atoi(c_temp); break; } case 97:{ // COUNTRY_LIST_ONLY countrylist_only = 1; if (mult_side == 1) countrylist_only = 0; break; } case 98:{ //HOW Many points scores my country lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (my_country_points == -1) my_country_points = atoi(c_temp); break; } case 99:{ //MY_CONTINENT_POINTS lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (my_cont_points == -1) my_cont_points = atoi(c_temp); break; } case 100:{ //DX_CONTINENT_POINTS lz3ny PARAMETER_NEEDED(teststring); g_strlcpy(c_temp, fields[1], sizeof(c_temp)); if (dx_cont_points == -1) dx_cont_points = atoi(c_temp); break; } /* end LZ3NY mod */ case 101:{ // show time in searchlog window show_time = 1; break; } case 102:{ // use rxvt colours use_rxvt = 1; break; } case 103 ... 116:{ // get phone messages PARAMETER_NEEDED(teststring); g_strlcpy(ph_message[ii - 103], g_strchomp(fields[1]), 71); mvprintw(15, 5, "A: Phone message #%d is %s", ii - 103, ph_message[ii - 103]); // (W9WI) refreshp(); // system ("sleep 2"); if (strlen(ph_message[ii - 103]) > 0) use_vk = 1; break; } case 117:{ // WAZ Zone is a Multiplier wazmult = 1; break; } case 118:{ // ITU Zone is a Multiplier itumult = 1; break; } case 119:{ // CQ Delay (0.5 sec) PARAMETER_NEEDED(teststring); buff[0] = '\0'; strncpy(buff, fields[1], 3); cqdelay = atoi(buff); if ((cqdelay < 3) || (cqdelay > 60)) cqdelay = 20; break; } case 120:{ // wpx style prefixes mult pfxmult = 1; // enable set points wpx = 1; // handle like wpx break; } case 121:{ // exchange continent abbrev exc_cont = 1; break; } case 122:{ // RULES= PARAMETER_NEEDED(teststring); strcpy(whichcontest, g_strchomp(fields[1])); if (strlen(whichcontest) > 40) { showmsg ("WARNING: contest name is too long! exiting..."); sleep(5); exit(1); } setcontest(); break; } case 123:{ // don't use auto_cq noautocq = 1; break; } case 124:{ // start in SSB mode trxmode = SSBMODE; break; } case 125:{ // arrow keys don't switch bands... no_arrows = 1; break; } case 126:{ // Hamlib rig conf parameters PARAMETER_NEEDED(teststring); if (strlen(fields[1]) >= 80) { showmsg ("WARNING: rigconf parameters too long! exiting..."); sleep(5); exit(1); } g_strlcpy(rigconf, g_strchomp(fields[1]), 80); // RIGCONF= break; } case 127:{ // define color GREEN (header) PARAMETER_NEEDED(teststring); if (strlen(fields[1]) >= 2 && isdigit(fields[1][0]) && isdigit(fields[1][1])) { tlfcolors[1][0] = fields[1][0] - 48; tlfcolors[1][1] = fields[1][1] - 48; } else { WrongFormat(teststring); } break; } case 128 ... 132:{ // define color CYAN (windows), WHITE (log win) // MAGENTA (Marker / dupes), BLUE (input field) // and YELLOW (Window frames) PARAMETER_NEEDED(teststring); if (strlen(fields[1]) >= 2 && isdigit(fields[1][0]) && isdigit(fields[1][1])) { tlfcolors[ii - 128 + 3][0] = fields[1][0] - 48; tlfcolors[ii - 128 + 3][1] = fields[1][1] - 48; } else { WrongFormat(teststring); } break; } case 133:{ // define name of synclogfile PARAMETER_NEEDED(teststring); strcpy(synclogfile, g_strchomp(fields[1])); break; } case 134:{ //SSBPOINTS= PARAMETER_NEEDED(teststring); strcpy(buff, fields[1]); ssbpoints = atoi(buff); break; } case 135:{ //CWPOINTS= PARAMETER_NEEDED(teststring); strcpy(buff, fields[1]); cwpoints = atoi(buff); break; } case 136:{ // SOUNDCARD, use soundcard for cw sidetone sc_sidetone = 1; break; } case 137:{ // sound card volume (default = 70) int volume; PARAMETER_NEEDED(teststring); volume = atoi(fields[1]); if (volume > -1 && volume < 101) sprintf(sc_volume, "%d", volume); else strcpy(sc_volume, "70"); break; } case 138:{ int i = 0; PARAMETER_NEEDED(teststring); tk_ptr = strtok(fields[1], ":,.-_\t "); if (tk_ptr != NULL) { while (tk_ptr) { if (i < 20) scale_values[i] = atoi(tk_ptr); tk_ptr = strtok(NULL, ":,.-_\t "); i++; } } break; } case 139:{ // dsp for s-meter PARAMETER_NEEDED(teststring); g_strlcpy(sc_device, g_strchomp(fields[1]), sizeof(sc_device)); break; } case 140:{ PARAMETER_NEEDED(teststring); keyerport = MFJ1278_KEYER; g_strlcpy(controllerport, g_strchomp(fields[1]), sizeof(controllerport)); break; } case 141:{ PARAMETER_NEEDED(teststring); strcpy(clusterlogin, fields[1]); break; } case 142:{ keyerport = ORION_KEYER; break; } case 143:{ PARAMETER_NEEDED(teststring); g_strlcpy(exchange_list, g_strchomp(fields[1]), sizeof(exchange_list)); break; } case 144:{ PARAMETER_NEEDED(teststring); cw_bandwidth = atoi(fields[1]); break; } case 145:{ lowband_point_mult = 1; break; } case 146:{ clusterlog = 1; break; } case 147:{ serial_grid4_mult = 1; break; } case 148:{ change_rst = 1; break; } case 149:{ PARAMETER_NEEDED(teststring); keyerport = GMFSK; g_strlcpy(controllerport, g_strchomp(fields[1]), sizeof(controllerport)); break; } case 150:{ // start in digital mode trxmode = DIGIMODE; strcpy(modem_mode, "RTTY"); break; } case 151:{ PARAMETER_NEEDED(teststring); g_strlcpy(rttyoutput, g_strchomp(fields[1]), 111); break; } case 152:{ logfrequency = 1; break; } case 153:{ ignoredupe = 1; break; } case 154:{ /* read name of cabrillo format to use */ if (cabrillo != NULL) { free(cabrillo); /* free old string if already set */ cabrillo = NULL; } cabrillo = strdup(g_strchomp(fields[1])); break; } case 155: case 156: case 157:{ KeywordNotSupported(teststring); break; } case 158:{ no_rst = 1; break; } default: { KeywordNotSupported(g_strstrip(inputbuffer)); break; } } g_strfreev( fields ); return( confirmation_needed ); }
int getctydata(char *checkcallptr) { char checkbuffer[17] = ""; char checkncall[17] = ""; char checkcall[17] = ""; char findcall[17] = ""; prefix_data *pfx; int pfxmax = prefix_count(); int i = 0, w = 0, x = 0, abnormal_call = 0; char portable = '\0'; int pp = 0; size_t loc; g_strlcpy(checkcall, checkcallptr, 17); portable = '\0'; if (strstr(checkcall, "/QRP") != NULL) /* drop QRP suffix */ checkcall[strlen(checkcall) - 4] = '\0'; if (strstr(checkcall, "/AM") != NULL) // airborne mobile, no country (0), no zone (0) checkcall[0] = '\0'; if (strstr(checkcall, "/MM") != NULL) // maritime mobile, no country, no zone checkcall[0] = '\0'; strncpy(findcall, checkcall, 16); loc = strcspn(checkcall, "/"); if (loc != strlen(checkcall)) { char call1[17]; char call2[17]; strncpy(call1, checkcall, loc); /* 1st part before '/' */ call1[loc] = '\0'; strcpy(call2, checkcall + loc + 1); /* 2nd part after '/' */ if (strlen(call2) < strlen(call1) && strlen(call2) > 1) { sprintf(checkcall, "%s/%s", call2, call1); abnormal_call = 1; loc = strcspn(checkcall, "/"); } if (loc > 3) { strncpy(checkbuffer, (checkcall + loc + 1), (strlen(checkcall) + 1) - loc); if (strlen(checkbuffer) == 1) checkcall[loc] = '\0'; if (checkbuffer[0] == 'M' && strlen(checkbuffer) <= 3) checkcall[loc] = '\0'; if (checkbuffer[0] == 'Q' && strlen(checkbuffer) == 3) /* /QRP */ checkcall[loc] = '\0'; if (checkbuffer[0] == 'A' && strlen(checkbuffer) <= 3) /* /A, /AM etc */ checkcall[loc] = '\0'; if ((strlen(checkbuffer) <= 3) && (checkbuffer[0] <= '9') && (checkbuffer[0] >= '0')) /* /3, etc */ portable = checkbuffer[0]; loc = strcspn(checkcall, "/"); } if (loc != strlen(checkcall)) { if (loc < 5) checkcall[loc] = '\0'; /* "PA/DJ0LN/P */ else { /* DJ0LN/P */ strncpy(checkcall, checkcall, loc + 1); } } /* ------------------------------------------------------------ */ if ((strlen(checkbuffer) == 1) && isdigit(checkbuffer[0])) { /* /3 */ for (pp = strlen(checkcall) - 1; pp > 0; pp--) { if (isdigit(checkcall[pp])) { checkcall[pp] = checkbuffer[0]; break; } } } else if (strlen(checkbuffer) > 1) strcpy(checkcall, checkbuffer); } if (wpx == 1 || pfxmult == 1) /* needed for wpx and other pfx contests */ getpx(checkcall); /* -------------check full call exceptions first...--------------------- */ w = -1; if (abnormal_call == 1) { // pa3fwm 20040111: is pp guaranteed to be properly initialized // if/when we get here?? // pa0r 20040117: It is not. Code changed... // strncpy(checkncall , findcall, pp); strncpy(checkncall, findcall, sizeof(checkncall) - 1); for (i = 0; i < pfxmax; i++) { pfx = prefix_by_index(i); if (strcmp(checkncall, pfx->pfx) == 0) { w = i; x = pfx->dxcc_index; break; } } } else { int bestlen = 0; for (i = 0; i < pfxmax; i++) { int l; pfx = prefix_by_index(i); if (*pfx->pfx != findcall[0]) continue; l = strlen(pfx->pfx); if (l <= bestlen) continue; if (strncmp(pfx->pfx, findcall, l) == 0) { bestlen = l; w = i; } } if (w >= 0) x = prefix_by_index(w)->dxcc_index; } if (w < 0 && 0 != strcmp(findcall, checkcall)) { // only if not found in prefix full call exception list int bestlen = 0; for (i = 0; i < pfxmax; i++) { int l; pfx = prefix_by_index(i); if (*pfx->pfx != checkcall[0]) continue; l = strlen(pfx->pfx); if (l <= bestlen) continue; if (strncmp(pfx->pfx, checkcall, l) == 0) { bestlen = l; w = i; } } if (w >= 0) x = prefix_by_index(w)->dxcc_index; } if (w > 0 ) { sprintf(cqzone, "%02d", prefix_by_index(w) -> cq); sprintf(ituzone, "%02d", prefix_by_index(w) -> itu); } if (itumult != 1) strcpy(zone_export, cqzone); else strcpy(zone_export, ituzone); // w must be >0 tb 17feb2011 // strncpy(ituzone, ituarray[w], 2); countrynr = x; strncpy(continent, dxcc_by_index(countrynr) -> continent , 3); continent[2] = '\0'; return (x); }
// pa3fwm, 20040113: I didn't "clean" this part yet int getctydata2(char *checkcall) { extern char cqzone[]; extern int countrynr; char checkbuffer[17] = ""; char membuffer[17] = ""; char checkncall[20]; prefix_data *pfx; int pfxmax = prefix_count(); int i = 0, w = 0, x = 0; char portable = '\0'; int pp = 0; size_t loc; strncpy(membuffer, checkcall, 16); portable = '\0'; if (strstr(checkcall, "/QRP") != NULL) //strip the qrp checkcall[strlen(checkcall) - 4] = '\0'; loc = strcspn(checkcall, "/"); if (loc > 4) { strncpy(checkbuffer, (checkcall + loc + 1), (strlen(checkcall) + 1) - loc); if (strlen(checkbuffer) == 1) checkcall[loc] = '\0'; if (checkbuffer[0] == 'M' && strlen(checkbuffer) <= 3) checkcall[loc] = '\0'; if (checkbuffer[0] == 'Q' && strlen(checkbuffer) == 3) /* /QRP */ checkcall[loc] = '\0'; if (checkbuffer[0] == 'A' && strlen(checkbuffer) <= 3) /* /A, /AM etc */ checkcall[loc] = '\0'; if ((strlen(checkbuffer) <= 3) && (checkbuffer[0] <= 57) && (checkbuffer[0] >= 48)) /* /3, etc */ portable = checkbuffer[0]; } loc = strcspn(checkcall, "/"); if (loc != strlen(checkcall)) { if (loc < 5) checkcall[loc] = '\0'; /* "PA/DJ0LN/P */ else { /* DJ0LN/P */ strncpy(checkcall, checkcall, loc + 1); } } /* ------------------------------------------------------------ */ if (strlen(checkbuffer) == 1) { /* /3 */ for (pp = strlen(checkcall) - 1; pp > 0; pp--) { if ((checkcall[pp] <= '9') && (checkcall[pp] >= '0')) if ((checkbuffer[0] <= '9') && (checkbuffer[0] >= '0')) { checkcall[pp] = checkbuffer[0]; break; } } } else if (strlen(checkbuffer) > 1) strcpy(checkcall, checkbuffer); getpx(checkcall); /* ------------------------------------------------------------ */ w = 0; for (pp = 1; pp <= strlen(checkcall); pp++) { strncpy(checkncall, checkcall, pp); checkncall[pp] = '\0'; for (i = 0; i < pfxmax; i++) { pfx = prefix_by_index(i); if ((strncmp (checkncall, pfx->pfx, strlen(pfx->pfx)) == 0)) { if (strlen(checkncall) == strlen(pfx->pfx)) { w = i; x = pfx->dxcc_index; break; } } } } sprintf(cqzone, "%02d", prefix_by_index(w) -> cq); countrynr = x; strcpy(checkcall, membuffer); return (x); }
int readcalls(void) { extern char continent_multiplier_list[7][3]; extern int continentlist_only; extern int pfxnummultinr; extern t_pfxnummulti pfxnummulti[]; extern int exclude_multilist_type; extern char countrylist[][6]; char inputbuffer[160]; char tmpbuf[20]; char bndbuf[20]; char zonebuf[3]; char checkcall[20]; int i = 0, l = 0, n = 0, r = 0, s = 0; unsigned int k = 0; int m = 0; int t = 0, tt = 0; int z = 0; int add_ok; char multbuffer[40]; char presentcall[20]; // copy of call.. char *tmpptr; int points; int pfxnumcntidx; int pxnr; int excl_add_veto; FILE *fp; clear(); mvprintw(4, 0, "Reading logfile...\n"); refreshp(); /* reset counter and score anew */ for (s = 0; s < MAX_QSOS; s++) qsos[s][0] = '\0'; for (i = 0; i < MAX_CALLS; i++) { *worked[i].exchange = '\0'; *worked[i].call = '\0'; worked[i].band = 0; worked[i].country = -1; } for (i = 1; i <= MAX_DATALINES - 1; i++) countries[i] = 0; for (i = 0; i < NBANDS; i++) band_score[i] = 0; for (i = 0; i < NBANDS; i++) countryscore[i] = 0; for (n = 1; n < MAX_ZONES; n++) zones[n] = 0; for (n = 0; n < NBANDS; n++) zonescore[n] = 0; for (n = 0; n < NBANDS; n++) //F6CFE multscore[n] = 0; InitPfx(); if (pfxnummultinr > 0) { for(i=0; i<pfxnummultinr; i++) { for(n=0; n<NBANDS; n++) { pfxnummulti[i].qsos[n] = 0; } } } init_mults(); if ((fp = fopen(logfile, "r")) == NULL) { mvprintw(5, 0, "Error opening logfile.\n"); refreshp(); sleep(2); exit(1); } i = 0; k = 0; l = 0; s = 0; t = 0; while (fgets(inputbuffer, 90, fp) != NULL) { pfxnumcntidx = -1; pxnr = 0; excl_add_veto = 0; r++; if (r >= 100) { r = 0; printw("*"); refreshp(); } strcat(inputbuffer, " "); /* repair the logfile */ inputbuffer[LOGLINELEN-1] = '\0'; for (t = 0; t <= strlen(inputbuffer); t++) { if (inputbuffer[t] == '\n') inputbuffer[t] = ' '; } strncpy(qsos[s], inputbuffer, LOGLINELEN); s++; if (inputbuffer[0] == ';') continue; /* note in log */ strncpy(presentcall, inputbuffer + 29, 13); presentcall[13] = '\0'; strncpy(bndbuf, inputbuffer + 1, 2); bndbuf[2] = '\0'; if (bndbuf[0] == '1' && bndbuf[1] == '0') bandinx = BANDINDEX_10; if (bndbuf[0] == '1' && bndbuf[1] == '5') bandinx = BANDINDEX_15; if (bndbuf[0] == '2') bandinx = BANDINDEX_20; if (bndbuf[0] == '4') bandinx = BANDINDEX_40; if (bndbuf[0] == '8') bandinx = BANDINDEX_80; if (bndbuf[0] == '6') bandinx = BANDINDEX_160; if (bndbuf[0] == '1' && bndbuf[1] == '2') bandinx = BANDINDEX_12; if (bndbuf[0] == '1' && bndbuf[1] == '7') bandinx = BANDINDEX_17; if (bndbuf[0] == '3') bandinx = BANDINDEX_30; /* get the country number, not known at this point */ tmpptr = strchr(presentcall, ' '); if (tmpptr) *tmpptr = '\0'; strcpy(tmpbuf, presentcall); countrynr = getctydata(tmpbuf); if (continentlist_only == 1) { int ci = 0; int cont_in_list = 0; while(strlen(continent_multiplier_list[ci]) != 0) { if(strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if (cont_in_list == 0) { band_score[bandinx]++; continue; } } if (contest == 1) { strncpy(tmpbuf, inputbuffer + 76, 2); /* get the points */ tmpbuf[2] = '\0'; points = atoi(tmpbuf); total = total + points; if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { strncpy(zonebuf, inputbuffer + 54, 2); /* get the zone */ zonebuf[2] = '\0'; z = zone_nr(zonebuf); } if (wysiwyg_once == 1 || wysiwyg_multi == 1 || arrlss == 1 || serial_section_mult == 1 || serial_grid4_mult == 1 || sectn_mult == 1 || ((dx_arrlsections == 1) && ((countrynr == w_cty) || (countrynr == ve_cty)))) { multbuffer[0] = '\0'; if (arrlss == 1) { other_flg = 0; if (inputbuffer[63] == ' ') strncpy(multbuffer, inputbuffer + 64, 3); else strncpy(multbuffer, inputbuffer + 63, 3); multbuffer[3] = '\0'; } else if (serial_section_mult == 1) { tt = 0; memset(multbuffer, 0, 39); for (t = 54; t < 64; t++) { if (inputbuffer[t] >= 'A' && inputbuffer[t] <= 'Z') { multbuffer[tt] = inputbuffer[t]; tt++; } } } else if (serial_grid4_mult == 1) { memset(multbuffer, 0, 39); for (t = 0; t < 4; t++) { multbuffer[t] = inputbuffer[t + 59]; } } else { strncpy(multbuffer, inputbuffer + 54, 10); // normal case multbuffer[10] = '\0'; g_strchomp(multbuffer); } remember_multi( multbuffer, bandinx, 0 ); } // end wysiwig if (other_flg == 1) { /* mult = max 3 characters */ strncpy(multbuffer, inputbuffer + 54, 3); multbuffer[3] = '\0'; if (multbuffer[3] == ' ') multbuffer[3] = '\0'; if (multbuffer[2] == ' ') multbuffer[2] = '\0'; if (multbuffer[1] == ' ') multbuffer[1] = '\0'; remember_multi( multbuffer, bandinx, 0 ); } } /* once per call ! */ for (k = 0; k < i; k++) { // changed k=< i m = strcmp(worked[k].call, presentcall); if (m == 0) { l = k; break; } else l = i; } strncpy(worked[l].call, inputbuffer + 29, 19); worked[l].call[19] = 0; strtok(worked[l].call, " \r"); /* delimit first word */ worked[l].country = countrynr; g_strlcpy(worked[l].exchange, inputbuffer + 54, 12); g_strchomp(worked[l].exchange); /* strip trailing spaces */ add_ok = 1; /* look if calls are excluded */ if ((arrldx_usa == 1) && ((countrynr == w_cty) || (countrynr == ve_cty))) add_ok = 0; if (pacc_pa_flg == 1) { strcpy(hiscall, presentcall); add_ok = pacc_pa(); if (add_ok == 0) { band_score[bandinx]++; } hiscall[0] = '\0'; } if (pfxmultab == 1) { getpx(presentcall); add_pfx(pxstr); } if (pfxnummultinr > 0) { getpx(presentcall); pxnr = pxstr[strlen(pxstr) - 1] - 48; getctydata(presentcall); int pfxi = 0; while(pfxi < pfxnummultinr) { if (pfxnummulti[pfxi].countrynr == countrynr) { pfxnumcntidx = pfxi; break; } pfxi++; } add_ok = 1; } if (continentlist_only == 0 && exclude_multilist_type == 1) { int ci = 0; int cont_in_list = 0; while(strlen(continent_multiplier_list[ci]) != 0) { if(strcmp(continent, continent_multiplier_list[ci]) == 0) { cont_in_list = 1; } ci++; } if (cont_in_list == 1 && continentlist_only == 0 && exclude_multilist_type == 1) { excl_add_veto = 1; } } if (exclude_multilist_type == 2) { int ci = 0; while (strlen(countrylist[ci]) != 0) { if (getctydata(countrylist[ci]) == countrynr) { excl_add_veto = 1; break; } ci++; } } if (add_ok == 1) { worked[l].band |= inxes[bandinx]; /* mark band as worked */ band_score[bandinx]++; /* qso counter per band */ if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) zones[z] |= inxes[bandinx]; if (pfxnumcntidx < 0) { if (excl_add_veto == 0) { countries[countrynr] |= inxes[bandinx]; } } else { pfxnummulti[pfxnumcntidx].qsos[pxnr] |= inxes[bandinx]; } } /* end add_ok */ if (l == i) i++; } fclose(fp); /* remember nuber of callarray entries */ nr_worked = i; if (wpx == 1) { /* build prefixes_worked array from list of worked stations */ InitPfx(); for (n = 0; n < i; n++) { strcpy(checkcall, worked[n].call); getpx(checkcall); add_pfx(pxstr); } } if ((cqww == 1) || (itumult == 1) || (wazmult == 1)) { for (n = 1; n < MAX_ZONES; n++) { if ((zones[n] & BAND160) != 0) zonescore[BANDINDEX_160]++; if ((zones[n] & BAND80) != 0) zonescore[BANDINDEX_80]++; if ((zones[n] & BAND40) != 0) zonescore[BANDINDEX_40]++; if ((zones[n] & BAND20) != 0) zonescore[BANDINDEX_20]++; if ((zones[n] & BAND15) != 0) zonescore[BANDINDEX_15]++; if ((zones[n] & BAND10) != 0) zonescore[BANDINDEX_10]++; } } if (cqww == 1) { for (n = 1; n <= MAX_DATALINES - 1; n++) { if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } /* end cqww */ if (dx_arrlsections == 1) { int cntr; for (cntr = 1; cntr < MAX_DATALINES; cntr++) { if (cntr != w_cty && cntr != ve_cty) // W and VE don't count here... { if ((countries[cntr] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[cntr] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[cntr] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[cntr] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[cntr] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[cntr] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } } // end dx_arrlsections if ((arrldx_usa == 1) && (countrynr != w_cty) && (countrynr != ve_cty)) { int cntr; for (cntr = 1; cntr < MAX_DATALINES; cntr++) { if ((countries[cntr] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[cntr] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[cntr] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[cntr] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[cntr] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[cntr] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } /* end arrldx_usa */ if (pacc_pa_flg == 1) { for (n = 1; n < MAX_DATALINES; n++) { if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } if (country_mult == 1 || pfxnummultinr > 0) { for (n = 1; n <= MAX_DATALINES - 1; n++) { // first, check pfxnummultinr array, the country 'n' exists int pfxnumcntnr = -1; // pfxnummultinr is length of pfxnummulti array if (pfxnummultinr > 0) { int pcntnr; // find the current country // n is the country in the external loop // pfxnummulti[I].countrynr contains the country codes, I:=[0..pfxnummultinr] // it depends from the order of prefixes in rules, eg: // PFX_NUM_MULTIS=W,VE,VK,ZL,ZS,JA,PY,UA9 // pfxnummulti[0].countrynr will be nr of USA // pfxnummulti[1].countrynr will be nr of Canada for(pcntnr=0; pcntnr<pfxnummultinr; pcntnr++) { if (pfxnummulti[pcntnr].countrynr == n) { pfxnumcntnr = pcntnr; pcntnr = pfxnummultinr; // end loop } } } if (pfxnummultinr > 0 && pfxnumcntnr >= 0) { int pfxnum; // walking pfxnummulti[N].qsos, which is a 10 element array // each element represent a number of the country code // eg: K0, K1, K2, ..., K9 for(pfxnum=0; pfxnum<10; pfxnum++) { if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND160) != 0) { countryscore[BANDINDEX_160]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND80) != 0) { countryscore[BANDINDEX_80]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND40) != 0) { countryscore[BANDINDEX_40]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND20) != 0) { countryscore[BANDINDEX_20]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND15) != 0) { countryscore[BANDINDEX_15]++; } if ((pfxnummulti[pfxnumcntnr].qsos[pfxnum] & BAND10) != 0) { countryscore[BANDINDEX_10]++; } } } else { // simple 'country_mult', but it's works together with pfxnummultinr if ((countries[n] & BAND160) != 0) countryscore[BANDINDEX_160]++; if ((countries[n] & BAND80) != 0) countryscore[BANDINDEX_80]++; if ((countries[n] & BAND40) != 0) countryscore[BANDINDEX_40]++; if ((countries[n] & BAND20) != 0) countryscore[BANDINDEX_20]++; if ((countries[n] & BAND15) != 0) countryscore[BANDINDEX_15]++; if ((countries[n] & BAND10) != 0) countryscore[BANDINDEX_10]++; } } } if (qsonum == 1) { InitPfx(); total = 0; for (i = 0; i < NBANDS; i++) band_score[i] = 0; for (i = 0; i < NBANDS; i++) countryscore[i] = 0; for (i = 0; i < NBANDS; i++) multscore[i] = 0; } return (s); // nr of lines in log }