Blame isl-0.14/doc/chicago.bst

Packit fb9d21
%%% ====================================================================
Packit fb9d21
%%%  @BibTeX-style-file{
Packit fb9d21
%%%     author          = "Glenn Paulley",
Packit fb9d21
%%%     version         = "4",
Packit fb9d21
%%%     date            = "28 August 1992",
Packit fb9d21
%%%     time            = "10:23:39 199",
Packit fb9d21
%%%     filename        = "chicago.bst",
Packit fb9d21
%%%     address         = "Data Structuring Group
Packit fb9d21
%%%                        Department of Computer Science
Packit fb9d21
%%%                        University of Waterloo
Packit fb9d21
%%%                        Waterloo, Ontario, Canada
Packit fb9d21
%%%                        N2L 3G1",
Packit fb9d21
%%%     telephone       = "(519) 885-1211",
Packit fb9d21
%%%     FAX             = "(519) 885-1208",
Packit fb9d21
%%%     checksum        = "26323 1654 5143 37417",
Packit fb9d21
%%%     email           = "gnpaulle@bluebox.uwaterloo.ca",
Packit fb9d21
%%%     codetable       = "ISO/ASCII",
Packit fb9d21
%%%     keywords        = "",
Packit fb9d21
%%%     supported       = "yes",
Packit fb9d21
%%%     abstract        = "A BibTeX bibliography style that follows the
Packit fb9d21
%%%                        `B' reference style of the 13th Edition of
Packit fb9d21
%%%                        the Chicago Manual of Style. A detailed
Packit fb9d21
%%%                        feature list is given below.",
Packit fb9d21
%%%     docstring       = "The checksum field above contains a CRC-16
Packit fb9d21
%%%                        checksum as the first value, followed by the
Packit fb9d21
%%%                        equivalent of the standard UNIX wc (word
Packit fb9d21
%%%                        count) utility output of lines, words, and
Packit fb9d21
%%%                        characters.  This is produced by Robert
Packit fb9d21
%%%                        Solovay's checksum utility.",
Packit fb9d21
%%%  }
Packit fb9d21
%%% ====================================================================
Packit fb9d21
%
Packit fb9d21
% "Chicago" BibTeX style, chicago.bst
Packit fb9d21
% ===================================
Packit fb9d21
%
Packit fb9d21
% BibTeX `chicago' style file for BibTeX version 0.99c, LaTeX version 2.09
Packit fb9d21
% Place it in a file called chicago.bst in the BibTeX search path.
Packit fb9d21
% You need to include chicago.sty as a \documentstyle option.
Packit fb9d21
% (Placing it in the same directory as the LaTeX document should also work.)
Packit fb9d21
% This "chicago" style is based on newapa.bst (American Psych. Assoc.)
Packit fb9d21
% found at ymir.claremont.edu.
Packit fb9d21
%
Packit fb9d21
%   Citation format: (author-last-name year)
Packit fb9d21
%             (author-last-name and author-last-name year)
Packit fb9d21
%             (author-last-name, author-last-name, and author-last-name year)
Packit fb9d21
%             (author-last-name et al. year)
Packit fb9d21
%             (author-last-name)
Packit fb9d21
%             author-last-name (year)
Packit fb9d21
%             (author-last-name and author-last-name)
Packit fb9d21
%             (author-last-name et al.)
Packit fb9d21
%             (year) or (year,year)
Packit fb9d21
%             year or year,year
Packit fb9d21
%
Packit fb9d21
%   Reference list ordering: alphabetical by author or whatever passes
Packit fb9d21
%    for author in the absence of one.
Packit fb9d21
%
Packit fb9d21
% This BibTeX style has support for abbreviated author lists and for
Packit fb9d21
%    year-only citations.  This is done by having the citations
Packit fb9d21
%    actually look like
Packit fb9d21
%
Packit fb9d21
%    \citeauthoryear{full-author-info}{abbrev-author-info}{year}
Packit fb9d21
%
Packit fb9d21
% The LaTeX style has to have the following (or similar)
Packit fb9d21
%
Packit fb9d21
%     \let\@internalcite\cite
Packit fb9d21
%     \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
Packit fb9d21
%     \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
Packit fb9d21
%     \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
Packit fb9d21
%     \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
Packit fb9d21
%     \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
Packit fb9d21
%
Packit fb9d21
% These TeX macro definitions are found in chicago.sty. Additional
Packit fb9d21
% commands to manipulate different components of a citation can be defined
Packit fb9d21
% so that, for example, you can list author's names without parentheses
Packit fb9d21
% if using a citation as a noun or object in a sentence.
Packit fb9d21
%
Packit fb9d21
% This file was originally copied from newapa.bst at ymir.claremont.edu.
Packit fb9d21
%
Packit fb9d21
% Features of chicago.bst:
Packit fb9d21
% =======================
Packit fb9d21
%
Packit fb9d21
% - full names used in citations, but abbreviated citations are available
Packit fb9d21
%   (see above)
Packit fb9d21
% - if an entry has a "month", then the month and year are also printed
Packit fb9d21
%   as part of that bibitem.
Packit fb9d21
% - all conjunctions use "and" instead of "\&"
Packit fb9d21
% - major modification from Chicago Manual of Style (13th ed.) is that
Packit fb9d21
%   only the first author in a reference appears last name first-
Packit fb9d21
%   additional authors appear as J. Q. Public.
Packit fb9d21
% - pages are listed as "pp. xx-xx" in all entry types except
Packit fb9d21
%   article entries.
Packit fb9d21
% - book, inbook, and manual use "location: publisher" (or organization)
Packit fb9d21
%   for address and publisher. All other types list publishers separately.
Packit fb9d21
% - "pp." are used to identify page numbers for all entry types except
Packit fb9d21
%   articles.
Packit fb9d21
% - organization is used as a citation label if neither author nor editor
Packit fb9d21
%   is present (for manuals).
Packit fb9d21
% - "et al." is used for long author and editor lists, or when "others"
Packit fb9d21
%   is used.
Packit fb9d21
%
Packit fb9d21
% Modifications and bug fixes from newapa.bst:
Packit fb9d21
% ===========================================
Packit fb9d21
%
Packit fb9d21
%   - added month, year to bib entries if month is present
Packit fb9d21
%   - fixed bug with In proceedings, added necessary comma after title
Packit fb9d21
%   - all conjunctions changed to "and" from "\&"
Packit fb9d21
%   - fixed bug with author labels in my.full.label: "et al." now is
Packit fb9d21
%        generated when "others" is an author name
Packit fb9d21
%   - major modification from Chicago Manual of Style (13th ed.) is that
Packit fb9d21
%     only the first author in a reference appears last name first-
Packit fb9d21
%     additional authors appear as J. Q. Public.
Packit fb9d21
%   - pages are listed as "pp. xx-xx" in all entry types except
Packit fb9d21
%     article entries. Unnecessary (IMHO) "()" around page numbers
Packit fb9d21
%     were removed, and page numbers now don't end with a period.
Packit fb9d21
%   - created chicago.sty for use with this bibstyle (required).
Packit fb9d21
%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
Packit fb9d21
%     number, and /or pages. Renamed to format.jour.vol.
Packit fb9d21
%   - fixed bug in formatting booktitles: additional period an error if
Packit fb9d21
%     book has a volume.
Packit fb9d21
%   - fixed bug: editors usually given redundant period before next clause
Packit fb9d21
%     (format.editors.dot) removed.
Packit fb9d21
%   - added label support for organizations, if both author and editor
Packit fb9d21
%     are missing (from alpha.bst). If organization is too long, then
Packit fb9d21
%     the key field is used for abbreviated citations.
Packit fb9d21
%   - In proceedings or books of several volumes, no comma was written
Packit fb9d21
%     between the "Volume x" and the page numbers (this was intentional
Packit fb9d21
%     in newapa.bst). Fixed.
Packit fb9d21
%   - Some journals may not have volumes/numbers, only month/year (eg.
Packit fb9d21
%     IEEE Computer). Fixed bug in article style that assumed volume/number
Packit fb9d21
%     was always present.
Packit fb9d21
%
Packit fb9d21
% Original documentation for newapa.sty:
Packit fb9d21
% =====================================
Packit fb9d21
%
Packit fb9d21
% This version was made by modifying the master file made by
Packit fb9d21
% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX
Packit fb9d21
% style of Peter F. Patel-Schneider.
Packit fb9d21
%
Packit fb9d21
% Copyright (C) 1985, all rights reserved.
Packit fb9d21
% Copying of this file is authorized only if either
Packit fb9d21
% (1) you make absolutely no changes to your copy, including name, or
Packit fb9d21
% (2) if you do make changes, you name it something other than 'newapa.bst'.
Packit fb9d21
% There are undoubtably bugs in this style.  If you make bug fixes,
Packit fb9d21
% improvements, etc.  please let me know.  My e-mail address is:
Packit fb9d21
%    spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com
Packit fb9d21
%
Packit fb9d21
% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
Packit fb9d21
% with lots of tweaking to make it look like APA style, along with tips
Packit fb9d21
% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
Packit fb9d21
Packit fb9d21
ENTRY
Packit fb9d21
  { address
Packit fb9d21
    author
Packit fb9d21
    booktitle
Packit fb9d21
    chapter
Packit fb9d21
    edition
Packit fb9d21
    editor
Packit fb9d21
    fjournal
Packit fb9d21
    howpublished
Packit fb9d21
    institution
Packit fb9d21
    journal
Packit fb9d21
    key
Packit fb9d21
    month
Packit fb9d21
    note
Packit fb9d21
    number
Packit fb9d21
    organization
Packit fb9d21
    pages
Packit fb9d21
    publisher
Packit fb9d21
    school
Packit fb9d21
    series
Packit fb9d21
    title
Packit fb9d21
    type
Packit fb9d21
    volume
Packit fb9d21
    year
Packit fb9d21
  }
Packit fb9d21
  {}
Packit fb9d21
  { label.year extra.label sort.year sort.label }
Packit fb9d21
Packit fb9d21
INTEGERS { output.state before.all mid.sentence after.sentence after.block }
Packit fb9d21
Packit fb9d21
FUNCTION {init.state.consts}
Packit fb9d21
{ #0 'before.all :=
Packit fb9d21
  #1 'mid.sentence :=
Packit fb9d21
  #2 'after.sentence :=
Packit fb9d21
  #3 'after.block :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
STRINGS { s t u }
Packit fb9d21
Packit fb9d21
FUNCTION {output.nonnull}
Packit fb9d21
{ 's :=
Packit fb9d21
  output.state mid.sentence =
Packit fb9d21
    { ", " * write$ }
Packit fb9d21
    { output.state after.block =
Packit fb9d21
    { add.period$ write$
Packit fb9d21
      newline$
Packit fb9d21
      "\newblock " write$
Packit fb9d21
    }
Packit fb9d21
    { output.state before.all =
Packit fb9d21
        'write$
Packit fb9d21
        { add.period$ " " * write$ }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
      if$
Packit fb9d21
      mid.sentence 'output.state :=
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  s
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
% Use a colon to separate output. Used only for address/publisher
Packit fb9d21
% combination in book/inbook types, address/institution for manuals,
Packit fb9d21
% and organization:publisher for proceedings (inproceedings).
Packit fb9d21
%
Packit fb9d21
FUNCTION {output.nonnull.colon}
Packit fb9d21
{ 's :=
Packit fb9d21
  output.state mid.sentence =
Packit fb9d21
    { ": " * write$ }
Packit fb9d21
    { output.state after.block =
Packit fb9d21
    { add.period$ write$
Packit fb9d21
      newline$
Packit fb9d21
      "\newblock " write$
Packit fb9d21
    }
Packit fb9d21
    { output.state before.all =
Packit fb9d21
        'write$
Packit fb9d21
        { add.period$ " " * write$ }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
      if$
Packit fb9d21
      mid.sentence 'output.state :=
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  s
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {output}
Packit fb9d21
{ duplicate$ empty$
Packit fb9d21
    'pop$
Packit fb9d21
    'output.nonnull
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {output.colon}
Packit fb9d21
{ duplicate$ empty$
Packit fb9d21
    'pop$
Packit fb9d21
    'output.nonnull.colon
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {output.check}
Packit fb9d21
{ 't :=
Packit fb9d21
  duplicate$ empty$
Packit fb9d21
    { pop$ "empty " t * " in " * cite$ * warning$ }
Packit fb9d21
    'output.nonnull
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {output.check.colon}
Packit fb9d21
{ 't :=
Packit fb9d21
  duplicate$ empty$
Packit fb9d21
    { pop$ "empty " t * " in " * cite$ * warning$ }
Packit fb9d21
    'output.nonnull.colon
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {output.year.check}
Packit fb9d21
{ year empty$
Packit fb9d21
     { "empty year in " cite$ * warning$ }
Packit fb9d21
     { write$
Packit fb9d21
        " (" year * extra.label *
Packit fb9d21
       month empty$
Packit fb9d21
          { ")" * }
Packit fb9d21
          { ", " * month * ")" * }
Packit fb9d21
       if$
Packit fb9d21
       mid.sentence 'output.state :=
Packit fb9d21
     }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
Packit fb9d21
FUNCTION {fin.entry}
Packit fb9d21
{ add.period$
Packit fb9d21
  write$
Packit fb9d21
  newline$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {new.block}
Packit fb9d21
{ output.state before.all =
Packit fb9d21
    'skip$
Packit fb9d21
    { after.block 'output.state := }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {new.sentence}
Packit fb9d21
{ output.state after.block =
Packit fb9d21
    'skip$
Packit fb9d21
    { output.state before.all =
Packit fb9d21
    'skip$
Packit fb9d21
    { after.sentence 'output.state := }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {not}
Packit fb9d21
{   { #0 }
Packit fb9d21
    { #1 }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {and}
Packit fb9d21
{   'skip$
Packit fb9d21
    { pop$ #0 }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {or}
Packit fb9d21
{   { pop$ #1 }
Packit fb9d21
    'skip$
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {new.block.checka}
Packit fb9d21
{ empty$
Packit fb9d21
    'skip$
Packit fb9d21
    'new.block
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {new.block.checkb}
Packit fb9d21
{ empty$
Packit fb9d21
  swap$ empty$
Packit fb9d21
  and
Packit fb9d21
    'skip$
Packit fb9d21
    'new.block
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {new.sentence.checka}
Packit fb9d21
{ empty$
Packit fb9d21
    'skip$
Packit fb9d21
    'new.sentence
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {new.sentence.checkb}
Packit fb9d21
{ empty$
Packit fb9d21
  swap$ empty$
Packit fb9d21
  and
Packit fb9d21
    'skip$
Packit fb9d21
    'new.sentence
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {field.or.null}
Packit fb9d21
{ duplicate$ empty$
Packit fb9d21
    { pop$ "" }
Packit fb9d21
    'skip$
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
%
Packit fb9d21
% Emphasize the top string on the stack.
Packit fb9d21
%
Packit fb9d21
FUNCTION {emphasize}
Packit fb9d21
{ duplicate$ empty$
Packit fb9d21
    { pop$ "" }
Packit fb9d21
    { "{\em " swap$ * "}" * }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
%
Packit fb9d21
% Emphasize the top string on the stack, but add a trailing space.
Packit fb9d21
%
Packit fb9d21
FUNCTION {emphasize.space}
Packit fb9d21
{ duplicate$ empty$
Packit fb9d21
    { pop$ "" }
Packit fb9d21
    { "{\em " swap$ * "\/}" * }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
INTEGERS { nameptr namesleft numnames }
Packit fb9d21
%
Packit fb9d21
% Format bibliographical entries with the first author last name first,
Packit fb9d21
% and subsequent authors with initials followed by last name.
Packit fb9d21
% All names are formatted in this routine.
Packit fb9d21
%
Packit fb9d21
FUNCTION {format.names}
Packit fb9d21
{ 's :=
Packit fb9d21
  #1 'nameptr :=               % nameptr = 1;
Packit fb9d21
  s num.names$ 'numnames :=    % numnames = num.name$(s);
Packit fb9d21
  numnames 'namesleft :=
Packit fb9d21
    { namesleft #0 > }
Packit fb9d21
Packit fb9d21
    { nameptr #1 =
Packit fb9d21
        {s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := }
Packit fb9d21
        {s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := }
Packit fb9d21
      if$
Packit fb9d21
      nameptr #1 >
Packit fb9d21
        { namesleft #1 >
Packit fb9d21
              { ", " * t * }
Packit fb9d21
              { numnames #2 >
Packit fb9d21
                  { "," * }
Packit fb9d21
                  'skip$
Packit fb9d21
                if$
Packit fb9d21
                t "others" =
Packit fb9d21
                    { " et~al." * }
Packit fb9d21
                    { " and " * t * } % from Chicago Manual of Style
Packit fb9d21
                  if$
Packit fb9d21
               }
Packit fb9d21
               if$
Packit fb9d21
             }
Packit fb9d21
            't
Packit fb9d21
        if$
Packit fb9d21
        s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := 
Packit fb9d21
	"\protect \index {" * t * "|hyperemph}" *
Packit fb9d21
        nameptr #1 + 'nameptr :=          % nameptr += 1;
Packit fb9d21
        namesleft #1 - 'namesleft :=      % namesleft =- 1;
Packit fb9d21
    }
Packit fb9d21
  while$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {my.full.label}
Packit fb9d21
{ 's :=
Packit fb9d21
  #1 'nameptr :=               % nameptr = 1;
Packit fb9d21
  s num.names$ 'numnames :=    % numnames = num.name$(s);
Packit fb9d21
  numnames 'namesleft :=
Packit fb9d21
    { namesleft #0 > }
Packit fb9d21
Packit fb9d21
    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
Packit fb9d21
      nameptr #1 >
Packit fb9d21
        { namesleft #1 >
Packit fb9d21
              { ", " * t * }
Packit fb9d21
              { numnames #2 >
Packit fb9d21
                  { "," * }
Packit fb9d21
                  'skip$
Packit fb9d21
                if$
Packit fb9d21
                t "others" =
Packit fb9d21
                    { " et~al." * }
Packit fb9d21
                    { " and " * t * } % from Chicago Manual of Style
Packit fb9d21
                  if$
Packit fb9d21
               }
Packit fb9d21
               if$
Packit fb9d21
             }
Packit fb9d21
            't
Packit fb9d21
        if$
Packit fb9d21
        s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := 
Packit fb9d21
	"\protect \index {" * t * "|bold}" *
Packit fb9d21
        nameptr #1 + 'nameptr :=          % nameptr += 1;
Packit fb9d21
        namesleft #1 - 'namesleft :=      % namesleft =- 1;
Packit fb9d21
    }
Packit fb9d21
  while$
Packit fb9d21
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.names.fml}
Packit fb9d21
%
Packit fb9d21
% Format names in "familiar" format, with first initial followed by
Packit fb9d21
% last name. Like format.names, ALL names are formatted.
Packit fb9d21
%
Packit fb9d21
{ 's :=
Packit fb9d21
  #1 'nameptr :=               % nameptr = 1;
Packit fb9d21
  s num.names$ 'numnames :=    % numnames = num.name$(s);
Packit fb9d21
  numnames 'namesleft :=
Packit fb9d21
    { namesleft #0 > }
Packit fb9d21
Packit fb9d21
    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
Packit fb9d21
Packit fb9d21
      nameptr #1 >
Packit fb9d21
        { namesleft #1 >
Packit fb9d21
              { ", " * t * }
Packit fb9d21
               { numnames #2 >
Packit fb9d21
                    { "," * }
Packit fb9d21
                    'skip$
Packit fb9d21
                  if$
Packit fb9d21
                  t "others" =
Packit fb9d21
                        { " et~al." * }
Packit fb9d21
                        { " and " * t * }
Packit fb9d21
%                       { " \& " * t * }
Packit fb9d21
                      if$
Packit fb9d21
                }
Packit fb9d21
               if$
Packit fb9d21
             }
Packit fb9d21
            't
Packit fb9d21
        if$
Packit fb9d21
        nameptr #1 + 'nameptr :=          % nameptr += 1;
Packit fb9d21
        namesleft #1 - 'namesleft :=      % namesleft =- 1;
Packit fb9d21
    }
Packit fb9d21
  while$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.authors}
Packit fb9d21
{ author empty$
Packit fb9d21
    { "" }
Packit fb9d21
    { author format.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.key}
Packit fb9d21
{ empty$
Packit fb9d21
    { key field.or.null }
Packit fb9d21
    { "" }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
%
Packit fb9d21
% Format editor names for use in the "in" types: inbook, incollection,
Packit fb9d21
% inproceedings: first initial, then last names. When editors are the
Packit fb9d21
% LABEL for an entry, then format.editor is used which lists editors
Packit fb9d21
% by last name first.
Packit fb9d21
%
Packit fb9d21
FUNCTION {format.editors.fml}
Packit fb9d21
{ editor empty$
Packit fb9d21
    { "" }
Packit fb9d21
    { editor format.names.fml
Packit fb9d21
      editor num.names$ #1 >
Packit fb9d21
    { " (Eds.)" * }
Packit fb9d21
    { " (Ed.)" * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
%
Packit fb9d21
% Format editor names for use in labels, last names first.
Packit fb9d21
%
Packit fb9d21
FUNCTION {format.editors}
Packit fb9d21
{ editor empty$
Packit fb9d21
    { "" }
Packit fb9d21
    { editor format.names
Packit fb9d21
      editor num.names$ #1 >
Packit fb9d21
    { " (Eds.)" * }
Packit fb9d21
    { " (Ed.)" * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.title}
Packit fb9d21
{ title empty$
Packit fb9d21
    { "" }
Packit fb9d21
    { title "t" change.case$ }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
% Note that the APA style requres case changes
Packit fb9d21
% in article titles. The following does not
Packit fb9d21
% change cases. If you perfer it, uncomment the
Packit fb9d21
% following and comment out the above.
Packit fb9d21
Packit fb9d21
%FUNCTION {format.title}
Packit fb9d21
%{ title empty$
Packit fb9d21
%    { "" }
Packit fb9d21
%    { title }
Packit fb9d21
%  if$
Packit fb9d21
%}
Packit fb9d21
Packit fb9d21
FUNCTION {n.dashify}
Packit fb9d21
{ 't :=
Packit fb9d21
  ""
Packit fb9d21
    { t empty$ not }
Packit fb9d21
    { t #1 #1 substring$ "-" =
Packit fb9d21
    { t #1 #2 substring$ "--" = not
Packit fb9d21
        { "--" *
Packit fb9d21
          t #2 global.max$ substring$ 't :=
Packit fb9d21
        }
Packit fb9d21
        {   { t #1 #1 substring$ "-" = }
Packit fb9d21
        { "-" *
Packit fb9d21
          t #2 global.max$ substring$ 't :=
Packit fb9d21
        }
Packit fb9d21
          while$
Packit fb9d21
        }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { t #1 #1 substring$ *
Packit fb9d21
      t #2 global.max$ substring$ 't :=
Packit fb9d21
    }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  while$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.btitle}
Packit fb9d21
{ edition empty$
Packit fb9d21
  { title emphasize }
Packit fb9d21
  { title empty$
Packit fb9d21
    { title emphasize }
Packit fb9d21
    { volume empty$     % gnp - check for volume, then don't need period
Packit fb9d21
       { "{\em " title * "\/} (" * edition * " ed.)" * "." * }
Packit fb9d21
       { "{\em " title * "\/} (" * edition * " ed.)" * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    if$
Packit fb9d21
  }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.emphasize.booktitle}
Packit fb9d21
{ edition empty$
Packit fb9d21
  { booktitle emphasize }
Packit fb9d21
  { booktitle empty$
Packit fb9d21
    { booktitle emphasize }
Packit fb9d21
    { volume empty$    % gnp - extra period an error if book has a volume
Packit fb9d21
        { "{\em " booktitle * "\/} (" * edition * " ed.)" * "." *}
Packit fb9d21
        { "{\em " booktitle * "\/} (" * edition * " ed.)" * }
Packit fb9d21
      if$
Packit fb9d21
      }
Packit fb9d21
    if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  }
Packit fb9d21
Packit fb9d21
Packit fb9d21
FUNCTION {tie.or.space.connect}
Packit fb9d21
{ duplicate$ text.length$ #3 <
Packit fb9d21
    { "~" }
Packit fb9d21
    { " " }
Packit fb9d21
  if$
Packit fb9d21
  swap$ * *
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {either.or.check}
Packit fb9d21
{ empty$
Packit fb9d21
    'pop$
Packit fb9d21
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.bvolume}
Packit fb9d21
{ volume empty$
Packit fb9d21
    { "" }
Packit fb9d21
    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
Packit fb9d21
      series empty$
Packit fb9d21
        'skip$
Packit fb9d21
        { " of " * series emphasize * }
Packit fb9d21
      if$
Packit fb9d21
      "volume and number" number either.or.check
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.number.series}
Packit fb9d21
{ volume empty$
Packit fb9d21
    { number empty$
Packit fb9d21
    { series field.or.null }
Packit fb9d21
    { output.state mid.sentence =
Packit fb9d21
        { "Number" } % gnp - changed to mixed case always
Packit fb9d21
        { "Number" }
Packit fb9d21
      if$
Packit fb9d21
      number tie.or.space.connect
Packit fb9d21
      series empty$
Packit fb9d21
        { "there's a number but no series in " cite$ * warning$ }
Packit fb9d21
        { " in " * series * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { "" }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
INTEGERS { multiresult }
Packit fb9d21
Packit fb9d21
FUNCTION {multi.page.check}
Packit fb9d21
{ 't :=
Packit fb9d21
  #0 'multiresult :=
Packit fb9d21
    { multiresult not
Packit fb9d21
      t empty$ not
Packit fb9d21
      and
Packit fb9d21
    }
Packit fb9d21
    { t #1 #1 substring$
Packit fb9d21
      duplicate$ "-" =
Packit fb9d21
      swap$ duplicate$ "," =
Packit fb9d21
      swap$ "+" =
Packit fb9d21
      or or
Packit fb9d21
    { #1 'multiresult := }
Packit fb9d21
    { t #2 global.max$ substring$ 't := }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  while$
Packit fb9d21
  multiresult
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.pages}
Packit fb9d21
{ pages empty$
Packit fb9d21
  { "" }
Packit fb9d21
  { pages multi.page.check
Packit fb9d21
	{ "pp.\ " pages n.dashify tie.or.space.connect } % gnp - removed ()
Packit fb9d21
	{ "pp.\ " pages tie.or.space.connect }
Packit fb9d21
    if$
Packit fb9d21
  }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
% By Young (and Spencer)
Packit fb9d21
% GNP - fixed bugs with missing volume, number, and/or pages
Packit fb9d21
%
Packit fb9d21
% Format journal, volume, number, pages for article types.
Packit fb9d21
%
Packit fb9d21
FUNCTION {format.jour.vol}
Packit fb9d21
{ fjournal empty$
Packit fb9d21
    { journal empty$
Packit fb9d21
	{ "no journal in " cite$ * warning$
Packit fb9d21
	  "" }
Packit fb9d21
	{ journal emphasize.space }
Packit fb9d21
	if$
Packit fb9d21
    } 
Packit fb9d21
    { fjournal emphasize.space }
Packit fb9d21
    if$
Packit fb9d21
  number empty$
Packit fb9d21
    { volume empty$
Packit fb9d21
       { "no number and no volume in " cite$ * warning$
Packit fb9d21
         "" * }
Packit fb9d21
       { "~{\em " * Volume * "}" * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { volume empty$
Packit fb9d21
      {"no volume for " cite$ * warning$
Packit fb9d21
       "~(" * number * ")" * }
Packit fb9d21
      { "~" *
Packit fb9d21
        volume emphasize.space
Packit fb9d21
        "(" * number * ")" * * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  pages empty$
Packit fb9d21
    {"page numbers missing in " cite$ * warning$
Packit fb9d21
     "" * } % gnp - place a null string on the stack for output
Packit fb9d21
    { duplicate$ empty$
Packit fb9d21
      { pop$ format.pages }
Packit fb9d21
      { ", " *  pages n.dashify * } % gnp - removed pp. for articles
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.chapter.pages}
Packit fb9d21
{ chapter empty$
Packit fb9d21
    'format.pages
Packit fb9d21
    { type empty$
Packit fb9d21
        { "Chapter" } % gnp - changed to mixed case
Packit fb9d21
        { type "t" change.case$ }
Packit fb9d21
      if$
Packit fb9d21
      chapter tie.or.space.connect
Packit fb9d21
      pages empty$
Packit fb9d21
        {"page numbers missing in " cite$ * warning$} % gnp - added check
Packit fb9d21
        { ", " * format.pages * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.in.ed.booktitle}
Packit fb9d21
{ booktitle empty$
Packit fb9d21
  { "" }
Packit fb9d21
  { editor empty$
Packit fb9d21
    { "In " format.emphasize.booktitle * }
Packit fb9d21
    { "In " format.editors.fml * ", " * format.emphasize.booktitle * }
Packit fb9d21
    if$
Packit fb9d21
  }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.thesis.type}
Packit fb9d21
{ type empty$
Packit fb9d21
    'skip$
Packit fb9d21
    { pop$
Packit fb9d21
      type "t" change.case$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.tr.number}
Packit fb9d21
{ type empty$
Packit fb9d21
    { "Technical Report" }
Packit fb9d21
    'type
Packit fb9d21
  if$
Packit fb9d21
  number empty$
Packit fb9d21
    { "t" change.case$ }
Packit fb9d21
    { number tie.or.space.connect }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.article.crossref}
Packit fb9d21
{ "See"
Packit fb9d21
  "\citeN{" * crossref * "}" *
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.crossref.editor}
Packit fb9d21
{ editor #1 "{vv~}{ll}" format.name$
Packit fb9d21
  editor num.names$ duplicate$
Packit fb9d21
  #2 >
Packit fb9d21
    { pop$ " et~al." * }
Packit fb9d21
    { #2 <
Packit fb9d21
    'skip$
Packit fb9d21
    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
Packit fb9d21
        { " et~al." * }
Packit fb9d21
        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.book.crossref}
Packit fb9d21
{ volume empty$
Packit fb9d21
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
Packit fb9d21
      "In "
Packit fb9d21
    }
Packit fb9d21
    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
Packit fb9d21
      " of " *
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  editor empty$
Packit fb9d21
  editor field.or.null author field.or.null =
Packit fb9d21
  or
Packit fb9d21
    { key empty$
Packit fb9d21
    { series empty$
Packit fb9d21
        { "need editor, key, or series for " cite$ * " to crossref " *
Packit fb9d21
          crossref * warning$
Packit fb9d21
          "" *
Packit fb9d21
        }
Packit fb9d21
        { "{\em " * series * "\/}" * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { key * }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { format.crossref.editor * }
Packit fb9d21
  if$
Packit fb9d21
  " \citeN{" * crossref * "}" *
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {format.incoll.inproc.crossref}
Packit fb9d21
{ "See"
Packit fb9d21
  " \citeN{" * crossref * "}" *
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
% format.lab.names:
Packit fb9d21
%
Packit fb9d21
% determines "short" names for the abbreviated author information.
Packit fb9d21
% "Long" labels are created in calc.label, using the routine my.full.label
Packit fb9d21
% to format author and editor fields.
Packit fb9d21
%
Packit fb9d21
% There are 4 cases for labels.   (n=3 in the example)
Packit fb9d21
% a) one author             Foo
Packit fb9d21
% b) one to n               Foo, Bar and Baz
Packit fb9d21
% c) use of "and others"    Foo, Bar et al.
Packit fb9d21
% d) more than n            Foo et al.
Packit fb9d21
%
Packit fb9d21
FUNCTION {format.lab.names}
Packit fb9d21
{ 's :=
Packit fb9d21
  s num.names$ 'numnames :=
Packit fb9d21
  numnames #2 >    % change number to number of others allowed before
Packit fb9d21
		   % forcing "et al".
Packit fb9d21
    { s #1 "{vv~}{ll}" format.name$ 
Packit fb9d21
      "\protect \index {" * 
Packit fb9d21
      s #1 "{vv~}{ll}{, jj}{, f.}" format.name$ *
Packit fb9d21
      "}" *
Packit fb9d21
	"\protect\chicagoetal/" * }
Packit fb9d21
    {
Packit fb9d21
      numnames #1 - 'namesleft :=
Packit fb9d21
      #2 'nameptr :=
Packit fb9d21
      s #1 "{vv~}{ll}" format.name$
Packit fb9d21
      "\protect \index {" * 
Packit fb9d21
      s #1 "{vv~}{ll}{, jj}{, f.}" format.name$ *
Packit fb9d21
      "}" *
Packit fb9d21
	{ namesleft #0 > }
Packit fb9d21
	{ nameptr numnames =
Packit fb9d21
	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
Packit fb9d21
		{ "\protect\chicagoetal/" * }
Packit fb9d21
		{ "\protect\chicagoand/" * s nameptr "{vv~}{ll}" format.name$ * 
Packit fb9d21
		  "\protect \index {" * 
Packit fb9d21
		  s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ *
Packit fb9d21
		  "}" *
Packit fb9d21
                }
Packit fb9d21
	      if$
Packit fb9d21
	    }
Packit fb9d21
	    { ", " * s nameptr "{vv~}{ll}" format.name$ * }
Packit fb9d21
	  if$
Packit fb9d21
	  nameptr #1 + 'nameptr :=
Packit fb9d21
	  namesleft #1 - 'namesleft :=
Packit fb9d21
	}
Packit fb9d21
      while$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {author.key.label}
Packit fb9d21
{ author empty$
Packit fb9d21
    { key empty$
Packit fb9d21
          { "no key, author in " cite$ * warning$
Packit fb9d21
            cite$ #1 #3 substring$ }
Packit fb9d21
         'key
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { author format.lab.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {editor.key.label}
Packit fb9d21
{ editor empty$
Packit fb9d21
    { key empty$
Packit fb9d21
          { "no key, editor in " cite$ * warning$
Packit fb9d21
            cite$ #1 #3 substring$ }
Packit fb9d21
          'key
Packit fb9d21
        if$
Packit fb9d21
     }
Packit fb9d21
     { editor format.lab.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {author.key.organization.label}
Packit fb9d21
%
Packit fb9d21
% added - gnp. Provide label formatting by organization if author is null.
Packit fb9d21
%
Packit fb9d21
{ author empty$
Packit fb9d21
    { organization empty$
Packit fb9d21
	{ key empty$
Packit fb9d21
	    { "no key, author or organization in " cite$ * warning$
Packit fb9d21
              cite$ #1 #3 substring$ }
Packit fb9d21
	    'key
Packit fb9d21
	  if$
Packit fb9d21
	}
Packit fb9d21
        { organization }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { author format.lab.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {editor.key.organization.label}
Packit fb9d21
%
Packit fb9d21
% added - gnp. Provide label formatting by organization if editor is null.
Packit fb9d21
%
Packit fb9d21
{ editor empty$
Packit fb9d21
    { organization empty$
Packit fb9d21
	{ key empty$
Packit fb9d21
	    { "no key, editor or organization in " cite$ * warning$
Packit fb9d21
              cite$ #1 #3 substring$ }
Packit fb9d21
	    'key
Packit fb9d21
	  if$
Packit fb9d21
	}
Packit fb9d21
        { organization }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { editor format.lab.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {author.editor.key.label}
Packit fb9d21
{ author empty$
Packit fb9d21
    { editor empty$
Packit fb9d21
          { key empty$
Packit fb9d21
               { "no key, author, or editor in " cite$ * warning$
Packit fb9d21
                 cite$ #1 #3 substring$ }
Packit fb9d21
             'key
Packit fb9d21
           if$
Packit fb9d21
         }
Packit fb9d21
          { editor format.lab.names }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { author format.lab.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {calc.label.orig}
Packit fb9d21
%
Packit fb9d21
% Changed - GNP. See also author.organization.sort, editor.organization.sort
Packit fb9d21
% Form label for BibTeX entry. The classification of which fields are used
Packit fb9d21
% for which type of entry (book, inbook, etc.) are taken from alpha.bst.
Packit fb9d21
% The change here from newapa is to also include organization as a
Packit fb9d21
% citation label if author or editor is missing.
Packit fb9d21
%
Packit fb9d21
{ type$ "book" =
Packit fb9d21
  type$ "inbook" =
Packit fb9d21
  or
Packit fb9d21
    'author.editor.key.label
Packit fb9d21
    { type$ "proceedings" =
Packit fb9d21
	'editor.key.organization.label
Packit fb9d21
	{ type$ "manual" =
Packit fb9d21
	    'author.key.organization.label
Packit fb9d21
	    'author.key.label
Packit fb9d21
	  if$
Packit fb9d21
	}
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
Packit fb9d21
  author empty$  % generate the full label citation information.
Packit fb9d21
    { editor empty$
Packit fb9d21
        { organization empty$
Packit fb9d21
           { "no author, editor, or organization in " cite$ * warning$
Packit fb9d21
             "??" }
Packit fb9d21
           { organization }
Packit fb9d21
           if$
Packit fb9d21
        }
Packit fb9d21
        { editor my.full.label }
Packit fb9d21
        if$
Packit fb9d21
    }
Packit fb9d21
    { author.key.label }
Packit fb9d21
  if$
Packit fb9d21
Packit fb9d21
% leave label on the stack, to be popped when required.
Packit fb9d21
Packit fb9d21
  "}{" * swap$ *
Packit fb9d21
%  year field.or.null purify$ #-1 #4 substring$ *
Packit fb9d21
%
Packit fb9d21
% save the year for sort processing afterwards (adding a, b, c, etc.)
Packit fb9d21
%
Packit fb9d21
  year field.or.null purify$ #-1 #4 substring$
Packit fb9d21
  'label.year :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {calc.label}
Packit fb9d21
%
Packit fb9d21
% Changed - GNP. See also author.organization.sort, editor.organization.sort
Packit fb9d21
% Form label for BibTeX entry. The classification of which fields are used
Packit fb9d21
% for which type of entry (book, inbook, etc.) are taken from alpha.bst.
Packit fb9d21
% The change here from newapa is to also include organization as a
Packit fb9d21
% citation label if author or editor is missing.
Packit fb9d21
%
Packit fb9d21
{ type$ "book" =
Packit fb9d21
  type$ "inbook" =
Packit fb9d21
  or
Packit fb9d21
    'author.editor.key.label
Packit fb9d21
    { type$ "proceedings" =
Packit fb9d21
	'editor.key.organization.label
Packit fb9d21
	{ type$ "manual" =
Packit fb9d21
	    'author.key.organization.label
Packit fb9d21
	    'author.key.label
Packit fb9d21
	  if$
Packit fb9d21
	}
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
Packit fb9d21
  author empty$  % generate the full label citation information.
Packit fb9d21
    { editor empty$
Packit fb9d21
        { organization empty$
Packit fb9d21
           { "no author, editor, or organization in " cite$ * warning$
Packit fb9d21
             "??" }
Packit fb9d21
           { organization }
Packit fb9d21
           if$
Packit fb9d21
        }
Packit fb9d21
        { editor my.full.label }
Packit fb9d21
        if$
Packit fb9d21
    }
Packit fb9d21
    { author my.full.label }
Packit fb9d21
  if$
Packit fb9d21
Packit fb9d21
% leave label on the stack, to be popped when required.
Packit fb9d21
Packit fb9d21
  "}{" * swap$ * "}{" * title * "}{" *
Packit fb9d21
%  year field.or.null purify$ #-1 #4 substring$ *
Packit fb9d21
%
Packit fb9d21
% save the year for sort processing afterwards (adding a, b, c, etc.)
Packit fb9d21
%
Packit fb9d21
  year field.or.null purify$ #-1 #4 substring$
Packit fb9d21
  'label.year :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {output.bibitem}
Packit fb9d21
{ newline$
Packit fb9d21
Packit fb9d21
  "\bibitem[\protect\citeauthortitleyear{" write$
Packit fb9d21
  calc.label write$
Packit fb9d21
  sort.year write$
Packit fb9d21
  "}]{" write$
Packit fb9d21
Packit fb9d21
  cite$ write$
Packit fb9d21
  "}" write$
Packit fb9d21
  newline$
Packit fb9d21
  ""
Packit fb9d21
  before.all 'output.state :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {article}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors
Packit fb9d21
  "author" output.check
Packit fb9d21
  author format.key output          % added
Packit fb9d21
  output.year.check                 % added
Packit fb9d21
  new.block
Packit fb9d21
  format.title
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  crossref missing$
Packit fb9d21
    { format.jour.vol output
Packit fb9d21
    }
Packit fb9d21
    { format.article.crossref output.nonnull
Packit fb9d21
      format.pages output
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {book}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  author empty$
Packit fb9d21
    { format.editors
Packit fb9d21
	  "author and editor" output.check }
Packit fb9d21
    { format.authors
Packit fb9d21
	  output.nonnull
Packit fb9d21
      crossref missing$
Packit fb9d21
    	{ "author and editor" editor either.or.check }
Packit fb9d21
    	'skip$
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  output.year.check       % added
Packit fb9d21
  new.block
Packit fb9d21
  format.btitle
Packit fb9d21
  "title" output.check
Packit fb9d21
  crossref missing$
Packit fb9d21
    { format.bvolume output
Packit fb9d21
      new.block
Packit fb9d21
      format.number.series output
Packit fb9d21
      new.sentence
Packit fb9d21
      address output
Packit fb9d21
      publisher "publisher" output.check.colon
Packit fb9d21
    }
Packit fb9d21
    { new.block
Packit fb9d21
      format.book.crossref output.nonnull
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {booklet}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors output
Packit fb9d21
  author format.key output          % added
Packit fb9d21
  output.year.check                 % added
Packit fb9d21
  new.block
Packit fb9d21
  format.title
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  howpublished output
Packit fb9d21
  address output
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {inbook}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  author empty$
Packit fb9d21
    { format.editors
Packit fb9d21
      "author and editor" output.check
Packit fb9d21
    }
Packit fb9d21
    { format.authors output.nonnull
Packit fb9d21
      crossref missing$
Packit fb9d21
    { "author and editor" editor either.or.check }
Packit fb9d21
    'skip$
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  output.year.check                 % added
Packit fb9d21
  new.block
Packit fb9d21
  format.btitle
Packit fb9d21
  "title" output.check
Packit fb9d21
  crossref missing$
Packit fb9d21
    { format.bvolume output
Packit fb9d21
      format.chapter.pages
Packit fb9d21
      "chapter and pages" output.check
Packit fb9d21
      new.block
Packit fb9d21
      format.number.series output
Packit fb9d21
      new.sentence
Packit fb9d21
      address output
Packit fb9d21
      publisher
Packit fb9d21
      "publisher" output.check.colon
Packit fb9d21
    }
Packit fb9d21
    { format.chapter.pages "chapter and pages" output.check
Packit fb9d21
      new.block
Packit fb9d21
      format.book.crossref output.nonnull
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {incollection}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors
Packit fb9d21
  "author" output.check
Packit fb9d21
  author format.key output       % added
Packit fb9d21
  output.year.check              % added
Packit fb9d21
  new.block
Packit fb9d21
  format.title
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  crossref missing$
Packit fb9d21
  { format.in.ed.booktitle
Packit fb9d21
    "booktitle" output.check
Packit fb9d21
    format.bvolume output
Packit fb9d21
    format.number.series output
Packit fb9d21
    format.chapter.pages output % gnp - was special.output.nonnull
Packit fb9d21
%                                 left out comma before page numbers
Packit fb9d21
    new.sentence
Packit fb9d21
    address output
Packit fb9d21
    publisher "publisher" output.check.colon
Packit fb9d21
  }
Packit fb9d21
  { format.incoll.inproc.crossref
Packit fb9d21
	output.nonnull
Packit fb9d21
    format.chapter.pages output
Packit fb9d21
  }
Packit fb9d21
  if$
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {inproceedings}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors
Packit fb9d21
  "author" output.check
Packit fb9d21
  author format.key output            % added
Packit fb9d21
  output.year.check                   % added
Packit fb9d21
  new.block
Packit fb9d21
  format.title
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  crossref missing$
Packit fb9d21
    { format.in.ed.booktitle
Packit fb9d21
	  "booktitle" output.check
Packit fb9d21
      format.bvolume output
Packit fb9d21
      format.number.series output
Packit fb9d21
      address output
Packit fb9d21
      format.pages output
Packit fb9d21
      new.sentence
Packit fb9d21
      organization output
Packit fb9d21
      publisher output.colon
Packit fb9d21
      }
Packit fb9d21
    { format.incoll.inproc.crossref output.nonnull
Packit fb9d21
      format.pages output
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {conference} { inproceedings }
Packit fb9d21
Packit fb9d21
FUNCTION {manual}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  author empty$
Packit fb9d21
    { editor empty$
Packit fb9d21
      { organization "organization" output.check
Packit fb9d21
        organization format.key output }  % if all else fails, use key
Packit fb9d21
      { format.editors "author and editor" output.check }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { format.authors output.nonnull }
Packit fb9d21
    if$
Packit fb9d21
  output.year.check                 % added
Packit fb9d21
  new.block
Packit fb9d21
  format.btitle
Packit fb9d21
  "title" output.check
Packit fb9d21
  organization address new.block.checkb
Packit fb9d21
% Reversed the order of "address" and "organization", added the ":".
Packit fb9d21
  address output
Packit fb9d21
  organization "organization" output.check.colon
Packit fb9d21
%  address output
Packit fb9d21
%  ":" output
Packit fb9d21
%  organization output
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {mastersthesis}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors
Packit fb9d21
  "author" output.check
Packit fb9d21
  author format.key output          % added
Packit fb9d21
  output.year.check                 % added
Packit fb9d21
  new.block
Packit fb9d21
  format.title
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  "Master's thesis" format.thesis.type output.nonnull
Packit fb9d21
  school "school" output.check
Packit fb9d21
  address output
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {misc}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors output
Packit fb9d21
  author format.key output            % added
Packit fb9d21
  output.year.check                   % added
Packit fb9d21
  title howpublished new.block.checkb
Packit fb9d21
  format.title output
Packit fb9d21
  new.block
Packit fb9d21
  howpublished output
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {phdthesis}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors
Packit fb9d21
  "author" output.check
Packit fb9d21
  author format.key output            % added
Packit fb9d21
  output.year.check                   % added
Packit fb9d21
  new.block
Packit fb9d21
  format.btitle
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  "Ph.\ D. thesis" format.thesis.type output.nonnull
Packit fb9d21
  school "school" output.check
Packit fb9d21
  address output
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {proceedings}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  editor empty$
Packit fb9d21
    { organization output
Packit fb9d21
      organization format.key output }  % gnp - changed from author format.key
Packit fb9d21
    { format.editors output.nonnull }
Packit fb9d21
  if$
Packit fb9d21
% author format.key output             % gnp - removed (should be either
Packit fb9d21
%                                        editor or organization
Packit fb9d21
  output.year.check                    % added (newapa)
Packit fb9d21
  new.block
Packit fb9d21
  format.btitle
Packit fb9d21
  "title" output.check
Packit fb9d21
  format.bvolume output
Packit fb9d21
  format.number.series output
Packit fb9d21
  address output
Packit fb9d21
  new.sentence
Packit fb9d21
  organization output
Packit fb9d21
  publisher output.colon
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {techreport}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors
Packit fb9d21
  "author" output.check
Packit fb9d21
  author format.key output             % added
Packit fb9d21
  output.year.check                    % added
Packit fb9d21
  new.block
Packit fb9d21
  format.title
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  format.tr.number output.nonnull
Packit fb9d21
  institution
Packit fb9d21
  "institution" output.check
Packit fb9d21
  address output
Packit fb9d21
  new.block
Packit fb9d21
  note output
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {unpublished}
Packit fb9d21
{ output.bibitem
Packit fb9d21
  format.authors
Packit fb9d21
  "author" output.check
Packit fb9d21
  author format.key output              % added
Packit fb9d21
  output.year.check                      % added
Packit fb9d21
  new.block
Packit fb9d21
  format.title
Packit fb9d21
  "title" output.check
Packit fb9d21
  new.block
Packit fb9d21
  note "note" output.check
Packit fb9d21
  fin.entry
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {default.type} { misc }
Packit fb9d21
Packit fb9d21
MACRO {jan} {"January"}
Packit fb9d21
Packit fb9d21
MACRO {feb} {"February"}
Packit fb9d21
Packit fb9d21
MACRO {mar} {"March"}
Packit fb9d21
Packit fb9d21
MACRO {apr} {"April"}
Packit fb9d21
Packit fb9d21
MACRO {may} {"May"}
Packit fb9d21
Packit fb9d21
MACRO {jun} {"June"}
Packit fb9d21
Packit fb9d21
MACRO {jul} {"July"}
Packit fb9d21
Packit fb9d21
MACRO {aug} {"August"}
Packit fb9d21
Packit fb9d21
MACRO {sep} {"September"}
Packit fb9d21
Packit fb9d21
MACRO {oct} {"October"}
Packit fb9d21
Packit fb9d21
MACRO {nov} {"November"}
Packit fb9d21
Packit fb9d21
MACRO {dec} {"December"}
Packit fb9d21
Packit fb9d21
MACRO {acmcs} {"ACM Computing Surveys"}
Packit fb9d21
Packit fb9d21
MACRO {acta} {"Acta Informatica"}
Packit fb9d21
Packit fb9d21
MACRO {ai} {"Artificial Intelligence"}
Packit fb9d21
Packit fb9d21
MACRO {cacm} {"Communications of the ACM"}
Packit fb9d21
Packit fb9d21
MACRO {ibmjrd} {"IBM Journal of Research and Development"}
Packit fb9d21
Packit fb9d21
MACRO {ibmsj} {"IBM Systems Journal"}
Packit fb9d21
Packit fb9d21
MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
Packit fb9d21
Packit fb9d21
MACRO {ieeetc} {"IEEE Transactions on Computers"}
Packit fb9d21
Packit fb9d21
MACRO {ieeetcad}
Packit fb9d21
 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
Packit fb9d21
Packit fb9d21
MACRO {ipl} {"Information Processing Letters"}
Packit fb9d21
Packit fb9d21
MACRO {jacm} {"Journal of the ACM"}
Packit fb9d21
Packit fb9d21
MACRO {jcss} {"Journal of Computer and System Sciences"}
Packit fb9d21
Packit fb9d21
MACRO {scp} {"Science of Computer Programming"}
Packit fb9d21
Packit fb9d21
MACRO {sicomp} {"SIAM Journal on Computing"}
Packit fb9d21
Packit fb9d21
MACRO {tocs} {"ACM Transactions on Computer Systems"}
Packit fb9d21
Packit fb9d21
MACRO {tods} {"ACM Transactions on Database Systems"}
Packit fb9d21
Packit fb9d21
MACRO {tog} {"ACM Transactions on Graphics"}
Packit fb9d21
Packit fb9d21
MACRO {toms} {"ACM Transactions on Mathematical Software"}
Packit fb9d21
Packit fb9d21
MACRO {toois} {"ACM Transactions on Office Information Systems"}
Packit fb9d21
Packit fb9d21
MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
Packit fb9d21
Packit fb9d21
MACRO {tcs} {"Theoretical Computer Science"}
Packit fb9d21
Packit fb9d21
READ
Packit fb9d21
Packit fb9d21
FUNCTION {sortify}
Packit fb9d21
{ purify$
Packit fb9d21
  "l" change.case$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
INTEGERS { len }
Packit fb9d21
Packit fb9d21
FUNCTION {chop.word}
Packit fb9d21
{ 's :=
Packit fb9d21
  'len :=
Packit fb9d21
  s #1 len substring$ =
Packit fb9d21
    { s len #1 + global.max$ substring$ }
Packit fb9d21
    's
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
Packit fb9d21
Packit fb9d21
FUNCTION {sort.format.names}
Packit fb9d21
{ 's :=
Packit fb9d21
  #1 'nameptr :=
Packit fb9d21
  ""
Packit fb9d21
  s num.names$ 'numnames :=
Packit fb9d21
  numnames 'namesleft :=
Packit fb9d21
    { namesleft #0 > }
Packit fb9d21
    { nameptr #2 =
Packit fb9d21
	{ year field.or.null purify$ #-1 #4 substring$ * }
Packit fb9d21
	'skip$
Packit fb9d21
      if$
Packit fb9d21
      nameptr #1 >
Packit fb9d21
          { "   " * }
Packit fb9d21
         'skip$
Packit fb9d21
      if$
Packit fb9d21
      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
Packit fb9d21
      nameptr numnames = t "others" = and
Packit fb9d21
          { " et~al" * }
Packit fb9d21
          { t sortify * }
Packit fb9d21
      if$
Packit fb9d21
      nameptr #1 + 'nameptr :=
Packit fb9d21
      namesleft #1 - 'namesleft :=
Packit fb9d21
    }
Packit fb9d21
  while$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {sort.format.title}
Packit fb9d21
{ 't :=
Packit fb9d21
  "A " #2
Packit fb9d21
    "An " #3
Packit fb9d21
      "The " #4 t chop.word
Packit fb9d21
    chop.word
Packit fb9d21
  chop.word
Packit fb9d21
  sortify
Packit fb9d21
  #1 global.max$ substring$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {author.sort}
Packit fb9d21
{ author empty$
Packit fb9d21
    { key empty$
Packit fb9d21
         { "to sort, need author or key in " cite$ * warning$
Packit fb9d21
           "" }
Packit fb9d21
         { key sortify }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { author sort.format.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {editor.sort}
Packit fb9d21
{ editor empty$
Packit fb9d21
    { key empty$
Packit fb9d21
         { "to sort, need editor or key in " cite$ * warning$
Packit fb9d21
           ""
Packit fb9d21
         }
Packit fb9d21
         { key sortify }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { editor sort.format.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {author.editor.sort}
Packit fb9d21
{ author empty$
Packit fb9d21
    { "missing author in " cite$ * warning$
Packit fb9d21
      editor empty$
Packit fb9d21
         { key empty$
Packit fb9d21
             { "to sort, need author, editor, or key in " cite$ * warning$
Packit fb9d21
               ""
Packit fb9d21
             }
Packit fb9d21
             { key sortify }
Packit fb9d21
           if$
Packit fb9d21
         }
Packit fb9d21
         { editor sort.format.names }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { author sort.format.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {author.organization.sort}
Packit fb9d21
%
Packit fb9d21
% added - GNP. Stack author or organization for sorting (from alpha.bst).
Packit fb9d21
% Unlike alpha.bst, we need entire names, not abbreviations
Packit fb9d21
%
Packit fb9d21
{ author empty$
Packit fb9d21
    { organization empty$
Packit fb9d21
	{ key empty$
Packit fb9d21
	    { "to sort, need author, organization, or key in " cite$ * warning$
Packit fb9d21
	      ""
Packit fb9d21
	    }
Packit fb9d21
	    { key sortify }
Packit fb9d21
	  if$
Packit fb9d21
	}
Packit fb9d21
	{ organization sortify }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { author sort.format.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {editor.organization.sort}
Packit fb9d21
%
Packit fb9d21
% added - GNP. Stack editor or organization for sorting (from alpha.bst).
Packit fb9d21
% Unlike alpha.bst, we need entire names, not abbreviations
Packit fb9d21
%
Packit fb9d21
{ editor empty$
Packit fb9d21
    { organization empty$
Packit fb9d21
	{ key empty$
Packit fb9d21
	    { "to sort, need editor, organization, or key in " cite$ * warning$
Packit fb9d21
	      ""
Packit fb9d21
	    }
Packit fb9d21
	    { key sortify }
Packit fb9d21
	  if$
Packit fb9d21
	}
Packit fb9d21
	{ organization sortify }
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
    { editor sort.format.names }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {presort}
Packit fb9d21
%
Packit fb9d21
% Presort creates the bibentry's label via a call to calc.label, and then
Packit fb9d21
% sorts the entries based on entry type. Chicago.bst adds support for
Packit fb9d21
% including organizations as the sort key; the following is stolen from
Packit fb9d21
% alpha.bst.
Packit fb9d21
%
Packit fb9d21
{ %calc.label sortify % recalculate bibitem label
Packit fb9d21
  %year field.or.null purify$ #-1 #4 substring$ * % add year
Packit fb9d21
  %duplicate$ warning$
Packit fb9d21
  %"    "
Packit fb9d21
  %*
Packit fb9d21
  type$ "book" =
Packit fb9d21
  type$ "inbook" =
Packit fb9d21
  or
Packit fb9d21
    'author.editor.sort
Packit fb9d21
    { type$ "proceedings" =
Packit fb9d21
	'editor.organization.sort
Packit fb9d21
	{ type$ "manual" =
Packit fb9d21
	    'author.organization.sort
Packit fb9d21
	    'author.sort
Packit fb9d21
	  if$
Packit fb9d21
	}
Packit fb9d21
      if$
Packit fb9d21
    }
Packit fb9d21
  if$
Packit fb9d21
  #1 entry.max$ substring$        % added for newapa
Packit fb9d21
  'sort.label :=                  % added for newapa
Packit fb9d21
  sort.label                      % added for newapa
Packit fb9d21
  %*
Packit fb9d21
  "    "
Packit fb9d21
  *
Packit fb9d21
  title field.or.null
Packit fb9d21
  sort.format.title
Packit fb9d21
  *
Packit fb9d21
  #1 entry.max$ substring$
Packit fb9d21
  'sort.key$ :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
ITERATE {presort}
Packit fb9d21
Packit fb9d21
SORT             % by label, year, author/editor, title
Packit fb9d21
Packit fb9d21
STRINGS { last.label next.extra }
Packit fb9d21
Packit fb9d21
INTEGERS { last.extra.num }
Packit fb9d21
Packit fb9d21
FUNCTION {initialize.extra.label.stuff}
Packit fb9d21
{ #0 int.to.chr$ 'last.label :=
Packit fb9d21
  "" 'next.extra :=
Packit fb9d21
  #0 'last.extra.num :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {forward.pass}
Packit fb9d21
%
Packit fb9d21
% Pass through all entries, comparing current entry to last one.
Packit fb9d21
% Need to concatenate year to the stack (done by calc.label) to determine
Packit fb9d21
% if two entries are the same (see presort)
Packit fb9d21
%
Packit fb9d21
{ last.label
Packit fb9d21
  calc.label.orig year field.or.null purify$ #-1 #4 substring$ * % add year
Packit fb9d21
  #1 entry.max$ substring$ =     % are they equal?
Packit fb9d21
     { last.extra.num #1 + 'last.extra.num :=
Packit fb9d21
       last.extra.num int.to.chr$ 'extra.label :=
Packit fb9d21
     }
Packit fb9d21
     { "a" chr.to.int$ 'last.extra.num :=
Packit fb9d21
       "" 'extra.label :=
Packit fb9d21
       calc.label.orig year field.or.null purify$ #-1 #4 substring$ * % add year
Packit fb9d21
       #1 entry.max$ substring$ 'last.label := % assign to last.label
Packit fb9d21
     }
Packit fb9d21
  if$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
FUNCTION {reverse.pass}
Packit fb9d21
{ next.extra "b" =
Packit fb9d21
    { "a" 'extra.label := }
Packit fb9d21
     'skip$
Packit fb9d21
  if$
Packit fb9d21
  label.year extra.label * 'sort.year :=
Packit fb9d21
  extra.label 'next.extra :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
EXECUTE {initialize.extra.label.stuff}
Packit fb9d21
Packit fb9d21
ITERATE {forward.pass}
Packit fb9d21
Packit fb9d21
REVERSE {reverse.pass}
Packit fb9d21
Packit fb9d21
FUNCTION {bib.sort.order}
Packit fb9d21
{ sort.label
Packit fb9d21
  "    "
Packit fb9d21
  *
Packit fb9d21
  year field.or.null sortify
Packit fb9d21
  *
Packit fb9d21
  "    "
Packit fb9d21
  *
Packit fb9d21
  title field.or.null
Packit fb9d21
  sort.format.title
Packit fb9d21
  *
Packit fb9d21
  #1 entry.max$ substring$
Packit fb9d21
  'sort.key$ :=
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
ITERATE {bib.sort.order}
Packit fb9d21
Packit fb9d21
SORT             % by sort.label, year, title --- giving final bib. order.
Packit fb9d21
Packit fb9d21
FUNCTION {begin.bib}
Packit fb9d21
Packit fb9d21
{ preamble$ empty$
Packit fb9d21
    'skip$
Packit fb9d21
    { preamble$ write$ newline$ }
Packit fb9d21
  if$
Packit fb9d21
  "\begin{thebibliography}{}" write$ newline$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
Packit fb9d21
EXECUTE {begin.bib}
Packit fb9d21
Packit fb9d21
EXECUTE {init.state.consts}
Packit fb9d21
Packit fb9d21
ITERATE {call.type$}
Packit fb9d21
Packit fb9d21
FUNCTION {end.bib}
Packit fb9d21
{ newline$
Packit fb9d21
  "\end{thebibliography}" write$ newline$
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
EXECUTE {end.bib}
Packit fb9d21