# Template:Refsrc
This template is used to create references to NetHack source code.

Contents

1 Ambiguous references
2 Good references
3 Referencing NetHack's variants
4 Advanced usage
5 See also
6 References

Ambiguous references
Many old references on NetHackWiki look something like this:

{{refsrc|allmain.c|42}}

which produces this footnote.[1] These references don't specify which version of NetHack they're referencing, nor which directory the file is in, and thus are somewhat ambiguous. Redirect pages will attempt to patch these problems up (via assuming NetHack 3.4.3, the statistically most common version at present). However, please try to specify at least the version explicitly, to avoid problems with future NetHack versions (most likely, for new references you don't want to cite 3.4.3 anyway).

Good references
Good examples of references, including explicit versions and directories:

{{refsrc|src/allmain.c|42|version=NetHack 3.4.3}}

will produce this,[2] and

{{refsrc|src/allmain.c|42|version=NetHack 3.6.7}}

will produce this.[3]
This is case-sensitive. Remember, no capital letters in "version", two capital letters in "NetHack".
Unlike the old ambiguous references, these references will not break as new versions of NetHack are released, and also make it easy to identify which articles are referenced to an old version (and thus may contain out-of-date information).
If a reference is to NetHack specifically, rather than a variant, you can abbreviate the reference, like this:

{{refsrc|src/allmain.c|42|nethack=3.6.0}}

which produces this.[4] This is not identical to specifying version=NetHack 3.6.0, but faster to write and saves space in the edit box. Alas, it would not eliminate the error message 'Page with an unversioned refsrc'. Again, as this is case-sensitive, "nethack" as a parameter name should have all small letters.
If you are referencing NetHack 3.6.x source code, you must specify a directory (such as src/ or include/), otherwise the GitHub link will be broken, such as this one:

 {{refsrc|allmain.c|42|version=NetHack 3.6.0}}

producing a 404 page: [5]

Referencing NetHack's variants
{{refsrc|allmain.c|42|version=SLASH'EM 0.0.7E7F2}}

SLASH'EM code is stored on this wiki without the use of subdirectories, so for the time being, you'll need to omit those when referencing SLASH'EM code. The above example looks like this.[6]

{{refsrc|src/mkroom.c|123|unnethack=1406}}

UnNetHack allows you to link to a particular revision, rather than a particular version. It looks like this.[7] You will need to specify the subdirectory explicitly, because there is no filename list available for UnNetHack.

Advanced usage
{{refsrc|src/monmove.c|219|version=NetHack 3.4.3|comment=fleeing monsters stop holding you}}

You can include a comment along with the reference, as shown here.[8]
You may also specify a name parameter so you can reference the same location in the code from multiple locations in the text, like this:

{{refsrc|src/engrave.c|814|version=NetHack 3.4.3|name=venom_letter}} [some other text...] 

<ref name="venom_letter"></ref>

This will produce output like the following:[9] [some other text...] [9]
You may specify ref=no to create a link to source code without creating a reference:

{{refsrc|src/allmain.c|123|version=NetHack 3.6.7|ref=no}}

This will produce a link with no reference: src/allmain.c in NetHack 3.6.7, line 123

See also
Template:Refsrc/link – implementation of the link in this template; edit it to support linking to new versions.  Do not use it directly on pages (use ref=no with this template to generate a non-footnoted link).
Template:Reffunc – reference linking to function rather than to the line
References

↑ allmain.c in NetHack 3.4.3, line 42

↑ src/allmain.c in NetHack 3.4.3, line 42

↑ src/allmain.c in NetHack 3.6.7, line 42

↑ src/allmain.c in NetHack 3.6.0, line 42

↑ allmain.c in NetHack 3.6.0, line 42

↑ allmain.c in SLASH'EM 0.0.7E7F2, line 42

↑ src/mkroom.c in UnNetHack revision 1406, line 123

↑ src/monmove.c in NetHack 3.4.3, line 219: fleeing monsters stop holding you

↑ 9.0 9.1 src/engrave.c in NetHack 3.4.3, line 814