filesel.c/.h: improvements in doxygen
Translated a few comments from French to English. also improved the code slightly
This commit is contained in:
parent
560cde7041
commit
56df5080a5
100
src/filesel.c
100
src/filesel.c
@ -140,7 +140,7 @@ byte Native_filesel(byte load)
|
||||
static T_Fileselector Filelist;
|
||||
|
||||
/// Selector settings to use, for all functions called by Load_or_save
|
||||
T_Selector_settings * Selector;
|
||||
static T_Selector_settings * Selector;
|
||||
|
||||
/// Name of the current directory
|
||||
//static char Selector_directory[1024];
|
||||
@ -153,7 +153,13 @@ static word Selector_filename_unicode[256];
|
||||
// * Le fileselect modifie le répertoire courant. Ceci permet de n'avoir
|
||||
// qu'un findfirst dans le répertoire courant à faire:
|
||||
|
||||
void Recount_files(T_Fileselector *list)
|
||||
/**
|
||||
* Update T_Fileselector::Nb_files T_Fileselector::Nb_directories T_Fileselector::Nb_elements
|
||||
* counts.
|
||||
* Also update the list index T_Fileselector::Index
|
||||
* @param list the linked list to update
|
||||
*/
|
||||
static void Recount_files(T_Fileselector *list)
|
||||
{
|
||||
T_Fileselector_item *item;
|
||||
|
||||
@ -180,7 +186,7 @@ void Recount_files(T_Fileselector *list)
|
||||
{
|
||||
int i;
|
||||
|
||||
list->Index = (T_Fileselector_item **) malloc(list->Nb_elements * sizeof(T_Fileselector_item **));
|
||||
list->Index = (T_Fileselector_item **) malloc(list->Nb_elements * sizeof(T_Fileselector_item *));
|
||||
if (list->Index)
|
||||
{
|
||||
// Fill the index
|
||||
@ -194,11 +200,11 @@ void Recount_files(T_Fileselector *list)
|
||||
}
|
||||
}
|
||||
|
||||
// -- Destruction de la liste chaînée ---------------------------------------
|
||||
/**
|
||||
* This function free all item in the list, but not the list itself.
|
||||
* @param list the linked list
|
||||
*/
|
||||
void Free_fileselector_list(T_Fileselector *list)
|
||||
// Cette procédure détruit la chaine des fichiers. Elle doit être appelée
|
||||
// avant de rappeler la fonction Read_list_of_files, ainsi qu'en fin de
|
||||
// programme.
|
||||
{
|
||||
// Pointeur temporaire de destruction
|
||||
T_Fileselector_item * temp_item;
|
||||
@ -366,22 +372,35 @@ char * Format_filename(const char * fname, word max_length, int type)
|
||||
}
|
||||
|
||||
|
||||
// -- Rajouter a la liste des elements de la liste un element ---------------
|
||||
T_Fileselector_item * Add_element_to_list(T_Fileselector *list, const char * full_name, const char *short_name, int type, byte icon)
|
||||
// Cette procedure ajoute a la liste chainee un fichier passé en argument.
|
||||
/**
|
||||
* Add an item to the file selector linked list
|
||||
* @param list the linked list
|
||||
* @param full_name the file name
|
||||
* @param short_name the file name truncated to display in the file selector
|
||||
* @param type the type of the item : 0 = File, 1 = Directory, 2 = Drive
|
||||
* @param icon the icon for the item
|
||||
* @return a pointer to the newly added item
|
||||
* @return NULL in case of error
|
||||
*/
|
||||
T_Fileselector_item * Add_element_to_list(T_Fileselector *list, const char * full_name, const char *short_name, int type, enum ICON_TYPES icon)
|
||||
{
|
||||
// Working element
|
||||
T_Fileselector_item * temp_item;
|
||||
size_t short_name_len;
|
||||
size_t full_name_len, short_name_len;
|
||||
|
||||
full_name_len = strlen(full_name) + 1;
|
||||
short_name_len = strlen(short_name) + 1;
|
||||
// Allocate enough room for one struct + the visible label
|
||||
temp_item=(T_Fileselector_item *)malloc(sizeof(T_Fileselector_item)+short_name_len);
|
||||
temp_item=(T_Fileselector_item *)malloc(sizeof(T_Fileselector_item)+full_name_len);
|
||||
if (temp_item == NULL) // memory allocation error
|
||||
return NULL;
|
||||
memset(temp_item, 0, sizeof(T_Fileselector_item));
|
||||
|
||||
if (short_name_len > sizeof(temp_item->Short_name))
|
||||
short_name_len = sizeof(temp_item->Short_name) - 1; // without terminating 0
|
||||
// Initialize element
|
||||
memcpy(temp_item->Short_name,short_name,short_name_len);
|
||||
strcpy(temp_item->Full_name,full_name);
|
||||
memcpy(temp_item->Full_name,full_name,full_name_len);
|
||||
temp_item->Type = type;
|
||||
temp_item->Icon = icon;
|
||||
|
||||
@ -399,7 +418,7 @@ T_Fileselector_item * Add_element_to_list(T_Fileselector *list, const char * ful
|
||||
|
||||
///
|
||||
/// Checks if a file has the requested file extension.
|
||||
/// The extension string can end with a ';' (remainder is ignored)
|
||||
/// The extension string can end with a ';' (remainder is ignored).
|
||||
/// This function allows wildcard '?', and '*' if it's the only character.
|
||||
int Check_extension(const char *filename_ext, const char * filter)
|
||||
{
|
||||
@ -789,12 +808,16 @@ void Read_list_of_drives(T_Fileselector *list, byte name_length)
|
||||
#endif
|
||||
|
||||
|
||||
// -- Tri de la liste des fichiers et répertoires ---------------------------
|
||||
/**
|
||||
* Sort a file/directory list.
|
||||
* The sord is done in that order :
|
||||
* Directories first, in alphabetical order,
|
||||
* then Files, in alphabetical order.
|
||||
*
|
||||
* List counts and index are updated.
|
||||
* @param list the linked list
|
||||
*/
|
||||
void Sort_list_of_files(T_Fileselector *list)
|
||||
// Tri la liste chainée existante dans l'ordre suivant:
|
||||
//
|
||||
// * Les répertoires d'abord, dans l'ordre alphabétique de leur nom
|
||||
// * Les fichiers ensuite, dans l'ordre alphabétique de leur nom
|
||||
{
|
||||
byte list_is_sorted; // Booléen "La liste est triée"
|
||||
byte need_swap; // Booléen "Il faut inverser les éléments"
|
||||
@ -884,9 +907,11 @@ void Sort_list_of_files(T_Fileselector *list)
|
||||
Recount_files(list);
|
||||
}
|
||||
|
||||
T_Fileselector_item * Get_item_by_index(T_Fileselector *list, short index)
|
||||
T_Fileselector_item * Get_item_by_index(T_Fileselector *list, unsigned short index)
|
||||
{
|
||||
// Safety
|
||||
if (list->Nb_elements == 0)
|
||||
return NULL;
|
||||
if (index >= list->Nb_elements)
|
||||
index=list->Nb_elements-1;
|
||||
|
||||
@ -901,7 +926,7 @@ T_Fileselector_item * Get_item_by_index(T_Fileselector *list, short index)
|
||||
// Fall back anyway on iterative search
|
||||
|
||||
T_Fileselector_item * item = list->First;
|
||||
for (;index>0;index--)
|
||||
for (; index > 0 && item != NULL; index--)
|
||||
item = item->Next;
|
||||
|
||||
return item;
|
||||
@ -910,15 +935,12 @@ T_Fileselector_item * Get_item_by_index(T_Fileselector *list, short index)
|
||||
}
|
||||
|
||||
|
||||
// -- Affichage des éléments de la liste de fichier / répertoire ------------
|
||||
/**
|
||||
* Display of the file/directory list items.
|
||||
* @param offset_first offset between the 1st visible file and the first file in list.
|
||||
* @param selector_offset offset between the 1st visible file and the selected file.
|
||||
*/
|
||||
void Display_file_list(T_Fileselector *list, short offset_first,short selector_offset)
|
||||
//
|
||||
// offset_first = Décalage entre le premier fichier visible dans le
|
||||
// sélecteur et le premier fichier de la liste
|
||||
//
|
||||
// selector_offset = Décalage entre le premier fichier visible dans le
|
||||
// sélecteur et le fichier sélectionné dans la liste
|
||||
//
|
||||
{
|
||||
T_Fileselector_item * current_item;
|
||||
byte index; // index du fichier qu'on affiche (0 -> 9)
|
||||
@ -984,19 +1006,15 @@ void Display_file_list(T_Fileselector *list, short offset_first,short selector_o
|
||||
}
|
||||
|
||||
|
||||
// -- Récupérer le libellé d'un élément de la liste -------------------------
|
||||
/**
|
||||
* Get the label of a list item.
|
||||
* @param offset_first offset between the 1st visible file and the 1st file in list.
|
||||
* @param selector_offset offset between the 1st visible file and the wanted label.
|
||||
* @param label pointer to a buffer to receive the label (ANSI)
|
||||
* @param unicode_label pointer to a buffer to receive the label (Unicode)
|
||||
* @param type NULL or a pointer to receive the type : 0 = file, 1 = directory, 2 = drive.
|
||||
*/
|
||||
static void Get_selected_item(T_Fileselector *list, short offset_first,short selector_offset,char * label,word * unicode_label,int *type)
|
||||
//
|
||||
// offset_first = Décalage entre le premier fichier visible dans le
|
||||
// sélecteur et le premier fichier de la liste
|
||||
//
|
||||
// selector_offset = Décalage entre le premier fichier visible dans le
|
||||
// sélecteur et le fichier à récupérer
|
||||
//
|
||||
// label = str de réception du libellé de l'élément
|
||||
//
|
||||
// type = Récupération du type: 0 fichier, 1 repertoire, 2 lecteur.
|
||||
// Passer NULL si pas interessé.
|
||||
{
|
||||
T_Fileselector_item * current_item;
|
||||
|
||||
|
||||
@ -29,24 +29,46 @@
|
||||
#include "struct.h"
|
||||
#include "loadsave.h"
|
||||
|
||||
///
|
||||
/// Launch the Load/Save dialog (file selector)
|
||||
/// @param settings the settings associated with this file selector
|
||||
/// @param load 1 for a load dialog, 0 for a save
|
||||
/// @param context the IO context
|
||||
/// @return 0 if the user cancelled the load/save
|
||||
/// @return 1 if the user want to load/save a file
|
||||
byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context *context);
|
||||
|
||||
T_Fileselector_item * Add_element_to_list(T_Fileselector *list, const char * full_name, const char *short_name, int type, byte icon);
|
||||
T_Fileselector_item * Add_element_to_list(T_Fileselector *list, const char * full_name, const char *short_name, int type, enum ICON_TYPES icon);
|
||||
|
||||
///
|
||||
/// Formats a display name for a file, directory, or similar name (drive, volume).
|
||||
/// The returned value is a pointer to a single static buffer of maximum 40 characters
|
||||
/// including the '\\0'.
|
||||
/// @param fname full file name from the file system
|
||||
/// @param max_length numbers of characters to display
|
||||
/// @param type 0 for file, 1 for directory, 2 for drive
|
||||
/// @return a pointer to a single static buffer of maximum 40 characters
|
||||
/// including the '\\0'.
|
||||
char * Format_filename(const char * fname, word max_length, int type);
|
||||
|
||||
///
|
||||
/// Formats a display name for a file, directory, or similar name (drive, volume).
|
||||
/// @param fname full file name from the file system
|
||||
/// @param max_length numbers of characters to display
|
||||
/// @param type 0 for file, 1 for directory, 2 for drive
|
||||
/// @return a pointer to a single static buffer of maximum 40 wide characters
|
||||
/// including the '\\0'.
|
||||
word * Format_filename_unicode(const word * fname, word max_length, int type);
|
||||
|
||||
void Free_fileselector_list(T_Fileselector *list);
|
||||
|
||||
void Sort_list_of_files(T_Fileselector *list);
|
||||
|
||||
void Recount_files(T_Fileselector *list);
|
||||
|
||||
T_Fileselector_item * Get_item_by_index(T_Fileselector *list, short index);
|
||||
///
|
||||
/// Fast access to a list item.
|
||||
/// @param list the linked list
|
||||
/// @param index the item index to access
|
||||
/// @return the item at the index position in the list
|
||||
/// @return NULL in case of error
|
||||
T_Fileselector_item * Get_item_by_index(T_Fileselector *list, unsigned short index);
|
||||
|
||||
void Read_list_of_drives(T_Fileselector *list, byte name_length);
|
||||
|
||||
@ -58,6 +80,4 @@ int Quicksearch_list(T_List_button * list, T_Fileselector * selector);
|
||||
|
||||
void Reset_quicksearch(void);
|
||||
|
||||
extern T_Selector_settings * Selector;
|
||||
|
||||
#endif
|
||||
|
||||
@ -375,10 +375,7 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
|
||||
Print_in_window(236,59,str,MC_Black,MC_Light);
|
||||
|
||||
// Affichage du vrai format
|
||||
if (format!=Selector->Format_filter)
|
||||
{
|
||||
Print_in_window( 59,59,Get_fileformat(format)->Label,MC_Black,MC_Light);
|
||||
}
|
||||
Print_in_window( 59,59,Get_fileformat(format)->Label,MC_Black,MC_Light);
|
||||
|
||||
// On efface le commentaire précédent
|
||||
Window_rectangle(45,70,32*8,8,MC_Light);
|
||||
|
||||
16
src/struct.h
16
src/struct.h
@ -180,7 +180,6 @@ typedef struct T_Dropdown_button
|
||||
/// Data for one item (file, directory) in a fileselector.
|
||||
typedef struct T_Fileselector_item
|
||||
{
|
||||
char Full_name[MAX_PATH_CHARACTERS]; ///< Filesystem value.
|
||||
byte Type; ///< Type of item: 0 = File, 1 = Directory, 2 = Drive
|
||||
byte Icon; ///< One of ::ICON_TYPES, ICON_NONE for none.
|
||||
|
||||
@ -190,23 +189,20 @@ typedef struct T_Fileselector_item
|
||||
word * Unicode_full_name; ///< Pointer to allocated unicode string. Filesystem name
|
||||
word * Unicode_short_name; ///< Pointer to allocated unicode string. Name to display
|
||||
|
||||
#if __GNUC__ < 3
|
||||
char Short_name[0]; ///< Name to display.
|
||||
#else
|
||||
char Short_name[]; ///< Name to display.
|
||||
#endif
|
||||
// No field after Short_name[] ! Dynamic allocation according to name length.
|
||||
char Short_name[36]; ///< Name to display. limited to 35 characters (used in factory.c)
|
||||
char Full_name[1]; ///< Filesystem value.
|
||||
// No field after Full_name[] ! Dynamic allocation according to name length.
|
||||
} T_Fileselector_item;
|
||||
|
||||
/// Data for a fileselector
|
||||
typedef struct T_Fileselector
|
||||
{
|
||||
/// Number of elements in the current fileselector's ::Filelist
|
||||
short Nb_elements;
|
||||
unsigned short Nb_elements;
|
||||
/// Number of files in the current fileselector's ::Filelist
|
||||
short Nb_files;
|
||||
unsigned short Nb_files;
|
||||
/// Number of directories in the current fileselector's ::Filelist
|
||||
short Nb_directories;
|
||||
unsigned short Nb_directories;
|
||||
/// Head of the linked list for the fileselector.
|
||||
T_Fileselector_item * First;
|
||||
/// Index for direct access to element number N
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user