%% -*-TeX-*-
 % ###################################################################
 % 
 %  FILE: "flightlg.cls"
 %                                    created: 2000-01-31 13:44:27 
 %                                last update: 2001-01-23 16:42:34 
 %  Author: Fr\'ed\'eric Boulanger
 %  E-mail: Frederic.Boulanger@supelec.fr
 %    mail: Sup\'elec - Service Informatique
 %          Plateau de Moulon, 3 rue Joliot-Curie, F-91192 Gif-sur-Yvette cedex
 %     www: http://wwwsi.supelec.fr/fb/
 %  
 % checksum = "28854 800 1599 27751"
 %  
 % Copyright (c) 2000 Fr\'ed\'eric Boulanger
 % All rights reserved.
 % 
 %  Description: 
 %   A document class to typeset (french only ?) flight logs.
 %   See example at the end of this file.
 % 
 %   Une classe de documents pour imprimer des carnets de vol.
 %   Voir l'exemple \`a la fin de ce document.
 %   
 %   latex carnet.tex
 %   dvips carnet.ps -h duplex
 %   pstops 4:0+2(0,-14.85cm),1+3(0,-14.85cm) -p a4 carnet.ps out.ps
 %   
 %  History
 % 
 %  modified   by  rev reason
 %  ---------- --- --- -----------
 %  2000-01-31 FBO 1.0 original
 %  2000-05-12 FBO 1.1 fixed \setrefdate \sinceref small bug
 %  2000-11-24 FBO 1.2 one page per A4 page for pstops manips
 % ###################################################################
 %%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{flightlg}[2000/11/24 v1.2 Frederic Boulanger]
\LoadClass[a4paper]{article}
\RequirePackage[T1]{fontenc}
\RequirePackage[francais]{babel}

\RequirePackage{pslatex}
\RequirePackage{pifont}
\RequirePackage{ifthen}
\RequirePackage{graphicx}
\pagestyle{empty}
\thispagestyle{empty}

\setlength{\oddsidemargin}{-1in}
\addtolength{\oddsidemargin}{5mm}
\setlength{\evensidemargin}{-1in}
\addtolength{\evensidemargin}{5mm}
\setlength{\topmargin}{-1in}
\addtolength{\topmargin}{11mm}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}
\setlength{\footskip}{0pt}
\setlength{\textheight}{275mm}
\setlength{\textwidth}{200mm}
\setlength{\parindent}{0pt}

