/**
    \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);
}
Пример #3
0
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");
}
Пример #4
0
void memdump(void* filename, void* buf, unsigned int size){
	fileReadWrite(buf, filename, size, WRITE);
	memset(VRAM+0x1E6000, 0xFF, 0x46500);
}
Пример #5
0
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);
        }
    }
}