⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wpng.c

📁 openmeetings组件之GS openmeetings组件之GS openmeetings组件之GS
💻 C
📖 第 1 页 / 共 3 页
字号:
                    if (p[result] == 27) {    /* escape character */                        wpng_info.have_text &= ~TEXT_COPY;                        valid = FALSE;                    }#endif                }            }        } while (!valid);        do {            valid = TRUE;            p = textbuf + TEXT_EMAIL_OFFSET;            fprintf(stderr, "  E-mail: ");            fflush(stderr);            if (FGETS(p, 74, keybd) && (len = strlen(p)) > 1) {                if (p[len-1] == '\n')                    p[--len] = '\0';                wpng_info.email = p;                wpng_info.have_text |= TEXT_EMAIL;                if ((result = wpng_isvalid_latin1((uch *)p, len)) >= 0) {                    fprintf(stderr, "    " PROGNAME " warning:  character code"                      " %u is %sdiscouraged by the PNG\n    specification "                      "[first occurrence was at character position #%d]\n",                      (unsigned)p[result], (p[result] == 27)? "strongly " : "",                      result+1);                    fflush(stderr);#ifdef FORBID_LATIN1_CTRL                    wpng_info.have_text &= ~TEXT_EMAIL;                    valid = FALSE;#else                    if (p[result] == 27) {    /* escape character */                        wpng_info.have_text &= ~TEXT_EMAIL;                        valid = FALSE;                    }#endif                }            }        } while (!valid);        do {            valid = TRUE;            p = textbuf + TEXT_URL_OFFSET;            fprintf(stderr, "  URL: ");            fflush(stderr);            if (FGETS(p, 74, keybd) && (len = strlen(p)) > 1) {                if (p[len-1] == '\n')                    p[--len] = '\0';                wpng_info.url = p;                wpng_info.have_text |= TEXT_URL;                if ((result = wpng_isvalid_latin1((uch *)p, len)) >= 0) {                    fprintf(stderr, "    " PROGNAME " warning:  character code"                      " %u is %sdiscouraged by the PNG\n    specification "                      "[first occurrence was at character position #%d]\n",                      (unsigned)p[result], (p[result] == 27)? "strongly " : "",                      result+1);                    fflush(stderr);#ifdef FORBID_LATIN1_CTRL                    wpng_info.have_text &= ~TEXT_URL;                    valid = FALSE;#else                    if (p[result] == 27) {    /* escape character */                        wpng_info.have_text &= ~TEXT_URL;                        valid = FALSE;                    }#endif                }            }        } while (!valid);#ifndef DOS_OS2_W32        fclose(keybd);#endif    } else if (text) {        fprintf(stderr, PROGNAME ":  unable to allocate memory for text\n");        text = FALSE;        wpng_info.have_text = 0;    }    /* allocate libpng stuff, initialize transformations, write pre-IDAT data */    if ((rc = writepng_init(&wpng_info)) != 0) {        switch (rc) {            case 2:                fprintf(stderr, PROGNAME                  ":  libpng initialization problem (longjmp)\n");                break;            case 4:                fprintf(stderr, PROGNAME ":  insufficient memory\n");                break;            case 11:                fprintf(stderr, PROGNAME                  ":  internal logic error (unexpected PNM type)\n");                break;            default:                fprintf(stderr, PROGNAME                  ":  unknown writepng_init() error\n");                break;        }        exit(rc);    }    /* free textbuf, since it's a completely local variable and all text info     * has just been written to the PNG file */    if (text && textbuf) {        free(textbuf);        textbuf = NULL;    }    /* calculate rowbytes on basis of image type; note that this becomes much     * more complicated if we choose to support PBM type, ASCII PNM types, or     * 16-bit-per-sample binary data [currently not an official NetPBM type] */    if (wpng_info.pnmtype == 5)        rowbytes = wpng_info.width;    else if (wpng_info.pnmtype == 6)        rowbytes = wpng_info.width * 3;    else /* if (wpng_info.pnmtype == 8) */        rowbytes = wpng_info.width * 4;    /* read and write the image, either in its entirety (if writing interlaced     * PNG) or row by row (if non-interlaced) */    fprintf(stderr, "Encoding image data...\n");    fflush(stderr);    if (wpng_info.interlaced) {        long i;        ulg bytes;        ulg image_bytes = rowbytes * wpng_info.height;   /* overflow? */        wpng_info.image_data = (uch *)malloc(image_bytes);        wpng_info.row_pointers = (uch **)malloc(wpng_info.height*sizeof(uch *));        if (wpng_info.image_data == NULL || wpng_info.row_pointers == NULL) {            fprintf(stderr, PROGNAME ":  insufficient memory for image data\n");            writepng_cleanup(&wpng_info);            wpng_cleanup();            exit(5);        }        for (i = 0;  i < wpng_info.height;  ++i)            wpng_info.row_pointers[i] = wpng_info.image_data + i*rowbytes;        bytes = fread(wpng_info.image_data, 1, image_bytes, wpng_info.infile);        if (bytes != image_bytes) {            fprintf(stderr, PROGNAME ":  expected %lu bytes, got %lu bytes\n",              image_bytes, bytes);            fprintf(stderr, "  (continuing anyway)\n");        }        if (writepng_encode_image(&wpng_info) != 0) {            fprintf(stderr, PROGNAME              ":  libpng problem (longjmp) while writing image data\n");            writepng_cleanup(&wpng_info);            wpng_cleanup();            exit(2);        }    } else /* not interlaced:  write progressively (row by row) */ {        long j;        ulg bytes;        wpng_info.image_data = (uch *)malloc(rowbytes);        if (wpng_info.image_data == NULL) {            fprintf(stderr, PROGNAME ":  insufficient memory for row data\n");            writepng_cleanup(&wpng_info);            wpng_cleanup();            exit(5);        }        error = 0;        for (j = wpng_info.height;  j > 0L;  --j) {            bytes = fread(wpng_info.image_data, 1, rowbytes, wpng_info.infile);            if (bytes != rowbytes) {                fprintf(stderr, PROGNAME                  ":  expected %lu bytes, got %lu bytes (row %ld)\n", rowbytes,                  bytes, wpng_info.height-j);                ++error;                break;            }            if (writepng_encode_row(&wpng_info) != 0) {                fprintf(stderr, PROGNAME                  ":  libpng problem (longjmp) while writing row %ld\n",                  wpng_info.height-j);                ++error;                break;            }        }        if (error) {            writepng_cleanup(&wpng_info);            wpng_cleanup();            exit(2);        }        if (writepng_encode_finish(&wpng_info) != 0) {            fprintf(stderr, PROGNAME ":  error on final libpng call\n");            writepng_cleanup(&wpng_info);            wpng_cleanup();            exit(2);        }    }    /* OK, we're done (successfully):  clean up all resources and quit */    fprintf(stderr, "Done.\n");    fflush(stderr);    writepng_cleanup(&wpng_info);    wpng_cleanup();    return 0;}static int wpng_isvalid_latin1(uch *p, int len){    int i, result = -1;    for (i = 0;  i < len;  ++i) {        if (p[i] == 10 || (p[i] > 31 && p[i] < 127) || p[i] > 160)            continue;           /* character is completely OK */        if (result < 0 || (p[result] != 27 && p[i] == 27))            result = i;         /* mark location of first questionable one */    }                           /*  or of first escape character (bad) */    return result;}static void wpng_cleanup(void){    if (wpng_info.outfile) {        fclose(wpng_info.outfile);        wpng_info.outfile = NULL;    }    if (wpng_info.infile) {        fclose(wpng_info.infile);        wpng_info.infile = NULL;    }    if (wpng_info.image_data) {        free(wpng_info.image_data);        wpng_info.image_data = NULL;    }    if (wpng_info.row_pointers) {        free(wpng_info.row_pointers);        wpng_info.row_pointers = NULL;    }}#ifdef DOS_OS2_W32static char *dos_kbd_gets(char *buf, int len){    int ch, count=0;    do {        buf[count++] = ch = getche();    } while (ch != '\r' && count < len-1);    buf[count--] = '\0';        /* terminate string */    if (buf[count] == '\r')     /* Enter key makes CR, so change to newline */        buf[count] = '\n';    fprintf(stderr, "\n");      /* Enter key does *not* cause a newline */    fflush(stderr);    return buf;}#endif /* DOS_OS2_W32 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -