texlive[67386] Master: bibtools/abstract.bst per hille42 request 15

commits+karl at tug.org commits+karl at tug.org
Fri Jun 16 23:03:10 CEST 2023


Revision: 67386
          http://tug.org/svn/texlive?view=revision&revision=67386
Author:   karl
Date:     2023-06-16 23:03:10 +0200 (Fri, 16 Jun 2023)
Log Message:
-----------
bibtools/abstract.bst per hille42 request 15 Jun 2023 21:08:35

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/bibtex/bst/bibtools/
    trunk/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/
    trunk/Master/texmf-dist/source/bibtex/bibtools/README
    trunk/Master/texmf-dist/source/bibtex/bibtools/aux2bib
    trunk/Master/texmf-dist/source/bibtex/bibtools/bib.html
    trunk/Master/texmf-dist/source/bibtex/bibtools/bib2html
    trunk/Master/texmf-dist/source/bibtex/bibtools/bibify
    trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey
    trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk
    trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed
    trunk/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el
    trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys
    trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/cleantex
    trunk/Master/texmf-dist/source/bibtex/bibtools/demo.bib
    trunk/Master/texmf-dist/source/bibtex/bibtools/demo.html
    trunk/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/html-long.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/html-short.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/looktex
    trunk/Master/texmf-dist/source/bibtex/bibtools/looktex.awk
    trunk/Master/texmf-dist/source/bibtex/bibtools/makebib
    trunk/Master/texmf-dist/source/bibtex/bibtools/printbib
    trunk/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst
    trunk/Master/texmf-dist/source/bibtex/bibtools/subset.bst
    trunk/Master/tlpkg/tlpsrc/bibtools.tlpsrc

