371584c2eae4cf827fd406ba26c14f021adaaa70Yuri Pankov/* $Id: tbl_opts.c,v 1.21 2015/09/26 00:54:04 schwarze Exp $ */
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov * Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * Permission to use, copy, modify, and distribute this software for any
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * purpose with or without fee is hereby granted, provided that the above
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * copyright notice and this permission notice appear in all copies.
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
95c635efb7c3b86efc493e0447eaec7aecca3f0fGarrett D'Amore * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov {"decimalpoint", 0},
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov {"delim", 0},
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov {"linesize", 0},
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov#define KEY_MAXKEYS ((int)(sizeof(keys)/sizeof(keys[0])))
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankovstatic void arg(struct tbl_node *, int, const char *, int *, int);
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankovarg(struct tbl_node *tbl, int ln, const char *p, int *pos, int key)
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov /* Arguments are enclosed in parentheses. */
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov * Parse one line of options up to the semicolon.
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov * Each option can be preceded by blanks and/or commas,
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov * and some options are followed by arguments.
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankovtbl_option(struct tbl_node *tbl, int ln, const char *p, int *offs)
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov while (p[pos] == ' ' || p[pos] == '\t' || p[pos] == ',')
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov /* Parse one option name. */
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov /* Look up the option name. */
260e9a87725c090ba5835b1f9f0b62fa2f96036fYuri Pankov /* Handle the option. */