
\documentclass{article}

\usepackage[latin1]{inputenc}

\usepackage{epsfig,multicol,boxedminipage}
\usepackage{latexsym,amsfonts,amssymb,amsmath,amstext,amsthm}

\addtolength{\textwidth}{1.7in}
\addtolength{\oddsidemargin}{-0.85in}
\addtolength{\textheight}{1.7in}
\addtolength{\topmargin}{-0.85in}

\newlength{\cboxwidth}
\setlength{\cboxwidth}{\textwidth}
\addtolength{\cboxwidth}{-10pt}

\newenvironment{cbox}{
  \noindent\begin{boxedminipage}{\cboxwidth}
}{
  \end{boxedminipage}
}

% load the listings package

\usepackage{listings}

% define some fonts

\font\hvbf=phvb at 7.7pt
\font\hvf=rpcrr at 9pt

% define the listings options for Objective-C

\lstset{print=true,frame=trbl,language=[Objective]C,%
  fontadjust=true,%
  keywordstyle=\hvbf,%
  commentstyle=\itshape,%
  stringstyle=\rmfamily,%
  basicstyle=\hvf,%
  breaklines=true,extendedchars=true,flexiblecolumns=true%
}


\newcommand{\half}{\frac1{2}}
\newcommand{\thrd}{\frac1{3}}
\newcommand{\qurt}{\frac1{4}}
\newcommand{\ffth}{\frac1{5}}
\newcommand{\sxth}{\frac1{6}}
\newcommand{\octa}{\frac1{8}}
\newcommand{\dode}{\frac1{12}}

\newcommand{\EVAL}[2]{\left. #1 \right|_{#2}} 

\newcommand{\SPAR}[1]{\left\{#1\right\}}
\newcommand{\PAR} [1]{\left(#1\right)}
\newcommand{\QAR} [1]{\left[#1\right]}
\newcommand{\ABS} [1]{\left|#1\right|}

\newcommand{\ONE}{\mathbf 1}

\newcommand{\IV}{\mathbf i}
\newcommand{\JV}{\mathbf j}
\newcommand{\SV}{\mathbf s}

\newcommand{\JSET}{\text{J}}

\newcommand{\FLOOR}[1]{\left\lfloor #1 \right\rfloor}
\newcommand{\CEIL}[1]{\left\lceil #1 \right\rceil}

\newcommand{\set}[1]{\{#1\}}
\newcommand{\oset}[1]{\left\{#1\right\}}
\newcommand{\mset}[2]{\left\{\left.#1 \: \right| \: #2\right\}}
\newcommand{\omset}[2]{\{#1 \: \mid \: #2\}}
\newcommand{\lett}{\set{0,1}}

\newcommand{\MAND}  {\quad \text{and   }  \quad}
\newcommand{\MOR}   {\quad \text{or    }  \quad}
\newcommand{\MIF}   {\quad \text{if    }  \quad}
\newcommand{\MTO}   {\quad \text{to    }  \quad}
\newcommand{\MWHERE}{\quad \text{where }  \quad}
\newcommand{\MWHEN }{\quad \text{when  }  \quad}

\newcommand{\MAX}{\text{max}}

\newcommand{\stack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}}

\newcommand{\GCD}[2]{\text{GCD}(#1,#2)}
\newcommand{\LCM}[2]{\text{LCM}(#1,#2)}

\allowdisplaybreaks


\begin{document}

\title{The GNUstep cookbook}
\author{Marko Riedel}
\date{\today}
\maketitle

Welcome to the GNUstep cookbook. This document provides a variety of
different recipes for the GNUstep programmer. Recipes are explained
and the source code is included. Recipes are code snippets that the
programmer can quickly get a grasp on, without having to work through
the complex logic of a complete application. The TGZ archive of this
cookbook contains the LaTeX source as well as the source for each
recipe, which may be more material than what we discuss in the
text. The URL is {\tt http://www.gnustep.it/marko/.} We hope that this
cookbook can be of use to you in your everday GNUstep programming
needs and encourage submissions that fit the recipe format. Enjoy! (With 
corrections by Wim Oudshoorn.)

\tableofcontents
\newpage

\input{licence.tex}
\newpage

\section{Combinatorics}

\subsection{Counting I: Subset enumerator}
{\it by Marko Riedel\/}
\input{combinatorics/subsets/subsets-discuss}

\subsection{Counting II: Permutation enumerator}
{\it by Marko Riedel\/}
\input{combinatorics/permutations/perms-discuss}

\subsection{Steganography}
{\it by Marko Riedel\/}
\input{combinatorics/stegano/stegano-discuss}

\subsection{Working with GMP integers}
{\it by Marko Riedel\/}
\input{combinatorics/GMPInt/GMPInt-discuss}

\subsection{Enumerating graphs with P\'olya's theorem and GMP}
{\it by Marko Riedel\/}
\input{combinatorics/xgraphenum/xgraphenum-discuss}

\subsection{Backtracking: The n-queens problem}
{\it by Marko Riedel\/}
\input{combinatorics/queens/queens-discuss}

\section{Processing mouse events}

\subsection{Selecting a part of a static image}
{\it by Marko Riedel\/}
\input{mouseevents/static/static-discuss}


\section{Working with tasks}

\subsection{User may interrupt read from task}
{\it by Marko Riedel\/}
\input{tasks/interruptible/interrupt-discuss}

\subsection{Frontend to {\tt df}}
{\it by Marko Riedel, from an idea by Martin Brecher}
\input{tasks/gdf/gdf-discuss}

\subsection{Code browser with {\tt find} and {\tt grep}}
{\it by Marko Riedel}
\input{tasks/browseit/browseit-discuss}

\section{Distributed objects}

\subsection{Connect four}
{\it by Marko Riedel\/}
\input{do/doconnectfour/docf-discuss}

\section{CGI programming}

\subsection{Web server}
{\it by Marko Riedel\/}
\input{CGI/gswebsrv/gswebsrv-discuss}

\subsection{Read GET and POST variables from forms and URLs}
{\it by Marko Riedel\/}
\input{CGI/variables/cgivars-discuss}

\subsection{Working with cookies}
{\it by Marko Riedel\/}
\input{CGI/cookies/cookies-discuss}

\subsection{Webchat with MySQL}
{\it by Marko Riedel\/}
\input{CGI/webchat/webchat-discuss}

\section{Puzzles}

\subsection{The Sixteen Puzzle}
{\it by Marko Riedel\/}
\input{puzzles/sixteen/sixteen-discuss}

\section{Miscellaneous}

\subsection{Color picker with X11}
{\it by Marko Riedel, from a suggestion by Stefan Urbanek}
\input{misc/pick/pick-discuss}

\subsection{Screen grab with X11}
{\it by Marko Riedel, with an idea by Alexander Malmberg}
\input{misc/grab/grab-discuss}

\subsection{Calendar view}
{\it by Marko Riedel}
\input{misc/calendar/calendar-discuss}


\end{document}
