From 3c76c7ea6277ffa4b847665f2e20f705fd97d764 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Thu, 2 Jan 2020 11:44:43 +1100
Subject: [PATCH] rewrite entirely enum declaration and function associated,
 pass all file to new format

---
 src/66/66-inservice.c           |  12 +-
 src/66/66-intree.c              |   6 +-
 src/66/66-tree.c                |   2 +-
 src/include/66/enum.h           | 361 ++++++++++++++++++++------------
 src/include/66/info.h           |   1 +
 src/include/66/parser.h         |  17 +-
 src/include/66/utils.h          |   4 +-
 src/lib66/backup_cmd_switcher.c |   6 +-
 src/lib66/backup_make_new.c     |   2 +-
 src/lib66/backup_realpath_sym.c |   2 +-
 src/lib66/db_switch_to.c        |  10 +-
 src/lib66/get_enum.c            | 242 +++++++++++++--------
 src/lib66/instance.c            |  11 +-
 src/lib66/parser.c              |  19 +-
 src/lib66/parser_enabled.c      |  21 +-
 src/lib66/parser_utils.c        | 317 ++++++++++++++--------------
 src/lib66/parser_write.c        |  65 +++---
 src/lib66/rc_manage.c           |   4 +-
 src/lib66/resolve.c             |  26 +--
 src/lib66/ss_info_utils.c       |   4 +-
 src/lib66/ssexec_dbctl.c        |   8 +-
 src/lib66/ssexec_disable.c      |   4 +-
 src/lib66/ssexec_enable.c       |   2 +-
 src/lib66/ssexec_start.c        |   4 +-
 src/lib66/ssexec_stop.c         |   2 +-
 src/lib66/ssexec_svctl.c        |   6 +-
 src/lib66/svc_switch_to.c       |   6 +-
 src/lib66/tree_copy_tmp.c       |   8 +-
 28 files changed, 666 insertions(+), 506 deletions(-)

diff --git a/src/66/66-inservice.c b/src/66/66-inservice.c
index a208f26d..51385731 100644
--- a/src/66/66-inservice.c
+++ b/src/66/66-inservice.c
@@ -55,7 +55,7 @@ static unsigned int nlog = 20 ;
 static stralloc src = STRALLOC_ZERO ;
 
 static wchar_t const field_suffix[] = L" :" ;
-static char fields[ENDOFKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ;
+static char fields[INFO_NKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ;
 static void info_display_string(char const *str) ;
 static void info_display_name(char const *field, ss_resolve_t *res) ;
 static void info_display_intree(char const *field, ss_resolve_t *res) ;
@@ -209,7 +209,7 @@ static void info_get_status(ss_resolve_t *res)
 	pid_t pid ;
 	
 		
-	if (res->type == CLASSIC || res->type == LONGRUN)
+	if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN)
 	{
 		r = s6_svc_ok(res->sa.s + res->runat) ;
 		if (r != 1)
@@ -257,7 +257,7 @@ static void info_display_status(char const *field,ss_resolve_t *res)
 static void info_display_type(char const *field,ss_resolve_t *res)
 {
 	if (NOFIELD) info_display_field_name(field) ;
-	info_display_string(get_keybyid(res->type)) ;
+	info_display_string(get_key_by_enum(ENUM_TYPE,res->type)) ;
 }
 
 static void info_display_description(char const *field,ss_resolve_t *res)
@@ -455,7 +455,7 @@ static void info_display_envfile(char const *field,ss_resolve_t *res)
 static void info_display_logname(char const *field,ss_resolve_t *res)
 {
 	if (NOFIELD) info_display_field_name(field) ;
-	if (res->type == CLASSIC || res->type == LONGRUN) 
+	if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) 
 	{
 		if (res->logger)
 		{
@@ -474,7 +474,7 @@ static void info_display_logname(char const *field,ss_resolve_t *res)
 static void info_display_logdst(char const *field,ss_resolve_t *res)
 {
 	if (NOFIELD) info_display_field_name(field) ;
-	if (res->type == CLASSIC || res->type == LONGRUN) 
+	if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) 
 	{
 		if (res->logger)
 		{
@@ -493,7 +493,7 @@ static void info_display_logdst(char const *field,ss_resolve_t *res)
 static void info_display_logfile(char const *field,ss_resolve_t *res)
 {
 	if (NOFIELD) info_display_field_name(field) ;
-	if (res->type == CLASSIC || res->type == LONGRUN) 
+	if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) 
 	{
 		if (res->logger)
 		{
diff --git a/src/66/66-intree.c b/src/66/66-intree.c
index 2c8ca6a1..5b6609ad 100644
--- a/src/66/66-intree.c
+++ b/src/66/66-intree.c
@@ -52,7 +52,7 @@ static stralloc live = STRALLOC_ZERO ;
 static stralloc src = STRALLOC_ZERO ;
 
 static wchar_t const field_suffix[] = L" :" ;
-static char fields[ENDOFKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ;
+static char fields[INFO_NKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ;
 static void info_display_name(char const *field,char const *treename) ;
 static void info_display_init(char const *field,char const *treename) ;
 static void info_display_order(char const *field,char const *treename) ;
@@ -325,7 +325,7 @@ static void info_display_symlink(char const *field, char const *treename)
 	int db, svc ;
 	size_t typelen ;
 	char type[UINT_FMT] ;
-	typelen = uint_fmt(type, BUNDLE) ;
+	typelen = uint_fmt(type, TYPE_BUNDLE) ;
 	type[typelen] = 0 ;
 	
 	char cmd[typelen + 6 + 1] ;
@@ -334,7 +334,7 @@ static void info_display_symlink(char const *field, char const *treename)
 	db = backup_cmd_switcher(VERBOSITY,cmd,&info) ;
 	if (db < 0) log_dieusys(LOG_EXIT_SYS,"find realpath of symlink for db of tree: ",info.treename.s) ;
 	
-	typelen = uint_fmt(type, CLASSIC) ;
+	typelen = uint_fmt(type, TYPE_CLASSIC) ;
 	type[typelen] = 0 ;
 		
 	auto_strings(cmd,"-t",type," -b") ;
diff --git a/src/66/66-tree.c b/src/66/66-tree.c
index be8e656b..6138f161 100644
--- a/src/66/66-tree.c
+++ b/src/66/66-tree.c
@@ -213,7 +213,7 @@ void create_tree(char const *tree,char const *treename)
 	res.description = ss_resolve_add_string(&res,"inner bundle - do not use it") ;
 	res.tree = ss_resolve_add_string(&res,dst) ;
 	res.treename = ss_resolve_add_string(&res,treename) ;
-	res.type = BUNDLE ;
+	res.type = TYPE_BUNDLE ;
 	res.disen = 1 ;
 	
 	auto_create(dst,SS_SVDIRS,newlen,0755) ;
diff --git a/src/include/66/enum.h b/src/include/66/enum.h
index 690f46ce..1affd157 100644
--- a/src/include/66/enum.h
+++ b/src/include/66/enum.h
@@ -15,99 +15,203 @@
 #ifndef SS_ENUM_H
 #define SS_ENUM_H
 
-
 #include <sys/types.h>
+#define ENUM_START 0
+
+typedef enum enum_main_e enum_main_t, *enum_main_t_ref ;
+enum enum_main_e
+{
+	ENUM_SECTION = 0 ,
+	ENUM_KEY ,
+	ENUM_TYPE ,
+	ENUM_EXPECTED ,
+	ENUM_OPTS ,
+	ENUM_FLAGS ,
+	ENUM_BUILD ,
+	ENUM_MANDATORY ,
+	ENUM_TIME ,
+	ENUM_LOGOPTS ,
+	ENUM_ENDOFKEY
+} ;
+
+typedef enum enum_section_e enum_section_t, *enum_section_t_ref ;
+enum enum_section_e
+{
+	SECTION_MAIN = 0 ,
+	SECTION_START ,
+	SECTION_STOP ,
+	SECTION_LOG ,
+	SECTION_ENV ,
+	SECTION_ENDOFKEY
+} ;
+
+extern char const *enum_str_section[] ;
+
+typedef enum enum_key_e enum_key_t, *enum_key_t_ref ;
+enum enum_key_e
+{
+	KEY_TYPE = 0 ,
+	KEY_NAME ,
+	KEY_DESCRIPTION ,
+	KEY_CONTENTS ,
+	KEY_DEPENDS ,
+	KEY_OPTSDEPS ,
+	KEY_EXTDEPS ,
+	KEY_OPTIONS ,
+	KEY_NOTIFY ,
+	KEY_USER ,
+	KEY_BUILD ,
+	KEY_SIGNAL ,
+	KEY_FLAGS ,
+	KEY_RUNAS ,
+	KEY_SHEBANG ,
+	KEY_T_FINISH ,
+	KEY_T_KILL ,
+	KEY_T_UP ,
+	KEY_T_DOWN ,
+	KEY_DEATH ,
+	KEY_HIERCOPY ,
+	KEY_EXEC ,
+	KEY_DESTINATION ,
+	KEY_BACKUP ,
+	KEY_MAXSIZE ,
+	KEY_TIMESTP ,
+	KEY_ENVAL ,
+	KEY_ENDOFKEY
+} ;
+
+extern char const *enum_str_key[] ;
+
+typedef enum enum_type_e enum_type_t, *enum_type_t_ref ;
+enum enum_type_e
+{
+	TYPE_MODULES = 0 ,
+	TYPE_CLASSIC ,
+	TYPE_BUNDLE ,
+	TYPE_LONGRUN ,
+	TYPE_ONESHOT ,
+	TYPE_ENDOFKEY
+
+} ;
+
+extern char const *enum_str_type[] ;
+
+typedef enum enum_expected_e enum_expected_t, *enum_expected_t_ref ;
+enum enum_expected_e
+{
+	EXPECT_LINE = 0 ,
+	EXPECT_BRACKET ,
+	EXPECT_UINT ,
+	EXPECT_SLASH ,
+	EXPECT_QUOTE ,
+	EXPECT_KEYVAL ,
+	EXPECT_ENDOFKEY
+} ;
+
+extern char const *enum_str_expected[] ;
+
+typedef enum enum_opts_e enum_opts_t, *enum_opts_t_ref ;
+enum enum_opts_e
+{
+	OPTS_LOGGER = 0 ,
+	OPTS_ENVIR ,
+	OPTS_HIERCOPY ,
+	OPTS_PIPELINE ,
+	OPTS_ENDOFKEY
+} ;
+
+extern char const *enum_str_opts[] ;
+
+typedef enum enum_flags_e enum_flags_t, *enum_flags_t_ref ;
+enum enum_flags_e
+{
+	FLAGS_DOWN = 0 ,
+	FLAGS_NOSETSID ,
+	FLAGS_ENDOFKEY
+} ;
+
+extern char const *enum_str_flags[] ;
+
+typedef enum enum_build_e enum_build_t, *enum_build_t_ref ;
+enum enum_build_e
+{
+	BUILD_AUTO = 0 ,
+	BUILD_CUSTOM ,
+	BUILD_ENDOFKEY
+} ;
+
+extern char const *enum_str_build[] ;
+
+typedef enum enum_mandatory_e enum_mandatory_t, *enum_mandatory_t_ref ;
+enum enum_mandatory_e
+{
+	MANDATORY_NEED = 0 ,
+	MANDATORY_OPTS ,
+	MANDATORY_BUNDLE ,
+	MANDATORY_CUSTOM ,
+	MANDATORY_ENDOFKEY
+} ;
 
-typedef enum key_enum_e key_enum_t, *key_enum_t_ref ;
-enum key_enum_e
-{
-	//Section
-	MAIN = 0 ,
-	START ,
-	STOP ,
-	LOG ,
-	ENV ,
-	//Main
-	TYPE ,// = 5
-	NAME ,
-	DESCRIPTION ,
-	CONTENTS ,
-	DEPENDS ,
-	OPTSDEPS ,
-	EXTDEPS ,
-	OPTIONS ,
-	NOTIFY ,
-	USER ,
-	PRODUCER ,
-	CONSUMER ,
-	BUILD ,
-	SIGNAL ,
-	FLAGS ,
-	RUNAS ,
-	SHEBANG ,
-	T_KILL ,
-	T_FINISH ,
-	T_UP ,
-	T_DOWN ,
-	DEATH ,
-	HIERCOPY ,
-	EXEC ,
-	DESTINATION ,
-	BACKUP ,
-	MAXSIZE ,
-	TIMESTP ,
-	ENVAL ,
-	//Service type
-	CLASSIC, // = 34
-	BUNDLE ,
-	LONGRUN ,
-	ONESHOT ,
-	//Key expected
-	LINE , // = 38
-	BRACKET ,
-	UINT ,
-	SLASH ,
-	QUOTE ,
-	KEYVAL ,
-	//Options
-	LOGGER , // = 44
-	PIPELINE ,
-	//Flags
-	DOWN , // = 46
-	NOSETSID ,
-	ENVIR ,
-	//Build
-	AUTO , // = 49
-	CUSTOM ,
-	//Mandatory
-	NEED , // = 51
-	OPTS ,
-	//Time
-	TAI , // = 53
-	ISO ,
-	NONE ,
-	ENDOFKEY
-} ;
-#define PIPELINE_NAME "pipeline-name"
-
-extern int const key_enum_el ;
-extern int const key_enum_section_el ;
-
-extern int const key_enum_main_el ;
-extern int const key_enum_svtype_el ;
-extern int const key_enum_expect_el ;
-extern int const key_enum_options_el ;
-extern int const key_enum_flags_el ;
-extern int const key_enum_build_el ;
-extern int const key_enum_mandatory_el ;
-extern int const key_enum_time_el ;
+extern char const *enum_str_mandatory[]  ;
+
+typedef enum enum_time_e enum_time_t, *enum_time_t_ref ;
+enum enum_time_e
+{
+	TIME_TAI = 0 ,
+	TIME_ISO ,
+	TIME_NONE ,
+	TIME_ENDOFKEY
+} ;
+
+extern char const *enum_str_time[] ;
+
+typedef enum enum_logopts_e enum_logotps_t, *enum_logopts_t_ref ;
+enum enum_logopts_e
+{
+	LOGOPTS_PRODUCER = 0 ,
+	LOGOPTS_CONSUMER ,
+	LOGOPTS_PIPE ,
+	LOGOPTS_ENDOFKEY
+} ;
+
+extern char const *enum_str_logopts[] ;
+
+
+typedef struct enum_all_enum_s enum_all_enum_t, *enum_all_enum_t_ref ;
+struct enum_all_enum_s
+{
+	int const enum_all ;
+	char const **str ;
+} ;
+
+extern ssize_t get_enum_by_key_one(char const *str, int const e) ;
+extern ssize_t get_enum_by_key(char const *str) ;
+extern char const *get_key_by_enum(int const e, int const key) ;
+extern enum_all_enum_t enum_all[] ;
+
+typedef enum actions_e actions_t, *actions_t_ref ;
+enum actions_e
+{
+	ACTION_COMMON = 0 ,
+	ACTION_EXECRUN ,
+	ACTION_EXECFINISH ,
+	ACTION_EXECLOG ,
+	ACTION_EXECUP ,
+	ACTION_EXECDOWN,
+	ACTION_ENVIRON,
+	ACTION_SKIP
+} ;
+
+unsigned char const actions[SECTION_ENDOFKEY][TYPE_ENDOFKEY] ;
+unsigned char const states[SECTION_ENDOFKEY][TYPE_ENDOFKEY] ;
 
 typedef struct key_description_s key_description_t ;
 struct key_description_s
 {
-	char const *name ;
-	key_enum_t const expected ;
-	key_enum_t const mandatory ; 
+	char const **name ;
+	int const id ;
+	int const expected ;
+	int const mandatory ; 
 } ;
 
 typedef struct key_all_s key_all_t ;
@@ -118,56 +222,56 @@ struct key_all_s
 
 static key_description_t const main_section_list[] =
 {
-	{ .name = "@type",  .expected = LINE, .mandatory = NEED },
-	{ .name = "@name", .expected = LINE, .mandatory = OPTS },
-	{ .name = "@description", .expected = QUOTE, .mandatory = OPTS },
-	{ .name = "@depends", .expected = BRACKET, .mandatory = OPTS },
-	{ .name = "@optsdepends", .expected = BRACKET, .mandatory = OPTS },
-	{ .name = "@extdepends", .expected = BRACKET, .mandatory = OPTS },
-	{ .name = "@contents", .expected = BRACKET, .mandatory = BUNDLE },
-	{ .name = "@options", .expected = BRACKET, .mandatory = OPTS },
-	{ .name = "@flags", .expected = BRACKET, .mandatory = OPTS },
-	{ .name = "@notify", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@user", .expected = BRACKET, .mandatory = NEED },
-	{ .name = "@timeout-finish", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@timeout-kill", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@timeout-up", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@timeout-down", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@maxdeath", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@down-signal", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@hiercopy", .expected = BRACKET, .mandatory = OPTS },
-	{ .name = 0 } 
+	{ .name = &enum_str_key[KEY_TYPE], .id = KEY_TYPE, .expected = EXPECT_LINE, .mandatory = MANDATORY_NEED },
+	{ .name = &enum_str_key[KEY_NAME], .id = KEY_NAME, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_DESCRIPTION], .id = KEY_DESCRIPTION, .expected = EXPECT_QUOTE, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_DEPENDS], .id = KEY_DEPENDS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_OPTSDEPS], .id = KEY_OPTSDEPS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_EXTDEPS], .id = KEY_EXTDEPS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_CONTENTS], .id = KEY_CONTENTS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_BUNDLE },
+	{ .name = &enum_str_key[KEY_OPTIONS], .id = KEY_OPTIONS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_FLAGS], .id = KEY_FLAGS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_NOTIFY], .id = KEY_NOTIFY, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_USER], .id = KEY_USER, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_NEED },
+	{ .name = &enum_str_key[KEY_T_FINISH], .id = KEY_T_FINISH, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_T_KILL], .id = KEY_T_KILL, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_T_UP], .id = KEY_T_UP, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_T_DOWN], .id = KEY_T_DOWN, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_DEATH], .id = KEY_DEATH, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_SIGNAL], .id = KEY_SIGNAL, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_HIERCOPY], .id = KEY_HIERCOPY, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_ENDOFKEY] } 
 } ;
 
 static key_description_t const startstop_section_list[] =
 {
-	{ .name = "@build", .expected = LINE, .mandatory = NEED },
-	{ .name = "@runas", .expected = LINE, .mandatory = OPTS },
-	{ .name = "@shebang", .expected = QUOTE, .mandatory = CUSTOM },
-	{ .name = "@execute", .expected = BRACKET, .mandatory = NEED },
-	{ .name = 0 }
+	{ .name = &enum_str_key[KEY_BUILD], .id = KEY_BUILD, .expected = EXPECT_LINE, .mandatory = MANDATORY_NEED },
+	{ .name = &enum_str_key[KEY_RUNAS], .id = KEY_RUNAS, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_SHEBANG], .id = KEY_SHEBANG, .expected = EXPECT_QUOTE, .mandatory = MANDATORY_CUSTOM },
+	{ .name = &enum_str_key[KEY_EXEC], .id = KEY_EXEC, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_NEED },
+	{ .name = &enum_str_key[KEY_ENDOFKEY] }
 } ;
 
 static key_description_t const logger_section_list[] =
 {
-	{ .name = "@destination", .expected = SLASH, .mandatory = CUSTOM },
-	{ .name = "@build", .expected = LINE, .mandatory = NEED },
-	{ .name = "@runas", .expected = LINE, .mandatory = OPTS },
-	{ .name = "@depends", .expected = BRACKET, .mandatory = OPTS },
-	{ .name = "@shebang", .expected = QUOTE, .mandatory = CUSTOM },
-	{ .name = "@timeout-finish", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@timeout-kill", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@backup", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@maxsize", .expected = UINT, .mandatory = OPTS },
-	{ .name = "@timestamp", .expected = LINE, .mandatory = OPTS },
-	{ .name = "@execute", .expected = BRACKET, .mandatory = CUSTOM },
-	{ .name = 0 }
+	{ .name = &enum_str_key[KEY_DESTINATION], .id = KEY_DESTINATION, .expected = EXPECT_SLASH, .mandatory = MANDATORY_CUSTOM },
+	{ .name = &enum_str_key[KEY_BUILD], .id = KEY_BUILD, .expected = EXPECT_LINE, .mandatory = MANDATORY_NEED },
+	{ .name = &enum_str_key[KEY_RUNAS], .id = KEY_RUNAS, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_DEPENDS], .id = KEY_DEPENDS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_SHEBANG], .id = KEY_SHEBANG, .expected = EXPECT_QUOTE, .mandatory = MANDATORY_CUSTOM },
+	{ .name = &enum_str_key[KEY_T_FINISH], .id = KEY_T_FINISH, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_T_KILL], .id = KEY_T_KILL, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_BACKUP], .id = KEY_BACKUP, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_MAXSIZE], .id = KEY_MAXSIZE, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_TIMESTP], .id = KEY_TIMESTP, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_key[KEY_EXEC], .id = KEY_EXEC, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_CUSTOM },
+	{ .name = &enum_str_key[KEY_ENDOFKEY] }
 } ;
 
 static key_description_t const environment_section_list[] =
 {
-	{ .name = "environment", .expected = KEYVAL, .mandatory = OPTS },
-	{ .name = 0 }
+	{ .name = &enum_str_section[SECTION_ENV], .id = SECTION_ENV, .expected = EXPECT_KEYVAL, .mandatory = MANDATORY_OPTS },
+	{ .name = &enum_str_section[SECTION_ENDOFKEY] }
 } ;
 
 static int const total_list_el[6] = { 19, 5, 5, 12, 2, 0 } ;
