 %-----------------------------------------
 % For Waves in Random and Complex Media `tWRM.bst',
 % Taylor & Francis Limited.
 % generated with the docstrip utility.
 % Developed by SR Nova, Bangalore, India; modified by MKB, 30-Apr-08
 % ----------------------------------------
 % *** Waves in Random and Complex Media (tWRM) ***
 % 
 % This bibliography style file is intended for texts in ENGLISH.
 % This is similar to a standard BibTeX style with entires are not sorted but 
 % are printed in the order in which they first appear with in the body text.
 %---------------------------------------------------------------------------

ENTRY
  { address
    author
    booktitle
    chapter
    chaptertitle
    englishtitle
    edition
    editor
    eid
    howpublished
    institution
    journal
    key
    month
    note
    number
    organization
    pages
    publisher
    location
    school
    series
    seriestitle
    title
    type
    volume
    year
    department
    part
    translator
  }
  {}
  { label } %extra.label sort.label short.list
INTEGERS { output.state before.all mid.sentence after.sentence after.block sort.num }
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$
          "\newblock " write$
        }
        { 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 {add.blank}
{  " " * before.all 'output.state :=
}

FUNCTION {date.block}
{
  skip$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}
FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}
FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}
FUNCTION {non.stop}
{ duplicate$
   "}" * add.period$
   #-1 #1 substring$ "." =
}

FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}
FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}
FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\itshape " swap$ * "}" * }
  if$
}

FUNCTION {bold}
{ duplicate$ empty$
    { pop$ "" }
    { "\textbf{" swap$ * "}" * }
  if$
}

FUNCTION {etalemphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\itshape{" swap$ * "}}" * }
  if$
}

FUNCTION {tie.or.space.prefix}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$
}

FUNCTION {capitalize}
{ "u" change.case$ "t" change.case$ }

FUNCTION {space.word}
{ " " swap$ * " " * }
 % Here are the language-specific definitions for explicit words.
 % Each function has a name bbl.xxx where xxx is the English word.
 % The language selected here is ENGLISH
FUNCTION {bbl.and}
{ "and"}

FUNCTION {bbl.etal}
{ "et~al." }

FUNCTION {bbl.editors}
{ "eds." }

FUNCTION {bbl.editor}
{ "ed." }

FUNCTION {bbl.edby}
{ "edited by " }

FUNCTION {bbl.edition}
{ "ed." }

FUNCTION {bbl.volume}
{ "Vol. " }

FUNCTION {bbl.part}
{ "part " }

FUNCTION {bbl.translator}
{ "(Transl.)" }


FUNCTION {bbl.of}
{ "of" }

FUNCTION {bbl.number}
{ "no." }

FUNCTION {bbl.nr}
{ "no." }

FUNCTION {bbl.in}
{ "in" }

FUNCTION {bbl.plainin}
{ "In:" }

FUNCTION {bbl.pages}
{ "pp." }

FUNCTION {bbl.page}
{ "p." }

FUNCTION {bbl.chapter}
{ "chap." }

FUNCTION {bbl.chaptertitle}
{ "Chapter title." }

FUNCTION {bbl.techrep}
{ "" }

FUNCTION {bbl.mthesis}
{ "Master's thesis" }

FUNCTION {bbl.phdthesis}
{ "PhD thesis" }

MACRO {jan} {"Jan."}

MACRO {feb} {"Feb."}

MACRO {mar} {"Mar."}

MACRO {apr} {"Apr."}

MACRO {may} {"May"}

MACRO {jun} {"Jun."}

MACRO {jul} {"Jul."}

MACRO {aug} {"Aug."}

MACRO {sep} {"Sep."}

MACRO {oct} {"Oct."}

MACRO {nov} {"Nov."}

MACRO {dec} {"Dec."}

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"}

FUNCTION {bibinfo.check}
{ swap$
  duplicate$ missing$
    {
      pop$ pop$
      ""
    }
    { duplicate$ empty$
        {
          swap$ pop$
        }
        { swap$
          pop$
        }
      if$
    }
  if$
}
FUNCTION {bibinfo.warn}
{ swap$
  duplicate$ missing$
    {
      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
      ""
    }
    { duplicate$ empty$
        {
          swap$ "empty " swap$ * " in " * cite$ * warning$
        }
        { swap$
          pop$
        }
      if$
    }
  if$
}
INTEGERS { nameptr namesleft numnames }


STRINGS  { bibinfo}

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{f{.}.}{ ll}{ jj}{vv~}"
      format.name$
      bibinfo bibinfo.check
      't :=
      nameptr #1 >
        {
          namesleft #1 >
            { ", " * t * }
            { numnames #2 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "," * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                { numnames #3 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "" * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                { numnames #4 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "" * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                { numnames #5 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "" * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                { numnames #6 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "" * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                { numnames #7 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "" * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                { numnames #8 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "" * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                { numnames #9 >
              %s nameptr "{ll}" format.name$ duplicate$ "others" =
              { "" * }
              	'skip$
                %{ 't := }
                %{ pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal  *%emphasize
                }
                {
                nameptr #10 >
                  { pop$ 
                    s #1 "{f{.}.}{ ll}{ jj}{vv~}" format.name$ " " * bbl.etal  * %emphasize
                  }
                {
                  bbl.and
                  space.word * t *
                }
              if$
                }
              if$
                }
              if$
                }
              if$
                }
                if$
                }
              if$
                }
              if$
                }
              if$
            }
          if$
          }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}
FUNCTION {format.names.ed}
{
  'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{f{.}.~}{vv~}{ll}{ jj}"
      format.name$
      bibinfo bibinfo.check
      't :=
      nameptr #1 >
        {
          namesleft #1 >
            { ", " * t * }
            {
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                {

                  " " * bbl.etal emphasize *
                }
                {
                  bbl.and
                  space.word * t * ", "
                }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}
FUNCTION {format.key}
{ empty$
    { key field.or.null }
    { "" }
  if$
}

FUNCTION {format.authors}
{ author "author" format.names
}
FUNCTION {get.bbl.editor}
{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }

FUNCTION {format.editors}
{ editor "editor" format.names duplicate$ empty$ 'skip$
    {
      "" *
      " " *
      get.bbl.editor
      %capitalize
   "(" swap$ * ")" *
      *
    }
  if$
}

FUNCTION {format.plaineditors}
{ editor "editor" format.names empty$ 'skip$
    {
      " " * 
    get.bbl.editor
    %capitalize
    "" swap$ * ", "  * * 
    }
  if$
  add.blank
}

FUNCTION {format.note}
{
 note empty$
    { "" }
    { add.blank
      note #1 #1 substring$
      duplicate$ "{" =
        'skip$
        { output.state mid.sentence =
          { "t" }
          { "t" }
        if$
        change.case$
        }
      if$
      note #2 global.max$ substring$ * "note" bibinfo.check
      duplicate$ empty$
         { pop$ "" }
         { "" swap$ * "" * }
      if$
    }
  if$
}


FUNCTION {format.title}
{ title
  "title" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      "" swap$ *
      "; " *
    }
  if$
}
FUNCTION {format.trntitle}
{ title empty$
    { "" }
    {add.blank title "title" bibinfo.check
      duplicate$ empty$ 'skip$
      { emphasize
       "in " swap$ *
      "" *
      }
    if$
    }
  if$
}
FUNCTION {format.englishtitle}
{ englishtitle empty$
    { "" }
    { add.blank englishtitle "englishtitle" bibinfo.check
      duplicate$ empty$ 'skip$
        { emphasize
           "[" swap$ *
          "]" * 
        }
      if$
    }
  if$
}

FUNCTION {format.plaintitle}
{ title
  "title" bibinfo.check
  duplicate$ empty$ 'skip$
    {emphasize
      "" swap$ *
      ", " *
    }
  if$
}
FUNCTION {format.title.dot}
{ title
  "title" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      "``" swap$ *
      "''. " *
    }
  if$
}
FUNCTION {end.quote.title}
{ title empty$
    'skip$
    { before.all 'output.state := }
  if$
}
% FUNCTION {end.quote.booktitle}
% { booktitle empty$
%     'skip$
%     { before.all 'output.state := }
%   if$
% }
FUNCTION {format.full.names}
{'s :=
 "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv~}{ll}" format.name$
      't :=
      nameptr #1 >
        {
          namesleft #1 >
            { ", " * t * }
            {
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal emphasize *
                }
                {
                  bbl.and
                  space.word * t *
                }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {author.editor.key.full}
{ author empty$
    { editor empty$
        { key empty$
            { cite$ #1 #3 substring$ }
            'key
          if$
        }
        { editor format.full.names }
      if$
    }
    { author format.full.names }
  if$
}

FUNCTION {author.key.full}
{ author empty$
    { key empty$
         { cite$ #1 #3 substring$ }
          'key
      if$
    }
    { author format.full.names }
  if$
}

FUNCTION {editor.key.full}
{ editor empty$
    { key empty$
         { cite$ #1 #3 substring$ }
          'key
      if$
    }
    { editor format.full.names }
  if$
}

FUNCTION {make.full.names}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.key.full
    { type$ "proceedings" =
        'editor.key.full
        'author.key.full
      if$
    }
  if$
}

FUNCTION {output.bibitem}
{ newline$
  "\bibitem[" write$
  label write$
  "]{" write$
  cite$ write$
  "}" write$
  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 {word.in}
{ bbl.in
  " " * }

FUNCTION {word.plainin}
{ bbl.plainin
  " " * }

FUNCTION {format.date}
{ year "year" bibinfo.check duplicate$ empty$
    {
      "empty year in " cite$ * "; set to ????" * warning$
       pop$ "????"
    }
    'skip$
  if$
  %extra.label *
  before.all 'output.state :=
  " (" swap$ * "), " *
}

FUNCTION {format.unpubdate}
{ year "year" bibinfo.check duplicate$ empty$
    {
      "empty year in " cite$ * "; set to ????" * warning$
       pop$ "????"
    }
    'skip$
  if$
  %extra.label *
  before.all 'output.state :=
  " (" swap$ * ")" *
}

FUNCTION {format.plaindate}
{ year "year" bibinfo.check duplicate$ empty$
    {
      "empty year in " cite$ * "; set to ????" * warning$
       pop$ "????"
    }
    'skip$
  if$
  %extra.label *
  before.all 'output.state :=
  ", " swap$ * "" *
}

FUNCTION {format.btitle}
{ title empty$
    { "" }
    {bbl.chaptertitle output add.blank}
  if$
  title "title" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      emphasize
    }
  if$
}

FUNCTION {format.chaptertitle}
{ chaptertitle empty$
    { "" }
    {chaptertitle "chaptertitle" bibinfo.check}
  if$
  duplicate$ empty$ 
    'skip$
    { emphasize " " swap$ *
      ", " *
    }
  if$
}

FUNCTION {format.inbtitle}
{ title "title" bibinfo.check
  emphasize
  word.in swap$ *
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}
FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { bbl.volume volume tie.or.space.prefix
      "volume" bibinfo.check * *
      series "series" bibinfo.check
      duplicate$ empty$ 'pop$
        { swap$ bbl.of space.word * swap$
          emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.part}
{ part empty$
    { "" }
    { bbl.part part tie.or.space.prefix
      "part" bibinfo.check * *
      duplicate$ empty$ 'pop$
        { ", " * }
      if$
    }
  if$
}

FUNCTION {format.translator}
{ translator duplicate$ empty$ 'skip$
    { "translator" bibinfo.check
    %" " swap$ " " * bbl.translator * ", " *
      add.blank ", " swap$ * "(Transl.)" *
      ", " *
    }
  if$
}

FUNCTION {format.bookvolume}
{ volume empty$
    { "" }
    { series "series" bibinfo.check
      bbl.volume tie.or.space.prefix 
      volume "volume" bibinfo.check * *  
      duplicate$ empty$ 'pop$
        {* ", " 
          * }
      if$
      "volume and number" number either.or.check
    }
  if$
}
FUNCTION {format.number.series}
{ volume empty$
    { number empty$
        { series field.or.null }
        { series empty$
            { number "number" bibinfo.check }
            { output.state mid.sentence =
                { bbl.number }
                { bbl.number capitalize }
              if$
              number tie.or.space.prefix "number" bibinfo.check * *
              bbl.in space.word *
              series "series" bibinfo.check *
            }
          if$
        }
      if$
    }
    { "" }
  if$
}

FUNCTION {format.number.plainseries}
{ volume empty$
    { number empty$
        { series field.or.null }
        { series empty$
            { number "number" bibinfo.check }
            { output.state mid.sentence =
                { bbl.number }
                { bbl.number capitalize }
              if$
              number tie.or.space.prefix "number" bibinfo.check * *
              bbl.plainin space.word *
              series "series" bibinfo.check *
            }
          if$
        }
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition duplicate$ empty$ 'skip$
    {
      output.state mid.sentence =
        { "l" }
        { "t" }
      if$ change.case$
      "edition" bibinfo.check
      add.blank
   " " swap$ " " * bbl.edition * ", " *
      *
    }
  if$
}

FUNCTION {format.bookedition}
{ edition duplicate$ empty$ 'skip$
    { "edition" bibinfo.check
      " " * 
    }
  if$
}

FUNCTION {format.trnbookedition}
{ edition duplicate$ empty$ 'skip$
    { "edition" bibinfo.check
      add.blank ", " swap$ * 
      "" *
    }
  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 duplicate$ empty$ 'skip$
    { duplicate$ multi.page.check
        {
          bbl.pages swap$
          n.dashify
        }
        {
          bbl.page swap$
        }
      if$
      tie.or.space.prefix
      "pages" bibinfo.check
      * *
    }
  if$
}


FUNCTION {format.journal.pages}
{ pages empty$
    'skip$
    { duplicate$ empty$
        { pop$ format.pages }
        {
          ", " *
          pages n.dashify *
        }
      if$
    }
  if$
}


FUNCTION {format.journal.eid}
{ eid "eid" bibinfo.check
  duplicate$ empty$ 'pop$
    { swap$ duplicate$ empty$ 'skip$
      {
          ", " *
      }
      if$
      swap$ *
    }
  if$
}

FUNCTION {format.vol.year.num.pages}
{ volume field.or.null
  duplicate$ empty$ 'skip$
    {
      %bold
    }
  if$
  number bibinfo.check duplicate$ empty$ 'skip$
    {
      swap$ duplicate$ empty$
        { "there's a number but no volume in " cite$ * warning$ }
        'skip$
      if$
      swap$
      "" swap$ * "" *
    }
  if$
  year empty$
        { "year missing in " cite$ * warning$ }
        { " (" * year * ")" * }
  if$ * 
  eid empty$
    {  }
    { format.journal.eid }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
        { bbl.chapter }
        { type "l" change.case$
          "type" bibinfo.check
        }
      if$
      chapter tie.or.space.prefix
      "chapter" bibinfo.check
      * *
      pages empty$
        'skip$
        { ", " * format.pages * }
      if$
    }
  if$
}


FUNCTION {format.chapter}
{ chapter empty$
    'format.pages
    { type empty$
        { bbl.chapter }
        { type "l" change.case$
          "type" bibinfo.check
        }
      if$
      chapter tie.or.space.prefix
      "chapter" bibinfo.check
      * *
    }
  if$
}


FUNCTION {format.inchapter}
{ chapter
  "chapter" bibinfo.check
  duplicate$ empty$ 'skip$
    {
      "" swap$ *
      ". " *
    }
  if$
}

FUNCTION {format.edbooktitle}
{
  booktitle "booktitle" bibinfo.check
  emphasize
}
FUNCTION {format.in.ed.booktitle}
{ format.edbooktitle duplicate$ empty$ 'skip$
    {
      editor "editor" format.names.ed duplicate$ empty$ 'pop$
        {
          get.bbl.editor
          " " * swap$ * 
          "" swap$ * "" *
          swap$
          ", " * swap$
          * 
          }
      if$
      word.in swap$ *
    }
  if$
}

FUNCTION {format.booktitle}
{ title empty$
    { "" }
    {add.blank title "title" bibinfo.check}
  if$
  duplicate$ empty$ 'skip$
    { emphasize
    "" swap$ * 
      *  ", "% *
    }
  if$
}
FUNCTION {format.no.booktitle}
{ booktitle empty$
    { "" }
    {add.blank booktitle "booktitle" bibinfo.check}
  if$
  duplicate$ empty$ 'skip$
    {
      emphasize
      ", " *
    }
  if$
}

FUNCTION {format.in.booktitle}
{ booktitle empty$
  { "" }
  { editor empty$ 
      { booktitle "booktitle" bibinfo.check 
        emphasize
        word.in swap$ * 
        }
      { word.in * % swap$
        add.blank
        booktitle "booktitle" bibinfo.check 
        emphasize
        ", " *}
   if$
  }
  if$
}

FUNCTION {format.inproc.booktitle}
{
  booktitle "booktitle" bibinfo.check
       "" word.in swap$ emphasize * swap$ emphasize *
}

FUNCTION {format.plainin.booktitle}
{
  booktitle "booktitle" bibinfo.check
}

FUNCTION {format.thesis.type}
{ type duplicate$ empty$
    'pop$
    { swap$ pop$
      "t" change.case$ "type" bibinfo.check
    }
  if$
}
FUNCTION {format.tr.number}
{ number "number" bibinfo.check
  type duplicate$ empty$
    { pop$ bbl.techrep }
    'skip$
  if$
  "type" bibinfo.check
  swap$ duplicate$ empty$
    { pop$ "t" change.case$ }
    { tie.or.space.prefix * * }
  if$
}
FUNCTION {format.article.crossref}
{
  word.in
  " \cite{" * crossref * "}" *
}
FUNCTION {format.book.crossref}
{ volume duplicate$ empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      pop$ word.in
    }
    { bbl.volume
      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
    }
  if$
  " \cite{" * crossref * "}" *
}
FUNCTION {format.incoll.inproc.crossref}
{
  word.in
  " \cite{" * crossref * "}" *
}
FUNCTION {format.org.or.pub}
{ 't :=
  " "
  publisher empty$ t empty$ and
    'skip$
    {
      publisher "publisher" bibinfo.check *
      t empty$
        'skip$
        { publisher empty$
            'skip$
            { ", " * }
          if$
          t * 
        }
      if$
    }
  if$ "" * 
}
FUNCTION {noformat.org.or.pub}
{ 't :=
  ""
  address empty$ t empty$ and
    'skip$
    {
      address "address" bibinfo.check *
      t empty$
        'skip$
        { address empty$
            'skip$
            { ": " * }
          if$
          t * 
        }
      if$
    }
  if$  
}

FUNCTION {format.publisher.address}
{ publisher empty$
    { publisher "publisher" bibinfo.warn noformat.org.or.pub }
    { add.blank
      address "address" bibinfo.warn format.org.or.pub }
  if$  
}

FUNCTION {format.organization.address}
{ organization "organization" bibinfo.check noformat.org.or.pub
}

FUNCTION {format.location}
{ location empty$
    { "" }
    { location "location" bibinfo.check}
  if$  
}

STRINGS {oldname}

FUNCTION {name.or.dash}
{ 's :=
   oldname empty$
     { s 'oldname := s }
     { s oldname =
         { "---{}---{}---" }
         { s 'oldname := s }
       if$
     }
   if$
}


FUNCTION {format.month}
{ month empty$
    { "" }
    { month "month" bibinfo.check 
       ", " *}
  if$  
}


FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  name.or.dash
  author format.key output
  format.plaintitle "title" output.check
  end.quote.title
  crossref missing$
    {
      journal
      "journal" bibinfo.check
      "journal" output.check
      add.blank
      format.vol.year.num.pages output
      format.pages output
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  format.note output
  fin.entry
}
FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
      name.or.dash
      editor format.key output
      add.blank
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
      }
  if$
  format.chaptertitle "chaptertitle" output.check
  format.booktitle "title" output.check
  add.blank
  format.bookedition output
  crossref missing$
    { format.number.series output
      format.bookvolume output
      format.publisher.address output
    }
    {
      format.book.crossref output.nonnull
    }
  if$
  format.plaindate "year" output.check 
  format.note output
  fin.entry
}
FUNCTION {translatedbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
      name.or.dash
      editor format.key output
      add.blank
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
      }
  if$
  format.chaptertitle "chaptertitle" output.check
  format.trntitle "title" output.check
  format.englishtitle "englishtitle" output.check
  format.translator "translator" output.check
  format.trnbookedition "edition" output.check
  crossref missing$
    { format.bvolume output
      format.number.series output 
      format.publisher.address output
      format.plaindate "year" output.check
    }
    {
      format.book.crossref output.nonnull
    }
  if$
  format.note output
  fin.entry
}
FUNCTION {booklet}
{ output.bibitem
  format.authors output
  name.or.dash
  author format.key output
  format.title "title" output.check
  end.quote.title
  howpublished "howpublished" bibinfo.check output
  address "address" bibinfo.check output
  format.note output
  format.date "year" output.check
  fin.entry
}


FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
      name.or.dash
      editor format.key output
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  format.plaindate "year" output.check
  crossref missing$
    {
      format.bvolume output
      format.number.series output
      format.inchapter "chapter" output.check
      end.quote.title
    }
    {
      format.inchapter "chapter" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  end.quote.title
  format.inbtitle "title" output.check
  format.edition output
  format.publisher.address output
  date.block
  format.note output
  format.pages output
  fin.entry
}


FUNCTION {inbookseries}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
      name.or.dash
      editor format.key output
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  crossref missing$
    { 
      seriestitle "seriestitle" bibinfo.check output
      emphasize
      format.bvolume output
      format.number.series output
      format.part output
      format.no.booktitle "booktitle" output.check
      format.inchapter "chapter" output.check
      end.quote.title
    }
    {
      format.inchapter "chapter" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  end.quote.title
  format.publisher.address output
  format.plaindate "year" output.check
  date.block
  format.note output
  format.pages output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  name.or.dash
  author format.key output
  crossref missing$
   { format.plaintitle "title" output.check
      title format.key output
%      format.in.booktitle "booktitle" output.check
format.bvolume output
      end.quote.booktitle
       editor empty$
       {" " * 
       }
       {
%  format.in.ed.booktitle "booktitle" output.check
        end.quote.booktitle
        editor "editor" format.names.ed
output
        format.plaineditors "author and editor" output.check  
       }
      if$
    }
     { format.incoll.inproc.crossref output.nonnull
     }
  if$
  format.edition output
  format.publisher.address output
  format.plaindate "year" output.check
  format.chapter.pages output
  fin.entry
}
FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  name.or.dash
  author format.key output
  format.plaintitle "title" output.check
  end.quote.title
  crossref missing$
    { format.inproc.booktitle "booktitle" output.check
      format.edition output
      editor empty$
        { }
        { editor "editor" format.names.ed 
          format.plaineditors "author and editor" output.check
        }
      if$
      format.bvolume output
      format.number.plainseries output
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  format.location output
  format.month output
  format.note output
  format.publisher.address output
  format.plaindate "year" output.check
  format.chapter.pages output
  fin.entry
}
FUNCTION {conference} { inproceedings }
FUNCTION {manual}
{ output.bibitem
  format.authors output
  name.or.dash
  author format.key output
  format.btitle "title" output.check
  organization "organization" bibinfo.check output
  address "address" bibinfo.check output
  format.edition output
  format.note output
  format.date "year" output.check
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  name.or.dash
  author format.key output
  format.title
  "title" output.check
  end.quote.title
  bbl.mthesis format.thesis.type output.nonnull
  school "school" bibinfo.warn output
  address "address" bibinfo.check output
  format.note output
  format.date "year" output.check
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  name.or.dash
  author format.key output
  format.title output
  end.quote.title
  howpublished "howpublished" bibinfo.check output
  format.note output
  %format.date "year" output.check
  fin.entry
}
FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  name.or.dash
  author format.key output
  format.plaintitle
  "title" output.check
  end.quote.title
  type "type" bibinfo.warn output
  %bbl.phdthesis output.nonnull 
  institution "institution" bibinfo.warn output
  school "school" bibinfo.warn output
  address "address" bibinfo.check output
  format.plaindate "year" output.check
  format.note output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  format.editors output
  name.or.dash
  editor format.key output
  format.btitle "title" output.check
  format.bvolume output
  format.number.plainseries output
  publisher empty$
    { format.organization.address output }
    { organization "organization" bibinfo.check output
      format.publisher.address output
    }
  if$
  format.note output
  format.date "year" output.check
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  name.or.dash
  author format.key output
  format.plaintitle
  "title" output.check
  end.quote.title
  format.tr.number output.nonnull
  department "department" bibinfo.check output
  institution "institution" bibinfo.warn output
  address "address" bibinfo.check output
  format.plaindate "year" output.check 
  format.note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  name.or.dash
  author format.key output
  format.plaintitle "title" output.check
  end.quote.title
  howpublished "howpublished" bibinfo.check output
  format.date "year" output.check 
  format.note "note" output.check
  fin.entry
}

FUNCTION {default.type} { misc }
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 :=
  "" 't :=
  s #1 "{vv~}{ll}" format.name$
  s num.names$ duplicate$
  #2 >
    { pop$
      " " * bbl.etal etalemphasize * 
    }
    { #2 <
        'skip$
        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            {
              " " * bbl.etal etalemphasize *
            }
            { bbl.and space.word * 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 {editor.key.label}
{ editor empty$
    { key empty$
        { cite$ #1 #3 substring$ }
        'key
      if$
    }
    { editor format.lab.names }
  if$
}

FUNCTION {calc.short.authors}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.key.label
    { type$ "proceedings" =
        'editor.key.label
        'author.key.label
      if$
    }
  if$
   %'short.list :=
}

%FUNCTION {calc.label}
%{ calc.short.authors
%  short.list
%  "}{"
%  *
%  year duplicate$ empty$
%     { pop$ "????" }
%     { purify$ #-1 #4 substring$ }
%  if$
%  *
%  'label :=
%}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}"
      format.name$ 't :=
      nameptr #1 >
        {
          "   "  *
          namesleft #1 = t "others" = and
            { "zzzzz" * }
            { t sortify * }
          if$
        }
        { 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 {editor.sort}
{ editor empty$
    { key empty$
        { "to sort, need editor or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { editor sort.format.names }
  if$
}
%FUNCTION {presort}
%{ calc.label
%  label sortify
%  "    "
%  *
%  type$ "book" =
%  type$ "inbook" =
%  or
%    'author.editor.sort
%    { type$ "proceedings" =
%        'editor.sort
%        'author.sort
%      if$
%    }
%  if$
%  #1 entry.max$ substring$
%  'sort.label :=
%  sort.label
%  *
%  "    "
%  *
%  title field.or.null
%  sort.format.title
%  *
%  #1 entry.max$ substring$
%  'sort.key$ :=
%}
% sort by incrementing sort.num by 1 for each entry
% and using (10000 - sort.num) as a string as as the sort key
FUNCTION {presort}
{sort.num #0 + 'sort.num :=
  %#10000 sort.num - int.to.str$ 'sort.key$ :=
  #10000  int.to.str$ 'sort.key$ :=
}

ITERATE {presort} 
SORT
STRINGS { longest.label }
INTEGERS { number.label longest.label.width }

%STRINGS { last.label next.extra }
%INTEGERS { last.extra.num number.label }
%FUNCTION {initialize.extra.label.stuff}
%{ #0 int.to.chr$ 'last.label :=
%  "" 'next.extra :=
%  #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$
%    { "{\natexlab{" swap$ * "}}" * }
%  if$
%  'extra.label :=
%  label extra.label * 'label :=
%}

% adapted to make numeric labels go down from maximum (now in sort.num)
% instead of up from 1

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  %sort.num 'number.label := % was initialized to #1
  sort.num 'number.label := % was initialized to #1
  #1 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ number.label #1 + 'number.label := % was +
number.label int.to.str$ 'label :=
  %number.label #1 - 'number.label := % was +
  number.label #0 + 'number.label := % was +
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}
EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}
%EXECUTE {initialize.extra.label.stuff}
 %ITERATE {forward.pass} 
 %REVERSE {reverse.pass} 
FUNCTION {bib.sort.order}
{ %sort.label
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}
%ITERATE {bib.sort.order} 
%SORT
FUNCTION {begin.bib}
{ preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{" number.label int.to.str$ * "}" *
  write$ newline$
  "\providecommand{\natexlab}[1]{#1}"
  write$ newline$
}
EXECUTE {begin.bib}
EXECUTE {init.state.consts}
ITERATE {call.type$}
FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}
EXECUTE {end.bib}
%%
%% End of file `tWRM.bst'.
