void ReadWayPoints(WayPointList &way_points, RasterTerrain &terrain) { StartupStore(TEXT("ReadWayPoints\n")); TCHAR szFile1[MAX_PATH] = TEXT("\0"); TCHAR szFile2[MAX_PATH] = TEXT("\0"); bool file_embedded = false; // JMW TODO protect with mutex (whole waypoint list class) CloseWayPoints(way_points); GetRegistryString(szRegistryWayPointFile, szFile1, MAX_PATH); SetRegistryString(szRegistryWayPointFile, TEXT("\0")); if (_tcslen(szFile1)>0) { ExpandLocalPath(szFile1); } else { file_embedded = true; GetRegistryString(szRegistryMapFile, szFile1, MAX_PATH); ExpandLocalPath(szFile1); _tcscat(szFile1, TEXT("/")); _tcscat(szFile1, TEXT("waypoints.xcw")); } globalFileNum = 0; if (ReadWayPointFile(szFile1, way_points, terrain)) { // read OK, so set the registry to the actual file name if (!file_embedded) { printf("save\n"); ContractLocalPath(szFile1); SetRegistryString(szRegistryWayPointFile, szFile1); } } else { StartupStore(TEXT("No waypoint file 1\n")); } // read additional waypoint file GetRegistryString(szRegistryAdditionalWayPointFile, szFile2, MAX_PATH); SetRegistryString(szRegistryAdditionalWayPointFile, TEXT("\0")); if (_tcslen(szFile2)>0){ ExpandLocalPath(szFile2); globalFileNum = 1; if (ReadWayPointFile(szFile2, way_points, terrain)) { // read OK, so set the registry to the actual file name ContractLocalPath(szFile2); SetRegistryString(szRegistryAdditionalWayPointFile, szFile2); } else { StartupStore(TEXT("No waypoint file 2\n")); } } }
bool ReadWayPointZipFile(const TCHAR *path, WayPointList &way_points, RasterTerrain &terrain) { char path_ascii[MAX_PATH]; ZZIP_FILE *fp; unicode2ascii(path, path_ascii, sizeof(path_ascii)); fp = zzip_fopen(path_ascii, "rt"); if (fp == NULL) return false; ReadWayPointFile(fp, path, way_points, terrain); zzip_fclose(fp); return true; }
bool ReadWayPointFile(const TCHAR *path, WayPointList &way_points, RasterTerrain &terrain) { char path_ascii[MAX_PATH]; FILE *fp; unicode2ascii(path, path_ascii, sizeof(path_ascii)); fp = fopen(path_ascii, "rt"); if (fp == NULL) /* fall back to ReadWayPointZipFile() if the file was not found */ return #ifdef HAVE_POSIX errno == ENOTDIR && #endif ReadWayPointZipFile(path, way_points, terrain); ReadWayPointFile(fp, path, way_points, terrain); fclose(fp); return true; }
void ReadWayPoints(void) { #if TESTBENCH StartupStore(TEXT(". ReadWayPoints%s"),NEWLINE); #endif TCHAR szFile1[MAX_PATH] = TEXT("\0"); TCHAR szFile2[MAX_PATH] = TEXT("\0"); ZZIP_FILE *fp=NULL; LockTaskData(); CloseWayPoints(); // BUGFIX 091104 duplicate waypoints entries InitVirtualWaypoints(); // 091103 _tcscpy(szFile1,szWaypointFile); _tcscpy(szWaypointFile,_T("")); if (_tcslen(szFile1)>0) { ExpandLocalPath(szFile1); fp = openzip(szFile1, "rt"); } else { } if(fp != NULL) { globalFileNum = 0; WpFileType[1]=ReadWayPointFile(fp, szFile1); zzip_fclose(fp); fp = 0; // read OK, so set the registry to the actual file name ContractLocalPath(szFile1); _tcscpy(szWaypointFile,szFile1); } else { StartupStore(TEXT("--- No waypoint file 1%s"),NEWLINE); } // read additional waypoint file // reset to empty until we verified it is existing _tcscpy(szFile2,szAdditionalWaypointFile); _tcscpy(szAdditionalWaypointFile,_T("")); if (_tcslen(szFile2)>0){ ExpandLocalPath(szFile2); fp = openzip(szFile2, "rt"); if(fp != NULL){ globalFileNum = 1; WpFileType[2]=ReadWayPointFile(fp, szFile2); zzip_fclose(fp); fp = NULL; // read OK, so set the registry to the actual file name ContractLocalPath(szFile2); _tcscpy(szAdditionalWaypointFile,szFile2); } else { StartupStore(TEXT("--- No waypoint file 2%s"),NEWLINE); } } // each time we load WayPoint, we need to init WaypointCalc !! InitWayPointCalc(); UnlockTaskData(); }