@@ -182,12 +286,5 @@ static key_all_t const total_list[] =
 	{ .list = 0 }
 } ;
 
-/** Compare @str with function @func on @key_el enum table
- * @Return the index of the table
- * @Return -1 on fail*/
-extern ssize_t get_enumbyid(char const *str,key_enum_t key_el) ;
-
-/**@Return the string of the @key */ 
-extern char const *get_keybyid(key_enum_t key) ;
 
 #endif
diff --git a/src/include/66/info.h b/src/include/66/info.h
index d4368f33..18b80e70 100644
--- a/src/include/66/info.h
+++ b/src/include/66/info.h
@@ -25,6 +25,7 @@
 #define SS_INFO_H
 
 #define INFO_FIELD_MAXLEN 30
+#define INFO_NKEY 100
 
 typedef struct depth_s depth_t ;
 struct depth_s
diff --git a/src/include/66/parser.h b/src/include/66/parser.h
index 753ade1b..3c5ba0c4 100644
--- a/src/include/66/parser.h
+++ b/src/include/66/parser.h
@@ -36,19 +36,6 @@ extern stralloc deps ;
 //extern genalloc gadeps ;
 extern genalloc gasv ;
 
-typedef enum actions_e actions_t, *actions_t_ref ;
-enum actions_e
-{
-	COMMON = 0 ,
-	EXECRUN ,
-	EXECFINISH ,
-	EXECLOG ,
-	EXECUP ,
-	EXECDOWN,
-	ENVIRON,
-	SKIP
-} ;
-
 /**struct for run and finish file*/
 typedef struct sv_exec_s sv_exec,*sv_exec_ref ;
 struct sv_exec_s
@@ -260,7 +247,7 @@ extern void section_free(section_t *sec) ;
 extern void freed_parser(void) ;
 /** enable phase */
 extern void start_parser(stralloc *list,ssexec_t *info, unsigned int *nbsv,uint8_t FORCE) ;
-extern int parser(sv_alltype *service,stralloc *src,char const *svname) ;
+extern int parser(sv_alltype *service,stralloc *src,char const *svname,int svtype) ;
 extern int parse_service_check_enabled(ssexec_t *info, char const *svname,uint8_t force,uint8_t *exist) ;
 extern int parse_service_before(ssexec_t *info, stralloc *parsed_list, stralloc *opts_deps_list, char const *sv,unsigned int *nbsv, stralloc *sasv,uint8_t force,uint8_t *exist) ;
 extern int parse_service_deps(ssexec_t *info,stralloc *parsed_list, stralloc *opts_deps_list, sv_alltype *sv_before, char const *sv,unsigned int *nbsv,stralloc *sasv,uint8_t force) ;
