32
32
#ifndef SKIP_DOXYGEN_PROCESSING
33
33
static char const rcsid[] =
34
"$Id: blast_message.c,v 1.19 2005/11/16 14:27:03 madden Exp $";
34
"$Id: blast_message.c,v 1.23 2006/04/20 19:27:22 madden Exp $";
35
35
#endif /* SKIP_DOXYGEN_PROCESSING */
37
37
#include <algo/blast/core/blast_message.h>
39
/** Declared in blast_message.h as extern const. */
40
const int kBlastMessageNoContext = -1;
42
/** Allocate a new SMessageOrigin structure
43
* @param filename name of the file [in]
44
* @param lineno line number in the file above [in]
45
* @return newly allocated structure or NULL in case of memory allocation
48
SMessageOrigin* SMessageOriginNew(char* filename, unsigned int lineno)
50
SMessageOrigin* retval = NULL;
52
if ( !filename || !(strlen(filename) > 0) ) {
56
retval = calloc(1, sizeof(SMessageOrigin));
61
retval->filename = strdup(filename);
62
retval->lineno = lineno;
66
/** Deallocate a SMessageOrigin structure
67
* @param msgo structure to deallocate [in]
70
SMessageOrigin* SMessageOriginFree(SMessageOrigin* msgo)
73
sfree(msgo->filename);
40
80
Blast_MessageFree(Blast_Message* blast_msg)
82
Blast_Message* var_msg = NULL;
83
Blast_Message* next = NULL;
42
85
if (blast_msg == NULL)
45
sfree(blast_msg->message);
91
sfree(var_msg->message);
92
var_msg->origin = SMessageOriginFree(var_msg->origin);
52
102
Blast_MessageWrite(Blast_Message* *blast_msg, EBlastSeverity severity,
53
Int4 code, Int4 subcode, const char *message)
103
int context, const char *message)
105
Blast_Message* new_msg = NULL;
55
107
if (blast_msg == NULL)
58
*blast_msg = (Blast_Message*) malloc(sizeof(Blast_Message));
60
(*blast_msg)->severity = severity;
61
(*blast_msg)->code = code;
62
(*blast_msg)->subcode = subcode;
63
(*blast_msg)->message = strdup(message);
110
new_msg = (Blast_Message*) calloc(1, sizeof(Blast_Message));
114
new_msg->severity = severity;
115
new_msg->context = context;
116
new_msg->message = strdup(message);
120
Blast_Message* var_msg = *blast_msg;
121
while (var_msg->next)
123
var_msg = var_msg->next;
125
var_msg->next = new_msg;
129
*blast_msg = new_msg;
80
Blast_Perror(Int2 error_code)
82
Blast_Message* retval = (Blast_Message*) calloc(1, sizeof(Blast_Message));
147
Blast_Perror(Blast_Message* *msg, Int2 error_code, int context)
149
Blast_PerrorEx(msg, error_code, NULL, -1, context);
154
Blast_PerrorEx(Blast_Message* *msg,
156
const char* file_name,
160
Blast_Message* new_msg = (Blast_Message*) calloc(1, sizeof(Blast_Message));
84
163
switch (error_code) {
85
165
case BLASTERR_IDEALSTATPARAMCALC:
86
retval->message = strdup("Failed to calculate ideal Karlin-Altschul "
166
new_msg->message = strdup("Failed to calculate ideal Karlin-Altschul "
88
retval->severity = eBlastSevError;
168
new_msg->severity = eBlastSevError;
169
new_msg->context = context;
90
171
case BLASTERR_REDOALIGNMENTCORE_NOTSUPPORTED:
91
retval->message = strdup("Composition based statistics or "
172
new_msg->message = strdup("Composition based statistics or "
92
173
"Smith-Waterman not supported for your "
94
retval->severity = eBlastSevError;
175
new_msg->severity = eBlastSevError;
176
new_msg->context = context;
178
case BLASTERR_INTERRUPTED:
179
new_msg->message = strdup("BLAST search interrupted at user's request");
180
new_msg->severity = eBlastSevInfo;
181
new_msg->context = context;
185
case BLASTERR_MEMORY:
186
new_msg->message = strdup("Out of memory");
187
new_msg->severity = eBlastSevFatal;
188
new_msg->context = context;
190
case BLASTERR_INVALIDPARAM:
191
new_msg->message = strdup("Invalid argument to function");
192
new_msg->severity = eBlastSevFatal;
193
new_msg->context = context;
195
case BLASTERR_INVALIDQUERIES:
196
new_msg->message = strdup("search cannot proceed due to errors in all "
197
"contexts/frames of query sequences");
198
new_msg->severity = eBlastSevFatal;
199
new_msg->context = context;
202
/* No error, just free the structure */
97
retval = Blast_MessageFree(retval);
204
new_msg = Blast_MessageFree(new_msg);
102
211
snprintf(buf, sizeof(buf) - 1, "Unknown error code %d", error_code);
103
retval->message = strdup(buf);
104
retval->severity = eBlastSevError;
212
new_msg->message = strdup(buf);
213
new_msg->severity = eBlastSevError;
214
new_msg->context = context;
219
if (file_name && lineno > 0) {
220
new_msg->origin = SMessageOriginNew((char*) file_name,
221
(unsigned int) lineno);
226
Blast_Message* var = *msg;
113
240
* ===========================================================================
115
242
* $Log: blast_message.c,v $
243
* Revision 1.23 2006/04/20 19:27:22 madden
244
* Implement linked list of Blast_Message, remove code and subcode
246
* Revision 1.22 2006/03/29 13:59:53 camacho
249
* Revision 1.21 2006/03/21 21:00:52 camacho
250
* + interruptible api support
252
* Revision 1.20 2006/01/12 20:33:06 camacho
253
* + SMessageOrigin structure, Blast_PerrorEx function, and error codes
116
255
* Revision 1.19 2005/11/16 14:27:03 madden
117
256
* Fix spelling in CRN