Update of /cvsroot/ufraw/ufraw
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv5891

Modified Files:
        nikon_curve.c nikon_curve.h ufraw_routines.c 
Log Message:
Have only interface definitions in nikon_curve.h header file.


Index: nikon_curve.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/nikon_curve.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- nikon_curve.c       23 Oct 2009 13:50:08 -0000      1.34
+++ nikon_curve.c       2 Dec 2009 02:57:22 -0000       1.35
@@ -15,12 +15,25 @@
 
 ****************************************************/
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <errno.h>
-#include <stdarg.h> /* For variable argument lists */
+//////////////////////////////////////////
+//COMPILER CONTROLS
+//////////////////////////////////////////
+//Undef this if you don't want to use the stand-alone program
+//This is mainly for debugging purposes
+//#define _STAND_ALONE_
+
+//Define this if you are using Microsoft Visual C++. This enables code to
+//deal with the fact the MSVC does not support variable argument macros.
+//#define __MSVC__
+
+//the only remaining incompatibility between MSVC and gcc
+#ifdef __MSVC__
+    #define vsnprintf _vsnprintf
+#endif
+
+//Define this if using with UFRaw
+#define __WITH_UFRAW__
+
 #include "nikon_curve.h"
 
 #ifdef __WITH_UFRAW__
