anchor.diff:          Error("Duplicate item name %s" % name)
       names[name] = None
       variables.append((type, name, array, default))
  +
  +def modparam(type, name, default, doc):
  +    if name in names:
  +        Error("Duplicate item name %s" % name)
  +    names[name] = None
  +    modparams.append((type, name, default, doc))
   
   def removeprefix(s,p):
       if s.startswith(p): return s[len(p):]
  
positive.code:       | "see_also" String ";"   {{ see_also(String) }}
        | "description" String ";"   {{ description(String) }}
        | "license" String ";"   {{ license(String) }}
  
      rule String: TSTRING {{ return eval(TSTRING) }} 
              | STRING {{ return eval(STRING) }}
  
negative.code:     else:
          if rest:
              print >>f, rest
          else:
              print >>f, ".HP"
              if options.get("singleton") or options.get("count_function"):
                  if has_personality:
                      print >>f, ".B loadrt %s personality=\\fIP\\fB" % comp_name,
                  else:
                      print >>f, ".B loadrt %s" % comp_name,
              else:
                  if has_personality:
                      print >>f, ".B loadrt %s [count=\\fIN\\fB] [personality=\\fIP,P,...\\fB]" % comp_name,
                  else:
                      print >>f, ".B loadrt %s [count=\\fIN\\fB]" % comp_name,
              for type, name, default, doc in modparams:
                  print >>f, "[%s=\\fIN\\fB]" % name,
              print >>f
  
              hasparamdoc = False
              for type, name, default, doc in modparams:
                  if doc: hasparamdoc = True
  
              if hasparamdoc:
                  print >>f, ".RS 4"
                  for type, name, default, doc in modparams:
                      print >>f, ".TP"
                      print >>f, "\\fB%s\\fR" % name,
                      if default:
                          print >>f, "[default: %s]" % default
                      else:
                          print >>f
                      print >>f, doc
                  print >>f, ".RE"
  
          if options.get("constructable") and not options.get("singleton"):
              print >>f, ".PP\n.B newinst %s \\fIname\\fB" % comp_name
  
  