Ticket #10: issue10_a.patch
File issue10_a.patch, 6.9 KB (added by , 7 years ago) |
---|
-
global.h
854 854 /// Current line number when reading/writing gfx2.ini 855 855 GFX2_GLOBAL int Line_number_in_INI_file; 856 856 857 // -- For iconv 858 859 #define TOCODE "CP1252" 860 #define FROMCODE "UTF-8" 861 GFX2_GLOBAL iconv_t cd; 862 GFX2_GLOBAL iconv_t cd_inv; 863 857 864 // -- Specific to SDL 858 865 859 866 /// Pointer to the program's screen. -
filesel.c
230 230 int c; 231 231 int other_cursor; 232 232 int pos_last_dot; 233 char converted_fname[MAX_PATH_CHARACTERS]; 233 234 235 { 236 char * input = (char *)fname; 237 size_t inbytesleft = strlen(fname); 238 char * output = converted_fname; 239 size_t outbytesleft = sizeof(converted_fname)-1; 240 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 241 { 242 *output = '\0'; 243 fname = converted_fname; 244 } 245 } 234 246 // safety 235 247 if (max_length>40) 236 248 max_length=40; … … 1064 1076 // Affiche Selector->Directory sur 37 caractères 1065 1077 // 1066 1078 { 1079 char converted_name[MAX_PATH_CHARACTERS]; 1067 1080 char temp_name[MAX_DISPLAYABLE_PATH+1]; // Nom tronqué 1068 1081 int length; // length du répertoire courant 1069 1082 int index; // index de parcours de la chaine complète 1070 1083 1084 strncpy(converted_name,Selector->Directory,sizeof(converted_name)); 1085 converted_name[sizeof(converted_name)-1] = '\0'; 1086 { 1087 char * input = Selector->Directory; 1088 size_t inbytesleft = strlen(input); 1089 char * output = converted_name; 1090 size_t outbytesleft = sizeof(converted_name)-1; 1091 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1092 { 1093 *output = '\0'; 1094 } 1095 } 1096 1071 1097 Window_rectangle(10,84,37*8,8,MC_Light); 1072 1098 1073 length=strlen( Selector->Directory);1099 length=strlen(converted_name); 1074 1100 if (length>MAX_DISPLAYABLE_PATH) 1075 1101 { // Doh! il va falloir tronquer le répertoire (bouh !) 1076 1102 1077 1103 // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\") 1078 1104 for (index=0;index<3;index++) 1079 temp_name[index]= Selector->Directory[index];1105 temp_name[index]=converted_name[index]; 1080 1106 1081 1107 // On y rajoute 3 petits points: 1082 1108 strcpy(temp_name+3,"..."); … … 1084 1110 // Ensuite, on cherche un endroit à partir duquel on pourrait loger tout 1085 1111 // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!) 1086 1112 for (index++;index<length;index++) 1087 if ( ( Selector->Directory[index]==PATH_SEPARATOR[0]) &&1113 if ( (converted_name[index]==PATH_SEPARATOR[0]) && 1088 1114 (length-index<=MAX_DISPLAYABLE_PATH-6) ) 1089 1115 { 1090 1116 // Ouf: on vient de trouver un endroit dans la chaîne à partir duquel 1091 1117 // on peut faire la copie: 1092 strcpy(temp_name+6, Selector->Directory+index);1118 strcpy(temp_name+6,converted_name+index); 1093 1119 break; 1094 1120 } 1095 1121 … … 1097 1123 Print_in_window(10,84,temp_name,MC_Black,MC_Light); 1098 1124 } 1099 1125 else // Ahhh! La chaîne peut loger tranquillement dans la fenêtre 1100 Print_in_window(10,84, Selector->Directory,MC_Black,MC_Light);1126 Print_in_window(10,84,converted_name,MC_Black,MC_Light); 1101 1127 1102 1128 Update_window_area(10,84,37*8,8); 1103 1129 } … … 1107 1133 // 1108 1134 void Print_filename_in_fileselector(void) 1109 1135 { 1136 char filename[32]; 1137 strncpy(filename, Selector_filename, sizeof(filename)); 1138 { 1139 char * input = (char *)Selector_filename; 1140 size_t inbytesleft = strlen(Selector_filename); 1141 char * output = filename; 1142 size_t outbytesleft = sizeof(filename)-1; 1143 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1144 { 1145 *output = '\0'; 1146 } 1147 } 1110 1148 Window_rectangle(82,48,27*8,8,MC_Light); 1111 Print_in_window_limited(82,48, Selector_filename,27,MC_Black,MC_Light);1149 Print_in_window_limited(82,48,filename,27,MC_Black,MC_Light); 1112 1150 Update_window_area(82,48,27*8,8); 1113 1151 } 1114 1152 … … 1734 1772 // current name is a highlighted directory 1735 1773 Selector_filename[0]='\0'; 1736 1774 } 1737 if (Readline(82,48,Selector_filename,27,INPUT_TYPE_FILENAME))1775 char filename_ansi[256]; 1738 1776 { 1777 char * input = (char *)Selector_filename; 1778 size_t inbytesleft = strlen(input); 1779 char * output = filename_ansi; 1780 size_t outbytesleft = sizeof(filename_ansi)-1; 1781 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1782 *output = '\0'; 1783 else 1784 strncpy(filename_ansi, Selector_filename, sizeof(filename_ansi)); 1785 } 1786 if (Readline(82,48,filename_ansi,27,INPUT_TYPE_FILENAME)) 1787 { 1788 char * input = (char *)filename_ansi; 1789 size_t inbytesleft = strlen(input); 1790 char * output = Selector_filename; 1791 size_t outbytesleft = sizeof(Selector_filename)-1; 1792 if(cd_inv != (iconv_t)-1 && (ssize_t)iconv(cd_inv, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1793 *output = '\0'; 1794 else 1795 strncpy(Selector_filename, filename_ansi, sizeof(Selector_filename)); 1796 1739 1797 // On regarde s'il faut rajouter une extension. C'est-à-dire s'il 1740 1798 // n'y a pas de '.' dans le nom du fichier. 1741 1799 for(temp=0,dummy=0; ((Selector_filename[temp]) && (!dummy)); temp++) -
windows.c
799 799 // Determine maximum size, in characters 800 800 max_size = 12 + (Screen_width / Menu_factor_X - 320) / 8; 801 801 802 string_size = strlen(Main_backups->Pages->Filename);803 804 802 // Partial copy of the name 805 strncpy(display_string, Main_backups->Pages->Filename, max_size); 803 { 804 char * input = Main_backups->Pages->Filename; 805 size_t inbytesleft = strlen(input); 806 char * output = display_string; 807 size_t outbytesleft = sizeof(display_string)-1; 808 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 809 *output = '\0'; 810 else 811 { 812 strncpy(display_string, Main_backups->Pages->Filename, sizeof(display_string)-1); 813 display_string[sizeof(display_string)-1] = '\0'; 814 } 815 } 816 string_size = strlen(display_string); 806 817 display_string[max_size]='\0'; 807 818 808 819 if (string_size > max_size) -
main.c
469 469 getcwd(Main_selector.Directory,MAX_PATH_CHARACTERS); 470 470 #endif 471 471 472 // Initialisation de iconv 473 // utilisé pour convertir les noms de fichiers 474 cd = iconv_open(TOCODE, FROMCODE); // From UTF8 to ANSI 475 cd_inv = iconv_open(FROMCODE, TOCODE); // From ANSI to UTF8 476 472 477 // On en profite pour le mémoriser dans le répertoire principal: 473 478 strcpy(Initial_directory,Main_selector.Directory); 474 479