bool IGN_ReadTiles(long minx, long maxx, long miny, long maxy, CProgressWindow& wndProgress, unsigned char * bitmap_palette, long & bitmap_palette_length, unsigned char * & bitmap_memory , long & bitmap_memory_size, long & bitmap_width, long & dest_bitmap_width, long & bitmap_height, long & dest_bitmap_height) { // PNG writing variables CIGNTileDatabase db; long width=400, height=400; long x,y; for (y=maxy-1; y>=miny; y--) { for (x=minx; x<maxx; x++) { if (!wndProgress.ProgressBar()) return false; // COMMON start if (bitmap_memory == NULL) { // First square found so allocate memory for bitmap bitmap_width = width*(maxx-minx); bitmap_height = height*(maxy-miny); dest_bitmap_width = width*(maxx-minx-2); dest_bitmap_height = height*(maxy-miny-2); bitmap_memory_size = bitmap_width * bitmap_height; bitmap_memory = (BYTE *)malloc(bitmap_memory_size); if (bitmap_memory == NULL) { printf("Couldn't allocate %d bytes for bitmap\n", bitmap_memory_size); //exit(0); return false; } memset(bitmap_memory, 0x00, bitmap_memory_size); // assume 0x00 is white /* if (bitmap_width > 32000) printf("Warning: width is %d pixels\n", bitmap_width); if (bitmap_height > 32000) printf("Warning: height is %d pixels\n", bitmap_height); */ // get palette from database bitmap_palette_length = 4*256; memcpy(bitmap_palette, get_ign_palette(), bitmap_palette_length); } // COMMON end // copy tile into bitmap area IGN_read_bmp(y*1000, x*1000, &db, bitmap_memory + (maxy-1-y)*height*bitmap_width+(x-minx)*width, bitmap_width); } } return true; }
int wmsLoadTiles(CTileDatabase* g_db, long minx, long miny, long maxx, long maxy, BOOL bForce, int nMapScale) { HINTERNET hOpen, hConnect; char strTile[256]; hOpen = NULL; FILE * fp_log = fopen("log.txt", "a+"); CProgressWindow wndProgress; wndProgress.Initialize(); int nMeters = MyMap.GetMetresPerTile(); wndProgress.ResetProgressBar("Downloading:", (maxy-miny)/nMeters*(maxx-minx)/nMeters); // Grab in (8 x 8????) tiles. for (long y=miny; y<maxy; y+=nMeters) { for (long x=minx; x<maxx; x+=nMeters) { if (!wndProgress.ProgressBar()) return false; if (!bForce && g_db->TileLoaded(y, x)) { fprintf(fp_log, "Tile: [%05d,%05d] skipped - tile exists\n", x,y); continue; } else { // Only connect to WMS if required. // SNL 11/06/2013 - hmmmm! CString str1 = MyMap.wmsGetAttribution(); int port = MyMap.wmsGetPort(); g_db->InitDatabase(y,x,MyMap.GetDatum()); if (hOpen == NULL) { if ( !(hOpen = InternetOpen ( "Sample", LOCAL_INTERNET_ACCESS , NULL, 0, 0) ) ) { ErrorOut ( GetLastError(), "InternetOpen"); return 0; } if ( !(hConnect = InternetConnect ( hOpen, MyMap.wmsGetAttribution(), MyMap.wmsGetPort(), "", "", INTERNET_SERVICE_HTTP, 0 , 0) ) ) { ErrorOut (GetLastError(), "InternetConnect"); return 0; } } fprintf(fp_log, "Tile: [%05d,%05d] loading...\n", x,y); wmsGetTile(hConnect, strTile, y, x, g_db, fp_log, bForce, nMapScale); } if (abortProgram) { y=miny; x=maxx; } } } fclose(fp_log); if (hOpen != NULL) { if (!InternetCloseHandle (hConnect) ) { ErrorOut (GetLastError (), "CloseHandle on hConnect"); return FALSE; } if (!InternetCloseHandle (hOpen) ) { ErrorOut (GetLastError (), "CloseHandle on hOpen"); return FALSE; } } return 0; }
bool CreateKMZ(long minx, long maxx, long miny, long maxy, LPCSTR mapname, long tileWidth, long tileHeight, long trackSize, int nDatabase, int nDrawOrder) // int nProduct, int nCountry, int nLayer) { unsigned char * bitmap_memory = NULL; long bitmap_width, dest_bitmap_width; long bitmap_height, dest_bitmap_height; long bitmap_memory_size; unsigned char bitmap_palette[1024]; long bitmap_palette_length; int nMetres = MyMap.GetMetresPerTile(); int nPixels = MyMap.GetPixelsPerTile(); double dTileScale = (double) nMetres / nPixels; //dTileScale = 1.0; CProgressWindow wndProgress; wndProgress.Initialize(); CString str_fname; str_fname.Format("%s.txf", mapname); read_txf(str_fname, &nPoints, &points); str_fname.Format("%s.png", mapname); if (minx > maxx) { long t = minx; minx = maxx; maxx = t; } if (miny > maxy) { long t = miny; miny = maxy; maxy = t; } // ToDo: Need to make collar work for OSM and OSPro etc. // long collar = CalculateCollar(minx/**1000*/, maxx/**1000*/, miny/**1000*/, maxy/**1000*/); /* long collar = 1; minx -= (collar/nMetres)*nMetres; maxx += (collar/nMetres)*nMetres; miny -= (collar/nMetres)*nMetres; maxy += (collar/nMetres)*nMetres; */ wndProgress.ResetProgressBar("Tile:", ((maxy-miny)*(maxx-minx)/nMetres*nMetres)); bool successful = false; if (nDatabase == DBASE_LOCAL) { if (MyMap.GetCountry() == COUNTRY_FR && MyMap.GetProduct() == PRODUCT_02) { successful = IGN_ReadTiles(minx, maxx, miny, maxy, wndProgress, bitmap_palette, bitmap_palette_length, bitmap_memory , bitmap_memory_size, bitmap_width, dest_bitmap_width, bitmap_height, dest_bitmap_height); } else { successful = OSPro_ReadTiles(minx, maxx, miny, maxy, wndProgress, bitmap_palette, bitmap_palette_length, bitmap_memory , bitmap_memory_size, bitmap_width, dest_bitmap_width, bitmap_height, dest_bitmap_height); } } else { bool b_use_TL3 = nDatabase == DBASE_TRACKLOGS_3; successful = ReadTracklogsTile(minx, maxx, miny, maxy, wndProgress, bitmap_palette, bitmap_palette_length, bitmap_memory , bitmap_memory_size, bitmap_width, dest_bitmap_width, bitmap_height, dest_bitmap_height, b_use_TL3); } if (!successful) { if (bitmap_memory) free(bitmap_memory); return false; } if (bitmap_memory == NULL) { printf("No images to process\n"); return false; } Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; // Get the CLSID of the JPEG encoder. GetEncoderClsid(L"image/jpeg", &encoderClsid); Gdiplus::EncoderParameters encoderParameters; encoderParameters.Count = 1; ULONG quality = 80; encoderParameters.Parameter[0].Guid = Gdiplus::EncoderQuality; encoderParameters.Parameter[0].Type = Gdiplus::EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; encoderParameters.Parameter[0].Value = &quality; // xy // 00 10 20 30 40 // 01 11 21 31 41 // 02 12 22 32 42 // 03 13 23 33 43 if ((MyMap.GetProjection() == 3857) || (MyMap.GetProjection() == 900913)) { nMetres = 1; } else { nMetres = 1000; } // Note: 1000 is the rotatey collar! /* minx *= 1000; maxx *= 1000; miny *= 1000; maxy *= 1000; */ double lat,lon; OZIGEN_NorthingEasting_to_LatLon(maxy-nMetres, minx+nMetres, &lat, &lon); double minlat = lat; double maxlat = lat; double minlon = lon; double maxlon = lon; OZIGEN_NorthingEasting_to_LatLon(maxy-nMetres, maxx-nMetres, &lat, &lon); if (lat < minlat) minlat = lat; if (lat > maxlat) maxlat = lat; if (lon < minlon) minlon = lon; if (lon > maxlon) maxlon = lon; OZIGEN_NorthingEasting_to_LatLon(miny+nMetres, minx+nMetres, &lat, &lon); if (lat < minlat) minlat = lat; if (lat > maxlat) maxlat = lat; if (lon < minlon) minlon = lon; if (lon > maxlon) maxlon = lon; OZIGEN_NorthingEasting_to_LatLon(miny+nMetres, maxx-nMetres, &lat, &lon); if (lat < minlat) minlat = lat; if (lat > maxlat) maxlat = lat; if (lon < minlon) minlon = lon; if (lon > maxlon) maxlon = lon; /* SNL 24/10/2013 are these only used for display purposes? // printf("%d %d %d %d\n\n", minx+1000, miny+1000, maxx-1000, maxy-1000); OZIGEN_LatLon_to_NorthingEasting(minlat, minlon, &lat, &lon); // printf("%f %f %f %f\n", minlat, minlon, lat, lon); OZIGEN_LatLon_to_NorthingEasting(minlat, maxlon, &lat, &lon); // printf("%f %f %f %f\n", minlat, maxlon, lat, lon); OZIGEN_LatLon_to_NorthingEasting(maxlat, maxlon, &lat, &lon); // printf("%f %f %f %f\n", maxlat, maxlon, lat, lon); OZIGEN_LatLon_to_NorthingEasting(maxlat, minlon, &lat, &lon); // printf("%f %f %f %f\n\n", maxlat, minlon, lat, lon); */ char kmzName[512]; GetCurrentDirectory(sizeof(kmzName), kmzName); CString Currdir = kmzName; // Save current directory // change directory to %TEMP% and make folder 'files' GetTempPath(sizeof(kmzName), kmzName); SetCurrentDirectory(kmzName); CreateDirectory("files", NULL); sprintf(kmzName, "%s\\%s.kmz", Currdir, mapname); FILE * fp = fopen("doc.kml", "w+"); if (fp == NULL) { printf("Couldn't open doc.kml\n"); return false; } fprintf(fp, "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" "<kml xmlns=\"http://earth.google.com/kml/2.1\">\n" "<Document>\n" "<name>Custom Map</name>\n" "<Region>\n" "<LatLonAltBox>\n" "<north>%.9f</north>\n" "<south>%.9f</south>\n" "<east>%.9f</east>\n" "<west>%.9f</west>\n" "</LatLonAltBox>\n" "</Region>\n", maxlat, minlat, maxlon, minlon); long nTilesAcross=(dest_bitmap_width+(tileWidth-1))/tileWidth; long nTilesDown=(dest_bitmap_height+(tileHeight-1))/tileHeight; JPEG_tile_list tiles; long across, down; for (across=0; across<nTilesAcross; across++) { for (down=0; down<nTilesDown; down++) { if (nPoints) { if (!TileNearTrack( minlat+(maxlat-minlat)*(nTilesDown-down)/nTilesDown, minlat+(maxlat-minlat)*(nTilesDown-down-1)/nTilesDown, minlon+(maxlon-minlon)*across/nTilesAcross, minlon+(maxlon-minlon)*(across+1)/nTilesAcross, nPoints, points, trackSize) ) continue; /* if (!PointNearTrack(minlat+(maxlat-minlat)*(nTilesDown-down)/nTilesDown, // ne minlon+(maxlon-minlon)*(across+1)/nTilesAcross, nPoints, points) && !PointNearTrack(minlat+(maxlat-minlat)*(nTilesDown-down-1)/nTilesDown, // se minlon+(maxlon-minlon)*(across+1)/nTilesAcross, nPoints, points) && !PointNearTrack(minlat+(maxlat-minlat)*(nTilesDown-down)/nTilesDown, // nw minlon+(maxlon-minlon)*across/nTilesAcross, nPoints, points) && !PointNearTrack(minlat+(maxlat-minlat)*(nTilesDown-down-1)/nTilesDown, // sw minlon+(maxlon-minlon)*across/nTilesAcross, nPoints, points) && !PointNearTrack(minlat+(maxlat-minlat)*(2*nTilesDown-2*down-1)/2/nTilesDown, // middle minlon+(maxlon-minlon)*(2*across+1)/2/nTilesAcross, nPoints, points)) continue; */ } JPEG_tile * pTile = new JPEG_tile; pTile->fname.Format("files/c%02d%02d.jpg", down, across); pTile->lat_north = minlat+(maxlat-minlat)*(nTilesDown-down)/nTilesDown; pTile->lon_east = minlon+(maxlon-minlon)*(across+1)/nTilesAcross; pTile->lat_south = minlat+(maxlat-minlat)*(nTilesDown-down-1)/nTilesDown; pTile->lon_west = minlon+(maxlon-minlon)*across/nTilesAcross; pTile->offset_x0 = dest_bitmap_width*across/nTilesAcross; pTile->offset_x1 = dest_bitmap_width*(across+1)/nTilesAcross; pTile->offset_y0 = dest_bitmap_height*down/nTilesDown; pTile->offset_y1 = dest_bitmap_height*(down+1)/nTilesDown; tiles.AddTail(pTile); } } Global_AddToResultsWindow("Number of tiles = %d",tiles.GetCount()); if (tiles.GetCount() > 100) { if (AfxMessageBox("Warning Tile Count > 100!", MB_OKCANCEL) == IDCANCEL) return false; } wndProgress.m_progress_bar.SetRange(1, tiles.GetCount()); long index = 1; POSITION pos; for (pos=tiles.GetHeadPosition(); pos != NULL; tiles.GetNext(pos)) { JPEG_tile * pTile = (JPEG_tile *)tiles.GetAt(pos); // printf("JPEG %d of %d\r", index++, tiles.GetCount()); wndProgress.m_progress_bar.SetPos(index); wndProgress.m_edit_message.Format("JPEG: %d of %d", index++, tiles.GetCount()); wndProgress.UpdateData(FALSE); DoEvents(); if (wndProgress.m_Cancelled) return false; fprintf(fp, "<GroundOverlay>\n" "<drawOrder>%d</drawOrder>\n" "<Icon>\n" "<href>%s</href>\n" "</Icon>\n" "<LatLonBox>\n" "<north>%.9f</north>\n" "<east>%.9f</east>\n" "<south>%.9f</south>\n" "<west>%.9f</west>\n" "</LatLonBox>\n" "<Region>\n" "<LatLonAltBox>\n" "<north>%.9f</north>\n" "<east>%.9f</east>\n" "<south>%.9f</south>\n" "<west>%.9f</west>\n" "</LatLonAltBox>\n" "<Lod>\n" "<minLodPixels>64</minLodPixels>\n" "</Lod>\n" "</Region>\n" "<color>A1FFFFFF</color>\n" "</GroundOverlay>\n", nDrawOrder, pTile->fname, pTile->lat_north, pTile->lon_east, pTile->lat_south, pTile->lon_west, pTile->lat_north, pTile->lon_east, pTile->lat_south, pTile->lon_west); Gdiplus::Rect r(0, 0, pTile->offset_x1-pTile->offset_x0, pTile->offset_y1-pTile->offset_y0); Gdiplus::Bitmap bmp(r.GetRight(), r.GetBottom(), PixelFormat24bppRGB ); Gdiplus::BitmapData bmpData; bmp.LockBits(&r, Gdiplus::ImageLockModeRead | Gdiplus::ImageLockModeWrite, PixelFormat24bppRGB, &bmpData); long x,y; for (y=pTile->offset_y0; y<pTile->offset_y1; y++) { lat = maxlat-(maxlat-minlat)/dest_bitmap_height*y; unsigned char * dest_bitmap_offset = ((unsigned char *)bmpData.Scan0) + bmpData.Stride*(y-pTile->offset_y0); for (x=pTile->offset_x0; x<pTile->offset_x1; x++) { lon = minlon+(maxlon-minlon)/dest_bitmap_width*x; double northing, easting; OZIGEN_LatLon_to_NorthingEasting(lat, lon, &northing, &easting); if ((MyMap.GetProjection() == 3857) || (MyMap.GetProjection() == 900913)) { } else { northing += 0.5; easting += 0.5; } if (northing < miny || easting < minx || northing > maxy || easting > maxx) { // No bitmap data present -- white *dest_bitmap_offset++ = 255; *dest_bitmap_offset++ = 255; *dest_bitmap_offset++ = 255; } else { // Look up colour of bitmap pixel - SNL 24/10/2013 unsigned char * pal; if ((MyMap.GetProjection() == 3857) || (MyMap.GetProjection() == 900913)) { // pal = bitmap_palette + 4*bitmap_memory[(long)((y)*bitmap_width + (long) (x))]; // pal = bitmap_palette + 4*bitmap_memory[(long)((northing-miny))*bitmap_width + (long)((easting-minx))]; pal = bitmap_palette + 4*bitmap_memory[(long)((northing-miny)/dTileScale)*bitmap_width + (long)((easting-minx)/dTileScale)]; } else { pal = bitmap_palette + 4*bitmap_memory[(long)((maxy-northing)/dTileScale)*bitmap_width + (long)((easting-minx)/dTileScale)]; } *dest_bitmap_offset++ = pal[0]; *dest_bitmap_offset++ = pal[1]; *dest_bitmap_offset++ = pal[2]; } } } bmp.UnlockBits(&bmpData); wchar_t wbuffer[64]; int i; for (i=0; i<pTile->fname.GetLength(); i++) wbuffer[i] = pTile->fname.GetAt(i); wbuffer[i] = 0; bmp.Save(wbuffer, &encoderClsid, &encoderParameters); } fprintf(fp, "</Document>\n" "</kml>\n"); fclose(fp); // Add jpegs / kml to kmz file DeleteFile(kmzName); ZipFileAdd(kmzName, "doc.kml"); DeleteFile("doc.kml"); long indexZip = 1; wndProgress.m_progress_bar.SetRange(1, tiles.GetCount()); for (pos=tiles.GetHeadPosition(); pos != NULL; tiles.GetNext(pos)) { JPEG_tile * pTile = (JPEG_tile *)tiles.GetAt(pos); wndProgress.m_progress_bar.SetPos(indexZip); wndProgress.m_edit_message.Format("Zip: %d of %d", indexZip++, tiles.GetCount()); wndProgress.UpdateData(FALSE); DoEvents(); ZipFileAdd(kmzName, pTile->fname); DeleteFile(pTile->fname); } RemoveDirectory("files"); SetCurrentDirectory(Currdir); tiles.RemoveAll(); if (nPoints) { free(points); nPoints = 0; points = NULL; } Gdiplus::GdiplusShutdown(gdiplusToken); free(bitmap_memory); return true; }
bool COPKGManager::checkUpdates(const std::string & package_name, bool show_progress) { if (!hasOpkgSupport()) return false; doUpdate(); bool ret = false; size_t i = 0; CProgressWindow status; status.showHeader(false); if (show_progress){ status.paint(); status.showStatusMessageUTF(g_Locale->getText(LOCALE_OPKG_UPDATE_READING_LISTS)); status.showStatus(25); /* after do_update, we have actually done the hardest work already */ } getPkgData(OM_LIST); if (show_progress) status.showStatus(50); getPkgData(OM_LIST_UPGRADEABLE); if (show_progress) status.showStatus(75); for (map<string, struct pkg>::iterator it = pkg_map.begin(); it != pkg_map.end(); ++it){ dprintf(DEBUG_INFO, "[COPKGManager] [%s - %d] Update check for...%s\n", __func__, __LINE__, it->second.name.c_str()); if (show_progress){ /* showing the names only makes things *much* slower... status.showStatusMessageUTF(it->second.name); */ status.showStatus(75 + 25*i / pkg_map.size()); } if (it->second.upgradable){ dprintf(DEBUG_INFO, "[COPKGManager] [%s - %d] Update packages available for...%s\n", __func__, __LINE__, it->second.name.c_str()); if (!package_name.empty() && package_name == it->second.name){ ret = true; break; }else ret = true; } i++; } if (show_progress){ status.showGlobalStatus(100); status.showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_READY)); // UTF-8 status.hide(); } #if 0 pkg_map.clear(); #endif return ret; }
bool CFileBrowser::exec(const char * const dirname) { neutrino_msg_t msg; neutrino_msg_data_t data; bool res = false; #ifdef ENABLE_INTERNETRADIO if (m_Mode == ModeSC) { m_baseurl = base; } else #endif { m_baseurl = "http://" + g_settings.streaming_server_ip + ':' + g_settings.streaming_server_port + "/requests/browse.xml?dir="; } name = dirname; std::replace(name.begin(), name.end(), '\\', '/'); paintHead(); ChangeDir(name); paint(); paintFoot(); int oldselected = selected; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_FILEBROWSER]); bool loop=true; while (loop) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); neutrino_msg_t msg_repeatok = msg & ~CRCInput::RC_Repeat; if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_FILEBROWSER]); if(!CRCInput::isNumeric(msg)) { m_SMSKeyInput.resetOldKey(); } if (msg == CRCInput::RC_yellow) { if ((Multi_Select) && (selected < filelist.size())) { if(filelist[selected].getFileName() != "..") { if( (S_ISDIR(filelist[selected].Mode) && Dirs_Selectable) || !S_ISDIR(filelist[selected].Mode) ) { filelist[selected].Marked = !filelist[selected].Marked; paintItem(selected - liststart); } } msg_repeatok = CRCInput::RC_down; // jump to next item } } if ((msg == CRCInput::RC_red) || msg == CRCInput::RC_page_down) { selected += listmaxshow; if (selected >= filelist.size()) { if (((filelist.size() / listmaxshow) + 1) * listmaxshow == filelist.size() + listmaxshow) // last page has full entries selected = 0; else selected = selected < (((filelist.size() / listmaxshow) + 1) * listmaxshow) ? (filelist.size() - 1) : 0; } liststart = (selected / listmaxshow) * listmaxshow; paint(); } else if ((msg == CRCInput::RC_green) || (msg == CRCInput::RC_page_up) ) { if ((int(selected)-int(listmaxshow))<0) selected=filelist.size()-1; else selected -= listmaxshow; liststart = (selected/listmaxshow)*listmaxshow; paint(); } else if (msg_repeatok == CRCInput::RC_up) { int prevselected=selected; if(selected==0) { selected = filelist.size()-1; } else selected--; paintItem(prevselected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) { paint(); } else { paintItem(selected - liststart); } } else if (msg_repeatok == CRCInput::RC_down) { if (!(filelist.empty())) { int prevselected=selected; selected = (selected + 1) % filelist.size(); paintItem(prevselected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(); else paintItem(selected - liststart); } } else if ( ( msg == CRCInput::RC_timeout ) ) { selected = oldselected; loop=false; } else if ( msg == CRCInput::RC_right ) { if (!(filelist.empty())) { if (S_ISDIR(filelist[selected].Mode)) { #ifdef ENABLE_INTERNETRADIO if (m_Mode == ModeSC) { ChangeDir(filelist[selected].Url); } else #endif { if (filelist[selected].getFileName() != "..") { selections.push_back(selected); ChangeDir(filelist[selected].Name); } } } } } else if ( msg == CRCInput::RC_left ) { #ifdef ENABLE_INTERNETRADIO if (m_Mode == ModeSC) { for(unsigned int i = 0; i < filelist.size();i++) { if (S_ISDIR(filelist[i].Mode) && filelist[i].getFileName() == "..") { ChangeDir(filelist[i].Url); break; } } } else #endif if (selections.size() > 0) { ChangeDir("..",selections.back()); selections.pop_back(); } else { ChangeDir(".."); } } else if ( msg == CRCInput::RC_blue ) { if(Filter != NULL) { use_filter = !use_filter; paintFoot(); ChangeDir(Path); } } else if ( msg == CRCInput::RC_home ) { loop = false; } else if ( msg == CRCInput::RC_spkr && strncmp(Path.c_str(), VLC_URI, strlen(VLC_URI)) != 0) //Not in vlc mode { if(".." !=(filelist[selected].getFileName().substr(0,2))) // do not delete that { std::stringstream _msg; _msg << g_Locale->getText(LOCALE_FILEBROWSER_DODELETE1) << " "; if (filelist[selected].getFileName().length() > 25) { _msg << filelist[selected].getFileName().substr(0, 25) << "..."; } else _msg << filelist[selected].getFileName(); _msg << " " << g_Locale->getText(LOCALE_FILEBROWSER_DODELETE2); if (ShowMsgUTF(LOCALE_FILEBROWSER_DELETE, _msg.str(), CMessageBox::mbrNo, CMessageBox::mbYes|CMessageBox::mbNo)==CMessageBox::mbrYes) { recursiveDelete(filelist[selected].Name.c_str()); if(".ts" ==(filelist[selected].getFileName().substr(filelist[selected].getFileName().length()-3,filelist[selected].getFileName().length())))//if bla.ts { recursiveDelete((filelist[selected].Name.substr(0,filelist[selected].Name.length()-7)+".xml").c_str());//remove bla.xml von bla.ts } ChangeDir(Path); } } } else if (msg == CRCInput::RC_ok) { if (!(filelist.empty())) { if (filelist[selected].getFileName() == "..") { #ifdef ENABLE_INTERNETRADIO if (m_Mode == ModeSC) ChangeDir(filelist[selected].Url); else #endif { if (selections.size() > 0) { ChangeDir("..",selections.back()); selections.pop_back(); } else { std::string::size_type pos = Path.substr(0,Path.length()-1).rfind('/'); if (pos != std::string::npos) { ChangeDir(".."); } else { loop = false; res = true; filelist[selected].Name = "/"; } } } } else { std::string filename = filelist[selected].Name; if ( filename.length() > 1 ) { if((!Multi_Select) && S_ISDIR(filelist[selected].Mode) && !Dir_Mode) { #ifdef ENABLE_INTERNETRADIO if (m_Mode == ModeSC) ChangeDir(filelist[selected].Url); else #endif ChangeDir(filelist[selected].Name); } else { filelist[selected].Marked = true; loop = false; res = true; } } } } } else if (msg==CRCInput::RC_help) { if (++g_settings.filebrowser_sortmethod >= FILEBROWSER_NUMBER_OF_SORT_VARIANTS) g_settings.filebrowser_sortmethod = 0; sort(filelist.begin(), filelist.end(), sortBy[g_settings.filebrowser_sortmethod]); paint(); paintFoot(); } else if (CRCInput::isNumeric(msg_repeatok)) { if (!(filelist.empty())) SMSInput(msg_repeatok); } else { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; } } } hide(); selected_filelist.clear(); if(res && Multi_Select) { CProgressWindow * progress = new CProgressWindow(); progress->setTitle(LOCALE_FILEBROWSER_SCAN); progress->exec(NULL,""); for(unsigned int i = 0; i < filelist.size();i++) if(filelist[i].Marked) { if(S_ISDIR(filelist[i].Mode)) { #ifdef ENABLE_INTERNETRADIO if (m_Mode == ModeSC) addRecursiveDir(&selected_filelist,filelist[i].Url, true, progress); else #endif addRecursiveDir(&selected_filelist,filelist[i].Name, true, progress); } else selected_filelist.push_back(filelist[i]); } progress->hide(); delete progress; } return res; }
int CHDDChkExec::exec(CMenuTarget* parent, const std::string& key) { char cmd[100]; CHintBox * hintbox; int res; char src[128], dst[128]; FILE * f; CProgressWindow * progress; int oldpass = 0, pass, step, total; int percent = 0, opercent = 0; sprintf(src, "/dev/%s1", key.c_str()); sprintf(dst, "/media/%s1", key.c_str()); printf("CHDDChkExec: key %s\n", key.c_str()); bool srun = system("killall -9 smbd"); //res = check_and_umount(dst); res = check_and_umount(src, dst); printf("CHDDChkExec: umount res %d\n", res); if(res) { hintbox = new CHintBox(LOCALE_HDD_CHECK, g_Locale->getText(LOCALE_HDD_UMOUNT_WARN)); hintbox->paint(); sleep(2); delete hintbox; return menu_return::RETURN_REPAINT; } switch(g_settings.hdd_fs) { case 0: sprintf(cmd, "/sbin/fsck.ext3 -C 1 -f -y %s", src); break; case 1: sprintf(cmd, "/sbin/fsck.ext2 -C 1 -f -y %s", src); break; case 2: sprintf(cmd, "/sbin/reiserfsck --fix-fixable %s", src); break; default: return 0; } printf("CHDDChkExec: Executing %s\n", cmd); f=popen(cmd, "r"); if(!f) { hintbox = new CHintBox(LOCALE_HDD_CHECK, g_Locale->getText(LOCALE_HDD_CHECK_FAILED)); hintbox->paint(); sleep(2); delete hintbox; goto ret1; } progress = new CProgressWindow(); progress->setTitle(LOCALE_HDD_CHECK); progress->exec(NULL,""); char buf[256]; while(fgets(buf, 255, f) != NULL) { if(isdigit(buf[0])) { sscanf(buf, "%d %d %d\n", &pass, &step, &total); if(total == 0) total = 1; if(oldpass != pass) { oldpass = pass; progress->showGlobalStatus(pass > 0 ? (pass-1)*20: 0); } percent = (step * 100) / total; if(opercent != percent) { opercent = percent; //printf("CHDDChkExec: pass %d : %d\n", pass, percent); progress->showLocalStatus(percent); } } else if(!strncmp(buf, "Pass", 4)) progress->showStatusMessageUTF(buf); } //printf("CHDDChkExec: %s\n", buf); pclose(f); progress->showGlobalStatus(100); progress->showStatusMessageUTF(buf); sleep(2); progress->hide(); delete progress; ret1: switch(g_settings.hdd_fs) { case 0: res = mount(src, dst, "ext3", 0, NULL); break; case 1: res = mount(src, dst, "ext2", 0, NULL); break; case 2: res = mount(src, dst, "reiserfs", 0, NULL); break; default: break; } printf("CHDDChkExec: mount res %d\n", res); if(!srun) system("smbd"); return menu_return::RETURN_REPAINT; }
int CHDDFmtExec::exec(CMenuTarget* parent, const std::string& key) { char cmd[100]; CHintBox * hintbox; int res; FILE * f; char src[128], dst[128]; CProgressWindow * progress; bool idone; sprintf(src, "/dev/%s1", key.c_str()); sprintf(dst, "/media/%s1", key.c_str()); printf("CHDDFmtExec: key %s\n", key.c_str()); res = ShowMsgUTF ( LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_WARN), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo ); if(res != CMessageBox::mbrYes) return 0; bool srun = system("killall -9 smbd"); //res = check_and_umount(dst); res = check_and_umount(src, dst); printf("CHDDFmtExec: umount res %d\n", res); if(res) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_UMOUNT_WARN)); hintbox->paint(); sleep(2); delete hintbox; goto _return; } f = fopen("/proc/sys/kernel/hotplug", "w"); if(f) { fprintf(f, "none\n"); fclose(f); } progress = new CProgressWindow(); progress->setTitle(LOCALE_HDD_FORMAT); progress->exec(NULL,""); progress->showStatusMessageUTF("Executing fdisk"); progress->showGlobalStatus(0); sprintf(cmd, "/sbin/sfdisk -f -uM /dev/%s", key.c_str()); printf("CHDDFmtExec: executing %s\n", cmd); f=popen(cmd, "w"); if (!f) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_FAILED)); hintbox->paint(); sleep(2); delete hintbox; goto _remount; } fprintf(f, "0,\n;\n;\n;\ny\n"); pclose(f); //sleep(1); switch(g_settings.hdd_fs) { case 0: sprintf(cmd, "/sbin/mkfs.ext3 -L RECORD -T largefile -j -m0 %s", src); break; case 1: sprintf(cmd, "/sbin/mkfs.ext2 -L RECORD -T largefile -m0 %s", src); break; case 2: sprintf(cmd, "/sbin/mkreiserfs -f -f %s", src); break; default: return 0; } printf("CHDDFmtExec: executing %s\n", cmd); f=popen(cmd, "r"); if (!f) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_FAILED)); hintbox->paint(); sleep(2); delete hintbox; goto _remount; } char buf[256]; idone = false; while(fgets(buf, 255, f) != NULL) { printf("%s", buf); if(!idone && strncmp(buf, "Writing inode", 13)) { idone = true; buf[21] = 0; progress->showGlobalStatus(20); progress->showStatusMessageUTF(buf); } else if(strncmp(buf, "Creating", 8)) { progress->showGlobalStatus(40); progress->showStatusMessageUTF(buf); } else if(strncmp(buf, "Writing superblocks", 19)) { progress->showGlobalStatus(60); progress->showStatusMessageUTF(buf); } } pclose(f); progress->showGlobalStatus(100); sleep(2); sprintf(cmd, "/sbin/tune2fs -r 0 -c 0 -i 0 %s", src); printf("CHDDFmtExec: executing %s\n", cmd); system(cmd); _remount: progress->hide(); delete progress; switch(g_settings.hdd_fs) { case 0: res = mount(src, dst, "ext3", 0, NULL); break; case 1: res = mount(src, dst, "ext2", 0, NULL); break; case 2: res = mount(src, dst, "reiserfs", 0, NULL); break; default: break; } f = fopen("/proc/sys/kernel/hotplug", "w"); if(f) { fprintf(f, "/sbin/hotplug\n"); fclose(f); } if(!res) { sprintf(cmd, "%s/movies", dst); safe_mkdir((char *) cmd); sprintf(cmd, "%s/pictures", dst); safe_mkdir((char *) cmd); sprintf(cmd, "%s/epg", dst); safe_mkdir((char *) cmd); sprintf(cmd, "%s/music", dst); safe_mkdir((char *) cmd); sync(); } _return: if(!srun) system("smbd"); return menu_return::RETURN_REPAINT; }
int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key) { char cmd[100]; char cmd2[100]; CHintBox * hintbox; int res; FILE * f; char src[128], dst[128]; CProgressWindow * progress; snprintf(src, sizeof(src), "/dev/%s1", key.c_str()); snprintf(dst, sizeof(dst), "/media/%s1", key.c_str()); printf("CHDDFmtExec: key %s\n", key.c_str()); res = ShowMsg ( LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_WARN), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo ); if(res != CMessageBox::mbrYes) return 0; bool srun = my_system(3, "killall", "-9", "smbd"); //res = check_and_umount(dst); res = check_and_umount(src, dst); printf("CHDDFmtExec: umount res %d\n", res); if(res) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_UMOUNT_WARN)); hintbox->paint(); sleep(2); delete hintbox; goto _return; } f = fopen("/proc/sys/kernel/hotplug", "w"); if(f) { fprintf(f, "none\n"); fclose(f); } progress = new CProgressWindow(); progress->setTitle(LOCALE_HDD_FORMAT); progress->exec(NULL,""); progress->showStatusMessageUTF("Executing fdisk"); progress->showGlobalStatus(0); if (access("/sbin/sfdisk", X_OK) == 0) { snprintf(cmd, sizeof(cmd), "/sbin/sfdisk -f -uM /dev/%s", key.c_str()); strcpy(cmd2, "0,\n;\n;\n;\ny\n"); } else { snprintf(cmd, sizeof(cmd), "/sbin/fdisk /dev/%s", key.c_str()); strcpy(cmd2, "o\nn\np\n1\n\n\nw\n"); } printf("CHDDFmtExec: executing %s\n", cmd); f=popen(cmd, "w"); if (!f) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_FAILED)); hintbox->paint(); sleep(2); delete hintbox; goto _remount; } fprintf(f, "%s", cmd2); pclose(f); //sleep(1); switch(g_settings.hdd_fs) { case 0: snprintf(cmd, sizeof(cmd), "/sbin/mkfs.ext3 -T largefile -m0 %s", src); break; case 1: snprintf(cmd, sizeof(cmd), "/sbin/mkreiserfs -f -f %s", src); break; default: return 0; } printf("CHDDFmtExec: executing %s\n", cmd); f=popen(cmd, "r"); if (!f) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_FAILED)); hintbox->paint(); sleep(2); delete hintbox; goto _remount; } char buf[256]; setbuf(f, NULL); int n, t, in, pos, stage; pos = 0; stage = 0; while (true) { in = fgetc(f); if (in == EOF) break; buf[pos] = (char)in; pos++; buf[pos] = 0; if (in == '\b' || in == '\n') pos = 0; /* start a new line */ //printf("%s", buf); switch (stage) { case 0: if (strcmp(buf, "Writing inode tables:") == 0) { stage++; progress->showGlobalStatus(20); progress->showStatusMessageUTF(buf); } break; case 1: if (in == '\b' && sscanf(buf, "%d/%d\b", &n, &t) == 2) { int percent = 100 * n / t; progress->showLocalStatus(percent); progress->showGlobalStatus(20 + percent / 5); } if (strstr(buf, "done")) { stage++; pos = 0; } break; case 2: if (strstr(buf, "blocks):") && sscanf(buf, "Creating journal (%d blocks):", &n) == 1) { progress->showLocalStatus(0); progress->showGlobalStatus(60); progress->showStatusMessageUTF(buf); pos = 0; } if (strstr(buf, "done")) { stage++; pos = 0; } break; case 3: if (strcmp(buf, "Writing superblocks and filesystem accounting information:") == 0) { progress->showGlobalStatus(80); progress->showStatusMessageUTF(buf); pos = 0; } break; default: // printf("unknown stage! %d \n\t", stage); break; } } progress->showLocalStatus(100); pclose(f); progress->showGlobalStatus(100); sleep(2); printf("CHDDFmtExec: executing %s %s\n","/sbin/tune2fs -r 0 -c 0 -i 0", src); my_system(8, "/sbin/tune2fs", "-r", "0", "-c", "0", "-i", "0", src); _remount: progress->hide(); delete progress; switch(g_settings.hdd_fs) { case 0: safe_mkdir(dst); res = mount(src, dst, "ext3", 0, NULL); break; case 1: safe_mkdir(dst); res = mount(src, dst, "reiserfs", 0, NULL); break; default: break; } f = fopen("/proc/sys/kernel/hotplug", "w"); if(f) { #ifdef ASSUME_MDEV fprintf(f, "/sbin/mdev\n"); #else fprintf(f, "/sbin/hotplug\n"); #endif fclose(f); } if(!res) { snprintf(cmd, sizeof(cmd), "%s/movies", dst); safe_mkdir(cmd); snprintf(cmd, sizeof(cmd), "%s/pictures", dst); safe_mkdir(cmd); snprintf(cmd, sizeof(cmd), "%s/epg", dst); safe_mkdir(cmd); snprintf(cmd, sizeof(cmd), "%s/music", dst); safe_mkdir(cmd); snprintf(cmd, sizeof(cmd), "%s/logos", dst); safe_mkdir(cmd); snprintf(cmd, sizeof(cmd), "%s/plugins", dst); safe_mkdir(cmd); sync(); } _return: if (!srun) my_system(1, "smbd"); return menu_return::RETURN_REPAINT; }
bool IGN_Create_PNG_JPR(LPCSTR mapname, long minx, long miny, long maxx, long maxy) { char tstring[256]; long bitmap_width = TILE_WIDTH*(maxx-minx)/1000; long bitmap_size = bitmap_width*TILE_WIDTH; unsigned char * bitmap_memory = (unsigned char *)malloc(bitmap_size); CIGNTileDatabase db; if (bitmap_memory == NULL) { printf("Couldn't allocate %d bytes of memory\n"); return false; } // Create PNG header and write out palette sprintf(tstring, "%s.png", mapname); FILE * fp_png = fopen(tstring, "wb"); if (fp_png == NULL) { printf("Couldn't open %s\n", tstring); return false; } // Create and initialize the png_struct with the desired error handler functions. png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (png_ptr == NULL) { fclose(fp_png); return false; } /* Allocate/initialize the image information data. REQUIRED */ png_infop info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); fclose(fp_png); return false; } /* Set error handling. REQUIRED */ if (setjmp(png_jmpbuf(png_ptr))) { /* If we get here, we had a problem reading the file */ png_destroy_write_struct(&png_ptr, &info_ptr); fclose(fp_png); return false; } /* set up the output control if you are using standard C streams */ png_init_io(png_ptr, fp_png); /* Set the image information here. Width and height are up to 2^31, * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY, * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB, * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED */ png_set_IHDR(png_ptr, info_ptr, TILE_WIDTH*(maxx-minx)/1000, TILE_WIDTH*((maxy-miny)/1000), 8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); /* set the palette if there is one. REQUIRED for indexed-color images */ png_colorp png_palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH * sizeof (png_color)); int i; BYTE * pal_ptr = (BYTE *)png_palette; BYTE * palette = ign_palette; for (i=0; i<256; i++) { *pal_ptr++ = palette[i*4 + 2]; *pal_ptr++ = palette[i*4 + 1]; *pal_ptr++ = palette[i*4 + 0]; } /* ... set palette colors ... */ png_set_PLTE(png_ptr, info_ptr, png_palette, PNG_MAX_PALETTE_LENGTH); /* You must not free palette here, because png_set_PLTE only makes a link to * the palette that you malloced. Wait until you are about to destroy *the png structure. */ /* Write the file header information. REQUIRED */ png_write_info(png_ptr, info_ptr); CProgressWindow wndProgress; wndProgress.Initialize(); wndProgress.ResetProgressBar("Tile:", (maxy-miny)/500*(maxx-minx)/500); for (int y=maxy-1000; y>=miny; y-=1000) { memset(bitmap_memory, 0x00, bitmap_size); for (int x=minx; x<maxx; x+=1000) { IGN_read_bmp(y, x, &db, bitmap_memory+(x-minx)/1000*TILE_WIDTH, bitmap_width); } // write row of PNG to file for (int x=0; x<TILE_WIDTH; x++) { png_write_row(png_ptr, bitmap_memory + x*bitmap_width); if (!wndProgress.ProgressBar()) return false; } } /* It is REQUIRED to call this to finish writing the rest of the file */ png_write_end(png_ptr, info_ptr); png_free(png_ptr, png_palette); /* clean up after the write, and free any memory allocated */ png_destroy_write_struct(&png_ptr, &info_ptr); /* close the file */ fclose(fp_png); // IGN_dumpjprfile(mapname, minx, miny, maxx, maxy, (maxx-minx)/1000 * TILE_WIDTH, (maxy-miny)/1000*TILE_WIDTH, NULL); free(bitmap_memory); return true; }
bool CreateJNXJpeg(JPEG_tile_list& tiles, long minx, long maxx, long miny, long maxy, CString mapname, long tileWidth, long tileHeight, int nDatabase, int nDrawOrder) { CProgressWindow wndProgress; wndProgress.Initialize(); // ToFix as this ain't right! double dMetersPerPixel = (double) MyMap.GetMetresPerTile()/MyMap.GetPixelsPerTile(); int nTileWidth = MyMap.GetMetresPerTile(); // JKL's code to create the JPEGs // long width, height; // long x,y; unsigned char * bitmap_memory = NULL; long bitmap_width, dest_bitmap_width; long bitmap_height, dest_bitmap_height; long bitmap_memory_size; // long square_width; // long square_height; unsigned char bitmap_palette[1024]; long bitmap_palette_length; if (minx > maxx) { long t = minx; minx = maxx; maxx = t; } if (miny > maxy) { long t = miny; miny = maxy; maxy = t; } // long collar = CalculateCollar(minx*1000, maxx*1000, miny*1000, maxy*1000); long collar = CalculateCollar(minx, maxx, miny, maxy); minx -= (collar/1000)*1000; maxx += (collar/1000)*1000; miny -= (collar/1000)*1000; maxy += (collar/1000)*1000; wndProgress.ResetProgressBar("Tile:", ((maxy-miny)*(maxx-minx))/1000*1000); bool successful = false; if (nDatabase == DBASE_LOCAL) { if (MyMap.GetCountry() == COUNTRY_FR && MyMap.GetProduct() == PRODUCT_02) { successful = IGN_ReadTiles(minx, maxx, miny, maxy, wndProgress, bitmap_palette, bitmap_palette_length, bitmap_memory , bitmap_memory_size, bitmap_width, dest_bitmap_width, bitmap_height, dest_bitmap_height); } else { successful = OSPro_ReadTiles(minx, maxx, miny, maxy, wndProgress, bitmap_palette, bitmap_palette_length, bitmap_memory , bitmap_memory_size, bitmap_width, dest_bitmap_width, bitmap_height, dest_bitmap_height); } } else { bool b_use_TL3 = nDatabase == DBASE_TRACKLOGS_3; successful = ReadTracklogsTile(minx, maxx, miny, maxy, wndProgress, bitmap_palette, bitmap_palette_length, bitmap_memory , bitmap_memory_size, bitmap_width, dest_bitmap_width, bitmap_height, dest_bitmap_height, b_use_TL3); } // dest_bitmap_width = 400*(maxx-minx-2*collar/1000); // dest_bitmap_height = 400*(maxy-miny-2*collar/1000); dest_bitmap_width = nTileWidth*((maxx-minx-(2*collar))/1000); dest_bitmap_height = nTileWidth*((maxy-miny-(2*collar))/1000); if (!successful) { if (bitmap_memory) free(bitmap_memory); return false; } if (bitmap_memory == NULL) { printf("No images to process\n"); return false; } Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; // Get the CLSID of the JPEG encoder. GetEncoderClsid(L"image/jpeg", &encoderClsid); Gdiplus::EncoderParameters encoderParameters; encoderParameters.Count = 1; ULONG quality = 80; encoderParameters.Parameter[0].Guid = Gdiplus::EncoderQuality; encoderParameters.Parameter[0].Type = Gdiplus::EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; encoderParameters.Parameter[0].Value = &quality; // xy // 00 10 20 30 40 // 01 11 21 31 41 // 02 12 22 32 42 // 03 13 23 33 43 /* minx *= 1000; maxx *= 1000; miny *= 1000; maxy *= 1000; */ double lat,lon; OZIGEN_NorthingEasting_to_LatLon(maxy-collar, minx+collar, &lat, &lon); double minlat = lat; double maxlat = lat; double minlon = lon; double maxlon = lon; OZIGEN_NorthingEasting_to_LatLon(maxy-collar, maxx-collar, &lat, &lon); if (lat < minlat) minlat = lat; if (lat > maxlat) maxlat = lat; if (lon < minlon) minlon = lon; if (lon > maxlon) maxlon = lon; OZIGEN_NorthingEasting_to_LatLon(miny+collar, minx+collar, &lat, &lon); if (lat < minlat) minlat = lat; if (lat > maxlat) maxlat = lat; if (lon < minlon) minlon = lon; if (lon > maxlon) maxlon = lon; OZIGEN_NorthingEasting_to_LatLon(miny+collar, maxx-collar, &lat, &lon); if (lat < minlat) minlat = lat; if (lat > maxlat) maxlat = lat; if (lon < minlon) minlon = lon; if (lon > maxlon) maxlon = lon; OZIGEN_LatLon_to_NorthingEasting(minlat, minlon, &lat, &lon); OZIGEN_LatLon_to_NorthingEasting(minlat, maxlon, &lat, &lon); OZIGEN_LatLon_to_NorthingEasting(maxlat, maxlon, &lat, &lon); OZIGEN_LatLon_to_NorthingEasting(maxlat, minlon, &lat, &lon); char jnxName[512]; GetCurrentDirectory(sizeof(jnxName), jnxName); CString Currdir = jnxName; // Save current directory // change directory to %TEMP% and make folder 'files' GetTempPath(sizeof(jnxName), jnxName); SetCurrentDirectory(jnxName); CreateDirectory("files", NULL); // sprintf(jnxName, "%s\\%s.kmz", Currdir, mapname); long nTilesAcross=(dest_bitmap_width+(tileWidth-1))/tileWidth; long nTilesDown=(dest_bitmap_height+(tileHeight-1))/tileHeight; // KMZ_tiles tiles; - gone global long across, down; for (across=0; across<nTilesAcross; across++) { for (down=0; down<nTilesDown; down++) { JPEG_tile * pTile = new JPEG_tile; pTile->fname.Format("files/c%02d%02d.jpg", down, across); pTile->lat_north = minlat+(maxlat-minlat)*(nTilesDown-down)/nTilesDown; pTile->lon_east = minlon+(maxlon-minlon)*(across+1)/nTilesAcross; pTile->lat_south = minlat+(maxlat-minlat)*(nTilesDown-down-1)/nTilesDown; pTile->lon_west = minlon+(maxlon-minlon)*across/nTilesAcross; pTile->offset_x0 = dest_bitmap_width*across/nTilesAcross; pTile->offset_x1 = dest_bitmap_width*(across+1)/nTilesAcross; pTile->offset_y0 = dest_bitmap_height*down/nTilesDown; pTile->offset_y1 = dest_bitmap_height*(down+1)/nTilesDown; tiles.AddTail(pTile); } } Global_AddToResultsWindow("Number of tiles = %d",tiles.GetCount()); // SNL wndProgress.ResetProgressBar("JPEG:",tiles.GetCount()); long tileCount=0; long index = 1; POSITION pos; for (pos=tiles.GetHeadPosition(); pos != NULL; tiles.GetNext(pos)) { wndProgress.ProgressBar(); if (wndProgress.m_Cancelled) return false; JPEG_tile * pTile = (JPEG_tile *)tiles.GetAt(pos); Gdiplus::Rect r(0, 0, pTile->offset_x1-pTile->offset_x0, pTile->offset_y1-pTile->offset_y0); Gdiplus::Bitmap bmp(r.GetRight(), r.GetBottom(), PixelFormat24bppRGB ); Gdiplus::BitmapData bmpData; bmp.LockBits(&r, Gdiplus::ImageLockModeRead | Gdiplus::ImageLockModeWrite, PixelFormat24bppRGB, &bmpData); long x,y; for (y=pTile->offset_y0; y<pTile->offset_y1; y++) { lat = maxlat-(maxlat-minlat)/dest_bitmap_height*y; unsigned char * dest_bitmap_offset = ((unsigned char *)bmpData.Scan0) + bmpData.Stride*(y-pTile->offset_y0); for (x=pTile->offset_x0; x<pTile->offset_x1; x++) { lon = minlon+(maxlon-minlon)/dest_bitmap_width*x; double northing, easting; OZIGEN_LatLon_to_NorthingEasting(lat, lon, &northing, &easting); northing += 0.5; easting += 0.5; if (northing < miny || easting < minx || northing > maxy || easting > maxx) { // No bitmap data present -- white *dest_bitmap_offset++ = 255; *dest_bitmap_offset++ = 255; *dest_bitmap_offset++ = 255; } else { // Look up colour of bitmap pixel unsigned char * pal = bitmap_palette + 4*bitmap_memory[(long)((maxy-northing)/dMetersPerPixel)*bitmap_width + (long)((easting-minx)/dMetersPerPixel)]; *dest_bitmap_offset++ = pal[0]; *dest_bitmap_offset++ = pal[1]; *dest_bitmap_offset++ = pal[2]; } } } bmp.UnlockBits(&bmpData); wchar_t wbuffer[64]; int i; for (i=0; i<pTile->fname.GetLength(); i++) wbuffer[i] = pTile->fname.GetAt(i); wbuffer[i] = 0; bmp.Save(wbuffer, &encoderClsid, &encoderParameters); tileCount++; } SetCurrentDirectory(Currdir); // tiles.RemoveAll(); /* if (nPoints) { free(points); nPoints = 0; points = NULL; } */ Gdiplus::GdiplusShutdown(gdiplusToken); free(bitmap_memory); // Next bit from Map2JNX // up to five levels. nLevels gives the actual count static level_t levels[5]; // information about all files static std::list<file_t> files; // the JNX file header to be copied to the outfile static jnx_hdr_t jnx_hdr; // the tile information table for all 5 levels static jnx_tile_t tileTable[JNX_MAX_TILES * 5]; const uint8_t dummy = 0; uint32_t tileTableStart = 0; uint32_t tileCnt = 0; const char *jnx_copyright = "Unknown"; const char *jnx_subscname = "BirdsEye"; const char *jnx_mapname = "Unknown"; char *copyright_buf = NULL; char *subscname_buf = NULL; char *mapname_buf = NULL; double right = -180.0; double top = -90.0; double left = 180.0; double bottom = 90.0; double scale = 0.0; // Number of used levels static int32_t nLevels = 1; FILE * fid = fopen(mapname+".jnx","wb"); if(fid == 0) { // Failed to create file. return false; } // New code writer start // POSITION pos; for (pos=tiles.GetHeadPosition(); pos != NULL; tiles.GetNext(pos)) { JPEG_tile * pTile = (JPEG_tile *)tiles.GetAt(pos); if (left > pTile->lon_west) left = pTile->lon_west; if (right < pTile->lon_east) right = pTile->lon_east; if (top < pTile->lat_north) top = pTile->lat_north; if (bottom > pTile->lat_south) bottom = pTile->lat_south; } nLevels = 1; // New code writer end jnx_hdr.zorder = nDrawOrder; jnx_hdr.left = (int32_t)((left * 0x7FFFFFFF) / 180); jnx_hdr.top = (int32_t)((top * 0x7FFFFFFF) / 180); jnx_hdr.right = (int32_t)((right * 0x7FFFFFFF) / 180); jnx_hdr.bottom = (int32_t)((bottom * 0x7FFFFFFF) / 180); jnx_hdr.details = nLevels; for(int i=0; i<HEADER_BLOCK_SIZE; i++) { fwrite(&dummy, sizeof(dummy), 1, fid); } _fseeki64(fid,0,SEEK_SET); fwrite(&jnx_hdr, sizeof(jnx_hdr), 1, fid); // get all information to write the table of detail levels and the dummy tile table int i=0; level_t& level = levels[i]; level.nTiles = tiles.GetCount(); level.offset = HEADER_BLOCK_SIZE; // still has to be offset by complete header level.scale = 1509; fwrite(&level.nTiles, sizeof(level.nTiles), 1, fid); fwrite(&level.offset, sizeof(level.offset), 1, fid); fwrite(&level.scale, sizeof(level.scale), 1, fid); fwrite(&level.dummy, sizeof(level.dummy), 1, fid); fwrite(jnx_copyright, strlen(jnx_copyright) + 1, 1, fid); // printf("\n Level %i: % 5i tiles, offset %08X, scale: %i, %ix%i", i, level.nTiles, level.offset, level.scale, level.tileSize, level.tileSize); // write map loader info block uint32_t blockVersion = 0x00000009; char GUID[40]; createGUID(GUID); fwrite(&blockVersion, sizeof(blockVersion), 1, fid); fwrite(GUID, 37, 1, fid); fwrite(jnx_subscname, strlen(jnx_subscname) + 1, 1, fid); fwrite(&dummy, sizeof(dummy), 1, fid); fwrite(&dummy, sizeof(dummy), 1, fid); fwrite(&dummy, sizeof(dummy), 1, fid); fwrite(jnx_mapname, strlen(jnx_mapname) + 1, 1, fid); fwrite(&nLevels , sizeof(nLevels), 1, fid); for(int i = 1; i <= nLevels; i++) { char str[40]; sprintf(str,"Level %i", i); fwrite(str, strlen(str) + 1, 1, fid); fwrite(str, strlen(str) + 1, 1, fid); fwrite(jnx_copyright, strlen(jnx_copyright) + 1, 1, fid); fwrite(&i,sizeof(i), 1, fid); } // write dummy tile table tileTableStart = HEADER_BLOCK_SIZE; _fseeki64(fid, tileTableStart, SEEK_SET); fwrite(tileTable, sizeof(jnx_tile_t), tileCount, fid); // New code writer start char TempPath[512]; GetTempPath(sizeof(TempPath), TempPath); CString tPath = TempPath; tPath = tPath + "\\"; wndProgress.ResetProgressBar("JNX:",tiles.GetCount()); for (pos=tiles.GetHeadPosition(); pos != NULL; tiles.GetNext(pos)) { JPEG_tile * pTile = (JPEG_tile *)tiles.GetAt(pos); // printf("JPEG %d of %d\r", tileCnt, tiles.GetCount()); jnx_tile_t& tile = tileTable[tileCnt++]; tile.left = (int32_t)(pTile->lon_west * 0x7FFFFFFF / 180); tile.top = (int32_t)(pTile->lat_north * 0x7FFFFFFF / 180); tile.right = (int32_t)(pTile->lon_east * 0x7FFFFFFF / 180); tile.bottom = (int32_t)(pTile->lat_south * 0x7FFFFFFF / 180); tile.width = (uint16_t)(pTile->offset_x1-pTile->offset_x0); tile.height = (uint16_t)(pTile->offset_y1-pTile->offset_y0); tile.offset = (uint32_t)(_ftelli64(fid) & 0x0FFFFFFFF); tile.size = appendJPG(tPath + pTile->fname, fid); } // New code writer end // terminate output file fwrite("BirdsEye", 8, 1, fid); // write final tile table _fseeki64(fid, tileTableStart, SEEK_SET); fwrite(tileTable, sizeof(jnx_tile_t), tileCount, fid); // done fclose(fid); exit_CreateJNXJpeg: // Clean up if (copyright_buf) free(copyright_buf); if (subscname_buf) free(subscname_buf); if (mapname_buf) free(mapname_buf); //POSITION pos; for (pos=tiles.GetHeadPosition(); pos != NULL; tiles.GetNext(pos)) { JPEG_tile * pTile = (JPEG_tile *)tiles.GetAt(pos); DeleteFile(pTile->fname); } tiles.RemoveAll(); return true; }
int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key) { char cmd[100]; char cmd2[100]; CHintBox * hintbox; int res; FILE * f; char src[128], dst[128]; CProgressWindow * progress; snprintf(src, sizeof(src), "/dev/%s1", key.c_str()); snprintf(dst, sizeof(dst), "/media/%s1", key.c_str()); printf("CHDDFmtExec: key %s\n", key.c_str()); res = ShowMsgUTF ( LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_WARN), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo ); if(res != CMessageBox::mbrYes) return 0; bool srun = system("killall -9 smbd"); //res = check_and_umount(dst); res = check_and_umount(src, dst); printf("CHDDFmtExec: umount res %d\n", res); if(res) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_UMOUNT_WARN)); hintbox->paint(); sleep(2); delete hintbox; goto _return; } f = fopen("/proc/sys/kernel/hotplug", "w"); if(f) { fprintf(f, "none\n"); fclose(f); } progress = new CProgressWindow(); progress->setTitle(LOCALE_HDD_FORMAT); progress->exec(NULL,""); progress->showStatusMessageUTF("Executing fdisk"); progress->showGlobalStatus(0); if (access("/sbin/sfdisk", X_OK) == 0) { snprintf(cmd, sizeof(cmd), "/sbin/sfdisk -f -uM /dev/%s", key.c_str()); strcpy(cmd2, "0,\n;\n;\n;\ny\n"); } else { snprintf(cmd, sizeof(cmd), "/sbin/fdisk /dev/%s", key.c_str()); strcpy(cmd2, "o\nn\np\n1\n\n\nw\n"); } printf("CHDDFmtExec: executing %s\n", cmd); f=popen(cmd, "w"); if (!f) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_FAILED)); hintbox->paint(); sleep(2); delete hintbox; goto _remount; } fprintf(f, "%s", cmd2); pclose(f); //sleep(1); switch(g_settings.hdd_fs) { case 0: snprintf(cmd, sizeof(cmd), "/sbin/mkfs.ext3 -T largefile -m0 %s", src); break; case 1: snprintf(cmd, sizeof(cmd), "/sbin/mkreiserfs -f -f %s", src); break; default: return 0; } printf("CHDDFmtExec: executing %s\n", cmd); f=popen(cmd, "r"); if (!f) { hintbox = new CHintBox(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_FAILED)); hintbox->paint(); sleep(2); delete hintbox; goto _remount; } char buf[256]; setbuf(f, NULL); int n, t, in, pos, stage; pos = 0; stage = 0; while (true) { in = fgetc(f); if (in == EOF) break; buf[pos] = (char)in; pos++; buf[pos] = 0; if (in == '\b' || in == '\n') pos = 0; /* start a new line */ //printf("%s", buf); switch (stage) { case 0: if (strcmp(buf, "Writing inode tables:") == 0) { stage++; progress->showGlobalStatus(20); progress->showStatusMessageUTF(buf); } break; case 1: if (in == '\b' && sscanf(buf, "%d/%d\b", &n, &t) == 2) { int percent = 100 * n / t; progress->showLocalStatus(percent); progress->showGlobalStatus(20 + percent / 5); } if (strstr(buf, "done")) { stage++; pos = 0; } break; case 2: if (strstr(buf, "blocks):") && sscanf(buf, "Creating journal (%d blocks):", &n) == 1) { progress->showLocalStatus(0); progress->showGlobalStatus(60); progress->showStatusMessageUTF(buf); pos = 0; } if (strstr(buf, "done")) { stage++; pos = 0; } break; case 3: if (strcmp(buf, "Writing superblocks and filesystem accounting information:") == 0) { progress->showGlobalStatus(80); progress->showStatusMessageUTF(buf); pos = 0; } break; default: // printf("unknown stage! %d \n\t", stage); break; } } progress->showLocalStatus(100); pclose(f); progress->showGlobalStatus(100); sleep(2); snprintf(cmd, sizeof(cmd), "/sbin/tune2fs -r 0 -c 0 -i 0 %s", src); printf("CHDDFmtExec: executing %s\n", cmd); system(cmd); _remount: progress->hide(); delete progress; switch(g_settings.hdd_fs) { case 0: safe_mkdir(dst); res = mount(src, dst, "ext3", 0, NULL); break; case 1: safe_mkdir(dst); res = mount(src, dst, "reiserfs", 0, NULL); break; default: break; } f = fopen("/proc/sys/kernel/hotplug", "w"); if(f) { fprintf(f, "/sbin/hotplug\n"); fclose(f); } if(!res) { snprintf(cmd, sizeof(cmd), "%s/movies", dst); safe_mkdir((char *) cmd); snprintf(cmd, sizeof(cmd), "%s/pictures", dst); safe_mkdir((char *) cmd); snprintf(cmd, sizeof(cmd), "%s/epg", dst); safe_mkdir((char *) cmd); snprintf(cmd, sizeof(cmd), "%s/music", dst); safe_mkdir((char *) cmd); sync(); #if HAVE_TRIPLEDRAGON /* on the tripledragon, we mount via fstab, so we need to add an fstab entry for dst */ FILE *g; char *line = NULL; unlink("/etc/fstab.new"); g = fopen("/etc/fstab.new", "w"); f = fopen("/etc/fstab", "r"); if (!g) perror("open /etc/fstab.new"); else { if (f) { int ret; while (true) { size_t dummy; ret = getline(&line, &dummy, f); if (ret < 0) break; /* remove lines that start with the same disk we formatted src is "/dev/xda1", we only compare "/dev/xda" */ if (strncmp(line, src, strlen(src)-1) != 0) fprintf(g, "%s", line); } free(line); fclose(f); } /* now add our new entry */ fprintf(g, "%s %s auto defaults 0 0\n", src, dst); fclose(g); rename("/etc/fstab", "/etc/fstab.old"); rename("/etc/fstab.new", "/etc/fstab"); } #endif } _return: if(!srun) system("smbd"); return menu_return::RETURN_REPAINT; }
void CTestMenu::testCProgressWindow() { CProgressWindow * progress; progress = new CProgressWindow(); progress->setTitle("CProgressWindow"); progress->exec(NULL, ""); progress->showStatusMessageUTF("testing CProgressWindow"); progress->showGlobalStatus(0); usleep(1000000); progress->showGlobalStatus(10); usleep(1000000); progress->showGlobalStatus(20); usleep(1000000); progress->showGlobalStatus(30); usleep(1000000); progress->showGlobalStatus(40); usleep(1000000); progress->showGlobalStatus(50); usleep(1000000); progress->showGlobalStatus(60); usleep(1000000); progress->showGlobalStatus(70); usleep(1000000); progress->showGlobalStatus(80); usleep(1000000); progress->showGlobalStatus(90); usleep(1000000); progress->showGlobalStatus(100); usleep(1000000); progress->hide(); delete progress; progress = NULL; }