/*
* +-------------------------------------------------------+
* | |
* | videogen |
* | |
* | a simple XFree86 Modeline calculator |
* | (c) 1997-2002, Szabolcs Rumi |
* | |
* | http://www.rtfm.hu/videogen |
* | |
* | the videogen package is distributed under the |
* | GNU General Public License Version 2 (GPLv2) |
* | |
* +-------------------------------------------------------+
*/
#include <stdio.h>
#include <string.h>
#include "config.h"
#include "videogen.h"
/*
* parameter checking functions return values:
*
* commit success retval = 0
* precedence error retval = -1
* overflow error retval > 0
* underflow error retval < 0
*/
int
commit_verbose (int precedence, unsigned int *verbose, unsigned int x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (precedence < current_precedence)
return (-1);
*verbose = x;
current_precedence = precedence;
return (0);
}
int
commit_fbset (int precedence, unsigned int *fbset, unsigned int x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (precedence < current_precedence)
return (-1);
*fbset = x;
current_precedence = precedence;
return (0);
}
int
commit_nvidia (int precedence, unsigned int *nvidia, unsigned int x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (precedence < current_precedence)
return (-1);
*nvidia = x;
current_precedence = precedence;
return (0);
}
int
commit_mode (int precedence, resolution_t (*modes)[], unsigned int *num_modes, unsigned int x, unsigned int y)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_WIDTH_MIN)
return (-2);
if (x > CFG_WIDTH_MAX)
return (2);
if (y < CFG_HEIGHT_MIN)
return (-3);
if (y > CFG_HEIGHT_MAX)
return (3);
if ((double)y / x < CFG_ASPECT_RATIO_MIN)
return (-4);
if ((double)y / x > CFG_ASPECT_RATIO_MAX)
return (4);
if ((unsigned int)(x / 8) * 8 != x)
return (6);
if (precedence < current_precedence)
return (-1);
if (precedence > current_precedence)
*num_modes = 0;
if (*num_modes > 255)
return (5);
(*modes)[*num_modes].hres = x;
(*modes)[*num_modes].vres = y;
(*num_modes)++;
current_precedence = precedence;
return (0);
}
int
commit_max_dotclk (int precedence, double *max_dotclk, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_MAX_DOTCLK_MIN)
return (-2);
if (x > CFG_MAX_DOTCLK_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*max_dotclk = x;
current_precedence = precedence;
return (0);
}
int
commit_max_hfreq (int precedence, double *max_hfreq, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_MAX_HFREQ_MIN)
return (-2);
if (x > CFG_MAX_HFREQ_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*max_hfreq = x;
current_precedence = precedence;
return (0);
}
int
commit_max_vfreq (int precedence, double *max_vfreq, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_MAX_VFREQ_MIN)
return (-2);
if (x > CFG_MAX_VFREQ_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*max_vfreq = x;
current_precedence = precedence;
return (0);
}
int
commit_desired_vfreq (int precedence, double *desired_vfreq, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_TARGET_VFREQ_MIN)
return (-2);
if (x > CFG_TARGET_VFREQ_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*desired_vfreq = x;
current_precedence = precedence;
return (0);
}
int
commit_hvisible (int precedence, double *hvisible, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_HORIZ_VISIBLE_MIN)
return (-2);
if (x > CFG_HORIZ_VISIBLE_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*hvisible = x;
current_precedence = precedence;
return (0);
}
int
commit_vvisible (int precedence, double *vvisible, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_VERT_VISIBLE_MIN)
return (-2);
if (x > CFG_VERT_VISIBLE_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*vvisible = x;
current_precedence = precedence;
return (0);
}
int
commit_hfporch (int precedence, double *hfporch, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_HORIZ_FRONT_PORCH_MIN)
return (-2);
if (x > CFG_HORIZ_FRONT_PORCH_MAX)
return (2);
if ((unsigned int)(x / 8) * 8 != x)
return (3);
if (precedence < current_precedence)
return (-1);
*hfporch = x;
current_precedence = precedence;
return (0);
}
int
commit_hbporch (int precedence, double *hbporch, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_HORIZ_BACK_PORCH_MIN)
return (-2);
if (x > CFG_HORIZ_BACK_PORCH_MAX)
return (2);
if ((unsigned int)(x / 8) * 8 != x)
return (3);
if (precedence < current_precedence)
return (-1);
*hbporch = x;
current_precedence = precedence;
return (0);
}
int
commit_hsync (int precedence, double *hsync, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_HORIZ_SYNC_PULSE_MIN)
return (-2);
if (x > CFG_HORIZ_SYNC_PULSE_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*hsync = x;
current_precedence = precedence;
return (0);
}
int
commit_vfporch (int precedence, double *vfporch, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_VERT_FRONT_PORCH_MIN)
return (-2);
if (x > CFG_VERT_FRONT_PORCH_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*vfporch = x;
current_precedence = precedence;
return (0);
}
int
commit_vbporch (int precedence, double *vbporch, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_VERT_BACK_PORCH_MIN)
return (-2);
if (x > CFG_VERT_BACK_PORCH_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*vbporch = x;
current_precedence = precedence;
return (0);
}
int
commit_vsync (int precedence, double *vsync, double x)
{
static int current_precedence = CFG_PREC_DEFAULT;
if (x < CFG_VERT_SYNC_PULSE_MIN)
return (-2);
if (x > CFG_VERT_SYNC_PULSE_MAX)
return (2);
if (precedence < current_precedence)
return (-1);
*vsync = x;
current_precedence = precedence;
return (0);
}
/* EOF */
syntax highlighted by Code2HTML, v. 0.9.1