\batchmode
\documentclass[a4paper,dvips]{book}
\RequirePackage{ifthen}


\usepackage[dvips]{graphicx,color}
\usepackage{times}
\usepackage{fancyhdr}
\usepackage{html}


%
\providecommand{\ct}[1]{\texttt{#1}}
%
\providecommand{\ctr}[1]{\texttt{#1}$\Rightarrow$\-}
%
\newenvironment{ctd}{\begin{quote}\tt}{\end{quote}}
\pagecolor{white}
%
\providecommand{\ip}{\texttt{ip}}%
\providecommand{\bs}{$\backslash$}%
\providecommand{\rtp}{\^{ }}%
\providecommand{\cielab}{\emph{CIE~}$L^{*}a^{*}b^{*}$}%
\providecommand{\ciexyz}{\emph{CIE XYZ}}
%
\providecommand{\pref}[1]{\S\ref{#1}}
%
\providecommand{\fig}[2]{
	\begin{center}
	\includegraphics[height=#1]{figs/#2}
	\end{center}
}
%
\providecommand{\figw}[2]{
	\begin{center}
	\includegraphics[width=#1]{figs/#2}
	\end{center}
}
%
\newenvironment{fig2}{\begin{figure*}}{\end{figure*}}\renewenvironment{fig2}{\begin{figure}}{\end{figure}}%
\newenvironment{tab2}{\begin{table*}}{\end{table*}}\renewenvironment{tab2}{\begin{table}}{\end{table}}%
\newenvironment{ipdef}{


\samepage
\begin{quote}\tt \begin{tabular}{@{\hspace{0.2em}}ll@{\hspace{0.2em}}ll@{\hspace{0.2em}}ll@{\hspace{0.2em}}ll@{\hspace{0.2em}}ll@{\hspace{0.2em}}ll@{\hspace{0.2em}}ll@{\hspace{0.2em}}lllllllllllllllllllllllllllll}
~~~ & ~ & ~~~ & ~ & ~~~ & ~ & ~~~ & ~ & ~~~ & ~ & ~~~ & ~ & ~~~ & ~ & ~~~ & \\[-1.3em]
}{
\end{tabular}\end{quote}

}
%
\providecommand{\dtxt}[1]{\multicolumn{25}{l}{#1}}
%
\providecommand{\blankpage}{%%
\newpage
~~~~
\pagestyle{plain}
\newpage
~~~~
\newpage
\pagestyle{fancy}
}
\addtolength{\textwidth}{0.5in}\addtolength{\oddsidemargin}{-0.25in}\addtolength{\evensidemargin}{-0.25in}
\addtolength{\topmargin}{-0.5em}\addtolength{\headsep}{0.5em}\addtolength{\footskip}{0.5em}
\newlength{\fred}\setlength{\fred}{\oddsidemargin}\setlength{\oddsidemargin}{\evensidemargin}\setlength{\evensidemargin}{\fred}

\fancyhead{} %% clear all fields
\fancyhead[LE,RO]{\leftmark}		%% left-even, right-odd
\fancyhead[RE,LO]{C++ Programmers' Guide}%% right-even, left-odd
\fancyfoot[LE,RO]{\thepage }		%% left-even, right-odd
\fancyfoot[RE,LO]{October 2004}		


\usepackage[latin1]{inputenc}



\makeatletter

\makeatletter
\count@=\the\catcode`\_ \catcode`\_=8 
\newenvironment{tex2html_wrap}{}{}%
\catcode`\<=12\catcode`\_=\count@
\newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}%
\newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}%
  \expandafter\renewcommand\csname #1\endcsname}%
\newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}%
\let\newedcommand\renewedcommand
\let\renewedenvironment\newedenvironment
\makeatother
\let\mathon=$
\let\mathoff=$
\ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi
\newbox\sizebox
\setlength{\hoffset}{0pt}\setlength{\voffset}{0pt}
\addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt}
\addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt}
\addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt}
\addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt}
\setlength{\textwidth}{349pt}
\newwrite\lthtmlwrite
\makeatletter
\let\realnormalsize=\normalsize
\global\topskip=2sp
\def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float
\def\@float{\let\@savefreelist\@freelist\real@float}
\def\liih@math{\ifmmode$\else\bad@math\fi}
\def\end@float{\realend@float\global\let\@freelist\@savefreelist}
\let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float
\let\@largefloatcheck=\relax
\let\if@boxedmulticols=\iftrue
\def\@dbflt{\let\@savefreelist\@freelist\real@dbflt}
\def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize
 \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}%
 \def\phantompar{\csname par\endcsname}\normalsize}%
\def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}%
\newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }%
\newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }%
\newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup %
 \let\ifinner=\iffalse \let\)\liih@math }%
\newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}%
 \expandafter\box\next\egroup}%
\newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}%
\newcommand\lthtmllogmath{\lthtmltypeout{l2hSize %
:\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}%
\newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist
       \lthtmlmathtype{#1}\lthtmlvboxmathA}%
\newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}%
\newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup
       \let\@savefreelist\@freelist \lthtmlhboxmathB}%
\newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}%
\newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox
       \global\let\@freelist\@savefreelist}%
\newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}%
\newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}%
\newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}%
  \lthtmldisplayA{#1}\let\@eqnnum\relax}%
\newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}%
\newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB}
\newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA
  \vrule height1.5ex width0pt }%
\newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}%
\newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}%
\newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt %
  \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline}
\newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt %
  \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath}
\newcommand\lthtmlindisplaymathZ{\egroup %
  \centerinlinemath\lthtmllogmath\lthtmlsetmath}
\def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{%
  \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi
  \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}}
\def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{%
  \kern.1em\kern0.8 pt\hbox{\hglue.17em\copy\sizebox\hglue0.8 pt}}\kern.3pt%
  \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.8 pt%
  \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}}
\def\centerinlinemath{%
  \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi
  \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 
 \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax}

\def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize 
  \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill
  \else\expandafter\vss\fi}%
\providecommand{\selectlanguage}[1]{}%
\makeatletter \tracingstats = 1 


\begin{document}
\pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}%
\lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}%
\makeatletter
\if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}%
\else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi%
\lthtmltypeout{}%
\makeatother
\setcounter{page}{1}
\onecolumn

% !!! IMAGES START HERE !!!

\stepcounter{chapter}
\stepcounter{section}
{\newpage\clearpage
\lthtmlfigureA{figure349}%
\begin{figure}\begin{quote}
\begin{verbatim}

#include <stdio.h>
#include <vips/vips.h>

int
main( int argc, char **argv )
{
        IMAGE *in, *out;

        /* Check arguments.
         */
        if( argc != 3 )
                error_exit( "usage: %s infile outfile", argv[0] );

        /* Open the first argument for input.
         */
        if( !(in = im_open( argv[1], "r" )) )
                error_exit( "unable to open %s for input", argv[1] );

        /* Open an output descriptor with the second argument.
         */
        if( !(out = im_open( argv[2], "w" )) )
                error_exit( "unable to open %s for output", argv[2] );
                
        /* Invert, and note on history.
         */
        if( im_invert( in, out ) )
                error_exit( "unable to find negative!" );
        if( im_updatehist( out, argc, argv ) )
                error_exit( "unable to add to history" );
        
        /* Clean up.
         */
        if( im_close( in ) || im_close( out ) )
                error_exit( "unable to close!" );
}\end{verbatim}
\end{quote}
\end{figure}%
\lthtmlfigureZ
\lthtmlcheckvsize\clearpage}

{\newpage\clearpage
\lthtmlfigureA{figure351}%
\begin{figure}\begin{quote}
\begin{verbatim}

#include <iostream.h>
#include <vips/vipscpp.h>

int
main( int argc, char **argv )
{
        /* Check arguments.
         */
        if( argc != 3 ) {
                cerr << "usage: " << argv[0] << " infile outfile\n";
                exit( 1 );
        }

        /* Invert!
         */
        try {
                VImage fred( argv[1] );

                fred.invert().write( argv[2] );
        }
        catch( VError e ) {
                e.perror( argv[0] );
        }

        return( 0 );
}\end{verbatim}
\end{quote}
\end{figure}%
\lthtmlfigureZ
\lthtmlcheckvsize\clearpage}

