/*
- * Copyright (C) 1989-94 GROUPE BULL
+ * Copyright (C) 1989-95 GROUPE BULL
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
*/
/*****************************************************************************\
-* XpmCrBufFrI.c: *
+* CrBufFrI.c: *
* *
* XPM library *
* Scan an image and possibly its mask and create an XPM buffer *
* Developed by Arnaud Le Hors *
\*****************************************************************************/
-#include "xpm34p.h"
-#ifdef VMS
-#include "sys$library:string.h"
-#else
-#if defined(SYSV) || defined(SVR4)
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#endif
+#include "XpmI.h"
LFUNC(WriteColors, int, (char **dataptr, unsigned int *data_size,
unsigned int *used_size, XpmColor *colors,
LFUNC(ExtensionsSize, int, (XpmExtension *ext, unsigned int num));
LFUNC(CommentsSize, int, (XpmInfo *info));
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
+int XpmCreateBufferFromImage(
+ Display* display
+, char** buffer_return
+, XImage* image
+, XImage* shapeimage
+, XpmAttributes* attributes
+)
+#else
int
-XpmCreateBufferFromImage(Display *display, char **buffer_return, XImage *image,
- XImage *shapeimage, XpmAttributes *attributes)
+XpmCreateBufferFromImage(display, buffer_return, image, shapeimage, attributes)
+ Display *display;
+ char **buffer_return;
+ XImage *image;
+ XImage *shapeimage;
+ XpmAttributes *attributes;
+#endif
{
XpmImage xpmimage;
XpmInfo info;
#undef RETURN
#define RETURN(status) \
{ \
- if (ptr) \
- XpmFree(ptr); \
- return(status); \
+ ErrorStatus = status; \
+ goto error; \
}
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
+int XpmCreateBufferFromXpmImage(char** buffer_return, XpmImage* image, XpmInfo* info)
+#else
int
-XpmCreateBufferFromXpmImage(char **buffer_return, XpmImage *image, XpmInfo *info)
+XpmCreateBufferFromXpmImage(buffer_return, image, info)
+ char **buffer_return;
+ XpmImage *image;
+ XpmInfo *info;
+#endif
{
/* calculation variables */
int ErrorStatus;
cmt_size = CommentsSize(info);
/* write the header line */
+#ifndef VOID_SPRINTF
+ used_size =
+#endif
sprintf(buf, "/* XPM */\nstatic char * image_name[] = {\n");
+#ifdef VOID_SPRINTF
used_size = strlen(buf);
+#endif
ptr_size = used_size + ext_size + cmt_size + 1;
ptr = (char *) XpmMalloc(ptr_size);
if (!ptr)
/* write the values line */
if (cmts && info->hints_cmt) {
+#ifndef VOID_SPRINTF
+ used_size +=
+#endif
sprintf(ptr + used_size, "/*%s*/\n", info->hints_cmt);
+#ifdef VOID_SPRINTF
used_size += strlen(info->hints_cmt) + 5;
+#endif
}
+#ifndef VOID_SPRINTF
+ l =
+#endif
sprintf(buf, "\"%d %d %d %d", image->width, image->height,
image->ncolors, image->cpp);
+#ifdef VOID_SPRINTF
l = strlen(buf);
+#endif
if (info && (info->valuemask & XpmHotspot)) {
+#ifndef VOID_SPRINTF
+ l +=
+#endif
sprintf(buf + l, " %d %d", info->x_hotspot, info->y_hotspot);
+#ifdef VOID_SPRINTF
l = strlen(buf);
+#endif
}
if (extensions) {
+#ifndef VOID_SPRINTF
+ l +=
+#endif
sprintf(buf + l, " XPMEXT");
+#ifdef VOID_SPRINTF
l = strlen(buf);
+#endif
}
+#ifndef VOID_SPRINTF
+ l +=
+#endif
sprintf(buf + l, "\",\n");
+#ifdef VOID_SPRINTF
l = strlen(buf);
+#endif
ptr_size += l;
p = (char *) XpmRealloc(ptr, ptr_size);
if (!p)
/* write colors */
if (cmts && info->colors_cmt) {
+#ifndef VOID_SPRINTF
+ used_size +=
+#endif
sprintf(ptr + used_size, "/*%s*/\n", info->colors_cmt);
+#ifdef VOID_SPRINTF
used_size += strlen(info->colors_cmt) + 5;
+#endif
}
ErrorStatus = WriteColors(&ptr, &ptr_size, &used_size,
image->colorTable, image->ncolors, image->cpp);
-
+
if (ErrorStatus != XpmSuccess)
RETURN(ErrorStatus);
/*
- * now we know the exact size we needed, realloc the data 4 = 1 (for
- * '"') + 3 (for '",\n') 1 = - 2 is because the last line does not end
- * with ',\n' + 3 (for '};\n')
+ * now we know the exact size we need, realloc the data
+ * 4 = 1 (for '"') + 3 (for '",\n')
+ * 1 = - 2 (because the last line does not end with ',\n') + 3 (for '};\n')
*/
ptr_size += image->height * (image->width * image->cpp + 4) + 1;
/* print pixels */
if (cmts && info->pixels_cmt) {
+#ifndef VOID_SPRINTF
+ used_size +=
+#endif
sprintf(ptr + used_size, "/*%s*/\n", info->pixels_cmt);
+#ifdef VOID_SPRINTF
used_size += strlen(info->pixels_cmt) + 5;
+#endif
}
WritePixels(ptr + used_size, &used_size, image->width, image->height,
image->cpp, image->data, image->colorTable);
info->extensions, info->nextensions);
/* close the array */
- sprintf(ptr + used_size, "};\n");
+ strcpy(ptr + used_size, "};\n");
*buffer_return = ptr;
return (XpmSuccess);
+
+/* exit point in case of error, free only locally allocated variables */
+error:
+ if (ptr)
+ XpmFree(ptr);
+ return (ErrorStatus);
}
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
+static int WriteColors(
+ char** dataptr
+, unsigned int* data_size
+, unsigned int* used_size
+, XpmColor* colors
+, unsigned int ncolors
+, unsigned int cpp
+)
+#else
static int
-WriteColors(char **dataptr, unsigned int *data_size, unsigned int *used_size,
- XpmColor *colors, unsigned int ncolors, unsigned int cpp)
+WriteColors(dataptr, data_size, used_size, colors, ncolors, cpp)
+ char **dataptr;
+ unsigned int *data_size;
+ unsigned int *used_size;
+ XpmColor *colors;
+ unsigned int ncolors;
+ unsigned int cpp;
+#endif
{
char buf[BUFSIZ];
unsigned int a, key, l;
for (key = 1; key <= NKEYS; key++, defaults++) {
if (s2 = *defaults) {
+#ifndef VOID_SPRINTF
+ s +=
+#endif
sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2);
+#ifdef VOID_SPRINTF
s += strlen(s);
+#endif
}
}
strcpy(s, "\",\n");
- l = strlen(buf);
+ l = s + 3 - buf;
s = (char *) XpmRealloc(*dataptr, *data_size + l);
if (!s)
return (XpmNoMemory);
return (XpmSuccess);
}
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
+static void WritePixels(
+ char* dataptr
+, unsigned int* used_size
+, unsigned int width
+, unsigned int height
+, unsigned int cpp
+, unsigned int* pixels
+, XpmColor* colors
+)
+#else
static void
-WritePixels(char *dataptr, unsigned int *used_size, unsigned int width, unsigned int height,
- unsigned int cpp, unsigned int *pixels, XpmColor *colors)
+WritePixels(dataptr, used_size, width, height, cpp, pixels, colors)
+ char *dataptr;
+ unsigned int *used_size;
+ unsigned int width;
+ unsigned int height;
+ unsigned int cpp;
+ unsigned int *pixels;
+ XpmColor *colors;
+#endif
{
char *s = dataptr;
unsigned int x, y, h;
*used_size += s - dataptr;
}
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
static int
-ExtensionsSize(XpmExtension *ext, unsigned int num)
+ExtensionsSize(XpmExtension* ext, unsigned int num)
+#else
+static int
+ExtensionsSize(ext, num)
+ XpmExtension *ext;
+ unsigned int num;
+#endif
{
unsigned int x, y, a, size;
char **line;
return size + 13;
}
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
+static void WriteExtensions(
+ char* dataptr
+, unsigned int* used_size
+, XpmExtension* ext
+, unsigned int num
+)
+#else
static void
-WriteExtensions(char *dataptr, unsigned int *used_size, XpmExtension *ext, unsigned int num)
+WriteExtensions(dataptr, used_size, ext, num)
+ char *dataptr;
+ unsigned int *used_size;
+ XpmExtension *ext;
+ unsigned int num;
+#endif
{
unsigned int x, y, a;
char **line;
char *s = dataptr;
for (x = 0; x < num; x++, ext++) {
+#ifndef VOID_SPRINTF
+ s +=
+#endif
sprintf(s, ",\n\"XPMEXT %s\"", ext->name);
+#ifdef VOID_SPRINTF
s += strlen(ext->name) + 11;
+#endif
a = ext->nlines;
for (y = 0, line = ext->lines; y < a; y++, line++) {
+#ifndef VOID_SPRINTF
+ s +=
+#endif
sprintf(s, ",\n\"%s\"", *line);
+#ifdef VOID_SPRINTF
s += strlen(*line) + 4;
+#endif
}
}
strcpy(s, ",\n\"XPMENDEXT\"");
*used_size += s - dataptr + 13;
}
-static int
-CommentsSize(XpmInfo *info)
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
+static int CommentsSize(XpmInfo* info)
+#else
+static int CommentsSize(info)
+ XpmInfo *info;
+#endif
{
int size = 0;