This paper describes the design of Odyssee, a system for FORTRAN programs manipulations and its application to automatic differentiation. The Odyssee system manipulates FORTRAN programs as symbolic objects. It is an open system built as a toolkit, written in a high-level programming language adapted to this purpose. The use of a variational method to perform data assimilation requires the computation of the gradient of a cost function represented by a large-size FORTRAN program. The usual drawback in the reverse automatic differentiation method is the storage requirement. The Odyssee system allows one to implement storage/recomputation strategies in order to fit the needed compromizes. We present the implementation of the strategy used in the weather forecasting ARPEGE/IFs project to produce the adjoint code from the code representing the numerical model. Odyssee produces the same code as the hand-written adjoint code for the ARPEGE/IFS project.