@@ -31,6 +44,270 @@
     #define MIN(a,b) ((a) < (b) ? (a) : (b))
     #define g_fopen fopen
 #endif
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <errno.h>
+#include <stdarg.h> /* For variable argument lists */
+
+/*************************************************
+ * Internal static functions
+ *************************************************/
+
+/************************************************************
+nc_message:
+  The Nikon Curve message handler.
+
+  code - Message code
+  format - The message to format
+  ... - variable arguments
+**************************************************************/
+static void nc_message(int code, char *format, ...);
+
+static void DEBUG_PRINT(char *format, ...);
+
+/*******************************************************************
+ d3_np_fs:
+   Helper function for calculating and storing tridiagnol matrices.
+   Cubic spline calculations involve these types of matrices.
+*********************************************************************/
+static double *d3_np_fs(int n, double a[], double b[]);
+
+/*******************************************************************
+ spline_cubic_set:
+   spline_cubic_set gets the second derivatives for the curve to be used in
+   spline construction
+
+    n = number of control points
+    t[] = x array
+    y[] = y array
+    ibcbeg = initial point condition (see function notes).
+    ybcbeg = beginning value depending on above flag
+    ibcend = end point condition (see function notes).
+    ybcend = end value depending on above flag
+
+    returns the y value at the given tval point
+*********************************************************************/
+static double *spline_cubic_set(int n, double t[], double y[], int ibcbeg,
+    double ybcbeg, int ibcend, double ybcend);
+
+/*******************************************************************
+ spline_cubic_val:
+   spline_cubic_val gets a value from spline curve.
+
+    n = number of control points
+    t[] = x array
+    tval = x value you're requesting the data for, can be anywhere on the 
interval.
+    y[] = y array
+    ypp[] = second derivative array calculated by spline_cubic_set
+    ypval = first derivative value of requested point
+    yppval = second derivative value of requested point
+
+    returns the y value at the given tval point
+*********************************************************************/
+static double spline_cubic_val(int n, double t[], double tval, double y[],
+    double ypp[], double *ypval, double *yppval);
+
+/************************************************************
+SaveNikonCurveFile:
+    Saves out curves to a Nikon ntc or ncv file. This function
+    takes a single curve and uses defaults for the other curves.
+    Typically, the curve used is the tone curve.
+
+    curve        - A NikonCurve structure. This is usually the tone curve
+    curve_type    - The curve type (TONE_CURVE, RED_CURVE, etc.)
+    fileName    - The filename.
+    filetype    - Indicator for an NCV or NTC file.
+
+NOTE:    The only version tested is Nikon 4.1 anything
+       other than this may result in unpredictable behavior.
+       For now, the version passed in is ignored and is forced
+       to 4.1.
+
+       This function is just a helper function that allows the user
+       to just carry around a single curve.
+**************************************************************/
+#ifdef _STAND_ALONE_
+static int SaveNikonCurveFile(CurveData *curve, int curve_type, char *outfile,
+       int filetype);
+#endif
+
+/*********************************************
+SaveSampledNikonCurve:
+    Saves a sampling from a curve to text file to
+    be processed by UFRaw.
+
+    sample        - Pointer to the sampled curve.
+    fileName    - The filename.
+**********************************************/
+#ifdef _STAND_ALONE_
+static int SaveSampledNikonCurve(CurveSample *sample, char *outfile);
+#endif
+
+/*****************************************************
+FindTIFFOffset:
+    Moves the file pointer to the location
+    indicated by the TAG-TYPE pairing. This is meant just
+    as a helper function for this code. Uses elsewhere
+    may be limited.
+
+    file    - Nikon File ptr
+    num_entries - Number of entries to search through
+    tiff_tag - The tiff tag to match.
+    tiff_type - The tiff type to match.
+*******************************************************/
+#ifdef _STAND_ALONE_
+static int FindTIFFOffset(FILE *file, unsigned short num_entries,
+       unsigned short tiff_tag, unsigned short tiff_type);
+#endif
+
+/****************************************************
+SampleToCameraCurve:
+    Transforms the curve generated by sampling the
+    spline interpolator into the curve that is used by
+    the camera.
+
+    This is a special function. While the function places
+    no special restrictions on sampling resolution or
+    output resolution, it should be noted that Nikon D70
+    camera curve is 4096 entries of 0-255.
+
+    If you intend on using this function as such, you should
+    set the sampling resolution and output resolution
+    accordingly.
+
+    curve - The Nikon curve to sample and transform.
+*****************************************************/
+#ifdef _STAND_ALONE_
+static int SampleToCameraCurve(CurveData *curve, CurveSample *sample);
+#endif
+
+/****************************************
+ConvertNikonCurveData:
+    The main driver. Takes a filename and
+    processes the curve, if possible.
+
+    fileName    -    The file to process.
+*****************************************/
+#ifdef _STAND_ALONE_
+static int ConvertNikonCurveData(char *inFileName, char *outFileName,
+       unsigned int samplingRes, unsigned int outputRes);
+#endif
+
+/*******************************************************
+RipNikonNEFData:
+    Gets Nikon NEF data. For now, this is just the tone
+    curve data. This is more of a helper function for running
+    in stand-alone. This function basically finds the correct
+    file offset, and then calls RipNikonNEFCurve.
+
+    infile - The input file
+    curve  - data structure to hold data in.
+    sample_p -  pointer to the curve sample reference.
+               can be NULL if curve sample is not needed.
+********************************************************/
+#ifdef _STAND_ALONE_
+static int RipNikonNEFData(char *infile, CurveData *data,
+       CurveSample **sample_p);
+#endif
+
+/*******************************************************************************
+Information regarding the file format.
+
+Section Headers:
+
+Order of Box Data: Left x, Right x, Midpoint x (gamma), Bottom y, Top y
+
+Order of Anchor Data: Start x, Start y, Anchor 1 x, Anchor 1 y, ... , End x, 
End y
+
+Anchor Point Data: This is aligned on 8 byte boundries. However, the section 
must
+                   end on a 16 byte boundary, which means an 8 byte pad is 
added.
+********************************************************************************/
+
+//DEFINES FOR WRITING OUT DATA (for ntc/ncv files)
+#define NCV_HEADER_SIZE                    0x3E    //Combined header length 
for an NCV file
+#define NCV_SECOND_FILE_SIZE_OFFSET 0x3F    //4 bytes (int). File size - 
NCV_header
+#define NCV_UNKNOWN_HEADER_DATA            0x002    //2 bytes. (?)
+#define NCV_SECOND_HEADER_LENGTH    23
+#define NCV_FILE_TERMINATOR_LENGTH  23
+
+#define NTC_FILE_HEADER_LENGTH     0x10    //16 bytes. Doesn't change
+//This seemed to change when Nikon released an updated capture program
+//from 4.1 to 4.2. This may be an int but not sure.
+#define NCV_PATCH_OFFSET            0x3D    //2 bytes(?)
+#define NTC_PATCH_OFFSET            0x10    //2 bytes(?)
+#define FILE_SIZE_OFFSET            0x12    //4 bytes (int). File size - 
header.
+#define NTC_VERSION_OFFSET          0x16    //4 bytes (int).(?)
+                                           //9 byte pad(?)
+                                           //16 bytes. Another section header 
goes here.
+
+//From here down repeats for every section
+#define NTC_SECTION_TYPE_OFFSET            0x00    //4 bytes (int) (0,1,2,3)
+
+#define NTC_UNKNOWN                0x05    //2 bytes. Doesn't change but not 
sure what they do (0x03ff)
+#define NTC_UNKNOWN_DATA            0x3FF    //
+
+#define NTC_RED_COMPONENT_OFFSET    0x08    //4 bytes (int) (0-255)
+#define NTC_GREEN_COMPONENT_OFFSET  0x0C    //4 bytes (int) (0-255)
+#define NTC_BLUE_COMPONENT_OFFSET   0x0F    //4 bytes (int) (0-255)
+                                           //12 byte pad all zeros(align to 
16?)
+
+#define NTC_RED_WEIGHT_OFFSET      0x1F    //4 bytes (int) (0-255)
+#define NTC_GREEN_WEIGHT_OFFSET            0x23    //4 bytes (int)    (0-255)
+#define NTC_BLUE_WEIGHT_OFFSET     0x27    //4 bytes (int)    (0-255)
+
+#define END_ANCHOR_DATA_PAD_LENGTH  0x08    //Always all zeros
+#define NTC_SECTION_HEADER_LENGTH   0x10    //Doesn't change
+
+
+//DEFINES FOR READING IN DATA
+#define HEADER_SIZE                0x10    //First characters may be unicode 
Japanese?
+
+#define NTC_BOX_DATA               0x5C    //Start of box data
+#define NTC_NUM_ANCHOR_POINTS      0x84    //Number of anchor points plus 2 
for start and end points
+#define NTC_ANCHOR_DATA_START      0x88    //Beginning of anchor point data
+
+#define NCV_BOX_DATA               0x89    //Start of box data
+#define NCV_NUM_ANCHOR_POINTS      0xB2    //Number of anchor points plus 2 
for start and end points
+#define NCV_ANCHOR_DATA_START      0xB5    //Beginning of anchor point data
+
+//array indices to retrive data
+#define PATCH_DATA         0
+#define BOX_DATA           1
+#define NUM_ANCHOR_POINTS   2
+#define ANCHOR_DATA        3
+
+//Some data sections sizes for calculating offsets
+#define NEXT_SECTION_BOX_DATA_OFFSET   0x43    //after the anchor data, this 
is the offset to
+                                               //the beginning of the next 
section's box data
+
+#define NUM_POINTS_TO_ANCHOR_OFFSET    0x03    //number of bytes from the 
number of anchor points
+                                               //byte to the start of anchor 
data.
+//Nikon version defines
+#define NIKON_VERSION_4_1   0x00000401
+#define NIKON_PATCH_4       0x04ff
+#define NIKON_PATCH_5       0x05ff
+
+//Maximum resoltuion allowed due to space considerations.
+#define MAX_RESOLUTION    65536
+
+//////////////////////////////
+//NEF/TIFF MACROS AND DEFINES
+//////////////////////////////
+#define TIFF_TAG_EXIF_OFFSET        34665
+#define TIFF_TAG_MAKER_NOTE_OFFSET  37500
+#define TIFF_TAG_CURVE_OFFSET       140
+
+#define TIFF_TYPE_UNDEFINED         7
+#define TIFF_TYPE_LONG             4
+
+//Flags used to determine what file we're trying to process.
+//Should only be used in standalone mode.
+#ifdef _STAND_ALONE_
+#define CURVE_MODE  0
+#define NEF_MODE    1
+#endif
 
 /*************************************************
  * Internal static data
@@ -89,7 +366,7 @@
     Convenient function for processing the args
     for the test runner.
 ********************************************/
