]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xpm/crbuffri.c
Use system default font for all platforms
[wxWidgets.git] / src / xpm / crbuffri.c
index ed83271ff43df812ca11f10bcefbc284d131ce34..f728fe48f7c1c386def6d9d8d03d6881629c0f07 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * 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
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -24,7 +24,7 @@
  */
 
 /*****************************************************************************\
  */
 
 /*****************************************************************************\
-* XpmCrBufFrI.c:                                                              *
+*  CrBufFrI.c:                                                                *
 *                                                                             *
 *  XPM library                                                                *
 *  Scan an image and possibly its mask and create an XPM buffer               *
 *                                                                             *
 *  XPM library                                                                *
 *  Scan an image and possibly its mask and create an XPM buffer               *
 *  Developed by Arnaud Le Hors                                                *
 \*****************************************************************************/
 
 *  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(WriteColors, int, (char **dataptr, unsigned int *data_size,
                         unsigned int *used_size, XpmColor *colors,
@@ -58,9 +49,24 @@ LFUNC(WriteExtensions, void, (char *dataptr, unsigned int *used_size,
 LFUNC(ExtensionsSize, int, (XpmExtension *ext, unsigned int num));
 LFUNC(CommentsSize, int, (XpmInfo *info));
 
 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
 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;
 {
     XpmImage xpmimage;
     XpmInfo info;
@@ -95,13 +101,20 @@ XpmCreateBufferFromImage(Display *display, char **buffer_return, XImage *image,
 #undef RETURN
 #define RETURN(status) \
 { \
 #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
 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;
 {
     /* calculation variables */
     int ErrorStatus;
@@ -124,8 +137,13 @@ XpmCreateBufferFromXpmImage(char **buffer_return, XpmImage *image, XpmInfo *info
        cmt_size = CommentsSize(info);
 
     /* write the header line */
        cmt_size = CommentsSize(info);
 
     /* write the header line */
+#ifndef VOID_SPRINTF
+    used_size =
+#endif
     sprintf(buf, "/* XPM */\nstatic char * image_name[] = {\n");
     sprintf(buf, "/* XPM */\nstatic char * image_name[] = {\n");
+#ifdef VOID_SPRINTF
     used_size = strlen(buf);
     used_size = strlen(buf);
+#endif
     ptr_size = used_size + ext_size + cmt_size + 1;
     ptr = (char *) XpmMalloc(ptr_size);
     if (!ptr)
     ptr_size = used_size + ext_size + cmt_size + 1;
     ptr = (char *) XpmMalloc(ptr_size);
     if (!ptr)
@@ -134,23 +152,48 @@ XpmCreateBufferFromXpmImage(char **buffer_return, XpmImage *image, XpmInfo *info
 
     /* write the values line */
     if (cmts && info->hints_cmt) {
 
     /* write the values line */
     if (cmts && info->hints_cmt) {
+#ifndef VOID_SPRINTF
+       used_size +=
+#endif
        sprintf(ptr + used_size, "/*%s*/\n", info->hints_cmt);
        sprintf(ptr + used_size, "/*%s*/\n", info->hints_cmt);
+#ifdef VOID_SPRINTF
        used_size += strlen(info->hints_cmt) + 5;
        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);
     sprintf(buf, "\"%d %d %d %d", image->width, image->height,
            image->ncolors, image->cpp);
+#ifdef VOID_SPRINTF
     l = strlen(buf);
     l = strlen(buf);
+#endif
 
     if (info && (info->valuemask & XpmHotspot)) {
 
     if (info && (info->valuemask & XpmHotspot)) {
+#ifndef VOID_SPRINTF
+       l +=
+#endif
        sprintf(buf + l, " %d %d", info->x_hotspot, info->y_hotspot);
        sprintf(buf + l, " %d %d", info->x_hotspot, info->y_hotspot);
+#ifdef VOID_SPRINTF
        l = strlen(buf);
        l = strlen(buf);
+#endif
     }
     if (extensions) {
     }
     if (extensions) {
+#ifndef VOID_SPRINTF
+       l +=
+#endif
        sprintf(buf + l, " XPMEXT");
        sprintf(buf + l, " XPMEXT");
+#ifdef VOID_SPRINTF
        l = strlen(buf);
        l = strlen(buf);
+#endif
     }
     }
+#ifndef VOID_SPRINTF
+    l +=
+#endif
     sprintf(buf + l, "\",\n");
     sprintf(buf + l, "\",\n");
+#ifdef VOID_SPRINTF
     l = strlen(buf);
     l = strlen(buf);
+#endif
     ptr_size += l;
     p = (char *) XpmRealloc(ptr, ptr_size);
     if (!p)
     ptr_size += l;
     p = (char *) XpmRealloc(ptr, ptr_size);
     if (!p)
@@ -161,19 +204,24 @@ XpmCreateBufferFromXpmImage(char **buffer_return, XpmImage *image, XpmInfo *info
 
     /* write colors */
     if (cmts && info->colors_cmt) {
 
     /* write colors */
     if (cmts && info->colors_cmt) {
+#ifndef VOID_SPRINTF
+       used_size +=
+#endif
        sprintf(ptr + used_size, "/*%s*/\n", info->colors_cmt);
        sprintf(ptr + used_size, "/*%s*/\n", info->colors_cmt);
+#ifdef VOID_SPRINTF
        used_size += strlen(info->colors_cmt) + 5;
        used_size += strlen(info->colors_cmt) + 5;
+#endif
     }
     ErrorStatus = WriteColors(&ptr, &ptr_size, &used_size,
                              image->colorTable, image->ncolors, image->cpp);
     }
     ErrorStatus = WriteColors(&ptr, &ptr_size, &used_size,
                              image->colorTable, image->ncolors, image->cpp);
+
     if (ErrorStatus != XpmSuccess)
        RETURN(ErrorStatus);
 
     /*
     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;
 
      */
     ptr_size += image->height * (image->width * image->cpp + 4) + 1;
 
@@ -184,8 +232,13 @@ XpmCreateBufferFromXpmImage(char **buffer_return, XpmImage *image, XpmInfo *info
 
     /* print pixels */
     if (cmts && info->pixels_cmt) {
 
     /* print pixels */
     if (cmts && info->pixels_cmt) {
+#ifndef VOID_SPRINTF
+       used_size +=
+#endif
        sprintf(ptr + used_size, "/*%s*/\n", info->pixels_cmt);
        sprintf(ptr + used_size, "/*%s*/\n", info->pixels_cmt);
+#ifdef VOID_SPRINTF
        used_size += strlen(info->pixels_cmt) + 5;
        used_size += strlen(info->pixels_cmt) + 5;
+#endif
     }
     WritePixels(ptr + used_size, &used_size, image->width, image->height,
                image->cpp, image->data, image->colorTable);
     }
     WritePixels(ptr + used_size, &used_size, image->width, image->height,
                image->cpp, image->data, image->colorTable);
@@ -196,16 +249,39 @@ XpmCreateBufferFromXpmImage(char **buffer_return, XpmImage *image, XpmInfo *info
                        info->extensions, info->nextensions);
 
     /* close the array */
                        info->extensions, info->nextensions);
 
     /* close the array */
-    sprintf(ptr + used_size, "};\n");
+    strcpy(ptr + used_size, "};\n");
 
     *buffer_return = ptr;
 
     return (XpmSuccess);
 
     *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
 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;
 {
     char buf[BUFSIZ];
     unsigned int a, key, l;
@@ -222,12 +298,17 @@ WriteColors(char **dataptr, unsigned int *data_size, unsigned int *used_size,
 
        for (key = 1; key <= NKEYS; key++, defaults++) {
            if (s2 = *defaults) {
 
        for (key = 1; key <= NKEYS; key++, defaults++) {
            if (s2 = *defaults) {
+#ifndef VOID_SPRINTF
+               s +=
+#endif
                sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2);
                sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2);
+#ifdef VOID_SPRINTF
                s += strlen(s);
                s += strlen(s);
+#endif
            }
        }
        strcpy(s, "\",\n");
            }
        }
        strcpy(s, "\",\n");
-       l = strlen(buf);
+       l = s + 3 - buf;
        s = (char *) XpmRealloc(*dataptr, *data_size + l);
        if (!s)
            return (XpmNoMemory);
        s = (char *) XpmRealloc(*dataptr, *data_size + l);
        if (!s)
            return (XpmNoMemory);
@@ -239,9 +320,28 @@ WriteColors(char **dataptr, unsigned int *data_size, unsigned int *used_size,
     return (XpmSuccess);
 }
 
     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
 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;
 {
     char *s = dataptr;
     unsigned int x, y, h;
@@ -266,8 +366,16 @@ WritePixels(char *dataptr, unsigned int *used_size, unsigned int width, unsigned
     *used_size += s - dataptr;
 }
 
     *used_size += s - dataptr;
 }
 
+#ifdef __OS2__
+/* Visual Age cannot deal with old, non-ansi, code */
 static int
 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;
 {
     unsigned int x, y, a, size;
     char **line;
@@ -285,28 +393,57 @@ ExtensionsSize(XpmExtension *ext, unsigned int num)
     return size + 13;
 }
 
     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
 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++) {
 {
     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);
        sprintf(s, ",\n\"XPMEXT %s\"", ext->name);
+#ifdef VOID_SPRINTF
        s += strlen(ext->name) + 11;
        s += strlen(ext->name) + 11;
+#endif
        a = ext->nlines;
        for (y = 0, line = ext->lines; y < a; y++, line++) {
        a = ext->nlines;
        for (y = 0, line = ext->lines; y < a; y++, line++) {
+#ifndef VOID_SPRINTF
+           s +=
+#endif
            sprintf(s, ",\n\"%s\"", *line);
            sprintf(s, ",\n\"%s\"", *line);
+#ifdef VOID_SPRINTF
            s += strlen(*line) + 4;
            s += strlen(*line) + 4;
+#endif
        }
     }
     strcpy(s, ",\n\"XPMENDEXT\"");
     *used_size += s - dataptr + 13;
 }
 
        }
     }
     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;
 
 {
     int size = 0;