jdk/src/share/native/sun/java2d/cmm/lcms/cmsio0.c
author duke
Sat, 01 Dec 2007 00:00:00 +0000
changeset 2 90ce3da70b43
child 2392 738be5224b3f
permissions -rw-r--r--
Initial load
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * under the terms of the GNU General Public License version 2 only, as
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * published by the Free Software Foundation.  Sun designates this
90ce3da70b43 Initial load
duke
parents:
diff changeset
     7
 * particular file as subject to the "Classpath" exception as provided
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 * by Sun in the LICENSE file that accompanied this code.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     9
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    21
 * CA 95054 USA or visit www.sun.com if you need additional information or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
 * have any questions.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
// This file is available under and governed by the GNU General Public
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
// License version 2 only, as published by the Free Software Foundation.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
// However, the following notice accompanied the original version of this
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
// file:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
//
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
//
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
//  Little cms
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
//  Copyright (C) 1998-2006 Marti Maria
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
//
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
// Permission is hereby granted, free of charge, to any person obtaining
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
// a copy of this software and associated documentation files (the "Software"),
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
// to deal in the Software without restriction, including without limitation
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
// and/or sell copies of the Software, and to permit persons to whom the Software
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
// is furnished to do so, subject to the following conditions:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
//
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
// The above copyright notice and this permission notice shall be included in
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
// all copies or substantial portions of the Software.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
//
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
//
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
// Generic I/O, tag dictionary management, profile struct
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
#include "lcms.h"
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
// Memory-based stream ---------------------------------------------------
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
typedef struct {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
                LPBYTE Block;           // Points to allocated memory
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
                size_t Size;            // Size of allocated memory
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
                int Pointer;            // Points to current location
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
                int FreeBlockOnClose;   // As title
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
                } FILEMEM;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
