/***********************************************************************
 *
 * TITLE:
 *      internals.c
 *
 * AUTHOR:
 *      Cassie Mulnix
 *
 * DESCRIPTION:
 *      This module is part of the OPPS editor, xopps.  It contains
 *      object routines to save and load internal global variables.
 *
 *                              CHANGE HISTORY
 *
 * $Log: internals.c,v $
 * Revision 1.13  1994/06/02  19:43:45  clm
 * save auto_areset and auto_ereset
 *
 * Revision 1.12  1994/05/04  23:34:36  clm
 * ported to ANSI C
 *
 * Revision 1.11  1993/05/18  20:58:30  clm
 * added new message.c function
 *
 * Revision 1.10  1993/03/29  15:58:22  clm
 * set snap_evt default to ON
 *
 * Revision 1.9  1993/03/04  16:55:07  clm
 * added set_default_internals for incorrect files
 *
 * Revision 1.8  1993/02/20  00:07:16  clm
 * if error on load, set variables to correct values
 *
 * Revision 1.7  1992/12/11  19:18:26  clm
 * added current_page to be loaded and saved
 *
 * Revision 1.6  1992/09/24  15:43:51  clm
 * saved auto_renum toggle
 *
 * Revision 1.5  1992/09/22  22:36:06  clm
 * added utc_bar toggle to internals.c
 *
 * Revision 1.4  1992/09/16  14:55:35  clm
 * fixed load function so doesn't add object if error in load
 *
 * Revision 1.3  1992/09/16  14:06:34  clm
 * saved issue_disp toggle
 *
 * Revision 1.2  1992/08/27  20:14:12  clm
 * set page_end and page_begin wrt loaded pg_lines value
 *
 * Revision 1.1  1992/08/27  17:41:58  clm
 * Initial revision
 *
 *
 ***********************************************************************
 *
 * WARNINGS:
 *
 * EXTERNAL CALLABLE COMPONENTS (PUBLIC):
 *
 * GLOBALS:
 *
 * WAIVERS:
 *
 * NOTES:
 *
 * MANPAGE:
 *
 ***********************************************************************/

#ifndef lint
static char rcsid[] =
    "$Id: internals.c,v 1.13 1994/06/02 19:43:45 clm OEL $";
#endif

#include "xopps.h"

static void set_default_internals(void);
static int load_internals(char *buf);

/***********************************************************************
 *
 * FUNCTION:
 *      init_internals()
 *
 * INPUTS:
 *
 * OUTPUTS:
 *
 * RETURNS:
 *
 * EXTERNALLY READ:
 *
 * EXTERNALLY MODIFIED:
 *
 * DESCRIPTION:
 *	sets the load character for internal values
 *
 */

void 
init_internals(void)
{
    register_io_obj('F', load_internals);            /* register object */
}

/***********************************************************************
 *
 * FUNCTION:
 *      load_internals()
 *
 * INPUTS:
 *      buf     - (char *) the text buffer from an input file
 *
 * OUTPUTS:
 *
 * RETURNS:
 *
 * EXTERNALLY READ:
 *
 * EXTERNALLY MODIFIED:
 *
 * DESCRIPTION:
 *	loads internal variable values from the file
 *
 */

static int 
load_internals(char *buf)
{
    int areset = -1;
    int ereset = -1;

    if ((record_scan(buf + 1, "ddddddddd", &num_pages, &current_page, 
	&pg_lines, &snap_evt, &snap_txt, &issue_disp, &auto_renum,
	&areset, &ereset) == 9) || (record_scan(buf + 1, "ddddddd", 
	&num_pages, &current_page, &pg_lines, &snap_evt, &snap_txt, 
	&issue_disp, &auto_renum) == 7)) {
	if ((num_pages < 0) || (num_pages > 7)) {
	    Warning("Illegal number of pages %d, defaults to 1 page",num_pages);
	    num_pages = 1;
	}
	if ((current_page < 0) || (current_page > num_pages)) {
	    Warning("Illegal current page value %d, defaults to page 1",
		current_page);
	    current_page = 1;
	}
	if ((pg_lines < 0) && (pg_lines > 99)) {
	    Warning("Illegal number of lines on page %d, defaults to 23", 
		pg_lines);
	    pg_lines = 23;
   	}
	page_end = pg_lines;
	page_begin = page_end - pg_lines + 1;
	if ((snap_evt != TOG_ON) && (snap_evt != TOG_OFF)) {
	    Warning("Illegal snap event toggle value %d, defaults to OFF", 
		snap_evt);
	    snap_evt = TOG_ON;
	}
	set_evt_tog();
	if ((snap_txt != TOG_ON) && (snap_txt != TOG_OFF)) {
	    Warning("Illegal snap text toggle value %d, defaults to OFF", 
		snap_txt);
	    snap_txt = TOG_OFF;
 	}
	set_txt_tog();
	if ((issue_disp != TOG_ON) && (issue_disp != TOG_OFF)) {
	    Warning("Illegal issue display toggle value %d, defaults to ON", 
		issue_disp);
	    issue_disp = TOG_ON;
	}
	if ((auto_renum != TOG_ON) && (auto_renum != TOG_OFF)) {
	    Warning("Illegal renumber toggle value %d, defaults to ON", 
		auto_renum);
	    auto_renum = TOG_ON;
 	}
	if (areset != -1) {
	    if ((areset != TOG_ON) && (areset != TOG_OFF)) {
		Warning("Illegal auto reset of % Dates, defualts to OFF");
		auto_areset = TOG_OFF;
	    } else {
		auto_areset = areset;
	    }
	}
	if (ereset != -1) {
	    if ((ereset != TOG_ON) && (ereset != TOG_OFF)) {
		Warning("Illegal auto reset of Event Symbols, defualts to OFF");
		auto_ereset = TOG_OFF;
	    } else {
		auto_ereset = ereset;
	    }
	}
	return 0;
    } else {
	Message("Default internals values being set");
	set_default_internals();
	return -1;
    }
}

/***********************************************************************
 *
 * FUNCTION:
 *      save_internals()
 *
 * INPUTS:
 *      fp      - (FILE *)
 *
 * OUTPUTS:
 *
 * RETURNS:
 *
 * EXTERNALLY READ:
 *
 * EXTERNALLY MODIFIED:
 *
 * DESCRIPTION:
 *	saves the internal variable values
 *
 */

void 
save_internals(FILE *fp)
{
    char buf[256];

    buf[0] = 'F';
    buf[1] = ' ';
    (void)record_print(buf+2, "ddddddddd", num_pages, current_page, pg_lines, 
	snap_evt, snap_txt, issue_disp, auto_renum, auto_areset, auto_ereset);
    (void)fputs(buf, fp);
}

/***********************************************************************
 *
 * FUNCTION:
 *      set_default_internals()
 *
 * INPUTS:
 *
 * OUTPUTS:
 *
 * RETURNS:
 *
 * EXTERNALLY READ:
 *
 * EXTERNALLY MODIFIED:
 *
 * DESCRIPTION:
 *      sets the default internal variable values for incorrect input
 *
 *
 */

static void 
set_default_internals(void) 
{
    num_pages = 1;
    current_page = 1;
    pg_lines = 23;
    snap_evt = TOG_OFF;
    snap_txt = TOG_OFF;
    issue_disp = TOG_ON;
    auto_renum = TOG_ON;
    auto_areset = TOG_OFF;
    auto_ereset = TOG_OFF;
}