Added: trunk/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,1345 @@
+% BibTeX bibliography style `abstract' 
+% by David Kotz dfk at cs.duke.edu
+% March 1989, May 1993, November 1995, October 2000
+%    modified from
+% BibTeX standard bibliography style `alpha'
+	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+	% Copyright (C) 1985, all rights reserved.
+	% Copying of this file is authorized only if either
+	% (1) you make absolutely no changes to your copy, including name, or
+	% (2) if you do make changes, you name it something other than
+	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+	% This restriction helps ensure that all standard styles are identical.
+	% The file btxbst.doc has the documentation for this style.
+
+% The 'abstract' section is suited for multi-paragraph abstracts, if
+% necessary, but note that bibtex takes out the blank line that you
+% might use to indicate a new paragraph.  Use \par where you want a
+% new paragraph in an abstract or comment.
+
+% DFK added abstract, comment, keyword, url
+ENTRY
+  { abstract
+    address
+    author
+    booktitle
+    chapter
+    comment
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ swap$
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	  "\newblock " write$
+	}
+	{ output.state before.all =
+	     'write$
+	     { add.period$ " " * write$ }
+	    if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+% DFK changed to use cite$ for the label
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem[" write$
+  cite$ write$
+  "]{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+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 {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ ", editors" * }
+	{ ", editor" * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+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 {format.btitle}
+{ title emphasize
+}
+
+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 {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pages" pages n.dashify tie.or.space.connect }
+	{ "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ":" * pages n.dashify * }
+      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$ note 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$
+  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 * "}" *
+}
+
+% DFK added
+FUNCTION {format.abstract}
+{ abstract empty$
+    { "" }
+    { "\begin{quotation}\noindent {\bf Abstract:} " 
+	abstract * 
+	" \end{quotation}" *}
+  if$
+}
+
+% DFK added
+FUNCTION {format.keyword}
+{ keyword empty$
+    { "" }
+    { "\begin{quote} {\bf Keyword:} " keyword * " \end{quote}" *}
+  if$
+}
+
+% DFK added
+FUNCTION {format.url}
+{ URL empty$
+    { "" }
+    { "\begin{quote} {\bf URL} \verb`" URL * "` \end{quote}" *}
+  if$
+}
+
+% DFK added
+% 5/93 added "private", as part of the comment, if both exist.
+FUNCTION {format.comment}
+{ comment empty$
+    {	private empty$
+		{ "" }
+		{ "\begin{quote} {\bf Private:} " private * " \end{quote}" *}
+	if$
+    }
+    {	private empty$
+		{ "\begin{quote} {\bf Comment:} " comment * " \end{quote}" *}
+		{ "\begin{quote} {\bf Comment:} " comment * 
+				" {\bf Private:} " * private *
+				" \end{quote}" * }
+	if$
+    }
+  if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+  format.URL write$ newline$
+  format.abstract write$ newline$
+  format.keyword write$ newline$
+  format.comment write$ newline$
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+	{ organization publisher new.sentence.checkb
+	  organization output
+	  publisher output
+	  format.date "year" output.check
+	}
+	{ address output.nonnull
+	  format.date "year" output.check
+	  new.sentence
+	  organization output
+	  publisher output
+	}
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+	'skip$
+	{ organization output.nonnull
+	  address output
+	}
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+	{ address new.block.checka
+	  address output
+	}
+	'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+	{ publisher new.sentence.checka }
+	{ organization publisher new.sentence.checkb
+	  organization output
+	}
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+	'skip$
+	{ organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  fin.entry
+  dfk.stuff
+}
+
+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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #1 >
+    { numnames #4 >
+	{ #3 'namesleft := }
+	{ numnames 'namesleft := }
+      if$
+      #1 'nameptr :=
+      ""
+	{ namesleft #0 > }
+	{ nameptr numnames =
+	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+		{ "{\etalchar{+}}" *
+		  #1 'et.al.char.used :=
+		}
+		{ s nameptr "{v{}}{l{}}" format.name$ * }
+	      if$
+	    }
+	    { s nameptr "{v{}}{l{}}" format.name$ * }
+	  if$
+	  nameptr #1 + 'nameptr :=
+	  namesleft #1 - 'namesleft :=
+	}
+      while$
+      numnames #4 >
+	{ "{\etalchar{+}}" *
+	  #1 'et.al.char.used :=
+	}
+	'skip$
+      if$
+    }
+    { s #1 "{v{}}{l{}}" format.name$
+      duplicate$ text.length$ #2 <
+	{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+	'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+	{ cite$ #1 #3 substring$ }
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { cite$ #1 #3 substring$ }
+	    { key #3 text.prefix$ }
+	  if$
+	}
+	{ editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+	'editor.key.organization.label
+	{ type$ "manual" =
+	    'author.key.organization.label
+	    'author.key.label
+	  if$
+	}
+      if$
+    }
+  if$
+  duplicate$
+  year field.or.null purify$ #-1 #2 substring$
+  *
+  'label :=
+  year field.or.null purify$ #-1 #4 substring$
+  *
+  sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ calc.label
+  sort.label
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  *
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+% DFK throw away stuff above and use cite$ for sort key
+  pop$
+  cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  label extra.label * 'label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{ et.al.char.used
+    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+    'skip$
+  if$
+  preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/bibtex/bst/bibtools/abstract.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/README
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/README	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/README	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,51 @@
+September 3, 1992
+updated November 12, 1995
+updated October 2000 
+
+This is a collection of BibTeX tools written (mostly) by David Kotz.
+I provide them as-is.  Use them as you please. Some slight
+modifications may be needed to pathnames embedded in the shell
+scripts, to find the library files they need (sed, awk, and bst
+files).
+
+The programs are: 
+
+    aux2bib - given an .aux file, make a portable .bib file to go with
+    it. This is useful when you need to ship a tex file elsewhere
+
+    bibify - this can be used to eliminate one pass of LaTeX in many
+    cases: (latex, bibtex, bibify, latex), instead of (latex, bibtex,
+    latex, latex). Handy for large documents. Does not work with
+    multiple aux files.
+
+    bibkey - make a list of all entries that have the given keyword in
+    their "keyword" field.
+
+    cleantex - really a general tex script, this removes all the
+    little files created by tex and latex as they run, leaving only
+    the original files.
+
+    looktex - makes a list of all entries that match a given regexp 
+
+    makebib - makes an exportable .bib file from a given set of bib
+    files and an optional list of citations. Handy for posting bib
+    entries on the net! The portability comes from substituting
+    @strings, and stripping "comment" fields if you like. Ignore the
+    -d option.
+
+    printbib - the most useful of all; this makes a dvi file from a
+    .bib file for handy reference, sorted by cite key and including
+    "keyword", "abstract", and "comment" fields. 
+
+     bib2html - produce an browsable html version of the bibliography.
+     There are lots of styles that do slightly different things. 
+     See demo.html.
+
+     citekeys - makes a list of all the cite keys (on the @ line)
+
+See the shell scripts for more documentation.
+Otherwise you're on your own. Good luck.
+
+David Kotz
+dfk at cs.dartmouth.edu
+


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/aux2bib
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/aux2bib	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/aux2bib	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,68 @@
+#!/usr/local/bin/perl -s
+#
+# take a latex AUX file and change the bibstyle to subset or subset-nocomment
+# depending on if the -c flag was given (-c means use comments), then rename
+# the modified file to references.aux, run bibtex on it, rename the file
+# references.bbl to references.bib and delete references.{aux,blg}.  This
+# results in a BibTeX file which can be shipped with the latex source of the
+# paper.  The \bibliography{} command in the latex file will need to be changed
+# to use the newly generated bibliography.
+#
+# assumes subset.bst and subset-nocomment.bst are in the input path
+#
+# V. Khera	07-AUG-1992
+# khera at cs.duke.edu
+
+$tmpfile = "refs$$";
+$outfile = "references.bib";
+
+$SIG{'INT'} = 'handler';
+$SIG{'QUIT'} = 'handler';
+$SIG{'TERM'} = 'handler';
+$| = 1;				# make sure output is flushed after print.
+
+sub handler {
+  local($sig) = @_;
+  print "Got a SIG$sig -- cleaning up\n";
+  &cleanup;
+  exit 1;
+}
+
+sub cleanup {
+  unlink <$tmpfile.*>;
+}
+
+$bibstyle = defined($c) ? "subset" : "subset-nocomment";
+
+die "usage: $0 [-c] <auxfile>\n" unless $#ARGV == 0;
+
+$infile = shift;
+
+# canonicalize the name to end i .aux. assumes file is in current directory,
+# even though a path may have been specified.  tough noogies, i say!
+$infile =~ s#(.*/)?([^.]*).*#\2.aux#;
+
+die "No such file $infile\n" unless -f $infile;
+
+open(INF,$infile) || die "Cannot read $infile\n";
+ at auxdata = <INF>;		# slurp the whole file in
+close(INF);
+
+# create a new AUX file with subset bibstyle specified.
+ at result = grep(m/(\\citation|\\bibdata).*/ , @auxdata);
+die "No citations or data files specified in $infile\n" unless @result;
+push(@result,"\\bibstyle{$bibstyle}\n");
+
+open (OUTF,">$tmpfile.aux") || die "Cannot create temp file\n";
+print OUTF @result;
+close(OUTF);
+
+print "Running bibtex...\n";
+
+$result = system "bibtex $tmpfile";
+die "Error running bibtex\n" unless ($result >> 8) == 0;
+rename ("$tmpfile.bbl", $outfile);
+
+print "Output is in $outfile\n";
+
+&cleanup;

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/bib.html
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/bib.html	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/bib.html	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,37 @@
+<HTML>
+<HEAD><TITLE> Bibliography </TITLE></HEAD>
+<BODY BGCOLOR=#EEEEEE>
+<DL>
+
+<DT><A NAME="kotz:addrtrace"
+  HREF="file://cs.dartmouth.edu/pub/CS-papers/Kotz/kotz:addrtrace.ps.Z">
+  [KC94]</A></DT>
+<DD>
+David Kotz and Preston Crow.
+<STRONG>The expected lifetime of ``single-address-space'' operating
+  systems</STRONG>.
+In <EM>Proceedings of the 1994 ACM Sigmetrics Conference on Measurement and
+  Modeling of Computer Systems</EM>, pages 161-170, May 1994.
+</DD>
+
+<DT> <A NAME="kotz:pools"> [KE89]</A> </DT>
+<DD>
+David Kotz and Carla Ellis.
+<STRONG>Evaluation of concurrent pools</STRONG>.
+In <EM>Proceedings of the Ninth International Conference on Distributed
+  Computer Systems</EM>, pages 378-385, 1989.
+</DD>
+
+<DT><A NAME="kotz:thesis" HREF="file://cs.duke.edu/dist/theses/kotz/kotz.ps.Z">
+  [Kot91]</A></DT>
+<DD>
+David Kotz.
+<STRONG>Prefetching and Caching Techniques in File Systems for MIMD
+  Multiprocessors</STRONG>.
+PhD thesis, Duke University, April 1991.
+Available as technical report CS-1991-016.
+</DD>
+
+</DL>
+</BODY>
+</HTML>


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/bib.html
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/bib2html
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/bib2html	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/bib2html	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,271 @@
+#!/usr/bin/perl
+#
+# bib2html - make an html file that is equivalent to the bib files,
+#   using one of the html bib styles
+#
+# usage: 
+$usage = "usage: $0 {alpha|index|long|longp|long-pario|short|short-pario|cv} [-o <outfile>] file.bib...\
+OR \
+$0 [ {alpha|index|long|longp|long-pario|short|short-pario|cv} ] [-o <outfile>] -a file.aux";
+# Output is to bib.html. 
+#    alpha makes a bibliography like bibstyle{alpha}
+#    long makes a bibliography like bibstyle{abstract}
+#    short makes a bibliography like bibstyle{alpha}, but with citekey for tags
+#    cv lists title first, does not print key, does not sort
+#	(useful for listing your papers on your home page)
+#
+# David Kotz 7/94
+# dfk at cs.dartmouth.edu
+
+# updated Dan Gildea 1/2003:
+#  . now handles nested \bf \em etc correctly
+#  . added some more accents
+#  . new -a file.aux usage to use existing .aux file, useful to 
+#	list only papers cited by a given latex document
+# http://www.cs.rochester.edu/~gildea/
+
+# updated 2/2004, thanks to Juergen Vollmer
+#  a) allowing \emph{..}, \texttt{...} and \textbf{..}
+#  b) setting the environment variable BSTINPUTS to directory from $0
+#  c) if run on existing .aux file, bibstyle is now optional on the command line.
+#	if not bib style nor specified on command line, uses the html version
+#	of bib style from original document.
+
+use File::Basename;
+use File::Spec::Functions;
+
+$tmp = "/tmp/bib2html$$";
+
+my $cmd_dir   = catfile (dirname ($0),
+			 dirname ((defined readlink($0)) ? readlink($0) : $0));
+
+$ENV{BSTINPUTS} .= ":$cmd_dir";
+
+if ( scalar(@ARGV) < 2 ) {
+    die "$usage\n";
+}
+
+
+## pick up the args
+my %Opts;			# will hold the option values
+
+if ($ARGV[0] !~ /^-/) {
+    $Opts{style} = shift @ARGV;
+}
+while ($ARGV[0] =~ /^-/) {
+    $tmpArg = shift @ARGV;
+    if ($tmpArg eq "-o" ) {
+	$Opts{outfile} = shift @ARGV;
+    } elsif ($tmpArg eq "-a" ) {
+   	$Opts{auxfile} = shift @ARGV; 
+    }
+}
+
+$Opts{outfile} = "bib.html" if ( !defined ($Opts{outfile}) );
+
+$SIG{INT} = \&cleanup;
+
+print "Creating $tmp.aux for $files\n";
+open AUX, ">$tmp.aux";
+
+if ($Opts{auxfile}) {
+    system "ls";
+    open(AUXIN, $Opts{auxfile}) || die "could not open $Opts{auxfile}";
+    while (<AUXIN>) {
+	# if style not specified on command line, use html version
+	# of style specified in .aux file
+	s/^\\bibstyle\{([^\}]*)\}/"\\bibstyle{html-".($Opts{style}||$1)."}"/e;
+	print AUX;
+    }
+} else {
+    if (!defined $Opts{style}) {
+	die "bib style not defined";
+    }
+    ## get all the remaining file names
+    my $files = killSuffix ( shift @ARGV );
+    foreach $file ( @ARGV ) {
+	$files .= ',';	# make sure the list is comma delimited, bibtex needs it
+	$files .= killSuffix ($file);
+    }
+
+
+## need double slashes here to go around slash interpretation
+## only one is printed
+    print AUX <<EOF;
+\\relax 
+\\citation{*}
+\\bibstyle{html-$Opts{style}}
+\\bibdata{$files}
+EOF
+}
+close AUX;
+    
+unlink <$tmp.{bbl,blg}>;
+
+if (-r "html-split.bst.gz" ) {
+    system ( "gunzip html-split.bst.gz" );
+}
+
+print "bibtex $tmp\n";
+
+system "bibtex $tmp";
+
+print "Bibtex done\n\n";
+
+
+## -------------------------------------------------------------------
+## the cleanup operation
+open BBL, "$tmp.bbl";
+open OUT, ">$Opts{outfile}";
+
+## stack of formatted text types that were started and did not finish on teh same line
+## elements are em, tt or b or i and when a candidate for a format-closing brace is found
+## this stack will be popped to see which format we have to close
+my @formatsToClose;
+
+while ( <BBL> ) { 
+
+
+    ## accent handlers
+    ## these are quite definite about their replacemnets and so should
+    ## come before the more generic operations later
+    ## all braces in the latex constructs are optional
+    ## info on the html codes can be found at http://www.w3.org/TR/REC-html40/
+    ## \\? is to handle latex \'\i which you do to put acute on i without dot
+    s/\\ \` (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )?
+          /&$1grave;/gx;	# grave accent
+    s/ \\ \' (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )?
+          /&$1acute;/gx;	# 'acute accent
+    s/ \\ \^ (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )?
+          /&$1circ;/gx;		# circumflex
+    s/ \\ \" (?: \{ )? \\? ([aeiouyAEIOUY]) (?: \} )?
+          /&$1uml;/gx;		# "umlaut
+    s/ \\ \~ (?: \{ )? \\? ([anoANO]) (?: \} )?
+          /&$1tilde;/gx;	# tilde
+    s/ \\ c (?: \{ )? ([cC]) (?: \} )?
+          /&$1cedil;/gx;	# cedilla
+    s/ \\ [v\'] (?: \{ )? ([cC]) (?: \} )?
+          /$1/gx;		# no html code for czech hook
+    s/ \{? \\[s\"]s \}?
+          /ß/gx;          # german Scharf-S
+
+    ## several weird symbols
+    s/ \\copyright
+	/©/gx;
+    s/ \\pounds
+	/£/gx;
+    
+    ## weirder symbols
+    s/ \\ (ae|AE)
+	/&$1lig;/gx;
+    s/ \\ (o|O)
+	/&$1slash;/gx;
+    s/ \\ss
+	/ß/gx;
+
+    ## greek letters, case insensitive matching, but upper case in latex and
+    ## html have the first letter of the english word capitalized
+    s/ \\ (?: var )? (alpha|beta|gamma|delta|epsilon|theta|lambda|pi|rho|sigma|omega)
+	/&$1;/gxi;
+
+    ## remove any \/ space-increasing symbols
+    s+ ([^\\]) \\ \/
+	+$1+gx;
+
+    s+ \\ \ + +gx;
+
+    ## deal with \cite stuff, change it to a link to a record the same html file
+    s+ ([^\\]) \\cite\{ (.*?) \}
+        +$1<a href="#$2">$2</a>+xg;
+
+    ## These rules are to deal with my (DFK) macros
+    s/\\ie/i.e./g;
+    s/\\eg/e.g./g;
+    s/\\etc/etc./g;
+    s+\\vs\\+<EM>vs.</EM>+g;
+    s/\\usec/usec/g;
+    s/\\mbox //g;
+    s/\\par / <P> /g;
+    s/\\par$/ <P>/g;
+
+
+    s/\\\&/\&/g;		# ampersand
+
+    s/-{2,3}/-/g;		# multiple dashes
+
+# a few rules are needed to compensate for BibTeXs way of splitting
+# long words over two lines by sticking a % (TeX comment character) at
+# the end of the line.  This works when one word (usually a URL) is
+# split over more than one line. 
+    ## if we have an unescaped % at the end of the line, remove it and the newline and
+    ## join the next line on
+    ## example straight out of the camel book, pg 204. amazing
+    if ( s/ ([^\\]) \% \n$ /$1/x and $nextline = <BBL> ) {
+	$_ .= $nextline;
+	redo;			# back to the top
+    }
+
+# hyphenation characters should be removed
+    s+\\-++g;
+
+# tildes -
+#         tilde not preceded by \ or / is a nbsp
+#         \~{} is ~ (likely in a URL)
+#         all other tildes left alone, notably /~ (URL)
+    s+ ([^\\/]) ~ +$1 +xg;	# normal standalone tilde - nbsp
+    s/ \\~ \{\} /~/xg;		# \~{} to ~ - do before removing braces below
+
+    ## --------------------------------------------------------
+    ## deal with em and tt and bf text surrounded by braces
+    ## deal with \emph{..}, \texttt{...} and \textbf{..}
+
+    ## the fancy groupings around the em etc are because in html bold font is not 'bf'
+    ## but just b and italic is i not 'it' so we have to pick out only a part of those
+    ## latex tags
+    ## final |\w+ is to skip over \rm or any other commands we don't handle
+    ## also removes braces with no command
+
+    while ( /(text(b)f|text(tt)|(em)ph)?([\{\}])/ ) {
+	if (defined $1) {
+	    my $cmd = "$1";
+	    my $fmt = $2 || $3 || $4;
+	    s/\\$cmd\{/<$fmt>/;
+	    push ( @formatsToClose, $fmt )
+	} elsif ($5 eq '{') {
+	    ## beginning of format
+	    s/ \{ (?: \\ (?: (em)|(b)f|(tt)|(i)t|\w+ ) )? \s* 
+		/ ( $format = $1 or $2 or $3 or $4  ) ? "<$format>" : '' /ex ;
+	    ## push the format to be closed onto the stack (may be nothing)
+	    push ( @formatsToClose, $format ) 
+	} else {
+	    ## pop format to close from stack
+	    s+ \s*\}
+	    + ( $format = pop (@formatsToClose) ) ? "</$format>" : '' +ex  ;
+	}
+    }
+
+    ## --------------------------------------------------------
+
+    ##retrieve symbols escaped by backslashes
+    my $escapedChars = quotemeta ( '#$%&_{}' );
+    s/ ([^\\]) \\ ([$escapedChars]) 
+        /$1$2/gxo;
+
+    print OUT $_;
+}
+
+
+print "\n";
+print "\noutput is in $Opts{outfile}\n";
+
+cleanup();
+
+sub killSuffix {
+    $file = shift();
+    ( $name, $path ) = fileparse ( $file, '\.[^.]*$' ); # the pattern indicates what a suffix looks like
+    return ($path . $name);
+}
+
+sub cleanup {
+    unlink ( glob ("$tmp.{aux,bbl,blg}") );
+}

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/bibify
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/bibify	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/bibify	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,37 @@
+#!/bin/csh -f
+
+if ($1 !~ *.aux) then
+    set input=$1.aux
+    set bbl = $1.bbl
+else
+    set input=$1
+    set bbl=$1:r.bbl
+endif
+
+set file=/tmp/bibify$$
+onintr clean
+
+cat $input > $file
+
+set style=`sed -n 's/\\bibstyle{\(.*\)}/\1/p' $input`
+
+switch($style)
+case "alpha":
+case "abstract":
+ cat $bbl | sed -n 's/bibitem\[\(.*\)\]{\(.*\)}/bibcite{\2}{\1}/p' >> $file
+ breaksw
+case "plain":
+case "unsrt":
+case "abbrv":
+ cat $bbl | sed -n 's/bibitem/bibcite/p'| awk '{print $1"{"NR"}"}' >> $file
+ breaksw
+default:
+ echo unknown bibliography style, cannot bibify.
+ goto clean
+endsw
+
+mv $file $input
+
+clean:
+/bin/rm -f $file.* >& /dev/null
+

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,56 @@
+#!/bin/csh -f
+# 
+# bibkey - look for a word in the keyword field
+# in the references in a BiBTeX file. A restricted form of looktex, in
+# that bibkey only looks at "keyword" fields of the entries.
+#
+# David Kotz (dfk at cs.dartmouth.edu)
+#
+# usage: 
+#  bibkey keyword file...
+#
+# Warning: Any characters in keyword that have meanings in regexps
+# used by either sed or egrep must be escaped with a \ (the most 
+# likely occurrence might be \ itself: use \\). Case is ignored in 
+# the search.
+#
+# Multiple keywords may be specified with an egrep alternation format:
+# eg  bibkey 'jones|smith' foo.bib
+#
+# Actually, any egrep expression is allowed. 
+# Be sure to quote it properly. 
+#
+
+set L=~/lib
+
+if ($#argv < 2) then
+    echo usage: bibkey keyword 'file...'
+    exit 1
+endif
+
+set keyword=`echo "$1" | tr A-Z a-z`
+shift
+
+set script=/tmp/bibkey$$
+onintr cleanup
+
+# Search for the keyword and get a script for extracting the
+# references:
+#  Cat the files
+#  Strip comment lines and comments on lines
+#  Translate to lower case (needs to precede sed and egrep)
+#  Extract the keyword entries, plus number for lines with @
+#  Search for the keyword
+#  Convert this output into a sed script
+cat $* \
+    | sed -e 's/^%.*//' -e 's/\([^\\]\)%.*/\1/' \
+    | tr A-Z a-z \
+    | sed -n -f $L/bibkey.sed \
+    | egrep '^[0-9]*$|'"($keyword)" \
+    | awk -f $L/bibkey.awk > $script
+
+# Now have sed print out the correct entries:
+cat $* | sed -n -f $script 
+
+cleanup:
+rm -f $script

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,33 @@
+# bibkey.awk 
+#
+# Goes with bin/bibkey - look for a word in the keyword entry 
+#
+# David Kotz (dfk at cs.dartmouth.edu)
+#
+# On stdin, we get a list of line numbers of the beginning of entries
+# (in the concatenated bibtex input) and the text of lines from keyword
+# entries  that have the keyword in them.
+#
+# On stdout, we produce a sed script for printing entries that had a
+# match in them somewhere. This is a list of lines like "A,Bp" where A
+# and B are line numbers.
+
+BEGIN {found=0; last=1}
+
+{
+# test: is line a number?
+    if ($1+0 > 0) {
+	       if (found) {
+	              print last "," $1-1 "p";
+	              found=0
+	       }
+	       last=$1
+    } else {
+	   found = 1
+    }
+}
+
+END {
+    if (found)
+        print last ",$p";
+}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.awk
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,32 @@
+# bibkey.sed
+#
+# Goes with bin/bibkey - look for a word in the keyword entry 
+#
+# David Kotz (dfk at cs.dartmouth.edu)
+#
+# On stdin, we get a lowercased bibtex file with comments stripped.
+#
+# On stdout, we produce a list of line numbers that are the starting
+# line number of each reference, and the text of all "keyword"
+# entries on separate lines.
+
+# the idea is to get @ line numbers and all keywords
+# @ entry
+/^[ 	]*@.*/=
+# one-line keyword entry
+s/[ 	]*keyword[ 	]*=[ 	]*"\(.*\)".*/\1/p
+t 
+# start of multi-line keyword entry
+s/[ 	]*keyword[ 	]*=[ 	]*"\(.*\)/\1/
+t partial
+b
+# Handle multi-line keyword entry: save this line, repeatedly add
+# lines until close quote forces output
+:partial
+N
+s/\(.*\n.*\)".*/\1/
+t done
+b partial
+:done
+s/\n/ /g
+p


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/bibkey.sed
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,22 @@
+;; these are things I put in my .emacs
+;; David Kotz dfk at cs.dartmouth.edu
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Add bibtex mode
+(autoload 'bibtex-mode "bibtex" "Bibtex mode" t)
+; and redefine some of the key bindings
+; and add my favorite extra fields 
+(setq bibtex-mode-hook
+   '(lambda ()
+;;    (define-key bibtex-mode-map "\C-c\C-\'" 'bibtex-remove-double-quotes)
+      (define-key bibtex-mode-map [?\C-c ?\C-'] 'bibtex-remove-double-quotes)
+      (define-key bibtex-mode-map "\C-c\C-eI" 'bibtex-InBook)
+      (define-key bibtex-mode-map "\C-c\C-e\C-i" 'bibtex-InProceedings)
+      (define-key bibtex-mode-map "\C-c\C-eM" 'bibtex-Manual)
+      (define-key bibtex-mode-map "\C-c\C-e\C-m" 'bibtex-Misc)
+      (setq bibtex-mode-user-optional-fields '("URL" "keyword" "private" "comment"))
+      )
+   )
+
+(setq auto-mode-alist (cons (cons "\\.bib$" 'bibtex-mode) auto-mode-alist))
+


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/bibtex-extras.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,52 @@
+#!/bin/csh -f
+#
+# citekeys - print out all the cite keys in given bib files
+#
+# usage: 
+#    citekeys file.bib... 
+#
+
+onintr cleanup
+
+if ($#argv < 1) then
+	   echo 'usage: citekeys file.bib...'
+	   exit 1
+endif
+
+unset files
+foreach i ($*)
+	if ($i:e == bib) then
+ 		set file=$i:r
+	else
+ 		set file=$i
+	endif
+	
+	if ($?files) then
+		set files=($files,$i)
+	else
+		set files=($file)
+	endif
+end
+
+echo creating citekeys.aux for $files
+
+cat > citekeys.aux <<EOF
+\relax 
+\citation{*}
+\bibstyle{citekeys}
+\bibdata{$files}
+EOF
+
+rm -f citekeys.{log,dvi,bbl,blg}
+
+echo bibtex citekeys
+bibtex citekeys
+
+mv citekeys.bbl citekeys.out
+
+echo ""
+echo output is in citekeys.out
+
+cleanup:
+rm -f citekeys.{tex,aux,log,dvi,bbl,blg}
+

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,60 @@
+% BibTeX bibliography style `citekeys 
+% by David Kotz dfk at cs.dartmouth.edu
+% March 1994
+% modified (distantly) from
+  %   BibTeX standard bibliography style `alpha'
+	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+	% Copyright (C) 1985, all rights reserved.
+	% Copying of this file is authorized only if either
+	% (1) you make absolutely no changes to your copy, including name, or
+	% (2) if you do make changes, you name it something other than
+	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+	% This restriction helps ensure that all standard styles are identical.
+	% The file btxbst.doc has the documentation for this style.
+
+ENTRY { author } {} {}
+
+FUNCTION {article} {}
+FUNCTION {book} {}
+FUNCTION {booklet} {}
+FUNCTION {inbook} {}
+FUNCTION {incollection} {}
+FUNCTION {inproceedings} {}
+FUNCTION {conference} {}
+FUNCTION {manual} {}
+FUNCTION {mastersthesis} {}
+FUNCTION {misc} {}
+FUNCTION {phdthesis} {}
+FUNCTION {proceedings} {}
+FUNCTION {techreport} {}
+FUNCTION {unpublished} {}
+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
+
+FUNCTION {presort}
+{ cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {cite.key.only} { cite$ write$ newline$ }
+
+ITERATE {cite.key.only}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/citekeys.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/cleantex
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/cleantex	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/cleantex	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,19 @@
+#!/bin/csh
+#
+# cleantex - clean up files related to Latex processing
+#
+# usage - cleantex [base]...
+# default is \*, ie, to remove all latex extraneous files. 
+# Otherwise, those beginning with 'base.' are removed.
+#
+# No csh -f flag so that we get safe-rm instead of rm, where appropriate.
+
+set extensions="{dvi,aux,log,toc,lof,bbl,blg,lot,inx}"
+
+if ($#argv == 0) then
+	   rm -f *~ *.$extensions
+else
+	   foreach i ($*)
+	   	   rm -f $i.tex~ $i.$extensions
+	   end
+endif

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/demo.bib
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/demo.bib	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/demo.bib	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,81 @@
+% BibTeX bibliography file
+
+ at InProceedings{kotz:addrtrace,
+  author = {David Kotz and Preston Crow},
+  title = {The Expected Lifetime of ``Single-Address-Space'' Operating
+  Systems},
+  booktitle = {Proceedings of the 1994 ACM Sigmetrics Conference on Measurement
+  and Modeling of Computer Systems},
+  year = {1994},
+  month = {May},
+  pages = {161--170},
+  URL = {file://cs.dartmouth.edu/pub/CS-papers/Kotz/kotz:addrtrace.ps.Z},
+  keyword = {operating system, wide address space, virtual memory, memory
+  management, dfk},
+  abstract = {Trends toward shared-memory programming paradigms, large (64-bit)
+  address spaces, and memory-mapped files have led some to propose the use of a
+  single virtual-address space, shared by all processes and processors. Typical
+  proposals require the single address space to contain all process-private
+  data, shared data, and stored files. To simplify management of an address
+  space where stale pointers make it difficult to re-use addresses, some have
+  claimed that a 64-bit address space is sufficiently large that there is no
+  need to ever re-use addresses. Unfortunately, there has been no data to
+  either support or refute these claims, or to aid in the design of appropriate
+  address-space management policies. In this paper, we present the results of
+  extensive kernel-level tracing of the workstations in our department, and
+  discuss the implications for single-address-space operating systems. We found
+  that single-address-space systems will not outgrow the available address
+  space, but only if reasonable space-allocation policies are used, and only if
+  the system can adapt as larger address spaces become available.}
+}
+
+ at InProceedings{kotz:pools,
+  author = {David Kotz and Carla Ellis},
+  title = {Evaluation of Concurrent Pools},
+  booktitle = {Proceedings of the Ninth International Conference on Distributed
+  Computer Systems},
+  year = {1989},
+  pages = {378--385},
+  keyword = {dfk, concurrent pool, concurrent data structure},
+  comment = {also Duke TR CS-1987-30, kotz:poolsTR}
+}
+
+ at PhdThesis{kotz:thesis,
+  author = {David Kotz},
+  title = {Prefetching and Caching Techniques in File Systems for {MIMD}
+  Multiprocessors},
+  year = {1991},
+  month = {April},
+  school = {Duke University},
+  note = {Available as technical report CS-1991-016.},
+  URL = {file://cs.duke.edu/dist/theses/kotz/kotz.ps.Z},
+  keyword = {dfk, parallel file system, prefetching, MIMD, disk caching,
+  parallel I/O, pario bib},
+  abstract = {The increasing speed of the most powerful computers, especially
+  multiprocessors, makes it difficult to provide sufficient I/O bandwidth to
+  keep them running at full speed for the largest problems. Trends show that
+  the difference in the speed of disk hardware and the speed of processors is
+  increasing, with I/O severely limiting the performance of otherwise fast
+  machines. This widening access-time gap is known as the ``I/O bottleneck
+  crisis.'' One solution to the crisis, suggested by many researchers, is to
+  use many disks in parallel to increase the overall bandwidth. This
+  dissertation studies some of the file system issues needed to get high
+  performance from parallel disk systems, since parallel hardware alone cannot
+  guarantee good performance. The target systems are large MIMD multiprocessors
+  used for scientific applications, with large files spread over multiple disks
+  attached in parallel. The focus is on automatic caching and prefetching
+  techniques. We show that caching and prefetching can transparently provide
+  the power of parallel disk hardware to both sequential and parallel
+  applications using a conventional file system interface. We also propose a
+  new file system interface (compatible with the conventional interface) that
+  could make it easier to use parallel disks effectively. Our methodology is a
+  mixture of implementation and simulation, using a software testbed that we
+  built to run on a BBN GP1000 multiprocessor. The testbed simulates the disks
+  and fully implements the caching and prefetching policies. Using a synthetic
+  workload as input, we use the testbed in an extensive set of experiments. The
+  results show that prefetching and caching improved the performance of
+  parallel file systems, often dramatically.},
+  comment = {Published as kotz:prefetch, kotz:jwriteback, kotz:jpractical,
+  kotz:fsint2.}
+}
+


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/demo.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/demo.html
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/demo.html	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/demo.html	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,83 @@
+
+<HTML>
+<HEAD><TITLE> bib2html demo </TITLE></HEAD>
+<BODY>
+
+<H1> bib2html demo </H1>
+
+<P> 
+
+<B>bib2html</B> is a combination of a shell script and two
+BibTeX-style files.  bib2html takes the name of a style and a list of
+.bib file names, and runs BibTeX to produce an output file bib.html.
+This demo page assumes that you have run either
+<CODE> bib2html alpha demo.bib </CODE>
+or 
+<CODE> bib2html abstract demo.bib, </CODE> 
+and that the output 
+<A HREF="bib.html"> bib.html </A>
+remains in the same directory as this
+file.  (Note: the abstracting style will often produce some warning
+messages from bibtex if the abstracts or comments are too long, but
+the resulting HTML is still usable.)
+</P>
+
+<P> 
+
+One of the neat things about bib2html is that you can put a <EM> URL
+</EM> field in your bib entries, and that URL will be used to make the
+entry's label into a Web link.  Usually, the URL would point to the
+paper itself (e.g., compressed postscript in an ftp archive, or
+perhaps even an HTML-format paper), but it could of course point to
+anything.  Thus you can expand your idea of what bib entries might
+reference....
+
+</P>
+
+<P> 
+
+One of the other neat things about bib2html is that you can put
+citations to the bibliography in other pages, much like you can in
+LaTeX.  The difference is that the citations are <EM>links</EM> to the
+bibliography page.  For example, I can refer one of my recent papers
+in the demo bibliography
+
+<A HREF="bib.html#kotz:addrtrace"> [KC94b]. </A> 
+(View the source of this page to see how it's done).  That one has the
+paper's text on-line.  My PhD thesis is
+<A HREF="bib.html#kotz:thesis"> [Kot91]. </A> 
+Another paper does not have any on-line version
+<A HREF="bib.html#kotz:pools"> [KE89]. </A> 
+
+</P>
+
+<P>
+
+Notice that I use the cite key for the anchor label, rather than the
+label chosen by BibTeX.  This has two main benefits: it makes the
+citation (URL) more like that in LaTeX, and it makes the citation
+independent of the format of the bibliography page (and the way it
+chooses labels).
+
+</P>
+
+<P>
+
+One disadvantage is that there is no way to automatically generate the
+citation labels at the point of reference, like BibTeX's
+cross-referencing capability.  Another disadvantage is that bib2html
+doesn't understand arbitrary LaTeX commands.  Although it converts
+most accents, \bf, \em, etc to HTML, 
+any fancier embedded LaTeX or TeX commands are just
+passed through.  If you need a pretty bibliography,
+you'll have to edit those by hand.
+
+</P>
+
+<A HREF="http://www.ctan.org/tex-archive/biblio/bibtex/utils/bibtools/">bib2html source</A>.
+
+<HR>
+
+-- David Kotz
+</BODY>
+</HTML>


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/demo.html
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,1286 @@
+% BibTeX bibliography style `html-alpha' 
+%   spits out HTML-formatted bibliography in place of bbl output
+% by David Kotz dfk at cs.dartmouth.edu
+% $Id: html-alpha.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $
+%    modified from
+% BibTeX standard bibliography style `alpha'
+	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+	% Copyright (C) 1985, all rights reserved.
+	% Copying of this file is authorized only if either
+	% (1) you make absolutely no changes to your copy, including name, or
+	% (2) if you do make changes, you name it something other than
+	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+	% This restriction helps ensure that all standard styles are identical.
+	% The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword, url
+ENTRY
+  { abstract
+    address
+    author
+    booktitle
+    chapter
+    comment
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block}
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	}
+	{ output.state before.all =
+	     'write$
+	     { add.period$ " " * write$ }
+	    if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+  URL empty$
+    { "<DT> <A NAME=" quote$ * cite$ * quote$ *
+	"> [" * label * "]</A> </DT>" * write$
+    }
+    { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * 
+	URL * quote$ * "> [" * label * "]</A></DT>" * write$
+    }
+  if$
+  newline$
+  "<DD>" write$ newline$
+  ""
+  before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+  "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<EM>" swap$ * "</EM>" * }
+  if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<STRONG>" swap$ * "</STRONG>" * }
+  if$
+}
+
+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 {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ ", editors" * }
+	{ ", editor" * }
+      if$
+    }
+  if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ strong }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+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$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+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 {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pages" pages n.dashify tie.or.space.connect }
+	{ "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ":" * pages n.dashify * }
+      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$ note 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$
+  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
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+	{ organization publisher new.sentence.checkb
+	  organization output
+	  publisher output
+	  format.date "year" output.check
+	}
+	{ address output.nonnull
+	  format.date "year" output.check
+	  new.sentence
+	  organization output
+	  publisher output
+	}
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+	'skip$
+	{ organization output.nonnull
+	  address output
+	}
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+	{ address new.block.checka
+	  address output
+	}
+	'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+	{ publisher new.sentence.checka }
+	{ organization publisher new.sentence.checkb
+	  organization output
+	}
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+	'skip$
+	{ organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+% DFK changed {\etalchar{+}} to + for HTML
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #1 >
+    { numnames #4 >
+	{ #3 'namesleft := }
+	{ numnames 'namesleft := }
+      if$
+      #1 'nameptr :=
+      ""
+	{ namesleft #0 > }
+	{ nameptr numnames =
+	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+		{ "+" *
+		  #1 'et.al.char.used :=
+		}
+		{ s nameptr "{v{}}{l{}}" format.name$ * }
+	      if$
+	    }
+	    { s nameptr "{v{}}{l{}}" format.name$ * }
+	  if$
+	  nameptr #1 + 'nameptr :=
+	  namesleft #1 - 'namesleft :=
+	}
+      while$
+      numnames #4 >
+	{ "+" *
+	  #1 'et.al.char.used :=
+	}
+	'skip$
+      if$
+    }
+    { s #1 "{v{}}{l{}}" format.name$
+      duplicate$ text.length$ #2 <
+	{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+	'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+	{ cite$ #1 #3 substring$ }
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { cite$ #1 #3 substring$ }
+	    { key #3 text.prefix$ }
+	  if$
+	}
+	{ editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+	'editor.key.organization.label
+	{ type$ "manual" =
+	    'author.key.organization.label
+	    'author.key.label
+	  if$
+	}
+      if$
+    }
+  if$
+  duplicate$
+  year field.or.null purify$ #-1 #2 substring$
+  *
+  'label :=
+  year field.or.null purify$ #-1 #4 substring$
+  *
+  sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ calc.label
+  sort.label
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  *
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  label extra.label * 'label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+  "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+	       "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+  "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+  "</DL>" write$ newline$
+  "</BODY>" write$ newline$
+  "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/html-alpha.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,1330 @@
+%% File: `html-cv.bst'
+%% for use with bib2html to print HTML bibliography
+%%
+%% Prints title first, rather than author - useful for listing 
+%%  your papers on your homepage/cv.
+%% Uses URL field to provide href link for title.
+%% Omits organization and publisher for conference proceedings.
+%% Does not sort output - preserves order of input file.
+%% $Id: html-cv.bst,v 1.3 2003/01/10 20:43:52 dgildea Exp $	
+
+%  by Dan Gildea (http://www.cis.upenn.edu/~dgildea/), modified from
+%% plainnat.bst:
+%% A modification of `plain.bst' for use with natbib package 
+%% Copyright 1993-1999 Patrick W Daly
+%% Max-Planck-Institut f\"ur Aeronomie
+%% Max-Planck-Str. 2
+%% D-37191 Katlenburg-Lindau
+%% Germany
+%% E-mail: daly at linmpi.mpg.de
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    isbn
+    issn
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    url
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label short.list }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.header}
+{ write$
+  newline$
+  before.all 'output.state :=
+}
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+          newline$
+        }
+        { output.state before.all =
+            'write$
+            { add.period$ " " * write$ }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+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 {format.key}
+{ empty$
+    { key field.or.null }
+    { "" }
+  if$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+        { ", editors" * }
+        { ", editor" * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.isbn}
+{ isbn empty$
+    { "" }
+    { new.block "ISBN " isbn * }
+  if$
+}
+
+FUNCTION {format.issn}
+{ issn empty$
+    { "" }
+    { new.block "ISSN " issn * }
+  if$
+}
+
+FUNCTION {format.url}
+{ url empty$
+    { "" }
+    { new.block "URL \url{" url * "}" * }
+  if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { URL empty$
+      { "<LI> <A NAME=" quote$ * cite$ * quote$ * 
+	  ">" * title * "</A>, " *
+      }
+      { "<LI><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * 
+	  URL * quote$ * ">" * title * "</A>, " * 
+      }
+      if$ }
+  if$
+}
+
+FUNCTION {format.full.names}
+{'s :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{vv~}{ll}" 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 {author.editor.full}
+{ author empty$
+    { editor empty$
+        { "" }
+        { editor format.full.names }
+      if$
+    }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {author.full}
+{ author empty$
+    { "" }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {editor.full}
+{ editor empty$
+    { "" }
+    { editor format.full.names }
+  if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.full
+    { type$ "proceedings" =
+        'editor.full
+        'author.full
+      if$
+    }
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ year duplicate$ empty$
+    { "empty year in " cite$ * warning$
+       pop$ "" }
+    'skip$
+  if$
+  month empty$
+    'skip$
+    { month
+      " " * swap$ *
+    }
+  if$
+  extra.label *
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+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 {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+        { "pages" pages n.dashify tie.or.space.connect }
+        { "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+        { pop$ format.pages }
+        { ":" * pages n.dashify * }
+      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$ note 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$
+  " \citep{" * crossref * "}" *
+}
+
+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$
+    }
+    'skip$
+  if$
+  ", \citet{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  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 " }
+  if$
+  " \citet{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.title output.header
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  format.issn output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  format.btitle output.header
+  author empty$
+    { format.editors "author and editor" output.check
+      editor format.key output
+    }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  format.isbn output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.title output.header
+  format.authors output
+  author format.key output
+  new.block
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  format.isbn output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  format.btitle output.header
+  author empty$
+    { format.editors "author and editor" output.check
+      editor format.key output
+    }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  format.isbn output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.title output.header
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  format.isbn output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.title output.header
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+        { organization publisher new.sentence.checkb
+          organization output
+          publisher output
+          format.date "year" output.check
+        }
+        { address output.nonnull
+          format.date "year" output.check
+          new.sentence
+          %organization output
+          %publisher output
+        }
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  format.isbn output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  format.btitle output.header
+  format.authors output
+  author format.key output
+  new.block
+  organization address new.block.checkb
+  organization output
+  address output
+  format.edition output
+  format.date output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.title output.header
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.title output.header
+  format.authors output
+  author format.key output
+  title howpublished new.block.checkb
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  format.issn output
+  
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.btitle output.header
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  format.btitle output.header
+  format.editors output
+  editor format.key output
+  new.block
+  format.bvolume output
+  format.number.series output
+  address output
+  format.date "year" output.check
+  new.sentence
+  organization output
+  publisher output
+  format.isbn output
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.title output.header
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.title output.header
+  format.authors "author" output.check
+  author format.key output
+  new.block
+  
+  new.block
+  note "note" output.check
+  format.date output
+  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"}
+
+
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s #1 "{vv~}{ll}" format.name$
+  s num.names$ duplicate$
+  #2 >
+    { pop$ " et~al." * }
+    { #2 <
+        'skip$
+        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            { " et~al." * }
+            { " and " * s #2 "{vv~}{ll}" format.name$ * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+        { cite$ #1 #3 substring$ }
+        'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { cite$ #1 #3 substring$ }
+            'key
+          if$
+        }
+        { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+        { organization empty$
+            { cite$ #1 #3 substring$ }
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+        { organization empty$
+            { cite$ #1 #3 substring$ }
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        'key
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        'editor.key.organization.label
+        { type$ "manual" =
+            'author.key.organization.label
+            'author.key.label
+          if$
+        }
+      if$
+    }
+  if$
+  'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+  short.list
+  "("
+  *
+  year duplicate$ empty$
+  short.list key field.or.null = or
+     { pop$ "" }
+     'skip$
+  if$
+  *
+  'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+        { "   " * }
+        'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+        { "et al" * }
+        { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+        { "to sort, need author or key in " cite$ * warning$
+          ""
+        }
+        { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { "to sort, need author, editor, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need author, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need editor, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ calc.label
+  label sortify
+  "    "
+  *
+  year field.or.null sortify
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.label :=
+  sort.label *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+% not sorting because want html to reflect order in latex doc
+%ITERATE {presort}
+
+% not sorting because want html to reflect order in latex doc
+%SORT
+
+STRINGS { longest.label last.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num number.label }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+  #0 'number.label :=
+}
+
+FUNCTION {forward.pass}
+{ last.label label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      label 'last.label :=
+    }
+  if$
+  number.label #1 + 'number.label :=
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+  extra.label
+  duplicate$ empty$
+    'skip$
+    { "" * }
+  if$
+  'extra.label :=
+  label extra.label * 'label :=
+}
+
+EXECUTE {initialize.longest.label}
+
+%ITERATE {forward.pass}
+
+%REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label  'sort.key$ :=
+}
+
+% not sorting because want html to reflect order in latex doc
+%ITERATE {bib.sort.order}
+
+% not sorting because want html to reflect order in latex doc
+%SORT
+
+FUNCTION {begin.bib}
+{   preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "<ul>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "</ul>" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/html-cv.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/html-long.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/html-long.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/html-long.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,1356 @@
+% BibTeX bibliography style `html-long'
+%   spits out HTML-formatted bibliography in place of bbl output
+% by David Kotz dfk at cs.dartmouth.edu
+% $Id: html-long.bst,v 1.3 2004/02/25 16:20:50 gildea Exp $
+%    modified from
+% BibTeX standard bibliography style `alpha'
+	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+	% Copyright (C) 1985, all rights reserved.
+	% Copying of this file is authorized only if either
+	% (1) you make absolutely no changes to your copy, including name, or
+	% (2) if you do make changes, you name it something other than
+	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+	% This restriction helps ensure that all standard styles are identical.
+	% The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, earlier, keyword, later, URL
+% JV: the abstract etc is now part of the <dd>..</dd> section.
+
+ENTRY
+  { abstract
+    address
+    author
+    booktitle
+    chapter
+    comment
+    earlier
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    later
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	}
+	{ output.state before.all =
+	     'write$
+	     { add.period$ " " * write$ }
+	    if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+  URL empty$
+    { "<DT> <A NAME=" quote$ * cite$ * quote$ *
+	"> " * cite$ * ":</A> </DT>" * write$
+    }
+    { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+	URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+    }
+  if$
+  newline$
+  "<DD>" write$ newline$
+  ""
+  before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+  earlier empty$
+	'skip$
+	{ "<br>" write$ newline$
+	  "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+		">" * earlier * "</A>." * write$ newline$
+	}
+  if$
+  later empty$
+	'skip$
+	{ "<br>" write$ newline$
+	  "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+		">" * later * "</A>." * write$ newline$
+	}
+  if$
+  "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<EM>" swap$ * "</EM>" * }
+  if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<STRONG>" swap$ * "</STRONG>" * }
+  if$
+}
+
+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 {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ ", editors" * }
+	{ ", editor" * }
+      if$
+    }
+  if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ strong }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+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$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+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 {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pages" pages n.dashify tie.or.space.connect }
+	{ "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ":" * pages n.dashify * }
+      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$ note 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$
+  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 * "}" *
+}
+
+
+% DFK added
+% top of stack is the string we want to be a quoted paragraph
+FUNCTION {format.quotedParagraph}
+{ duplicate$ empty$
+    { skip$ }
+    { "<P><QUOTE> " swap$ * "  </QUOTE></P>" *}
+  if$
+}
+
+
+% DFK added, to support comment, private, keyword, etc
+% next-to-top is field name (eg, "Comment")
+% top is field value (eg, value of comment)
+% both are popped; resulting top is either empty,
+%    or string describing field
+FUNCTION {format.dfkfield}
+{ duplicate$ empty$
+	{ pop$ pop$ "" }
+	{ swap$
+          "<strong> " swap$ * ":</strong> " * swap$ * }
+  if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+  add.period$ write$
+  "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$
+  "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$
+  "Comment" comment format.dfkfield format.quotedParagraph write$ newline$
+  ""
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year"  output.check
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+	{ organization publisher new.sentence.checkb
+	  organization output
+	  publisher output
+	  format.date "year" output.check
+	}
+	{ address output.nonnull
+	  format.date "year" output.check
+	  new.sentence
+	  organization output
+	  publisher output
+	}
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+	'skip$
+	{ organization output.nonnull
+	  address output
+	}
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+	{ address new.block.checka
+	  address output
+	}
+	'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+	{ publisher new.sentence.checka }
+	{ organization publisher new.sentence.checkb
+	  organization output
+	}
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+	'skip$
+	{ organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  dfk.stuff
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  dfk.stuff
+  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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #1 >
+    { numnames #4 >
+	{ #3 'namesleft := }
+	{ numnames 'namesleft := }
+      if$
+      #1 'nameptr :=
+      ""
+	{ namesleft #0 > }
+	{ nameptr numnames =
+	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+		{ "{\etalchar{+}}" *
+		  #1 'et.al.char.used :=
+		}
+		{ s nameptr "{v{}}{l{}}" format.name$ * }
+	      if$
+	    }
+	    { s nameptr "{v{}}{l{}}" format.name$ * }
+	  if$
+	  nameptr #1 + 'nameptr :=
+	  namesleft #1 - 'namesleft :=
+	}
+      while$
+      numnames #4 >
+	{ "{\etalchar{+}}" *
+	  #1 'et.al.char.used :=
+	}
+	'skip$
+      if$
+    }
+    { s #1 "{v{}}{l{}}" format.name$
+      duplicate$ text.length$ #2 <
+	{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+	'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+	{ cite$ #1 #3 substring$ }
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { cite$ #1 #3 substring$ }
+	    { key #3 text.prefix$ }
+	  if$
+	}
+	{ editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+	'editor.key.organization.label
+	{ type$ "manual" =
+	    'author.key.organization.label
+	    'author.key.label
+	  if$
+	}
+      if$
+    }
+  if$
+  duplicate$
+  year field.or.null purify$ #-1 #2 substring$
+  *
+  'label :=
+  year field.or.null purify$ #-1 #4 substring$
+  *
+  sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ calc.label
+  sort.label
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  *
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+% DFK throw away stuff above and use cite$ for sort key
+  pop$
+  cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  label extra.label * 'label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+  "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+  "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+  "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+  "</DL>" write$ newline$
+  "</BODY>" write$ newline$
+  "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/html-long.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,1363 @@
+% BibTeX bibliography style `html-longp' 
+%   Spits out HTML-formatted bibliography in place of bbl output.
+%   This is different from html-long in that it also includes the
+%   "private" and "reader" fields in the output.
+% does not properly handle crossrefs.
+% by David Kotz dfk at cs.dartmouth.edu
+% $Id: html-longp.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $
+%    modified from
+% BibTeX standard bibliography style `alpha'
+	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+	% Copyright (C) 1985, all rights reserved.
+	% Copying of this file is authorized only if either
+	% (1) you make absolutely no changes to your copy, including name, or
+	% (2) if you do make changes, you name it something other than
+	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+	% This restriction helps ensure that all standard styles are identical.
+	% The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword, earlier, later, URL, private, reader
+ENTRY
+  { abstract
+    address
+    author
+    booktitle
+    chapter
+    comment
+    earlier
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    later
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    reader
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	}
+	{ output.state before.all =
+	     'write$
+	     { add.period$ " " * write$ }
+	    if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+  URL empty$
+    { "<DT> <A NAME=" quote$ * cite$ * quote$ * 
+	"> " * cite$ * ":</A> </DT>" * write$
+    }
+    { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * 
+	URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+    }
+  if$
+ 
+  newline$
+
+  "<DD>" write$ newline$
+  ""
+  before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+  earlier empty$
+	'skip$
+	{ "<br>" write$ newline$
+	  "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+		">" * earlier * "</A>." * write$ newline$
+	}
+  if$
+  later empty$
+	'skip$
+	{ "<br>" write$ newline$
+	  "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+		">" * later * "</A>." * write$ newline$
+	}
+  if$
+  "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<EM>" swap$ * "</EM>" * }
+  if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<STRONG>" swap$ * "</STRONG>" * }
+  if$
+}
+
+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 {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ ", editors" * }
+	{ ", editor" * }
+      if$
+    }
+  if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ strong }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+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$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+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 {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pages" pages n.dashify tie.or.space.connect }
+	{ "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ":" * pages n.dashify * }
+      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$ note 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$
+  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 * "}" *
+}
+
+% DFK added
+% top of stack is the string we want to be a quoted paragraph
+FUNCTION {format.quotedParagraph}
+{ duplicate$ empty$
+    { skip$ }
+    { "<P><QUOTE> " swap$ * "  </QUOTE></P>" *}
+  if$
+}
+
+
+% DFK added, to support comment, private, keyword, etc
+% next-to-top is field name (eg, "Comment")
+% top is field value (eg, value of comment)
+% both are popped; resulting top is either empty, 
+%    or string describing field
+FUNCTION {format.dfkfield}
+{ duplicate$ empty$
+	{ pop$ pop$ "" }
+	{ swap$ 
+          "<strong> " swap$ * ":</strong> " * swap$ * }
+  if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+  "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$
+  "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$
+
+  "Comment" comment format.dfkfield
+  "Private" private format.dfkfield
+  *
+  format.quotedParagraph write$ newline$
+
+  "Reader" reader format.dfkfield format.quotedParagraph write$ newline$
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+	{ organization publisher new.sentence.checkb
+	  organization output
+	  publisher output
+	  format.date "year" output.check
+	}
+	{ address output.nonnull
+	  format.date "year" output.check
+	  new.sentence
+	  organization output
+	  publisher output
+	}
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+	'skip$
+	{ organization output.nonnull
+	  address output
+	}
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+	{ address new.block.checka
+	  address output
+	}
+	'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+	{ publisher new.sentence.checka }
+	{ organization publisher new.sentence.checkb
+	  organization output
+	}
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+	'skip$
+	{ organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+  dfk.stuff
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  fin.entry
+  dfk.stuff
+}
+
+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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #1 >
+    { numnames #4 >
+	{ #3 'namesleft := }
+	{ numnames 'namesleft := }
+      if$
+      #1 'nameptr :=
+      ""
+	{ namesleft #0 > }
+	{ nameptr numnames =
+	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+		{ "{\etalchar{+}}" *
+		  #1 'et.al.char.used :=
+		}
+		{ s nameptr "{v{}}{l{}}" format.name$ * }
+	      if$
+	    }
+	    { s nameptr "{v{}}{l{}}" format.name$ * }
+	  if$
+	  nameptr #1 + 'nameptr :=
+	  namesleft #1 - 'namesleft :=
+	}
+      while$
+      numnames #4 >
+	{ "{\etalchar{+}}" *
+	  #1 'et.al.char.used :=
+	}
+	'skip$
+      if$
+    }
+    { s #1 "{v{}}{l{}}" format.name$
+      duplicate$ text.length$ #2 <
+	{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+	'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+	{ cite$ #1 #3 substring$ }
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { cite$ #1 #3 substring$ }
+	    { key #3 text.prefix$ }
+	  if$
+	}
+	{ editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+	'editor.key.organization.label
+	{ type$ "manual" =
+	    'author.key.organization.label
+	    'author.key.label
+	  if$
+	}
+      if$
+    }
+  if$
+  duplicate$
+  year field.or.null purify$ #-1 #2 substring$
+  *
+  'label :=
+  year field.or.null purify$ #-1 #4 substring$
+  *
+  sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ calc.label
+  sort.label
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  *
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+% DFK throw away stuff above and use cite$ for sort key
+  pop$
+  cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  label extra.label * 'label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+  "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+  "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+  "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+  "</DL>" write$ newline$
+  "</BODY>" write$ newline$
+  "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/html-longp.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/html-short.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/html-short.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/html-short.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,1305 @@
+% BibTeX bibliography style `html-short' 
+%   spits out HTML-formatted bibliography in place of bbl output
+% by David Kotz dfk at cs.dartmouth.edu
+% $Id: html-short.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $
+%    modified from
+% BibTeX standard bibliography style `alpha'
+	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+	% Copyright (C) 1985, all rights reserved.
+	% Copying of this file is authorized only if either
+	% (1) you make absolutely no changes to your copy, including name, or
+	% (2) if you do make changes, you name it something other than
+	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+	% This restriction helps ensure that all standard styles are identical.
+	% The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, earlier, keyword, later, URL
+ENTRY
+  { abstract
+    address
+    author
+    booktitle
+    chapter
+    comment
+    earlier
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    later
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block}
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	}
+	{ output.state before.all =
+	     'write$
+	     { add.period$ " " * write$ }
+	    if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+  URL empty$
+    { "<DT> <A NAME=" quote$ * cite$ * quote$ *
+	"> " * cite$ * ":</A> </DT>" * write$
+    }
+    { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * 
+	URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+    }
+  if$
+  newline$
+  "<DD>" write$ newline$
+  ""
+  before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  earlier empty$
+	'skip$
+	{ "<br>" write$ newline$
+	  "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+		">" * earlier * "</A>." * write$ newline$
+	}
+  if$
+  later empty$
+	'skip$
+	{ "<br>" write$ newline$
+	  "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+		">" * later * "</A>." * write$ newline$
+	}
+  if$
+  "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<EM>" swap$ * "</EM>" * }
+  if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<STRONG>" swap$ * "</STRONG>" * }
+  if$
+}
+
+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 {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ ", editors" * }
+	{ ", editor" * }
+      if$
+    }
+  if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ strong }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+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$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+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 {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pages" pages n.dashify tie.or.space.connect }
+	{ "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ":" * pages n.dashify * }
+      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$ note 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$
+  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
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+	{ "author and editor" editor either.or.check }
+	'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+	{ organization publisher new.sentence.checkb
+	  organization output
+	  publisher output
+	  format.date "year" output.check
+	}
+	{ address output.nonnull
+	  format.date "year" output.check
+	  new.sentence
+	  organization output
+	  publisher output
+	}
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+	'skip$
+	{ organization output.nonnull
+	  address output
+	}
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+	{ address new.block.checka
+	  address output
+	}
+	'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+	{ publisher new.sentence.checka }
+	{ organization publisher new.sentence.checkb
+	  organization output
+	}
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+	'skip$
+	{ organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+% DFK changed {\etalchar{+}} to + for HTML
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #1 >
+    { numnames #4 >
+	{ #3 'namesleft := }
+	{ numnames 'namesleft := }
+      if$
+      #1 'nameptr :=
+      ""
+	{ namesleft #0 > }
+	{ nameptr numnames =
+	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+		{ "+" *
+		  #1 'et.al.char.used :=
+		}
+		{ s nameptr "{v{}}{l{}}" format.name$ * }
+	      if$
+	    }
+	    { s nameptr "{v{}}{l{}}" format.name$ * }
+	  if$
+	  nameptr #1 + 'nameptr :=
+	  namesleft #1 - 'namesleft :=
+	}
+      while$
+      numnames #4 >
+	{ "+" *
+	  #1 'et.al.char.used :=
+	}
+	'skip$
+      if$
+    }
+    { s #1 "{v{}}{l{}}" format.name$
+      duplicate$ text.length$ #2 <
+	{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+	'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+	{ cite$ #1 #3 substring$ }
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { cite$ #1 #3 substring$ }
+	    { key #3 text.prefix$ }
+	  if$
+	}
+	{ editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+	{ organization empty$
+	    { cite$ #1 #3 substring$ }
+	    { "The " #4 organization chop.word #3 text.prefix$ }
+	  if$
+	}
+	{ key #3 text.prefix$ }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+	'editor.key.organization.label
+	{ type$ "manual" =
+	    'author.key.organization.label
+	    'author.key.label
+	  if$
+	}
+      if$
+    }
+  if$
+  duplicate$
+  year field.or.null purify$ #-1 #2 substring$
+  *
+  'label :=
+  year field.or.null purify$ #-1 #4 substring$
+  *
+  sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ calc.label
+  sort.label
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  *
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+% DFK throw away stuff above and use cite$ for sort key
+  pop$
+  cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  label extra.label * 'label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+  "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+  "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+  "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+  "</DL>" write$ newline$
+  "</BODY>" write$ newline$
+  "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/html-short.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/looktex
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/looktex	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/looktex	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,53 @@
+#!/bin/csh -f
+# looktex - look for a keyword in the references in a BiBTeX file.
+#
+# David Kotz (dfk at cs.dartmouth.edu)
+#
+# usage: 
+#  looktex keyword file...
+#
+# Warning: Any characters in keyword that have meanings in regexps
+# used by either sed or egrep must be escaped with a \ (the most 
+# likely occurrence might be \ itself: use \\). Case is ignored in 
+# the search, as well as position in the reference.
+#
+# Multiple keywords may be specified with an egrep alternation format:
+# eg  looktex 'jones|smith' foo.bib
+#
+# Actually, any egrep expression is allowed. 
+# Be sure to quote it properly. 
+#
+
+set L=~/lib
+
+if ($#argv < 2) then
+    echo usage: looktex keyword 'file...'
+    exit 1
+endif
+
+set keyword=`echo "$1" | tr A-Z a-z`
+shift
+
+set script=/tmp/looktex$$
+onintr cleanup
+
+# Search for the keyword and get a script for extracting the
+# references:
+#  Cat the files
+#  Strip comment lines and comments on lines
+#  Translate to lower case
+#  Search for the keyword and all @ lines
+#  Extract the line number only, plus 'entry' for lines with @
+#  Convert this output into a sed script
+cat $* \
+    | sed -e 's/^%.*//' -e 's/\([^\\]\)%.*/\1/' \
+    | tr A-Z a-z \
+    | egrep -n "($keyword)"'|^[ ]*@' \
+    | sed -n -e "s/:[ ]*@.*$keyword.*/ entry key/p" -e 's/:[ ]*@.*/ entry/p' -e "s/:.*//p" \
+    | awk -f $L/looktex.awk > $script
+
+# Now have sed print out the correct entries:
+cat $* | sed -n -f $script 
+
+cleanup:
+rm -f $script

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/looktex.awk
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/looktex.awk	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/looktex.awk	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,39 @@
+# looktex.awk 
+#
+# Goes with bin/looktex - look for a keyword in the references in a BiBTeX file
+#
+# David Kotz (dfk at cs.dartmouth.edu)
+#
+# This takes a list of line numbers that had the keyword. Some of the
+# line numbers will be followed by "entry" or "entry key"; "entry"
+# means that the line number is the start of a new bibtex entry, not a
+# line containing the keyword. "entry key" means that it is a line
+# starting an entry AND containing the keyword.
+#
+# On stdout, we produce a sed script for printing entries that had a
+# match in them somewhere. This is a list of lines like "A,Bp" where A
+# and B are line numbers.
+
+BEGIN {found=0; last=1}
+
+# defines the start of a new entry WITH a keyword match
+NF==3 {
+    if (found) { print last "," $1-1 "p" }
+    found=1
+    last=$1 
+}
+
+# defines the start of a new entry
+NF==2 {
+    if (found) { print last "," $1-1 "p" }
+    found=0
+    last=$1
+}
+
+# marks a place where the keyword was found
+NF==1 {found=1}
+
+END {
+    if (found)
+        print last ",$p";
+}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/looktex.awk
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/makebib
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/makebib	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/makebib	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,95 @@
+#!/bin/csh -f
+#
+# makebib - make a bib file that has the given citations
+#
+# usage: 
+#    makebib [-n | -d | -u] file.bib... [citekey]...
+# Where -n means "no comment", ie, don't include any "comment" fields.
+# And -d means "dfk", ie, add attribution to dfk to all comment fields.
+# And -u means "unsorted", and comments are still included.
+# Output is to subset.bib. If citekey is not given, then all refs in
+# the bibfile are included.
+#
+# dfk 11/24/92: write the subset.aux file directly, skipping latex
+# dfk 9/99: add unsorted option
+
+onintr cleanup
+
+if ($#argv < 1) then
+	   echo 'usage: makebib [-n|-d] file.bib... [citekey]...'
+	   exit 1
+endif
+
+if ("$1" == "-n") then
+	   set bst=subset-nocomment
+	   shift
+else
+	   if ("$1" == "-d") then
+	   	   set bst=subset-dfk
+	   	   shift
+	   else
+		if ("$1" == "-u") then
+		    set bst=subset-unsorted
+		    shift
+		else
+		    set bst=subset
+		endif
+	   endif
+endif
+
+if ($#argv < 1) then
+	   echo 'usage: makebib [-n|-d|-u] file.bib... [citekey]...'
+	   exit 1
+endif
+
+set files = $1:r
+shift
+
+while ($1:e == bib)
+	   set files=($files,$1:r)
+	   shift
+end
+
+echo creating subset.aux for $files
+
+cat > subset.aux <<EOF
+\relax 
+\bibstyle{$bst}
+\bibdata{$files}
+EOF
+
+# an annoying incompatibility in the way "echo" treats backslash...
+if (`uname` == Linux) then
+    set citation="\\citation"
+else
+    set citation="\citation"
+endif
+
+if ($#argv > 0) then
+	   foreach f ($*)
+	      echo $citation"{$f}" >> subset.aux
+	   end
+else
+	   echo $citation'{*}' >> subset.aux
+endif
+rm -f subset.{log,dvi,bbl,blg}
+
+echo bibtex subset
+bibtex subset
+
+if (-e makebib.sed.Z) uncompress makebib.sed
+if (-e makebib.sed.gz) gunzip makebib.sed
+
+echo ""
+echo 'Fixing these lines (might be doing the wrong thing)'
+grep '[^\\]%$' subset.bbl
+echo end.
+echo ""
+
+sed -f makebib.sed subset.bbl > subset.bib
+
+echo ""
+echo output is in subset.bib
+
+cleanup:
+rm -f subset.{tex,aux,log,dvi,bbl,blg,sed}

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/printbib
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/printbib	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/printbib	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,68 @@
+#!/bin/csh -f
+#
+# printbib - print a full bibtex bib file out
+#
+# David Kotz
+#
+# usage:
+#  printbib bibfile...
+#
+# Then send the dvi file 'abstract.dvi' to the printer
+# (usage varies; try lpr -d abstract.dvi)
+
+if ($#argv == 0) then
+	   echo usage: printbib bibfile...
+	   exit 1
+endif
+
+if ($1:e == "bib") then
+	   set files=($1:r)
+else
+	   set files=($1)
+endif
+
+shift
+foreach f ($*)
+	   if ($f:e == "bib") then
+	   	   set files="$files,$f:r"
+	   else
+	   	   set files="$files,$f"
+	   endif
+end
+
+echo creating abstract.tex for $files
+
+cat > abstract.tex <<EOF
+\documentclass[11pt]{article}
+\usepackage{latexsym}
+\sloppy
+\setlength{\textwidth}{6.5in}
+\setlength{\textheight}{9in}
+\setlength{\topmargin}{-0.5in}
+\setlength{\oddsidemargin}{0pt}
+\setlength{\evensidemargin}{0pt}
+\newcommand{\eg}{e.g.}		% e.g.
+\newcommand{\ie}{i.e.}		% i.e.
+\newcommand{\etc}{etc.}		% etc.
+\newcommand{\vs}{{\em vs.}}		% vs.
+\begin{document}
+\begin{center} \Large Bibliography files \large \\\\
+EOF
+echo $files >> abstract.tex
+cat >> abstract.tex <<EOF
+\\\\ \today
+\end{center}
+\nocite{*}
+\bibliographystyle{abstract}
+EOF
+
+echo "\bibliography{$files}" >> abstract.tex
+echo '\end{document}' >> abstract.tex
+
+rm -f abstract.{aux,log,dvi,bbl,blg}
+
+set echo 
+latex abstract.tex
+bibtex abstract
+latex abstract.tex
+latex abstract.tex

Added: trunk/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,281 @@
+% BibTeX bibliography style `subset'
+% by David Kotz dfk at cs.dartmouth.edu
+% August 1992, May 1993, February 1999
+%   This takes an aux file and produces an unusual .bbl file,
+% that is actually in .bib format -- but it has all of the references,
+% and strings expanded. Thus, it becomes a complete, portable .bib
+% file. Crossrefs are retained but redundant.
+% adds my name to the comment field
+%  modified from
+   % BibTeX bibliography style `abstract' 
+   % by David Kotz dfk at cs.duke.edu
+   % March 1989
+   %  modified from
+   %  BibTeX standard bibliography style `alpha'
+	 % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+      % Copyright (C) 1985, all rights reserved.
+      % Copying of this file is authorized only if either
+      % (1) you make absolutely no changes to your copy, including name, or
+      % (2) if you do make changes, you name it something other than
+      % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+      % This restriction helps ensure that all standard styles are identical.
+      % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword to standard set
+% 5/93 DFK added private, ignored when subsetting
+% 7/94 DFK added URL
+ENTRY
+  { abstract
+    address
+    author
+    booktitle    
+    category
+    chapter
+    comment
+    earlier
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    later
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+STRINGS { s t }
+
+% output a field; the top is the text, the next to top is the name of
+% the field, and we know that the text is nonnull.
+% we start by finishing the previous line
+FUNCTION {output.field}
+{
+  ", " write$		% write comma and newline
+  newline$
+  "  " write$		% and a respectable indentation
+
+  swap$			% now field name is on top
+  " = {" *		% put = {
+  swap$ *		% now text is back on top; concatenate
+  "}" *			% put }
+  write$
+}
+
+% output if top not empty; below the top is the name of the field
+FUNCTION {output}
+{ duplicate$ empty$
+    { pop$ pop$ }
+    'output.field
+  if$
+}
+
+% special for "comment"
+% output if top not empty; below the top is the name of the field
+FUNCTION {output.comment}
+{ duplicate$ empty$
+    { pop$ pop$ }
+    { " [David.Kotz at Dartmouth.edu]" * output.field }
+  if$
+}
+
+% prints each field 
+FUNCTION {output.bibfields}
+{
+% The fields, in what seems to be a good order
+  "key" key output
+  "author" author output
+  "title" title output
+
+  "journal" journal output
+  "booktitle" booktitle output
+
+  "chapter" chapter output
+  "edition" edition output
+  "editor" editor output
+
+   crossref missing$
+     { }
+     { "crossref" crossref output }
+   if$
+
+  "year" year output
+  "month" month output
+  "series" series output
+  "volume" volume output
+  "number" number output
+  "type" type output
+
+  "pages" pages output
+
+  "institution" institution output
+  "school" school output
+  "organization" organization output
+  "publisher" publisher output
+  "howpublished" howpublished output
+  "address" address output
+
+  "category" category output
+
+  "note" note output
+
+  "earlier" earlier output
+  "later" later output
+
+  "URL" URL output
+  "keyword" keyword output
+  "abstract" abstract output
+  "comment" comment output.comment
+}
+
+% Takes name of type as argument, and prints @ line
+% then it prints each field 
+FUNCTION {output.bibitem}
+{
+% write the @ line
+  "@" swap$ * write$    		  % @type
+  "{" cite$ * write$  		  % {citekey
+
+  output.bibfields
+
+% finish entry
+  newline$
+  "}" write$ 
+  newline$
+  newline$
+}
+
+FUNCTION {article}{ "Article" output.bibitem }
+
+FUNCTION {book}{ "Book" output.bibitem }
+
+FUNCTION {booklet}{ "Booklet" output.bibitem }
+
+FUNCTION {inbook}{ "InBook" output.bibitem }
+
+FUNCTION {incollection}{ "InCollection" output.bibitem }
+
+FUNCTION {inproceedings}{ "InProceedings" output.bibitem }
+
+FUNCTION {conference}{ "Conference" output.bibitem }
+
+FUNCTION {manual}{ "Manual" output.bibitem }
+
+FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem }
+
+FUNCTION {misc}{ "Misc" output.bibitem }
+
+FUNCTION {phdthesis}{ "PhdThesis" output.bibitem }
+
+FUNCTION {proceedings}{ "Proceedings" output.bibitem }
+
+FUNCTION {techreport}{ "TechReport" output.bibitem }
+
+FUNCTION {unpublished}{ "Unpublished" output.bibitem }
+
+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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+% DFK use cite$ for sort key
+FUNCTION {presort}
+{
+  cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{
+  "% BibTeX bibliography file" write$ 
+  newline$ 
+  newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/subset-dfk.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,272 @@
+% BibTeX bibliography style `subset'
+% by David Kotz dfk at cs.dartmouth.edu
+% August 1992, May 1993, February 1999
+%   This takes an aux file and produces an unusual .bbl file,
+% that is actually in .bib format -- but it has all of the references,
+% and strings expanded. Thus, it becomes a complete, portable .bib
+% file. Crossrefs are retained but redundant.
+% This one doesn't include 'comment' in output.
+%  modified from
+   % BibTeX bibliography style `abstract' 
+   % by David Kotz dfk at cs.duke.edu
+   % March 1989
+   %  modified from
+   %  BibTeX standard bibliography style `alpha'
+	 % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+      % Copyright (C) 1985, all rights reserved.
+      % Copying of this file is authorized only if either
+      % (1) you make absolutely no changes to your copy, including name, or
+      % (2) if you do make changes, you name it something other than
+      % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+      % This restriction helps ensure that all standard styles are identical.
+      % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword to standard set
+% 5/93 DFK added private, ignored when subsetting
+% 7/94 DFK added URL
+ENTRY
+  { abstract
+    address
+    author
+    booktitle    
+    category
+    chapter
+    comment
+    earlier
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    later
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+STRINGS { s t }
+
+% output a field; the top is the text, the next to top is the name of
+% the field, and we know that the text is nonnull.
+% we start by finishing the previous line
+FUNCTION {output.field}
+{
+  ", " write$		% write comma and newline
+  newline$
+  "  " write$		% and a respectable indentation
+
+  swap$			% now field name is on top
+  " = {" *		% put = {
+  swap$ *		% now text is back on top; concatenate
+  "}" *			% put }
+  write$
+}
+
+% output if top not empty; below the top is the name of the field
+FUNCTION {output}
+{ duplicate$ empty$
+    { pop$ pop$ }
+    'output.field
+  if$
+}
+
+% prints each field 
+FUNCTION {output.bibfields}
+{
+% The fields, in what seems to be a good order
+  "key" key output
+  "author" author output
+  "title" title output
+
+  "journal" journal output
+  "booktitle" booktitle output
+
+  "chapter" chapter output
+  "edition" edition output
+  "editor" editor output
+
+   crossref missing$
+     { }
+     { "crossref" crossref output }
+   if$
+
+  "year" year output
+  "month" month output
+  "series" series output
+  "volume" volume output
+  "number" number output
+  "type" type output
+
+  "pages" pages output
+
+  "institution" institution output
+  "school" school output
+  "organization" organization output
+  "publisher" publisher output
+  "howpublished" howpublished output
+  "address" address output
+
+  "category" category output
+
+  "note" note output
+
+  "earlier" earlier output
+  "later" later output
+
+  "URL" URL output
+  "keyword" keyword output
+  "abstract" abstract output
+%  "comment" comment output
+}
+
+% Takes name of type as argument, and prints @ line
+% then it prints each field 
+FUNCTION {output.bibitem}
+{
+% write the @ line
+  "@" swap$ * write$    		  % @type
+  "{" cite$ * write$  		  % {citekey
+
+  output.bibfields
+
+% finish entry
+  newline$
+  "}" write$ 
+  newline$
+  newline$
+}
+
+FUNCTION {article}{ "Article" output.bibitem }
+
+FUNCTION {book}{ "Book" output.bibitem }
+
+FUNCTION {booklet}{ "Booklet" output.bibitem }
+
+FUNCTION {inbook}{ "InBook" output.bibitem }
+
+FUNCTION {incollection}{ "InCollection" output.bibitem }
+
+FUNCTION {inproceedings}{ "InProceedings" output.bibitem }
+
+FUNCTION {conference}{ "Conference" output.bibitem }
+
+FUNCTION {manual}{ "Manual" output.bibitem }
+
+FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem }
+
+FUNCTION {misc}{ "Misc" output.bibitem }
+
+FUNCTION {phdthesis}{ "PhdThesis" output.bibitem }
+
+FUNCTION {proceedings}{ "Proceedings" output.bibitem }
+
+FUNCTION {techreport}{ "TechReport" output.bibitem }
+
+FUNCTION {unpublished}{ "Unpublished" output.bibitem }
+
+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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+% DFK use cite$ for sort key
+FUNCTION {presort}
+{
+  cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{
+  "% BibTeX bibliography file" write$ 
+  newline$ 
+  newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/subset-nocomment.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/bibtex/bibtools/subset.bst
===================================================================
--- trunk/Master/texmf-dist/source/bibtex/bibtools/subset.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/source/bibtex/bibtools/subset.bst	2023-06-16 21:03:10 UTC (rev 67386)
@@ -0,0 +1,271 @@
+% BibTeX bibliography style `subset'
+% by David Kotz dfk at cs.dartmouth.edu
+% August 1992, May 1993, February 1999
+%   This takes an aux file and produces an unusual .bbl file,
+% that is actually in .bib format -- but it has all of the references,
+% and strings expanded. Thus, it becomes a complete, portable .bib
+% file. Crossrefs are retained but redundant.
+%  modified from
+   % BibTeX bibliography style `abstract' 
+   % by David Kotz dfk at cs.duke.edu
+   % March 1989
+   %  modified from
+   %  BibTeX standard bibliography style `alpha'
+	 % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+      % Copyright (C) 1985, all rights reserved.
+      % Copying of this file is authorized only if either
+      % (1) you make absolutely no changes to your copy, including name, or
+      % (2) if you do make changes, you name it something other than
+      % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+      % This restriction helps ensure that all standard styles are identical.
+      % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword to standard set
+% 5/93 DFK added private, ignored when subsetting
+% 7/94 DFK added URL
+ENTRY
+  { abstract
+    address
+    author
+    booktitle    
+    category
+    chapter
+    comment
+    earlier
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    keyword
+    later
+    month
+    note
+    number
+    organization
+    pages
+    private
+    publisher
+    school
+    series
+    title
+    type
+    URL
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+STRINGS { s t }
+
+% output a field; the top is the text, the next to top is the name of
+% the field, and we know that the text is nonnull.
+% we start by finishing the previous line
+FUNCTION {output.field}
+{
+  ", " write$		% write comma and newline
+  newline$
+  "  " write$		% and a respectable indentation
+
+  swap$			% now field name is on top
+  " = {" *		% put = {
+  swap$ *		% now text is back on top; concatenate
+  "}" *			% put }
+  write$
+}
+
+% output if top not empty; below the top is the name of the field
+FUNCTION {output}
+{ duplicate$ empty$
+    { pop$ pop$ }
+    'output.field
+  if$
+}
+
+% prints each field 
+FUNCTION {output.bibfields}
+{
+% The fields, in what seems to be a good order
+  "key" key output
+  "author" author output
+  "title" title output
+
+  "journal" journal output
+  "booktitle" booktitle output
+
+  "chapter" chapter output
+  "edition" edition output
+  "editor" editor output
+
+   crossref missing$
+     { }
+     { "crossref" crossref output }
+   if$
+
+  "year" year output
+  "month" month output
+  "series" series output
+  "volume" volume output
+  "number" number output
+  "type" type output
+
+  "pages" pages output
+
+  "institution" institution output
+  "school" school output
+  "organization" organization output
+  "publisher" publisher output
+  "howpublished" howpublished output
+  "address" address output
+
+  "category" category output
+
+  "note" note output
+
+  "earlier" earlier output
+  "later" later output
+
+  "URL" URL output
+  "keyword" keyword output
+  "abstract" abstract output
+  "comment" comment output
+}
+
+% Takes name of type as argument, and prints @ line
+% then it prints each field 
+FUNCTION {output.bibitem}
+{
+% write the @ line
+  "@" swap$ * write$    		  % @type
+  "{" cite$ * write$  		  % {citekey
+
+  output.bibfields
+
+% finish entry
+  newline$
+  "}" write$ 
+  newline$
+  newline$
+}
+
+FUNCTION {article}{ "Article" output.bibitem }
+
+FUNCTION {book}{ "Book" output.bibitem }
+
+FUNCTION {booklet}{ "Booklet" output.bibitem }
+
+FUNCTION {inbook}{ "InBook" output.bibitem }
+
+FUNCTION {incollection}{ "InCollection" output.bibitem }
+
+FUNCTION {inproceedings}{ "InProceedings" output.bibitem }
+
+FUNCTION {conference}{ "Conference" output.bibitem }
+
+FUNCTION {manual}{ "Manual" output.bibitem }
+
+FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem }
+
+FUNCTION {misc}{ "Misc" output.bibitem }
+
+FUNCTION {phdthesis}{ "PhdThesis" output.bibitem }
+
+FUNCTION {proceedings}{ "Proceedings" output.bibitem }
+
+FUNCTION {techreport}{ "TechReport" output.bibitem }
+
+FUNCTION {unpublished}{ "Unpublished" output.bibitem }
+
+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"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+% DFK use cite$ for sort key
+FUNCTION {presort}
+{
+  cite$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{
+  "% BibTeX bibliography file" write$ 
+  newline$ 
+  newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}


Property changes on: trunk/Master/texmf-dist/source/bibtex/bibtools/subset.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2023-06-16 20:42:40 UTC (rev 67385)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2023-06-16 21:03:10 UTC (rev 67386)
@@ -134,7 +134,7 @@
     biblatex2bibitem
     bibleref bibleref-french bibleref-german bibleref-lds bibleref-mouth
     bibleref-parse bibletext
-    biblist bibtex bibtexperllibs bibtopic
+    biblist bibtex bibtexperllibs bibtools bibtopic
     bibtopicprefix bibexport bibunits
     bidi bidi-atbegshi bidicontour bidihl
     bidipagegrid bidipresentation bidishadowtext

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2023-06-16 20:42:40 UTC (rev 67385)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2023-06-16 21:03:10 UTC (rev 67386)
@@ -228,7 +228,6 @@
  'biblatex-spbasic',    "&MAKEflatten",
  'biblio',      "die 'skipping, too big, see tl-update-auto'",
  'bibtool',     "die 'skipping, requires compilation'",
- 'bibtools',    "die 'skipping, ca.2000, await request'",
  'bibtopicprefix', "&MAKEflatten",
  'bibutils',	"die 'skipping, requires compilation'",
  'bickham',     "die 'skipping, support for nonfree font'",
@@ -2940,6 +2939,7 @@
  'biber',               '.',                    # everything, lots done in post
  'biber-ms',            '.',                    # same as biber
  'bibtexperllibs',	'.',			# everything
+ 'bibtools',		'.',			# everything but one bst
  'bigints',             'NULL',
  'blacklettert1',       '\.dtx|\.ins|\.pl|Makefile',
  'booktabs-de',         'NULL',                 # doc package
@@ -3383,6 +3383,7 @@
 $standardbst='\.bst$';
 %specialbst = (
  'beebe'		=> '\.bst$',
+ 'bibtools'		=> 'abstract\.bst',
  'einfuehrung'  	=> 'NULL',
  'einfuehrung2' 	=> 'NULL',
  'feupphdteses' 	=> 'NULL',

Added: trunk/Master/tlpkg/tlpsrc/bibtools.tlpsrc
===================================================================
Modified: trunk/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc	2023-06-16 20:42:40 UTC (rev 67385)
+++ trunk/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc	2023-06-16 21:03:10 UTC (rev 67386)
@@ -91,6 +91,7 @@
 depend biblatex2bibitem
 depend biblist
 depend bibtexperllibs
+depend bibtools
 depend bibtopic
 depend bibtopicprefix
 depend bibunits



More information about the tex-live-commits mailing list.