You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
6.7 KiB
C
214 lines
6.7 KiB
C
/*
|
|
* optstr.h
|
|
*
|
|
* Copyright (C) Tilmann Bitterberg 2003
|
|
*
|
|
* This file is part of transcode, a video stream processing tool
|
|
*
|
|
* transcode 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; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* transcode 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with GNU Make; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* optstr is a general purpose option string parser
|
|
*
|
|
* Usage example:
|
|
* int main (void)
|
|
* {
|
|
* int sum, top, bottom, quant;
|
|
* int n;
|
|
* char s[100];
|
|
* char options[] = "ranges=5-10:range=8,12,100:percent=16%:help";
|
|
*
|
|
* if (optstr_get (options, "help", "") >= 0)
|
|
* usage();
|
|
*
|
|
* optstr_get (options, "range", "%d,%d,%d", &bottom, &top, &sum);
|
|
* optstr_get (options, "ranges", "%d-%d", &bottom, &top);
|
|
* optstr_get (options, "range", "%d,%d", &bottom, &top);
|
|
* optstr_get (options, "string", "%[^:]", s);
|
|
* n = optstr_get (options, "percent", "%d%%", &quant);
|
|
* printf("found %d argumens\n", n);
|
|
*
|
|
* return 0;
|
|
* }
|
|
*
|
|
*/
|
|
|
|
#ifndef OPTSTR_H
|
|
#define OPTSTR_H
|
|
|
|
#define ARG_MAXIMUM (16)
|
|
#define ARG_SEP ':'
|
|
#define ARG_CONFIG_LEN 8192
|
|
|
|
/*
|
|
* optstr_lookup:
|
|
* Finds the _exact_ 'needle' in 'haystack' (naming intentionally
|
|
* identical to the 'strstr' (3) linux man page)
|
|
*
|
|
* Parameters:
|
|
* needle: substring to be searched
|
|
* haystack: string which is supposed to contain the substring
|
|
* Return Value:
|
|
* constant pointer to first substring found, or NULL if substring
|
|
* isn't found.
|
|
* Side effects:
|
|
* none
|
|
* Preconditions:
|
|
* none
|
|
* Postconditions:
|
|
* none
|
|
*/
|
|
const char * optstr_lookup(const char *haystack, const char *needle);
|
|
|
|
/*
|
|
* optstr_get:
|
|
* extract values from option string
|
|
*
|
|
* Parameters:
|
|
* options: a null terminated string of options to parse,
|
|
* syntax is "opt1=val1:opt_bool:opt2=val1-val2"
|
|
* where ':' is the seperator.
|
|
* name: the name to look for in options; eg "opt2"
|
|
* fmt: the format to scan values (printf format); eg "%d-%d"
|
|
* (...): variables to assign; eg &lower, &upper
|
|
* Return value:
|
|
* -2 internal error
|
|
* -1 `name' is not in `options'
|
|
* 0 `name' is in `options'
|
|
* >0 number of arguments assigned
|
|
* Side effects:
|
|
* none
|
|
* Preconditions:
|
|
* none
|
|
* Postconditions:
|
|
* none
|
|
*/
|
|
int optstr_get(const char *options, const char *name, const char *fmt, ...)
|
|
#ifdef HAVE_GCC_ATTRIBUTES
|
|
__attribute__((format(scanf,3,4)))
|
|
#endif
|
|
;
|
|
|
|
/*
|
|
* optstr_filter_desc:
|
|
* Generate a Description of a filter; this description will be a row in
|
|
* CSV format. Example:
|
|
* "filter_foo", "comment", "0.1", "no@one", "VRY", "1"\n
|
|
* WARNING: this function will be deprecated soon since new capabilities
|
|
* code has more flexibility and expressiveness.
|
|
*
|
|
* Parameters:
|
|
* buf: a write buffer, will contain the result of the function. 'buf'
|
|
* must be at least ARG_CONFIG_LEN characters large.
|
|
* filter_(name|comment|version|author):
|
|
* obvious, various filter meta data
|
|
* capabilities: string of filter capabilities.
|
|
* "V": Can do Video
|
|
* "A": Can do Audio
|
|
* "R": Can do RGB
|
|
* "Y": Can do YUV420
|
|
* "4": Can do YUV422
|
|
* "M": Can do Multiple Instances
|
|
* "E": Is a PRE filter
|
|
* "O": Is a POST filter
|
|
* Valid examples:
|
|
* "VR" : Video and RGB
|
|
* "VRY" : Video and YUV and RGB
|
|
* frames_needed: a string of how many frames the filter needs
|
|
* to take effect. Usually this is "1".
|
|
* Return value:
|
|
* 1 Not enough space in `buf' parameter
|
|
* 0 Successfull
|
|
* Side effects:
|
|
* none
|
|
* Preconditions:
|
|
* none
|
|
* Postconditions:
|
|
* none
|
|
*/
|
|
int optstr_filter_desc(char *buf,
|
|
const char *filter_name,
|
|
const char *filter_comment,
|
|
const char *filter_version,
|
|
const char *filter_author,
|
|
const char *capabilities,
|
|
const char *frames_needed);
|
|
|
|
/*
|
|
* optstr_frames_needed:
|
|
* extract the how many frames the filter needs from an CSV row.
|
|
*
|
|
* Parameters:
|
|
* filter_desc: the CSV row
|
|
* needed_frames: the result will be stored in this variable
|
|
* Return value:
|
|
* 1 An error happend
|
|
* 0 Successfull
|
|
* Side effects:
|
|
* none
|
|
* Preconditions:
|
|
* none
|
|
* Postconditions:
|
|
* none
|
|
*/
|
|
int optstr_frames_needed(const char *filter_desc, int *needed_frames);
|
|
|
|
/*
|
|
* optstr_param:
|
|
* Generate a description of one filter parameter. The output will be
|
|
* in CSV format.
|
|
* Example: "radius", "Search radius", "%d", "8", "8", "24"\n
|
|
*
|
|
* Parameters:
|
|
* buf: a write buffer, will contain the result of the function. 'buf'
|
|
* must be at least ARG_CONFIG_LEN characters large.
|
|
* name: the name of the parameter (eg "radius")
|
|
* comment: a short description (eg "Search radius")
|
|
* fmt: a printf style parse string (eg "%d")
|
|
* val: current value (eg "8")
|
|
* (...): always pairs (but this is actually NOT checked): legal values
|
|
* for the parameter (eg "8", "24" -- meaning, the radius
|
|
* parameter is valid from 8 to 24).
|
|
* Return value:
|
|
* 1 An Error happened
|
|
* 0 Successfull
|
|
* Side effects:
|
|
* none
|
|
* Preconditions:
|
|
* none
|
|
* Postconditions:
|
|
* none
|
|
*
|
|
* More examples:
|
|
* "pos", "Position (0-width x 0-height)", "%dx%d", "0x0", "0", "width", "0", "height"
|
|
* "%dx%d" is interesting, because this parameter takes two values in this format
|
|
* so we must supply two ranges (one for each parameter), when this
|
|
* param is valid ("0", "width", "0", "height")
|
|
*
|
|
* "flip", "Mirror image", "", "0"
|
|
* This is a boolean, defaults to false. A boolean has no argument, eg "filter_foo=flip"
|
|
*
|
|
*/
|
|
int optstr_param(char *buf,
|
|
const char *name,
|
|
const char *comment,
|
|
const char *fmt,
|
|
const char *val,
|
|
...); /* char *valid_from1, char *valid_to1 */
|
|
|
|
#endif /* OPTSTR_H */
|