diff --git a/doc/config.html b/doc/config.html
index e4e4acf8..b225e720 100755
--- a/doc/config.html
+++ b/doc/config.html
@@ -1066,6 +1066,12 @@ XYZ-2005-Nov-002
Same as Preset <attribute>, but evaluated for
replies.
+
+ Preset on duplicate <attribute> =
+ <string>
+ Same as Preset <attribute>, but evaluated for
+ duplicted entries.
+
Locked Attributes = <list>
The attributes specified here cannot be modified when a new entry is
diff --git a/src/elogd.c b/src/elogd.c
index 3249da8d..305910ab 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -8607,6 +8607,28 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
}
}
+ sprintf(str, "Preset on duplicate %s", attr_list[index]);
+ if ((i = getcfg(lbs->name, str, preset, sizeof(preset))) > 0 && bduplicate) {
+
+ if (!breedit || (breedit && i == 2)) { /* subst on reedit only if preset is under condition */
+
+ /* do not format date for date attributes */
+ i = build_subst_list(lbs, slist, svalue, attrib,
+ (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0);
+ strsubst_list(preset, sizeof(preset), slist, svalue, i);
+
+ /* check for index substitution */
+ if (!bedit && (strchr(preset, '%') || strchr(preset, '#'))) {
+ /* get index */
+ get_auto_index(lbs, index, preset, str, sizeof(str));
+ strcpy(preset, str);
+ }
+
+ if (!strchr(preset, '%'))
+ strcpy(attrib[index], preset);
+ }
+ }
+
/* check for p */
sprintf(str, "p%s", attr_list[index]);
if (isparam(str))
@@ -8670,6 +8692,28 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
strcpy(attrib[index], preset);
}
}
+
+ sprintf(str, "Preset on duplicate %s", attr_list[index]);
+ if ((i = getcfg(lbs->name, str, preset, sizeof(preset))) > 0 && bduplicate) {
+
+ if (!breedit || (breedit && i == 2)) { /* subst on reedit only if preset is under condition */
+
+ /* do not format date for date attributes */
+ i = build_subst_list(lbs, slist, svalue, attrib,
+ (attr_flags[index] & (AF_DATE | AF_DATETIME)) == 0);
+ strsubst_list(preset, sizeof(preset), slist, svalue, i);
+
+ /* check for index substitution */
+ if (!bedit && (strchr(preset, '%') || strchr(preset, '#'))) {
+ /* get index */
+ get_auto_index(lbs, index, preset, str, sizeof(str));
+ strcpy(preset, str);
+ }
+
+ if (!strchr(preset, '%'))
+ strcpy(attrib[index], preset);
+ }
+ }
}
} else // if (_condition[0])