1
0
mirror of https://gittea.dev/nova/th.git synced 2025-10-21 18:30:15 -04:00

improvenments to random sort

This commit is contained in:
nova
2025-08-29 22:42:46 +02:00
parent 9f3042ccac
commit 5afabfb412
3 changed files with 22 additions and 49 deletions

4
dir.c
View File

@@ -51,9 +51,9 @@ unsigned long get_dir_size(char *path){
void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_content){ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_content){
struct dirent **entry; struct dirent **entry;
if (file_modifiers & FILE_MODIFIERS_HIDDEN_FILES) { /* print hidden files */ if (file_modifiers & FILE_MODIFIERS_HIDDEN_FILES) { /* print hidden files */
scandir(path, &entry, skip_dot, alphasort); scandir(path, &entry, skip_dot, NULL);
} else { } else {
scandir(path, &entry, skip_hidden_files, alphasort); scandir(path, &entry, skip_hidden_files, NULL);
} }
unsigned long i = 0; unsigned long i = 0;

4
main.c
View File

@@ -4,6 +4,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <locale.h> #include <locale.h>
#include <time.h>
#include "defines.h" #include "defines.h"
#include "threading.h" #include "threading.h"
@@ -20,6 +21,7 @@ unsigned int settings;
unsigned int file_modifiers; unsigned int file_modifiers;
unsigned int status = (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY); unsigned int status = (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY);
char *start_path; char *start_path;
time_t seed;
WINDOW *win_t; WINDOW *win_t;
WINDOW *win_b; WINDOW *win_b;
@@ -188,5 +190,7 @@ void init() {
char *start_path = getcwd(NULL, 0); char *start_path = getcwd(NULL, 0);
setenv("START_PATH", start_path, 0); setenv("START_PATH", start_path, 0);
free(start_path); free(start_path);
time(&seed);
srand(seed);
} }

View File

@@ -1,11 +1,13 @@
#include <curses.h> #include <curses.h>
#include <dirent.h> #include <dirent.h>
#include <strings.h>
#include <stdlib.h> #include <stdlib.h>
#include <strings.h>
#include <string.h> #include <string.h>
#include <pthread.h>
#include "defines.h" #include "defines.h"
extern time_t seed;
extern unsigned int settings; extern unsigned int settings;
extern unsigned int file_modifiers; extern unsigned int file_modifiers;
@@ -97,55 +99,22 @@ int sort_alpha(const void *file0, const void *file1){
char *file_name1 = ((file*)file1)->file_name; char *file_name1 = ((file*)file1)->file_name;
return strcmp(file_name0, file_name1); return strcmp(file_name0, file_name1);
} }
int sort_random(const void *file0, const void *file1){ int sort_random(const void *file0_, const void *file1_){
unsigned char file_type0 = ((file*)file0)->file_type; file *file0 = (file*)file0_;
unsigned char file_type1 = ((file*)file1)->file_type; file *file1 = (file*)file1_;
static int seed = 0; if (file0->file_type & (FILE_TYPE_SYMLINK | FILE_TYPE_DIR) && !(file1->file_type & (FILE_TYPE_SYMLINK | FILE_TYPE_DIR))) {
static int random = 0;
if (seed == 0) {
seed = rand();
}
if (random == 0) {
random = seed;
}
char weight = 0;
if (file_type0 == FILE_TYPE_DIR || file_type0 == FILE_TYPE_SYMLINK) {
weight |= 1;
}
if (file_type1 == FILE_TYPE_DIR || file_type1 == FILE_TYPE_SYMLINK) {
weight |= 2;
}
if (weight == 0 || weight == 3) {
random = random > 1;
if ((random & 2) == 2) {
return -1; return -1;
} else { }
if (random & 1){ if (!(file0->file_type & (FILE_TYPE_SYMLINK | FILE_TYPE_DIR)) && file1->file_type & (FILE_TYPE_SYMLINK | FILE_TYPE_DIR)) {
return 1;
} else {
return 0;
}
}
} else {
if (file_type0 > file_type1) {
return 1; return 1;
} else if (file_type0 < file_type1) {
return -1;
} else {
random = random > 1;
if ((random & 2) == 2) {
return -1;
} else {
if (random & 1){
return 1;
} else {
return 0;
}
}
}
} }
return 0; int random = rand();
if (random & 1) {
return 1;
} else {
return -1;
}
} }
int sort_type(const void *file0, const void *file1){ int sort_type(const void *file0, const void *file1){
unsigned char file_type0 = ((file*)file0)->file_type; unsigned char file_type0 = ((file*)file0)->file_type;