mirror of
https://github.com/n5ac/mmvari.git
synced 2025-12-06 04:12:03 +01:00
352 lines
9.3 KiB
C++
352 lines
9.3 KiB
C++
|
|
//Copyright+LGPL
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba
|
|||
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// This file is part of MMVARI.
|
|||
|
|
|
|||
|
|
// MMVARI is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
|
|||
|
|
// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|||
|
|
|
|||
|
|
// MMVARI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|||
|
|
|
|||
|
|
// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see
|
|||
|
|
// <http://www.gnu.org/licenses/>.
|
|||
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************************************
|
|||
|
|
<EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD>[<EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
Copyright (C) JE3HHT 1993-2000.
|
|||
|
|
************************************************************************/
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
#include <vcl.h>
|
|||
|
|
#pragma hdrstop
|
|||
|
|
|
|||
|
|
#include "ComLib.h"
|
|||
|
|
#include "Country.h"
|
|||
|
|
#include "string.h"
|
|||
|
|
#include "stdlib.h"
|
|||
|
|
|
|||
|
|
CCountry Cty;
|
|||
|
|
/*#$%
|
|||
|
|
========================================================
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>̕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
--------------------------------------------------------
|
|||
|
|
s : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
--------------------------------------------------------
|
|||
|
|
--------------------------------------------------------
|
|||
|
|
========================================================
|
|||
|
|
*/
|
|||
|
|
static char *__fastcall _delchr(char *s, char c)
|
|||
|
|
{
|
|||
|
|
char *p;
|
|||
|
|
|
|||
|
|
for( p = s; *p; p++ ){
|
|||
|
|
if( *p == c ){
|
|||
|
|
strcpy(p, p+1);
|
|||
|
|
p--;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return(s);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>قȂ镶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^<EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
n : <EFBFBD>͈͐<EFBFBD><EFBFBD>̊i<EFBFBD>[<EFBFBD>ʒu<EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
t : <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>B<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
p : <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>B<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
static LPSTR __fastcall lcmpp(int *n, LPSTR s, LPSTR p)
|
|||
|
|
{
|
|||
|
|
LPSTR t;
|
|||
|
|
|
|||
|
|
for( t = s; *p && *t; p++, t++ ){
|
|||
|
|
if( *p != *t ){
|
|||
|
|
*n = (*p - *t) + 1;
|
|||
|
|
if( *n > 26 ) *n = 26;
|
|||
|
|
return(t);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
*n = 0;
|
|||
|
|
return(s);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̔<EFBFBD><EFBFBD>r<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
t : <EFBFBD>Ώە<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
s : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
static int __fastcall strcmpv(LPCSTR t, LPCSTR s)
|
|||
|
|
{
|
|||
|
|
for( ; *s; s++, t++ ){
|
|||
|
|
if( *t != *s ) return(1);
|
|||
|
|
}
|
|||
|
|
return(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static int svf; /* <20><><EFBFBD>S<EFBFBD><53><EFBFBD>v<EFBFBD>t<EFBFBD><74><EFBFBD>O */
|
|||
|
|
/*#$%
|
|||
|
|
================================================================
|
|||
|
|
<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>B<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r
|
|||
|
|
----------------------------------------------------------------
|
|||
|
|
----------------------------------------------------------------
|
|||
|
|
----------------------------------------------------------------
|
|||
|
|
================================================================
|
|||
|
|
*/
|
|||
|
|
static int __fastcall _strcmp(LPCSTR t, LPCSTR v)
|
|||
|
|
{
|
|||
|
|
/* printf( "<%s>-<%s>\n", v, t ); */
|
|||
|
|
for( ; *v; v++, t++ ){
|
|||
|
|
if( *v == '*' ){
|
|||
|
|
for( v++; *t && strcmpv(t, v); t++ );
|
|||
|
|
if( !*t ) return(1);
|
|||
|
|
}
|
|||
|
|
else if( *v == '\\' ){
|
|||
|
|
if( *t ) return(1);
|
|||
|
|
}
|
|||
|
|
else if( (*v!='?') && (*v != *t) ){
|
|||
|
|
return(1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if( svf && *t ) return(1);
|
|||
|
|
return(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>^<EFBFBD>[
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
__fastcall CCountry::CCountry()
|
|||
|
|
{
|
|||
|
|
Init();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
__fastcall CCountry::~CCountry(void)
|
|||
|
|
{
|
|||
|
|
Free();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>c<EFBFBD>w<EFBFBD>b<EFBFBD>b<EFBFBD><EFBFBD><EFBFBD>`<EFBFBD>̈<EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
void __fastcall CCountry::Init(void)
|
|||
|
|
{
|
|||
|
|
cmax = 0;
|
|||
|
|
memset(ctl, 0, sizeof(ctl));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>c<EFBFBD>w<EFBFBD>b<EFBFBD>b<EFBFBD><EFBFBD><EFBFBD>`<EFBFBD>̈<EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
void __fastcall CCountry::Free(void)
|
|||
|
|
{
|
|||
|
|
int i;
|
|||
|
|
CTL *cp;
|
|||
|
|
|
|||
|
|
for( cp = ctl, i = 0; i < cmax; i++, cp++ ){
|
|||
|
|
if( cp->Name != NULL ) delete cp->Name;
|
|||
|
|
if( cp->Code != NULL ) delete cp->Code;
|
|||
|
|
if( cp->QTH != NULL ) delete cp->QTH;
|
|||
|
|
if( cp->Cont != NULL ) delete cp->Cont;
|
|||
|
|
if( cp->TD != NULL ) delete cp->TD;
|
|||
|
|
}
|
|||
|
|
Init();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>B<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>[<EFBFBD>h<EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
p : <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>B<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
<EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>[<EFBFBD>h
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
int __fastcall CCountry::GetNo(LPCSTR s)
|
|||
|
|
{
|
|||
|
|
LPSTR p, pb, t, pp;
|
|||
|
|
int i;
|
|||
|
|
int j;
|
|||
|
|
|
|||
|
|
if( !*s ) return(0);
|
|||
|
|
for( i = 0; i < cmax; i++ ){
|
|||
|
|
strcpy(wbf, ctl[i].Code);
|
|||
|
|
for( p = wbf; *p; ){
|
|||
|
|
p = StrDlm(pb, p, ',');
|
|||
|
|
if( (t = strchr(pb, '-')) != NULL ){
|
|||
|
|
*t = 0;
|
|||
|
|
t++;
|
|||
|
|
if( (*pb == *s) || (*pb != *t) ){
|
|||
|
|
for( pp = lcmpp(&j, pb, t); j; (*pp)++, j-- ){
|
|||
|
|
if( !_strcmp(s, pb) ) return(i+1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
if( !_strcmp(s, pb) ) return(i+1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>R<EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^<EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
p : <EFBFBD>R<EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
<EFBFBD>|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
int __fastcall CCountry::GetNoP(LPCSTR p)
|
|||
|
|
{
|
|||
|
|
int n;
|
|||
|
|
|
|||
|
|
svf = 1;
|
|||
|
|
if( (n = GetNo(p))!=0 ) return(n);
|
|||
|
|
svf = 0;
|
|||
|
|
if( (n = GetNo(p))!=0 ) return(n);
|
|||
|
|
return(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>R<EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
p : <EFBFBD>R<EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
<EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
LPCSTR __fastcall CCountry::GetCountry(LPCSTR p)
|
|||
|
|
{
|
|||
|
|
if( !cmax ) return "";
|
|||
|
|
int n;
|
|||
|
|
|
|||
|
|
if( !(*p) ) return("?");
|
|||
|
|
if( ((n = GetNoP(p))!=0) && (ctl[n-1].Name != NULL) ){
|
|||
|
|
strcpy(wbf, ctl[n-1].Name);
|
|||
|
|
return(wbf);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
return("?");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>R<EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嗤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
p : <EFBFBD>R<EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
<EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
LPCSTR __fastcall CCountry::GetCont(LPCSTR p)
|
|||
|
|
{
|
|||
|
|
if( !cmax ) return "";
|
|||
|
|
int n;
|
|||
|
|
|
|||
|
|
if( !(*p) ) return("?");
|
|||
|
|
if( ((n = GetNoP(p))!=0) && (ctl[n-1].Cont != NULL) ){
|
|||
|
|
strcpy(wbf, ctl[n-1].Cont);
|
|||
|
|
return(wbf);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
return("?");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*#$%
|
|||
|
|
======================================================
|
|||
|
|
<EFBFBD>c<EFBFBD>w<EFBFBD>b<EFBFBD>b<EFBFBD><EFBFBD><EFBFBD>`<EFBFBD>t<EFBFBD>@<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂݍ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
------------------------------------------------------
|
|||
|
|
fm : <EFBFBD>t<EFBFBD>@<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
|
|||
|
|
------------------------------------------------------
|
|||
|
|
------------------------------------------------------
|
|||
|
|
======================================================
|
|||
|
|
*/
|
|||
|
|
void __fastcall CCountry::Load(LPCSTR fm)
|
|||
|
|
{
|
|||
|
|
FILE *fp;
|
|||
|
|
LPCSTR p;
|
|||
|
|
char hbf[512];
|
|||
|
|
|
|||
|
|
Free();
|
|||
|
|
if( (fp = fopen(fm, "rt"))!=NULL ){
|
|||
|
|
while( !feof(fp) ){
|
|||
|
|
if( fgets(hbf, 512, fp)!=NULL ){
|
|||
|
|
if( hbf[0] == '$' ) break;
|
|||
|
|
ClipLF(hbf);
|
|||
|
|
_delchr(hbf, TAB);
|
|||
|
|
if( hbf[0] != '!' ){
|
|||
|
|
p = StrDlmCpy(wbf, hbf, ';', 512);
|
|||
|
|
clipsp(wbf);
|
|||
|
|
ctl[cmax].Name = StrDupe(wbf);
|
|||
|
|
if( p != NULL ){
|
|||
|
|
p = StrDlmCpy(wbf, p, ';', 512);
|
|||
|
|
clipsp(wbf);
|
|||
|
|
ctl[cmax].Code = StrDupe(wbf);
|
|||
|
|
}
|
|||
|
|
if( p != NULL ){
|
|||
|
|
p = StrDlmCpy(wbf, p, ';', 512);
|
|||
|
|
clipsp(wbf);
|
|||
|
|
ctl[cmax].QTH = StrDupe(wbf);
|
|||
|
|
}
|
|||
|
|
if( p != NULL ){
|
|||
|
|
p = StrDlmCpy(wbf, p, ';', 512);
|
|||
|
|
clipsp(wbf);
|
|||
|
|
ctl[cmax].Cont = StrDupe(wbf);
|
|||
|
|
}
|
|||
|
|
if( p != NULL ){
|
|||
|
|
StrDlmCpy(wbf, p, ';', 512);
|
|||
|
|
clipsp(wbf);
|
|||
|
|
ctl[cmax].TD = StrDupe(wbf);
|
|||
|
|
}
|
|||
|
|
cmax++;
|
|||
|
|
if( cmax >= CTMAX ) break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
fclose(fp);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
WarningMB(sys.m_MsgEng ? "'ARRL.DX' was not found.\r\n\r\nYou cannot use a DXCC function.\r\nThis is not a problem if you do not need it":"'ARRL.DX'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C282><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD>.\r\n\r\nDX<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>e<EFBFBD>B<EFBFBD>̎<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@<40>\<EFBFBD>͎g<EFBFBD>p<EFBFBD>ł<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>.");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|