ENTRY
{ address
author
booktitle
chapter
edition
editor
howpublished
institution
journal
key
month
number
organization
pages
publisher
school
series
title
type
volume
year
filename
filediz
url
abstract
}
{ }
{ label }
STRINGS { s t }
% Useful logical functions
FUNCTION {not}
{ { #0 }
{ #1 }
if$
}
FUNCTION {and}
{ 'skip$
{ pop$ #0 }
if$
}
FUNCTION {or}
{ { pop$ #1 }
'skip$
if$
}
FUNCTION {output.bibitem}
{ "[" cite$ * "]
" *
write$ newline$
}
FUNCTION {fin.entry}
{ "
"
write$
newline$
newline$
}
FUNCTION {emphasize}
{ duplicate$ empty$
{ pop$ "" }
{ "" swap$ * "" * }
if$
}
FUNCTION {boldtext}
{ duplicate$ empty$
{ pop$ "" }
{ "" swap$ * "" * }
if$
}
FUNCTION {quotetext}
{ duplicate$ empty$
{ pop$ "" }
{ quote$ swap$ * quote$ * }
if$
}
FUNCTION {add.br}
{ duplicate$ empty$
{ pop$ "
" }
{ "
" * }
if$
}
FUNCTION {n.dashify}
{ 't :=
""
{ t empty$ #0 = }
{ t #1 #2 substring$ "--" =
{
"–" *
t #3 global.max$ substring$ 't :=
}
{ t #1 #1 substring$ "-" =
{ "–" * } % "–" doesn't work with Netscape 4.7X
{ t #1 #1 substring$ * }
if$
t #2 global.max$ substring$ 't :=
}
if$
}
while$
}
INTEGERS { nameptr namesleft numnames }
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr "{ff{ } }{vv{ } }{ll{ }}{, jj{ }}" format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #2 >
{ "," * }
'skip$
if$
t "others" =
{ " et al." * }
{ " and " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
FUNCTION {output.authors}
{ author missing$
{ "author missing in " cite$ * warning$ }
{
author empty$
{ "author empty in " cite$ * warning$ }
{ author format.names "
" * write$ newline$ }
if$
}
if$
}
FUNCTION {output.editors}
{ editor empty$
{ "editor empty in " cite$ * warning$ }
{ editor format.names
editor num.names$ #1 >
{ " (editors)
" * }
{ " (editor)
" * }
if$
write$
newline$
}
if$
}
FUNCTION {output.title}
{ title missing$
{ "title missing in " cite$ * warning$ }
{
title empty$
{ "title empty in " cite$ * warning$ }
{ title "t" change.case$ quotetext "
" * write$ newline$ }
if$
}
if$
}
FUNCTION {output.btitle}
{ title missing$
{ "title missing in " cite$ * warning$ }
{
title empty$
{ "title empty in " cite$ * warning$ }
{ title emphasize "
" * write$ newline$ }
if$
}
if$
}
FUNCTION {output.ctitle}
{ booktitle missing$
{ "booktitle missing in " cite$ * warning$ }
{
booktitle empty$
{ "booktitle empty in " cite$ * warning$ }
{ booktitle emphasize "
" * write$ newline$ }
if$
}
if$
}
FUNCTION {output.journal}
{ journal missing$
{ "journal missing in " cite$ * warning$ }
{
journal empty$
{ "journal empty in " cite$ * warning$ }
{ journal emphasize write$ }
if$
}
if$
}
FUNCTION {output.volume}
{ volume missing$
{ month missing$
{ "volume missing in " cite$ * warning$ }
{ }
if$
}
{
volume empty$
{ "volume empty in " cite$ * warning$ }
{ " " volume boldtext * write$ }
if$
}
if$
}
FUNCTION {output.number}
{ number missing$
{ }
{
number empty$
{ }
{ number "(" swap$ * ")" * write$ }
if$
}
if$
}
FUNCTION {output.year}
{ year missing$
{ "year missing in " cite$ * warning$ }
{
year empty$
{ "year empty in " cite$ * warning$ }
{ volume missing$
{ " (" month * " " * year * ")
" * write$ newline$ }
{ year " (" swap$ * ")
" * write$ newline$ }
if$
}
if$
}
if$
}
FUNCTION {output.byear}
{ year missing$
{ "year missing in " cite$ * warning$ }
{
year empty$
{ "year empty in " cite$ * warning$ }
{ year "
" * write$ newline$ }
if$
}
if$
}
FUNCTION {output.school}
{ school missing$
{ "school missing in " cite$ * warning$ }
{
school empty$
{ "school empty in " cite$ * warning$ }
{ school ", " * write$ }
if$
}
if$
}
FUNCTION {output.institution}
{ institution missing$
{ "institution missing in " cite$ * warning$ }
{
institution empty$
{ "institution empty in " cite$ * warning$ }
{ institution ", " * write$ }
if$
}
if$
}
FUNCTION {output.type}
{ type missing$
{ }
{
type empty$
{ "type empty in " cite$ * warning$ }
{ type write$ }
if$
}
if$
}
FUNCTION {output.rnumber}
{ number missing$
{
type missing$
{ }
{ ", " write$ }
if$
}
{
number empty$
{ ", " write$
"number empty in " cite$ * warning$
}
{ " " number * ", " * write$ }
if$
}
if$
}
FUNCTION {output.publisher}
{ publisher missing$
{ }
{
publisher empty$
{ }
{ publisher ", " * write$ }
if$
}
if$
}
FUNCTION {output.address}
{ address missing$
{ }
{
address empty$
{ }
{ address ", " * write$ }
if$
}
if$
}
FUNCTION {format.date}
{ year empty$
{ month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
month
}
if$
}
{ month empty$
{ "(" year * ")" * }
{ month " " * year * }
if$
}
if$
}
FUNCTION {output.url}
{ url missing$
{ }
{
url empty$
{ }
{ url "online" * write$ newline$ }
if$
}
if$
}
INTEGERS { filenameptr filenamesleft numfilenames filedizleft numfilediz }
STRINGS { defaultdiz f d }
FUNCTION {output.filename}
{ "[pdf]" 'defaultdiz :=
#1 'filenameptr :=
filename empty$
{ #0 'numfilenames := }
{ filename num.names$ 'numfilenames := }
if$
filediz missing$
{ #0 'numfilediz := }
{ filediz num.names$ 'numfilediz := }
if$
numfilenames 'filenamesleft :=
numfilediz 'filedizleft :=
{ filenamesleft #0 > }
{
filename filenameptr "{ff{}}{vv{}}{ll{}}{jj}" format.name$ 'f :=
filedizleft #0 >
{ filediz filenameptr "{ff{}}{vv{}}{ll{}}{jj}" format.name$ 'd := }
{ "" 'd := }
if$
d empty$
{ defaultdiz 'd := }
'skip$
if$
"" * d * "" *
write$ newline$
filenameptr #1 + 'filenameptr :=
filenamesleft #1 - 'filenamesleft :=
filedizleft #1 - 'filedizleft :=
}
while$
{ filedizleft #0 > }
{
filediz filenameptr "{ff{}}{vv{}}{ll{}}{jj}" format.name$ 'd :=
d write$ newline$
filenameptr #1 + 'filenameptr :=
filedizleft #1 - 'filedizleft :=
}
while$
filename empty$
{ filediz empty$
{ }
{ "
" write$ newline$ }
if$
}
{ "
" write$ newline$ }
if$
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
{ " " }
{ " " }
if$
swap$ * *
}
FUNCTION {either.or.check}
{ empty$
'pop$
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
if$
}
FUNCTION {format.bvolume}
{ volume empty$
{ "" }
{ "volume" volume tie.or.space.connect
series empty$
'skip$
{ " of " * series emphasize * }
if$
"volume and number" number either.or.check
}
if$
}
FUNCTION {format.number.series}
{ volume empty$
{ number empty$
{ series field.or.null }
{ output.state mid.sentence =
{ "number" }
{ "Number" }
if$
number tie.or.space.connect
series empty$
{ "there's a number but no series in " cite$ * warning$ }
{ " in " * series * }
if$
}
if$
}
{ "" }
if$
}
FUNCTION {format.edition}
{ edition empty$
{ "" }
{ output.state mid.sentence =
{ edition "l" change.case$ " edition" * }
{ edition "t" change.case$ " edition" * }
if$
}
if$
}
INTEGERS { multiresult }
FUNCTION {multi.page.check}
{ 't :=
#0 'multiresult :=
{ multiresult not
t empty$ not
and
}
{ t #1 #1 substring$
duplicate$ "-" =
swap$ duplicate$ "," =
swap$ "+" =
or or
{ #1 'multiresult := }
{ t #2 global.max$ substring$ 't := }
if$
}
while$
multiresult
}
FUNCTION {output.pages}
{ pages missing$
{ "pages missing in " cite$ * warning$ }
{ pages empty$
{ "pages empty in " cite$ * warning$ }
{ ", " pages n.dashify * write$ }
if$
}
if$
}
FUNCTION {format.chapter.pages}
{ chapter empty$
'format.pages
{ type empty$
{ "chapter" }
{ type "l" change.case$ }
if$
chapter tie.or.space.connect
pages empty$
'skip$
{ ", " * format.pages * }
if$
}
if$
}
FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
{ "" }
{ editor empty$
{ "In " booktitle emphasize * }
{ "In " format.editors * ", " * booktitle emphasize * }
if$
}
if$
}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
month empty$ year empty$ noTeX empty$
and and and and and
key empty$ not and
{ "all relevant fields are empty in " cite$ * warning$ }
'skip$
if$
}
FUNCTION {format.thesis.type}
{ type empty$
'skip$
{ pop$
type "t" change.case$
}
if$
}
FUNCTION {format.tr.number}
{ type empty$
{ "Technical Report" }
'type
if$
number empty$
{ "t" change.case$ }
{ number tie.or.space.connect }
if$
}
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
warning$
""
}
{ "In {\em " journal * "\/}" * }
if$
}
{ "In " key * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.crossref.editor}
{ editor #1 "{vv{ } }{ll{ }}" format.name$
editor num.names$ duplicate$
#2 >
{ pop$ " et al." * }
{ #2 <
'skip$
{ editor #2 "{ff{ } }{vv{ } }{ll{ }}{ jj{ }}" format.name$ "others" =
{ " et al." * }
{ " and " * editor #2 "{vv{ } }{ll{ }}" format.name$ * }
if$
}
if$
}
if$
}
FUNCTION {format.book.crossref}
{ volume empty$
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
"In "
}
{ "Volume" volume tie.or.space.connect
" of " *
}
if$
editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ series empty$
{ "need editor, key, or series for " cite$ * " to crossref " *
crossref * warning$
"" *
}
{ "{\em " * series * "\/}" * }
if$
}
{ key * }
if$
}
{ format.crossref.editor * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
author field.or.null = % TEMP HACK
% editor field.or.null author field.or.null =
% or
{ key empty$
{ booktitle empty$
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
crossref * warning$
""
}
{ "In {\em " booktitle * "\/}" * }
if$
}
{ "In " key * }
if$
}
{ "In " format.crossref.editor * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {article}
{ output.bibitem
output.authors
output.title
output.journal
output.volume
output.number
output.pages
output.year
output.filename
output.url
fin.entry
}
FUNCTION {book}
{ output.bibitem
author empty$
{ output.editors }
{ output.authors }
if$
output.btitle
output.publisher
output.address
output.byear
output.filename
output.url
fin.entry
}
FUNCTION {booklet}
{ output.bibitem
output.authors
output.btitle
howpublished write$
output.address
output.byear
fin.entry
}
FUNCTION {inbook}
{ output.bibitem
author empty$
{ output.editors }
{ output.authors }
if$
output.title
format.chapter.pages write$
crossref missing$
{ format.bvolume write$
format.number.series write$
output.publisher
output.address
output.byear
}
{
format.book.crossref write$
}
if$
output.filename
output.url
fin.entry
}
FUNCTION {incollection}
{ output.bibitem
output.authors
output.title
crossref missing$
{ output.editors
output.ctitle
output.publisher
output.address
output.byear
}
{ format.incoll.inproc.crossref write$
format.chapter.pages write$
}
if$
output.filename
output.url
fin.entry
}
FUNCTION {inproceedings}
{ output.bibitem
output.authors
output.title
crossref missing$
{ output.editors
output.ctitle
output.publisher
output.address
output.byear
}
{ format.incoll.inproc.crossref write$
format.chapter.pages write$
}
if$
output.filename
output.url
fin.entry
}
FUNCTION {conference} { inproceedings }
FUNCTION {manual}
{ output.bibitem
author empty$
{ organization empty$
'skip$
{ organization write$
output.address
}
if$
}
{ output.authors }
if$
output.btitle
author empty$
{ organization empty$
{
output.address
}
'skip$
if$
}
{
organization write$
output.address
}
if$
format.edition write$
output.byear
output.filename
output.url
fin.entry
}
FUNCTION {mastersthesis}
{ output.bibitem
output.authors
output.btitle
"Master's thesis, " write$
output.school
output.address
output.byear
output.filename
output.url
fin.entry
}
FUNCTION {misc}
{ output.bibitem
output.authors
output.title
howpublished write$
", " write$
output.byear
output.filename
output.url
fin.entry
}
FUNCTION {phdthesis}
{ output.bibitem
output.authors
output.btitle
"PhD thesis, " write$
output.school
output.address
output.byear
output.filename
output.url
fin.entry
}
FUNCTION {proceedings}
{ output.bibitem
editor empty$
{ organization write$ }
{ output.editors }
if$
output.btitle
format.bvolume write$
format.number.series write$
address empty$
{ editor empty$
{ publisher write$ }
{ organization publisher * write$
organization write$
}
if$
publisher write$
output.byear
}
{ output.address
output.byear
editor empty$
'skip$
{ organization write$ }
if$
publisher write$
}
if$
fin.entry
}
FUNCTION {techreport}
{ output.bibitem
output.authors
output.btitle
output.type
output.rnumber
output.institution
output.address
output.byear
output.filename
output.url
fin.entry
}
FUNCTION {unpublished}
{ output.bibitem
output.authors
output.title
format.date write$
fin.entry
}
FUNCTION {default.type} { misc }
MACRO {jan} {"January"}
MACRO {feb} {"February"}
MACRO {mar} {"March"}
MACRO {apr} {"April"}
MACRO {may} {"May"}
MACRO {jun} {"June"}
MACRO {jul} {"July"}
MACRO {aug} {"August"}
MACRO {sep} {"September"}
MACRO {oct} {"October"}
MACRO {nov} {"November"}
MACRO {dec} {"December"}
READ
ITERATE {call.type$}