Thumbnail

rani/cscroll.git

Clone URL: https://git.buni.party/rani/cscroll.git

Viewing file on branch master

1#ifndef DIR_H
2#define DIR_H
3
4#include <time.h>
5#include <stddef.h>
6#include <stdint.h>
7#include <stdbool.h>
8#include <sys/stat.h>
9#include "cvector.h"
10
11#define M_SUID S_ISUID
12#define M_SGID S_ISGID
13#define M_STICKY S_ISVTX
14#define M_USRR S_IRUSR
15#define M_USRW S_IWUSR
16#define M_USRX S_IXUSR
17#define M_GRPR S_IRGRP
18#define M_GRPW S_IWGRP
19#define M_GRPX S_IXGRP
20#define M_OTHR S_IROTH
21#define M_OTHW S_IWOTH
22#define M_OTHX S_IXOTH
23
24#define REGSEARCH_BAD_REGEX 1
25#define REGSEARCH_NOT_FOUND 2
26
27#define TOGGLEMARK_PARENT_MARKED 1
28#define TOGGLEMARK_DIRENT_UNKNOWN 2
29
30enum size_unit {
31 SIZE_B,
32 SIZE_KB,
33 SIZE_MB,
34 SIZE_GB,
35 SIZE_TB,
36 SIZE_EB,
37};
38
39enum de_type {
40 DE_FILE,
41 DE_DIR,
42 DE_FIFO,
43 DE_LINK,
44 DE_BLOCK,
45 DE_CHAR,
46 DE_SOCKET,
47 DE_UNKNOWN
48};
49
50typedef struct {
51 char * name;
52 enum de_type type;
53 unsigned size_small;
54 enum size_unit size_unit;
55
56 size_t size;
57 uint16_t mode;
58 time_t mtime;
59 char * uname;
60 char * gname;
61
62 char * linkname;
63 enum de_type linktype;
64
65 bool marked;
66} dirent_t;
67
68typedef struct {
69 size_t len;
70 cvector(dirent_t) entries;
71 size_t nodots_len;
72 cvector(dirent_t*) nodots;
73
74 size_t longest_uname;
75 size_t longest_gname;
76 size_t longest_size;
77 size_t longest_size_small;
78 size_t longest_size_unit;
79} dir_t;
80
81void dir_init(void);
82void dir_deinit(void);
83
84int dir_list(const char * path, dir_t * dir);
85void dir_free(dir_t * dir);
86const char * dir_get_cwd(void);
87int dir_cd_back(const char * cwd);
88int dir_cd(const char * cwd, const char * next);
89int dir_search_name(const dir_t * dir, const char * name, size_t * idx);
90int dir_search_regex(const dir_t * dir, const char * regexstr, size_t * idx);
91const char * dir_basename(const char * path);
92size_t dir_len(const dir_t * dir);
93dirent_t * dir_get_entry(const dir_t * dir, size_t cursor);
94cvector(dirent_t) dir_entries(const dir_t * dir);
95void dir_sort(dir_t * dir);
96const char * dir_get_home(void);
97size_t dir_get_total_marked(void);
98size_t dir_marked_subfiles(void);
99int dir_paste_marks(const char * cwd, size_t * total_pastes);
100int dir_marked_delete(void);
101
102char dirent_crepr(const dirent_t * de); // character representing dir entry
103char dirent_creprl(const dirent_t * de); // like above, but for the link
104char dirent_longcrepr(const dirent_t * de); // like above, but for long mode
105bool dirent_isexec(const dirent_t * de);
106const char * dirent_prettymode(const dirent_t * de);
107const char * dirent_size_unit(const dirent_t * de);
108size_t dirent_subfiles(const dirent_t * de); // number of sub entries in a dir
109int dirent_delete(const dirent_t * de);
110int dirent_open(const dirent_t * de);
111int dirent_togglemark(dirent_t * de);
112
113#endif /* DIR_H */
114