-define(mk_ptr, `ifelse(REVERSE, substr($1, 0, len(REVERSE)),`mk_PTR($1,$2)')')
-define(emit_ptr, `ifdef(`REVERSE', `mk_ptr($1,$2)divert(-1)')')
+define(nsc_SOA, `
+ifelse(CURRENT_DOMAIN,@,`',$ORIGIN CURRENT_DOMAIN)
+$TTL MINTTL
+nsc_emit_name `SOA' nsc_corr_dot(NSNAME) MAINTNAME (
+ VERSION REFRESH RETRY EXPIRE MINTTL )')
+define(SOA, `ifdef(`CURRENT_DOMAIN',`ifdef(`REVERSE_MODE',,`nsc_fatal_error(`SOA record defined twice')')')dnl
+define(`CURRENT_DOMAIN',ifelse($1,@,@,$1.))dnl
+nsc_set_name(CURRENT_DOMAIN)dnl
+ifdef(`REVERSE_MODE',,`nsc_SOA')')
+
+# Reverse zones
+
+define(REVERSE, `divert(-1)
+ define(`REVERSE_MODE', `')
+ nsc_if_v6($1,`
+ define(`REVNET6', nsc_revblock6($1))
+ ',`
+ define(`REVNET', `$1.')
+ define(`REVLOW', `$2')
+ define(`REVHIGH', `$3')
+ ')
+')