/*
    See license.txt in the root of this project.
*/

# ifndef LMT_MAINBODY_H
# define LMT_MAINBODY_H

/* Global variables */

typedef enum run_states {
    initializing_state,
    updating_state,
    production_state,
} run_states;

typedef enum ready_states {
    output_disabled_state,
    output_enabled_state,
} ready_states;

typedef struct main_state_info {
    int    run_state;       /*tex Are we |INITEX|? */
    int    overload_state;
    int    ready_already;   /*tex A typical \TEX\ variable name. */
    double start_time;
} main_state_info ;

extern main_state_info lmt_main_state ;

/*tex

    The following procedure, which is called just before \TEX\ initializes its input and output,
    establishes the initial values of the date and time. It calls a macro-defined |dateandtime|
    routine. |dateandtime| in turn is also a |CCODE\ macro, which calls |get_date_and_time|,
    passing it the addresses of the day, month, etc., so they can be set by the routine.
    |get_date_and_time| also sets up interrupt catching if that is conditionally compiled in the
    \CCODE\ code.

*/

extern void tex_main_body                 (void);
extern void tex_close_files_and_terminate (int error);

# endif
