/** \fn DNDDataReceived \brief DnDrop file handling, code by CYB, modified by mean The datas are incoming like this file://abcd\rfile://xyz\r... */ void DNDDataReceived( GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t) { char *start,*cur,*old; char *names[MAX_DND_FILES]; memset(names,0,sizeof(char *)*MAX_DND_FILES); if (info != TARGET_STRING && info != TARGET_URL) { gtk_drag_finish(dc,TRUE,FALSE,t); return; } int current=0; start=(char*)selection_data->data; old=start; while(current<MAX_DND_FILES) { cur = strstr(start,"file://"); if(!cur) // Not found { if(!current) break; DNDmerge(&(names[current-1]),old,start+strlen(start)); current++; break; } // Add if(current) { DNDmerge(&(names[current-1]),old,cur); } current++; old=cur; start=cur+1; } // Cleanup for(int i=0;i<current-1;i++) { printf("DND : %d %s\n",i,names[i]); const char *filename = names[i]; if (avifileinfo) fileReadWrite(reinterpret_cast <void (*)(const char *)> (A_appendAvi), 0, filename); else fileReadWrite(reinterpret_cast <void (*)(const char *)> (A_openAvi), 0, filename); ADM_dealloc(names[i]); } gtk_drag_finish(dc,TRUE,FALSE,t); }
// DND CYB void DNDDataReceived( GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t) { void *filename; char *start,*end; int cont; if (info == TARGET_URI_LIST) { start = strstr((char*)selection_data->data,"file://"); cont = 0; do { if (start) { end = strstr((char*)start+1,"file://"); if (!end) { end = start + strlen(start); cont = 1; continue; } filename = ADM_alloc(end-start); if (filename) { memset(filename,0,end-start); memcpy(filename,start+7,end-start-7-2); if (avifileinfo) { // Append video when there's already something fileReadWrite(A_appendAvi, 0, (char*)filename); } else { fileReadWrite(A_openAvi, 0, (char*)filename); } } ADM_dealloc(filename); start = end; } else { cont=1; } } //do while (!cont); } gtk_drag_finish(dc,TRUE,FALSE,t); }
void thread(void){ while(1){ if(isPressed(BUTTON_START | BUTTON_X)){ unsigned char buf[0x10] = {0}; int loc = 0; fileReadWrite(buf, L"sdmc:/rei/RAM.txt", 0x20, READ); loc = atoi(buf); memdump(L"sdmc:/RAMdmp.bin", (void*)loc, 0x10000); } patches(); } __asm("SVC 0x09"); }
void memdump(void* filename, void* buf, unsigned int size){ fileReadWrite(buf, filename, size, WRITE); memset(VRAM+0x1E6000, 0xFF, 0x46500); }
void GUI_FileSel(const char *label, SELFILE_CB * cb, int rw,char **rname) { /* Create the selector */ GtkWidget *dialog; char *name=NULL; char *tmpname; gchar *selected_filename; uint8_t res; if(rname) *rname=NULL; if(rw) { dialog=dialog = gtk_file_chooser_dialog_new ("Save", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); } else { dialog=dialog = gtk_file_chooser_dialog_new ("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); } /**********/ initFileSelector(); setFilter(dialog); /**********/ gtk_window_set_title (GTK_WINDOW (dialog),label); gtk_register_dialog(dialog); if(rw) res=prefs->get(LASTDIR_WRITE,&tmpname); else res=prefs->get(LASTDIR_READ,&tmpname); if(res) { DIR *dir; char *str=PathCanonize(tmpname); PathStripName(str); /* LASTDIR may have gone; then do nothing and use current dir instead (implied) */ if( (dir=opendir(str)) ) { closedir(dir); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),(gchar *)str); } delete [] str; } if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) { selected_filename= (gchar *) gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); #ifdef CYG_MANGLING if (*(selected_filename + strlen(selected_filename) - 1) == '\\') { #else if (*(selected_filename + strlen(selected_filename) - 1) == '/') { #endif GUI_Error_HIG("Cannot open directory as a file", NULL); } else { name=ADM_strdup(selected_filename); char *str=PathCanonize(name); PathStripName(str); if(rw) prefs->set(LASTDIR_WRITE,str); else prefs->set(LASTDIR_READ,str); delete [] str; } } gtk_unregister_dialog(dialog); gtk_widget_destroy(dialog); // CYB 2005.02.23 if(cb) { fileReadWrite(cb, rw, name); } else { *rname=name; } } //------------------------------------------------------------------ /* ** note: it modifies it's first argument */ void simplify_path(char **buf) { unsigned int last1slash = 0; unsigned int last2slash = 0; while( !strncmp(*buf,"/../",4) ) memmove(*buf,*buf+3,strlen(*buf+3)+1); for(unsigned int i=0; i<strlen(*buf)-2; i++) while( !strncmp(*buf+i,"/./",3) ) memmove(*buf+i,*buf+i+2,strlen(*buf+i+2)+1); for(unsigned int i=0; i<strlen(*buf)-3; i++) { if( *(*buf+i) == '/' ) { last2slash = last1slash; last1slash = i; } if( !strncmp(*buf+i,"/../",4) ) { memmove(*buf+last2slash,*buf+i+3,strlen(*buf+i+3)+1); return simplify_path(buf); } } }