LPVOID MemoryOpen(LPBYTE Block, size_t Size, char Mode)
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
    FILEMEM* fm = (FILEMEM*) malloc(sizeof(FILEMEM));
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
    ZeroMemory(fm, sizeof(FILEMEM));
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
    if (Mode == 'r') {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
        fm ->Block   = (LPBYTE) malloc(Size);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
        if (fm ->Block == NULL) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
            free(fm);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
            return NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
        CopyMemory(fm->Block, Block, Size);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
        fm ->FreeBlockOnClose = TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
    else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
        fm ->Block = Block;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
        fm ->FreeBlockOnClose = FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
    fm ->Size    = Size;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
    fm ->Pointer = 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
    return (LPVOID) fm;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    97
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
    98
90ce3da70b43 Initial load
duke
parents:
diff changeset
    99
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   101
size_t MemoryRead(LPVOID buffer, size_t size, size_t count, struct _lcms_iccprofile_struct* Icc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
     FILEMEM* ResData = (FILEMEM*) Icc ->stream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
     LPBYTE Ptr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
     size_t len = size * count;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   106
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
     if (ResData -> Pointer + len > ResData -> Size){
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
         len = (ResData -> Size - ResData -> Pointer);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
         cmsSignalError(LCMS_ERRC_WARNING, "Read from memory error. Got %d bytes, block should be of %d bytes", len * size, count * size);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
     }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
    Ptr  = ResData -> Block;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
    Ptr += ResData -> Pointer;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
    CopyMemory(buffer, Ptr, len);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
    ResData -> Pointer += (int) len;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   119
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
    return count;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   122
90ce3da70b43 Initial load
duke
parents:
diff changeset
   123
// SEEK_CUR is assumed
90ce3da70b43 Initial load
duke
parents:
diff changeset
   124
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   126
BOOL MemorySeek(struct _lcms_iccprofile_struct* Icc, size_t offset)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   127
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   128
    FILEMEM* ResData = (FILEMEM*) Icc ->stream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   129
90ce3da70b43 Initial load
duke
parents:
diff changeset
   130
    if (offset > ResData ->Size) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   131
         cmsSignalError(LCMS_ERRC_ABORTED,  "Pointer error; probably corrupted file");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
         return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   133
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   134
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
    ResData ->Pointer = (DWORD) offset;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
    return FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   137
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
// FTell
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
size_t MemoryTell(struct _lcms_iccprofile_struct* Icc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   143
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   144
    FILEMEM* ResData = (FILEMEM*) Icc ->stream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   145
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
    return ResData -> Pointer;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   147
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   148
90ce3da70b43 Initial load
duke
parents:
diff changeset
   149
90ce3da70b43 Initial load
duke
parents:
diff changeset
   150
// Writes data to memory, also keeps used space for further reference
90ce3da70b43 Initial load
duke
parents:
diff changeset
   151
90ce3da70b43 Initial load
duke
parents:
diff changeset
   152
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
BOOL MemoryWrite(struct _lcms_iccprofile_struct* Icc, size_t size, void *Ptr)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   155
        FILEMEM* ResData = (FILEMEM*) Icc ->stream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   156
90ce3da70b43 Initial load
duke
parents:
diff changeset
   157
       if (size == 0) return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   158
90ce3da70b43 Initial load
duke
parents:
diff changeset
   159
       if (ResData != NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
           CopyMemory(ResData ->Block + Icc ->UsedSpace, Ptr, size);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
90ce3da70b43 Initial load
duke
parents:
diff changeset
   162
       Icc->UsedSpace += size;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
90ce3da70b43 Initial load
duke
parents:
diff changeset
   164
       return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   165
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   166
90ce3da70b43 Initial load
duke
parents:
diff changeset
   167
90ce3da70b43 Initial load
duke
parents:
diff changeset
   168
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   169
BOOL MemoryClose(struct _lcms_iccprofile_struct* Icc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   170
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   171
    FILEMEM* ResData = (FILEMEM*) Icc ->stream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
90ce3da70b43 Initial load
duke
parents:
diff changeset
   173
    if (ResData ->FreeBlockOnClose) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   174
90ce3da70b43 Initial load
duke
parents:
diff changeset
   175
        if (ResData ->Block) free(ResData ->Block);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   176
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   177
    free(ResData);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   178
    return 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   179
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   180
90ce3da70b43 Initial load
duke
parents:
diff changeset
   181
90ce3da70b43 Initial load
duke
parents:
diff changeset
   182
// File-based stream -------------------------------------------------------
90ce3da70b43 Initial load
duke
parents:
diff changeset
   183
90ce3da70b43 Initial load
duke
parents:
diff changeset
   184
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   185
LPVOID FileOpen(const char* filename)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   186
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   187
    return (void*) fopen(filename, "rb");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   188
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   189
90ce3da70b43 Initial load
duke
parents:
diff changeset
   190
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   191
size_t FileRead(void *buffer, size_t size, size_t count, struct _lcms_iccprofile_struct* Icc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
    size_t nReaded = fread(buffer, size, count, (FILE*) Icc->stream);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   194
    if (nReaded != count) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   195
            cmsSignalError(LCMS_ERRC_WARNING, "Read error. Got %d bytes, block should be of %d bytes", nReaded * size, count * size);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   196
            return 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   197
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   198
90ce3da70b43 Initial load
duke
parents:
diff changeset
   199
    return nReaded;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   200
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   201
90ce3da70b43 Initial load
duke
parents:
diff changeset
   202
90ce3da70b43 Initial load
duke
parents:
diff changeset
   203
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   204
BOOL FileSeek(struct _lcms_iccprofile_struct* Icc, size_t offset)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   205
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   206
    if (fseek((FILE*) Icc ->stream, (long) offset, SEEK_SET) != 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   207
90ce3da70b43 Initial load
duke
parents:
diff changeset
   208
       cmsSignalError(LCMS_ERRC_ABORTED, "Seek error; probably corrupted file");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   209
       return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   211
90ce3da70b43 Initial load
duke
parents:
diff changeset
   212
    return FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   213
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   214
90ce3da70b43 Initial load
duke
parents:
diff changeset
   215
90ce3da70b43 Initial load
duke
parents:
diff changeset
   216
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   217
size_t FileTell(struct _lcms_iccprofile_struct* Icc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   218
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   219
    return ftell((FILE*) Icc ->stream);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   220
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   221
90ce3da70b43 Initial load
duke
parents:
diff changeset
   222
// Writes data to stream, also keeps used space for further reference
90ce3da70b43 Initial load
duke
parents:
diff changeset
   223
90ce3da70b43 Initial load
duke
parents:
diff changeset
   224
90ce3da70b43 Initial load
duke
parents:
diff changeset
   225
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   226
BOOL FileWrite(struct _lcms_iccprofile_struct* Icc, size_t size, LPVOID Ptr)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   227
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   228
       if (size == 0) return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   229
90ce3da70b43 Initial load
duke
parents:
diff changeset
   230
       Icc->UsedSpace += size;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   231
90ce3da70b43 Initial load
duke
parents:
diff changeset
   232
       if (Icc->stream == NULL) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   233
90ce3da70b43 Initial load
duke
parents:
diff changeset
   234
              return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   235
       }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   236
90ce3da70b43 Initial load
duke
parents:
diff changeset
   237
       return (fwrite(Ptr, size, 1, (FILE*) Icc->stream) == 1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   238
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   239
90ce3da70b43 Initial load
duke
parents:
diff changeset
   240
90ce3da70b43 Initial load
duke
parents:
diff changeset
   241
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   242
BOOL FileClose(struct _lcms_iccprofile_struct* Icc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   243
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   244
    return fclose((FILE*) Icc ->stream);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   245
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   246
90ce3da70b43 Initial load
duke
parents:
diff changeset
   247
// ----------------------------------------------------------------------------------------------------
90ce3da70b43 Initial load
duke
parents:
diff changeset
   248
90ce3da70b43 Initial load
duke
parents:
diff changeset
   249
90ce3da70b43 Initial load
duke
parents:
diff changeset
   250
// Creates an empty structure holding all required parameters
90ce3da70b43 Initial load
duke
parents:
diff changeset
   251
90ce3da70b43 Initial load
duke
parents:
diff changeset
   252
cmsHPROFILE _cmsCreateProfilePlaceholder(void)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   253
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   254
90ce3da70b43 Initial load
duke
parents:
diff changeset
   255
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) malloc(sizeof(LCMSICCPROFILE));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   256
    if (Icc == NULL) return NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   257
90ce3da70b43 Initial load
duke
parents:
diff changeset
   258
    // Empty values
90ce3da70b43 Initial load
duke
parents:
diff changeset
   259
    ZeroMemory(Icc, sizeof(LCMSICCPROFILE));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   260
90ce3da70b43 Initial load
duke
parents:
diff changeset
   261
    // Make sure illuminant is correct
90ce3da70b43 Initial load
duke
parents:
diff changeset
   262
    Icc ->Illuminant = *cmsD50_XYZ();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   263
90ce3da70b43 Initial load
duke
parents:
diff changeset
   264
    // Set it to empty
90ce3da70b43 Initial load
duke
parents:
diff changeset
   265
    Icc -> TagCount   = 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   266
90ce3da70b43 Initial load
duke
parents:
diff changeset
   267
    // Return the handle
90ce3da70b43 Initial load
duke
parents:
diff changeset
   268
    return (cmsHPROFILE) Icc;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   269
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   270
90ce3da70b43 Initial load
duke
parents:
diff changeset
   271
90ce3da70b43 Initial load
duke
parents:
diff changeset
   272
// Return the number of tags
90ce3da70b43 Initial load
duke
parents:
diff changeset
   273
icInt32Number LCMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   274
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   275
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   276
    return  Icc->TagCount;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   277
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   278
90ce3da70b43 Initial load
duke
parents:
diff changeset
   279
// Return the tag signature of a given tag number
90ce3da70b43 Initial load
duke
parents:
diff changeset
   280
icTagSignature LCMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, icInt32Number n)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   281
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   282
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   283
90ce3da70b43 Initial load
duke
parents:
diff changeset
   284
    if (n < 0 || n > Icc->TagCount) return (icTagSignature) 0;  // Mark as not available
90ce3da70b43 Initial load
duke
parents:
diff changeset
   285
90ce3da70b43 Initial load
duke
parents:
diff changeset
   286
    return Icc ->TagNames[n];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   287
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   288
90ce3da70b43 Initial load
duke
parents:
diff changeset
   289
90ce3da70b43 Initial load
duke
parents:
diff changeset
   290
// Search for a specific tag in tag dictionary
90ce3da70b43 Initial load
duke
parents:
diff changeset
   291
// Returns position or -1 if tag not found
90ce3da70b43 Initial load
duke
parents:
diff changeset
   292
90ce3da70b43 Initial load
duke
parents:
diff changeset
   293
icInt32Number _cmsSearchTag(LPLCMSICCPROFILE Profile, icTagSignature sig, BOOL lSignalError)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   294
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   295
       icInt32Number i;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   296
90ce3da70b43 Initial load
duke
parents:
diff changeset
   297
       if (sig == 0) return -1;     // 0 identifies a special tag holding raw memory.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   298
90ce3da70b43 Initial load
duke
parents:
diff changeset
   299
       for (i=0; i < Profile -> TagCount; i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   300
90ce3da70b43 Initial load
duke
parents:
diff changeset
   301
              if (sig == Profile -> TagNames[i])
90ce3da70b43 Initial load
duke
parents:
diff changeset
   302
                            return i;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   303
       }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   304
90ce3da70b43 Initial load
duke
parents:
diff changeset
   305
       if (lSignalError)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   306
            cmsSignalError(LCMS_ERRC_ABORTED, "Tag '%lx' not found", sig);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   307
90ce3da70b43 Initial load
duke
parents:
diff changeset
   308
       return -1;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   309
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   310
90ce3da70b43 Initial load
duke
parents:
diff changeset
   311
90ce3da70b43 Initial load
duke
parents:
diff changeset
   312
// Check existance
90ce3da70b43 Initial load
duke
parents:
diff changeset
   313
90ce3da70b43 Initial load
duke
parents:
diff changeset
   314
BOOL LCMSEXPORT cmsIsTag(cmsHPROFILE hProfile, icTagSignature sig)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   315
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   316
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   317
       return _cmsSearchTag(Icc, sig, FALSE) >= 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   318
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   319
90ce3da70b43 Initial load
duke
parents:
diff changeset
   320
90ce3da70b43 Initial load
duke
parents:
diff changeset
   321
90ce3da70b43 Initial load
duke
parents:
diff changeset
   322
// Search for a particular tag, replace if found or add new one else
90ce3da70b43 Initial load
duke
parents:
diff changeset
   323
90ce3da70b43 Initial load
duke
parents:
diff changeset
   324
LPVOID _cmsInitTag(LPLCMSICCPROFILE Icc, icTagSignature sig, size_t size, const void* Init)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   325
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   326
    LPVOID Ptr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   327
    icInt32Number i;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   328
90ce3da70b43 Initial load
duke
parents:
diff changeset
   329
    i = _cmsSearchTag(Icc, sig, FALSE);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   330
90ce3da70b43 Initial load
duke
parents:
diff changeset
   331
    if (i >=0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   332
90ce3da70b43 Initial load
duke
parents:
diff changeset
   333
        if (Icc -> TagPtrs[i]) free(Icc -> TagPtrs[i]);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   334
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   335
    else  {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   336
90ce3da70b43 Initial load
duke
parents:
diff changeset
   337
        i = Icc -> TagCount;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   338
        Icc -> TagCount++;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   339
90ce3da70b43 Initial load
duke
parents:
diff changeset
   340
        if (Icc ->TagCount >= MAX_TABLE_TAG) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   341
90ce3da70b43 Initial load
duke
parents:
diff changeset
   342
            cmsSignalError(LCMS_ERRC_ABORTED, "Too many tags (%d)", MAX_TABLE_TAG);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   343
            Icc ->TagCount = MAX_TABLE_TAG-1;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   344
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   345
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   346
90ce3da70b43 Initial load
duke
parents:
diff changeset
   347
90ce3da70b43 Initial load
duke
parents:
diff changeset
   348
    Ptr = malloc(size);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   349
    CopyMemory(Ptr, Init, size);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   350
90ce3da70b43 Initial load
duke
parents:
diff changeset
   351
    Icc ->TagNames[i] = sig;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   352
    Icc ->TagSizes[i] = size;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   353
    Icc ->TagPtrs[i]  = Ptr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   354
90ce3da70b43 Initial load
duke
parents:
diff changeset
   355
    return Ptr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   356
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   357
90ce3da70b43 Initial load
duke
parents:
diff changeset
   358
90ce3da70b43 Initial load
duke
parents:
diff changeset
   359
90ce3da70b43 Initial load
duke
parents:
diff changeset
   360
90ce3da70b43 Initial load
duke
parents:
diff changeset
   361
90ce3da70b43 Initial load
duke
parents:
diff changeset
   362
// Creates a profile from file read placeholder
90ce3da70b43 Initial load
duke
parents:
diff changeset
   363
90ce3da70b43 Initial load
duke
parents:
diff changeset
   364
LPLCMSICCPROFILE _cmsCreateProfileFromFilePlaceholder(const char* FileName)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   365
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   366
    LPLCMSICCPROFILE NewIcc;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   367
    LPVOID ICCfile = FileOpen(FileName);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   368
90ce3da70b43 Initial load
duke
parents:
diff changeset
   369
    if (ICCfile == NULL) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   370
90ce3da70b43 Initial load
duke
parents:
diff changeset
   371
              cmsSignalError(LCMS_ERRC_ABORTED, "File '%s' not found", FileName);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   372
              return NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   373
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   374
90ce3da70b43 Initial load
duke
parents:
diff changeset
   375
    NewIcc = (LPLCMSICCPROFILE) _cmsCreateProfilePlaceholder();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   376
    if (NewIcc == NULL) return NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   377
90ce3da70b43 Initial load
duke
parents:
diff changeset
   378
    strncpy(NewIcc -> PhysicalFile, FileName, MAX_PATH-1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   379
    NewIcc ->stream = ICCfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   380
90ce3da70b43 Initial load
duke
parents:
diff changeset
   381
    NewIcc ->Read  = FileRead;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   382
    NewIcc ->Seek  = FileSeek;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   383
    NewIcc ->Tell  = FileTell;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   384
    NewIcc ->Close = FileClose;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   385
    NewIcc ->Write = NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   386
90ce3da70b43 Initial load
duke
parents:
diff changeset
   387
    NewIcc ->IsWrite = FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   388
90ce3da70b43 Initial load
duke
parents:
diff changeset
   389
90ce3da70b43 Initial load
duke
parents:
diff changeset
   390
90ce3da70b43 Initial load
duke
parents:
diff changeset
   391
90ce3da70b43 Initial load
duke
parents:
diff changeset
   392
    return NewIcc;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   393
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   394
90ce3da70b43 Initial load
duke
parents:
diff changeset
   395
90ce3da70b43 Initial load
duke
parents:
diff changeset
   396
// Creates a profile from memory read placeholder
90ce3da70b43 Initial load
duke
parents:
diff changeset
   397
90ce3da70b43 Initial load
duke
parents:
diff changeset
   398
LPLCMSICCPROFILE _cmsCreateProfileFromMemPlaceholder(LPVOID MemPtr, DWORD dwSize)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   399
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   400
90ce3da70b43 Initial load
duke
parents:
diff changeset
   401
    LPLCMSICCPROFILE NewIcc;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   402
    LPVOID ICCfile = MemoryOpen((LPBYTE) MemPtr, (size_t) dwSize, 'r');
90ce3da70b43 Initial load
duke
parents:
diff changeset
   403
90ce3da70b43 Initial load
duke
parents:
diff changeset
   404
90ce3da70b43 Initial load
duke
parents:
diff changeset
   405
    if (ICCfile == NULL) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   406
90ce3da70b43 Initial load
duke
parents:
diff changeset
   407
        cmsSignalError(LCMS_ERRC_ABORTED, "Couldn't allocate %ld bytes for profile", dwSize);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   408
        return NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   409
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   410
90ce3da70b43 Initial load
duke
parents:
diff changeset
   411
90ce3da70b43 Initial load
duke
parents:
diff changeset
   412
    NewIcc = (LPLCMSICCPROFILE) _cmsCreateProfilePlaceholder();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   413
    if (NewIcc == NULL) return NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   414
90ce3da70b43 Initial load
duke
parents:
diff changeset
   415
    NewIcc -> PhysicalFile[0] = 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   416
    NewIcc ->stream = ICCfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   417
90ce3da70b43 Initial load
duke
parents:
diff changeset
   418
    NewIcc ->Read  = MemoryRead;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   419
    NewIcc ->Seek  = MemorySeek;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   420
    NewIcc ->Tell  = MemoryTell;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   421
    NewIcc ->Close = MemoryClose;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   422
    NewIcc ->Write = NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   423
90ce3da70b43 Initial load
duke
parents:
diff changeset
   424
    NewIcc ->IsWrite = FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   425
90ce3da70b43 Initial load
duke
parents:
diff changeset
   426
90ce3da70b43 Initial load
duke
parents:
diff changeset
   427
    return NewIcc;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   428
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   429
90ce3da70b43 Initial load
duke
parents:
diff changeset
   430
90ce3da70b43 Initial load
duke
parents:
diff changeset
   431
// Turn a placeholder into file writter
90ce3da70b43 Initial load
duke
parents:
diff changeset
   432
90ce3da70b43 Initial load
duke
parents:
diff changeset
   433
void _cmsSetSaveToDisk(LPLCMSICCPROFILE Icc, const char* FileName)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   434
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   435
90ce3da70b43 Initial load
duke
parents:
diff changeset
   436
    if (FileName == NULL) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   437
90ce3da70b43 Initial load
duke
parents:
diff changeset
   438
          Icc ->stream = NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   439
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   440
    else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   441
90ce3da70b43 Initial load
duke
parents:
diff changeset
   442
          Icc ->stream = fopen(FileName, "wb");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   443
          if (Icc ->stream == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   444
                cmsSignalError(LCMS_ERRC_ABORTED, "Couldn't write to file '%s'", FileName);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   445
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   446
90ce3da70b43 Initial load
duke
parents:
diff changeset
   447
    Icc ->Write = FileWrite;   // Save to disk
90ce3da70b43 Initial load
duke
parents:
diff changeset
   448
    Icc ->Close = FileClose;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   449
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   450
90ce3da70b43 Initial load
duke
parents:
diff changeset
   451
90ce3da70b43 Initial load
duke
parents:
diff changeset
   452
90ce3da70b43 Initial load
duke
parents:
diff changeset
   453
// Turn a  placeholder into memory writter
90ce3da70b43 Initial load
duke
parents:
diff changeset
   454
90ce3da70b43 Initial load
duke
parents:
diff changeset
   455
void _cmsSetSaveToMemory(LPLCMSICCPROFILE Icc, LPVOID MemPtr, size_t dwSize)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   456
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   457
90ce3da70b43 Initial load
duke
parents:
diff changeset
   458
    if (MemPtr == NULL) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   459
90ce3da70b43 Initial load
duke
parents:
diff changeset
   460
        Icc ->stream = NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   461
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   462
    else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   463
90ce3da70b43 Initial load
duke
parents:
diff changeset
   464
        Icc ->stream = (FILEMEM*) MemoryOpen((LPBYTE) MemPtr, dwSize, 'w');
90ce3da70b43 Initial load
duke
parents:
diff changeset
   465
        if (Icc ->stream == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   466
                cmsSignalError(LCMS_ERRC_ABORTED, "Couldn't write to memory");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   467
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   468
90ce3da70b43 Initial load
duke
parents:
diff changeset
   469
    Icc ->Write = MemoryWrite;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   470
    Icc ->Close = MemoryClose;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   471
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   472
90ce3da70b43 Initial load
duke
parents:
diff changeset
   473
90ce3da70b43 Initial load
duke
parents:
diff changeset
   474
// ----------------------------------------------------------------------- Set/Get several struct members
90ce3da70b43 Initial load
duke
parents:
diff changeset
   475
90ce3da70b43 Initial load
duke
parents:
diff changeset
   476
90ce3da70b43 Initial load
duke
parents:
diff changeset
   477
90ce3da70b43 Initial load
duke
parents:
diff changeset
   478
90ce3da70b43 Initial load
duke
parents:
diff changeset
   479
BOOL LCMSEXPORT cmsTakeMediaWhitePoint(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   480
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   481
     LPLCMSICCPROFILE    Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   482
     *Dest = Icc -> MediaWhitePoint;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   483
     return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   484
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   485
90ce3da70b43 Initial load
duke
parents:
diff changeset
   486
90ce3da70b43 Initial load
duke
parents:
diff changeset
   487
BOOL LCMSEXPORT cmsTakeMediaBlackPoint(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   488
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   489
      LPLCMSICCPROFILE    Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   490
      *Dest = Icc -> MediaBlackPoint;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   491
      return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   492
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   493
90ce3da70b43 Initial load
duke
parents:
diff changeset
   494
BOOL  LCMSEXPORT cmsTakeIluminant(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   495
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   496
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   497
       *Dest = Icc -> Illuminant;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   498
       return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   499
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   500
90ce3da70b43 Initial load
duke
parents:
diff changeset
   501
int LCMSEXPORT cmsTakeRenderingIntent(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   502
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   503
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   504
       return (int) Icc -> RenderingIntent;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   505
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   506
90ce3da70b43 Initial load
duke
parents:
diff changeset
   507
void LCMSEXPORT cmsSetRenderingIntent(cmsHPROFILE hProfile, int RenderingIntent)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   508
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   509
    LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   510
    Icc -> RenderingIntent = (icRenderingIntent) RenderingIntent;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   511
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   512
90ce3da70b43 Initial load
duke
parents:
diff changeset
   513
90ce3da70b43 Initial load
duke
parents:
diff changeset
   514
DWORD LCMSEXPORT cmsTakeHeaderFlags(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   515
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   516
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   517
       return (DWORD) Icc -> flags;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   518
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   519
90ce3da70b43 Initial load
duke
parents:
diff changeset
   520
void LCMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, DWORD Flags)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   521
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   522
    LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   523
    Icc -> flags = (icUInt32Number) Flags;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   524
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   525
90ce3da70b43 Initial load
duke
parents:
diff changeset
   526
DWORD LCMSEXPORT cmsTakeHeaderAttributes(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   527
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   528
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   529
       return (DWORD) Icc -> attributes;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   530
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   531
90ce3da70b43 Initial load
duke
parents:
diff changeset
   532
void LCMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, DWORD Flags)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   533
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   534
    LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   535
    Icc -> attributes = (icUInt32Number) Flags;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   536
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   537
90ce3da70b43 Initial load
duke
parents:
diff changeset
   538
90ce3da70b43 Initial load
duke
parents:
diff changeset
   539
const BYTE* LCMSEXPORT cmsTakeProfileID(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   540
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   541
    LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   542
    return Icc ->ProfileID;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   543
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   544
90ce3da70b43 Initial load
duke
parents:
diff changeset
   545
void LCMSEXPORT cmsSetProfileID(cmsHPROFILE hProfile, LPBYTE ProfileID)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   546
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   547
    LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   548
    CopyMemory(Icc -> ProfileID, ProfileID, 16);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   549
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   550
90ce3da70b43 Initial load
duke
parents:
diff changeset
   551
90ce3da70b43 Initial load
duke
parents:
diff changeset
   552
BOOL LCMSEXPORT cmsTakeCreationDateTime(struct tm *Dest, cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   553
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   554
    LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   555
    CopyMemory(Dest, &Icc ->Created, sizeof(struct tm));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   556
    return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   557
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   558
90ce3da70b43 Initial load
duke
parents:
diff changeset
   559
90ce3da70b43 Initial load
duke
parents:
diff changeset
   560
icColorSpaceSignature LCMSEXPORT cmsGetPCS(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   561
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   562
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   563
       return Icc -> PCS;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   564
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   565
90ce3da70b43 Initial load
duke
parents:
diff changeset
   566
90ce3da70b43 Initial load
duke
parents:
diff changeset
   567
void LCMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, icColorSpaceSignature pcs)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   568
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   569
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   570
       Icc -> PCS = pcs;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   571
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   572
90ce3da70b43 Initial load
duke
parents:
diff changeset
   573
90ce3da70b43 Initial load
duke
parents:
diff changeset
   574
90ce3da70b43 Initial load
duke
parents:
diff changeset
   575
icColorSpaceSignature LCMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   576
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   577
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   578
       return Icc -> ColorSpace;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   579
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   580
90ce3da70b43 Initial load
duke
parents:
diff changeset
   581
90ce3da70b43 Initial load
duke
parents:
diff changeset
   582
90ce3da70b43 Initial load
duke
parents:
diff changeset
   583
void LCMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, icColorSpaceSignature sig)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   584
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   585
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   586
       Icc -> ColorSpace = sig;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   587
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   588
90ce3da70b43 Initial load
duke
parents:
diff changeset
   589
90ce3da70b43 Initial load
duke
parents:
diff changeset
   590
icProfileClassSignature LCMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   591
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   592
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   593
       return Icc -> DeviceClass;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   594
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   595
90ce3da70b43 Initial load
duke
parents:
diff changeset
   596
DWORD LCMSEXPORT cmsGetProfileICCversion(cmsHPROFILE hProfile)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   597
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   598
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   599
       return (DWORD) Icc -> Version;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   600
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   601
90ce3da70b43 Initial load
duke
parents:
diff changeset
   602
90ce3da70b43 Initial load
duke
parents:
diff changeset
   603
void LCMSEXPORT cmsSetProfileICCversion(cmsHPROFILE hProfile, DWORD Version)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   604
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   605
   LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   606
   Icc -> Version = Version;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   607
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   608
90ce3da70b43 Initial load
duke
parents:
diff changeset
   609
90ce3da70b43 Initial load
duke
parents:
diff changeset
   610
void LCMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, icProfileClassSignature sig)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   611
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   612
       LPLCMSICCPROFILE  Icc = (LPLCMSICCPROFILE) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   613
       Icc -> DeviceClass = sig;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   614
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   615
90ce3da70b43 Initial load
duke
parents:
diff changeset
   616
90ce3da70b43 Initial load
duke
parents:
diff changeset
   617
// --------------------------------------------------------------------------------------------------------------
90ce3da70b43 Initial load
duke
parents:
diff changeset
   618
90ce3da70b43 Initial load
duke
parents:
diff changeset
   619
90ce3da70b43 Initial load
duke
parents:
diff changeset
   620
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   621
int SizeOfGammaTab(LPGAMMATABLE In)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   622
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   623
       return sizeof(GAMMATABLE) + (In -> nEntries - 1)*sizeof(WORD);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   624
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   625
90ce3da70b43 Initial load
duke
parents:
diff changeset
   626
90ce3da70b43 Initial load
duke
parents:
diff changeset
   627
// Creates a phantom tag holding a memory block
90ce3da70b43 Initial load
duke
parents:
diff changeset
   628
90ce3da70b43 Initial load
duke
parents:
diff changeset
   629
static
90ce3da70b43 Initial load
duke
parents:
diff changeset
   630
LPVOID DupBlock(LPLCMSICCPROFILE Icc, LPVOID Block, size_t size)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   631
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   632
    if (Block != NULL && size > 0)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   633
        return _cmsInitTag(Icc, (icTagSignature) 0, size, Block);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   634
    else
90ce3da70b43 Initial load
duke
parents:
diff changeset
   635
        return NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   636
90ce3da70b43 Initial load
duke
parents:
diff changeset
   637
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   638
90ce3da70b43 Initial load
duke
parents:
diff changeset
   639
// This is tricky, since LUT structs does have pointers
90ce3da70b43 Initial load
duke
parents:
diff changeset
   640
90ce3da70b43 Initial load
duke
parents:
diff changeset
   641
BOOL LCMSEXPORT _cmsAddLUTTag(cmsHPROFILE hProfile, icTagSignature sig, const void* lut)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   642
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   643
       LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   644
       LPLUT Orig, Stored;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   645
       unsigned int i;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   646
90ce3da70b43 Initial load
duke
parents:
diff changeset
   647
       // The struct itself
90ce3da70b43 Initial load
duke
parents:
diff changeset
   648
90ce3da70b43 Initial load
duke
parents:
diff changeset
   649
       Orig   = (LPLUT) lut;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   650
       Stored = (LPLUT) _cmsInitTag(Icc, (icTagSignature) sig, sizeof(LUT), lut);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   651
90ce3da70b43 Initial load
duke
parents:
diff changeset
   652
       // dup' the memory blocks
90ce3da70b43 Initial load
duke
parents:
diff changeset
   653
       for (i=0; i < Orig ->InputChan; i++)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   654
            Stored -> L1[i] = (LPWORD) DupBlock(Icc, (LPWORD) Orig ->L1[i],
90ce3da70b43 Initial load
duke
parents:
diff changeset
   655
                                            sizeof(WORD) * Orig ->In16params.nSamples);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   656
90ce3da70b43 Initial load
duke
parents:
diff changeset
   657
       for (i=0; i < Orig ->OutputChan; i++)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   658
            Stored -> L2[i] = (LPWORD) DupBlock(Icc, (LPWORD) Orig ->L2[i],
90ce3da70b43 Initial load
duke
parents:
diff changeset
   659
                                            sizeof(WORD) * Orig ->Out16params.nSamples);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   660
90ce3da70b43 Initial load
duke
parents:
diff changeset
   661
       Stored -> T     = (LPWORD) DupBlock(Icc, (LPWORD) Orig ->T, Orig -> Tsize);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   662
90ce3da70b43 Initial load
duke
parents:
diff changeset
   663
       // Zero any additional pointer
90ce3da70b43 Initial load
duke
parents:
diff changeset
   664
       Stored ->CLut16params.p8 = NULL;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   665
       return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   666
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   667
90ce3da70b43 Initial load
duke
parents:
diff changeset
   668
90ce3da70b43 Initial load
duke
parents:
diff changeset
   669
BOOL LCMSEXPORT _cmsAddXYZTag(cmsHPROFILE hProfile, icTagSignature sig, const cmsCIEXYZ* XYZ)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   670
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   671
       LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   672
90ce3da70b43 Initial load
duke
parents:
diff changeset
   673
       _cmsInitTag(Icc, sig, sizeof(cmsCIEXYZ), XYZ);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   674
       return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   675
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   676
90ce3da70b43 Initial load
duke
parents:
diff changeset
   677
90ce3da70b43 Initial load
duke
parents:
diff changeset
   678
BOOL LCMSEXPORT _cmsAddTextTag(cmsHPROFILE hProfile, icTagSignature sig, const char* Text)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   679
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   680
       LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   681
90ce3da70b43 Initial load
duke
parents:
diff changeset
   682
       _cmsInitTag(Icc, sig, strlen(Text)+1, (LPVOID) Text);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   683
       return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   684
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   685
90ce3da70b43 Initial load
duke
parents:
diff changeset
   686
BOOL LCMSEXPORT _cmsAddGammaTag(cmsHPROFILE hProfile, icTagSignature sig, LPGAMMATABLE TransferFunction)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   687
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   688
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   689
90ce3da70b43 Initial load
duke
parents:
diff changeset
   690
    _cmsInitTag(Icc, sig, SizeOfGammaTab(TransferFunction), TransferFunction);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   691
    return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   692
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   693
90ce3da70b43 Initial load
duke
parents:
diff changeset
   694
90ce3da70b43 Initial load
duke
parents:
diff changeset
   695
BOOL LCMSEXPORT _cmsAddChromaticityTag(cmsHPROFILE hProfile, icTagSignature sig, LPcmsCIExyYTRIPLE Chrm)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   696
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   697
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   698
90ce3da70b43 Initial load
duke
parents:
diff changeset
   699
    _cmsInitTag(Icc, sig, sizeof(cmsCIExyYTRIPLE), Chrm);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   700
    return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   701
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   702
90ce3da70b43 Initial load
duke
parents:
diff changeset
   703
90ce3da70b43 Initial load
duke
parents:
diff changeset
   704
BOOL LCMSEXPORT _cmsAddSequenceDescriptionTag(cmsHPROFILE hProfile, icTagSignature sig, LPcmsSEQ pseq)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   705
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   706
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   707
90ce3da70b43 Initial load
duke
parents:
diff changeset
   708
    _cmsInitTag(Icc, sig, sizeof(int) + pseq -> n * sizeof(cmsPSEQDESC), pseq);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   709
    return TRUE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   710
90ce3da70b43 Initial load
duke
parents:
diff changeset
   711
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   712
90ce3da70b43 Initial load
duke
parents:
diff changeset
   713
90ce3da70b43 Initial load
duke
parents:
diff changeset
   714
BOOL LCMSEXPORT _cmsAddNamedColorTag(cmsHPROFILE hProfile, icTagSignature sig, LPcmsNAMEDCOLORLIST nc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   715
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   716
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   717
90ce3da70b43 Initial load
duke
parents:
diff changeset
   718
    _cmsInitTag(Icc, sig, sizeof(cmsNAMEDCOLORLIST) + (nc ->nColors - 1) * sizeof(cmsNAMEDCOLOR), nc);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   719
    return FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   720
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   721
90ce3da70b43 Initial load
duke
parents:
diff changeset
   722
90ce3da70b43 Initial load
duke
parents:
diff changeset
   723
BOOL LCMSEXPORT _cmsAddDateTimeTag(cmsHPROFILE hProfile, icTagSignature sig, struct tm *DateTime)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   724
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   725
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   726
90ce3da70b43 Initial load
duke
parents:
diff changeset
   727
    _cmsInitTag(Icc, sig, sizeof(struct tm), DateTime);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   728
    return FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   729
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   730
90ce3da70b43 Initial load
duke
parents:
diff changeset
   731
90ce3da70b43 Initial load
duke
parents:
diff changeset
   732
BOOL LCMSEXPORT _cmsAddColorantTableTag(cmsHPROFILE hProfile, icTagSignature sig, LPcmsNAMEDCOLORLIST nc)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   733
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   734
    LPLCMSICCPROFILE Icc = (LPLCMSICCPROFILE) (LPSTR) hProfile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   735
90ce3da70b43 Initial load
duke
parents:
diff changeset
   736
    _cmsInitTag(Icc, sig, sizeof(cmsNAMEDCOLORLIST) + (nc ->nColors - 1) * sizeof(cmsNAMEDCOLOR), nc);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   737
    return FALSE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   738
}