mmsstv/JASTA/Main.cpp
2013-07-05 15:15:14 -05:00

1369 lines
40 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include "OptDlg.h"
#include "TextEdit.h"
#include "QsoDlg.h"
#include "LogConv.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainWnd *MainWnd;
//---------------------------------------------------------------------------
#define TEMPLOGNAME "MMJASTA.MDT"
//---------------------------------------------------------------------------
__fastcall TMainWnd::TMainWnd(TComponent* Owner)
: TForm(Owner)
{
lcid = GetThreadLocale() & 0x00ff;
if( lcid != LANG_JAPANESE ){ // English
MsgEng = 1;
sys.m_Category = 1;
}
else {
MsgEng = 0;
sys.m_Category = 0;
}
if( ParamCount() >= 0 ){
SetDirName(BgnDir, AnsiString(ParamStr(0)).c_str());
}
else {
SetCurDir(BgnDir, sizeof(BgnDir));
}
strcpy(MMLogDir, "C:\\MMSSTV");
::GetLocalTime(&m_now);
sys.m_Year = m_now.wYear;
if( m_now.wMonth < 8 ) sys.m_Year--;
sys.m_Call = "";
sys.m_CName = "JASTA SSTV activity contest";
sys.m_TSize = 2;
m_FIndex = 1;
Caption = VERTTL;
ReadRegister();
SetLanguage();
char bf[256];
sprintf(bf, "%sARRL.DX", BgnDir);
Cty.Load(bf);
m_ReCalc = 0;
m_pEditLog = NULL;
m_pEditSum = NULL;
m_pEditAna = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::SetLanguage(void)
{
Memo->Font->Pitch = fpFixed;
if( MsgEng ){
Font->Name = "Arial";
Font->Charset = ANSI_CHARSET;
Memo->Font->Name = "Courier New";
Memo->Font->Charset = ANSI_CHARSET;
KF->Caption = "&File";
KV->Caption = "&View";
KH->Caption = "&Help";
KFS->Caption = "&Setup...";
KFL->Caption = "&Load log...";
KFR->Caption = "&Re-totalize";
KVL->Caption = "Log sheet...";
KVS->Caption = "Summary sheet...";
KVA->Caption = "Analysis file...";
KHM->Caption = "Download latest version...";
KHR->Caption = "Reflector...";
KHW->Caption = "JASTA Home page...";
}
else {
Font->Name = "<EFBFBD>l<EFBFBD>r <20>o<EFBFBD>S<EFBFBD>V<EFBFBD>b<EFBFBD>N";
Font->Charset = SHIFTJIS_CHARSET;
Memo->Font->Name = "<EFBFBD>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N";
Memo->Font->Charset = SHIFTJIS_CHARSET;
KF->Caption = "<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43>(&F)";
KV->Caption = "<EFBFBD>\<EFBFBD><EFBFBD>(&V)";
KH->Caption = "<EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>v(&H)";
KFS->Caption = "<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v(&S)...";
KFL->Caption = "<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃<EFBFBD><CC83>[<5B>h(&L)...";
KFR->Caption = "<EFBFBD>ďW<EFBFBD>v(&R)";
KVL->Caption = "<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>V<EFBFBD>[<5B>g...";
KVS->Caption = "<EFBFBD>T<EFBFBD>}<7D><><EFBFBD>V<EFBFBD>[<5B>g...";
KVA->Caption = "<EFBFBD><EFBFBD><EFBFBD>̓t<EFBFBD>@<40>C<EFBFBD><43>...";
KHM->Caption = "<EFBFBD>ŐV<EFBFBD>ł̃_<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h...";
KHR->Caption = "<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>X<EFBFBD>g...";
KHW->Caption = "JASTA<EFBFBD>̃z<EFBFBD>[<5B><><EFBFBD>y<EFBFBD>[<5B>W...";
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::FormCloseQuery(TObject *Sender, bool &CanClose)
{
Log.Close();
unlink(Log.m_FileName.c_str());
WriteRegister();
if( m_pEditLog != NULL ) delete m_pEditLog;
if( m_pEditSum != NULL ) delete m_pEditSum;
if( m_pEditAna != NULL ) delete m_pEditAna;
CanClose = TRUE;
}
//---------------------------------------------------------------------------
// <20><><EFBFBD>W<EFBFBD>X<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̓ǂݏo<DD8F><6F>
void __fastcall TMainWnd::ReadRegister(void)
{
char bf[256];
sprintf(bf, "%sMMJASTA.ini", BgnDir);
TIniFile *pIniFile = new TIniFile(bf);
MsgEng = pIniFile->ReadInteger("Language", "English", MsgEng);
AnsiString as;
as = pIniFile->ReadString("Folder", "Log", MMLogDir);
StrCopy(MMLogDir, as.c_str(), sizeof(MMLogDir)-1);
m_FIndex = pIniFile->ReadInteger("Folder", "Index", m_FIndex);
sys.m_Call = pIniFile->ReadString("Define", "Call", sys.m_Call);
sys.m_Name = pIniFile->ReadString("Define", "Name", sys.m_Name);
sys.m_Zip = pIniFile->ReadString("Define", "Zip", sys.m_Zip);
sys.m_Adr = pIniFile->ReadString("Define", "Adr", sys.m_Adr);
sys.m_Mail = pIniFile->ReadString("Define", "Mail", sys.m_Mail);
sys.m_License = pIniFile->ReadString("Define", "License", sys.m_License);
sys.m_Pow = pIniFile->ReadString("Define", "Power", sys.m_Pow);
sys.m_Sexual = pIniFile->ReadInteger("Define", "Sexual", sys.m_Sexual);
sys.m_TSize = pIniFile->ReadInteger("Define", "TSize", sys.m_TSize);
sys.m_Category = pIniFile->ReadInteger("Define", "Category", sys.m_Category);
sys.m_First = pIniFile->ReadInteger("Define", "First", sys.m_First);
delete pIniFile;
}
//---------------------------------------------------------------------------
// <20><><EFBFBD>W<EFBFBD>X<EFBFBD>g<EFBFBD><67><EFBFBD>ւ̏<D682><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void __fastcall TMainWnd::WriteRegister(void)
{
CWaitCursor wait;
char bf[256];
sprintf(bf, "%sMMJASTA.ini", BgnDir);
try{
TIniFile *pIniFile = new TIniFile(bf);
pIniFile->WriteInteger("Language", "English", MsgEng);
pIniFile->WriteString("Folder", "Log", MMLogDir);
pIniFile->WriteInteger("Folder", "Index", m_FIndex);
pIniFile->WriteString("Define", "Call", sys.m_Call);
pIniFile->WriteString("Define", "Call", sys.m_Call);
pIniFile->WriteString("Define", "Name", sys.m_Name);
pIniFile->WriteString("Define", "Zip", sys.m_Zip);
pIniFile->WriteString("Define", "Adr", sys.m_Adr);
pIniFile->WriteString("Define", "Mail", sys.m_Mail);
pIniFile->WriteString("Define", "License", sys.m_License);
pIniFile->WriteString("Define", "Power", sys.m_Pow);
pIniFile->WriteInteger("Define", "Sexual", sys.m_Sexual);
pIniFile->WriteInteger("Define", "TSize", sys.m_TSize);
pIniFile->WriteInteger("Define", "Category", sys.m_Category);
pIniFile->WriteInteger("Define", "First", sys.m_First);
delete pIniFile;
}
catch(...){
ErrorMB(MsgEng?"Cannot update MMJASTA.INI":"MMJASTA.INI<4E><49><EFBFBD>X<EFBFBD>V<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD>.");
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::SetTitle(void)
{
if( m_SrcName.IsEmpty() ){
Caption = VERTTL;
}
else {
char bf[256];
sprintf(bf, "%s [%s]", VERTTL, m_SrcName.c_str());
Caption = bf;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::GridDrawCell(TObject *Sender, int Col,
int Row, TRect &Rect, TGridDrawState State)
{
char bf[256];
Grid->Canvas->FillRect(Rect);
int X = Rect.Left + 4;
int Y = Rect.Top + 2;
if( Row ){
Row--;
bf[0] = 0;
SDMMLOG sd;
int f = ( Row < Log.GetCount() ) ? TRUE : FALSE;
if( f ) Log.GetData(&sd, Row);
switch(Col){
case 0: // No
wsprintf(bf, "%u", Row + 1);
break;
case 1: // Date
if( f ) wsprintf(bf, "%02u/%02u/%02u", sd.year, sd.date / 100, sd.date % 100);
break;
case 2: // Time
if( f ) wsprintf(bf, "%02u%02u", (sd.btime / 30) / 60, (sd.btime / 30) % 60);
break;
case 3: // Band
if( f ) wsprintf(bf, "%s", _band[sd.band]);
break;
case 4: // Call
if( f ) strcpy(bf, sd.call);
break;
case 5:
if( f ) strcpy(bf, sd.ur);
break;
case 6:
if( f ) strcpy(bf, sd.my);
break;
case 7:
if( f ) strcpy(bf, sd.opt1);
break;
case 8:
if( f ) strcpy(bf, sd.qsl);
break;
}
Grid->Canvas->TextRect(Rect, X, Y, bf);
}
else { // <20>^<5E>C<EFBFBD>g<EFBFBD><67>
LPCSTR _tt[]={
"No","Date","UTC","Band","Call","Sent","Rcvd","Multi","Point"
};
Grid->Canvas->TextRect(Rect, X, Y, _tt[Col]);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KFLClick(TObject *Sender)
{
if( sys.m_Call.IsEmpty() ){
KFSClick(NULL);
if( sys.m_Call.IsEmpty() ) return;
}
OpenDialog->Filter = MsgEng ? "MMLOG data files(mdt)|*.mdt|ADIF files(adi)|*.adi|LOG200 files(l2)|*.l2|Turbo HAMLOG files(dbs)|*.dbs" :
"MMLOG<EFBFBD>f<EFBFBD>[<5B>^<5E>t<EFBFBD>@<40>C<EFBFBD><43>(mdt)|*.mdt|ADIF <20>t<EFBFBD>@<40>C<EFBFBD><43>(adi)|*.adi|LOG200 <20>t<EFBFBD>@<40>C<EFBFBD><43>(l2)|*.l2|Turbo HAMLOG <20>t<EFBFBD>@<40>C<EFBFBD><43>(dbs)|*.dbs";
OpenDialog->FilterIndex = m_FIndex;
OpenDialog->InitialDir = MMLogDir;
if( OpenDialog->Execute() == TRUE ){
SetDirName(MMLogDir, AnsiString(OpenDialog->FileName).c_str()); //ja7ude 0525
m_FIndex = OpenDialog->FilterIndex;
m_SrcName = OpenDialog->FileName.c_str();
Exec(m_SrcName.c_str(), TRUE);
SetTitle();
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::Exec(LPCSTR pName, int loadorg)
{
m_ReCalc = 0;
CWaitCursor w;
LPCSTR pEXT = GetEXT(pName);
if( !strcmpi(pEXT, "ADI") ){
pName = ConvADIF(pName, loadorg);
if( pName == NULL ) return;
}
else if( !strcmpi(pEXT, "L2") ){
pName = ConvLog200(pName, loadorg);
if( pName == NULL ) return;
}
else if( !strcmpi(pEXT, "DBS") ){
pName = ConvHAMLOG(pName, loadorg);
if( pName == NULL ) return;
}
CLogFile orgLog;
orgLog.Open(pName, FALSE);
if( !orgLog.IsOpen() ) return;
char templog[256];
sprintf(templog, "%sJASTA.$$$", BgnDir);
Log.Open(templog, TRUE);
if( !Log.IsOpen() ) return;
Log.DeleteAll();
m_errNOF = m_errDUP = m_errINV = m_errMLT = m_errBND = 0;
SDMMLOG sd;
int i, n;
n = 0;
for( i = 0; i < orgLog.GetCount(); i++ ){
orgLog.GetData(&sd, i);
JSTtoUTC(&sd);
int yy = sd.year + 2000;
int mm = sd.date / 100;
if( (sd.mode == 8) && (sd.band >= B_35) && (yy == sys.m_Year) && (mm == 8) && IsValidRST(sd.ur) ){
AdjustData(&sd);
Log.PutData(&sd, n);
n++;
}
}
orgLog.Close();
Log.SortDate(0, Log.GetCount());
Grid->RowCount = (n >= 8) ? (n + 1) : 9;
Grid->Invalidate();
Calc(ClipCall(sys.m_Call.c_str()));
}
//---------------------------------------------------------------------------
int __fastcall TMainWnd::IsValidRST(LPSTR pRST)
{
int l = strlen(pRST);
if( l <= 3 ) return 0;
LPCSTR p = pRST;
for( ; *p; p++ ){
if( !isdigit(*p) ) return 0;
}
int n = atoin(&pRST[3], -1);
if( (n < 1000) && (l != 6) ){
sprintf(&pRST[3], "%03u", n);
}
return 1;
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::AdjustData(SDMMLOG *sp)
{
if( sp->band <= B_28 ){
strcpy(sp->qsl, "1");
}
else if( sp->band <= B_430 ){
strcpy(sp->qsl, "2");
}
else {
strcpy(sp->qsl, "3");
}
if( IsJA(sp->call) ){
char c;
char bf[MLCALL+1];
StrCopy(bf, ClipCC(sp->call), MLCALL);
if( (bf[0] == '7') && (bf[1] != 'J') ){
c = '1';
}
else {
c = bf[2];
}
sprintf(sp->opt1, "JA%c", c);
strcpy(sp->opt2, "AS");
}
else if( Cty.IsData() ){
int ref = Cty.GetRefP(sp->call);
if( !ref ){
LPCSTR pCC = ClipCC(sp->call);
ref = Cty.GetRefP(pCC);
}
if( ref ){
LPCSTR pDX = Cty.GetCountry(ref);
if( (pDX != NULL) && *pDX && (strchr(pDX, '?') == NULL) ){
LPCSTR p = lastp(sp->opt1);
p+=2;
if( *p != 0x01 ) StrCopy(sp->opt1, pDX, MLOPT);
}
pDX = Cty.GetCont(ref);
if( (pDX != NULL) && *pDX && (strchr(pDX, '?') == NULL) ){
LPCSTR p = lastp(sp->opt2);
p+=2;
if( *p != 0x01 ) StrCopy(sp->opt2, pDX, MLOPT);
}
}
}
DelLastSpace(sp->opt1);
DelLastSpace(sp->opt2);
if( !IsValidRST(sp->my) ){
strcpy(sp->qsl, "0");
strcpy(sp->opt1, "*INV*");
m_errINV++;
}
else if( (strstr(sp->rem, "NOF") != NULL) || (strstr(sp->rem, "nof") != NULL) ){
strcpy(sp->qsl, "0");
strcpy(sp->opt1, "*NOF*");
m_errNOF++;
}
}
void __fastcall TMainWnd::ShowErr(StrText *tp, int n, SDMMLOG *sp, LPCSTR pKey)
{
m_ShowErrCount++;
if( m_ShowErrCount >= 100 ){
if( m_ShowErrCount == 100 ){
tp->Printf("Too many Warnings\r\n");
}
}
else {
tp->Printf("%-4u %u/%02u %02u%02uZ %5s %-13s %-7s %-7s : %s\r\n",
n+1,
sp->date/100, sp->date%100,
(sp->btime/30)/60, (sp->btime/30)%60,
_band[sp->band],
sp->call, sp->ur, sp->my,
pKey
);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::Calc(LPCSTR pName)
{
StrText str(32768);
m_ShowErrCount = 0;
m_Days = 0;
if( pName == NULL ){
pName = "OUTPUT";
}
sprintf(m_LogName, "%s%s.txt", BgnDir, pName);
sprintf(m_SumName, "%s%s.sum", BgnDir, pName);
sprintf(m_AnaName, "%s%s.ana", BgnDir, pName);
FILE *pfLog = fopen(m_LogName, "wt");
fprintf(pfLog, "JASTA Contest Log. Year:%04u Contest Name:%s\n", sys.m_Year, sys.m_CName.c_str());
fprintf(pfLog, "Call Sign:%s\n\n", sys.m_Call.c_str());
fprintf(pfLog, "Date Time UTC Band Station WKD. Sent No. RCVD No. Multi. Point\n\n");
int Score = 0;
int i;
int add = -1;
m_CountHF = m_CountVU = m_CountS = 0;
m_MJA.Clear();
m_MDX.Clear();
m_DUP.Clear();
char mlt[32];
int mf = 0;
for( i = 0; i < Log.GetCount(); i++ ){
SDMMLOG sd;
Log.GetData(&sd, i);
int wf = 0;
mlt[0] = 0;
int dd = sd.date % 100;
if( add != dd ){ // <20><><EFBFBD>t<EFBFBD>}<7D><><EFBFBD>`
add = dd;
m_Days++;
m_DUP.Clear();
}
if( sd.opt1[0] != '*' ){
if( !m_DUP.Add(clipsp(sd.call)) ){
strcpy(sd.qsl, "0");
strcpy(sd.opt1, "*DUP*");
m_errDUP++;
wf++;
}
else if( (!sd.opt1[0]) ||
(strchr(sd.opt1, '?') != NULL) ||
(!strcmp(sd.opt1, "JA")) ||
IsNumbAll(sd.opt1)
){
m_errMLT++;
char bf[128];
sprintf(bf, "DXCC Unknown [%s]", sd.opt1);
ShowErr(&str, i, &sd, bf);
if( !mf ){
MoveGrid(i);
mf++;
}
}
else if( !strncmp(sd.opt1, "JA", 2) ){
if( m_MJA.Add(sd.opt1) ) strcpy(mlt, sd.opt1);
}
else {
if( sd.band >= B_144 ){
m_errBND++;
char bf[128];
sprintf(bf, "DX on 2m & down");
ShowErr(&str, i, &sd, bf);
if( !mf ){
MoveGrid(i);
mf++;
}
}
if( m_MDX.Add(sd.opt1) ) strcpy(mlt, sd.opt1);
}
int d = atoin(sd.qsl, -1);
Score += d;
switch(d){
case 1:
m_CountHF++;
break;
case 2:
m_CountVU++;
break;
case 3:
m_CountS++;
break;
}
}
if( wf ) Log.PutData(&sd, i);
if( sd.opt1[0] == '*' ){
strcpy(mlt, sd.opt1);
ShowErr(&str, i, &sd, sd.opt1);
}
// 1 123456789011231234567890123123456789012345678912345678
// 8/01 12:34U <20>@<40>@<40>@<40>@14 JA1QRZ 595001 595010 JA1 1
fprintf(pfLog, "%u/%02u %02u:%02uU%11s %-13s%-10s%-9s%-8s%s\n",
sd.date / 100, sd.date % 100,
(sd.btime/30)/60, (sd.btime/30)%60,
_band[sd.band],
sd.call,
sd.ur,
sd.my,
mlt,
sd.qsl
);
}
int MJA = m_MJA.GetCount();
int MDX = m_MDX.GetCount();
int MDAY = m_Days;
if( MDAY > 10 ) MDAY = 10;
int MALL = MJA+MDX+MDAY;
int Total = MALL * Score;
if( m_errMLT || m_errINV || m_errDUP || m_errNOF || m_errBND ){
str.Printf("Warning\t" );
if( m_errDUP ) str.Printf("DUP(%u)\t", m_errDUP);
if( m_errNOF ) str.Printf("NOFACE(%u)\t", m_errNOF);
if( m_errINV ) str.Printf("Invalid(%u)\t", m_errINV);
if( m_errMLT ) str.Printf("DXCC Unknown(%u)\t", m_errMLT);
if( m_errBND ) str.Printf("DX on 2m & down(%u)", m_errBND);
str.Printf("\r\n" );
}
else {
str.Printf("No Warning\r\n");
}
str.Printf("\r\nMulti\tJAs(%u) + DX(%u) + DAYs(%u/%u) = %u \r\n", MJA, MDX, MDAY, m_Days, MALL);
str.Printf("Points\tHF(%u)+VU(%u)+S(%u) = %u\r\n", m_CountHF, m_CountVU*2, m_CountS*3, Score);
str.Printf("Total\t%u x %u = %u\r\n", Score, MALL, Total);
str.Printf("Output\t%s %s", m_LogName, m_SumName);
Memo->Text = str.GetText();
fprintf(pfLog, "-------------------------------------------------------------------\n");
fprintf(pfLog, "Total JA's area:%u\n", MJA);
fprintf(pfLog, "%2u days DXCC :%-3u %9u Points\n",m_Days, MDX, Score);
fprintf(pfLog, "Total point %u*(%u+%u+%u)=%u\n", Score, MJA, MDX, MDAY, Total);
if( m_errDUP || m_errNOF || m_errINV ){
fprintf(pfLog, "\n[Note]\n");
if( m_errDUP ) fprintf(pfLog, "*DUP* : Duplicate QSO\n");
if( m_errNOF ) fprintf(pfLog, "*NOF* : Nothing his/her face in the received PIC\n");
if( m_errINV ) fprintf(pfLog, "*INV* : Invalid QSO\n");
}
fclose(pfLog);
const LPCSTR _tsize[]={"S","M","L","LL","?","?"};
pfLog = fopen(m_SumName, "wt");
if( MsgEng ){
fprintf(pfLog, "\n%04u JASTA SSTV CONTEST SUMMARY SHEET\n\n", sys.m_Year);
fprintf(pfLog, "1. Contest Name : %s\n", sys.m_CName.c_str());
fprintf(pfLog, "2. Entry Section : %s\n", sys.m_Category ? "S" : "J");
fprintf(pfLog, "3. First time entry : %s\n", sys.m_First ? "Yes" : "No");
fprintf(pfLog, "4. OM or YL(XYL) : %s\n", sys.m_Sexual ? "YL/XYL":"OM");
fprintf(pfLog, "5. Size of T-shirts : %s (for an Activity Premium)\n", _tsize[sys.m_TSize]);
fprintf(pfLog, "6. Callsign : %s\n", sys.m_Call.c_str());
fprintf(pfLog, "7. Address : Postal Zip Code %s\n", sys.m_Zip.c_str());
fprintf(pfLog, " : %s\n", sys.m_Adr.c_str());
fprintf(pfLog, " e-mail : %s\n", sys.m_Mail.c_str());
fprintf(pfLog, "8. Name : %s\n", sys.m_Name.c_str());
fprintf(pfLog, "9. Licensed Class : %s\n", sys.m_License.c_str());
fprintf(pfLog, "10.Output Power : %s\n", sys.m_Pow.c_str());
fprintf(pfLog, "11.Result\n");
fprintf(pfLog, " (1)Confirmed QSO number of 3.5-28MHz %5u x 1 = %u points\n", m_CountHF, m_CountHF);
fprintf(pfLog, " (2)Confirmed QSO number of 50-430MHz %5u x 2 = %u points\n", m_CountVU, m_CountVU*2);
fprintf(pfLog, " (3)Confirmed QSO number of 1200MHz&UP %5u x 3 = %u points\n", m_CountS, m_CountS*3);
fprintf(pfLog, "\n\n");
fprintf(pfLog, " Total QSO points : (%u)+(%u)+(%u) = %u\n", m_CountHF, m_CountVU*2, m_CountS*3, Score);
fprintf(pfLog, "\n");
fprintf(pfLog, " (4)Total Areas of JA's = %u\n", MJA);
fprintf(pfLog, " (5)Total Entity of DXCC except JA = %u\n", MDX);
fprintf(pfLog, " (6)Total Worked Days(Maximum 10 days) = %u\n", MDAY );
fprintf(pfLog, "\n");
fprintf(pfLog, " Total Multi <20>F (%u)+(%u)+(%u) = %u\n", MJA, MDX, MDAY, MALL);
fprintf(pfLog, "\n\n");
fprintf(pfLog, " Total Points : %u x %u = %u points\n", Score, MALL, Total);
fprintf(pfLog, "\n");
fprintf(pfLog, "I declare my honor that in this contest I have operated\n" );
fprintf(pfLog, "my station within the limitations of my license and have\n" );
fprintf(pfLog, "observed fully the rules and regulations of the contest.\n" );
fprintf(pfLog, "\n" );
fprintf(pfLog, " %04u.%02u.%02u\n", m_now.wYear, m_now.wMonth, m_now.wDay);
fprintf(pfLog, " Singnature _________________\n" );
fprintf(pfLog, "\n");
fprintf(pfLog, "***************************************************************************\n");
fprintf(pfLog, "(Remarks)\n\n\n");
fprintf(pfLog, "---------------------------------------------------------------------------\n");
}
else {
fprintf(pfLog, "\n<EFBFBD>i<EFBFBD>`<60>r<EFBFBD>s<EFBFBD>` <20><><EFBFBD>Âr<C382>r<EFBFBD>s<EFBFBD>u<EFBFBD>R<EFBFBD><52><EFBFBD>e<EFBFBD>X<EFBFBD>g<EFBFBD>T<EFBFBD>}<7D><><EFBFBD>[<5B>V<EFBFBD>[<5B>g(<28>l<EFBFBD><6C><EFBFBD>`<60>r<EFBFBD>j\n\n");
fprintf(pfLog, "<EFBFBD>P<EFBFBD>D<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>X<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %s\n", sys.m_CName.c_str());
fprintf(pfLog, "<EFBFBD>Q<EFBFBD>D<EFBFBD>Q<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %s\n", sys.m_Category ? "S" : "J");
fprintf(pfLog, "<EFBFBD>R<EFBFBD>D<EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD><EFBFBD><EFBFBD>̋<EFBFBD><EFBFBD><EFBFBD> : %s\n", sys.m_First ? "<EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD><EFBFBD>" : "<EFBFBD>ߋ<EFBFBD><EFBFBD>ɂ<EFBFBD><EFBFBD>Q<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
fprintf(pfLog, "<EFBFBD>S<EFBFBD>D<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %s\n", sys.m_Sexual ? "YL/XYL":"OM");
fprintf(pfLog, "<EFBFBD>T. <20>s<EFBFBD>V<EFBFBD><56><EFBFBD>c<EFBFBD>̃T<CC83>C<EFBFBD>Y : %s (<28>A<EFBFBD>N<EFBFBD>e<EFBFBD>B<EFBFBD>u<EFBFBD>ܓ<EFBFBD><DC93>I<EFBFBD><49><EFBFBD>p)\n", _tsize[sys.m_TSize]);
fprintf(pfLog, "<EFBFBD>U<EFBFBD>D<EFBFBD>R<EFBFBD>[<5B><><EFBFBD>T<EFBFBD>C<EFBFBD><43> : %s\n", sys.m_Call.c_str());
fprintf(pfLog, "<EFBFBD>V<EFBFBD>D<EFBFBD>Z<EFBFBD><EFBFBD> : <20><>%s\n", sys.m_Zip.c_str());
fprintf(pfLog, " : %s\n", sys.m_Adr.c_str());
fprintf(pfLog, " e-mail : %s\n", sys.m_Mail.c_str());
fprintf(pfLog, "<EFBFBD>W. <20><><EFBFBD><EFBFBD> : %s\n", sys.m_Name.c_str());
fprintf(pfLog, "<EFBFBD>X. <20><><EFBFBD><EFBFBD><EFBFBD>]<5D><><EFBFBD>҂̎<D282><CC8E>i : %s\n", sys.m_License.c_str());
fprintf(pfLog, "10. <20>󒆐<EFBFBD><F3928690>d<EFBFBD><64> : %s\n", sys.m_Pow.c_str());
fprintf(pfLog, "11. <20><><EFBFBD><EFBFBD>\n");
fprintf(pfLog, " (1) 3.5<EFBFBD>`28MHz<48>тł̌<C582><CC8C>M<EFBFBD>ǐ<EFBFBD> %5u x 1 = %u <20>_\n", m_CountHF, m_CountHF);
fprintf(pfLog, " (2) 50<35>`430MHz<48>тł̌<C582><CC8C>M<EFBFBD>ǐ<EFBFBD> %5u x 2 = %u <20>_\n", m_CountVU, m_CountVU*2);
fprintf(pfLog, " (3) 1200MHz<48>шȏ<D188><C88F>ł̌<C582><CC8C>M<EFBFBD>ǐ<EFBFBD> %5u x 3 = %u <20>_\n", m_CountS, m_CountS*3);
fprintf(pfLog, "\n\n");
fprintf(pfLog, " <20><><EFBFBD>M<EFBFBD>_<EFBFBD><5F><EFBFBD>F(%u)+(%u)+(%u) = %u\n", m_CountHF, m_CountVU*2, m_CountS*3, Score);
fprintf(pfLog, "\n");
fprintf(pfLog, " (4) <20><><EFBFBD>M<EFBFBD><4D><EFBFBD><EFBFBD>JA<4A>̃G<CC83><47><EFBFBD>A<EFBFBD><41> = %u\n", MJA);
fprintf(pfLog, " (5) <20><><EFBFBD>M<EFBFBD><4D><EFBFBD><EFBFBD>DXCC<43>G<EFBFBD><47><EFBFBD>e<EFBFBD>B<EFBFBD>e<EFBFBD>B<EFBFBD><42><EFBFBD>iJA<4A><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j= %u\n", MDX);
fprintf(pfLog, " (6) <20>^<5E>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>ő<EFBFBD><C591>P<EFBFBD>O<EFBFBD>j = %u\n", MDAY );
fprintf(pfLog, "\n");
fprintf(pfLog, " <20>}<7D><><EFBFBD>`<60>F(%u)+(%u)+(%u) = %u\n", MJA, MDX, MDAY, MALL);
fprintf(pfLog, "\n\n");
fprintf(pfLog, " <20><><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>F<EFBFBD><46><EFBFBD>M<EFBFBD>_<EFBFBD><5F><EFBFBD>~<7E>}<7D><><EFBFBD>` = %u <20>~ %u = %u <20>_\n", Score, MALL, Total);
fprintf(pfLog, "\n");
fprintf(pfLog, " <20>ȏ<EFBFBD><C88F>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ɒ<EFBFBD><C992>o<EFBFBD><6F><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>}<7D><><EFBFBD>[<5B>͉^<5E>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƒ<EFBFBD><C691><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>𐾂<EFBFBD><F090BE82>܂<EFBFBD><DC82>B\n");
fprintf(pfLog, "\n");
fprintf(pfLog, " %04u<34>N %02u<32><75> %02u<32><75>\n", m_now.wYear, m_now.wMonth, m_now.wDay);
fprintf(pfLog, "\n");
fprintf(pfLog, "***************************************************************************\n");
fprintf(pfLog, "<EFBFBD>i<EFBFBD>ӌ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΂<EFBFBD><EFBFBD>̗<EFBFBD><EFBFBD>ɋL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>j\n\n\n");
fprintf(pfLog, "---------------------------------------------------------------------------\n");
}
fclose(pfLog);
MakeANA();
if( m_errMLT ){
WarningMB(MsgEng ? "There are unknown DXCC entities.\r\nDouble click on [DXCC Unknown] in the status window, and then edit the multi." : "<EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DXCC<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>e<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><EFBFBD>܂<EFBFBD>.\r\n<EFBFBD>uDXCC Unknown<77>v<EFBFBD><76><EFBFBD>_<EFBFBD>u<EFBFBD><75><EFBFBD>N<EFBFBD><4E><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>ĉ<EFBFBD><C489><EFBFBD><EFBFBD><EFBFBD>.");
return;
}
KVAClick(NULL);
KVLClick(NULL);
KVSClick(NULL);
}
//---------------------------------------------------------------------------
int __fastcall TMainWnd::GetBNO(int b)
{
// 3.5, 7, 14, 18, 21, 24, 28, 50, 144, 430, 1200, 2400+
if( b >= B_2400 ){
b = 9;
}
else {
switch(b){
case B_35:
case B_38:
b = 0;
break;
case B_7:
b = 1;
break;
default:
if( b >= B_14 ){
b -= B_14;
b += 2;
}
else {
b = 11;
}
break;
}
}
return b;
}
//---------------------------------------------------------------------------
// <20><><EFBFBD>̓t<CD83>B<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EC90AC><EFBFBD><EFBFBD>
void __fastcall TMainWnd::MakeANA(void)
{
FILE *fp = fopen(m_AnaName, "wt");
if( fp == NULL ) return;
fprintf(fp, "\nAnalysis of %04u JASTA SSTV CONTEST\n\n", sys.m_Year);
SDMMLOG sd;
CMULT MTMP;
int i, n;
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n ){
MTMP.Add(clipsp(sd.call));
}
}
MTMP.SortCount();
int b;
int max = MTMP.GetCount();
fprintf(fp, "[Number of QSOs according to a callsign (%u/%u)]\n", max, MTMP.GetTotal());
int col, row;
int base = 0;
while(1){
for( row = 0; row < 50; row++ ){
fprintf(fp, "%-4u ", base + row + 1);
for( col = 0; col < 4; col++ ){
int n = base + (col * 50 + row);
if( n < max ){
fprintf(fp, "(%2u) %-13s", MTMP.GetCount(n), MTMP.GetText(n));
}
else {
continue;
}
}
fprintf(fp, "\n");
}
fprintf(fp, "\n");
base += 200;
if( base >= max ) break;
}
int sum;
CMULT MDX[16];
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n && m_MJA.GetCount(sd.opt1) ){
b = GetBNO(sd.band);
MDX[b].Add(sd.opt1);
}
}
for( b = 0; b < 11; b++ ){
MDX[b].Set("all", MDX[b].GetTotal());
}
m_MJA.Sort();
fprintf(fp, "[Number of QSOs according to a JA's area (%u/%u)]\n", m_MJA.GetCount(), m_MJA.GetTotal());
fprintf(fp, "Area 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
m_MJA.Add("all");
for( row = 0; row < m_MJA.GetCount(); row++ ){
LPCSTR pDX = m_MJA.GetText(row);
fprintf(fp, "%-5s ", pDX);
sum = 0;
for( b = 0; b < 12; b++ ){
n = MDX[b].GetCount(pDX);
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
}
fprintf(fp, sum ? "%4u\n" : " -\n", sum);
}
fprintf(fp, "\n");
for( b = 0; b < 11; b++ ){
MDX[b].Clear();
}
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n && m_MDX.GetCount(sd.opt1) ){
b = GetBNO(sd.band);
MDX[b].Add(sd.opt1);
}
}
for( b = 0; b < 11; b++ ){
MDX[b].Set("all", MDX[b].GetTotal());
}
m_MDX.Sort();
fprintf(fp, "[Number of QSOs according to a DX entity (%u/%u)]\n", m_MDX.GetCount(), m_MDX.GetTotal());
fprintf(fp, "Entity 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
m_MDX.Add("all");
for( row = 0; row < m_MDX.GetCount(); row++ ){
LPCSTR pDX = m_MDX.GetText(row);
fprintf(fp, "%-5s ", pDX);
sum = 0;
for( b = 0; b < 12; b++ ){
n = MDX[b].GetCount(pDX);
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
}
fprintf(fp, sum ? "%4u\n" : " -\n", sum);
}
fprintf(fp, "\n");
for( b = 0; b < 11; b++ ) MDX[b].Clear();
MTMP.Clear();
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n ){
b = GetBNO(sd.band);
MTMP.Add(sd.opt2);
MDX[b].Add(sd.opt2);
}
}
for( b = 0; b < 11; b++ ){
MDX[b].Set("all", MDX[b].GetTotal());
}
MTMP.Sort();
MTMP.Add("all");
fprintf(fp, "[Number of QSOs according to a continent]\n");
fprintf(fp, "Conti. 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < MTMP.GetCount(); row++ ){
LPCSTR pDX = MTMP.GetText(row);
fprintf(fp, "%-5s ", pDX);
sum = 0;
for( b = 0; b < 12; b++ ){
n = MDX[b].GetCount(pDX);
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
}
fprintf(fp, sum ? "%4u\n" : " -\n", sum);
}
fprintf(fp, "\n");
int QSODs[16][32];
int QSOHs[16][25];
memset(QSODs, 0, sizeof(QSODs));
memset(QSOHs, 0, sizeof(QSOHs));
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n ){
b = GetBNO(sd.band);
n = sd.date % 100;
if( (n >= 1) && (n <= 31) ){
n--;
QSODs[b][n]++;
}
n = (sd.btime / 30) / 60;
if( (n >= 0) && (n <= 23) ){
QSOHs[b][n]++;
}
}
}
fprintf(fp, "[Number of QSOs according to a day(UTC)]\n");
fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 32; row++ ){
fprintf(fp, row == 31 ? "all " : "%02u ", row + 1);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSODs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSODs[b][31] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
fprintf(fp, "[Number of QSOs according to an hour(UTC)]\n");
fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 25; row++ ){
fprintf(fp, row == 24 ? "all " : "%02u ", row);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSOHs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSOHs[b][24] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
memset(QSODs, 0, sizeof(QSODs));
memset(QSOHs, 0, sizeof(QSOHs));
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n && !IsJA(sd.call) ){
b = GetBNO(sd.band);
n = sd.date % 100;
if( (n >= 1) && (n <= 31) ){
n--;
QSODs[b][n]++;
}
n = (sd.btime / 30) / 60;
if( (n >= 0) && (n <= 23) ){
QSOHs[b][n]++;
}
}
}
fprintf(fp, "[Number of QSOs (DX) according to a day(UTC)]\n");
fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 32; row++ ){
fprintf(fp, row == 31 ? "all " : "%02u ", row + 1);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSODs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSODs[b][31] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
fprintf(fp, "[Number of QSOs (DX) according to an hour(UTC)]\n");
fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 25; row++ ){
fprintf(fp, row == 24 ? "all " : "%02u ", row);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSOHs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSOHs[b][24] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
memset(QSODs, 0, sizeof(QSODs));
memset(QSOHs, 0, sizeof(QSOHs));
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n && IsJA(sd.call) ){
b = GetBNO(sd.band);
n = sd.date % 100;
if( (n >= 1) && (n <= 31) ){
n--;
QSODs[b][n]++;
}
n = (sd.btime / 30) / 60;
if( (n >= 0) && (n <= 23) ){
QSOHs[b][n]++;
}
}
}
fprintf(fp, "[Number of QSOs (JA) according to a day(UTC)]\n");
fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 32; row++ ){
fprintf(fp, row == 31 ? "all " : "%02u ", row + 1);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSODs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSODs[b][31] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
fprintf(fp, "[Number of QSOs (JA) according to an hour(UTC)]\n");
fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 25; row++ ){
fprintf(fp, row == 24 ? "all " : "%02u ", row);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSOHs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSOHs[b][24] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
memset(QSODs, 0, sizeof(QSODs));
memset(QSOHs, 0, sizeof(QSOHs));
CMULT MLTD, MLTH;
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n && sd.opt1[0] && !IsJA(sd.call) && (strchr(sd.opt1, '?')==NULL) ){
b = GetBNO(sd.band);
n = sd.date % 100;
if( (n >= 1) && (n <= 31) ){
n--;
if( MLTD.Add(sd.opt1) ) QSODs[b][n]++;
}
n = (sd.btime / 30) / 60;
if( (n >= 0) && (n <= 23) ){
if( MLTH.Add(sd.opt1) ) QSOHs[b][n]++;
}
}
}
fprintf(fp, "[Number of NEW MULTIs (DX) according to a day(UTC)]\n");
fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 32; row++ ){
fprintf(fp, row == 31 ? "all " : "%02u ", row + 1);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSODs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSODs[b][31] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
fprintf(fp, "[Number of NEW MULTIs (DX) according to an hour(UTC)]\n");
fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 25; row++ ){
fprintf(fp, row == 24 ? "all " : "%02u ", row);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSOHs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSOHs[b][24] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
memset(QSODs, 0, sizeof(QSODs));
memset(QSOHs, 0, sizeof(QSOHs));
MLTD.Clear();
MLTH.Clear();
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetData(&sd, i);
n = atoin(sd.qsl, -1);
if( n && sd.opt1[0] && IsJA(sd.call) && (strchr(sd.opt1, '?')==NULL) ){
b = GetBNO(sd.band);
n = sd.date % 100;
if( (n >= 1) && (n <= 31) ){
n--;
if( MLTD.Add(sd.opt1) ) QSODs[b][n]++;
}
n = (sd.btime / 30) / 60;
if( (n >= 0) && (n <= 23) ){
if( MLTH.Add(sd.opt1) ) QSOHs[b][n]++;
}
}
}
fprintf(fp, "[Number of NEW MULTIs (JA) according to a day(UTC)]\n");
fprintf(fp, "Day 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 32; row++ ){
fprintf(fp, row == 31 ? "all " : "%02u ", row + 1);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSODs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSODs[b][31] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
fprintf(fp, "[Number of NEW MULTIs (JA) according to an hour(UTC)]\n");
fprintf(fp, "Hour 3.5 7 14 18 21 24 28 50 144 430 1200 2400+ all\n");
for( row = 0; row < 25; row++ ){
fprintf(fp, row == 24 ? "all " : "%02u ", row);
int sum = 0;
for( b = 0; b < 12; b++ ){
n = QSOHs[b][row];
sum += n;
fprintf(fp, n ? "%4u " : " - ", n);
QSOHs[b][24] += n;
}
fprintf(fp, sum ? "%4u" : " -", sum);
fprintf(fp, "\n");
}
fprintf(fp, "\n");
fclose(fp);
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KFSClick(TObject *Sender)
{
int meng = MsgEng;
TOptDlgBox *pBox = new TOptDlgBox(this);
int r = pBox->Execute();
delete pBox;
if( meng != MsgEng ) SetLanguage();
if( (r == TRUE) && Log.IsOpen() && !m_SrcName.IsEmpty() ){
m_ReCalc = TRUE;
if( YesNoMB(MsgEng ? "Does totalize once again?" : "<EFBFBD>W<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD> ?") == IDYES ){
Exec(m_SrcName.c_str(), FALSE);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KVLClick(TObject *Sender)
{
if( m_pEditLog != NULL ) delete m_pEditLog;
if( m_LogName[0] ){
m_pEditLog = new TFileEdit(this);
m_pEditLog->Execute(m_LogName);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KVSClick(TObject *Sender)
{
if( m_pEditSum != NULL ) delete m_pEditSum;
if( m_SumName[0] ){
m_pEditSum = new TFileEdit(this);
m_pEditSum->Execute(m_SumName);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KVAClick(TObject *Sender)
{
if( m_pEditAna != NULL ) delete m_pEditAna;
if( m_AnaName[0] ){
m_pEditAna = new TFileEdit(this);
m_pEditAna->Execute(m_AnaName);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KVClick(TObject *Sender)
{
KVL->Enabled = m_LogName[0] && IsFile(m_LogName) ? TRUE : FALSE;
KVS->Enabled = m_SumName[0] && IsFile(m_SumName) ? TRUE : FALSE;
KVA->Enabled = m_AnaName[0] && IsFile(m_AnaName) ? TRUE : FALSE;
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::MoveGrid(int n)
{
Grid->Row = n + 1;
if( (Grid->Row < Grid->TopRow) || (Grid->Row >= (Grid->TopRow+8)) ){
Grid->TopRow = Grid->Row;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::MemoClick(TObject *Sender)
{
m_GridMove = FALSE;
if( Memo->Lines->Count ){
int e = Memo->SelStart;
LPCSTR p = AnsiString(Memo->Text).c_str(); //ja7ude 0525
int n = 0;
for( int i = 0; i < e; i++, p++ ){
if( *p == LF ) n++;
}
if( n > Memo->Lines->Count ) n = Memo->Lines->Count - 1;
char bf[256];
StrCopy(bf, AnsiString(Memo->Lines->Strings[n]).c_str(), sizeof(bf)-1);
if( isdigit(bf[0]) ){
LPSTR t;
StrDlm(t, bf, ' ');
n = atoin(t, -1) - 1;
if( (n >= 0) && (n < Log.GetCount()) ){
MoveGrid(n);
m_GridMove = TRUE;
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::MemoDblClick(TObject *Sender)
{
if( m_GridMove ){
GridDblClick(NULL);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KHTClick(TObject *Sender)
{
ShowHelp(this, MsgEng ? "EMMJASTA.TXT":"MMJASTA.TXT");
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KHMClick(TObject *Sender)
{
WebRef.ShowHTML(MsgEng ? "http://www.qsl.net/mmhamsoft/" : "http://plaza27.mbn.or.jp/~je3hht/mmsstv/index.html");
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KHRClick(TObject *Sender)
{
WebRef.ShowHTML(MsgEng ? "http://groups.yahoo.com/group/MM-SSTV/" : "http://www.egroups.co.jp/group/mmhamsoft/");
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KHWClick(TObject *Sender)
{
WebRef.ShowHTML("http://homepage3.nifty.com/jasta/");
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::GridDblClick(TObject *Sender)
{
if( m_SrcName.IsEmpty() ) return;
if( !Log.IsOpen() ) return;
int n = Grid->Row - 1;
if( (n >= 0) && (n < Log.GetCount()) ){
TQSODlgBox *pBox = new TQSODlgBox(this);
SDMMLOG sd, rsd;
Log.GetData(&sd, n);
memcpy(&rsd, &sd, sizeof(sd));
if( pBox->Execute(&sd) == TRUE ){
DelLastSpace(sd.opt1);
DelLastSpace(sd.opt2);
if( strcmp(sd.opt1, rsd.opt1) || strcmp(sd.opt2, rsd.opt2) ){
LPSTR p = lastp(sd.opt1);
p+=2;
*p = 0x01;
p = lastp(sd.opt2);
p+=2;
*p = 0x01;
CLogFile orgLog;
orgLog.Open(m_SrcName.c_str(), TRUE);
if( !orgLog.IsOpen() ) return;
m_ReCalc = TRUE;
int i;
for( i = 0; i < Log.GetCount(); i++ ){
Log.GetIndex()->ReadIndex(rsd.call, i);
if( !strcmp(sd.call, rsd.call) ){
Log.GetData(&rsd, i);
memcpy(rsd.opt1, sd.opt1, MLOPT);
memcpy(rsd.opt2, sd.opt2, MLOPT);
Log.PutData(&rsd, i);
}
}
for( i = 0; i < orgLog.GetCount(); i++ ){
orgLog.GetIndex()->ReadIndex(rsd.call, i);
if( !strcmp(sd.call, rsd.call) ){
orgLog.GetData(&rsd, i);
memcpy(rsd.opt1, sd.opt1, MLOPT);
memcpy(rsd.opt2, sd.opt2, MLOPT);
orgLog.PutData(&rsd, i);
}
}
orgLog.Close();
}
}
Grid->Invalidate();
delete pBox;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KFRClick(TObject *Sender)
{
if( m_ReCalc ){
Exec(m_SrcName.c_str(), FALSE);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::KFClick(TObject *Sender)
{
KFR->Enabled = m_ReCalc && (!m_SrcName.IsEmpty());
}
//---------------------------------------------------------------------------
LPCSTR __fastcall TMainWnd::ConvADIF(LPCSTR pName, int loadorg)
{
AnsiString LogName = pName;
char TmpName[256];
sprintf(TmpName, "%s"TEMPLOGNAME, BgnDir);
m_SrcName = TmpName;
if( !loadorg ) return m_SrcName.c_str();
CLogADIF adif;
if( adif.Open(LogName.c_str()) == FALSE ) return NULL;
CLogFile tmpLog;
tmpLog.Open(TmpName, TRUE);
if( !tmpLog.IsOpen() ) return NULL;
tmpLog.DeleteAll();
SDMMLOG sd;
memset(&sd, 0, sizeof(sd));
CWaitCursor w;
while(adif.Read(&sd)==TRUE){
if( (sd.mode == 8) && (sd.band >= B_35) ){
sd.opt1[0] = 0; sd.opt2[0] = 0;
tmpLog.PutData(&sd, tmpLog.GetCount());
}
memset(&sd, 0, sizeof(sd));
}
adif.Close();
tmpLog.Close();
return m_SrcName.c_str();
}
//---------------------------------------------------------------------------
LPCSTR __fastcall TMainWnd::ConvLog200(LPCSTR pName, int loadorg)
{
AnsiString LogName = pName;
char TmpName[256];
sprintf(TmpName, "%s"TEMPLOGNAME, BgnDir);
m_SrcName = TmpName;
if( !loadorg ) return m_SrcName.c_str();
CLog200 log;
if( log.Open(LogName.c_str()) == FALSE ) return NULL;
CLogFile tmpLog;
tmpLog.Open(TmpName, TRUE);
if( !tmpLog.IsOpen() ) return NULL;
tmpLog.DeleteAll();
SDMMLOG sd;
CWaitCursor w;
while(log.Read(&sd)==TRUE){
if( (sd.mode == 8) && (sd.band >= B_35) ){
sd.opt1[0] = 0; sd.opt2[0] = 0;
tmpLog.PutData(&sd, tmpLog.GetCount());
}
}
log.Close();
tmpLog.Close();
return m_SrcName.c_str();
}
//---------------------------------------------------------------------------
LPCSTR __fastcall TMainWnd::ConvHAMLOG(LPCSTR pName, int loadorg)
{
AnsiString LogName = pName;
char TmpName[256];
sprintf(TmpName, "%s"TEMPLOGNAME, BgnDir);
m_SrcName = TmpName;
if( !loadorg ) return m_SrcName.c_str();
CHamLog log;
if( log.Open(LogName.c_str()) == FALSE ) return NULL;
CLogFile tmpLog;
tmpLog.Open(TmpName, TRUE);
if( !tmpLog.IsOpen() ) return NULL;
tmpLog.DeleteAll();
SDMMLOG sd;
CWaitCursor w;
while(log.Read(&sd)==TRUE){
if( (sd.mode == 8) && (sd.band >= B_35) ){
sd.opt1[0] = 0; sd.opt2[0] = 0;
AdjustHamlogRSV(&sd);
tmpLog.PutData(&sd, tmpLog.GetCount());
}
}
log.Close();
tmpLog.Close();
return m_SrcName.c_str();
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::AdjustHamlogRSV(SDMMLOG *sp)
{
char bf[MLREM+1];
if( strlen(sp->ur) <= 3 ){
NumCopy(bf, sp->rem);
if( bf[0] ){
int n = atoin(bf, -1);
sprintf(bf, "%03u", n);
strcat(sp->ur, bf);
}
}
if( strlen(sp->my) <= 3 ){
NumCopy(bf, sp->qsl);
if( bf[0] ){
int n = atoin(bf, -1);
sprintf(bf, "%03u", n);
strcat(sp->my, bf);
}
}
}
//---------------------------------------------------------------------------