-int ProcessArgs(int num_args, char *args[])
+static int ProcessArgs(int num_args, char *args[])
 {
     exportFilename[0] = '\0';
     nikonFilename[0] = '\0';
@@ -180,7 +457,7 @@
   code - Message code
   message - The message
 **************************************************************/
-void nc_message(int code, char *format, ...)
+static void nc_message(int code, char *format, ...)
 {
     char message[256];
     va_list ap;
@@ -219,7 +496,7 @@
 #endif //End STAND_ALONE
 }
 
-void DEBUG_PRINT(char *format, ...)
+static void DEBUG_PRINT(char *format, ...)
 {
 #ifdef _DEBUG
     va_list ap;
@@ -233,7 +510,7 @@
 }
 
 /* nc_merror(): Handle memory allocaltion errors */
-void nc_merror(void *ptr, char *where)
+static void nc_merror(void *ptr, char *where)
 {
     if (ptr) return;
 #ifdef __WITH_UFRAW__
@@ -244,7 +521,7 @@
 #endif
 }
 
-size_t nc_fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
+static size_t nc_fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
 {
     size_t num = fread(ptr, size, nmemb, stream);
     if ( num!=nmemb )
@@ -252,7 +529,7 @@
     return num;
 }
 
-size_t nc_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
+static size_t nc_fwrite(const void *ptr, size_t size, size_t nmemb, FILE 
*stream)
 {
     size_t num = fwrite(ptr, size, nmemb, stream);
     if ( num!=nmemb )
@@ -269,7 +546,7 @@
 isBigEndian:
        Determines if the machine we are running on is big endian or not.
 ************************************************************************/
-int isBigEndian()
+static int isBigEndian()
 {
     STATIC_ASSERT(sizeof(short)==2);
     union {
@@ -287,7 +564,7 @@
 ShortVal:
        Convert short int (16 bit) from little endian to machine endianess.
 ************************************************************************/
-short ShortVal(short s)
+static short ShortVal(short s)
 {
     STATIC_ASSERT(sizeof(short)==2);
     if (isBigEndian()) {
@@ -305,7 +582,7 @@
 LongVal:
        Convert long int (32 bit) from little endian to machine endianess.
 ************************************************************************/
-int LongVal(int i)
+static int LongVal(int i)
 {
     STATIC_ASSERT(sizeof(int)==4);
     if (isBigEndian()) {
@@ -322,33 +599,10 @@
 }
 
 /***********************************************************************
-FloatVal:
-       Convert float from little endian to machine endianess.
-************************************************************************/
-float FloatVal(float f)
-{
-    STATIC_ASSERT(sizeof(float)==4);
-    if (isBigEndian()) {
-       union {
-           float f;
-           unsigned char b[4];
-       } dat1, dat2;
-
-       dat1.f = f;
-       dat2.b[0] = dat1.b[3];
-       dat2.b[1] = dat1.b[2];
-       dat2.b[2] = dat1.b[1];
-       dat2.b[3] = dat1.b[0];
-       return dat2.f;
-    } else
-       return f;
-}
-
-/***********************************************************************
 DoubleVal:
        Convert double from little endian to machine endianess.
 ************************************************************************/
-double DoubleVal(double d)
+static double DoubleVal(double d)
 {
     STATIC_ASSERT(sizeof(double)==8);
     if (isBigEndian()) {
@@ -420,8 +674,7 @@
 //    This is NULL if there was an error because one of the diagonal
 //    entries was zero.
 //
-double *d3_np_fs ( int n, double a[], double b[] )
-
+static double *d3_np_fs(int n, double a[], double b[])
 {
   int i;
   double *x;
@@ -571,8 +824,8 @@
 //
 //    Output, double SPLINE_CUBIC_SET[N], the second derivatives of the cubic 
spline.
 //
-double *spline_cubic_set ( int n, double t[], double y[], int ibcbeg,
-    double ybcbeg, int ibcend, double ybcend )
+static double *spline_cubic_set(int n, double t[], double y[], int ibcbeg,
+    double ybcbeg, int ibcend, double ybcend)
 {
   double *a;
   double *b;
@@ -759,8 +1012,8 @@
 //
 //    Output, double SPLINE_VAL, the value of the spline at TVAL.
 //
-double spline_cubic_val ( int n, double t[], double tval, double y[],
-       double ypp[], double *ypval, double *yppval )
+static double spline_cubic_val(int n, double t[], double tval, double y[],
+       double ypp[], double *ypval, double *yppval)
 {
   double dt;
   double h;
@@ -811,7 +1064,7 @@
 
   file - The file to check.
 **********************************************/
-int GetNikonFileType(FILE *file)
+static int GetNikonFileType(FILE *file)
 {
     unsigned char buff[HEADER_SIZE];
     int i = 0, j = 0;
@@ -1195,10 +1448,11 @@
 
     curve - The Nikon curve to sample and transform.
 *****************************************************/
+#ifdef _STAND_ALONE_
 #define CAMERA_LINEAR_CURVE_SLOPE 0.26086956521739130434782608695652
 #define CAMERA_LINEAR_LIMIT ((276.0/4096.0)*65536.0)
 
-int SampleToCameraCurve(CurveData *curve, CurveSample *sample)
+static int SampleToCameraCurve(CurveData *curve, CurveSample *sample)
 {
     unsigned int i = 0;
 
@@ -1327,6 +1581,7 @@
     free(ypp);
     return NC_SUCCESS;
 }
+#endif
 
 /************************************************************
 SaveNikonDataFile:
@@ -1335,9 +1590,8 @@
     data        - A NikonData structure containing info of all the curves.
     fileName    - The filename.
     filetype    - Indicator for an NCV or NTC file.
-    version        - The version of the Nikon file to write
 **************************************************************/
-int SaveNikonDataFile(NikonData *data, char *outfile, int filetype, int 
version)
+int SaveNikonDataFile(NikonData *data, char *outfile, int filetype)
 {
     FILE *output = NULL;
     int i = 0,r = 0,g = 0,b = 0;
@@ -1345,7 +1599,6 @@
     unsigned int long_tmp = 0;
     double double_tmp = 0;
     CurveData *curve = NULL;
-    version = version;
 
     //used for file padding
     unsigned char pad[32];
@@ -1614,7 +1867,6 @@
     curve_type    - The curve type (TONE_CURVE, RED_CURVE, etc.)
     fileName    - The filename.
     filetype    - Indicator for an NCV or NTC file.
-    version        - The version of the Nikon file to write
 
 NOTE:    The only version tested is Nikon 4.1 anything
        other than this may result in unpredictable behavior.
@@ -1624,8 +1876,9 @@
        This function is just a helper function that allows the user
        to just carry around a single curve.
 **************************************************************/
-int SaveNikonCurveFile(CurveData *curve, int curve_type, char *outfile,
-       int filetype, int version)
+#ifdef _STAND_ALONE_
+static int SaveNikonCurveFile(CurveData *curve, int curve_type, char *outfile,
+       int filetype)
 {
     NikonData data;
     //clear the structure
@@ -1633,8 +1886,9 @@
     //assume that it's the tone curve
     data.curves[curve_type] = *curve;
     //call the work horse
-    return SaveNikonDataFile(&data, outfile, filetype, version);
+    return SaveNikonDataFile(&data, outfile, filetype);
 }
+#endif
 
 /*********************************************
 SaveSampledNikonCurve:
@@ -1644,7 +1898,8 @@
     sample      - Pointer to sampled curve struct to hold the data.
     fileName    - The filename.
 **********************************************/
-int SaveSampledNikonCurve(CurveSample *sample, char *outfile)
+#ifdef _STAND_ALONE_
+static int SaveSampledNikonCurve(CurveSample *sample, char *outfile)
 {
     unsigned int i = 0;
     FILE *output = NULL;
@@ -1690,6 +1945,7 @@
     fclose(output);
     return NC_SUCCESS;
 }
+#endif
 
 /*******************************************************
 CurveSampleInit:
@@ -1737,7 +1993,8 @@
 
     fileName    -    The file to process.
 *****************************************/
-int ConvertNikonCurveData(char *inFileName, char *outFileName,
+#ifdef _STAND_ALONE_
+static int ConvertNikonCurveData(char *inFileName, char *outFileName,
     unsigned int samplingRes, unsigned int outputRes)
 {
     //Load the curve data from the ncv/ntc file
@@ -1816,6 +2073,7 @@
 
     return NC_SUCCESS;
 }
+#endif
 
 /*****************************************************
 FindTIFFOffset:
@@ -1829,7 +2087,9 @@
     tiff_tag - The tiff tag to match.
     tiff_type - The tiff type to match.
 *******************************************************/
-int FindTIFFOffset(FILE *file, unsigned short num_entries, unsigned short 
tiff_tag, unsigned short tiff_type)
+#ifdef _STAND_ALONE_
+static int FindTIFFOffset(FILE *file, unsigned short num_entries,
+       unsigned short tiff_tag, unsigned short tiff_type)
 {
     unsigned short tag = 0;
     unsigned short type = 0;
@@ -1862,6 +2122,7 @@
     }
     return 0; //false;
 }
+#endif
 
 /*******************************************************
 RipNikonNEFData:
@@ -1873,7 +2134,9 @@
     sample_p - pointer to the curve sample reference.
                can be NULL if curve sample is not needed.
 ********************************************************/
-int RipNikonNEFData(char *infile, CurveData *data, CurveSample **sample_p)
+#ifdef _STAND_ALONE_
+static int RipNikonNEFData(char *infile, CurveData *data,
+       CurveSample **sample_p)
 {
     unsigned short byte_order = 0;
     unsigned short num_entries = 0;
@@ -2004,7 +2267,7 @@
     offset = ftell(file);
     return RipNikonNEFCurve(file, offset+pos, data, sample_p);
 }
-
+#endif
 
 /*******************************************************
 RipNikonNEFCurve:
@@ -2017,7 +2280,7 @@
     sample_p - pointer to the curve sample reference.
                can be NULL if curve sample is not needed.
 ********************************************************/
-int RipNikonNEFCurve(FILE *file, int offset, CurveData *data,
+int RipNikonNEFCurve(void *file, int offset, CurveData *data,
        CurveSample **sample_p)
 {
     int i;
@@ -2154,14 +2417,14 @@
            }
 
            if (SaveNikonCurveFile(&data.curves[TONE_CURVE], TONE_CURVE,
-                               "outcurve.ncv",NCV_FILE, NIKON_VERSION_4_1))
+                               "outcurve.ncv",NCV_FILE))
            {
                CurveSampleFree(sample);
                return NC_ERROR;
            }
 
            //This can also be used
-           if (SaveNikonDataFile(&data,"outcurve2.ncv",NCV_FILE, 
NIKON_VERSION_4_1))
+           if (SaveNikonDataFile(&data,"outcurve2.ncv",NCV_FILE))
            {
                CurveSampleFree(sample);
                return NC_ERROR;

Index: ufraw_routines.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_routines.c,v
retrieving revision 1.102
retrieving revision 1.103
diff -u -d -r1.102 -r1.103
--- ufraw_routines.c    24 May 2009 08:15:05 -0000      1.102
+++ ufraw_routines.c    2 Dec 2009 02:57:22 -0000       1.103
@@ -454,8 +454,8 @@
 
        data.curves[TONE_CURVE] = *cp;
 
-       if (SaveNikonDataFile(&data, filename, nikon_file_type,
-                           NIKON_VERSION_4_1)!=UFRAW_SUCCESS) {
+       if (SaveNikonDataFile(&data, filename, nikon_file_type)
+               != UFRAW_SUCCESS) {
            ufraw_message(UFRAW_ERROR, _("Invalid Nikon curve file '%s'"),
                        filename);
            return UFRAW_ERROR;

Index: nikon_curve.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/nikon_curve.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- nikon_curve.h       16 Dec 2008 12:15:06 -0000      1.14
+++ nikon_curve.h       2 Dec 2009 02:57:22 -0000       1.15
@@ -1,7 +1,7 @@
 /***************************************************
  nikon_curve.h - read Nikon NTC/NCV files
 
- Copyright 2004-2008 by Shawn Freeman, Udi Fuchs
+ Copyright 2004-2009 by Shawn Freeman, Udi Fuchs
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -12,243 +12,21 @@
 
 /***************************************************
 
-  This program reads in a Nikon NTC/NCV file, 
+  This program reads in a Nikon NTC/NCV file,
   interperates it's tone curve, and writes out a
   simple ascii file containing a table of interpolation
   values.
 
-  You'll note that this has been written in way that can be used in a 
standalone program or
-  incorporated into another program. You can use the functions seperately or
-  you can just call ConvertNikonCurveData with an input and output file.
+  You'll note that this has been written in way that can be used in a
+  standalone program or incorporated into another program. You can use the
+  functions seperately or you can just call ConvertNikonCurveData with
+  an input and output file.
 
-  I've tried to document the code as clearly as possible. Let me know if you 
+  I've tried to document the code as clearly as possible. Let me know if you
   have any problems!
 
-  Thanks goes out to Udi Fuchs for wanting to incorporate nikon curve loading 
into his program.
-  This will make GIMP just that much better. :)
-
-  NOTES:
-  08/06/2005 (Shawn Freeman)
-    The last endian fix would not have worked correctly. The new fix should 
correct the
-    endianess problem.
-
-    The fix uses a new function DetermineEndianess to assign function pointers 
the correct
-    swapping function based on the endianess of the machine.
-
-    For programs that use this code on big endian machines, it is important 
that this function
-    be called. So for now, each function that reads or writes data to a file 
will call this
-    function.
-
-
-  07/27/2005 (Shawn Freeman)
-       Someone discovered the dreaded endianess bug. NTC and NCV files are 
written in little-endian
-       format, so when a Mac (or other big endian machine) tries to read in 
the file it blows up.
-
-       There doesn't appear to be a way to determine the endianess of a 
machine a runtime (at
-       least not in an ANSI compliant way). The solution? Custom read and 
write functions that
-       can handle the endianess.
-
-       The ENDIANESS define can be set to either LITTLE_ENDIAN (compiles code 
for little endian
-       machines), BIG_ENDIAN (compiles code for big endian machines), or 
UNKNOWN_ENDIAN (compiles
-       code that dynamically determines endianess and runs appropriate code).
-
-       Performance isn't much of an issues since files are small, but it is 
more efficient
-       to compile with the endianess set than to leave it at unknown.
-
-       Unfortunately, I don't have a way to test this code. But it should do 
the trick.
-
-  06/20/2005 (Udi Fuchs)
-       Added the function CurveDataReset()
-
-  06/14/2005 (Udi Fuchs)
-       Added the function CurveDataSetPoint()
-
-  06/13/2005 (Shawn Freeman)
-    Added a couple of explicit casts to keep some compilers from complaining.
-    At this point, I'd say this code is decent enough to classified as 1.0. 
Right now
-    there are no outstanding bugs left that I am aware of. The code has been 
fairly well
-    documented and has a significant amount of error checking built in.
-
-    There are still some experimental code in here that could be removed, 
along with options
-    for compiling on differnt compilers.
-
-    I don't have as much time as I used to have, due to a new baby and 
everything.But
-    I should still have time to do some tweaks, features, and fixes if 
necessary.
-
-  Enjoy!
-
-  06/10/2005 (Udi Fuchs)
-       Removed the name "Nikon" from general structures/functions
-       NikonAnchorPoint -> CurveAnchorPoint
-       NikonCurve -> CurveData
-       SampleNikonCurve() -> CurveDataSample()
-       FreeNikonCurve() -> CurveSampleFree()
-       Moved the sampling data to the CurveSample structure, now nikon_curve
-       and UFRaw can use the sampel CurveData structure.
-       Removed unused functions RemoveRedundantData(), ResampleNEFCurve()
-       Curve sampling changed - the curve before first point and after
-       the last point is flattened.
-       
-  04/16/2005 Removed malloc calls and replaced them with fixed arrays. The 
Nikon camera
-           does not support any more than 20 anchors for their curve. This 
speeds up the
-           code a little bit.
-
-           This version also supports the latest version of the NTC/NCV file 
format.
-
-  03/18/2005 The last remaining incompatibility between MSVC and gcc: 
-               
-                 #define vsnprintf _vsnprintf
-
-           Other Fixes:
-           1. Fixed a bug that was incorrectly writing out minimum y-axis 
values for color curves.
-
-  03/12/2005 I found some additional bugs when writing out ntc/ncv files that 
would cause the Nikon
-           software to crash. The problem was two-fold.
-
-           First, all four curves in the file must contain some information. 
The SaveNikonCurveFile now
-           checks to make sure that a curve has good data. If it doesn't, then 
defaults are written in their
-           place.
-
-           Why would a curve contain incorrect information? If you're only 
working with a tone curve in a NikonData
-           structure, the color curves would not contain any information. The 
save function automatically corrects
-           this.
-
-           Second, the version number. Right now, the only version this code 
supports is Nikon 4.1. So while the
-           save function takes the version as a paramter, internally it is 
ignored and forced to 4.1.
-           
-           A second version of the SaveNikonCurveFile function now takes a 
single curve as an argument and uses
-           defaults for the rest of the curves in the file. The function 
allows you to specify which curve your
-           saving (TONE_CURVE, RED_CURVE, GREEN_CURVE, or BLUE_CURVE). 
Typically, the curve would be tone.
-
-
-  03/11/2005    Udi added some debugging code for use with UFRaw. 
Unfortunately, the debugging code uses
-           macros with variable arguments, which are not supported by all 
compilers (namely MSVC).
-           I added the following:
-           
-             __MSVC__        : Define this if you are compiling with MSVC. 
This enables code that allows
-                               the program to still print out debug 
information, though not quite as robust
-                               as with using gcc.
-
-           __WITH_UFRAW__    : Define this if this code is compiling with 
UFRaw, This allows for connecting
-                               out to the UFRaw error handler.
-
-           In regards to these flags, the code has been changed around a 
little bit. I also moved some code
-           to more "appropriate" locations, in keeping with the layout of 
these files.
-
-           I also renamed the SaveNikonCurve function to SaveNikonCurveFile 
for clarity. I also fixed a bug
-           in the function to handle NikonData structures with only one used 
curve. This allows extracting
-           the curve from an NEF file and saving it to an NTC/NCV file. This 
would also allow a curve editor
-           to write out files successfully, even if they only use tone curves.
-
-  03/05/2005 Added a fix to allow SampleNikonCurve to be called more than once 
so that a programmer
-           can resample the curve. This would be used when extracting a curve 
from an NEF file
-           and rebuilding the NTC/NCV file curve from the data.
-
-           Also added a fix that allows for curves with no anchors, just box 
coordinates.
-
-           The ResampleCurve function has been renamed to ResampleNEFCurve. 
This is to avoid confusion.
-           THIS FUNCTION SHOULD NOT BE USED FOR STANDARD NTC/NCV/NEF CURVE 
GENERATION. This function is
-           only useful for building a smooth curve from the 4096 byte tone 
curve table in an NEF file.
-           This function may end up going away if it's not found useful.
-
-  03/04/2005 Added a new function called ResampleCurve that allows the 
programmer to resample curves
-           that are contained in a NikonCurve structure. A cubic spline 
interpolator is used in the
-           resampling for the smoothest possible curve. This functions was 
added at the request of
-           Udi Fuchs to allow UFRaw to read in and resample curves stored in 
NEF files.
-
-           A word of caution when using this function. While the function 
stores all of it's results
-           in the passed in curve structure, those results may not be 
compatible with the camera and/or
-           the NTC/NCV files. Specifically, this function will most likely 
contain anchor counts much
-           greater than 20, which is the maximum. It is NOT RECOMMENDED that 
you try and save out to 
-           NTC/NCV format after running this function unless you're absolutely 
sure you know what you
-           are doing.
-
-           With that out of the way, this function is most useful to create a 
smoother curve than what 
-           comes from the camera and the NTC/NCV curve files.
-
-  02/09/2005 Found a fixed a subtle, yet glaring bug in the curve sampling 
functions. The sampling
-           functions were not obeying the limits set in the ncv/ntc files. 
Loading one of these
-           files that contained any start and end points other than 0 and 1 
would result in
-           the code sampling from the extrapolated parts of the spline curve 
instead of the
-           interpolated curve. This actually resulted in a crash in UFRaw, 
since it was returning
-           huge numbers as a result of signed to unsigned conversion.
-
-  02/06/2005    Finally figured out the mathematical relationship (or a close 
approximation) between
-           the Nikon curves and curves imbedded in the NEF files. General form 
is:
-
-               x = a*x + b*ln(cx+1)/ln(dx+2)
-
-           I've found this gives a very good match for the curves. The new 
function to use to get
-           this capability is SampleToCameraCurve. This does a standard curve 
sample then runs the
-           value through the above transform. Quite useful if you want to 
force-embed a particular
-           curve into a batch of NEF files.
-
-
-  02/01/2005 Fixed some issues to better operate with UFRaw. Removed macros 
and replaced with
-           with byte reading and shifting (to avoid including windows crud).
-
-           The function RipNEFCurve now uses the standard Nikon Curve 
structure. The NEFData
-           structure is now obsolete, along with the save and free functions 
(Removed).
-           
-  01/29/2005 Added support for getting the tone curve data out of an NEF file. 
This will generate
-           a file similar to the other curve data files generated by this 
progrom in standalone
-           mode.
-
-           A new command line option has been added to specify NEF processing 
(-nef filename). The
-           NEF capabilities have only been tested with Nikon D70 NEF's.
-
-  01/14/2005    Fixed some bugs. The static data declarations in the header 
were not declared
-           static, resulting in errors when trying to compile into another 
program.
-
-           Added a function to remove redundant calculated curve data and 
placing it in a 
-           an allocated array. This should help facilitate a no diska access 
interface to UFRaw.
-
-           Tweaked a few lines that were either not compiling or had warnings 
when compiled with
-           gcc.
-
-           Changed the unsigned shorts to unsigned ints just for the sake of 
it. May be useful if
-           anyone wants to do bor than 16 bits of sampling. Also means that 
the program uses a 
-           bit more memory when processing.
-
-  01/11/2005 Merged changes from Udi. Added the ability to set both sampling 
resolution and
-           output resolution in LoadNikonData. For example, you can set the 
sampling resolution
-           to 65536 and output resolution to 256.
-
-           I also added a #define (_STAND_ALONE_) for compiling as a 
standalone program.Undef
-           if you just want to use the functions.
-
-           Additional command line options are avalable:
-           -sr    Specifies sampling resolution
-           -or Specifies output resolution
-           
-           Some "how to use" info comes up if there are no arguments on the 
command line.
-           If these aren't specified, defaults are used. This only applies to 
standalone.
-
-  01/08/2005 Removed all code relating to based on Numerical Recipes since it 
requires
-           a soul-sucking liscense. The spline calculation code has been 
replaced by
-           the freely available code from John Bukardt.I only included the 
functions from
-           the library that were necessary to avoid bloat. The code has also 
been converted
-           to using standard C. The original code is available from:
-
-           http://www.csit.fsu.edu/~burkardt/cpp_src/spline/spline.html
-
-           New Features:
-           1. Heavy error checking, with verbose output.
-           2. Supports writing out to NTC and NCV files.
-           2. In debug mode, lots of information is displayed to the console.
-           3. Supports exporting Tone and RGB curves from NCV and NTC files.
-           4. Removed non-ANSI functions, data declarations etc.
-           4. Alot of tweaks.
-           5. Alot more testing ;)
-
-           The standalone prorgam outputs 4 files, each ending in the name of 
the curve data
-           it contains. If you use this like a library, you can make it do 
whatever you want.
-
-  01/06/2005 This is version .01. The gamma calculation might not match
-           what Nikon's Capture does. It only supports NTC files right now.
-           NCV format will be supported shortly, but will not impact
-           the structure of this "library". Other additional functionality
-           will be to support the color curve sections of NTC/NCV files.
+  Thanks goes out to Udi Fuchs for wanting to incorporate nikon curve loading
+  into his program. This will make GIMP just that much better. :)
 
   @author: Shawn Freeman 1/06/2005
   @liscense: GNU GPL
@@ -256,116 +34,9 @@
 #ifndef _NIKON_CURVE_H
 #define _NIKON_CURVE_H
 
-#include <stdio.h>
-
 #define NC_VERSION "1.2"
 #define NC_DATE "2005-08-06"
 
-//////////////////////////////////////////
-//COMPILER CONTROLS
-//////////////////////////////////////////
-//Undef this if you don't want to use the stand-alone program
-//This is mainly for debugging purposes
-//#define _STAND_ALONE_
-
-//Define this if you are using Microsoft Visual C++. This enables code to
-//deal with the fact the MSVC does not support variable argument macros.
-//#define __MSVC__
-
-//the only remaining incompatibility between MSVC and gcc
-#ifdef __MSVC__
-    #define vsnprintf _vsnprintf
-#endif
-
-//Define this if using with UFRaw
-#define __WITH_UFRAW__
-
-//Flags used to determine what file we're trying to process.
-//Should only be used in standalone mode.
-#ifdef _STAND_ALONE_
-
-#define CURVE_MODE  0
-#define NEF_MODE    1
-
-#endif
-
-
-/*******************************************************************************
-Information regarding the file format.
-
-Section Headers: 
-
-Order of Box Data: Left x, Right x, Midpoint x (gamma), Bottom y, Top y
-
-Order of Anchor Data: Start x, Start y, Anchor 1 x, Anchor 1 y, ... , End x, 
End y
-
-Anchor Point Data: This is aligned on 8 byte boundries. However, the section 
must
-                   end on a 16 byte boundary, which means an 8 byte pad is 
added.
-********************************************************************************/
-
-//DEFINES FOR WRITING OUT DATA (for ntc/ncv files)
-#define NCV_HEADER_SIZE                    0x3E    //Combined header length 
for an NCV file
-#define NCV_SECOND_FILE_SIZE_OFFSET 0x3F    //4 bytes (int). File size - 
NCV_header
-#define NCV_UNKNOWN_HEADER_DATA            0x002    //2 bytes. (?)
-#define NCV_SECOND_HEADER_LENGTH    23
-#define NCV_FILE_TERMINATOR_LENGTH  23
-
-#define NTC_FILE_HEADER_LENGTH     0x10    //16 bytes. Doesn't change
-//This seemed to change when Nikon released an updated capture program
-//from 4.1 to 4.2. This may be an int but not sure.
-#define NCV_PATCH_OFFSET            0x3D    //2 bytes(?)
-#define NTC_PATCH_OFFSET            0x10    //2 bytes(?)
-#define FILE_SIZE_OFFSET            0x12    //4 bytes (int). File size - 
header.
-#define NTC_VERSION_OFFSET          0x16    //4 bytes (int).(?)
-                                           //9 byte pad(?)
-                                           //16 bytes. Another section header 
goes here. 
-
-//From here down repeats for every section
-#define NTC_SECTION_TYPE_OFFSET            0x00    //4 bytes (int) (0,1,2,3)
-
-#define NTC_UNKNOWN                0x05    //2 bytes. Doesn't change but not 
sure what they do (0x03ff)
-#define NTC_UNKNOWN_DATA            0x3FF    //
-
-#define NTC_RED_COMPONENT_OFFSET    0x08    //4 bytes (int) (0-255)
-#define NTC_GREEN_COMPONENT_OFFSET  0x0C    //4 bytes (int) (0-255)
-#define NTC_BLUE_COMPONENT_OFFSET   0x0F    //4 bytes (int) (0-255)
-                                           //12 byte pad all zeros(align to 
16?)
-
-#define NTC_RED_WEIGHT_OFFSET      0x1F    //4 bytes (int) (0-255)
-#define NTC_GREEN_WEIGHT_OFFSET            0x23    //4 bytes (int)    (0-255)
-#define NTC_BLUE_WEIGHT_OFFSET     0x27    //4 bytes (int)    (0-255)
-
-#define END_ANCHOR_DATA_PAD_LENGTH  0x08    //Always all zeros    
-#define NTC_SECTION_HEADER_LENGTH   0x10    //Doesn't change        
-
-
-//DEFINES FOR READING IN DATA
-#define HEADER_SIZE                0x10    //First characters may be unicode 
Japanese?
-
-#define NTC_BOX_DATA               0x5C    //Start of box data
-#define NTC_NUM_ANCHOR_POINTS      0x84    //Number of anchor points plus 2 
for start and end points
-#define NTC_ANCHOR_DATA_START      0x88    //Beginning of anchor point data
-
-#define NCV_BOX_DATA               0x89    //Start of box data
-#define NCV_NUM_ANCHOR_POINTS      0xB2    //Number of anchor points plus 2 
for start and end points
-#define NCV_ANCHOR_DATA_START      0xB5    //Beginning of anchor point data
-
-//array indices to retrive data
-#define PATCH_DATA         0
-#define BOX_DATA           1
-#define NUM_ANCHOR_POINTS   2
-#define ANCHOR_DATA        3
-
-//Some data sections sizes for calculating offsets
-#define NEXT_SECTION_BOX_DATA_OFFSET   0x43    //after the anchor data, this 
is the offset to 
-                                               //the beginning of the next 
section's box data
-
-#define NUM_POINTS_TO_ANCHOR_OFFSET    0x03    //number of bytes from the 
number of anchor points
-                                               //byte to the start of anchor 
data.
-//Nikon version defines
-#define NIKON_VERSION_4_1   0x00000401
-#define NIKON_PATCH_4       0x04ff
-#define NIKON_PATCH_5       0x05ff
 #define NIKON_MAX_ANCHORS   20
 
 //file types
@@ -380,25 +51,9 @@
 #define BLUE_CURVE      3
 #define NUM_CURVE_TYPES 4
 
-//Maximum resoltuion allowed due to space considerations.
-#define MAX_RESOLUTION    65536
-
-//////////////////////////////
-//NEF/TIFF MACROS AND DEFINES
-//////////////////////////////
-#define TIFF_TAG_EXIF_OFFSET        34665
-#define TIFF_TAG_MAKER_NOTE_OFFSET  37500
-#define TIFF_TAG_CURVE_OFFSET       140
-
-#define TIFF_TYPE_UNDEFINED         7
-#define TIFF_TYPE_LONG             4
-
-
-////////////////////////
 ////////////////////////
 //ERROR HANDLING
 ////////////////////////
-////////////////////////
 #define NC_SUCCESS     0
 #define NC_ERROR       100
 #define NC_WARNING     104
@@ -406,28 +61,24 @@
 
 
 //////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
 //DATA STRUCTURES
 //////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
 
 /**********************************************************
 CurveData:
     Structure for the curve data inside a NTC/NCV file.
 ***********************************************************/
-typedef struct
-{
+typedef struct {
     double x;
     double y;
 } CurveAnchorPoint;
 
-typedef struct 
-{
+typedef struct {
     char name[80];
 
     //Type for this curve
     unsigned int m_curveType;
-    
+
     //Box data
     double m_min_x;
     double m_max_x;
@@ -437,15 +88,14 @@
 
     //Number of anchor points
     unsigned char m_numAnchors;
-    
+
     //contains a list of anchors, 2 doubles per each point, x-y format
     //max is 20 points
     CurveAnchorPoint m_anchors[NIKON_MAX_ANCHORS];
-    
+
 } CurveData;
 
-typedef struct 
-{
+typedef struct {
     //Number of samples to use for the curve.
     unsigned int m_samplingRes;
     unsigned int m_outputRes;
@@ -455,24 +105,11 @@
 
 } CurveSample;
 
-
-/********************************************
-NikonPoint:
-    Simple point structure. Used for storing 
-reduced data from a sampled curve.
-*********************************************/
-typedef struct
-{
-    unsigned int x;
-    unsigned int y;
-} NikonPoint;
-
 /*********************************************
 NikonData:
     Overall data structure for Nikon file data
 **********************************************/
-typedef struct
-{
+typedef struct {
     //Number of output points
     int m_fileType;
     unsigned short m_patch_version;
@@ -480,81 +117,14 @@
 } NikonData;
 
 //////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
 //FUNCTIONS
 //////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-
-/************************************************************
-nc_message:
-    The Nikon Curve message handler. Udi Fuchs created this
-to make the error handling consistent across the code. 
-
-  code - Message code
-  format - The message to format
-  ... - variable arguments
-**************************************************************/
-
-void nc_message(int code, char *format, ...);
-void DEBUG_PRINT(char *format, ...);
-
-/*******************************************************************
- d3_np_fs:
-   Helper function for calculating and storing tridiagnol matrices.
-   Cubic spline calculations involve these types of matrices.
-*********************************************************************/
-double *d3_np_fs ( int n, double a[], double b[] );
-
-/*******************************************************************
- spline_cubic_set:
-   spline_cubic_set gets the second derivatives for the curve to be used in
-   spline construction
-
-    n = number of control points
-    t[] = x array
-    y[] = y array
-    ibcbeg = initial point condition (see function notes).
-    ybcbeg = beginning value depending on above flag
-    ibcend = end point condition (see function notes).
-    ybcend = end value depending on above flag
-  
-    returns the y value at the given tval point
-*********************************************************************/
-double *spline_cubic_set ( int n, double t[], double y[], int ibcbeg,
-    double ybcbeg, int ibcend, double ybcend );
-/*******************************************************************
- spline_cubic_val:
-   spline_cubic_val gets a value from spline curve.
-
-    n = number of control points
-    t[] = x array
-    tval = x value you're requesting the data for, can be anywhere on the 
interval.
-    y[] = y array
-    ypp[] = second derivative array calculated by spline_cubic_set
-    ypval = first derivative value of requested point
-    yppval = second derivative value of requested point
-  
-    returns the y value at the given tval point
-*********************************************************************/
-double spline_cubic_val ( int n, double t[], double tval, double y[],
-    double ypp[], double *ypval, double *yppval );
-
-
-/*********************************************
-LoadNikonData:
-    Loads a curve from a Nikon ntc or ncv file.
-    
-    fileName    - The filename.
-    curve        - Pointer to curve struct to hold the data.
-    resolution    - How many data points to sample from the curve
-**********************************************/
-int LoadNikonData(char *fileName, NikonData *data);
 
 /*********************************************
 CurveDataSample:
     Samples from a spline curve constructed from
     the curve data.
-    
+
     curve   - Pointer to curve struct to hold the data.
     sample  - Pointer to sample struct to hold the data.
 **********************************************/
@@ -580,138 +150,50 @@
 **********************************************/
 void CurveDataSetPoint(CurveData *curve, int point, double x, double y);
 
-/****************************************************
-SampleToCameraCurve:
-    Transforms the curve generated by sampling the
-    spline interpolator into the curve that is used by
-    the camera.
+/*******************************************************
+CurveSampleInit:
+    Init and allocate curve sample.
+********************************************************/
+CurveSample *CurveSampleInit(unsigned int samplingRes, unsigned int outputRes);
 
-    This is a special function. While the function places
-    no special restrictions on sampling resolution or
-    output resolution, it should be noted that Nikon D70
-    camera curve is 4096 entries of 0-255.
+/*******************************************************
+CurveSampleFree:
+    Frees memory allocated for this curve sample.
+********************************************************/
+int CurveSampleFree(CurveSample *sample);
 
-    If you intend on using this function as such, you should
-    set the sampling resolution and output resolution
-    accordingly.
+/*********************************************
+LoadNikonData:
+    Loads a curve from a Nikon ntc or ncv file.
 
-    curve - The Nikon curve to sample and transform.
-*****************************************************/
-int SampleToCameraCurve(CurveData *curve, CurveSample *sample);
+    fileName    - The filename.
+    curve        - Pointer to curve struct to hold the data.
+    resolution    - How many data points to sample from the curve
+**********************************************/
+int LoadNikonData(char *fileName, NikonData *data);
 
 /************************************************************
 SaveNikonDataFile:
     Savess a curve to a Nikon ntc or ncv file.
-    
+
     data        - A NikonData structure containing info of all the curves.
     fileName    - The filename.
     filetype    - Indicator for an NCV or NTC file.
-    version        - The version of the Nikon file to write
-
-NOTE:    The only version tested is Nikon 4.1 anything
-       other than this may result in unpredictable behavior.
-       For now, the version passed in is ignored and is forced
-       to 4.1.
 **************************************************************/
-int SaveNikonDataFile(NikonData *data, char *outfile, int filetype, int 
version);
-
-/************************************************************
-SaveNikonCurveFile:
-    Saves out curves to a Nikon ntc or ncv file. This function
-    takes a single curve and uses defaults for the other curves.
-    Typically, the curve used is the tone curve.
-    
-    curve        - A NikonCurve structure. This is usually the tone curve
-    curve_type    - The curve type (TONE_CURVE, RED_CURVE, etc.)
-    fileName    - The filename.
-    filetype    - Indicator for an NCV or NTC file.
-    version        - The version of the Nikon file to write
-
-NOTE:    The only version tested is Nikon 4.1 anything
-       other than this may result in unpredictable behavior.
-       For now, the version passed in is ignored and is forced
-       to 4.1.
-
-       This function is just a helper function that allows the user
-       to just carry around a single curve.
-**************************************************************/
-int SaveNikonCurveFile(CurveData *curve, int curve_type, char *outfile,
-       int filetype, int version);
-
-/*********************************************
-SaveSampledNikonCurve:
-    Saves a sampling from a curve to text file to
-    be processed by UFRaw.
-
-    sample        - Pointer to the sampled curve.
-    fileName    - The filename.
-**********************************************/
-int SaveSampledNikonCurve(CurveSample *sample, char *outfile);
-
-/*****************************************************
-FindTIFFOffset:
-    Moves the file pointer to the location
-    indicated by the TAG-TYPE pairing. This is meant just
-    as a helper function for this code. Uses elsewhere
-    may be limited.
-
-    file    - Nikon File ptr
-    num_entries - Number of entries to search through
-    tiff_tag - The tiff tag to match.
-    tiff_type - The tiff type to match.
-*******************************************************/
-int FindTIFFOffset(FILE *file, unsigned short num_entries, unsigned short 
tiff_tag,
-                   unsigned short tiff_type);
-
-/*******************************************************
-RipNikonNEFData:
-    Gets Nikon NEF data. For now, this is just the tone
-    curve data. This is more of a helper function for running
-    in stand-alone. This function basically finds the correct
-    file offset, and then calls RipNikonNEFCurve.
-
-    infile - The input file
-    curve  - data structure to hold data in.
-    sample_p -  pointer to the curve sample reference.
-               can be NULL if curve sample is not needed.
-********************************************************/
-int RipNikonNEFData(char *infile, CurveData *data, CurveSample **sample_p);
+int SaveNikonDataFile(NikonData *data, char *outfile, int filetype);
 
 /*******************************************************
 RipNikonNEFCurve:
     The actual retriever for the curve data from the NEF
     file.
-    
+
     file   -   The input file.
     infile -   Offset to retrieve the data
     curve  -   data structure to hold curve in.
     sample_p -  pointer to the curve sample reference.
                can be NULL if curve sample is not needed.
 ********************************************************/
-int RipNikonNEFCurve(FILE *file, int offset, CurveData *data,
+int RipNikonNEFCurve(void *file, int offset, CurveData *data,
        CurveSample **sample_p);
 
-/*******************************************************
-CurveSampleInit:
-    Init and allocate curve sample.
-********************************************************/
-CurveSample *CurveSampleInit(unsigned int samplingRes, unsigned int outputRes);
-
-/*******************************************************
-CurveSampleFree:
-    Frees memory allocated for this curve sample.
-********************************************************/
-int CurveSampleFree(CurveSample *sample);
-
-/****************************************
-ConvertNikonCurveData:
-    The main driver. Takes a filename and
-    processes the curve, if possible.
-
-    fileName    -    The file to process.
-*****************************************/
-int ConvertNikonCurveData(char *inFileName, char *outFileName, unsigned int 
samplingRes, unsigned int outputRes);
-
 #endif
-
-


------------------------------------------------------------------------------
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing. 
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
_______________________________________________
ufraw-cvs mailing list
ufraw-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs

Reply via email to