@@ -268,7 +255,7 @@ extern int parse_service_opts_deps(ssexec_t *info,stralloc *parsed_list,stralloc
 extern int parse_add_service(stralloc *parsed_list,sv_alltype *sv_before,char const *service,unsigned int *nbsv,uid_t owner) ;
 /** split */
 extern int section_get_range(section_t *sasection,stralloc *src) ;
-extern int key_get_range(genalloc *ga, section_t *sasection,int *svtype) ;
+extern int key_get_range(genalloc *ga, section_t *sasection) ;
 extern int get_mandatory(genalloc *nocheck,int idsec,int idkey) ;
 extern int nocheck_toservice(keynocheck *nocheck,int svtype, sv_alltype *service) ;
 /** store */
diff --git a/src/include/66/utils.h b/src/include/66/utils.h
index 946656a1..e201caa1 100644
--- a/src/include/66/utils.h
+++ b/src/include/66/utils.h
@@ -46,6 +46,6 @@ extern int set_livestate(stralloc *live,uid_t owner) ;
 extern int read_svfile(stralloc *sasv,char const *name,char const *src) ;
 extern int instance_check(char const *svname) ;
 extern int instance_splitname(stralloc *sa,char const *name,int len,int what) ;
-//extern int instance_change_name(stralloc *sa,char const *template,char const *copy) ;
-extern int instance_create(stralloc *sasv,char const *svname, char const *regex, char const *src, int len) ;
+extern int instance_create(stralloc *sasv,char const *svname, char const *regex, int len) ;
+extern int get_svtype(sv_alltype *sv_before, char const *contents) ;
 #endif
diff --git a/src/lib66/backup_cmd_switcher.c b/src/lib66/backup_cmd_switcher.c
index 2e2d852d..92481716 100644
--- a/src/lib66/backup_cmd_switcher.c
+++ b/src/lib66/backup_cmd_switcher.c
@@ -72,7 +72,7 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
 	if (argc < 1) return -1 ;
 	if ((!change && !back) || !type) return -1 ;
 
-	if (type < CLASSIC || type > ONESHOT)
+	if (type < TYPE_CLASSIC || type > TYPE_ONESHOT)
 		log_warn_return(LOG_EXIT_LESSONE,"unknown type for backup_switcher") ;
 	
 	tree = *argv ;
@@ -82,7 +82,7 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
 	//base.len-- ;
 	size_t psymlen ;
 	char *psym = NULL ;
-	if (type == CLASSIC)
+	if (type == TYPE_CLASSIC)
 	{
 		psym = SS_SYM_SVC ;
 		psymlen = SS_SYM_SVC_LEN ;
@@ -130,7 +130,7 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
 		char *psrc = NULL ;
 		char *pback = NULL ;
 		
-		if (type == CLASSIC)
+		if (type == TYPE_CLASSIC)
 		{
 			psrc = SS_SVC ;
 			psrclen = SS_SVC_LEN ;
diff --git a/src/lib66/backup_make_new.c b/src/lib66/backup_make_new.c
index 54546e5d..15506330 100644
--- a/src/lib66/backup_make_new.c
+++ b/src/lib66/backup_make_new.c
@@ -39,7 +39,7 @@ int backup_make_new(ssexec_t *info, unsigned int type)
 	size_t typelen ;
 	char *ptype = NULL ;
 	
-	if (type == CLASSIC)
+	if (type == TYPE_CLASSIC)
 	{
 		ptype = SS_SVC ;
 		typelen = SS_SVC_LEN ;
diff --git a/src/lib66/backup_realpath_sym.c b/src/lib66/backup_realpath_sym.c
index e08537d5..20d5b779 100644
--- a/src/lib66/backup_realpath_sym.c
+++ b/src/lib66/backup_realpath_sym.c
@@ -33,7 +33,7 @@ int backup_realpath_sym(stralloc *sa, ssexec_t *info,unsigned int type)
 	size_t typelen ;
 	char *ptype = 0 ;
 	
-	if (type == CLASSIC)
+	if (type == TYPE_CLASSIC)
 	{
 		ptype = SS_SYM_SVC ;
 		typelen = SS_SYM_SVC_LEN;
diff --git a/src/lib66/db_switch_to.c b/src/lib66/db_switch_to.c
index af407fdf..1a48d1a1 100644
--- a/src/lib66/db_switch_to.c
+++ b/src/lib66/db_switch_to.c
@@ -35,7 +35,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
 	
 	stralloc db = STRALLOC_ZERO ;
 	char type[UINT_FMT] ;
-	size_t typelen = uint_fmt(type, BUNDLE) ;
+	size_t typelen = uint_fmt(type, TYPE_BUNDLE) ;
 	type[typelen] = 0 ;
 	
 	size_t cmdlen ;
@@ -56,7 +56,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
 	if (!r && where)
 	{
 		log_trace("make a backup of db service for: ",info->treename.s) ;
-		if (!backup_make_new(info,LONGRUN))
+		if (!backup_make_new(info,TYPE_LONGRUN))
 		{
 			log_warnusys("make a backup of db service for: ",info->treename.s) ;
 			goto err ;
@@ -72,7 +72,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
 		}
 		if (db_ok(info->livetree.s, info->treename.s))
 		{
-			if (!backup_realpath_sym(&db,info,LONGRUN))
+			if (!backup_realpath_sym(&db,info,TYPE_LONGRUN))
 			{
 				log_warnusys("find path of db: ",db.s) ;
 				goto err ;
@@ -106,7 +106,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
 		
 		if (db_ok(info->livetree.s,info->treename.s))
 		{
-			if (!backup_realpath_sym(&db,info,LONGRUN))
+			if (!backup_realpath_sym(&db,info,TYPE_LONGRUN))
 			{
 				log_warnusys("find path of db: ",db.s) ;
 				goto err ;
@@ -126,7 +126,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
 			}
 		}
 		log_trace("make a backup of db service for: ",info->treename.s) ;
-		if (!backup_make_new(info,LONGRUN))
+		if (!backup_make_new(info,TYPE_LONGRUN))
 		{
 			log_warnusys("make a backup of db service for: ",info->treename.s) ;
 			goto err ;
diff --git a/src/lib66/get_enum.c b/src/lib66/get_enum.c
index b15f899d..93d600b2 100644
--- a/src/lib66/get_enum.c
+++ b/src/lib66/get_enum.c
@@ -14,100 +14,168 @@
 
 #include <66/enum.h>
 
-#include <sys/types.h>
+#include <stddef.h>
 #include <oblibs/string.h>
 
-char const *get_keybyid(key_enum_t key)
+char const *enum_str_section[] = {
+	"main" ,
+	"start" ,
+	"stop" ,
+	"logger" ,
+	"environment" ,
+	0
+} ;
+
+char const *enum_str_key[] = {
+	"@type" ,
+	"@name" ,
+	"@description" ,
+	"@contents" ,
+	"@depends" ,
+	"@optsdepends" ,
+	"@extdepends" ,
+	"@options" ,
+	"@notify" ,
+	"@user" ,
+	"@build" ,
+	"@down-signal" ,
+	"@flags" ,
+	"@runas" ,
+	"@shebang" ,
+	"@timeout-finish" ,
+	"@timeout-kill" ,
+	"@timeout-up" ,
+	"@timeout-down" ,
+	"@maxdeath" ,
+	"@hiercopy" ,
+	"@execute" ,
+	"@destination" ,
+	"@backup" ,
+	"@maxsize" ,
+	"@timestamp" ,
+	"@enval" ,
+	0
+} ;
+
+char const *enum_str_type[] = {
+	"modules" ,
+	"classic" ,
+	"bundle" ,
+	"longrun" ,
+	"oneshot" ,
+	0
+} ;
+
+char const *enum_str_expected[] = {
+	"line" ,
+	"bracket" ,
+	"uint" ,
+	"slash" ,
+	"quote" ,
+	"keyval" ,
+	0
+} ;
+
+char const *enum_str_opts[] = {
+	"log" ,
+	"env" ,
+	"hiercopy" ,
+	"pipeline" ,
+	0
+} ;
+
+char const *enum_str_flags[] = {
+	"down" ,
+	"nosetsid" ,
+	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_logopts[] = {
+	"producer-for" ,
+	"consumer-for" ,
+	"pipeline-name" ,
+	0
+} ;
+
+enum_all_enum_t enum_all[] = {
+
+	[ENUM_SECTION] = { .enum_all = SECTION_ENDOFKEY - ENUM_START, .str = enum_str_section } ,
+	[ENUM_KEY] = { .enum_all = KEY_ENDOFKEY - ENUM_START, .str = enum_str_key } ,
+	[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_LOGOPTS] = { .enum_all = LOGOPTS_ENDOFKEY - ENUM_START , .str = enum_str_logopts } ,
+	[ENUM_ENDOFKEY] = { 0 }
+
+} ;
+
+unsigned char const actions[SECTION_ENDOFKEY][TYPE_ENDOFKEY] = {
+	// MODULES		>CLASSIC,			BUNDLE,			LONGRUN,			ONESHOT
+    { ACTION_SKIP,	ACTION_COMMON,		ACTION_COMMON,	ACTION_COMMON,		ACTION_COMMON }, // main
+    { ACTION_SKIP,	ACTION_EXECRUN, 	ACTION_SKIP,	ACTION_EXECRUN, 	ACTION_EXECUP }, // start
+    { ACTION_SKIP,	ACTION_EXECFINISH, 	ACTION_SKIP,	ACTION_EXECFINISH,	ACTION_EXECDOWN }, // stop
+    { ACTION_SKIP,	ACTION_EXECLOG,		ACTION_SKIP,	ACTION_EXECLOG, 	ACTION_SKIP }, // log
+    { ACTION_SKIP,	ACTION_ENVIRON, 	ACTION_SKIP,	ACTION_ENVIRON, 	ACTION_ENVIRON }, // env
+} ;
+
+unsigned char const states[SECTION_ENDOFKEY][TYPE_ENDOFKEY] = {
+	// MODULES		CLASSIC,		BUNDLE,			LONGRUN,		ONESHOT
+    { ACTION_SKIP,	SECTION_START,	ACTION_SKIP,	SECTION_START,	SECTION_START }, // main
+    { ACTION_SKIP,	SECTION_STOP,	ACTION_SKIP,	SECTION_STOP,	SECTION_STOP }, // start
+    { ACTION_SKIP,	SECTION_LOG,	ACTION_SKIP,	SECTION_LOG,	SECTION_LOG }, // stop
+    { ACTION_SKIP,	SECTION_ENV,	ACTION_SKIP,	SECTION_ENV,	SECTION_ENV }, // log
+    { ACTION_SKIP,	ACTION_SKIP,	ACTION_SKIP,	ACTION_SKIP,	ACTION_SKIP }, // env
+} ;
+
+ssize_t get_enum_by_key_one(char const *str, int const e)
 {
-			//Section
-	return	(key == MAIN) ? "main" :
-			(key == START) ? "start" :
-			(key == STOP) ? "stop" :
-			(key == LOG) ? "logger" :
-			(key == ENV) ? "environment" :
-			//Main
-			(key == TYPE ) ? "@type" :
-			(key == NAME ) ? "@name" :
-			(key == DESCRIPTION ) ? "@description" :
-			(key == CONTENTS ) ? "@contents" :
-			(key == DEPENDS ) ? "@depends" :
-			(key == OPTSDEPS ) ? "@optsdepends" :
-			(key == EXTDEPS ) ? "@extdepends" :
-			(key == OPTIONS ) ? "@options" :
-			(key == NOTIFY ) ? "@notify" :
-			(key == USER ) ? "@user" :
-			(key == BUILD ) ? "@build" :
-			(key == SIGNAL) ? "@down-signal" :
-			(key == FLAGS ) ? "@flags" :
-			(key == RUNAS ) ? "@runas" :
-			(key == SHEBANG ) ? "@shebang" :
-			(key == T_FINISH ) ? "@timeout-finish" :
-			(key == T_KILL ) ? "@timeout-kill" :
-			(key == T_UP ) ? "@timeout-up" :
-			(key == T_DOWN ) ? "@timeout-down" :
-			(key == DEATH) ? "@maxdeath" :
-			(key == HIERCOPY) ? "@hiercopy" :
-			(key == EXEC ) ? "@execute" :
-			(key == DESTINATION ) ? "@destination" :
-			(key == BACKUP ) ? "@backup" :
-			(key == MAXSIZE ) ? "@maxsize" :
-			(key == TIMESTP ) ? "@timestamp" :
-			//Service type	
-			(key == CLASSIC ) ? "classic" :
-			(key == BUNDLE ) ? "bundle" :
-			(key == LONGRUN ) ? "longrun" :
-			(key == ONESHOT ) ? "oneshot" :
-			//Key expected
-			(key == LINE ) ? "line" :
-			(key == BRACKET ) ? "bracket" :
-			(key == UINT ) ? "uint" :
-			(key == SLASH ) ? "slash" :
-			(key == QUOTE ) ? "quote" :
-			//Options
-			(key == LOGGER ) ? "log" :
-			(key == ENVIR ) ? "env" :
-			(key == HIERCOPY ) ? "hiercopy" :
-			(key == PIPELINE ) ? "pipeline" :
-			//Flags
-			(key == DOWN ) ? "down" :
-			(key == NOSETSID ) ? "nosetsid" :
-			//Build
-			(key == AUTO ) ? "auto" :
-			(key == CUSTOM ) ? "custom" :
-			//Mandatory
-			(key == NEED ) ? "need" :
-			(key == OPTS ) ? "opts" :
-			//Time
-			(key == TAI ) ? "tai" :
-			(key == ISO ) ? "iso" :
-			(key == NONE ) ? "none" :
-			//logger
-			(key == PRODUCER ) ? "producer-for" :
-			(key == CONSUMER ) ? "consumer-for" :
-			"unknown" ;
+	int i = 0 ;
+	enum_all_enum_t *key = enum_all ;
+	for(; i < key[e].enum_all;i++)
+		if(obstr_equal(str,key[e].str[i]))
+			return i ;
+
+	return -1 ;
 }
 
-ssize_t get_enumbyid(char const *str, key_enum_t key_el)
+ssize_t get_enum_by_key(char const *str)
 {
-	key_enum_t i = 0 ;
+	int i = 0, ret ;
 	
-	for (;i<key_el;i++)
-		if(obstr_equal(str,get_keybyid(i)))	return i ;
-		
+	for (;i<ENUM_ENDOFKEY;i++)
+	{
+		ret = get_enum_by_key_one(str,i) ;
+		if (ret >= 0) return ret ;
+	}
 	return -1 ;
 }
 
-
-int const key_enum_el = ENDOFKEY - MAIN ;	
-int const key_enum_section_el = TYPE - MAIN ;
-
-int const key_enum_main_el = CLASSIC - TYPE ;
-int const key_enum_svtype_el = LINE - CLASSIC ;
-int const key_enum_expect_el = LOGGER - LINE ;
-int const key_enum_options_el = DOWN - LOGGER ;
-int const key_enum_flags_el = AUTO - DOWN ;
-int const key_enum_build_el = NEED - AUTO ;
-int const key_enum_mandatory_el = TAI - NEED ;
-int const key_enum_time_el = PRODUCER - TAI ;
-int const key_enum_logger_el = ENDOFKEY - PRODUCER ;
-
+char const *get_key_by_enum(int const e, int const key)
+{
+	return enum_all[e].str[key] ;
+}
diff --git a/src/lib66/instance.c b/src/lib66/instance.c
index d8367c99..c573711d 100644
--- a/src/lib66/instance.c
+++ b/src/lib66/instance.c
@@ -61,7 +61,7 @@ int instance_splitname(stralloc *sa,char const *name,int len,int what)
 	return 1 ;
 }
 
-int instance_create(stralloc *sasv,char const *svname, char const *regex, char const *src, int len)
+int instance_create(stralloc *sasv,char const *svname, char const *regex, int len)
 {
 	char const *copy ;
 	size_t tlen = len + 1 ;
@@ -72,18 +72,17 @@ int instance_create(stralloc *sasv,char const *svname, char const *regex, char c
 	memcpy(template,svname,tlen) ;
 	template[tlen] = 0 ;
 	
+	if (!auto_stra(&tmp,sasv->s)) goto err ;
+
 	copy = svname + tlen ;
 
-	if (!file_readputsa(&tmp,src,template)) {
-		log_warnusys("open: ",src,template) ;
-		goto err ;
-	}
 	if (!sastr_replace_all(&tmp,regex,copy)){
-		log_warnusys("replace instance character at: ",src,template) ;
+		log_warnusys("replace instance character for service: ",svname) ;
 		goto err ;
 	}
 	if (!stralloc_copy(sasv,&tmp)) goto err ;
 	stralloc_free(&tmp) ;
+
 	return 1 ;
 	err:
 		stralloc_free(&tmp) ;
diff --git a/src/lib66/parser.c b/src/lib66/parser.c
index 7b1fc676..f83e5263 100644
--- a/src/lib66/parser.c
+++ b/src/lib66/parser.c
@@ -33,9 +33,9 @@
 #include <66/parser.h>
 
 
-int parser(sv_alltype *service,stralloc *src,char const *svname)
+int parser(sv_alltype *service,stralloc *src,char const *svname,int svtype)
 {
-	int r , svtype = -1 ;
+	int r ;
 	size_t i = 0 ;
 	section_t sasection = SECTION_ZERO ;
 	genalloc ganocheck = GENALLOC_ZERO ;
@@ -46,22 +46,17 @@ int parser(sv_alltype *service,stralloc *src,char const *svname)
 		log_warnu("parse section of service file: ",svname) ;
 		goto err ;
 	}
-	if (!sasection.idx[MAIN])
+	if (!sasection.idx[SECTION_MAIN])
 	{
 		log_warn("missing section [main] in service file: ", svname) ;
 		goto err ;
 	}
-	if (!key_get_range(&ganocheck,&sasection,&svtype)) goto err ;
-	if (svtype < 0)
-	{
-		log_warn("invalid value for key: ",get_keybyid(TYPE)," in service file: ",svname) ;
-		goto err ;
-	}
-	if (svtype != BUNDLE && !sasection.idx[START])
+	if (svtype != TYPE_BUNDLE && !sasection.idx[SECTION_START])
 	{
 		log_warn("missing section [start] in service file: ", svname) ;
 		goto err ;
 	}
+	if (!key_get_range(&ganocheck,&sasection)) goto err ;
 	if (!genalloc_len(keynocheck,&ganocheck)){
 		log_warn("empty service file: ",svname) ;
 		goto err ;
@@ -69,7 +64,7 @@ int parser(sv_alltype *service,stralloc *src,char const *svname)
 	for (i = 0;i < genalloc_len(keynocheck,&ganocheck);i++)
 	{
 		uint32_t idsec = genalloc_s(keynocheck,&ganocheck)[i].idsec ;
-		for (unsigned int j = 0;j < total_list_el[idsec] && total_list[idsec].list > 0;j++)
+		for (unsigned int j = 0;j < total_list_el[idsec] && *total_list[idsec].list[j].name;j++)
 		{
 			if (!get_mandatory(&ganocheck,idsec,j))
 			{
@@ -86,7 +81,7 @@ int parser(sv_alltype *service,stralloc *src,char const *svname)
 			goto err ;
 		}
 	}
-	if ((service->opts[1]) && (svtype == LONGRUN))
+	if ((service->opts[1]) && (svtype == TYPE_LONGRUN))
 	{
 		if (!add_pipe(service, &deps))
 		{
diff --git a/src/lib66/parser_enabled.c b/src/lib66/parser_enabled.c
index e4a756d3..3ba79d8c 100644
--- a/src/lib66/parser_enabled.c
+++ b/src/lib66/parser_enabled.c
@@ -104,7 +104,7 @@ int parse_service_deps(ssexec_t *info,stralloc *parsed_list,stralloc *tree_list,
 		for (;nid; id += strlen(deps.s + id) + 1, nid--)
 		{
 			newsv.len = 0 ;
-			if (sv_before->cname.itype != BUNDLE)
+			if (sv_before->cname.itype != TYPE_BUNDLE)
 			{
 				log_trace("Service : ",sv, " depends on : ",deps.s+id) ;
 			}else log_trace("Bundle : ",sv, " contents : ",deps.s+id," as service") ;
@@ -137,7 +137,7 @@ int parse_service_opts_deps(ssexec_t *info,stralloc *parsed_list,stralloc *tree_
 	
 	unsigned int idref = sv_before->cname.idopts ;
 	unsigned int nref = sv_before->cname.nopts ;
-	if (mandatory == EXTDEPS) {
+	if (mandatory == KEY_EXTDEPS) {
 		idref = sv_before->cname.idext ;
 		nref = sv_before->cname.next ;
 		ext = 1 ;
@@ -231,19 +231,24 @@ int parse_service_before(ssexec_t *info,stralloc *parsed_list,stralloc *tree_lis
 	sv_alltype sv_before = SV_ALLTYPE_ZERO ;
 	sasv->len = 0 ;
 
+	if (!read_svfile(sasv,svname,svsrc)) return 0 ;
+
+	if (!get_svtype(&sv_before,sasv->s)) 
+		log_warn_return (LOG_EXIT_ZERO,"invalid value for key: ",get_key_by_enum(ENUM_KEY,KEY_TYPE)," in service file: ",svsrc,"/",svname) ;
+
 	insta = instance_check(svname) ;
 	if (!insta) 
 		log_warn_return(LOG_EXIT_ZERO, "invalid instance name: ",svname) ;
 
 	if (insta > 0)
 	{
-		if (!instance_create(sasv,svname,SS_INSTANCE,svsrc,insta))
+		if (!instance_create(sasv,svname,SS_INSTANCE,insta))
 			log_warn_return(LOG_EXIT_ZERO,"create instance service: ",svname) ;
 		
 		/** ensure that we have an empty line at the end of the string*/
 		if (!stralloc_cats(sasv,"\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 		if (!stralloc_0(sasv)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
-	}else if (!read_svfile(sasv,svname,svsrc)) return 0 ;
+	}
 	
 	memcpy(svpath,svsrc,svsrclen) ;
 	memcpy(svpath + svsrclen,svname,svnamelen) ;
@@ -257,7 +262,7 @@ int parse_service_before(ssexec_t *info,stralloc *parsed_list,stralloc *tree_lis
 		goto freed ;
 	}
 
-	if (!parser(&sv_before,sasv,svname)) return 0 ;
+	if (!parser(&sv_before,sasv,svname,sv_before.cname.itype)) return 0 ;
 	
 	/** keep the name set by user
 	 * uniquely for instantiated service
@@ -291,11 +296,11 @@ int parse_service_before(ssexec_t *info,stralloc *parsed_list,stralloc *tree_lis
 	add:
 	if (!parse_add_service(parsed_list,&sv_before,svpath,nbsv,info->owner)) return 0 ;
 	
-	if ((sv_before.cname.itype > CLASSIC && force > 1) || !(*exist))
+	if ((sv_before.cname.itype > TYPE_CLASSIC && force > 1) || !(*exist))
 	{
 		if (!parse_service_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force)) return 0 ;
-		if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,OPTSDEPS)) return 0 ;
-		if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,EXTDEPS)) return 0 ;
+		if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,KEY_OPTSDEPS)) return 0 ;
+		if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,KEY_EXTDEPS)) return 0 ;
 	}
 	freed:
 	return 1 ;
diff --git a/src/lib66/parser_utils.c b/src/lib66/parser_utils.c
index 1a4aa6eb..e37b42ff 100644
--- a/src/lib66/parser_utils.c
+++ b/src/lib66/parser_utils.c
@@ -153,7 +153,7 @@ int section_get_range(section_t *sasection,stralloc *src)
 		if(secname.len && n)
 		{
 			skip = section_get_skip(cp.s,pos,MILL_GET_SECTION_NAME.inner.nline) ;
-			id = get_enumbyid(secname.s,key_enum_section_el) ;
+			id = get_enum_by_key(secname.s) ;
 			section_setsa(id,&psasection,sasection) ;
 			if (skip) sasection->idx[id] = 1 ;
 		}
@@ -204,7 +204,7 @@ int section_get_range(section_t *sasection,stralloc *src)
 		return 0 ;
 }
 
-int key_get_range(genalloc *ga, section_t *sasection,int *svtype)
+int key_get_range(genalloc *ga, section_t *sasection)
 {	
 	int r ;
 	size_t pos = 0, fakepos = 0 ;
@@ -213,21 +213,21 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype)
 	stralloc_ref psasection ;
 	key_all_t const *list = total_list ;
 							
-	for (int i = 0 ; i < key_enum_section_el ; i++)
+	for (int i = 0 ; i < SECTION_ENDOFKEY ; i++)
 	{	
 		if (sasection->idx[i])
 		{
-			if (i == ENV)
+			if (i == SECTION_ENV)
 			{	
 				pos = 0 ;	
 				keynocheck nocheck = KEYNOCHECK_ZERO ;
 				nocheck.idsec = i ;
-				nocheck.idkey = ENVAL ;
-				nocheck.expected = KEYVAL ;
-				nocheck.mandatory = OPTS ;
+				nocheck.idkey = KEY_ENVAL ;
+				nocheck.expected = EXPECT_KEYVAL ;
+				nocheck.mandatory = MANDATORY_OPTS ;
 				section_setsa(i,&psasection,sasection) ;
 				if (!stralloc_cats(&nocheck.val,psasection->s+1)) goto err ;//+1 remove the first '\n'
-				if (!environ_get_clean_env(&nocheck.val)) { log_warnu("parse section: ",get_keybyid(i)) ; goto err ; }
+				if (!environ_get_clean_env(&nocheck.val)) { log_warnu("parse section: ",get_key_by_enum(ENUM_SECTION,i)) ; goto err ; }
 				if (!stralloc_cats(&nocheck.val,"\n") ||
 				!stralloc_0(&nocheck.val)) goto err ;
 				nocheck.val.len-- ;
@@ -256,16 +256,16 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype)
 					for (int j = 0 ; j < total_list_el[i]; j++)
 					{
 						found = 0 ;
-						if (list[i].list[j].name && obstr_equal(sakey.s,list[i].list[j].name))
+						if (*list[i].list[j].name && obstr_equal(sakey.s,*list[i].list[j].name))
 						{
 							nocheck.idsec = i ;
-							nocheck.idkey = get_enumbyid(sakey.s,key_enum_el) ;
+							nocheck.idkey = list[i].list[j].id ;
 							nocheck.expected = list[i].list[j].expected ;
 							nocheck.mandatory = list[i].list[j].mandatory ;
 							found = 1 ;
 							switch(list[i].list[j].expected)
 							{
-								case QUOTE:
+								case EXPECT_QUOTE:
 									if (!sastr_get_double_quote(&nocheck.val))
 									{
 										parse_err(6,&nocheck) ;
@@ -273,7 +273,7 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype)
 									}
 									if (!stralloc_0(&nocheck.val)) goto err ;
 									break ;
-								case BRACKET:
+								case EXPECT_BRACKET:
 									if (!parse_bracket(&nocheck.val,&pos))
 									{
 										parse_err(6,&nocheck) ;
@@ -285,9 +285,9 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype)
 										goto err ;
 									}
 									break ;
-								case LINE:
-								case UINT:
-								case SLASH:
+								case EXPECT_LINE:
+								case EXPECT_UINT:
+								case EXPECT_SLASH:
 									if (!parse_line(&nocheck.val,&pos))
 									{
 										parse_err(7,&nocheck) ;
@@ -298,7 +298,6 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype)
 										parse_err(9,&nocheck) ;
 										goto err ;
 									}
-									if (!i && !j) (*svtype) = get_enumbyid(nocheck.val.s,key_enum_el) ;
 									break ;
 								default:
 									return 0 ;
@@ -309,7 +308,7 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype)
 					}			 
 					if (!found && r >=0) 
 					{ 
-						log_warn("unknown key: ",sakey.s," : in section: ",get_keybyid(sasection->idx[i])) ; 
+						log_warn("unknown key: ",sakey.s," : in section: ",get_key_by_enum(ENUM_SECTION,i)) ; 
 						keynocheck_free(&nocheck) ;
 						goto err ; 
 					}
@@ -338,15 +337,16 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey)
 	bkey = -1 ;
 	countidsec = 0 ;
 
+
 	switch(list[idsec].list[idkey].mandatory){
 		
-		case NEED:
+		case MANDATORY_NEED:
 			for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++)
 			{
 				if (genalloc_s(keynocheck,nocheck)[j].idsec == idsec)
 				{
 					countidsec++ ;
-					if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enumbyid(list[idsec].list[idkey].name,key_enum_el))
+					if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enum_by_key(*list[idsec].list[idkey].name))
 					{
 						count++ ;
 						break ;
@@ -354,23 +354,23 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey)
 				}
 			}					
 			if ((!count) && (countidsec))
-				log_warn_return(LOG_EXIT_ZERO,"mandatory key: ",list[idsec].list[idkey].name," not found on section: ",get_keybyid(idsec)) ;
+				log_warn_return(LOG_EXIT_ZERO,"mandatory key: ",*list[idsec].list[idsec].name," not found on section: ",get_key_by_enum(ENUM_SECTION,idsec)) ;
 
 			break ;
-		case CUSTOM:
+		case MANDATORY_CUSTOM:
 			for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++)
 			{
 				
 				if (genalloc_s(keynocheck,nocheck)[j].idsec == idsec)
 				{
 					countidsec++ ;
-					if (genalloc_s(keynocheck,nocheck)[j].idkey == BUILD)
+					if (genalloc_s(keynocheck,nocheck)[j].idkey == KEY_BUILD)
 					{
 						bkey = j ;
 						
 					}
 					
-					if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enumbyid(list[idsec].list[idkey].name,key_enum_el))
+					if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enum_by_key(*list[idsec].list[idkey].name))
 					{
 						count++ ;
 						break ;
@@ -379,22 +379,22 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey)
 			}
 			if ((!count) && (countidsec) && bkey>=0)
 			{
-				if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_keybyid(CUSTOM)))
-					log_warn_return(LOG_EXIT_ZERO,"custom build asked on section: ",get_keybyid(idsec)," -- key: ",list[idsec].list[idkey].name," must be set") ;
+				if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_key_by_enum(ENUM_BUILD,BUILD_CUSTOM)))
+					log_warn_return(LOG_EXIT_ZERO,"custom build asked on section: ",get_key_by_enum(ENUM_SECTION,idsec)," -- key: ",*list[idsec].list[idkey].name," must be set") ;
 			}
 			break ;
-		case BUNDLE:
+		case MANDATORY_BUNDLE:
 			for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++)
 			{
 				if (genalloc_s(keynocheck,nocheck)[j].idsec == idsec)
 				{
 					countidsec++ ;
-					if (genalloc_s(keynocheck,nocheck)[j].idkey == TYPE)
+					if (genalloc_s(keynocheck,nocheck)[j].idkey == KEY_TYPE)
 					{
 						bkey = j;
 						
 					}
-					if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enumbyid(list[idsec].list[idkey].name,key_enum_el))
+					if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enum_by_key(*list[idsec].list[idkey].name))
 					{
 						count++ ;
 					}
@@ -402,22 +402,23 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey)
 			}
 			if ((!count) && (countidsec) && bkey>=0)
 			{
-				if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_keybyid(BUNDLE)))
+				if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_key_by_enum(ENUM_TYPE,TYPE_BUNDLE)))
 					log_warn_return(LOG_EXIT_ZERO,"bundle type detected -- key @contents must be set") ;
 			}
 			break ;
 		/** only pass through here to check if flags env was asked
 		 * and the corresponding section exist*/	
-		case OPTS:
+		case MANDATORY_OPTS:
+
 			for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++)
 			{
 				
-				if (genalloc_s(keynocheck,nocheck)[j].idsec == ENV)
+				if (genalloc_s(keynocheck,nocheck)[j].idsec == SECTION_ENV)
 					count++ ;
 				
-				if (genalloc_s(keynocheck,nocheck)[j].idsec == MAIN) 
+				if (genalloc_s(keynocheck,nocheck)[j].idsec == SECTION_MAIN) 
 				{
-					if (genalloc_s(keynocheck,nocheck)[j].idkey == OPTIONS)
+					if (genalloc_s(keynocheck,nocheck)[j].idkey == KEY_OPTIONS)
 					{
 						bkey = j;						
 					}
@@ -428,7 +429,7 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey)
 				if (!sastr_clean_string(&sa,genalloc_s(keynocheck,nocheck)[bkey].val.s))
 					log_warnu_return(LOG_EXIT_ZERO,"clean value of: ",sa.s) ;
 
-				r = sastr_cmp(&sa,get_keybyid(ENVIR)) ;	
+				r = sastr_cmp(&sa,get_key_by_enum(ENUM_OPTS,OPTS_ENVIR)) ;
 				if ((r >= 0) && (!count))
 					log_warn_return(LOG_EXIT_ZERO,"options env was asked -- section environment must be set") ;
 			}
@@ -442,77 +443,61 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey)
 
 int nocheck_toservice(keynocheck *nocheck,int svtype, sv_alltype *service)
 {
-	static unsigned char const actions[5][4] = {
-	 //c->CLASSIC,		BUNDLE,	LONGRUN,	ONESHOT 
-	    { COMMON,		COMMON,	COMMON,		COMMON }, // main
-	    { EXECRUN, 		SKIP,	EXECRUN, 	EXECUP }, // start
-	    { EXECFINISH, 	SKIP,	EXECFINISH, EXECDOWN }, // stop
-	    { EXECLOG,		SKIP,	EXECLOG, 	SKIP }, // log
-	    { ENVIRON, 		SKIP,	ENVIRON, 	ENVIRON }, // env
-	} ;
-	static unsigned char const states[5][4] = {
-	 //c->CLASSIC,	BUNDLE,	LONGRUN,	ONESHOT
-	    { START,	SKIP,	START,	START }, // main
-	    { STOP,		SKIP,	STOP,	STOP }, // start
-	    { LOG,		SKIP,	LOG,	LOG }, // stop
-	    { ENV,		SKIP,	ENV,	ENV }, // log
-	    { SKIP,		SKIP,	SKIP,  	SKIP }, // env
-	     
-	} ;
 	int  p ;
 	p = svtype ;
-	int state = 0 ;
+	int ste = 0 ;
 	
-	while (state < 6)
+	while (ste < 6)
 	{
-	    unsigned int c = p - CLASSIC; 
-	    unsigned int action = actions[state][c] ;
-	    state = states[state][c] ;
+	    unsigned int c = p - 0 ;
+	    
+	    unsigned int action = actions[ste][c] ;
+	    ste = states[ste][c] ;
 
 	    switch (action) {
-			case COMMON:
+			case ACTION_COMMON:
 				if (!nocheck->idsec)
 					if (!keep_common(service,nocheck,svtype))
 						return 0 ;
 				
 				break ;
-			case EXECRUN:
+			case ACTION_EXECRUN:
 				if (nocheck->idsec == 1)
 					if (!keep_runfinish(&service->type.classic_longrun.run,nocheck))
 						return 0 ;
 					 
 				break ;
-			case EXECFINISH:
+			case ACTION_EXECFINISH:
 				if (nocheck->idsec == 2)
 					if (!keep_runfinish(&service->type.classic_longrun.finish,nocheck))
 						return 0 ;
 				 
 				break ;
-			case EXECLOG:
+			case ACTION_EXECLOG:
 				if (nocheck->idsec == 3)
 					if (!keep_logger(&service->type.classic_longrun.log,nocheck))
 						return 0 ;
 				 
 				break ;
-			case EXECUP:
+			case ACTION_EXECUP:
 				if (nocheck->idsec == 1)
 					if (!keep_runfinish(&service->type.oneshot.up,nocheck))
 						return 0 ;
 				 
 				break ;
-			case EXECDOWN:
+			case ACTION_EXECDOWN:
 				if (nocheck->idsec == 2)
 					if (!keep_runfinish(&service->type.oneshot.down,nocheck))
 						return 0 ;
 				 
 				break ;
-			case ENVIRON:
+			case ACTION_ENVIRON:
 				if (nocheck->idsec == 4)
 					if (!keep_common(service,nocheck,svtype))
 						return 0 ;
 				
 				break ;
-			case SKIP:
+			case ACTION_SKIP:
 				break ;
 			default: log_warn_return(LOG_EXIT_ZERO,"unknown action") ;
 		}
@@ -531,49 +516,49 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 	char *chval = nocheck->val.s ;
 	
 	switch(nocheck->idkey){
-		case TYPE:
+		case KEY_TYPE:
 			r = get_enum(chval,nocheck) ;
-			if (!r) return 0 ;
+			if (r == -1) return 0 ;
 			service->cname.itype = r ;
 			break ;
-		case NAME:
+		case KEY_NAME:
 			service->cname.name = keep.len ;
 			if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			break ;
-		case DESCRIPTION:
+		case KEY_DESCRIPTION:
 			service->cname.description = keep.len ;
 			if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			break ;
-		case OPTIONS:
+		case KEY_OPTIONS:
 			if (!get_clean_val(nocheck)) return 0 ;
 			for (;pos < *chlen; pos += strlen(chval + pos)+1)
 			{
 				r = get_enum(chval + pos,nocheck) ;
-				if (!r) return 0 ;
-				if (svtype == CLASSIC || svtype == LONGRUN)
+				if (r == -1) return 0 ;
+				if (svtype == TYPE_CLASSIC || svtype == TYPE_LONGRUN)
 				{
-					if (r == LOGGER)
+					if (r == OPTS_LOGGER)
 						service->opts[0] = 1 ;/**0 means not enabled*/
-					else if (svtype == LONGRUN && r == PIPELINE)
+					else if (svtype == TYPE_LONGRUN && r == OPTS_PIPELINE)
 						service->opts[1] = 1 ;
 				}
-				if (r == ENVIR)
+				if (r == OPTS_ENVIR)
 					service->opts[2] = 1 ;
 			}
 			break ;
-		case FLAGS:
+		case KEY_FLAGS:
 			if (!get_clean_val(nocheck)) return 0 ;
 			for (;pos < *chlen; pos += strlen(chval + pos)+1)
 			{
 				r = get_enum(chval + pos,nocheck) ;
-				if (!r) return 0 ;
-				if (r == DOWN) 
+				if (r == -1) return 0 ;
+				if (r == FLAGS_DOWN) 
 					service->flags[0] = 1 ;/**0 means not enabled*/				
-				if (r == NOSETSID)
+				if (r == FLAGS_NOSETSID)
 					service->flags[1] = 1 ;
 			}
 			break ;
-		case USER:
+		case KEY_USER:
 			if (!get_clean_val(nocheck)) return 0 ;
 			{
 				uid_t owner = MYUID ;
@@ -607,7 +592,7 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 				}
 			}
 			break ;
-		case HIERCOPY:
+		case KEY_HIERCOPY:
 			if (!get_clean_val(nocheck)) return 0 ;
 			{
 				unsigned int idx = 0 ;
@@ -621,9 +606,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 				}
 			}
 			break ;
-		case DEPENDS:
-			if ((service->cname.itype == CLASSIC) || (service->cname.itype == BUNDLE))
-				log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ;
+		case KEY_DEPENDS:
+			if ((service->cname.itype == TYPE_CLASSIC) || (service->cname.itype == TYPE_BUNDLE))
+				log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ;
 				
 			if (!get_clean_val(nocheck)) return 0 ;
 			service->cname.idga = deps.len ;
@@ -633,9 +618,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 				service->cname.nga++ ;
 			}
 			break ;
-		case OPTSDEPS:
-			if ((service->cname.itype == CLASSIC) || (service->cname.itype == BUNDLE))
-				log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ;
+		case KEY_OPTSDEPS:
+			if ((service->cname.itype == TYPE_CLASSIC) || (service->cname.itype == TYPE_BUNDLE))
+				log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ;
 			if (!get_clean_val(nocheck)) return 0 ;
 			service->cname.idopts = deps.len ;
 			for (;pos < *chlen; pos += strlen(chval + pos)+1)
@@ -644,9 +629,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 				service->cname.nopts++ ;
 			}
 			break ;
-		case EXTDEPS:
-			if ((service->cname.itype == CLASSIC) || (service->cname.itype == BUNDLE))
-				log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ;
+		case KEY_EXTDEPS:
+			if ((service->cname.itype == TYPE_CLASSIC) || (service->cname.itype == TYPE_BUNDLE))
+				log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ;
 			if (!get_clean_val(nocheck)) return 0 ;
 			service->cname.idext = deps.len ;
 			for (;pos < *chlen; pos += strlen(chval + pos)+1)
@@ -655,9 +640,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 				service->cname.next++ ;
 			}
 			break ;
-		case CONTENTS:
-			if (service->cname.itype != BUNDLE)
-				log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ;
+		case KEY_CONTENTS:
+			if (service->cname.itype != TYPE_BUNDLE)
+				log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ;
 
 			if (!get_clean_val(nocheck)) return 0 ;
 			service->cname.idga = deps.len ;
@@ -667,19 +652,19 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 				service->cname.nga++ ;
 			}
 			break ;
-		case T_KILL:
-		case T_FINISH:
-		case T_UP:
-		case T_DOWN:
+		case KEY_T_KILL:
+		case KEY_T_FINISH:
+		case KEY_T_UP:
+		case KEY_T_DOWN:
 			if (!get_timeout(nocheck,(uint32_t *)service->timeout)) return 0 ;
 			break ;
-		case DEATH:
+		case KEY_DEATH:
 			if (!get_uint(nocheck,&service->death)) return 0 ;
 			break ;
-		case NOTIFY:
+		case KEY_NOTIFY:
 			if (!get_uint(nocheck,&service->notification)) return 0 ;
 			break ;
-		case ENVAL:
+		case KEY_ENVAL:
 			if (!environ_clean_nline(&nocheck->val))
 				log_warnu_return(LOG_EXIT_ZERO,"clean environment value: ",chval) ;
 			
@@ -687,14 +672,14 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype)
 			if (!stralloc_copy(&service->saenv,&nocheck->val))
 				log_warnu_return(LOG_EXIT_ZERO,"store environment value: ",chval) ;
 			break ;
-		case SIGNAL:
+		case KEY_SIGNAL:
 			if (!sig0_scan(chval,&service->signal))
 			{
 				parse_err(3,nocheck) ;
 				return 0 ;
 			}
 			break ;
-		default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_keybyid(nocheck->idkey)) ;
+		default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey)) ;
 			
 	}
 	
@@ -706,20 +691,20 @@ int keep_runfinish(sv_exec *exec,keynocheck *nocheck)
 	int r = 0 ;
 	size_t *chlen = &nocheck->val.len ;
 	char *chval = nocheck->val.s ;
-		
+
 	switch(nocheck->idkey)
 	{
-		case BUILD:
+		case KEY_BUILD:
 			r = get_enum(chval,nocheck) ;
-			if (!r) return 0 ;
+			if (r == -1) return 0 ;
 			exec->build = r ;
 			break ;
-		case RUNAS:
+		case KEY_RUNAS:
 			if (!check_valid_runas(nocheck)) return 0 ;
 			exec->runas = keep.len ;
 			if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			break ;
-		case SHEBANG:
+		case KEY_SHEBANG:
 			if (chval[0] != '/')
 			{
 				parse_err(4,nocheck) ;
@@ -728,11 +713,11 @@ int keep_runfinish(sv_exec *exec,keynocheck *nocheck)
 			exec->shebang = keep.len ;
 			if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			break ;
-		case EXEC:
+		case KEY_EXEC:
 			exec->exec = keep.len ;
 			if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			break ;
-		default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_keybyid(nocheck->idkey)) ;
+		default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey)) ;
 	}
 	return 1 ;
 }
@@ -744,13 +729,13 @@ int keep_logger(sv_execlog *log,keynocheck *nocheck)
 	char *chval = nocheck->val.s ;
 
 	switch(nocheck->idkey){
-		case BUILD:
+		case KEY_BUILD:
 			if (!keep_runfinish(&log->run,nocheck)) return 0 ;
 			break ;
-		case RUNAS:
+		case KEY_RUNAS:
 			if (!keep_runfinish(&log->run,nocheck)) return 0 ;
 			break ;
-		case DEPENDS:
+		case KEY_DEPENDS:
 			if (!get_clean_val(nocheck)) return 0 ;
 			log->idga = deps.len ;
 			for (;pos < *chlen; pos += strlen(chval + pos) + 1)
@@ -759,17 +744,17 @@ int keep_logger(sv_execlog *log,keynocheck *nocheck)
 				log->nga++ ;
 			}
 			break ;
-		case SHEBANG:
+		case KEY_SHEBANG:
 			if (!keep_runfinish(&log->run,nocheck)) return 0 ;
 			break ;
-		case EXEC:
+		case KEY_EXEC:
 			if (!keep_runfinish(&log->run,nocheck)) return 0 ;
 			break ;
-		case T_KILL:
-		case T_FINISH:
+		case KEY_T_KILL:
+		case KEY_T_FINISH:
 			if (!get_timeout(nocheck,(uint32_t *)log->timeout)) return 0 ;
 			break ;
-		case DESTINATION:
+		case KEY_DESTINATION:
 			if (chval[0] != '/')
 			{
 				parse_err(4,nocheck) ;
@@ -778,18 +763,18 @@ int keep_logger(sv_execlog *log,keynocheck *nocheck)
 			log->destination = keep.len ;
 			if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			break ;
-		case BACKUP:
+		case KEY_BACKUP:
 			if (!get_uint(nocheck,&log->backup)) return 0 ;
 			break ;
-		case MAXSIZE:
+		case KEY_MAXSIZE:
 			if (!get_uint(nocheck,&log->maxsize)) return 0 ;
 			break ;
-		case TIMESTP:
+		case KEY_TIMESTP:
 			r = get_enum(chval,nocheck) ;
-			if (!r) return 0 ;
+			if (r == -1) return 0 ;
 			log->timestamp = r ;
 			break ;
-		default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_keybyid(nocheck->idkey)) ;
+		default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey)) ;
 	}
 	return 1 ;
 }
@@ -883,11 +868,11 @@ void section_setsa(int id, stralloc_ref *p,section_t *sa)
 {
 	switch(id)
 	{
-		case MAIN: *p = &sa->main ; break ;
-		case START: *p = &sa->start ; break ;
-		case STOP: *p = &sa->stop ; break ;
-		case LOG: *p = &sa->logger ; break ;
-		case ENV: *p = &sa->environment ; break ;
+		case SECTION_MAIN: *p = &sa->main ; break ;
+		case SECTION_START: *p = &sa->start ; break ;
+		case SECTION_STOP: *p = &sa->stop ; break ;
+		case SECTION_LOG: *p = &sa->logger ; break ;
+		case SECTION_ENV: *p = &sa->environment ; break ;
 		default: break ;
 	}
 }
@@ -909,9 +894,9 @@ int section_get_skip(char const *s,size_t pos,int nline)
 	return 1 ;
 }
 
-int section_get_id(stralloc *secname, char const *string,size_t *pos,int *id)
+int section_get_id(stralloc *secname, char const *str,size_t *pos,int *id)
 {
-	size_t len = strlen(string) ;
+	size_t len = strlen(str) ;
 	size_t newpos = 0 ;
 	(*id) = -1 ;
 
@@ -919,42 +904,42 @@ int section_get_id(stralloc *secname, char const *string,size_t *pos,int *id)
 	{
 		secname->len = 0 ;
 		newpos = 0 ;
-		if (mill_element(secname,string+(*pos),&MILL_GET_SECTION_NAME,&newpos) == -1) return 0 ;
+		if (mill_element(secname,str+(*pos),&MILL_GET_SECTION_NAME,&newpos) == -1) return 0 ;
 		if (secname->len)
 		{
 			if (!stralloc_0(secname)) return 0 ;
-			(*id) = get_enumbyid(secname->s,key_enum_section_el) ;
+			(*id) = get_enum_by_key(secname->s) ;
 		}
 		(*pos) += newpos ;
 	}
 	return 1 ;
 }
 
-int key_get_next_id(stralloc *sa, char const *string,size_t *pos)
+int key_get_next_id(stralloc *sa, char const *str,size_t *pos)
 {
-	if (!string) return 0 ;
+	if (!str) return 0 ;
 	int r = 0 ;
-	size_t newpos = 0, len = strlen(string) ;
+	size_t newpos = 0, len = strlen(str) ;
 	stralloc kp = STRALLOC_ZERO ;
 	wild_zero_all(&MILL_GET_AROBASE_KEY) ;
 	wild_zero_all(&MILL_FIRST_BRACKET) ;
 	int id = -1 ;
-	r = mill_element(&kp,string,&MILL_FIRST_BRACKET,&newpos) ;
+	r = mill_element(&kp,str,&MILL_FIRST_BRACKET,&newpos) ;
 	if (r == -1 || !r) goto err ;
 	*pos = newpos ;
 	while (id == -1 && newpos < len)
 	{
 		kp.len = 0 ;
-		r = mill_element(&kp,string,&MILL_GET_AROBASE_KEY,&newpos) ;
+		r = mill_element(&kp,str,&MILL_GET_AROBASE_KEY,&newpos) ;
 		if (r == -1) goto err ;
 		if (!stralloc_0(&kp)) goto err ;
-		id = get_enumbyid(kp.s,key_enum_el) ;
+		id = get_enum_by_key(kp.s) ;
 		//May confusing in case of instantiated service
 		//if (id == -1 && kp.len > 1) log_warn("unknown key: ",kp.s,": at parenthesis parse") ;
 	}
-	newpos = get_rlen_until(string,')',newpos) ;
+	newpos = get_rlen_until(str,')',newpos) ;
 	if (newpos == -1) goto err ;
-	if (!stralloc_catb(sa,string+*pos,newpos - *pos)) goto err ;
+	if (!stralloc_catb(sa,str+*pos,newpos - *pos)) goto err ;
 	*pos = newpos + 1 ; //+1 remove the last ')'
 	stralloc_free(&kp) ;
 	return 1 ;
@@ -973,13 +958,13 @@ int get_clean_val(keynocheck *ch)
 	return 1 ;
 }
 
-int get_enum(char const *string, keynocheck *ch)
+int get_enum(char const *str, keynocheck *ch)
 {
-	int r = get_enumbyid(string,key_enum_el) ;
+	int r = get_enum_by_key(str) ;
 	if (r == -1) 
 	{
 		parse_err(0,ch) ;
-		return 0 ;
+		return -1 ;
 	}
 	return r ;
 }
@@ -987,10 +972,10 @@ int get_enum(char const *string, keynocheck *ch)
 int get_timeout(keynocheck *ch,uint32_t *ui)
 {
 	int time = 0 ;
-	if (ch->idkey == T_KILL) time = 0 ;
-	else if (ch->idkey == T_FINISH) time = 1 ;
-	else if (ch->idkey == T_UP) time = 2 ;
-	else if (ch->idkey == T_DOWN) time = 3 ;
+	if (ch->idkey == KEY_T_KILL) time = 0 ;
+	else if (ch->idkey == KEY_T_FINISH) time = 1 ;
+	else if (ch->idkey == KEY_T_UP) time = 2 ;
+	else if (ch->idkey == KEY_T_DOWN) time = 3 ;
 	if (scan_timeout(ch->val.s,ui,time) == -1)
 	{
 		parse_err(3,ch) ;
@@ -1021,41 +1006,63 @@ int check_valid_runas(keynocheck *ch)
 	return 1 ;
 }
 
+int get_svtype(sv_alltype *sv_before, char const *contents)
+{
+	stralloc sa = STRALLOC_ZERO ;
+
+	if (!auto_stra(&sa,contents)) goto err ;
+
+	if (!environ_get_val_of_key(&sa,get_key_by_enum(ENUM_KEY,KEY_TYPE))) goto err ;
+
+	if (!sastr_clean_element(&sa)) goto err ;
+	sv_before->cname.itype = get_enum_by_key(sa.s) ;
+
+	if (sv_before->cname.itype == -1) goto err ;
+
+	stralloc_free(&sa) ;
+	return 1 ;
+	err:
+		stralloc_free(&sa) ;
+		return 0 ;
+}
+
 void parse_err(int ierr,keynocheck *check)
 {
 	int idsec = check->idsec ;
 	int idkey = check->idkey ;
+	char const *section = get_key_by_enum(ENUM_SECTION,idsec) ;
+	char const *key = get_key_by_enum(ENUM_KEY,idkey) ;
 	switch(ierr)
 	{
 		case 0: 
-			log_warn("invalid value for key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ;
+			log_warn("invalid value for key: ",key,": in section: ",section) ;
 			break ;
 		case 1:
-			log_warn("multiple definition of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ;
+			log_warn("multiple definition of key: ",key,": in section: ",section) ;
 			break ;
 		case 2:
-			log_warn("same value for key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ;
+			log_warn("same value for key: ",key,": in section: ",section) ;
 			break ;
 		case 3:
-			log_warn("key: ",get_keybyid(idkey),": must be an integrer value in section: ",get_keybyid(idsec)) ;
+			log_warn("key: ",key,": must be an integrer value in section: ",section) ;
 			break ;
 		case 4:
-			log_warn("key: ",get_keybyid(idkey),": must be an absolute path in section: ",get_keybyid(idsec)) ;
+			log_warn("key: ",key,": must be an absolute path in section: ",section) ;
 			break ;
 		case 5:
-			log_warn("key: ",get_keybyid(idkey),": must be set in section: ",get_keybyid(idsec)) ;
+			log_warn("key: ",key,": must be set in section: ",section) ;
 			break ;
 		case 6:
-			log_warn("invalid format of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ;
+			log_warn("invalid format of key: ",key,": in section: ",section) ;
 			break ;
 		case 7:
-			log_warnu("parse key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ;
+			log_warnu("parse key: ",key,": in section: ",section) ;
 			break ;
 		case 8:
-			log_warnu("clean value of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ;
+			log_warnu("clean value of key: ",key,": in section: ",section) ;
 			break ;
 		case 9:
-			log_warn("empty value of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ;
+			log_warn("empty value of key: ",key,": in section: ",section) ;
 			break ;
 		default:
 			log_warn("unknown parse_err number") ;
diff --git a/src/lib66/parser_write.c b/src/lib66/parser_write.c
index 0f0f3473..e41bc374 100644
--- a/src/lib66/parser_write.c
+++ b/src/lib66/parser_write.c
@@ -60,7 +60,7 @@ int write_services(ssexec_t *info,sv_alltype *sv, char const *workdir, uint8_t f
 		if (ss_resolve_check(workdir,name)) 
 		{
 			if (!ss_resolve_read(&res,workdir,name)) log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",name) ;
-			if (res.type != type && res.disen) log_die(LOG_EXIT_SYS,"Detection of incompatible type format for: ",name," -- current: ",get_keybyid(type)," previous: ",get_keybyid(res.type)) ;
+			if (res.type != type && res.disen) log_die(LOG_EXIT_SYS,"Detection of incompatible type format for: ",name," -- current: ",get_key_by_enum(ENUM_TYPE,type)," previous: ",get_key_by_enum(ENUM_TYPE,res.type)) ;
 		}
 		ss_resolve_free(&res) ;
 	}
@@ -70,7 +70,7 @@ int write_services(ssexec_t *info,sv_alltype *sv, char const *workdir, uint8_t f
 	memcpy(wname,workdir,workdirlen) ;
 	wnamelen = workdirlen ;
 	
-	if (type == CLASSIC)
+	if (type == TYPE_CLASSIC)
 	{
 		memcpy(wname + wnamelen, SS_SVC, SS_SVC_LEN) ;
 		memcpy(wname + wnamelen + SS_SVC_LEN, "/", 1) ;
@@ -111,27 +111,27 @@ int write_services(ssexec_t *info,sv_alltype *sv, char const *workdir, uint8_t f
 	
 	switch(type)
 	{
-		case CLASSIC:
+		case TYPE_CLASSIC:
 			if (!write_classic(sv, wname, force, conf))
 				log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ;
 			
 			break ;
-		case LONGRUN:
+		case TYPE_LONGRUN:
 			if (!write_longrun(sv, wname, force, conf))
 				log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ;
 
 			break ;
-		case ONESHOT:
+		case TYPE_ONESHOT:
 			if (!write_oneshot(sv, wname, conf))
 				log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ;
 
 			break ;
-		case BUNDLE:
+		case TYPE_BUNDLE:
 			if (!write_bundle(sv, wname))
 				log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ;
 
 			break ;
-		default: log_warn_return(LOG_EXIT_ZERO,"unkown type: ", get_keybyid(sv->cname.itype)) ;
+		default: log_warn_return(LOG_EXIT_ZERO,"unkown type: ", get_key_by_enum(ENUM_TYPE,sv->cname.itype)) ;
 	}
 		
 	return 1 ;
@@ -322,7 +322,7 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d
 			log_warnu_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/dependencies") ;
 	}
 	
-	if (sv->cname.itype > CLASSIC)
+	if (sv->cname.itype > TYPE_CLASSIC)
 	{
 		if (!file_write_unsafe(ddst.s,"type","longrun",7))
 			log_warnusys_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/type") ;
@@ -331,11 +331,11 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d
 	/**logger section may not be set
 	 * pick auto by default*/
 	if (!logbuild)
-		logbuild=AUTO ; 
+		logbuild=BUILD_AUTO ; 
 	
 	switch(logbuild)
 	{
-		case AUTO:
+		case BUILD_AUTO:
 			/** uid */
 			if (!stralloc_cats(&shebang, "#!" EXECLINE_SHEBANGPREFIX "execlineb -P\n") || 
 			!stralloc_0(&shebang)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
@@ -369,8 +369,8 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d
 			}
 			if (!stralloc_0(&destlog)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			
-			if (log->timestamp == ISO) timestamp = "T" ;
-			else if (log->timestamp == NONE) timestamp = "" ;
+			if (log->timestamp == TIME_ISO) timestamp = "T" ;
+			else if (log->timestamp == TIME_NONE) timestamp = "" ;
 			
 			if (log->backup > 0)
 			{
@@ -394,7 +394,7 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d
 			!stralloc_cats(&exec,S6_BINPREFIX "s6-log -d3 " "n") ||
 			!stralloc_cats(&exec,pback) ||
 			!stralloc_cats(&exec," ")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
-			if (log->timestamp < NONE) 
+			if (log->timestamp < TIME_NONE) 
 			{
 				if (!stralloc_cats(&exec,timestamp) ||
 				!stralloc_cats(&exec," ")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
@@ -413,7 +413,7 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d
 			if (!file_write_unsafe(ddst.s,SS_NOTIFICATION,"3\n",2))
 				log_warnusys_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/" SS_NOTIFICATION) ;
 				
-			if (sv->cname.itype == CLASSIC)
+			if (sv->cname.itype == TYPE_CLASSIC)
 			{
 				ddst.len-- ;
 				if (!stralloc_cats(&ddst,"/run") ||
@@ -423,11 +423,11 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d
 					log_warnusys_return(LOG_EXIT_ZERO,"chmod ", ddst.s) ;
 			}
 			break;
-		case CUSTOM:
+		case BUILD_CUSTOM:
 			if (!write_exec(sv, &log->run,"run",ddst.s,mode))
 				log_warnu_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/run") ;
 			break;
-		default: log_warn_return(LOG_EXIT_ZERO,"unknown build value: ",get_keybyid(logbuild)) ;	
+		default: log_warn_return(LOG_EXIT_ZERO,"unknown build value: ",get_key_by_enum(ENUM_BUILD,logbuild)) ;	
 	}
 		
 	r = scan_mode(destlog.s,S_IFDIR) ;
@@ -476,12 +476,12 @@ int write_consprod(sv_alltype *sv,char const *prodname,char const *consname,char
 	char pipefile[consdstlen + 1 + consnamelen + 1 + 1] ;
 	
 	/**producer-for*/
-	if (!file_write_unsafe(consfile,get_keybyid(CONSUMER),prodname,strlen(prodname))) 
-		log_warnu_return(LOG_EXIT_ZERO,"write: ",consfile,get_keybyid(CONSUMER)) ;
+	if (!file_write_unsafe(consfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_CONSUMER),prodname,strlen(prodname))) 
+		log_warnu_return(LOG_EXIT_ZERO,"write: ",consfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_CONSUMER)) ;
 	
 	/**consumer-for*/
-	if (!file_write_unsafe(prodfile,get_keybyid(PRODUCER),consname,strlen(consname)))
-		log_warnu_return(LOG_EXIT_ZERO,"write: ",prodfile,get_keybyid(PRODUCER)) ;
+	if (!file_write_unsafe(prodfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PRODUCER),consname,strlen(consname)))
+		log_warnu_return(LOG_EXIT_ZERO,"write: ",prodfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PRODUCER)) ;
 
 	/**pipeline**/
 	if (sv->opts[1]) 
@@ -496,8 +496,8 @@ int write_consprod(sv_alltype *sv,char const *prodname,char const *consname,char
 		
 		memcpy(pipename,deps.s+sv->pipeline,len) ;
 		pipename[len] = 0 ;
-		if (!file_write_unsafe(pipefile,PIPELINE_NAME,pipename,len))
-			log_warnu_return(LOG_EXIT_ZERO,"write: ",pipefile,PIPELINE_NAME) ;
+		if (!file_write_unsafe(pipefile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PIPE),pipename,len))
+			log_warnu_return(LOG_EXIT_ZERO,"write: ",pipefile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PIPE)) ;
 	}	
 	
 	return 1 ;
@@ -552,9 +552,9 @@ int write_common(sv_alltype *sv, char const *dst,uint8_t conf)
 		
 	}
 	/** type file*/
-	if (sv->cname.itype > CLASSIC)
+	if (sv->cname.itype > TYPE_CLASSIC)
 	{
-		if (!file_write_unsafe(dst,"type",get_keybyid(sv->cname.itype),strlen(get_keybyid(sv->cname.itype))))
+		if (!file_write_unsafe(dst,"type",get_key_by_enum(ENUM_TYPE,sv->cname.itype),strlen(get_key_by_enum(ENUM_TYPE,sv->cname.itype))))
 			log_warnusys_return(LOG_EXIT_ZERO,"write type file") ;
 	}
 	/** max-death-tally */
@@ -592,6 +592,7 @@ int write_common(sv_alltype *sv, char const *dst,uint8_t conf)
 			stralloc salist = STRALLOC_ZERO ;
 			//merge config from upstream to sysadmin
 			if (!file_readputsa(&salist,dst,name)) log_warnusys_return(LOG_EXIT_ZERO,"read: ",dst,name) ;
+
 			if (!env_merge_conf(dst,name,&salist,&sv->saenv,conf))
 				log_warnu_return(LOG_EXIT_ZERO,"merge environment file") ;
 
@@ -649,7 +650,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo
 	
 	switch (exec->build)
 	{
-		case AUTO:
+		case BUILD_AUTO:
 			/** uid */
 			if ((!owner && exec->runas))
 			{
@@ -658,7 +659,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo
 				!stralloc_cats(&ui,"\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			}
 			/** environment */
-			if (sv->opts[2] && (exec->build == AUTO))
+			if (sv->opts[2] && (exec->build == BUILD_AUTO))
 			{
 				if (!stralloc_cats(&env,SS_BINPREFIX "execl-envfile ") ||
 				!stralloc_cats(&env,keep.s + sv->srconf) || 
@@ -666,13 +667,13 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo
 				!stralloc_cats(&env,"\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			}
 			/** shebang */
-			if (type != ONESHOT)
+			if (type != TYPE_ONESHOT)
 			{
 				if (!stralloc_cats(&shebang, "#!" EXECLINE_SHEBANGPREFIX "execlineb -P\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			}
 			break ;
-		case CUSTOM:
-			if (type != ONESHOT)
+		case BUILD_CUSTOM:
+			if (type != TYPE_ONESHOT)
 			{
 				if (!stralloc_cats(&shebang, "#!") ||
 				!stralloc_cats(&shebang, keep.s+exec->shebang) || 
@@ -684,7 +685,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo
 				!stralloc_cats(&shebang," \"")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 			}
 			break ;
-		default: log_warn(LOG_EXIT_ZERO,"unknown ", get_keybyid(exec->build)," build type") ;
+		default: log_warn(LOG_EXIT_ZERO,"unknown ", get_key_by_enum(ENUM_BUILD,exec->build)," build type") ;
 			break ;
 	}
 	/** close uid */
@@ -695,7 +696,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo
 	if (!stralloc_0(&shebang)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 	/** close command */
 	if (!stralloc_cats(&runuser, keep.s+exec->exec)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
-	if ((type == ONESHOT) && (exec->build == CUSTOM))
+	if ((type == TYPE_ONESHOT) && (exec->build == BUILD_CUSTOM))
 	{
 		if (!stralloc_cats(&runuser," \"")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 	}
@@ -704,7 +705,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo
 	
 	/** build the file*/	
 	if (!stralloc_cats(&execute,shebang.s)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
-	if (exec->build == AUTO)
+	if (exec->build == BUILD_AUTO)
 	{
 		if (!stralloc_cats(&execute,EXECLINE_BINPREFIX "fdmove -c 2 1\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 	}
diff --git a/src/lib66/rc_manage.c b/src/lib66/rc_manage.c
index 4331e94b..9cf1517d 100644
--- a/src/lib66/rc_manage.c
+++ b/src/lib66/rc_manage.c
@@ -58,7 +58,7 @@ int rc_manage(ssexec_t *info,genalloc *ga)
 	memcpy(live + info->livetree.len + 1,info->treename.s,info->treename.len) ;
 	live[info->livetree.len + 1 + info->treename.len] = 0 ;
 	
-	if (!ss_resolve_pointo(&sares,info,LONGRUN,SS_RESOLVE_SRC))
+	if (!ss_resolve_pointo(&sares,info,TYPE_LONGRUN,SS_RESOLVE_SRC))
 	{
 		log_warnusys("set revolve pointer to source") ;
 		goto err ;
@@ -77,7 +77,7 @@ int rc_manage(ssexec_t *info,genalloc *ga)
 		char const *runat = string + genalloc_s(ss_resolve_t,ga)[i].runat ;
 		int type = genalloc_s(ss_resolve_t,ga)[i].type ;
 		//do not try to copy a bundle or oneshot, this is already done.
-		if (type != LONGRUN) continue ;
+		if (type != TYPE_LONGRUN) continue ;
 		sares.len = newlen ;
 		if (!stralloc_cats(&sares,name)) goto err ;
 		if (!stralloc_0(&sares)) goto err ;
diff --git a/src/lib66/resolve.c b/src/lib66/resolve.c
index 8714e6f4..e307b332 100644
--- a/src/lib66/resolve.c
+++ b/src/lib66/resolve.c
@@ -96,7 +96,7 @@ int ss_resolve_pointo(stralloc *sa,ssexec_t *info,unsigned int type, unsigned in
 	
 	if (type && where)
 	{
-		if (type == CLASSIC)
+		if (type == TYPE_CLASSIC)
 		{
 			if (!stralloc_cats(&tmp,SS_SVC)) goto err ;
 		}
@@ -536,7 +536,7 @@ int ss_resolve_setlognwrite(ss_resolve_t *sv, char const *dst,ssexec_t *info)
 	size_t runlen = strlen(string + sv->runat) ;
 	char live[runlen + 4 + 1] ;
 	memcpy(live,string + sv->runat,runlen) ;
-	if (sv->type >= BUNDLE)
+	if (sv->type >= TYPE_BUNDLE)
 	{
 		memcpy(live + runlen,"-log",4)  ;
 	}else memcpy(live + runlen,"/log",4)  ;
@@ -631,7 +631,7 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst)
 	if (services->flags[0])	res.down = 1 ;
 	res.disen = 1 ;
 
-	if (res.type == CLASSIC)
+	if (res.type == TYPE_CLASSIC)
 	{
 		
 		memcpy(stmp,info->scandir.s,info->scandir.len) ;
@@ -640,7 +640,7 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst)
 		stmp[info->scandir.len + 1 + namelen] = 0 ;
 		res.runat = ss_resolve_add_string(&res,stmp) ;
 	}
-	else if (res.type >= BUNDLE)
+	else if (res.type >= TYPE_BUNDLE)
 	{
 		memcpy(stmp,info->livetree.s,info->livetree.len) ;
 		stmp[info->livetree.len] = '/' ;
@@ -707,7 +707,7 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst)
 		logname[namelen + SS_LOG_SUFFIX_LEN] = 0 ;
 	
 		memcpy(logreal,name,namelen) ;
-		if (res.type == CLASSIC)
+		if (res.type == TYPE_CLASSIC)
 		{
 			memcpy(logreal + namelen,"/log",SS_LOG_SUFFIX_LEN) ;
 		}
@@ -721,8 +721,8 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst)
 		if (!stralloc_cats(&ndeps,res.sa.s + res.logger)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 		if (!stralloc_0(&ndeps)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 		res.deps = ss_resolve_add_string(&res,ndeps.s) ;
-		if (res.type == CLASSIC) res.ndeps = 1 ;
-		else if (res.type == LONGRUN) res.ndeps += 1 ;
+		if (res.type == TYPE_CLASSIC) res.ndeps = 1 ;
+		else if (res.type == TYPE_LONGRUN) res.ndeps += 1 ;
 		// destination of the logger
 		if (!services->type.classic_longrun.log.destination)
 		{	
@@ -880,7 +880,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src)
 	memcpy(s + srclen,SS_RESOLVE,SS_RESOLVE_LEN) ;
 	s[srclen + SS_RESOLVE_LEN] = 0 ;
 
-	if (res->type == CLASSIC) type = 0 ;
+	if (res->type == TYPE_CLASSIC) type = 0 ;
 	else type = 1 ;
 	
 	if (!sastr_dir_get(&nsv,s,SS_MASTER+1,S_IFREG)) goto err ;
@@ -889,7 +889,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src)
 	{
 		if (!ss_resolve_append(tokeep,res)) goto err ;
 	}
-	if (res->type == BUNDLE && res->ndeps)
+	if (res->type == TYPE_BUNDLE && res->ndeps)
 	{
 		if (!sastr_clean_string(&tmp,res->sa.s + res->deps)) goto err ;
 		ss_resolve_t dres = RESOLVE_ZERO ;
@@ -917,7 +917,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src)
 		
 		if (!ss_resolve_read(&dres,src,dname)) goto err ;
 		
-		if (dres.type == CLASSIC) dtype = 0 ;
+		if (dres.type == TYPE_CLASSIC) dtype = 0 ;
 		else dtype = 1 ;
 				
 		if (ss_state_check(dres.sa.s + dres.state,dname))
@@ -926,10 +926,10 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src)
 			if (dtype != type || (!dres.disen && !sta.unsupervise)){ ss_resolve_free(&dres) ; continue ; }
 		}
 		else if (dtype != type || (!dres.disen)){ ss_resolve_free(&dres) ; continue ; }
-		if (dres.type == BUNDLE && !dres.ndeps){ ss_resolve_free(&dres) ; continue ; }
+		if (dres.type == TYPE_BUNDLE && !dres.ndeps){ ss_resolve_free(&dres) ; continue ; }
 		if (!ss_resolve_cmp(tokeep,dname))
 		{
-			if (dres.ndeps)// || (dres.type == BUNDLE && dres.ndeps) || )
+			if (dres.ndeps)// || (dres.type == TYPE_BUNDLE && dres.ndeps) || )
 			{
 				if (!sastr_clean_string(&tmp,dres.sa.s + dres.deps)) goto err ;
 				for (c = 0 ; c < tmp.len ; c += strlen(tmp.s + c) + 1)
@@ -1147,7 +1147,7 @@ int ss_resolve_write_master(ssexec_t *info,ss_resolve_graph_t *graph,char const
 	res.treename = ss_resolve_add_string(&res,info->treename.s) ;
 	res.tree = ss_resolve_add_string(&res,info->tree.s) ;
 	res.live = ss_resolve_add_string(&res,info->live.s) ;
-	res.type = BUNDLE ;
+	res.type = TYPE_BUNDLE ;
 	res.deps = ss_resolve_add_string(&res,inres.s) ;
 	res.ndeps = genalloc_len(ss_resolve_t,&graph->sorted) ;
 	res.runat = ss_resolve_add_string(&res,runat) ;
diff --git a/src/lib66/ss_info_utils.c b/src/lib66/ss_info_utils.c
index 729203ec..b7eba041 100644
--- a/src/lib66/ss_info_utils.c
+++ b/src/lib66/ss_info_utils.c
@@ -195,7 +195,7 @@ void info_graph_display(ss_resolve_t *res, depth_t *depth, int last, int padding
 {
 	s6_svstatus_t status = S6_SVSTATUS_ZERO ;
 	char *name = res->sa.s + res->name ;
-	if (res->type == CLASSIC || res->type == LONGRUN)
+	if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN)
 	{
 		s6_svstatus_read(res->sa.s + res->runat ,&status) ;
 	}
@@ -216,7 +216,7 @@ void info_graph_display(ss_resolve_t *res, depth_t *depth, int last, int padding
 		depth = depth->next ;
 	} 
 	
-	if (!bprintf(buffer_1,"%*s%*s%s(%s%i%s,%s%s%s,%s) %s",level == 1 ? padding : 0,"", style->indent * (depth->level - level), "", tip, status.pid ? log_color->valid : log_color->off,status.pid ? status.pid : 0,log_color->off, res->disen ? log_color->off : log_color->error, res->disen ? "Enabled" : "Disabled",log_color->off,get_keybyid(res->type), name)) return ;
+	if (!bprintf(buffer_1,"%*s%*s%s(%s%i%s,%s%s%s,%s) %s",level == 1 ? padding : 0,"", style->indent * (depth->level - level), "", tip, status.pid ? log_color->valid : log_color->off,status.pid ? status.pid : 0,log_color->off, res->disen ? log_color->off : log_color->error, res->disen ? "Enabled" : "Disabled",log_color->off,get_key_by_enum(ENUM_TYPE,res->type), name)) return ;
 
 	if (buffer_putsflush(buffer_1,"\n") < 0) return ; 
 }
diff --git a/src/lib66/ssexec_dbctl.c b/src/lib66/ssexec_dbctl.c
index 87e045f6..d8f49ba1 100644
--- a/src/lib66/ssexec_dbctl.c
+++ b/src/lib66/ssexec_dbctl.c
@@ -57,7 +57,7 @@ static void rebuild_list(ss_resolve_graph_t *graph,ssexec_t *info, int what)
 		if (sta.init) log_die(LOG_EXIT_SYS,"unitialized service: ",name) ;
 		
 		int type = genalloc_s(ss_resolve_t,&graph->sorted)[i].type ;
-		if (type == LONGRUN && genalloc_s(ss_resolve_t,&graph->sorted)[i].disen)
+		if (type == TYPE_LONGRUN && genalloc_s(ss_resolve_t,&graph->sorted)[i].disen)
 		{
 			if (!s6_svstatus_read(runat,&status)) log_dieusys(LOG_EXIT_SYS,"read status of: ",runat) ;
 			isup = status.pid && !status.flagfinishing ;
@@ -113,7 +113,7 @@ static int check_status(genalloc *gares,ssexec_t *info,int signal)
 		/** do not touch the Master resolve file*/
 		if (obstr_equal(name,SS_MASTER + 1)) continue ;
 		/** only check longrun service */
-		if (pres->type == LONGRUN)
+		if (pres->type == TYPE_LONGRUN)
 		{	
 			if (!s6_svstatus_read(pres->sa.s + pres->runat,&status)) log_dieusys(LOG_EXIT_SYS,"read status of: ",pres->sa.s + pres->runat) ;
 			else if (up)
@@ -151,7 +151,7 @@ static int check_status(genalloc *gares,ssexec_t *info,int signal)
 		ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_FALSE) ;
 		ss_state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ;
 	//	ss_state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ;
-		if (pres->type == BUNDLE || pres->type == ONESHOT)
+		if (pres->type == TYPE_BUNDLE || pres->type == TYPE_ONESHOT)
 		{
 			if (up) ss_state_setflag(&sta,SS_FLAGS_STATE,SS_FLAGS_TRUE) ;
 			else ss_state_setflag(&sta,SS_FLAGS_STATE,SS_FLAGS_FALSE) ;
@@ -278,7 +278,7 @@ int ssexec_dbctl(int argc, char const *const *argv,char const *const *envp,ssexe
 			char const *name = *argv ;
 			if (!ss_resolve_check(sares.s,name)) log_diesys(LOG_EXIT_SYS,"unknown service: ",name) ;
 			if (!ss_resolve_read(&res,sares.s,name)) log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",name) ;
-			if (res.type == CLASSIC) log_die(LOG_EXIT_SYS,name," has type classic") ;
+			if (res.type == TYPE_CLASSIC) log_die(LOG_EXIT_SYS,name," has type classic") ;
 			if (!ss_resolve_append(&gares,&res)) log_dieusys(LOG_EXIT_SYS,"append services selection with: ", name) ;
 		}
 	}
diff --git a/src/lib66/ssexec_disable.c b/src/lib66/ssexec_disable.c
index bc5fce66..e8b5c72d 100644
--- a/src/lib66/ssexec_disable.c
+++ b/src/lib66/ssexec_disable.c
@@ -57,7 +57,7 @@ int svc_remove(genalloc *tostop,ss_resolve_t *res, char const *src,ssexec_t *inf
 		goto err ;
 	}
 	if (!stralloc_cats(&dst,src)) goto err ;
-	if (cp.type == CLASSIC)
+	if (cp.type == TYPE_CLASSIC)
 	{
 		if (!stralloc_cats(&dst,SS_SVC)) goto err ;
 	}
@@ -199,7 +199,7 @@ int ssexec_disable(int argc, char const *const *argv,char const *const *envp,sse
 		if (!svc_remove(&tostop,pres,workdir.s,info))
 			log_dieusys_nclean(LOG_EXIT_SYS,&cleanup,"remove",name," directory service") ;
 		
-		if (res.type == CLASSIC) nclassic++ ;
+		if (res.type == TYPE_CLASSIC) nclassic++ ;
 		else nlongrun++ ;
 		
 	}
diff --git a/src/lib66/ssexec_enable.c b/src/lib66/ssexec_enable.c
index 027e8d48..ab152392 100644
--- a/src/lib66/ssexec_enable.c
+++ b/src/lib66/ssexec_enable.c
@@ -105,7 +105,7 @@ void start_write(stralloc *tostart,unsigned int *nclassic,unsigned int *nlongrun
 		log_trace("Service written successfully: ", name) ;
 		if (sastr_cmp(tostart,name) == -1)
 		{
-			if (sv->cname.itype == CLASSIC) (*nclassic)++ ;
+			if (sv->cname.itype == TYPE_CLASSIC) (*nclassic)++ ;
 			else (*nlongrun)++ ;
 			if (!sastr_add_string(tostart,name))
 				log_dieusys_nclean(LOG_EXIT_SYS,&cleanup,"stralloc") ;
diff --git a/src/lib66/ssexec_start.c b/src/lib66/ssexec_start.c
index 66d6e1e2..b67210ac 100644
--- a/src/lib66/ssexec_start.c
+++ b/src/lib66/ssexec_start.c
@@ -49,7 +49,7 @@ int svc_sanitize(ssexec_t *info, char const *const *envp)
 	unsigned int reverse = 0 ;
 	int r ;
 	stralloc sares = STRALLOC_ZERO ;
-	if (!ss_resolve_pointo(&sares,info,CLASSIC,SS_RESOLVE_SRC))		
+	if (!ss_resolve_pointo(&sares,info,TYPE_CLASSIC,SS_RESOLVE_SRC))
 	{
 		log_warnu("set revolve pointer to source") ;
 		goto err;
@@ -284,7 +284,7 @@ int ssexec_start(int argc, char const *const *argv,char const *const *envp,ssexe
 		if (sta.init){ reload = 0 ; init = 1 ; }
 		
 		append:		
-		if (pres->type == CLASSIC)
+		if (pres->type == TYPE_CLASSIC)
 		{
 			if (reload)
 			{
diff --git a/src/lib66/ssexec_stop.c b/src/lib66/ssexec_stop.c
index f5358091..e883b460 100644
--- a/src/lib66/ssexec_stop.c
+++ b/src/lib66/ssexec_stop.c
@@ -189,7 +189,7 @@ int ssexec_stop(int argc, char const *const *argv,char const *const *envp,ssexec
 		if (UNSUP) unsup = 1 ;
 		if (sta.unsupervise) unsup = 1 ;
 		append:		
-		if (pres->type == CLASSIC)
+		if (pres->type == TYPE_CLASSIC)
 		{
 			if (unsup)
 			{
diff --git a/src/lib66/ssexec_svctl.c b/src/lib66/ssexec_svctl.c
index f8bc86f6..58f562fe 100644
--- a/src/lib66/ssexec_svctl.c
+++ b/src/lib66/ssexec_svctl.c
@@ -98,7 +98,7 @@ int handle_signal_svc(ss_resolve_sig_t *sv_signal)
 	else return 0 ;
 }
 
-static unsigned char const actions[9][9] = 
+static unsigned char const svctl_actions[9][9] =
 {
  //signal receive:
  //  c->u		U		r/u		R/U		d		D		x		O		s						
@@ -170,7 +170,7 @@ int handle_case(stralloc *sa, ss_resolve_sig_t *svc)
 	for (;i < sa->len ; i++)
 	{
 		p = chtenum[(unsigned char)sa->s[i]] ;
-		unsigned char action = actions[state][p] ;
+		unsigned char action = svctl_actions[state][p] ;
 		
 		switch (action)
 		{
@@ -516,7 +516,7 @@ int ssexec_svctl(int argc, char const *const *argv,char const *const *envp,ssexe
 		logname = get_rstrlen_until(name,SS_LOG_SUFFIX) ;
 		if (!ss_resolve_check(sares.s,name)) log_diesys(LOG_EXIT_SYS,"unknown service: ",name) ;
 		if (!ss_resolve_read(&res,sares.s,name)) log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",name) ;
-		if (res.type >= BUNDLE) log_die(LOG_EXIT_SYS,name," has type ",get_keybyid(res.type)) ;
+		if (res.type >= TYPE_BUNDLE) log_die(LOG_EXIT_SYS,name," has type ",get_key_by_enum(ENUM_TYPE,res.type)) ;
 		if (SIGNAL == SIGR && logname < 0) reverse = 1 ;
 		if (!ss_resolve_graph_build(&graph,&res,sares.s,reverse)) log_dieusys(LOG_EXIT_SYS,"build services graph") ;
 	}
diff --git a/src/lib66/svc_switch_to.c b/src/lib66/svc_switch_to.c
index 3339cb34..565cc531 100644
--- a/src/lib66/svc_switch_to.c
+++ b/src/lib66/svc_switch_to.c
@@ -31,7 +31,7 @@ int svc_switch_to(ssexec_t *info,unsigned int where)
 	int r ;
 	
 	char type[UINT_FMT] ;
-	size_t typelen = uint_fmt(type, CLASSIC) ;
+	size_t typelen = uint_fmt(type, TYPE_CLASSIC) ;
 	type[typelen] = 0 ;
 	size_t cmdlen ;
 	char cmd[typelen + 6 + 1] ;
@@ -49,7 +49,7 @@ int svc_switch_to(ssexec_t *info,unsigned int where)
 	if (!r && where)
 	{
 		log_trace("make a backup of svc service for: ",info->treename.s) ;
-		if (!backup_make_new(info,CLASSIC))
+		if (!backup_make_new(info,TYPE_CLASSIC))
 			log_warnusys_return(LOG_EXIT_ZERO,"make a backup of svc service for: ",info->treename.s) ;
 		
 		log_trace("switch svc symlink of tree: ",info->treename.s," to backup") ;
@@ -73,7 +73,7 @@ int svc_switch_to(ssexec_t *info,unsigned int where)
 		}
 		
 		log_trace("make a backup of svc service for: ",info->treename.s) ;
-		if (!backup_make_new(info,CLASSIC))
+		if (!backup_make_new(info,TYPE_CLASSIC))
 			log_warnusys_return(LOG_EXIT_ZERO,"make a backup of svc service for: ",info->treename.s) ;
 	}
 	return 1 ;
diff --git a/src/lib66/tree_copy_tmp.c b/src/lib66/tree_copy_tmp.c
index e4911e54..0088a58d 100644
--- a/src/lib66/tree_copy_tmp.c
+++ b/src/lib66/tree_copy_tmp.c
@@ -65,12 +65,12 @@ int tree_copy_tmp(char const *workdir, ssexec_t *info)
 	/** svc */
 	if (rm_rf(svdir) < 0)
 	{
-		if (!ss_resolve_pointo(&saresolve,info,CLASSIC,SS_RESOLVE_SRC))
+		if (!ss_resolve_pointo(&saresolve,info,TYPE_CLASSIC,SS_RESOLVE_SRC))
 		{
 			err(&e,0,saresolve.s,swap.s,svdir) ;
 			goto err ;
 		}
-		if (!ss_resolve_pointo(&swap,info,CLASSIC,SS_RESOLVE_BACK))
+		if (!ss_resolve_pointo(&swap,info,TYPE_CLASSIC,SS_RESOLVE_BACK))
 		{
 			err(&e,1,saresolve.s,swap.s,svdir) ;
 			goto err ;
@@ -89,12 +89,12 @@ int tree_copy_tmp(char const *workdir, ssexec_t *info)
 	svdir[svdirlen + SS_DB_LEN] = 0 ;
 	if (rm_rf(svdir) < 0)
 	{
-		if (!ss_resolve_pointo(&saresolve,info,LONGRUN,SS_RESOLVE_SRC))
+		if (!ss_resolve_pointo(&saresolve,info,TYPE_LONGRUN,SS_RESOLVE_SRC))
 		{
 			err(&e,0,saresolve.s,swap.s,svdir) ;
 			goto err ;
 		}
-		if (!ss_resolve_pointo(&swap,info,LONGRUN,SS_RESOLVE_BACK))
+		if (!ss_resolve_pointo(&swap,info,TYPE_LONGRUN,SS_RESOLVE_BACK))
 		{
 			err(&e,1,saresolve.s,swap.s,svdir) ;
 			goto err ;
-- 
GitLab