Ticket #10: Work_in_progress_issue10.patch
File Work_in_progress_issue10.patch, 4.0 KB (added by , 8 years ago) |
---|
-
filesel.c
81 81 #define SELECTED_BACKGROUND_COLOR MC_Dark // color du fond pour une ligne 82 82 // sélectionnée 83 83 84 #define TOCODE "CP1252" 85 #define FROMCODE "UTF-8" 86 static iconv_t cd = (iconv_t)-1; // utilisé pour convertir les noms de fichiers 87 84 88 // -- Native fileselector for WIN32 85 89 86 90 // Returns 0 if all ok, something else if failed … … 230 234 int c; 231 235 int other_cursor; 232 236 int pos_last_dot; 237 char converted_fname[MAX_PATH_CHARACTERS]; 233 238 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 } 234 252 // safety 235 253 if (max_length>40) 236 254 max_length=40; … … 1064 1082 // Affiche Selector->Directory sur 37 caractères 1065 1083 // 1066 1084 { 1085 char converted_name[MAX_PATH_CHARACTERS]; 1067 1086 char temp_name[MAX_DISPLAYABLE_PATH+1]; // Nom tronqué 1068 1087 int length; // length du répertoire courant 1069 1088 int index; // index de parcours de la chaine complète 1070 1089 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 1071 1105 Window_rectangle(10,84,37*8,8,MC_Light); 1072 1106 1073 length=strlen( Selector->Directory);1107 length=strlen(converted_name); 1074 1108 if (length>MAX_DISPLAYABLE_PATH) 1075 1109 { // Doh! il va falloir tronquer le répertoire (bouh !) 1076 1110 1077 1111 // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\") 1078 1112 for (index=0;index<3;index++) 1079 temp_name[index]= Selector->Directory[index];1113 temp_name[index]=converted_name[index]; 1080 1114 1081 1115 // On y rajoute 3 petits points: 1082 1116 strcpy(temp_name+3,"..."); … … 1084 1118 // Ensuite, on cherche un endroit à partir duquel on pourrait loger tout 1085 1119 // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!) 1086 1120 for (index++;index<length;index++) 1087 if ( ( Selector->Directory[index]==PATH_SEPARATOR[0]) &&1121 if ( (converted_name[index]==PATH_SEPARATOR[0]) && 1088 1122 (length-index<=MAX_DISPLAYABLE_PATH-6) ) 1089 1123 { 1090 1124 // Ouf: on vient de trouver un endroit dans la chaîne à partir duquel 1091 1125 // on peut faire la copie: 1092 strcpy(temp_name+6, Selector->Directory+index);1126 strcpy(temp_name+6,converted_name+index); 1093 1127 break; 1094 1128 } 1095 1129 … … 1097 1131 Print_in_window(10,84,temp_name,MC_Black,MC_Light); 1098 1132 } 1099 1133 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); 1101 1135 1102 1136 Update_window_area(10,84,37*8,8); 1103 1137 } … … 1107 1141 // 1108 1142 void Print_filename_in_fileselector(void) 1109 1143 { 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 } 1110 1158 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); 1112 1160 Update_window_area(82,48,27*8,8); 1113 1161 } 1114 1162