#define GMQCC_HDR
#include <stdarg.h>
#include <stddef.h>
+#include <time.h> /* TODO: remove?*/
/*
* Disable some over protective warnings in visual studio because fixing them is a waste
void util_seed(uint32_t);
uint32_t util_rand(void);
-int util_vasprintf(char **ret, const char *fmt, va_list);
int util_asprintf (char **ret, const char *fmt, ...);
+int util_sscanf (const char *str, const char *format, ...);
+char *util_strncpy (char *dest, const char *src, size_t n);
+char *util_strncat (char *dest, const char *src, size_t n);
+char *util_strcat (char *dest, const char *src);
+const char *util_strerror(int err);
+
+const struct tm *util_localtime(const time_t *timer);
+const char *util_ctime (const time_t *timer);
+
+typedef struct fs_file_s fs_file_t;
+
+bool util_isatty(fs_file_t *);
+const char *util_tmpnam(char *);
/*
* A flexible vector implementation: all vector pointers contain some
void *util_htget (hash_table_t *ht, const char *key);
void *util_htgeth(hash_table_t *ht, const char *key, size_t hash);
+int util_snprintf(char *str, size_t, const char *fmt, ...);
+
/* fs.c */
+#define FS_FILE_SEEK_SET 0
+#define FS_FILE_SEEK_CUR 1
+#define FS_FILE_SEEK_END 2
+#define FS_FILE_EOF -1
+
typedef struct fs_dir_s fs_dir_t;
-typedef struct fs_file_s fs_file_t;
+/*typedef struct fs_file_s fs_file_t;*/
typedef struct dirent fs_dirent_t;
void fs_file_close (fs_file_t *);
int fs_dir_close (fs_dir_t *);
fs_dirent_t *fs_dir_read (fs_dir_t *);
+
/* correct.c */
typedef struct correct_trie_s {
void *value;
COMPILER_GMQCC /* this QuakeC */
} opts_std_t;
-typedef union {
- bool B;
- uint16_t U16;
- uint32_t U32;
- char *STR;
+typedef struct {
+ union {
+ bool b;
+ uint16_t u16;
+ uint32_t u32;
+
+ union {
+ char *p;
+ const char *c;
+ } str;
+ } data;
+
+ bool allocated;
} opt_value_t;
#define OPTS_WARN(i) OPTS_GENERIC(opts.warn, (i))
#define OPTS_WERROR(i) OPTS_GENERIC(opts.werror, (i))
#define OPTS_OPTIMIZATION(i) OPTS_GENERIC(opts.optimization, (i))
-#define OPTS_OPTION_BOOL(X) (opts.options[X].B)
-#define OPTS_OPTION_U16(X) (opts.options[X].U16)
-#define OPTS_OPTION_U32(X) (opts.options[X].U32)
-#define OPTS_OPTION_STR(X) (opts.options[X].STR)
+#define OPTS_OPTION_DUPED(X) (opts.options[X].allocated)
+#define OPTS_OPTION_BOOL(X) (opts.options[X].data.b)
+#define OPTS_OPTION_U16(X) (opts.options[X].data.u16)
+#define OPTS_OPTION_U32(X) (opts.options[X].data.u32)
+#define OPTS_OPTION_DUP(X) *(OPTS_OPTION_DUPED(X)=true, &(opts.options[X].data.str.p))
+#define OPTS_OPTION_STR(X) (opts.options[X].data.str.c)
#endif /*! GMQCC_HDR */