Fixtype of printer states.
This is a product type introduced by fty::defprod.
Our printing functions take and return printer states.
The main content of a printer state is the bytes that form (the data of) the file being printed, in reverse order, which makes extending the data more efficent (by consing).
We keep track of the current indentation level, as a natural number starting from 0 (where 0 means left margin). This is used to print indented code, as typical.
We keep track of the printing options (see priopt). These do not change in the course of the printing, but they are convenient to keep in the printing state, to avoid passing them around as an extra parameter. They are set when the printing state is initially created, and they never change.
We include a boolean flag saying whether GCC extensions are enabled or not. This printer state component is set at the beginning and never changes. This printer state component could potentially evolve into a richer set of options for different versions and dialects of C.
In the future, we may make printer states richer, in order to support more elaborate printing strategies, e.g. involving a specified maximum number of columns, for which the printing state would need to keep track of the current number of columns and other information.
We could look into turning the printer state into a stobj in the future, if efficiency is an issue.