diff --git a/src/include/66/resolve.h b/src/include/66/resolve.h
index cfab72ea0fec25606a7e803cb22e02cdda8e0d79..894aaa4bb96401f5312b7325b0519d8b582182e3 100644
--- a/src/include/66/resolve.h
+++ b/src/include/66/resolve.h
@@ -46,6 +46,7 @@ struct resolve_wrapper_s
 #define RESOLVE_SET_SAWRES(wres) \
     stralloc_ref sawres = 0 ; \
     if (wres->type == DATA_SERVICE) sawres = (&((resolve_service_t *)wres->obj)->sa) ; \
+    else if (wres->type == DATA_SERVICE_MASTER) sawres = (&((resolve_service_master_t *)wres->obj)->sa) ; \
     else if (wres->type == DATA_TREE) sawres = (&((resolve_tree_t *)wres->obj)->sa) ; \
     else if (wres->type == DATA_TREE_MASTER) sawres = (&((resolve_tree_master_t *)wres->obj)->sa) ;
 #endif
@@ -74,6 +75,8 @@ extern int resolve_search(genalloc *ga, char const *name, uint8_t type) ;
 extern int resolve_cmp(genalloc *ga, char const *name, uint8_t type) ;
 extern void resolve_rmfile(char const *src,char const *name) ;
 extern ssize_t resolve_add_string(resolve_wrapper_t *wres, char const *data) ;
+extern int resolve_get_field_tosa_g(stralloc *sa, char const *base, char const *treename, char const *element, uint8_t data_type, uint8_t field) ;
+extern int resolve_get_field_tosa(stralloc *sa, resolve_wrapper_t_ref wres, uint8_t field) ;
 extern int resolve_modify_field(resolve_wrapper_t_ref wres, uint8_t field, char const *by) ;
 extern int resolve_modify_field_g(resolve_wrapper_t_ref wres, char const *base, char const *element, uint8_t field, char const *value) ;
 /**
diff --git a/src/include/66/service.h b/src/include/66/service.h
index bf495bf3f3a75e5468b226d405ee15d9aa47227c..116cb80af132b90673500e4d400aee791d6d5310 100644
--- a/src/include/66/service.h
+++ b/src/include/66/service.h
@@ -26,6 +26,14 @@
 #include <66/ssexec.h>
 #include <66/resolve.h>
 
+/**
+ *
+ *
+ * obsolete functions
+ *
+ *
+ *
+ * */
 
 /** Graph struct */
 typedef struct ss_resolve_graph_ndeps_s ss_resolve_graph_ndeps_t ;
@@ -53,6 +61,9 @@ enum visit_e
     SS_BLACK
 } ;
 
+#define DATA_SERVICE 0
+#define DATA_SERVICE_MASTER 3
+
 typedef struct resolve_service_s resolve_service_t, *resolve_service_t_ref ;
 struct resolve_service_s
 {
@@ -135,7 +146,48 @@ enum resolve_service_enum_e
     SERVICE_ENUM_ENDOFKEY
 } ;
 
+typedef struct resolve_service_master_s resolve_service_master_t, *resolve_service_master_t_ref ;
+struct resolve_service_master_s
+{
+    uint32_t salen ;
+    stralloc sa ;
+
+    uint32_t name ;
+
+    uint32_t classic ;
+    uint32_t bundle ;
+    uint32_t longrun ;
+    uint32_t oneshot ;
+    uint32_t module ;
+
+    uint32_t nclassic ;
+    uint32_t nbundle ;
+    uint32_t nlongrun ;
+    uint32_t noneshot ;
+    uint32_t nmodule ;
+
+} ;
+#define RESOLVE_SERVICE_MASTER_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0 }
+
+typedef enum resolve_service_master_enum_e resolve_service_master_enum_t, *resolve_service_master_enum_t_ref;
+enum resolve_service_master_enum_e
+{
+    SERVICE_ENUM_MASTER_NAME = 0,
+    SERVICE_ENUM_MASTER_CLASSIC,
+    SERVICE_ENUM_MASTER_BUNDLE,
+    SERVICE_ENUM_MASTER_LONGRUN,
+    SERVICE_ENUM_MASTER_ONESHOT,
+    SERVICE_ENUM_MASTER_MODULE,
+    SERVICE_ENUM_MASTER_NCLASSIC,
+    SERVICE_ENUM_MASTER_NBUNDLE,
+    SERVICE_ENUM_MASTER_NLONGRUN,
+    SERVICE_ENUM_MASTER_NONESHOT,
+    SERVICE_ENUM_MASTER_NMODULE,
+    SERVICE_ENUM_MASTER_ENDOFKEY
+} ;
+
 extern resolve_field_table_t resolve_service_field_table[] ;
+extern resolve_field_table_t resolve_service_master_field_table[] ;
 
 extern int service_isenabled(char const *sv) ;
 extern int service_isenabledat(stralloc *tree, char const *sv) ;
@@ -151,22 +203,32 @@ extern int service_intree(stralloc *svtree, char const *svname, char const *tree
  *
  * */
 
-extern int service_read_cdb(cdb *c, resolve_service_t *res) ;
-extern int service_write_cdb(cdbmaker *c, resolve_service_t *sres) ;
+/** Service */
 extern int service_resolve_copy(resolve_service_t *dst, resolve_service_t *res) ;
-extern int service_resolve_sort_bytype(stralloc *list, char const *src) ;
-extern int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) ;
+extern int service_resolve_get_field_tosa(stralloc *sa, resolve_service_t *res, resolve_service_enum_t field) ;
+extern int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t field, char const *data) ;
+extern int service_resolve_read_cdb(cdb *c, resolve_service_t *res) ;
 extern int service_resolve_setlognwrite(resolve_service_t *sv, char const *dst) ;
+extern int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) ;
+extern int service_resolve_sort_bytype(stralloc *list, char const *src) ;
+extern int service_resolve_write_cdb(cdbmaker *c, resolve_service_t *sres) ;
+
+/** Master */
+extern int service_resolve_master_copy(resolve_service_master_t *dst, resolve_service_master_t *mres) ;
 extern int service_resolve_master_create(char const *base, char const *treename) ;
-extern int service_resolve_master_write(ssexec_t *info, ss_resolve_graph_t *graph, char const *dir, unsigned int reverse) ;
-extern int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t field, char const *data) ;
-extern int service_resolve_field_tosa(stralloc *sa, resolve_service_t *res, resolve_service_enum_t field) ;
+extern int service_resolve_master_get_field_tosa(stralloc *sa, resolve_service_master_t *mres, resolve_service_master_enum_t field) ;
+extern int service_resolve_master_modify_field(resolve_service_master_t *mres, uint8_t field, char const *data) ;
+extern int service_resolve_master_read_cdb(cdb *c, resolve_service_master_t *tres) ;
+extern int service_resolve_master_write(graph_t *graph, char const *dest) ;
+extern int service_resolve_master_write_cdb(cdbmaker *c, resolve_service_master_t *mres) ;
+
 /**
  *
- * obsolete function
  *
+ * obsolete function
  *
  * */
+
 extern int service_resolve_add_deps(genalloc *tokeep, resolve_service_t *res, char const *src) ;
 extern int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char const *src) ;
 extern int service_resolve_add_logger(genalloc *ga,char const *src) ;
diff --git a/src/lib66/resolve/deps-lib/deps b/src/lib66/resolve/deps-lib/deps
index d4474c594f6deb3803ce31c9cb7cf64820e93707..7ae6192b218df693e43cb537a1aa626cb6feef13 100644
--- a/src/lib66/resolve/deps-lib/deps
+++ b/src/lib66/resolve/deps-lib/deps
@@ -7,11 +7,14 @@ resolve_cmp.o
 resolve_deep_free.o
 resolve_find_cdb.o
 resolve_free.o
+resolve_get_field_tosa.o
+resolve_get_field_tosa_g.o
 resolve_init.o
 resolve_modify_field.o
 resolve_modify_field_g.o
 resolve_read.o
 resolve_read_cdb.o
+resolve_read_g.o
 resolve_rmfile.o
 resolve_search.o
 resolve_set_struct.o
diff --git a/src/lib66/resolve/resolve_append.c b/src/lib66/resolve/resolve_append.c
index 15dd80ab5a6c479989043802129b9d44a7970a7e..083af9fe32a09bb59bc266e77e795a010c32f463 100644
--- a/src/lib66/resolve/resolve_append.c
+++ b/src/lib66/resolve/resolve_append.c
@@ -36,6 +36,15 @@ int resolve_append(genalloc *ga, resolve_wrapper_t *wres)
         if (!genalloc_append(resolve_service_t, ga, &cp))
             goto err ;
 
+    } else if (wres->type == DATA_SERVICE_MASTER) {
+
+        resolve_service_master_t cp = RESOLVE_SERVICE_MASTER_ZERO ;
+        if (!service_resolve_master_copy(&cp, ((resolve_service_master_t *)wres->obj)))
+            goto err ;
+
+        if (!genalloc_append(resolve_service_master_t, ga, &cp))
+            goto err ;
+
     } else if (wres->type == DATA_TREE) {
 
         resolve_tree_t cp = RESOLVE_TREE_ZERO ;
diff --git a/src/lib66/resolve/resolve_cmp.c b/src/lib66/resolve/resolve_cmp.c
index f175563a51a237130abecae201c16a7c1d29183f..8ddee7918525fe7b20e843e965835b08d9f93f24 100644
--- a/src/lib66/resolve/resolve_cmp.c
+++ b/src/lib66/resolve/resolve_cmp.c
@@ -42,6 +42,18 @@ int resolve_cmp(genalloc *ga, char const *name, uint8_t type)
                 return 1 ;
         }
 
+    } else if (type == DATA_SERVICE_MASTER) {
+
+        len = genalloc_len(resolve_service_master_t, ga) ;
+
+        for (;pos < len ; pos++) {
+
+            char *str = genalloc_s(resolve_service_master_t, ga)[pos].sa.s ;
+            char *s = str + genalloc_s(resolve_service_master_t, ga)[pos].name ;
+            if (!strcmp(name,s))
+                return 1 ;
+        }
+
     } else if (type == DATA_TREE) {
 
         len = genalloc_len(resolve_tree_t, ga) ;
@@ -53,6 +65,18 @@ int resolve_cmp(genalloc *ga, char const *name, uint8_t type)
             if (!strcmp(name,s))
                 return 1 ;
         }
+
+    } else if (type == DATA_TREE_MASTER) {
+
+        len = genalloc_len(resolve_tree_master_t, ga) ;
+
+        for (;pos < len ; pos++) {
+
+            char *str = genalloc_s(resolve_tree_master_t, ga)[pos].sa.s ;
+            char *s = str + genalloc_s(resolve_tree_master_t, ga)[pos].name ;
+            if (!strcmp(name,s))
+                return 1 ;
+        }
     }
 
     return 0 ;
diff --git a/src/lib66/resolve/resolve_deep_free.c b/src/lib66/resolve/resolve_deep_free.c
index cdab670c8a8e16ec15bce3e4f9d15be2305126a9..e6446e01ec32908d4704c99080abceb4b993a236 100644
--- a/src/lib66/resolve/resolve_deep_free.c
+++ b/src/lib66/resolve/resolve_deep_free.c
@@ -38,6 +38,13 @@ void resolve_deep_free(uint8_t type, genalloc *g)
 
         genalloc_free(resolve_service_t, g) ;
 
