void FormatIGCFilename(TCHAR* buffer, const BrokenDate &date, TCHAR manufacturer, const TCHAR *logger_id, unsigned flight_number) { assert(logger_id != NULL); assert(_tcslen(logger_id) == 3); TCHAR cyear = NumToIGCChar(date.year % 10); TCHAR cmonth = NumToIGCChar(date.month); TCHAR cday = NumToIGCChar(date.day); TCHAR cflight = NumToIGCChar(flight_number); _stprintf(buffer, _T("%c%c%c%c%s%c.igc"), cyear, cmonth, cday, manufacturer, logger_id, cflight); }
void StartLogger() { HANDLE hFile; int i; TCHAR path[MAX_PATH+1]; TCHAR cAsset[3]; // strAsset is initialized with DUM. if (_tcslen(PilotName_Config)>0) { strAssetNumber[0]= IsAlphaNum(PilotName_Config[0]) ? PilotName_Config[0] : _T('A'); strAssetNumber[1]= IsAlphaNum(PilotName_Config[1]) ? PilotName_Config[1] : _T('A'); } else { strAssetNumber[0]= _T('D'); strAssetNumber[1]= _T('U'); } if (_tcslen(AircraftType_Config)>0) { strAssetNumber[2]= IsAlphaNum(AircraftType_Config[0]) ? AircraftType_Config[0] : _T('A'); } else { strAssetNumber[2]= _T('M'); } strAssetNumber[0]= towupper(strAssetNumber[0]); strAssetNumber[1]= towupper(strAssetNumber[1]); strAssetNumber[2]= towupper(strAssetNumber[2]); strAssetNumber[3]= _T('\0'); for (i=0; i < 3; i++) { // chars must be legal in file names cAsset[i] = IsAlphaNum(strAssetNumber[i]) ? strAssetNumber[i] : _T('A'); } LocalPath(path,TEXT(LKD_LOGS)); if (TaskModified) { SaveDefaultTask(); } wsprintf(szLoggerFileName, TEXT("%s\\LOGGER_TMP.IGC"), path); wsprintf(szSLoggerFileName, TEXT("%s\\LOGGER_SIG.IGC"), path); TCHAR newfile[MAX_PATH+20]; if (GetFileAttributes(szLoggerFileName) != 0xffffffff) { StartupStore(_T("---- Logger recovery: Existing LOGGER_TMP.IGC found, renamed to LOST%s"),NEWLINE); wsprintf(newfile, TEXT("%s\\LOST_%02d%02d%02d.IGC"), path, GPS_INFO.Hour, GPS_INFO.Minute, GPS_INFO.Second); CopyFile(szLoggerFileName,newfile,TRUE); DeleteFile(szLoggerFileName); } if (GetFileAttributes(szSLoggerFileName) != 0xffffffff) { StartupStore(_T("---- Logger recovery (G): Existing LOGGER_SIG.IGC found, renamed to LOSTG%s"),NEWLINE); wsprintf(newfile, TEXT("%s\\LOSTG_%02d%02d%02d.IGC"), path, GPS_INFO.Hour, GPS_INFO.Minute, GPS_INFO.Second); CopyFile(szSLoggerFileName,newfile,TRUE); DeleteFile(szSLoggerFileName); } for(i=1;i<99;i++) { // 2003-12-31-XXX-987-01.IGC // long filename form of IGC file. // XXX represents manufacturer code if (!LoggerShortName) { // Long file name wsprintf(szFLoggerFileName, TEXT("%s\\%04d-%02d-%02d-%s-%c%c%c-%02d.IGC"), path, GPS_INFO.Year, GPS_INFO.Month, GPS_INFO.Day, _T(LOGGER_MANUFACTURER), cAsset[0], cAsset[1], cAsset[2], i); wsprintf(szFLoggerFileNameRoot, TEXT("%s\\%04d-%02d-%02d-%s-%c%c%c-%02d.IGC"), TEXT(""), // this creates it in root if MoveFile() fails GPS_INFO.Year, GPS_INFO.Month, GPS_INFO.Day, _T(LOGGER_MANUFACTURER), cAsset[0], cAsset[1], cAsset[2], i); } else { // Short file name TCHAR cyear, cmonth, cday, cflight; cyear = NumToIGCChar((int)GPS_INFO.Year % 10); cmonth = NumToIGCChar(GPS_INFO.Month); cday = NumToIGCChar(GPS_INFO.Day); cflight = NumToIGCChar(i); wsprintf(szFLoggerFileName, TEXT("%s\\%c%c%cX%c%c%c%c.IGC"), path, cyear, cmonth, cday, cAsset[0], cAsset[1], cAsset[2], cflight); wsprintf(szFLoggerFileNameRoot, TEXT("%s\\%c%c%cX%c%c%c%c.IGC"), TEXT(""), // this creates it in root if MoveFile() fails cyear, cmonth, cday, cAsset[0], cAsset[1], cAsset[2], cflight); } // end if hFile = CreateFile(szFLoggerFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); if(hFile!=INVALID_HANDLE_VALUE ) { // file already exists CloseHandle(hFile); DeleteFile(szFLoggerFileName); break; } } // end while StartupStore(_T(". Logger Started %s File <%s>%s"), WhatTimeIsIt(), szFLoggerFileName,NEWLINE); return; }
void LoggerImpl::StartLogger(const NMEA_INFO &gps_info, const SETTINGS_COMPUTER &settings, const TCHAR *astrAssetNumber) { HANDLE hFile; int i; TCHAR path[MAX_PATH]; TCHAR cAsset[3]; for (i=0; i < 3; i++) { // chars must be legal in file names cAsset[i] = IsAlphaNum(strAssetNumber[i]) ? strAssetNumber[i] : _T('A'); } // VENTA3 use logs subdirectory when not in main memory (true for FIVV and PNA) #if defined(GNAV) || defined(FIVV) || defined(PNA) LocalPath(path,TEXT("logs")); #else LocalPath(path); #endif if (task.isTaskModified()) { task.SaveDefaultTask(); } #ifdef WINDOWSPC _stprintf(szLoggerFileName, TEXT("/tmp/tmp.IGC")); #else _stprintf(szLoggerFileName, TEXT("\\tmp.IGC")); #endif DeleteFile(szLoggerFileName); LoggerGInit(); for(i=1;i<99;i++) { // 2003-12-31-XXX-987-01.IGC // long filename form of IGC file. // XXX represents manufacturer code if (!settings.LoggerShortName) { // Long file name _stprintf(szFLoggerFileName, TEXT("%s\\%04d-%02d-%02d-XCS-%c%c%c-%02d.IGC"), path, gps_info.Year, gps_info.Month, gps_info.Day, cAsset[0], cAsset[1], cAsset[2], i); _stprintf(szFLoggerFileNameRoot, TEXT("%s\\%04d-%02d-%02d-XCS-%c%c%c-%02d.IGC"), TEXT(""), // this creates it in root if MoveFile() fails gps_info.Year, gps_info.Month, gps_info.Day, cAsset[0], cAsset[1], cAsset[2], i); } else { // Short file name TCHAR cyear, cmonth, cday, cflight; cyear = NumToIGCChar((int)gps_info.Year % 10); cmonth = NumToIGCChar(gps_info.Month); cday = NumToIGCChar(gps_info.Day); cflight = NumToIGCChar(i); _stprintf(szFLoggerFileName, TEXT("%s\\%c%c%cX%c%c%c%c.IGC"), path, cyear, cmonth, cday, cAsset[0], cAsset[1], cAsset[2], cflight); _stprintf(szFLoggerFileNameRoot, TEXT("%s\\%c%c%cX%c%c%c%c.IGC"), TEXT(""), // this creates it in root if MoveFile() fails cyear, cmonth, cday, cAsset[0], cAsset[1], cAsset[2], cflight); } // end if hFile = CreateFile(szFLoggerFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); if(hFile!=INVALID_HANDLE_VALUE ) { // file already exists CloseHandle(hFile); DeleteFile(szFLoggerFileName); break; } } // end while TCHAR szMessage[MAX_PATH] = TEXT("\0"); _tcsncpy(szMessage,TEXT("Logger Started: "),MAX_PATH); _tcsncat(szMessage,szFLoggerFileName,MAX_PATH); _tcsncat(szMessage,TEXT("\r\n"),MAX_PATH); StartupStore(szMessage); return; }