1 /*
2  * $Id: tools.h,v 1.12 2005/08/10 19:45:50 mitry Exp $
3  *
4  * $Log: tools.h,v $
5  * Revision 1.12  2005/08/10 19:45:50  mitry
6  * Added param to qscandir() to return full path with file name
7  *
8  * Revision 1.11  2005/05/17 18:17:42  mitry
9  * Removed system basename() usage.
10  * Added qbasename() implementation.
11  *
12  * Revision 1.10  2005/05/16 11:20:13  mitry
13  * Updated function prototypes. Changed code a bit.
14  *
15  * Revision 1.9  2005/05/06 20:48:55  mitry
16  * Misc code cleanup
17  *
18  * Revision 1.8  2005/04/14 18:04:26  mitry
19  * Changed scandir() to qscandir()
20  *
21  * Revision 1.7  2005/04/05 09:33:41  mitry
22  * Update write_debug_log() prototype
23  *
24  * Revision 1.6  2005/03/31 19:40:38  mitry
25  * Update function prototypes and it's duplication
26  *
27  */
28 
29 #ifndef __TOOLS_H__
30 #define __TOOLS_H__
31 
32 #define EXT_OK		0
33 #define EXT_DID_WORK	1
34 #define EXT_YOURSELF	2
35 
36 #define C_INT     1
37 #define C_STR     2
38 #define C_ADDR    3
39 #define C_ADRSTR  4
40 #define C_PATH    5
41 #define C_YESNO   6
42 #define C_ADDRL   7
43 #define C_ADRSTRL 8
44 #define C_STRL    9
45 #define C_OCT     10
46 
47 typedef struct _cfgitem_t {
48 	slist_t			*condition;
49 	union {
50 		int		v_int;
51 		char		*v_char;
52 		falist_t	*v_al;
53 		faslist_t	*v_fasl;
54 		slist_t		*v_sl;
55 	} value;
56 	struct _cfgitem_t	*next;
57 } cfgitem_t;
58 
59 typedef struct {
60 	char		*keyword;
61 	int		type, flags;
62 	cfgitem_t	*items;
63 	char		*def_val;
64 } cfgstr_t;
65 
66 extern	char *sigs[];
67 
68 void	recode_to_remote(char *);
69 void	recode_to_local(char *);
70 char	*mappath(const char *);
71 char	*mapname(char *, char *, size_t);
72 char	*qbasename(const char *);
73 int	hexdcd(char, char);
74 char	*qver(int);
75 unsigned
76 long	sequencer(void);
77 off_t	filesize(const char *);
78 int	lunlink(const char *);
79 int	lockpid(const char *);
80 int	islocked(const char *);
81 
82 FILE	*mdfopen(char *, const char *);
83 int	fexist(const char *);
84 int	mkdirs(char *);
85 void	rmdirs(char *);
86 int	qalphasort(const void *, const void *);
87 int	qscandir(const char *, char ***, int,
88 		int (*)(const char *), int (*)(const void *, const void *));
89 int	fmatchcase(const char *, char ***);
90 char	*fnc(char *);
91 int	isdos83name(char *);
92 size_t	getfreespace(const char *);
93 void	to_dev_null(void);
94 int	randper(int, int);
95 int	execsh(const char *);
96 int	execnowait(const char *, const char *, const char *, const char *);
97 void	qsleep(int);
98 
99 
100 /* config.c */
101 int		cfgi(int);
102 char		*cfgs(int);
103 slist_t		*cfgsl(int);
104 faslist_t	*cfgfasl(int);
105 falist_t	*cfgal(int);
106 int		readconfig(const char *);
107 void		rereadconfig(int);
108 void		killconfig(void);
109 #ifdef NEED_DEBUG
110 void		dumpconfig(void);
111 #endif
112 
113 
114 /* log.c */
115 extern	void (*log_callback)(const char *str);
116 
117 int	log_init(const char *, const char *);
118 void	vwrite_log(const char *, int);
119 void	write_log(const char *, ...);
120 
121 #ifdef NEED_DEBUG
122 extern	int facilities_levels[256];
123 
124 void	parse_log_levels(void);
125 void	write_debug_log(unsigned char, int, const char *, ...);
126 
127 #ifdef __GNUC__
128 #define DEBUG(all) __DEBUG all
129 #define __DEBUG(F,L,A...) do { if(facilities_levels[(unsigned char)(F)]>=(L)) write_debug_log((unsigned char)(F),(L),##A); } while(0)
130 #else
131 #define DEBUG(all) write_debug_log all
132 #endif
133 #else
134 #define DEBUG(all)
135 #endif
136 
137 void	log_done(void);
138 
139 int	chatlog_init(const char *, const ftnaddr_t *, int);
140 void	chatlog_write(const char *, int);
141 void	chatlog_done(void);
142 
143 
144 /* main.c */
145 RETSIGTYPE	sigerr(int);
146 void		stopit(int);
147 
148 /* daemon.c */
149 void	daemon_mode(void);
150 
151 /* flagexp.y */
152 int	flagexp(slist_t *, int);
153 
154 #endif
155