\stepcounter{chapter}
\stepcounter{section}
{\newpage\clearpage
\lthtmlinlinemathA{tex2html_wrap_inline463}%
$L^{*}a^{*}b^{*}$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}

{\newpage\clearpage
\lthtmlinlinemathA{tex2html_wrap_inline465}%
$^{-1}$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}

\stepcounter{section}
\stepcounter{section}
{\newpage\clearpage
\lthtmlinlinemathA{tex2html_wrap_inline471}%
$L^{*}$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}

{\newpage\clearpage
\lthtmlinlinemathA{tex2html_wrap_inline473}%
$a^{*}$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}

{\newpage\clearpage
\lthtmlinlinemathA{tex2html_wrap_inline475}%
$b^{*}$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}

\stepcounter{chapter}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
{\newpage\clearpage
\lthtmlfigureA{figure640}%
\begin{figure}\begin{quote}
\begin{verbatim}

/* Apply a scale and offset to each band of a 3-band image.  
 */
static int
apply_factors( IMAGE *in, IMAGE *out, 
    double s1, double o1, double s2, double o2, double s3, double o3 ) 
{

    IMAGE *t1 = im_open_local( out, "int:1", "p" );
    IMAGE *t2 = im_open_local( out, "int:2", "p" );
    IMAGE *t3 = im_open_local( out, "int:3", "p" ); 
    IMAGE *t4 = im_open_local( out, "int:4", "p" ); 
    IMAGE *t5 = im_open_local( out, "int:5", "p" ); 
    IMAGE *t6 = im_open_local( out, "int:6", "p" ); 
    IMAGE *ar[3];

    if( !t1 || !t2 || !t3 || !t4 || !t5 || !t6 ) return( -1 );

    if( in->Bands != 3 ) {
        im_errormsg( "apply_factors: input image must have three bands" );
        return( -1 );
    }

    /* Extract three bands.
     */
    if( im_extract_band( in, t1, 1 ) ||
        im_extract_band( in, t2, 2 ) ||
        im_extract_band( in, t3, 3 ) ) 
	    return( -1 );

    /* Apply scale + offset to each band. 
     */
    if( im_lintra( s1, t1, o1, t4 ) || 
        im_lintra( s2, t2, o2, t5 ) ||
        im_lintra( s3, t3, o3, t6 ) ) 
	    return( -1 );

    /* Recombine bands again.
     */
    ar[0] = t4; ar[1] = t5; ar[2] = t6;
    if( im_gbandjoin( ar, out, 3 ) ) 
        return( -1 );

    return( 0 );
}\end{verbatim}
\end{quote}
\end{figure}%
\lthtmlfigureZ
\lthtmlcheckvsize\clearpage}

{\newpage\clearpage
\lthtmlfigureA{figure642}%
\begin{figure}\begin{quote}
\begin{verbatim}

/* Apply a scale and offset to each band of a 3-band image.  
 */
static VImage
apply_factors( VImage in, 
    double s1, double o1, double s2, double o2, double s3, double o3 ) 
{
    /* Check we have a three-band image.
     */
    if( in.Bands() != 3 ) 
        verror( "apply_factors: input image must have three bands" );

    /* Extract three bands.
     */
    VImage red = in.extract_band( 1 );
    VImage green = in.extract_band( 2 );
    VImage blue = in.extract_band( 3 );

    /* Apply scale + offset to each band. lin( a, b ) 
     * (for LINear transform) calculates  a * in + b -> out.
     */
    VImage red2 = red.lin( s1, o1 );
    VImage green2 = green.lin( s2, o2 );
    VImage blue2 = blue.lin( s3, o3 );

    /* Recombine bands again.
     */
    return( red2.bandjoin( green2 ).bandjoin( blue2 ) );
}\end{verbatim}
\end{quote}
\end{figure}%
\lthtmlfigureZ
\lthtmlcheckvsize\clearpage}

\stepcounter{chapter}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{chapter}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
{\newpage\clearpage
\lthtmlinlinemathA{tex2html_wrap_inline957}%
$x,y$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}

\stepcounter{subsection}
\stepcounter{subsection}
\stepcounter{section}
\stepcounter{chapter}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{chapter}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}
\stepcounter{section}

\end{document}
