/*****************************************************************************\
 * common.c
 * $Id: common.c,v 1.3 2006/01/24 00:25:40 dsp_llnl Exp $
 *****************************************************************************
 *  Copyright (C) 2002-2005 The Regents of the University of California.
 *  Produced at the Lawrence Livermore National Laboratory.
 *  Written by Dave Peterson <dsp@llnl.gov> <dave_peterson@pobox.com>.
 *  UCRL-CODE-2003-012
 *  All rights reserved.
 *
 *  This file is part of lxbios, a utility for reading/writing coreboot
 *  parameters and displaying information from the coreboot table.
 *  For details, see <http://www.llnl.gov/linux/lxbios/>.
 *
 *  Please also read the file DISCLAIMER which is included in this software
 *  distribution.
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License (as published by the
 *  Free Software Foundation) version 2, dated June 1991.
 *
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the terms and
 *  conditions of the GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
\*****************************************************************************/

#include "common.h"

/* basename of this program, as reported by argv[0] */
const char prog_name[] = "lxbios";

/* version of this program */
const char prog_version[] = "2.0.1";

/****************************************************************************
 * get_line_from_file
 *
 * Get a line of input from file 'f'.  Store result in 'line' which is an
 * array of 'line_buf_size' bytes.
 ****************************************************************************/
int get_line_from_file (FILE *f, char line[], int line_buf_size)
 { if (fgets(line, line_buf_size, f) == NULL)
      return LINE_EOF;

   /* If the file contains a line that is too long, then it's best to let the
    * user know right away rather than passing back a truncated result that
    * will lead to problems later on.
    */
   return (strlen(line) == ((size_t) (line_buf_size - 1))) ?
          LINE_TOO_LONG : OK;
 }

/****************************************************************************
 * out_of_memory
 *
 * We ran out of memory.  Print an error message and die.
 ****************************************************************************/
void out_of_memory (void)
 { fprintf(stderr, "%s: Out of memory.\n", prog_name);
   exit(1);
 }

/****************************************************************************
 * usage
 *
 * Write a usage message to 'outfile'.  If 'outfile' is 'stderr' then exit
 * with a value of 1.  Otherwise exit with a value of 0.
 ****************************************************************************/
void usage (FILE *outfile)
 { fprintf(outfile,
           "Usage: %s [-y LAYOUT_FILE | -t] PARAMETER ...\n\n"
           "       Read/write coreboot parameters or show info from "
           "coreboot table.\n\n"
           "       -y LAYOUT_FILE: Use CMOS layout specified by "
           "LAYOUT_FILE.\n"
           "       -t:             Use CMOS layout specified by CMOS option "
           "table.\n"
           "       [-n] -r NAME:   Show parameter NAME.  If -n is given, "
           "show value only.\n"
           "       -e NAME:        Show all possible values for parameter "
           "NAME.\n"
           "       -a:             Show names and values for all "
           "parameters.\n"
           "       -w NAME=VALUE:  Set parameter NAME to VALUE.\n"
           "       -p INPUT_FILE:  Set parameters according to INPUT_FILE.\n"
           "       -i:             Same as -p but file contents taken from "
           "standard input.\n"
           "       -c [VALUE]:     Show CMOS checksum or set checksum to "
           "VALUE.\n"
           "       -l [ARG]:       Show coreboot table info for ARG, or "
           "all ARG choices.\n"
           "       -d:             Show low-level dump of coreboot table.\n"
           "       -Y:             Show CMOS layout info.\n"
           "       -b OUTPUT_FILE: Dump CMOS memory contents to file.\n"
           "       -B INPUT_FILE:  Write file contents to CMOS memory.\n"
           "       -x:             Show hex dump of CMOS memory.\n"
           "       -X DUMPFILE:    Show hex dump of CMOS dumpfile.\n"
           "       -v:             Show version info for this program.\n"
           "       -h:             Show this message.\n", prog_name);
   exit(outfile == stderr);
 }
