/*
* This file is part of DGD, http://dgd-osr.sourceforge.net/
* Copyright (C) 1993-2010 Dworkin B.V.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
# include "ed.h"
# include "vars.h"
/*
* The editor variables are handled here.
*/
/*
* NAME: vars->new()
* DESCRIPTION: allocate and initialize a variable buffer
*/
vars *va_new()
{
static vars dflt[] = {
{ "ignorecase", "ic", FALSE },
{ "shiftwidth", "sw", 4 },
{ "window", "wi", 20 },
};
register vars *v;
v = ALLOC(vars, NUMBER_OF_VARS);
memcpy(v, dflt, sizeof(dflt));
return v;
}
/*
* NAME: vars->del()
* DESCRIPTION: delete a variable buffer
*/
void va_del(v)
vars *v;
{
FREE(v);
}
/*
* NAME: vars->set()
* DESCRIPTION: set the value of a variable.
*/
void va_set(v, option)
register vars *v;
register char *option;
{
register char *val;
register Int i;
if (strncmp(option, "no", 2) == 0) {
option += 2;
val = "0";
} else {
val = strchr(option, '=');
if (val != (char *) NULL) {
*val++ = '\0';
}
}
for (i = NUMBER_OF_VARS; i > 0; --i, v++) {
if (strcmp(v->name, option) == 0 ||
strcmp(v->sname, option) == 0) {
if (!val) {
v->val = 1;
} else {
char *p;
p = val;
i = strtoint(&p);
if (val == p || i < 0) {
error("Bad numeric value for option \"%s\"", v->name);
}
v->val = i;
}
return;
}
}
error("No such option");
}
/*
* NAME: vars->show()
* DESCRIPTION: show all variables
*/
void va_show(v)
register vars *v;
{
output("%signorecase\011", ((v++)->val) ? "" : "no"); /* HT */
output("shiftwidth=%ld\011", (long) (v++)->val); /* HT */
output("window=%ld\012", (long) (v++)->val); /* LF */
}