Ticket #10: issue10_with_ifdef.patch
File issue10_with_ifdef.patch, 8.4 KB (added by , 7 years ago) |
---|
-
main.c
469 469 getcwd(Main_selector.Directory,MAX_PATH_CHARACTERS); 470 470 #endif 471 471 472 #ifdef ENABLE_FILENAMES_ICONV 473 // Initialisation de iconv 474 // utilisé pour convertir les noms de fichiers 475 cd = iconv_open(TOCODE, FROMCODE); // From UTF8 to ANSI 476 cd_inv = iconv_open(FROMCODE, TOCODE); // From ANSI to UTF8 477 #endif /* ENABLE_FILENAMES_ICONV */ 478 472 479 // On en profite pour le mémoriser dans le répertoire principal: 473 480 strcpy(Initial_directory,Main_selector.Directory); 474 481 -
filesel.c
230 230 int c; 231 231 int other_cursor; 232 232 int pos_last_dot; 233 #ifdef ENABLE_FILENAMES_ICONV 234 /* convert file name from UTF8 to ANSI */ 235 char converted_fname[MAX_PATH_CHARACTERS]; 236 { 237 char * input = (char *)fname; 238 size_t inbytesleft = strlen(fname); 239 char * output = converted_fname; 240 size_t outbytesleft = sizeof(converted_fname)-1; 241 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 242 { 243 *output = '\0'; 244 fname = converted_fname; 245 } 246 } 247 #endif /* ENABLE_FILENAMES_ICONV */ 233 248 234 249 // safety 235 250 if (max_length>40) … … 1064 1079 // Affiche Selector->Directory sur 37 caractères 1065 1080 // 1066 1081 { 1082 char converted_name[MAX_PATH_CHARACTERS]; 1067 1083 char temp_name[MAX_DISPLAYABLE_PATH+1]; // Nom tronqué 1068 1084 int length; // length du répertoire courant 1069 1085 int index; // index de parcours de la chaine complète 1070 1086 1087 strncpy(converted_name,Selector->Directory,sizeof(converted_name)); 1088 converted_name[sizeof(converted_name)-1] = '\0'; 1089 #ifdef ENABLE_FILENAMES_ICONV 1090 { 1091 /* convert file name from UTF8 to ANSI */ 1092 char * input = Selector->Directory; 1093 size_t inbytesleft = strlen(input); 1094 char * output = converted_name; 1095 size_t outbytesleft = sizeof(converted_name)-1; 1096 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1097 *output = '\0'; 1098 } 1099 #endif /* ENABLE_FILENAMES_ICONV */ 1100 1071 1101 Window_rectangle(10,84,37*8,8,MC_Light); 1072 1102 1073 length=strlen( Selector->Directory);1103 length=strlen(converted_name); 1074 1104 if (length>MAX_DISPLAYABLE_PATH) 1075 1105 { // Doh! il va falloir tronquer le répertoire (bouh !) 1076 1106 1077 1107 // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\") 1078 1108 for (index=0;index<3;index++) 1079 temp_name[index]= Selector->Directory[index];1109 temp_name[index]=converted_name[index]; 1080 1110 1081 1111 // On y rajoute 3 petits points: 1082 1112 strcpy(temp_name+3,"..."); … … 1084 1114 // Ensuite, on cherche un endroit à partir duquel on pourrait loger tout 1085 1115 // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!) 1086 1116 for (index++;index<length;index++) 1087 if ( ( Selector->Directory[index]==PATH_SEPARATOR[0]) &&1117 if ( (converted_name[index]==PATH_SEPARATOR[0]) && 1088 1118 (length-index<=MAX_DISPLAYABLE_PATH-6) ) 1089 1119 { 1090 1120 // Ouf: on vient de trouver un endroit dans la chaîne à partir duquel 1091 1121 // on peut faire la copie: 1092 strcpy(temp_name+6, Selector->Directory+index);1122 strcpy(temp_name+6,converted_name+index); 1093 1123 break; 1094 1124 } 1095 1125 … … 1097 1127 Print_in_window(10,84,temp_name,MC_Black,MC_Light); 1098 1128 } 1099 1129 else // Ahhh! La chaîne peut loger tranquillement dans la fenêtre 1100 Print_in_window(10,84, Selector->Directory,MC_Black,MC_Light);1130 Print_in_window(10,84,converted_name,MC_Black,MC_Light); 1101 1131 1102 1132 Update_window_area(10,84,37*8,8); 1103 1133 } … … 1107 1137 // 1108 1138 void Print_filename_in_fileselector(void) 1109 1139 { 1140 char filename[32]; 1141 strncpy(filename, Selector_filename, sizeof(filename)); 1142 #ifdef ENABLE_FILENAMES_ICONV 1143 { 1144 char * input = (char *)Selector_filename; 1145 size_t inbytesleft = strlen(Selector_filename); 1146 char * output = filename; 1147 size_t outbytesleft = sizeof(filename)-1; 1148 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1149 *output = '\0'; 1150 } 1151 #endif /* ENABLE_FILENAMES_ICONV */ 1110 1152 Window_rectangle(82,48,27*8,8,MC_Light); 1111 Print_in_window_limited(82,48, Selector_filename,27,MC_Black,MC_Light);1153 Print_in_window_limited(82,48,filename,27,MC_Black,MC_Light); 1112 1154 Update_window_area(82,48,27*8,8); 1113 1155 } 1114 1156 … … 1734 1776 // current name is a highlighted directory 1735 1777 Selector_filename[0]='\0'; 1736 1778 } 1737 if (Readline(82,48,Selector_filename,27,INPUT_TYPE_FILENAME)) 1779 char filename_ansi[256]; 1780 strncpy(filename_ansi, Selector_filename, sizeof(filename_ansi)); 1781 #ifdef ENABLE_FILENAMES_ICONV 1782 { /* convert from UTF8 to ANSI */ 1783 char * input = (char *)Selector_filename; 1784 size_t inbytesleft = strlen(input); 1785 char * output = filename_ansi; 1786 size_t outbytesleft = sizeof(filename_ansi)-1; 1787 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1788 *output = '\0'; 1789 } 1790 #endif /* ENABLE_FILENAMES_ICONV */ 1791 if (Readline(82,48,filename_ansi,27,INPUT_TYPE_FILENAME)) 1738 1792 { 1793 #ifdef ENABLE_FILENAMES_ICONV 1794 /* convert back from ANSI to UTF8 */ 1795 char * input = (char *)filename_ansi; 1796 size_t inbytesleft = strlen(input); 1797 char * output = Selector_filename; 1798 size_t outbytesleft = sizeof(Selector_filename)-1; 1799 if(cd_inv != (iconv_t)-1 && (ssize_t)iconv(cd_inv, &input, &inbytesleft, &output, &outbytesleft) >= 0) 1800 *output = '\0'; 1801 else 1802 #endif /* ENABLE_FILENAMES_ICONV */ 1803 strncpy(Selector_filename, filename_ansi, sizeof(Selector_filename)); 1804 1739 1805 // On regarde s'il faut rajouter une extension. C'est-à-dire s'il 1740 1806 // n'y a pas de '.' dans le nom du fichier. 1741 1807 for(temp=0,dummy=0; ((Selector_filename[temp]) && (!dummy)); temp++) -
text.c
335 335 #ifdef USE_FC 336 336 { 337 337 FcStrList* dirs; 338 FcChar8 * fdir; 338 339 dirs = FcConfigGetFontDirs(NULL); 339 char*fdir = FcStrListNext(dirs);340 fdir = FcStrListNext(dirs); 340 341 while(fdir != NULL) 341 342 { 342 For_each_file( fdir,Add_font);343 For_each_file((char *)fdir,Add_font); 343 344 fdir = FcStrListNext(dirs); 344 345 } 345 346 -
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 #ifdef ENABLE_FILENAMES_ICONV 805 char * input = Main_backups->Pages->Filename; 806 size_t inbytesleft = strlen(input); 807 char * output = display_string; 808 size_t outbytesleft = sizeof(display_string)-1; 809 if(cd != (iconv_t)-1 && (ssize_t)iconv(cd, &input, &inbytesleft, &output, &outbytesleft) >= 0) 810 *output = '\0'; 811 else 812 #endif /* ENABLE_FILENAMES_ICONV */ 813 { 814 strncpy(display_string, Main_backups->Pages->Filename, sizeof(display_string)-1); 815 display_string[sizeof(display_string)-1] = '\0'; 816 } 817 } 818 string_size = strlen(display_string); 806 819 display_string[max_size]='\0'; 807 820 808 821 if (string_size > max_size) -
Makefile
364 364 CC = gcc 365 365 OBJDIR = ../obj/unix 366 366 FCLOPT = -lfontconfig 367 # enable UTF8 filename translation 368 COPT += -DENABLE_FILENAMES_ICONV 367 369 endif 368 370 endif 369 371 endif -
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 #ifdef ENABLE_FILENAMES_ICONV 860 #define TOCODE "CP1252" 861 #define FROMCODE "UTF-8" 862 GFX2_GLOBAL iconv_t cd; 863 GFX2_GLOBAL iconv_t cd_inv; 864 #endif /* ENABLE_FILENAMES_ICONV */ 865 857 866 // -- Specific to SDL 858 867 859 868 /// Pointer to the program's screen.