… | |
… | |
24 | |
24 | |
25 | #include "parse.h" |
25 | #include "parse.h" |
26 | #include "parse_routines.h" |
26 | #include "parse_routines.h" |
27 | #include "data.h" |
27 | #include "data.h" |
28 | |
28 | |
|
|
29 | static void psiconv_default_error_handler(int kind, psiconv_u32 off, |
|
|
30 | const char *message) |
|
|
31 | { |
|
|
32 | fprintf(stderr,"%s\n",message); |
|
|
33 | } |
|
|
34 | |
|
|
35 | int psiconv_verbosity = PSICONV_VERB_WARN; |
|
|
36 | |
|
|
37 | psiconv_error_handler_t psiconv_error_handler = psiconv_default_error_handler; |
|
|
38 | |
|
|
39 | |
|
|
40 | #define MAX_MESSAGE 160 |
|
|
41 | |
29 | void psiconv_fatal(int level, psiconv_u32 off, const char *format,...) |
42 | void psiconv_fatal(int level, psiconv_u32 off, const char *format,...) |
30 | { |
43 | { |
|
|
44 | char buffer[MAX_MESSAGE]; |
31 | va_list ap; |
45 | va_list ap; |
|
|
46 | size_t curlen; |
|
|
47 | |
32 | va_start(ap,format); |
48 | va_start(ap,format); |
33 | fprintf(stderr,"Fatal error (offset %08x): ",off); |
49 | snprintf(buffer,MAX_MESSAGE,"Fatal error (offset %08x): ",off); |
34 | vfprintf(stderr,format,ap); |
50 | curlen = strlen(buffer); |
35 | fputs("\n",stderr); |
51 | |
|
|
52 | vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); |
|
|
53 | psiconv_error_handler(PSICONV_VERB_FATAL,off,buffer); |
36 | va_end(ap); |
54 | va_end(ap); |
|
|
55 | |
37 | exit(1); |
56 | exit(1); |
|
|
57 | } |
|
|
58 | |
|
|
59 | void psiconv_warn(int level, psiconv_u32 off, const char *format,...) |
|
|
60 | { |
|
|
61 | char buffer[MAX_MESSAGE]; |
|
|
62 | va_list ap; |
|
|
63 | size_t curlen; |
|
|
64 | |
|
|
65 | va_start(ap,format); |
|
|
66 | |
|
|
67 | if (psiconv_verbosity >= PSICONV_VERB_WARN) { |
|
|
68 | snprintf(buffer,MAX_MESSAGE,"WARNING (offset %08x): ",off); |
|
|
69 | curlen = strlen(buffer); |
|
|
70 | |
|
|
71 | vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); |
|
|
72 | psiconv_error_handler(PSICONV_VERB_WARN,off,buffer); |
|
|
73 | } |
|
|
74 | va_end(ap); |
38 | } |
75 | } |
39 | |
76 | |
40 | void psiconv_progress(int level, psiconv_u32 off, const char *format,...) |
77 | void psiconv_progress(int level, psiconv_u32 off, const char *format,...) |
41 | { |
78 | { |
|
|
79 | char buffer[MAX_MESSAGE]; |
|
|
80 | va_list ap; |
|
|
81 | size_t curlen; |
42 | int i; |
82 | int i; |
43 | va_list ap; |
83 | |
44 | va_start(ap,format); |
84 | va_start(ap,format); |
45 | if (psiconv_verbosity >= PSICONV_VERB_PROGRESS) { |
85 | if (psiconv_verbosity >= PSICONV_VERB_PROGRESS) { |
46 | fprintf(stderr,"%08x ",off); |
86 | snprintf(buffer,MAX_MESSAGE,"%08x ",off); |
47 | for (i = 0; i < level; i++) |
87 | curlen = strlen(buffer); |
48 | fputs("=",stderr); |
88 | |
49 | fprintf(stderr,"> "); |
89 | for (i = 0; (i < level) && (i+curlen+3 < MAX_MESSAGE); i++) |
50 | vfprintf(stderr,format,ap); |
90 | buffer[i+curlen] = '='; |
51 | fputs("\n",stderr); |
91 | curlen += i; |
|
|
92 | |
|
|
93 | buffer[curlen] = '>'; |
|
|
94 | buffer[curlen+1] = ' '; |
|
|
95 | buffer[curlen+2] = '\0'; |
|
|
96 | curlen += 2; |
|
|
97 | |
|
|
98 | vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); |
|
|
99 | |
|
|
100 | psiconv_error_handler(PSICONV_VERB_PROGRESS,off,buffer); |
52 | } |
101 | } |
53 | va_end(ap); |
102 | va_end(ap); |
54 | } |
103 | } |
55 | |
104 | |
56 | void psiconv_warn(int level, psiconv_u32 off, const char *format,...) |
|
|
57 | { |
|
|
58 | va_list ap; |
|
|
59 | va_start(ap,format); |
|
|
60 | if (psiconv_verbosity >= PSICONV_VERB_WARN) { |
|
|
61 | fprintf(stderr,"WARNING (offset %08x): ",off); |
|
|
62 | vfprintf(stderr,format,ap); |
|
|
63 | fputs("\n",stderr); |
|
|
64 | } |
|
|
65 | va_end(ap); |
|
|
66 | } |
|
|
67 | |
105 | |
68 | void psiconv_debug(int level, psiconv_u32 off, const char *format,...) |
106 | void psiconv_debug(int level, psiconv_u32 off, const char *format,...) |
69 | { |
107 | { |
|
|
108 | char buffer[MAX_MESSAGE]; |
|
|
109 | va_list ap; |
|
|
110 | size_t curlen; |
70 | int i; |
111 | int i; |
71 | va_list ap; |
112 | |
72 | va_start(ap,format); |
113 | va_start(ap,format); |
73 | if (psiconv_verbosity >= PSICONV_VERB_DEBUG) { |
114 | if (psiconv_verbosity >= PSICONV_VERB_DEBUG) { |
74 | fprintf(stderr,"%08x ",off); |
115 | snprintf(buffer,MAX_MESSAGE,"%08x ",off); |
75 | for (i = 0; i < level; i++) |
116 | curlen = strlen(buffer); |
76 | fputs("-",stderr); |
117 | |
77 | fprintf(stderr,"> "); |
118 | for (i = 0; (i < level) && (i+curlen+3 < MAX_MESSAGE); i++) |
78 | vfprintf(stderr,format,ap); |
119 | buffer[i+curlen] = '-'; |
79 | fputs("\n",stderr); |
120 | curlen += i; |
|
|
121 | |
|
|
122 | buffer[curlen] = '>'; |
|
|
123 | buffer[curlen+1] = ' '; |
|
|
124 | buffer[curlen+2] = '\0'; |
|
|
125 | curlen += 2; |
|
|
126 | |
|
|
127 | vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); |
|
|
128 | |
|
|
129 | psiconv_error_handler(PSICONV_VERB_DEBUG,off,buffer); |
80 | } |
130 | } |
81 | va_end(ap); |
131 | va_end(ap); |
82 | } |
132 | } |
83 | |
133 | |
84 | char *psiconv_make_printable(const char *s) |
134 | char *psiconv_make_printable(const char *s) |