Ticket #10: Work_in_progress_issue10.patch

File Work_in_progress_issue10.patch, 4.0 KB (added by miniupnp, 7 years ago)
  • filesel.c

     
    8181#define SELECTED_BACKGROUND_COLOR       MC_Dark // color du fond  pour une ligne
    8282  // sélectionnée
    8383
     84#define TOCODE   "CP1252"
     85#define FROMCODE "UTF-8"
     86static iconv_t cd = (iconv_t)-1;  // utilisé pour convertir les noms de fichiers
     87
    8488// -- Native fileselector for WIN32
    8589
    8690// Returns 0 if all ok, something else if failed
     
    230234  int         c;
    231235  int         other_cursor;
    232236  int         pos_last_dot;
     237  char        converted_fname[MAX_PATH_CHARACTERS];
    233238
     239  {
     240    char * input = (char *)fname;
     241    size_t inbytesleft = strlen(fname);
     242    char * output = converted_fname;
     243    size_t outbytesleft = sizeof(converted_fname)-1;
     244    if(cd == (iconv_t)-1)
     245      cd = iconv_open(TOCODE, FROMCODE);
     246    if((ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0)
     247    {
     248      *output = '\0';
     249      fname = converted_fname;
     250    }
     251  }
    234252  // safety
    235253  if (max_length>40)
    236254    max_length=40;
     
    10641082// Affiche Selector->Directory sur 37 caractères
    10651083//
    10661084{
     1085  char converted_name[MAX_PATH_CHARACTERS];
    10671086  char temp_name[MAX_DISPLAYABLE_PATH+1]; // Nom tronqué
    10681087  int  length; // length du répertoire courant
    10691088  int  index;   // index de parcours de la chaine complète
    10701089
     1090  strncpy(converted_name,Selector->Directory,sizeof(converted_name));
     1091  converted_name[sizeof(converted_name)-1] = '\0';
     1092  {
     1093    char * input = Selector->Directory;
     1094    size_t inbytesleft = strlen(input);
     1095    char * output = converted_name;
     1096    size_t outbytesleft = sizeof(converted_name)-1;
     1097    if(cd == (iconv_t)-1)
     1098      cd = iconv_open(TOCODE, FROMCODE);
     1099    if((ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0)
     1100    {
     1101      *output = '\0';
     1102    }
     1103  }
     1104
    10711105  Window_rectangle(10,84,37*8,8,MC_Light);
    10721106
    1073   length=strlen(Selector->Directory);
     1107  length=strlen(converted_name);
    10741108  if (length>MAX_DISPLAYABLE_PATH)
    10751109  { // Doh! il va falloir tronquer le répertoire (bouh !)
    10761110
    10771111    // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\")
    10781112    for (index=0;index<3;index++)
    1079       temp_name[index]=Selector->Directory[index];
     1113      temp_name[index]=converted_name[index];
    10801114
    10811115    // On y rajoute 3 petits points:
    10821116    strcpy(temp_name+3,"...");
     
    10841118    //  Ensuite, on cherche un endroit à partir duquel on pourrait loger tout
    10851119    // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!)
    10861120    for (index++;index<length;index++)
    1087       if ( (Selector->Directory[index]==PATH_SEPARATOR[0]) &&
     1121      if ( (converted_name[index]==PATH_SEPARATOR[0]) &&
    10881122           (length-index<=MAX_DISPLAYABLE_PATH-6) )
    10891123      {
    10901124        // Ouf: on vient de trouver un endroit dans la chaîne à partir duquel
    10911125        // on peut faire la copie:
    1092         strcpy(temp_name+6,Selector->Directory+index);
     1126        strcpy(temp_name+6,converted_name+index);
    10931127        break;
    10941128      }
    10951129
     
    10971131    Print_in_window(10,84,temp_name,MC_Black,MC_Light);
    10981132  }
    10991133  else // Ahhh! La chaîne peut loger tranquillement dans la fenêtre
    1100     Print_in_window(10,84,Selector->Directory,MC_Black,MC_Light);
     1134    Print_in_window(10,84,converted_name,MC_Black,MC_Light);
    11011135   
    11021136  Update_window_area(10,84,37*8,8);
    11031137}
     
    11071141//
    11081142void Print_filename_in_fileselector(void)
    11091143{
     1144  char filename[32];
     1145  strncpy(filename, Selector_filename, sizeof(filename));
     1146  {
     1147    char * input = (char *)Selector_filename;
     1148    size_t inbytesleft = strlen(Selector_filename);
     1149    char * output = filename;
     1150    size_t outbytesleft = sizeof(filename)-1;
     1151    if(cd == (iconv_t)-1)
     1152      cd = iconv_open(TOCODE, FROMCODE);
     1153    if((ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0)
     1154    {
     1155      *output = '\0';
     1156    }
     1157  }
    11101158  Window_rectangle(82,48,27*8,8,MC_Light);
    1111   Print_in_window_limited(82,48,Selector_filename,27,MC_Black,MC_Light);
     1159  Print_in_window_limited(82,48,filename,27,MC_Black,MC_Light);
    11121160  Update_window_area(82,48,27*8,8);
    11131161}
    11141162