Exemplo n.º 1
0
/* Raise a fatal error condition. */
void
AG_FatalError(const char *fmt, ...)
{
	va_list args;
  char *buf;

	/* Use callback if defined. The callback must gracefully exit. */
	if (agErrorCallback != NULL) {
		if (fmt != NULL) {
			va_start(args, fmt);
			Vasprintf(&buf, fmt, args);
			va_end(args);
			agErrorCallback(buf);
			abort(); /* not reached */
		} else {
			agErrorCallback(AG_GetError());
			abort(); /* not reached */
		}
	} else {
		fprintf(stderr, "Fatal error: ");
		if (fmt != NULL) {
			va_start(args, fmt);
			vfprintf(stderr, fmt, args);
			va_end(args);
		} else {
			fprintf(stderr, "%s", AG_GetError());
		}
		fprintf(stderr, "\n");
		abort();
  }
}
Exemplo n.º 2
0
/* Issue a debug message. */
void
AG_Debug(void *p, const char *fmt, ...)
{
#ifdef AG_DEBUG
	AG_Object *obj = p;
	va_list args;
	
	if (obj != NULL && obj->debugFn != NULL) {
		char *buf, *p;

		va_start(args, fmt);
		Vasprintf(&buf, fmt, args);
		p = &buf[strlen(buf)-1];
		if (*p == '\n') { *p = '\0'; }
		obj->debugFn(obj, obj->debugPtr, buf);
		Free(buf);
		va_end(args);
	} else {
		if (agDebugLvl >= 1 || (obj != NULL && OBJECT_DEBUG(obj))) {
			va_start(args, fmt);
			if (obj != NULL) {
				if (OBJECT(obj)->name[0] != '\0') {
					printf("%s: ", OBJECT(obj)->name);
				} else {
					printf("<%p>: ", obj);
				}
			}
			vprintf(fmt, args);
			va_end(args);
		}
	}
#endif /* AG_DEBUG */
}
Exemplo n.º 3
0
AG_Label *
AG_StatusbarAddLabel(AG_Statusbar *sbar, const char *fmt, ...)
{
	AG_Label *lab;
	va_list ap;

	AG_ObjectLock(sbar);
#ifdef AG_DEBUG
	if (sbar->nlabels+1 >= AG_STATUSBAR_MAX_LABELS)
		AG_FatalError("AG_StatusbarAddLabel: Too many labels");
#endif
	sbar->labels[sbar->nlabels] = Malloc(sizeof(AG_Label));
	lab = sbar->labels[sbar->nlabels];

	AG_ObjectInit(lab, &agLabelClass);
	lab->type = AG_LABEL_STATIC;
	va_start(ap, fmt);
	Vasprintf(&lab->text, fmt, ap);
	va_end(ap);
	AG_ExpandHoriz(lab);

	AG_ObjectAttach(&sbar->box, lab);
	lab = sbar->labels[sbar->nlabels++];
	AG_ObjectUnlock(sbar);
	AG_Redraw(sbar);
	return (lab);
}
Exemplo n.º 4
0
Arquivo: textbox.c Projeto: adsr/agar
/* Set the textbox label (format string). */
void
AG_TextboxSetLabel(AG_Textbox *tb, const char *fmt, ...)
{
	char *s;
	va_list ap;

	va_start(ap, fmt);
	Vasprintf(&s, fmt, ap);
	va_end(ap);
	AG_TextboxSetLabelS(tb, s);
	Free(s);
}
Exemplo n.º 5
0
AG_Button *
AG_ButtonNew(void *parent, Uint flags, const char *fmt, ...)
{
	va_list ap;
	char *s;
	
	if (fmt != NULL) {
		va_start(ap, fmt);
		Vasprintf(&s, fmt, ap);
		va_end(ap);
	} else {
		s = NULL;
	}
	return AG_ButtonNewS(parent, flags, s);
}
Exemplo n.º 6
0
/* Set the label text (format string). */
void
AG_BoxSetLabel(AG_Box *box, const char *fmt, ...)
{
	char *s;
	va_list ap;

	if (fmt != NULL) {
		va_start(ap, fmt);
		Vasprintf(&s, fmt, ap);
		va_end(ap);
		AG_BoxSetLabelS(box, s);
		free(s);
		box->flags |= AG_BOX_FRAME;
	} else {
		AG_BoxSetLabelS(box, NULL);
		box->flags &= ~(AG_BOX_FRAME);
	}
}
Exemplo n.º 7
0
/* Set the error message string. */
void
AG_SetError(const char *fmt, ...)
{
	va_list args;
	char *buf;
	
	va_start(args, fmt);
	Vasprintf(&buf, fmt, args);
	va_end(args);
#ifdef AG_THREADS
	{
		char *ekey;

		if ((ekey = (char *)AG_ThreadKeyGet(agErrorKey)) != NULL) {
			Free(ekey);
		}
		AG_ThreadKeySet(agErrorKey, buf);
	}
#else
	Free(agErrorKey);
	agErrorKey = buf;
#endif
}