-
Eric Vidal authoredEric Vidal authored
enum.c 4.44 KiB
/*
* get_enum.c
*
* Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
*
* All rights reserved.
*
* This file is part of Obarun. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution.
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file./
*/
#include <66/enum.h>
#include <string.h>
#include <oblibs/log.h>
char const *enum_str_section[] = {
"main" ,
"start" ,
"stop" ,
"logger" ,
"environment" ,
"regex" ,
0
} ;
char const *enum_str_key_section_main[] = {
"@type" ,
"@version" ,
"@description" ,
"@depends" ,
"@requiredby",
"@optsdepends" ,
"@options" ,
"@notify" ,
"@user" ,
"@timeout-finish" ,
"@timeout-kill" ,
"@timeout-up" ,
"@timeout-down" ,
"@maxdeath" ,
"@hiercopy" ,
"@down-signal" ,
"@flags" ,
"@intree" ,
0
} ;
char const *enum_str_key_section_startstop[] = {
"@build" ,
"@runas" ,
"@shebang" ,
"@execute" ,
0
} ;
char const *enum_str_key_section_logger[] = {
"@build" ,
"@runas" ,
"@shebang" ,
"@execute" ,
"@destination" ,
"@backup" ,
"@maxsize" ,
"@timestamp" ,
"@timeout-finish" ,
"@timeout-kill" ,
"@depends" ,
0
} ;
char const *enum_str_key_section_environ[] = {
"@environ" ,
0
} ;
char const *enum_str_key_section_regex[] = {
"@configure" ,
"@directories" ,
"@files" ,
"@infiles" ,
0
} ;
char const *enum_str_type[] = {
"classic" ,
"bundle" ,
"oneshot" ,
"module" ,
0
} ;
char const *enum_str_expected[] = {
"line" ,
"bracket" ,
"uint" ,
"slash" ,
"quote" ,
"keyval" ,
0
} ;
char const *enum_str_opts[] = {
"log" ,
"env" ,
0
} ;
char const *enum_str_flags[] = {
"down" ,
"earlier" ,
0
} ;
char const *enum_str_build[] = {
"auto" ,
"custom" ,
0
} ;
char const *enum_str_mandatory[] = {
"need" ,
"opts" ,
"bundle" ,
"custom" ,
0
} ;
char const *enum_str_time[] = {
"tai" ,
"iso" ,
"none" ,
0
} ;
char const *enum_str_seed[] = {
"depends" ,
"requiredby" ,
"enable" ,
"allow" ,
"deny" ,
"current" ,
"groups" ,
"contents" ,
0
} ;
enum_all_enum_t enum_all[] = {
[ENUM_SECTION] = { .enum_all = SECTION_ENDOFKEY - ENUM_START, .str = enum_str_section } ,
[ENUM_KEY_SECTION_MAIN] = { .enum_all = KEY_MAIN_ENDOFKEY - ENUM_START, .str = enum_str_key_section_main } ,
[ENUM_KEY_SECTION_STARTSTOP] = { .enum_all = KEY_STARTSTOP_ENDOFKEY - ENUM_START, .str = enum_str_key_section_startstop } ,
[ENUM_KEY_SECTION_LOGGER] = { .enum_all = KEY_LOGGER_ENDOFKEY - ENUM_START, .str = enum_str_key_section_logger } ,
[ENUM_KEY_SECTION_ENVIRON] = { .enum_all = KEY_ENVIRON_ENDOFKEY - ENUM_START, .str = enum_str_key_section_environ } ,
[ENUM_KEY_SECTION_REGEX] = { .enum_all = KEY_REGEX_ENDOFKEY - ENUM_START, .str = enum_str_key_section_regex } ,
[ENUM_TYPE] = { .enum_all = TYPE_ENDOFKEY - ENUM_START, .str = enum_str_type } ,
[ENUM_EXPECTED] = { .enum_all = EXPECT_ENDOFKEY - ENUM_START, .str = enum_str_expected } ,
[ENUM_OPTS] = { .enum_all = OPTS_ENDOFKEY- ENUM_START , .str = enum_str_opts } ,
[ENUM_FLAGS] = { .enum_all = FLAGS_ENDOFKEY - ENUM_START , .str = enum_str_flags } ,
[ENUM_BUILD] = { .enum_all = BUILD_ENDOFKEY - ENUM_START , .str = enum_str_build } ,
[ENUM_MANDATORY] = { .enum_all = MANDATORY_ENDOFKEY - ENUM_START , .str = enum_str_mandatory } ,
[ENUM_TIME] = { .enum_all = TIME_ENDOFKEY - ENUM_START , .str = enum_str_time } ,
[ENUM_SEED] = { .enum_all = SEED_ENDOFKEY - ENUM_START , .str = enum_str_seed } ,
[ENUM_ENDOFKEY] = { 0 }
} ;
ssize_t get_enum_by_key_one(char const *str, int const e)
{
//log_flow() ;
int i = 0 ;
enum_all_enum_t *key = enum_all ;
for(; i < key[e].enum_all;i++)
if(!strcmp(str,key[e].str[i]))
return i ;
return -1 ;
}
ssize_t get_enum_by_key(char const *str)
{
//log_flow() ;
int i = 0, ret ;
for (;i<ENUM_ENDOFKEY;i++)
{
ret = get_enum_by_key_one(str,i) ;
if (ret >= 0) return ret ;
}
return -1 ;
}
char const *get_key_by_enum(int const e, int const key)
{
log_flow() ;
return enum_all[e].str[key] ;
}
char const *get_key_by_key_all(int const idsec, int const idkey)
{
return *total_list[idsec].list[idkey].name ;
}