dockapps/libdockapp/src/dautil.c

210 lines
3.5 KiB
C
Raw Normal View History

/*
* Copyright (c) 1999-2005 Alfredo K. Kojima, Alban G. Hertroys
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#include <string.h>
#include "daargs.h"
#include "dautil.h"
extern struct DAContext *_daContext;
/*
* Function prototypes
*/
void _message(const char *label, const char *fmt, va_list args);
/*
* Exported functions.
*/
void
DASetExpectedVersion(unsigned long expectedVersion)
{
DAExpectedVersion = expectedVersion;
if (expectedVersion > DA_VERSION)
DAWarning("Version of libdockapp (%u) is older than "
"version expected (%u)",
DA_VERSION,
DAExpectedVersion);
}
Display *
DAGetDisplay(char *d, ...)
{
/* Be backward compatible */
if (DAExpectedVersion < 20030126) {
va_list ap;
int argc;
char **argv;
va_start(ap, d);
argc = va_arg(ap, int);
argv = va_arg(ap, char **);
va_end(ap);
DAOpenDisplay(d, argc, argv);
DAWarning("Expected version of libdockapp is not set.");
DAWarning("Obsolete call to DAGetDisplay().");
return NULL;
}
return DADisplay;
}
void
DASetDisplay(Display *display)
{
DADisplay = display;
}
Window
DAGetWindow(void)
{
return DAWindow;
}
void
DASetWindow(Window window)
{
DAWindow = window;
}
Window
DAGetLeader(void)
{
return DALeader;
}
void
DASetLeader(Window leader)
{
DALeader = leader;
}
Window
DAGetIconWindow(void)
{
return DAIcon;
}
void
DASetIconWindow(Window icon_win)
{
DAIcon = icon_win;
}
int
DAGetDepth(void)
{
return DADepth;
}
void
DASetDepth(int depth)
{
DADepth = depth;
}
Visual *
DAGetVisual(void)
{
return DAVisual;
}
void
DASetVisual(Visual *visual)
{
DAVisual = visual;
}
void
DAWarning(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
_message("Warning", fmt, args);
va_end(args);
}
void
DAError(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
_message("Error", fmt, args);
exit(1);
va_end(args);
}
/*
* Local functions
*/
void
_message(const char *label, const char *fmt, va_list args)
{
char *w_fmt;
if (_daContext->programName != NULL) {
/* put default string in front of message, add newline */
w_fmt = malloc((strlen(_daContext->programName) + strlen(fmt) + 13) * sizeof(char));
sprintf(w_fmt, "%s: %s: %s\n", _daContext->programName, label, fmt);
} else {
w_fmt = malloc((strlen(fmt) + 1) * sizeof(char));
sprintf(w_fmt, "%s\n", fmt);
}
/* print the message */
vfprintf(stderr, w_fmt, args);
}
void
debug(const char *fmt, ...)
{
#ifdef DEBUG
va_list args;
va_start(args, fmt);
_message("debug", fmt, args);
va_end(args);
#endif
}