% Total g\'en\'eral d'heures de vol \`a l'ouverture du carnet
\newcommand*{\openat}[1]{\renewcommand*{\flog@openat}{#1}}
\newcommand*{\flog@openat}{}
%
% Date \`a laquelle ce total est fait
\newcommand*{\openon}[1]{\renewcommand*{\flog@openon}{#1}}
\newcommand*{\flog@openon}{}
% Lieu et date d'ouverture du carnet
\newcommand*{\openlog}[2]{%
  \renewcommand*{\flog@openwhere}{#1}%
  \renewcommand*{\flog@opendate}{#2}%
}
\newcommand*{\flog@openwhere}{\hspace*{4cm}}%
\newcommand*{\flog@opendate}{}%
%
% Heures \`a reporter
\newcommand*{\reportdday}[1]{%
  \flog@parsetime{#1}%
  \flog@copytime{flog@dday}{flog@parsed}%
}
\newcommand*{\reportcday}[1]{%
  \flog@parsetime{#1}%
  \flog@copytime{flog@cday}{flog@parsed}%
}
\newcommand*{\reportdnig}[1]{%
  \flog@parsetime{#1}%
  \flog@copytime{flog@dnig}{flog@parsed}%
}
\newcommand*{\reportcnig}[1]{%
  \flog@parsetime{#1}%
  \flog@copytime{flog@cnig}{flog@parsed}%
}
\newcommand*{\stopday}[1]{\newcommand*{\flog@stopday}{#1}}
\newcommand*{\stopmonth}[1]{\newcommand*{\flog@stopmonth}{#1}}
\newcommand*{\stopyear}[1]{\newcommand*{\flog@stopyear}{#1}}
\newcommand*{\cdvnumber}[1]{\newcommand*{\flog@cdvnumber}{#1}}
\newcommand*{\titulaire}[1]{\newcommand*{\flog@titulaire}{#1}}
\newcommand*{\ownername}[1]{\newcommand*{\flog@ownername}{#1}}
\newcommand*{\ownerfname}[1]{\newcommand*{\flog@ownerfname}{#1}}
\newcommand*{\birthdate}[1]{\newcommand*{\flog@birthdate}{#1}}
\newcommand*{\birthloc}[1]{\newcommand*{\flog@birthloc}{#1}}
\newcommand*{\address}[1]{\newcommand*{\flog@address}{#1}}

\newcounter{flog@qualifnum}
\newcommand*{\flog@mkqual}[3]{%
  \edef\flog@tmpcs{\roman{#1}}%
  \expandafter\gdef\csname flog@qual\flog@tmpcs#2\endcsname{#3}%
}
\newcommand*{\flog@getqual}[2]{%
  \edef\flog@tmpcs{\roman{#1}}%
  \csname flog@qual\flog@tmpcs#2\endcsname
}
\newcommand*{\flog@qualif}[5]{%
  \stepcounter{flog@qualifnum}%
  \flog@mkqual{flog@qualifnum}{name}{#1}%
  \flog@mkqual{flog@qualifnum}{num}{#2}%
  \flog@mkqual{flog@qualifnum}{day}{#3}%
  \flog@mkqual{flog@qualifnum}{month}{#4}%
  \flog@mkqual{flog@qualifnum}{year}{#5}%
}
\newcommand*{\flog@errqualif}{%
  \PackageError{flightlg}{Use of \protect\qualif outside a qualifs environment}{%
  You can't use the \protect\qualif command outside a qualifs 
  environment. Enclose all you qualification declarations in a qualifs 
  environment.
  }
}
\newenvironment{qualifs}{%
  \setcounter{flog@qualifnum}{0}%
  \let\qualif\flog@qualif
}{
  \let\qualif\flog@errqualif
}

\newcommand*{\flog@checkpg}{%
  \ifthenelse{\value{flog@flpgnum}=15}{%
    \setcounter{flog@flpgnum}{1}%
    \flog@startpage
  }{}%
}
%
\newcommand*{\flog@newtime}[1]{%
  \newcounter{#1h}%
  \newcounter{#1m}%
}
\newcommand*{\flog@settime}[3]{%
  \setcounter{#1h}{#2}%
  \setcounter{#1m}{#3}%
}
\newcommand*{\flog@copytime}[2]{%
  \setcounter{#1h}{\value{#2h}}%
  \setcounter{#1m}{\value{#2m}}%
}
\newcommand*{\flog@parsetime}[1]{%
  \def\flog@parsedhours{}%
  \def\flog@parsedmins{}%
  \flog@parsehours#1@%
  \flog@settime{flog@parsed}{\flog@parsedhours}{\flog@parsedmins}%
}
\newboolean{flog@isdigit}
\newcommand*{\flog@tstdigit}[1]{%
  \setboolean{flog@isdigit}{true}%
  \if#10\else\if#11\else\if#12\else\if#13\else\if#14\else
  \if#15\else\if#16\else\if#17\else\if#18\else\if#19\else
    \setboolean{flog@isdigit}{false}%
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\newcommand*{\flog@ifdigit}[3]{%
  \flog@tstdigit{#1}%
  \ifthenelse{\boolean{flog@isdigit}}{#2}{#3}%
}
\newcommand*{\flog@parsehours}[1]{%
  \flog@ifdigit{#1}{%
    \edef\flog@parsedhours{\flog@parsedhours#1}%
    \let\next=\flog@parsehours
  }{%
    \let\next=\flog@parsemins
  }
  \next
}
\newcommand*{\flog@parsemins}[1]{%
  \flog@ifdigit{#1}{%
    \edef\flog@parsedmins{\flog@parsedmins#1}%
    \let\next=\flog@parsemins
  }{%
    \ifthenelse{\equal{#1}{@}}{%
      \let\next=\relax
    }{%
      \let\next=\flog@parsemins
    }%
  }
  \next
}
\newcommand*{\flog@addtime}[2]{%
  \addtocounter{#1h}{\value{#2h}}%
  \addtocounter{#1m}{\value{#2m}}%
  \whiledo{\value{#1m}>59}{%
    \addtocounter{#1h}{1}%
    \addtocounter{#1m}{-60}%
  }
}
\newcommand*{\flog@subtime}[2]{%
  \addtocounter{#1m}{-\value{#2m}}%
  \ifthenelse{\value{#1m}<0}{%
    \addtocounter{#1m}{60}%
    \addtocounter{#1h}{-1}%
  }{}%
  \addtocounter{#1h}{-\value{#2h}}%
}
\newcommand*{\flog@parse@addtime}[2]{%
  \ifthenelse{\equal{#2}{ }}{}{%
    \flog@parsetime{#2}%
    \flog@addtime{#1}{flog@parsed}%
  }
}
\newcommand*{\flog@hsym}{%
  \raisebox{1ex}{\footnotesize{h}}%
}
\newcommand*{\flog@displaytime}[1]{%
  \csname the#1h\endcsname\flog@hsym
  \ifthenelse{\value{#1m}<10}{0}{}%
  \csname the#1m\endcsname
}
\newcommand*{\flog@msgtime}[1]{%
  \csname the#1h\endcsname h%
%   \ifthenelse{\value{#1m}<10}{0}{}%
  \expandafter\ifnum\csname c@#1m\endcsname<10 0\fi
  \csname the#1m\endcsname
}
%
%
\flog@newtime{flog@refdday}
\flog@newtime{flog@refcday}
\flog@newtime{flog@refdnig}
\flog@newtime{flog@refcnig}
\newcommand*{\setrefdate}{%
  \flog@copytime{flog@refdday}{flog@dday}%
  \flog@copytime{flog@refcday}{flog@cday}%
  \flog@copytime{flog@refdnig}{flog@dnig}%
  \flog@copytime{flog@refcnig}{flog@cnig}%
  \gdef\flog@refdate{getit}%
}
\newcommand*{\sinceref}{%
  \ifthenelse{\equal{\flog@refdate}{getit}}{%
    \message{^^J^^J ** Vous n'avez pas vole depuis le \flog@lastdate\space **^^J^^J}
  }{%
    \message{^^J^^JDu \flog@refdate\space au \flog@lastdate\space(inclus)^^J}
    \flog@copytime{flog@parsed}{flog@dday}%
    \flog@subtime{flog@parsed}{flog@refdday}%
    \message{\space\space Double jour : \flog@msgtime{flog@parsed}, }
    \flog@copytime{flog@parsed}{flog@cday}%
    \flog@subtime{flog@parsed}{flog@refcday}%
    \message{Cdt bord jour : \flog@msgtime{flog@parsed},^^J}
    \flog@copytime{flog@parsed}{flog@dnig}%
    \flog@subtime{flog@parsed}{flog@refdnig}%
    \message{\space\space Double nuit : \flog@msgtime{flog@parsed}, }
    \flog@copytime{flog@parsed}{flog@cnig}%
    \flog@subtime{flog@parsed}{flog@refcnig}%
    \message{Cdt bord nuit : \flog@msgtime{flog@parsed}^^J}
    \flog@copytime{flog@parsed}{flog@dday}%
    \flog@addtime{flog@parsed}{flog@cday}%
    \flog@subtime{flog@parsed}{flog@refdday}%
    \flog@subtime{flog@parsed}{flog@refcday}%
    \message{\space\space Total jour : \flog@msgtime{flog@parsed}, }
    \flog@copytime{flog@parsed}{flog@dnig}%
    \flog@addtime{flog@parsed}{flog@cnig}%
    \flog@subtime{flog@parsed}{flog@refdnig}%
    \flog@subtime{flog@parsed}{flog@refcnig}%
    \message{nuit : \flog@msgtime{flog@parsed}, }
    \flog@addtime{flog@parsed}{flog@dday}%
    \flog@addtime{flog@parsed}{flog@cday}%
    \flog@subtime{flog@parsed}{flog@refdday}%
    \flog@subtime{flog@parsed}{flog@refcday}%
    \message{soit : \flog@msgtime{flog@parsed}^^J}
    \flog@copytime{flog@parsed}{flog@dday}%
    \flog@addtime{flog@parsed}{flog@dnig}%
    \flog@subtime{flog@parsed}{flog@refdday}%
    \flog@subtime{flog@parsed}{flog@refdnig}%
    \message{\space\space Total double : \flog@msgtime{flog@parsed}, }
    \flog@copytime{flog@parsed}{flog@cday}%
    \flog@addtime{flog@parsed}{flog@cnig}%
    \flog@subtime{flog@parsed}{flog@refcday}%
    \flog@subtime{flog@parsed}{flog@refcnig}%
    \message{Cdt bord : \flog@msgtime{flog@parsed}, }
    \flog@addtime{flog@parsed}{flog@dday}%
    \flog@addtime{flog@parsed}{flog@dnig}%
    \flog@subtime{flog@parsed}{flog@refdday}%
    \flog@subtime{flog@parsed}{flog@refdnig}%
    \message{soit : \flog@msgtime{flog@parsed}^^J^^J}
  }
}
%
\newcommand*{\flog@getyear}[1]{%
  \edef\flog@year{}%
  \flog@getday#1@%
}
\newcommand*{\flog@getday}[1]{%
  \flog@ifdigit{#1}{%
    \let\next=\flog@getday
  }{%
    \let\next=\flog@getmonth
  }
  \next
}
\newcommand*{\flog@getmonth}[1]{%
  \flog@ifdigit{#1}{%
    \let\next=\flog@getmonth
  }{%
    \let\next=\flog@get@year
  }
  \next
}
\newcommand*{\flog@get@year}[1]{%
  \flog@ifdigit{#1}{%
    \edef\flog@year{\flog@year#1}%
    \let\next=\flog@get@year
  }{%
    \ifthenelse{\equal{#1}{@}}{%
      \let\next=\relax
    }{%
      \let\next=\flog@get@year
    }%
  }
  \next
}
\newcommand*{\flog@checkyear}[1]{%
  \flog@getyear{#1}%
  \ifthenelse{\equal{\flog@firstyear}{none}}{%
    \edef\flog@firstyear{\flog@year}%
  }{}%
  \edef\flog@lastyear{\flog@year}%
}
%
\edef\flog@pipecat{\the\catcode`\|}
\catcode`\|=\active
\def|#1|{\flog@newflight{#1}}
\newcommand*{\flog@newflight}[1]{%
  \addtocounter{flog@flord}{-6}%
  \stepcounter{flog@flnum}%
  \stepcounter{flog@flpgnum}%
  \flog@checkpg
  \flog@checkyear{#1}%
  \gdef\flog@lastdate{#1}%
  \ifthenelse{\equal{\flog@refdate}{getit}}{%
    \gdef\flog@refdate{#1}%
  }{}%
  \put(0,\value{flog@flord}){\makebox(17,6){\sffamily#1}}%
  \def|##1|{\flog@gettype{##1}}|%
}
\newcommand*{\flog@gettype}[1]{%
  \put(17,\value{flog@flord}){\makebox(13,6){\sffamily#1}}%
  \def|##1|{\flog@getimmat{##1}}|%
}
\newcommand*{\flog@getimmat}[1]{%
  \put(30,\value{flog@flord}){\makebox(15,6){\sffamily#1}}%
  \def|##1|{\flog@getfunc{##1}}|%
}
\newcommand*{\flog@getfunc}[1]{%
  \put(45,\value{flog@flord}){\makebox(5,6){\sffamily#1}}%
  \def|##1|{\flog@getnat{##1}}|%
}
\newcommand*{\flog@getnat}[1]{%
  \put(50,\value{flog@flord}){\makebox(45,6)[l]{%
    \sffamily\hspace*{1mm minus 0.8mm}\small #1}%
  }%
  \def|##1|{\flog@getdday{##1}}|%
}
\newcommand*{\flog@getdday}[1]{%
  \put(95,\value{flog@flord}){\makebox(10,6){\sffamily#1}}%
  \flog@parse@addtime{flog@dday}{#1}%
  \def|##1|{\flog@getcday{##1}}|%
}
\newcommand*{\flog@getcday}[1]{%
  \put(105,\value{flog@flord}){\makebox(10,6){\sffamily#1}}%
  \flog@parse@addtime{flog@cday}{#1}%
  \def|##1|{\flog@getdnig{##1}}|%
}
\newcommand*{\flog@getdnig}[1]{%
  \put(115,\value{flog@flord}){\makebox(10,6){\sffamily#1}}%
  \flog@parse@addtime{flog@dnig}{#1}%
  \def|##1|{\flog@getcnig{##1}}|%
}
\bgroup
\catcode`\^^M=12%
\gdef\flog@getcnig#1{%
  \put(125,\value{flog@flord}){\makebox(10,6){\sffamily#1}}%
  \flog@parse@addtime{flog@cnig}{#1}%
  \edef\flog@retcat{\the\catcode`\^^M}%
  \catcode`\^^M=12%
  \def|##1^^M{\flog@getcom{##1}}|%
}%
\egroup
\newcommand*{\flog@getcom}[1]{%
  \put(136,\value{flog@flord}){\makebox(63,6)[l]{%
    \parbox[0pt]{63mm}{\sffamily
      \begin{flushleft}
        \footnotesize #1
      \end{flushleft}
    }%
  }}%
  \catcode`\^^M=\flog@retcat
  \def|##1|{\flog@newflight{##1}}%
}
\catcode`\|=\flog@pipecat
%
\newcounter{flog@tmpcnt}
%
\newcounter{flog@flnum}
\newcounter{flog@flpgnum}
\newcounter{flog@flord}
\newcounter{flog@pgnum}
%
\flog@newtime{flog@parsed}
%
\flog@newtime{flog@dday}
\flog@newtime{flog@cday}
\flog@newtime{flog@dnig}
\flog@newtime{flog@cnig}
\flog@newtime{flog@tot}
%
\flog@settime{flog@dday}{0}{0}%
\flog@settime{flog@cday}{0}{0}%
\flog@settime{flog@dnig}{0}{0}%
\flog@settime{flog@cnig}{0}{0}%
\flog@settime{flog@tot}{0}{0}%
%
\newlength{\flog@tmplen}
\newboolean{flog@picton}
%
\newcommand*{\flog@fleche}{\raisebox{-0.1ex}{\ding{"E1}}}
\newcommand*{\flog@maketotals}{%
  \ifthenelse{\equal{\flog@firstyear}{\flog@lastyear}}{%
    \put(10,120){\makebox(180,4){%
      \large\sffamily ANN\'EE \flog@firstyear
    }}
  }{%
    \put(10,120){\makebox(180,4){%
      \large\sffamily ANN\'EE \flog@firstyear\ -- \flog@lastyear
    }}
  }%
  \flog@settime{flog@tot}{0}{0}%
  \flog@addtime{flog@tot}{flog@dday}%
  \flog@addtime{flog@tot}{flog@cday}%
  \flog@addtime{flog@tot}{flog@dnig}%
  \flog@addtime{flog@tot}{flog@cnig}%
  \put(0,4){\makebox(50,3)[l]{%
    \sffamily\small Total g\'en\'eral des heures de vol comme pilote :
  }}%
  \put(0,0){\makebox(50,3){%
    \sffamily\small \theflog@toth\ heures \theflog@totm\ minutes.
  }}%
  \put(95,3){\makebox(10,6){\sffamily\flog@displaytime{flog@dday}}}%
  \put(105,3){\makebox(10,6){\sffamily\flog@displaytime{flog@cday}}}%
  \put(115,3){\makebox(10,6){\sffamily\flog@displaytime{flog@dnig}}}%
  \put(125,3){\makebox(10,6){\sffamily\flog@displaytime{flog@cnig}}}%
  \put(50,3){\makebox(45,6)[r]{%
    \sffamily\itshape \`A reporter \flog@fleche\hspace*{1mm minus 0.8mm}%
  }}
}
\newcommand*{\flog@startpage}{%
  \ifthenelse{\boolean{flog@picton}}{%
    \flog@maketotals
    \end{picture}%
  }{}%
  \def\flog@firstyear{none}%
  \stepcounter{flog@pgnum}%
  \setcounter{flog@flord}{87}%
%   \ifthenelse{\isodd{\value{flog@pgnum}}}{%
%     \newpage
%   }{%
%     \@par
%     \vspace*{-\baselineskip}\vspace*{-\parskip}\vspace*{11mm}%
%     \makebox[\textwidth][s]{\rule{2mm}{0.1mm}\hfill\rule{2mm}{0.1mm}}%
%     \@par
%     \vspace*{-\baselineskip}\vspace*{-\parskip}\vspace*{11mm}%
%   }
  \newpage
  \setboolean{flog@picton}{true}%
  \begin{picture}(200,126)
    \ifthenelse{\isodd{\value{flog@pgnum}}}{%
      \put(190,120){\makebox(10,4)[r]{\sffamily\arabic{flog@pgnum}}}
    }{%
      \put(0,120){\makebox(10,4)[l]{\sffamily\arabic{flog@pgnum}}}
    }
%
    \put(0,93){\framebox(200,25){}} % heading box
    \put(0,93){\makebox(17,25){\sffamily\small DATE}}
    \put(17,93){\makebox(13,15){\sffamily\small TYPE}}
    \put(30,98){\makebox(15,8){\sffamily\footnotesize IMMATRI-}}
    \put(30,95){\makebox(15,7){\sffamily\footnotesize CULATION}}
    \put(17,110){\makebox(28,10){\sffamily\small A\'ERONEF}}
    \put(45,93){\makebox(5,25){\rotatebox[origin=bl]{90}{\sffamily\small FONCTION}}}
    \put(50,93){\makebox(45,25){\sffamily\small NATURE DU VOL}}
    \put(135,93){\makebox(65,25){%
      \parbox[c][23mm][c]{63mm}{%
        \begin{center}
          \sffamily\small
          OBSERVATIONS ET VISA\\
          DE L'AUTORIT\'E HABILIT\'EE \\
          OU DE L'INSTRUCTEUR
        \end{center}
      }
    }}
%
    \put(70,93){\makebox(25,6)[r]{%
      \sffamily\itshape Reports \flog@fleche\hspace*{1mm minus 0.8mm}%
    }}
    \put(95,93){\makebox(10,6){\sffamily\flog@displaytime{flog@dday}}}%
    \put(105,93){\makebox(10,6){\sffamily\flog@displaytime{flog@cday}}}%
    \put(115,93){\makebox(10,6){\sffamily\flog@displaytime{flog@dnig}}}%
    \put(125,93){\makebox(10,6){\sffamily\flog@displaytime{flog@cnig}}}%
%
    \multiput(0,15)(0,6){13}{\line(1,0){200}} % lines under each flight
    \put(0,9){\framebox(200,84){}} % flights box
    \put(95,3){\line(1,0){40}} % line under totals
    \put(17,9){\line(0,1){109}} % right limit of date
    \put(30,9){\line(0,1){99}} % right limit of type
    \put(45,9){\line(0,1){109}} % right limit of immat
    \put(17,108){\line(1,0){28}} % line above type and immat
    \put(50,9){\line(0,1){109}} % right limit of func
%-
    \put(95,3){\line(0,1){115}} % right limit of nat
    \put(105,3){\line(0,1){102}} % right limit of double/day
    \put(115,3){\line(0,1){108}} % right limit of captain/day
    \put(125,3){\line(0,1){102}} % right limit of double/night
    \put(135,3){\line(0,1){115}} % right limit of captain/night
%
    \put(95,99){\line(1,0){40}}
    \put(95,105){\line(1,0){40}}
    \put(95,111){\line(1,0){40}}
    \put(95,99){\makebox(10,6){\sffamily\footnotesize Double}}
    \put(115,99){\makebox(10,6){\sffamily\footnotesize Double}}
    \put(105,99){\makebox(10,6){%
      \sffamily\footnotesize C\raisebox{0.8ex}{\scriptsize dt} bord}%
    }
    \put(125,99){\makebox(10,6){%
      \sffamily\footnotesize C\raisebox{0.8ex}{\scriptsize dt} bord}%
    }
    \put(95,105){\makebox(20,6){\sffamily\small JOUR}}
    \put(115,105){\makebox(20,6){\sffamily\small NUIT}}
    \put(95,111){\makebox(40,6){%
      \sffamily\small\hfill PILOTE\hfill MONOMOTEURS\hfill
    }}
}
%
\newcommand{\arretcarnet}[1]{%
  \addtocounter{flog@flord}{-6}%
  \stepcounter{flog@flnum}%
  \stepcounter{flog@flpgnum}%
  \flog@checkpg
  \addtocounter{flog@flord}{-6}%
  \put(51,\value{flog@flord}){\makebox(148,6)[l]{%
    \parbox[t][0pt][t]{146mm}{%
      \begin{raggedright}
        \setlength{\flog@tmplen}{6mm}%
        \addtolength{\flog@tmplen}{-\baselineskip}%
        \let\flog@slash@ori\\
        \def\\{\flog@slash@ori[\flog@tmplen]}%
        \sffamily#1
      \end{raggedright}
    }%
  }}%
  \setcounter{flog@flpgnum}{14}%
}
\newenvironment{flights}{%
  \setcounter{flog@flnum}{0}%
  \setcounter{flog@flpgnum}{14}%
  \setcounter{flog@pgnum}{0}%
  \stepcounter{flog@pgnum}%
  \newcommand*{\flog@refdate}{getit}%
  \setlength{\unitlength}{1mm}%
  \begin{picture}(200,126)
    \put(10,113){\makebox(40,4){\makebox[40mm][s]{\sffamily\fontsize{11pt}{13pt}\selectfont DIRECTION\hfill G\'EN\'ERALE}}}
    \put(10,108){\makebox(40,4){\makebox[40mm][s]{\sffamily\fontsize{11pt}{13pt}\selectfont DE\hfill L'AVIATION\hfill CIVILE}}}
    \put(160,108){\makebox(47,9){\sffamily\Huge{\No \flog@cdvnumber}}}
    \put(0,58){\makebox(200,10){\sffamily\Huge{\bfseries CARNET DE VOL}}}
    \put(0,18){\makebox(200,6){%
      \sffamily\LARGE Appartenant \`a \flog@titulaire
    }}%
  \end{picture}
  \stepcounter{flog@pgnum}%
%   \@par
%   \vspace*{-\baselineskip}\vspace*{-\parskip}\vspace*{11mm}%
%   \makebox[\textwidth][s]{\rule{2mm}{0.1mm}\hfill\rule{2mm}{0.1mm}}%
%   \@par
%   \vspace*{-\baselineskip}\vspace*{-\parskip}\vspace*{11mm}%
  \newpage
  \begin{picture}(200,126) % Nom et adresse de l'employeur
    \put(0,120){\makebox(10,4)[l]{\sffamily\arabic{flog@pgnum}}}
    \put(0,0){\framebox(110,118){}}
    \put(0,105){\makebox(110,5){%
      \Large\sffamily\bfseries Nom et adresse de l'Employeur
    }}
    \put(111,0){\framebox(89,118){}}
    \multiput(111,6)(0,6){15}{\line(1,0){89}}
    \put(111,103){\line(1,0){89}}
    \put(146,0){\line(0,1){103}}
    \put(173,0){\line(0,1){103}}
    \put(111,109){\makebox(89,8){\sffamily APPAREILS PILOT\'ES}}
    \put(111,104){\makebox(89,7){\sffamily
      ou sur lesquels ont \'et\'e effectu\'es les vols
    }}
    \put(111,90){\makebox(35,13){\sffamily TYPES}}
    \put(146,95){\makebox(27,7){\sffamily NOMBRE}}
    \put(146,91){\makebox(27,6){\sffamily d'heures de vol}}
    \put(173,90){\makebox(27,13){\sffamily OBSERVATIONS}}
  \end{picture}
  \stepcounter{flog@pgnum}%
  \newpage
  \begin{picture}(200,126) % Etat civil du titulaire
    \put(190,120){\makebox(10,4)[r]{\sffamily\arabic{flog@pgnum}}}
    \put(0,0){\framebox(90,118){}}
    \put(0,105){\framebox(90,13){\sffamily \'ETAT CIVIL DU TITULAIRE}}
    \put(2,90){\makebox(86,5)[l]{\sffamily Nom : \flog@ownername}}
    \put(2,82){\makebox(86,5)[l]{\sffamily Pr\'enoms : \flog@ownerfname}}
    \put(2,74){\makebox(86,5)[l]{\sffamily Date de naissance : \flog@birthdate}}
    \put(2,66){\makebox(86,5)[l]{\sffamily Lieu : \flog@birthloc}}
    \put(2,58){\makebox(86,5)[tl]{\sffamily Adresse : 
      \parbox[t]{65mm}{\sffamily\flog@address}%
    }}
    \put(0,40){\makebox(90,3){\scriptsize\sffamily
      Signature et cachet de l'Autorit\'e habilit\'ee
    }}
    %
    \put(91,0){\framebox(109,118){}}
    \put(91,105){\framebox(109,13){}}
    \put(91,96){\framebox(109,9){}}
    \multiput(91,6)(0,6){15}{\line(1,0){109}}
    \put(141,0){\line(0,1){105}}
    \put(179,0){\line(0,1){105}}
    \put(91,110){\makebox(109,7){\sffamily
      BREVETS ET QUALIFICATIONS DU P.N.
    }}
    \put(91,106){\makebox(109,6){\sffamily
      dont le possesseur du pr\'esent carnet est titulaire
    }}
    \put(91,96){\makebox(50,9){\sffamily NATURE}}
    \put(141,96){\makebox(38,9){\sffamily NUM\'ERO}}
    \put(179,100){\makebox(21,5){\sffamily DATE DE}}
    \put(179,96){\makebox(21,4){\sffamily D\'ELIVRANCE}}
    \setcounter{flog@flord}{90}
    \setcounter{flog@tmpcnt}{0}
    \whiledo{\value{flog@tmpcnt}<\value{flog@qualifnum}}{%
      \stepcounter{flog@tmpcnt}%
      \put(92,\value{flog@flord}){\makebox(48,6)[l]{\sffamily
        \flog@getqual{flog@tmpcnt}{name}%
      }}
      \put(142,\value{flog@flord}){\makebox(36,6){\sffamily
        \flog@getqual{flog@tmpcnt}{num}%
      }}
      \put(180,\value{flog@flord}){\makebox(18,6){\sffamily
        \flog@getqual{flog@tmpcnt}{day}.%
        \flog@getqual{flog@tmpcnt}{month}.%
        \flog@getqual{flog@tmpcnt}{year}%
      }}
      \addtocounter{flog@flord}{-6}%
    }
  \end{picture}
  \stepcounter{flog@pgnum}%
%   \@par
%   \vspace*{-\baselineskip}\vspace*{-\parskip}\vspace*{11mm}%
%   \makebox[\textwidth][s]{\rule{2mm}{0.1mm}\hfill\rule{2mm}{0.1mm}}%
%   \@par
%   \vspace*{-\baselineskip}\vspace*{-\parskip}\vspace*{11mm}%
  \newpage
  \begin{picture}(200,126) % Carnet ouvert le ...
    \put(0,120){\makebox(10,4)[l]{\sffamily\arabic{flog@pgnum}}}
    \put(0,0){\framebox(139,118){}}
    \put(140,0){\framebox(60,118){}}
    \put(1,110){\makebox(137,4)[l]{\sffamily
      Ouvert le pr\'esent carnet au total g\'en\'eral de (1) :
    }}
    \put(1,100){\makebox(137,4)[l]{\sffamily\flog@openat}}
    \put(1,90){\makebox(137,4){\sffamily
      de vol, d\'etaill\'ees ci-contre, comprenant :\hfill\flog@fleche
    }}
    \put(1,65){\makebox(137,20){\sffamily
      comme pilote\dotfill\raisebox{-0.25em}{\(\left\{%
      \begin{tabular}{lcrcrc}
        \sffamily
        JOUR &:&%
        \flog@copytime{flog@parsed}{flog@dday}%
        \flog@addtime{flog@parsed}{flog@cday}%
        \theflog@parsedh
        &h.&\theflog@parsedm
        &min.\\
        \\
        NUIT &:&%
        \flog@copytime{flog@parsed}{flog@dnig}%
        \flog@addtime{flog@parsed}{flog@cnig}%
        \theflog@parsedh
        &h.&\theflog@parsedm
        &min.\\
      \end{tabular}%
      \right.\)}%
    }}
    \put(1,60){\makebox(137,4)[l]{\sffamily
      \`a la date du : \flog@openon
    }}
    \put(1,45){\makebox(137,4)[l]{\sffamily
      Fait \`a \flog@openwhere, le \flog@opendate
    }}
    \put(1,30){\makebox(120,10){%
      \parbox{120mm}{%
        \begin{center}
          \sffamily\slshape\scriptsize
          Signature et cachet\\
          de l'autorit\'e ouvrant le carnet
        \end{center}
      }
    }}
    \put(1,1){\makebox(137,4)[l]{\sffamily\scriptsize
      (1) En toutes lettres.
    }}
%
    \multiput(140,90)(0,7){4}{\line(1,0){60}}
    \multiput(155,0)(30,0){2}{\line(0,1){104}}
    \put(170,0){\line(0,1){111}}
    \put(140,111){\makebox(60,7){\sffamily PILOTE MONOMOTEURS}}
    \put(140,104){\makebox(30,7){\sffamily JOUR}}
    \put(170,104){\makebox(30,7){\sffamily NUIT}}
    \put(140,97){\makebox(15,7){\sffamily Double}}
    \put(155,97){\makebox(15,7){\sffamily C\raisebox{0.8ex}{\scriptsize dt} bord}}
    \put(170,97){\makebox(15,7){\sffamily Double}}
    \put(185,97){\makebox(15,7){\sffamily C\raisebox{0.8ex}{\scriptsize dt} bord}}
    \put(140,90){\makebox(15,7){\sffamily\flog@displaytime{flog@dday}}}
    \put(155,90){\makebox(15,7){\sffamily\flog@displaytime{flog@cday}}}
    \put(170,90){\makebox(15,7){\sffamily\flog@displaytime{flog@dnig}}}
    \put(185,90){\makebox(15,7){\sffamily\flog@displaytime{flog@cnig}}}
  \end{picture}
  \setboolean{flog@picton}{false}%
  \catcode`\|=\active
  \catcode`^^c2=10%
}{%
  \ifthenelse{\boolean{flog@picton}}{%
    \flog@maketotals
    \end{picture}%
    \ifthenelse{\isodd{\value{flog@pgnum}}}{%
      \@par
      \vspace*{-\baselineskip}\vspace*{-\parskip}\vspace*{11mm}%
      \makebox[\textwidth][s]{\rule{2mm}{0.1mm}\hfill\rule{2mm}{0.1mm}}%
      \@par
    }{}%
  }{}%
  \catcode`\@=\flog@pipecat
}
\endinput
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Exemple de carnet de vol %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{flightlg}        % Ceci est un carnet de vol

\begin{document}

\cdvnumber{1}                     % Num\'ero du carnet (c'est mon premier)
\titulaire{M. Glloq Robin}        % \`A qui appartient-il ?
\ownername{GLLOQ}                 %   Nom
\ownerfname{Robin}                %   Pr\'enom
\birthdate{29 f\'evrier 1960}       % Date de naissance
\birthloc{Paris}                  % Lieu de naissance
\address{172 rue de l'\'Etape de base\\  % Adresse
         78117 Toussus-le-Noble}

\begin{qualifs} % Qualifications: nom/num\'ero/jour/mois/ann\'ee de d\'elivrance
  \qualif{Carte de stagiaire }{12.00.1414.92 }{12}{11}{1992}
  \qualif{Brevet de base }{}{31}{08}{1993}
  \qualif{Brevet TT }{12.00.0058.95 }{24}{04}{1995}
\end{qualifs}

\begin{flights} % Les vols !
%|JJ.MM.AAAA|Type d'avion|Immatriculation|Fonction \`a bord|Nature du vol| DJ | SJ | DN | SN |Observations
% Avec DJ : double commande de jour
%      SJ : solo de jour
%      DN : double commande de nuit
%      SN : solo de nuit
|26.09.1992|MS880|F-BXTV| EP |Etampes local                   |   0,25|       |       |       |
|31.08.1993|MS880|F-BXTV| EP |Etampes->Chartres Champhol      |   0,40|       |       |       |Test BB, Gilles Labille
|31.08.1993|MS880|F-BXTV| EP |Chartres Champhol->Etampes      |   0,43|       |       |       |
|28.09.1996|F-172|F-GHBN| P  |Etampes TdP                     |   0,29|       |       |       |L\^ach\'e C-172, Ernest Manchauvent
|16.03.1997|F-172|F-GHBN| P  |Etampes TdP                     |       |   0,36|       |       |
|17.05.1997|DR400|F-GOVT| P  |Etampes TdP                     |   0,20|       |       |       |L\^ach\'e DR-400, Jean Millepiedpasplus
|06.09.1997|F-172|F-GHBN| P  |Etampes-Orl\'eans St Denis      |       |   0,52|       |       |
|06.09.1997|F-172|F-GHBN| P  |Orl\'eans St Denis-Etampes      |       |   0,35|       |       |
\setrefdate  % Remise \`a z\'ero des compteurs utilis\'es par \sinceref pour calculer les heures de vol entre 2 dates
|02.04.1999|C-150|F-BVBV| EP |Toussus local                   |   0,49|       |       |       |Contr\^ole biennal, Luc Leplan
|16.04.1999|C-172|F-BVID| EP |Toussus TdP                     |   0,46|       |       |       |L\^ach\'e C-172, Marcel Hontienlaxe
\arretcarnet{% Arr\^et du carnet pour renouvellement de license
Je soussign\'e Robin Glloq certifie avoir effectu\'e\\
un total de 6 heures et 15 minutes de vol.\\
\hspace*{3cm}le 22 avril 1999
}
|21.08.1999|C-152|F-GCNG| P  |Toussus -> Royan                |       |   2,45|       |       |
|21.08.1999|C-152|F-GCNG| P  |Royan local                     |       |   0,43|       |       |
|22.08.1999|C-152|F-GCNG| P  |Royan -> Toussus                |       |   2,57|       |       |
\sinceref    % Affiche les heures de vol entre le 2 avril 1999 et le 22 ao\^ut 1999 inclus
\end{flights}
\end{document}