+    } else if (type == DATA_SERVICE_MASTER) {
+
+        for (; pos < genalloc_len(resolve_service_master_t, g) ; pos++)
+            stralloc_free(&genalloc_s(resolve_service_master_t, g)[pos].sa) ;
+
+        genalloc_free(resolve_service_master_t, g) ;
+
     } else if (type == DATA_TREE) {
 
         for (; pos < genalloc_len(resolve_tree_t, g) ; pos++)
diff --git a/src/lib66/resolve/resolve_get_field_tosa.c b/src/lib66/resolve/resolve_get_field_tosa.c
new file mode 100644
index 0000000000000000000000000000000000000000..eae251164c5c0768e1fbe66318738d901f8a8c24
--- /dev/null
+++ b/src/lib66/resolve/resolve_get_field_tosa.c
@@ -0,0 +1,73 @@
+/*
+ * resolve_get_field_tosa.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 <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include <oblibs/log.h>
+
+#include <skalibs/stralloc.h>
+
+#include <66/resolve.h>
+#include <66/tree.h>
+#include <66/service.h>
+#include <66/constants.h>
+
+int resolve_get_field_tosa(stralloc *sa, resolve_wrapper_t_ref wres, uint8_t field)
+{
+    log_flow() ;
+
+    int e = 0 ;
+    resolve_wrapper_t_ref mwres = 0 ;
+
+    if (wres->type == DATA_SERVICE) {
+
+        resolve_service_t_ref res = (resolve_service_t *)wres->obj  ;
+        mwres = resolve_set_struct(DATA_SERVICE, res) ;
+
+        if (!service_resolve_get_field_tosa(sa, res, field))
+            goto err ;
+
+    } else if (wres->type == DATA_SERVICE_MASTER) {
+
+        resolve_service_master_t_ref res = (resolve_service_master_t *)wres->obj  ;
+        mwres = resolve_set_struct(DATA_SERVICE_MASTER, res) ;
+
+        if (!service_resolve_master_get_field_tosa(sa, res, field))
+            goto err ;
+
+    } else if (wres->type == DATA_TREE) {
+
+        resolve_tree_t_ref res = (resolve_tree_t *)wres->obj  ;
+        mwres = resolve_set_struct(DATA_TREE, res) ;
+
+        if (!tree_resolve_get_field_tosa(sa, res, field))
+            goto err ;
+
+    } else if (wres->type == DATA_TREE_MASTER) {
+
+        resolve_tree_master_t_ref res = (resolve_tree_master_t *)wres->obj  ;
+        mwres = resolve_set_struct(DATA_TREE_MASTER, res) ;
+
+        if (!tree_resolve_master_get_field_tosa(sa, res, field))
+            goto err ;
+    }
+
+    e = 1 ;
+    err:
+        free(mwres) ;
+        return e ;
+
+}
diff --git a/src/lib66/resolve/resolve_get_field_tosa_g.c b/src/lib66/resolve/resolve_get_field_tosa_g.c
new file mode 100644
index 0000000000000000000000000000000000000000..f2c6aa02cc4fd534f710490084556decfa3278e9
--- /dev/null
+++ b/src/lib66/resolve/resolve_get_field_tosa_g.c
@@ -0,0 +1,96 @@
+/*
+ * resolve_get_field_tosa_g.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 <string.h>
+#include <stdint.h>
+
+#include <oblibs/log.h>
+#include <oblibs/string.h>
+#include <oblibs/sastr.h>
+
+#include <skalibs/stralloc.h>
+
+#include <66/constants.h>
+#include <66/tree.h>
+#include <66/service.h>
+#include <66/resolve.h>
+
+int resolve_get_field_tosa_g(stralloc *sa, char const *base, char const *treename, char const *element, uint8_t data_type, uint8_t field)
+{
+    log_flow() ;
+    int e = 0 ;
+    size_t baselen = strlen(base), tot = baselen + SS_SYSTEM_LEN + 1, treelen = 0 ;
+
+    resolve_service_t res = RESOLVE_SERVICE_ZERO ;
+    resolve_service_master_t mres = RESOLVE_SERVICE_MASTER_ZERO ;
+    resolve_tree_t tres = RESOLVE_TREE_ZERO ;
+    resolve_tree_master_t tmres = RESOLVE_TREE_MASTER_ZERO ;
+
+    resolve_wrapper_t_ref wres = 0 ;
+
+    if (data_type == DATA_SERVICE) {
+        treelen = strlen(treename) ;
+        tot += treelen + SS_SVDIRS_LEN + 1 ;
+    }
+
+    char solve[tot] ;
+
+    if (data_type == DATA_SERVICE || data_type == DATA_SERVICE_MASTER) {
+
+        if (data_type == DATA_SERVICE) {
+
+            wres = resolve_set_struct(data_type, &res) ;
+
+        } else if (data_type == DATA_SERVICE_MASTER) {
+
+            wres = resolve_set_struct(data_type, &mres) ;
+        }
+
+        auto_strings(solve, base, SS_SYSTEM, "/", treename, SS_SVDIRS) ;
+
+    } else if (data_type == DATA_TREE || data_type == DATA_TREE_MASTER) {
+
+        if (data_type == DATA_TREE) {
+
+            wres = resolve_set_struct(data_type, &tres) ;
+
+        } else if (data_type == DATA_TREE_MASTER) {
+
+            wres = resolve_set_struct(data_type, &tmres) ;
+        }
+
+        auto_strings(solve, base, SS_SYSTEM) ;
+    }
+
+    if (!resolve_read(wres, solve, element))
+        goto err ;
+
+    if (!resolve_get_field_tosa(sa, wres, field))
+        goto err ;
+
+    {
+        char t[sa->len + 1] ;
+        auto_strings(t, sa->s) ;
+
+        sa->len = 0 ;
+
+        if (!sastr_clean_string(sa, t))
+            goto err ;
+    }
+    e = 1 ;
+
+    err:
+        resolve_free(wres) ;
+        return e ;
+}
diff --git a/src/lib66/resolve/resolve_modify_field.c b/src/lib66/resolve/resolve_modify_field.c
index b40c5c1750bab4f2b7e50d4129463ba251818bcb..312cc750aecc62212d3639ce0c4d64f34112675e 100644
--- a/src/lib66/resolve/resolve_modify_field.c
+++ b/src/lib66/resolve/resolve_modify_field.c
@@ -40,6 +40,16 @@ int resolve_modify_field(resolve_wrapper_t_ref wres, uint8_t field, char const *
         if (!service_resolve_modify_field(res, field, by))
             goto err ;
 
+    } else if (wres->type == DATA_SERVICE_MASTER) {
+
+        resolve_service_master_t_ref res = (resolve_service_master_t *)wres->obj  ;
+        mwres = resolve_set_struct(DATA_SERVICE_MASTER, res) ;
+
+        log_trace("modify field ", resolve_service_master_field_table[field].field," of resolve Master file of services with value: ", by) ;
+
+        if (!service_resolve_master_modify_field(res, field, by))
+            goto err ;
+
     } else if (wres->type == DATA_TREE) {
 
         resolve_tree_t_ref res = (resolve_tree_t *)wres->obj  ;
@@ -55,7 +65,7 @@ int resolve_modify_field(resolve_wrapper_t_ref wres, uint8_t field, char const *
         resolve_tree_master_t_ref res = (resolve_tree_master_t *)wres->obj  ;
         mwres = resolve_set_struct(DATA_TREE_MASTER, res) ;
 
-        log_trace("modify field ", resolve_tree_master_field_table[field].field," of inner resolve file of trees with value: ", by) ;
+        log_trace("modify field ", resolve_tree_master_field_table[field].field," of resolve Master file of trees with value: ", by) ;
 
         if (!tree_resolve_master_modify_field(res, field, by))
             goto err ;
diff --git a/src/lib66/resolve/resolve_modify_field_g.c b/src/lib66/resolve/resolve_modify_field_g.c
index 7f06301cf1bfa330f327090380a90a83c7302541..2af339b3e268b860c7fa91778dabfba17677974d 100644
--- a/src/lib66/resolve/resolve_modify_field_g.c
+++ b/src/lib66/resolve/resolve_modify_field_g.c
@@ -32,7 +32,8 @@ int resolve_modify_field_g(resolve_wrapper_t_ref wres, char const *base, char co
 
     size_t baselen = strlen(base), tot = baselen + SS_SYSTEM_LEN + 1, treelen = 0 ;
     char *treename = 0 ;
-
+    /** The master is at the same as any service on that tree.
+     * Use the same wres type for service Master*/
     if (wres->type == DATA_SERVICE) {
         treename = ((resolve_service_t *)wres->obj)->sa.s + ((resolve_service_t *)wres->obj)->treename ;
         treelen = strlen(treename) ;
@@ -42,7 +43,7 @@ int resolve_modify_field_g(resolve_wrapper_t_ref wres, char const *base, char co
 
     char solve[tot] ;
 
-    if (wres->type == DATA_SERVICE) {
+    if (wres->type == DATA_SERVICE || wres->type == DATA_SERVICE_MASTER) {
 
         auto_strings(solve, base, SS_SYSTEM, "/", treename, SS_SVDIRS) ;
 
diff --git a/src/lib66/resolve/resolve_read_cdb.c b/src/lib66/resolve/resolve_read_cdb.c
index 16f71de376332b9fd414c72cac9efabc624270b1..8b6a602d5fa55e9cd24de780bae2f0c1d46bc7f6 100644
--- a/src/lib66/resolve/resolve_read_cdb.c
+++ b/src/lib66/resolve/resolve_read_cdb.c
@@ -44,7 +44,12 @@ int resolve_read_cdb(resolve_wrapper_t *wres, char const *name)
 
     if (wres->type == DATA_SERVICE) {
 
-        if (!service_read_cdb(&c, ((resolve_service_t *)wres->obj)))
+        if (!service_resolve_read_cdb(&c, ((resolve_service_t *)wres->obj)))
+            goto err ;
+
+    } else if (wres->type == DATA_SERVICE_MASTER) {
+
+        if (!service_resolve_master_read_cdb(&c, ((resolve_service_master_t *)wres->obj)))
             goto err ;
 
     } else if (wres->type == DATA_TREE){
@@ -54,7 +59,7 @@ int resolve_read_cdb(resolve_wrapper_t *wres, char const *name)
 
     } else if (wres->type == DATA_TREE_MASTER) {
 
-        if (!tree_resolve_read_master_cdb(&c, ((resolve_tree_master_t *)wres->obj)))
+        if (!tree_resolve_master_read_cdb(&c, ((resolve_tree_master_t *)wres->obj)))
             goto err ;
     }
 
diff --git a/src/lib66/resolve/resolve_search.c b/src/lib66/resolve/resolve_search.c
index 912ca31ec7f4bacf72ebf0c66f6bf5d9c77634b4..8a43b4bca01e805c5b49c9b7e015e0aceb3c2d8c 100644
--- a/src/lib66/resolve/resolve_search.c
+++ b/src/lib66/resolve/resolve_search.c
@@ -41,6 +41,17 @@ int resolve_search(genalloc *ga, char const *name, uint8_t type)
                 return pos ;
         }
 
+    } else if (type == DATA_SERVICE_MASTER) {
+
+        len = genalloc_len(resolve_service_master_t, ga) ;
+
+        for (;pos < len ; pos++) {
+
+            char *s = genalloc_s(resolve_service_master_t,ga)[pos].sa.s + genalloc_s(resolve_service_master_t,ga)[pos].name ;
+            if (!strcmp(name,s))
+                return pos ;
+        }
+
     } else if (type == DATA_TREE) {
 
         len = genalloc_len(resolve_tree_t, ga) ;
diff --git a/src/lib66/resolve/resolve_write_cdb.c b/src/lib66/resolve/resolve_write_cdb.c
index 562558a3468bb35a5bf940c5765013082c878846..48935ccf1dd0f9648614177e81846521d38d9e61 100644
--- a/src/lib66/resolve/resolve_write_cdb.c
+++ b/src/lib66/resolve/resolve_write_cdb.c
@@ -57,7 +57,12 @@ int resolve_write_cdb(resolve_wrapper_t *wres, char const *dst, char const *name
 
     if (wres->type == DATA_SERVICE) {
 
-        if (!service_write_cdb(&c, ((resolve_service_t *)wres->obj)))
+        if (!service_resolve_write_cdb(&c, ((resolve_service_t *)wres->obj)))
+            goto err ;
+
+    } else if (wres->type == DATA_SERVICE_MASTER) {
+
+        if (!service_resolve_master_write_cdb(&c, ((resolve_service_master_t *)wres->obj)))
             goto err ;
 
     } else if (wres->type == DATA_TREE) {
@@ -67,7 +72,7 @@ int resolve_write_cdb(resolve_wrapper_t *wres, char const *dst, char const *name
 
     } else if (wres->type == DATA_TREE_MASTER) {
 
-        if (!tree_resolve_write_master_cdb(&c, ((resolve_tree_master_t *)wres->obj)))
+        if (!tree_resolve_master_write_cdb(&c, ((resolve_tree_master_t *)wres->obj)))
             goto err ;
 
     }
diff --git a/src/lib66/service/deps-lib/deps b/src/lib66/service/deps-lib/deps
index 03c49606505f02aab33c68eaaf4ef384578cd44b..8b763257ca840d9b8cabe1cbea9dee8095401f94 100644
--- a/src/lib66/service/deps-lib/deps
+++ b/src/lib66/service/deps-lib/deps
@@ -1,21 +1,26 @@
-resolve_frontend_path.o
 service.o
 service_cmp_basedir.o
 service_endof_dir.o
+service_frontend_path.o
 service_frontend_src.o
 service_intree.o
 service_isenabled.o
 service_isenabledat.o
-service_read_cdb.o
 service_resolve_copy.o
-service_resolve_field_to_sa.o
+service_resolve_get_field_tosa.o
+service_resolve_master_copy.o
 service_resolve_master_create.o
+service_resolve_master_get_field_tosa.o
+service_resolve_master_modify_field.o
+service_resolve_master_read_cdb.o
 service_resolve_master_write.o
+service_resolve_master_write_cdb.o
 service_resolve_modify_field.o
+service_resolve_read_cdb.o
 service_resolve_setlognwrite.o
 service_resolve_setnwrite.o
 service_resolve_sort_bytype.o
-service_write_cdb.o
+service_resolve_write_cdb.o
 -ls6rc
 -ls6
 -loblibs
diff --git a/src/lib66/service/service_resolve_master_copy.c b/src/lib66/service/service_resolve_master_copy.c
new file mode 100644
index 0000000000000000000000000000000000000000..b305ce82667209c3df7c2e92a8d9f19859840e89
--- /dev/null
+++ b/src/lib66/service/service_resolve_master_copy.c
@@ -0,0 +1,51 @@
+/*
+ * service_resolve_master_copy.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 <stddef.h>
+
+#include <oblibs/log.h>
+
+#include <skalibs/stralloc.h>
+
+#include <66/service.h>
+
+int service_resolve_master_copy(resolve_service_master_t *dst, resolve_service_master_t *mres)
+{
+    log_flow() ;
+
+    stralloc_free(&dst->sa) ;
+
+    size_t len = mres->sa.len - 1 ;
+    dst->salen = mres->salen ;
+
+    if (!stralloc_catb(&dst->sa,mres->sa.s,len) ||
+        !stralloc_0(&dst->sa))
+            return 0 ;
+
+    dst->name = mres->name ;
+    dst->classic = mres->classic ;
+    dst->bundle = mres->bundle ;
+    dst->longrun = mres->longrun ;
+    dst->oneshot = mres->oneshot ;
+    dst->module = mres->module ;
+
+    dst->nclassic = mres->nclassic ;
+    dst->nbundle = mres->nbundle ;
+    dst->nlongrun = mres->nlongrun ;
+    dst->noneshot = mres->noneshot ;
+    dst->nmodule = mres->nmodule ;
+
+    return 1 ;
+
+}
diff --git a/src/lib66/service/service_resolve_master_create.c b/src/lib66/service/service_resolve_master_create.c
index 10726504a10e4073bc28189737d3e4d9e2cefd23..a17eb177b4c3c51612629e0866f7f2484e3ffa8a 100644
--- a/src/lib66/service/service_resolve_master_create.c
+++ b/src/lib66/service/service_resolve_master_create.c
@@ -1,5 +1,5 @@
 /*
- * service.c
+ * service_resolve_master_create.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -18,34 +18,27 @@
 #include <oblibs/string.h>
 
 #include <66/constants.h>
-#include <66/enum.h>
 #include <66/resolve.h>
 #include <66/service.h>
 
 int service_resolve_master_create(char const *base, char const *treename)
 {
+
     log_flow() ;
 
     int e = 0 ;
     size_t baselen = strlen(base), treelen = strlen(treename) ;
-    resolve_service_t res = RESOLVE_SERVICE_ZERO ;
-    resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
+    resolve_service_master_t mres = RESOLVE_SERVICE_MASTER_ZERO ;
+    resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE_MASTER, &mres) ;
     char dst[baselen + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1] ;
 
-    auto_strings(dst, base, SS_SYSTEM, "/", treename) ;
-
     resolve_init(wres) ;
 
-    res.name = resolve_add_string(wres, SS_MASTER + 1) ;
-    res.description = resolve_add_string(wres, "inner bundle - do not use it") ;
-    res.tree = resolve_add_string(wres, dst) ;
-    res.treename = resolve_add_string(wres, treename) ;
-    res.type = TYPE_BUNDLE ;
-    res.disen = 1 ;
+    mres.name = resolve_add_string(wres, SS_MASTER + 1) ;
 
-    auto_strings(dst + baselen + SS_SYSTEM_LEN + 1 + treelen, SS_SVDIRS) ;
+    auto_strings(dst, base, SS_SYSTEM, "/", treename, SS_SVDIRS) ;
 
-    log_trace("write resolve file of inner bundle") ;
+    log_trace("write Master resolve file of services") ;
     if (!resolve_write(wres, dst, SS_MASTER + 1))
         goto err ;
 
diff --git a/src/lib66/service/service_resolve_master_get_field_tosa.c b/src/lib66/service/service_resolve_master_get_field_tosa.c
new file mode 100644
index 0000000000000000000000000000000000000000..0c1f30936e5102af51f58e133e60e2d3deac0672
--- /dev/null
+++ b/src/lib66/service/service_resolve_master_get_field_tosa.c
@@ -0,0 +1,89 @@
+/*
+ * service_resolve_master_get_field_tosa.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 <oblibs/log.h>
+#include <oblibs/string.h>
+
+#include <skalibs/stralloc.h>
+#include <skalibs/types.h>//UINT_FMT
+
+#include <66/service.h>
+
+int service_resolve_master_get_field_tosa(stralloc *sa, resolve_service_master_t *mres, resolve_service_master_enum_t field)
+{
+    log_flow() ;
+
+    char fmt[UINT32_FMT] ;
+    char const *str = 0 ;
+
+    switch(field) {
+
+        case SERVICE_ENUM_MASTER_NAME:
+            str = mres->sa.s + mres->name ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_CLASSIC:
+            str = mres->sa.s + mres->classic ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_LONGRUN:
+            str = mres->sa.s + mres->longrun ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_BUNDLE:
+            str = mres->sa.s + mres->bundle ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_ONESHOT:
+            str = mres->sa.s + mres->oneshot ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_MODULE:
+            str = mres->sa.s + mres->module ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NCLASSIC:
+            fmt[uint32_fmt(fmt,mres->nclassic)] = 0 ;
+            str = fmt ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NBUNDLE:
+            fmt[uint32_fmt(fmt,mres->nbundle)] = 0 ;
+            str = fmt ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NLONGRUN:
+            fmt[uint32_fmt(fmt,mres->nlongrun)] = 0 ;
+            str = fmt ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NONESHOT:
+            fmt[uint32_fmt(fmt,mres->noneshot)] = 0 ;
+            str = fmt ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NMODULE:
+            fmt[uint32_fmt(fmt,mres->nmodule)] = 0 ;
+            str = fmt ;
+            break ;
+
+        default:
+            return 0 ;
+    }
+
+    if (!auto_stra(sa,str))
+        return 0 ;
+
+    return 1 ;
+}
diff --git a/src/lib66/service/service_resolve_master_modify_field.c b/src/lib66/service/service_resolve_master_modify_field.c
new file mode 100644
index 0000000000000000000000000000000000000000..591c40bf63c168b1572657702cdf72d7346739f7
--- /dev/null
+++ b/src/lib66/service/service_resolve_master_modify_field.c
@@ -0,0 +1,114 @@
+/*
+ * service_resolve_master_modify_field.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 <stdint.h>
+#include <stdlib.h>
+
+#include <oblibs/log.h>
+
+#include <skalibs/types.h>
+
+#include <66/tree.h>
+#include <66/resolve.h>
+
+#include <66/service.h>
+
+resolve_field_table_t resolve_service_master_field_table[] = {
+
+    [SERVICE_ENUM_MASTER_NAME] = { .field = "name" },
+    [SERVICE_ENUM_MASTER_CLASSIC] = { .field = "classic" },
+    [SERVICE_ENUM_MASTER_BUNDLE] = { .field = "bundle" },
+    [SERVICE_ENUM_MASTER_LONGRUN] = { .field = "longrun" },
+    [SERVICE_ENUM_MASTER_ONESHOT] = { .field = "oneshot" },
+    [SERVICE_ENUM_MASTER_MODULE] = { .field = "module" },
+
+    [SERVICE_ENUM_MASTER_NCLASSIC] = { .field = "nclassic" },
+    [SERVICE_ENUM_MASTER_NBUNDLE] = { .field = "nbundle" },
+    [SERVICE_ENUM_MASTER_NLONGRUN] = { .field = "nlongrun" },
+    [SERVICE_ENUM_MASTER_NONESHOT] = { .field = "noneshot" },
+    [SERVICE_ENUM_MASTER_NMODULE] = { .field = "nmodule" },
+    [SERVICE_ENUM_MASTER_ENDOFKEY] = { .field = 0 },
+} ;
+
+int service_resolve_master_modify_field(resolve_service_master_t *mres, uint8_t field, char const *data)
+{
+    log_flow() ;
+
+    uint32_t ifield ;
+    int e = 0 ;
+
+    resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE_MASTER, mres) ;
+
+    switch(field) {
+
+        case SERVICE_ENUM_MASTER_NAME:
+            mres->name = resolve_add_string(wres,data) ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_CLASSIC:
+            mres->classic = resolve_add_string(wres,data) ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_BUNDLE:
+            mres->bundle = resolve_add_string(wres,data) ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_LONGRUN:
+            mres->longrun = resolve_add_string(wres,data) ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_ONESHOT:
+            mres->oneshot = resolve_add_string(wres,data) ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_MODULE:
+            mres->module = resolve_add_string(wres,data) ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NCLASSIC:
+            if (!uint0_scan(data, &ifield)) goto err ;
+            mres->nclassic= ifield ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NBUNDLE:
+            if (!uint0_scan(data, &ifield)) goto err ;
+            mres->nbundle = ifield ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NLONGRUN:
+            if (!uint0_scan(data, &ifield)) goto err ;
+            mres->nlongrun = ifield ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NONESHOT:
+            if (!uint0_scan(data, &ifield)) goto err ;
+            mres->noneshot = ifield ;
+            break ;
+
+        case SERVICE_ENUM_MASTER_NMODULE:
+            if (!uint0_scan(data, &ifield)) goto err ;
+            mres->nmodule = ifield ;
+            break ;
+
+        default:
+            break ;
+    }
+
+    e = 1 ;
+
+    err:
+        free(wres) ;
+        return e ;
+
+}
diff --git a/src/lib66/service/service_resolve_master_read_cdb.c b/src/lib66/service/service_resolve_master_read_cdb.c
new file mode 100644
index 0000000000000000000000000000000000000000..0e86fa91775f3810b4165a834fd102cc7168442d
--- /dev/null
+++ b/src/lib66/service/service_resolve_master_read_cdb.c
@@ -0,0 +1,86 @@
+/*
+ * service_resolve_master_read_cdb.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 <stdint.h>
+#include <stdlib.h>//free
+
+#include <oblibs/log.h>
+
+#include <skalibs/stralloc.h>
+#include <skalibs/cdb.h>
+
+#include <66/resolve.h>
+#include <66/service.h>
+
+int service_resolve_master_read_cdb(cdb *c, resolve_service_master_t *tres)
+{
+    log_flow() ;
+
+    stralloc tmp = STRALLOC_ZERO ;
+    resolve_wrapper_t_ref wres ;
+    uint32_t x ;
+
+    wres = resolve_set_struct(DATA_SERVICE_MASTER, tres) ;
+
+    resolve_init(wres) ;
+
+    /* name */
+    resolve_find_cdb(&tmp,c,"name") ;
+    tres->name = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
+
+    /* classic */
+    resolve_find_cdb(&tmp,c,"classic") ;
+    tres->classic = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
+
+    /* bundle */
+    resolve_find_cdb(&tmp,c,"bundle") ;
+    tres->bundle = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
+
+    /* longrun */
+    resolve_find_cdb(&tmp,c,"longrun") ;
+    tres->longrun = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
+
+    /* oneshot */
+    resolve_find_cdb(&tmp,c,"oneshot") ;
+    tres->oneshot = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
+
+    /* modules */
+    resolve_find_cdb(&tmp,c,"module") ;
+    tres->module = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
+
+    /* nclassic */
+    x = resolve_find_cdb(&tmp,c,"nclassic") ;
+    tres->nclassic = x ;
+
+    /* nbundle */
+    x = resolve_find_cdb(&tmp,c,"nbundle") ;
+    tres->nbundle = x ;
+
+    /* nlongrun */
+    x = resolve_find_cdb(&tmp,c,"nlongrun") ;
+    tres->nlongrun = x ;
+
+    /* noneshot */
+    x = resolve_find_cdb(&tmp,c,"noneshot") ;
+    tres->noneshot = x ;
+
+    /* nmodule */
+    x = resolve_find_cdb(&tmp,c,"nmodule") ;
+    tres->nmodule = x ;
+
+    free(wres) ;
+    stralloc_free(&tmp) ;
+
+    return 1 ;
+}
diff --git a/src/lib66/service/service_resolve_master_write.c b/src/lib66/service/service_resolve_master_write.c
index c89cc8bd41da421a1de9592874486d0f08f719a4..1addc66506b7ad90b8067cf2b17ac13507e3fa63 100644
--- a/src/lib66/service/service_resolve_master_write.c
+++ b/src/lib66/service/service_resolve_master_write.c
@@ -1,5 +1,5 @@
 /*
- * service.c
+ * service_resolve_master_write.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -16,108 +16,87 @@
 
 #include <oblibs/log.h>
 #include <oblibs/string.h>
-#include <oblibs/files.h>
-#include <oblibs/sastr.h>
 
-#include <skalibs/types.h>
-#include <skalibs/stralloc.h>
 #include <skalibs/genalloc.h>
-#include <skalibs/djbunix.h>//openreadnclose
 
 #include <66/constants.h>
-#include <66/ssexec.h>
 #include <66/resolve.h>
+#include <66/graph.h>
 #include <66/service.h>
 
-int service_resolve_master_write(ssexec_t *info, ss_resolve_graph_t *graph,char const *dir, unsigned int reverse)
+int service_resolve_master_write(graph_t *graph, char const *dest)
 {
     log_flow() ;
 
-    int r, e = 0 ;
-    size_t i = 0 ;
-    char ownerstr[UID_FMT] ;
-    size_t ownerlen = uid_fmt(ownerstr,info->owner) ;
-    ownerstr[ownerlen] = 0 ;
+    int e = 0 ;
+    unsigned int pos = 0 ;
+
+    resolve_service_master_t mres = RESOLVE_SERVICE_MASTER_ZERO ;
+    resolve_wrapper_t_ref mwres = resolve_set_struct(DATA_SERVICE_MASTER, &mres) ;
 
-    stralloc in = STRALLOC_ZERO ;
-    stralloc inres = STRALLOC_ZERO ;
-    stralloc gain = STRALLOC_ZERO ;
     resolve_service_t res = RESOLVE_SERVICE_ZERO ;
     resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
 
-    size_t dirlen = strlen(dir) ;
+    resolve_init(mwres) ;
 
-    resolve_init(wres) ;
+    {
+        for (; pos < graph->sort_count ; pos++) {
 
-    char runat[info->livetree.len + 1 + info->treename.len + SS_SVDIRS_LEN + SS_MASTER_LEN + 1] ;
-    auto_strings(runat, info->livetree.s, "/", info->treename.s, SS_SVDIRS, SS_MASTER) ;
+           char *name = graph->data.s + genalloc_s(graph_hash_t,&graph->hash)[graph->sort[pos]].vertex ;
 
-    char dst[dirlen + SS_DB_LEN + SS_SRC_LEN + SS_MASTER_LEN + 1] ;
-    auto_strings(dst, dir, SS_DB, SS_SRC, SS_MASTER) ;
+            if (resolve_read_g(wres, dest, name) <= 0) {
+                log_warnu("read resolve file of: ", dest, name) ;
+                goto err ;
+            }
 
-    size_t livelen = info->live.len - 1 ;
-    char state[livelen + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len + 1] ;
-    auto_strings(state, info->live.s, SS_STATE, "/", ownerstr, "/", info->treename.s) ;
+            switch (res.type) {
 
-    if (reverse)
-    {
-        size_t dstlen = strlen(dst) ;
-        char file[dstlen + 1 + SS_CONTENTS_LEN + 1] ;
-        auto_strings(file, dst, "/", SS_CONTENTS) ;
+                case TYPE_CLASSIC:
 
-        size_t filesize=file_get_size(file) ;
+                    mres.classic = resolve_add_string(mwres, res.sa.s + res.name) ;
+                    mres.nclassic++ ;
+                    break ;
 
-        r = openreadfileclose(file,&gain,filesize) ;
-        if(!r) goto err ;
-        /** ensure that we have an empty line at the end of the string*/
-        if (!auto_stra(&gain,"\n")) goto err ;
-        if (!sastr_clean_element(&gain)) goto err ;
-    }
+                case TYPE_BUNDLE:
 
-    for (; i < genalloc_len(resolve_service_t,&graph->sorted); i++)
-    {
-        char *string = genalloc_s(resolve_service_t,&graph->sorted)[i].sa.s ;
-        char *name = string + genalloc_s(resolve_service_t,&graph->sorted)[i].name ;
-        if (reverse)
-            if (sastr_cmp(&gain,name) == -1) continue ;
+                    mres.bundle = resolve_add_string(mwres, res.sa.s + res.name) ;
+                    mres.nbundle++ ;
+                    break ;
 
-        if (!stralloc_cats(&in,name)) goto err ;
-        if (!stralloc_cats(&in,"\n")) goto err ;
+                case TYPE_LONGRUN:
 
-        if (!stralloc_cats(&inres,name)) goto err ;
-        if (!stralloc_cats(&inres," ")) goto err ;
-    }
+                    mres.longrun = resolve_add_string(mwres, res.sa.s + res.name) ;
+                    mres.nlongrun++ ;
+                    break ;
 
-    if (inres.len) inres.len--;
-    if (!stralloc_0(&inres)) goto err ;
 
-    r = file_write_unsafe(dst,SS_CONTENTS,in.s,in.len) ;
-    if (!r)
-    {
-        log_warnusys("write: ",dst,"contents") ;
-        goto err ;
-    }
+                case TYPE_ONESHOT:
+
+                    mres.oneshot = resolve_add_string(mwres, res.sa.s + res.name) ;
+                    mres.noneshot++ ;
+                    break ;
+
+                case TYPE_MODULE:
 
-    res.name = resolve_add_string(wres,SS_MASTER+1) ;
-    res.description = resolve_add_string(wres,"inner bundle - do not use it") ;
-    res.treename = resolve_add_string(wres,info->treename.s) ;
-    res.tree = resolve_add_string(wres,info->tree.s) ;
-    res.live = resolve_add_string(wres,info->live.s) ;
-    res.type = TYPE_BUNDLE ;
-    res.depends = resolve_add_string(wres,inres.s) ;
-    res.ndepends = genalloc_len(resolve_service_t,&graph->sorted) ;
-    res.runat = resolve_add_string(wres,runat) ;
-    res.state = resolve_add_string(wres,state) ;
+                    mres.module = resolve_add_string(mwres, res.sa.s + res.name) ;
+                    mres.nmodule++ ;
+                    break ;
 
-    if (!resolve_write(wres,dir,SS_MASTER+1)) goto err ;
+                default:
+                    log_warn("unknown type") ;
+                    goto err ;
+            }
+        }
+    }
+
+    if (!resolve_write(mwres, dest, SS_MASTER + 1))
+        goto err ;
 
     e = 1 ;
 
     err:
         resolve_free(wres) ;
-        stralloc_free(&in) ;
-        stralloc_free(&inres) ;
-        stralloc_free(&gain) ;
+        resolve_free(mwres) ;
         return e ;
 }
 
