| extern int debugflag; |
| extern int force_restore; |
| extern int ignore_nocards; |
| extern char *command; |
| extern char *statefile; |
| |
| #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) |
| #define info(...) do {\ |
| fprintf(stdout, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ |
| fprintf(stdout, __VA_ARGS__); \ |
| putc('\n', stdout); \ |
| } while (0) |
| #else |
| #define info(args...) do {\ |
| fprintf(stdout, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ |
| fprintf(stdout, ##args); \ |
| putc('\n', stdout); \ |
| } while (0) |
| #endif |
| |
| #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) |
| #define error(...) do {\ |
| fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ |
| fprintf(stderr, __VA_ARGS__); \ |
| putc('\n', stderr); \ |
| } while (0) |
| #else |
| #define error(args...) do {\ |
| fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ |
| fprintf(stderr, ##args); \ |
| putc('\n', stderr); \ |
| } while (0) |
| #endif |
| |
| #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) |
| #define cerror(cond, ...) do {\ |
| if (cond || debugflag) { \ |
| fprintf(stderr, "%s%s: %s:%d: ", debugflag ? "WARNING: " : "", command, __FUNCTION__, __LINE__); \ |
| fprintf(stderr, __VA_ARGS__); \ |
| putc('\n', stderr); \ |
| } \ |
| } while (0) |
| #else |
| #define cerror(cond, args...) do {\ |
| if (cond || debugflag) { \ |
| fprintf(stderr, "%s%s: %s:%d: ", debugflag ? "WARNING: " : "", command, __FUNCTION__, __LINE__); \ |
| fprintf(stderr, ##args); \ |
| putc('\n', stderr); \ |
| } \ |
| } while (0) |
| #endif |
| |
| #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) |
| #define dbg(...) do {\ |
| if (!debugflag) break; \ |
| fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ |
| fprintf(stderr, __VA_ARGS__); \ |
| putc('\n', stderr); \ |
| } while (0) |
| #else |
| #define dbg(args...) do {\ |
| if (!debugflag) break; \ |
| fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ |
| fprintf(stderr, ##args); \ |
| putc('\n', stderr); \ |
| } while (0) |
| #endif |
| |
| int init(const char *file, const char *cardname); |
| int save_state(const char *file, const char *cardname); |
| int load_state(const char *file, const char *initfile, const char *cardname, |
| int do_init); |
| int power(const char *argv[], int argc); |
| int generate_names(const char *cfgfile); |
| |
| /* utils */ |
| |
| int file_map(const char *filename, char **buf, size_t *bufsize); |
| void file_unmap(void *buf, size_t bufsize); |
| size_t line_width(const char *buf, size_t bufsize, size_t pos); |
| void initfailed(int cardnumber, const char *reason, int exitcode); |
| |
| static inline int hextodigit(int c) |
| { |
| if (c >= '0' && c <= '9') |
| c -= '0'; |
| else if (c >= 'a' && c <= 'f') |
| c = c - 'a' + 10; |
| else if (c >= 'A' && c <= 'F') |
| c = c - 'A' + 10; |
| else |
| return -1; |
| return c; |
| } |