diff --git a/src/lib66/service/service_resolve_master_write_cdb.c b/src/lib66/service/service_resolve_master_write_cdb.c
new file mode 100644
index 0000000000000000000000000000000000000000..4b84bf2a03c35da5d5af7af7a20d0a57b18e5367
--- /dev/null
+++ b/src/lib66/service/service_resolve_master_write_cdb.c
@@ -0,0 +1,62 @@
+/*
+ * service_resolve_master_write_cdb.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 <oblibs/log.h>
+
+#include <skalibs/cdbmake.h>
+
+#include <66/service.h>
+#include <66/resolve.h>
+
+int service_resolve_master_write_cdb(cdbmaker *c, resolve_service_master_t *mres)
+{
+    log_flow() ;
+
+    char *str = mres->sa.s ;
+
+    /* name */
+    if (!resolve_add_cdb(c,"name",str + mres->name) ||
+
+    /* classic */
+    !resolve_add_cdb(c,"classic",str + mres->classic) ||
+
+    /* bundle */
+    !resolve_add_cdb(c,"bundle",str + mres->bundle) ||
+
+    /* longrun */
+    !resolve_add_cdb(c,"longrun",str + mres->longrun) ||
+
+    /* oneshot */
+    !resolve_add_cdb(c,"oneshot",str + mres->oneshot) ||
+
+    /* module */
+    !resolve_add_cdb(c,"module",str + mres->module) ||
+
+    /* nclassic */
+    !resolve_add_cdb_uint(c,"nclassic",mres->nclassic) ||
+
+    /* nbundle */
+    !resolve_add_cdb_uint(c,"nbundle",mres->nbundle) ||
+
+    /* nlongrun */
+    !resolve_add_cdb_uint(c,"nlongrun",mres->nlongrun) ||
+
+    /* noneshot */
+    !resolve_add_cdb_uint(c,"noneshot",mres->noneshot) ||
+
+    /* nmodule */
+    !resolve_add_cdb_uint(c,"nmodule",mres->nmodule)) return 0 ;
+
+    return 1 ;
+}