%%  ALPHADIN.BST            Ausgabe [8]  10/10/00
%%  (C) Klaus F. Lorenzen, Hamburg  email: lorenzen.marxen@t-online.de
%%  ersetzt ALPHADIN.BST   Ausgabe [7,1]  vom 23/11/99
%%  ersetzt DinAlpha.BST  von 1994
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%%  ALPHADIN.BST wurde entwickelt aus BibTeX standard bibliography style 
%% `alpha'.Mit ALPHADIN.BST werden Literaturverzeichnisse gemaess der deutschen 
%%  Zitiernorm DIN 1505 Teil 2 formatiert.
%%  Analog zu den 4 US standard styles wird ein vollstaendiger Satz von 
%%  4 DIN-gerechten bst-style Dateien veroeffentlicht (alphadin.bst,
%%  plaindin.bst, unsrtdin.bst, abbrvdin.bst). Die gueltige Version
%%  ist am schnellsten aus dem WWW ueber folgende URL zu beziehen
%%            http://www.fh-hamburg.de/pers/Lorenzen/bibtex/
%%            Stand: 16/6/99
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%%  WAS IST ALPHADIN.BST ?
%%  Dieser style produziert "deutsche" Literaturzitate in Literaturverzeichnis-
%%  sen gemaess der deutschen Norm DIN 1505, Teil 2 vom Jan. 1984.
%%  Die Literaturzitate werden alphabetisch nach Verfassern sortiert
%%  und sind durch abgekuerzte Verfasserbuchstaben plus Erscheinungsjahr in 
%%  eckigen Klammern gekennzeichnet.
%%  Es gibt Unterschiede zwischen der US- und der deutschen Zitierkonvention,
%%  was die bibliographischen Typen und die verschiedenen Trennzeichen zwischen
%%  den Feldern angeht. Daher ist auch keine 100%ige Abbildung der beiden 
%%  Regelwerke aufeinander moeglich. Dies ist aber immer durch eine achtsame 
%%  Erfassung beherrschbar! Die vorliegenden DIN-styles versuchen einige 
%%  bibliographische Beschraenkungen der Originalstyles zu ueberwinden.
%%  Es laesst sich in fast allen Faellen problemlos ein Original-bib-file
%%  (d.i. die Datenbank, die die bibliographischen Informationen enthaelt)
%%  wahlweise nach US-Norm oder deutscher DIN-Norm verarbeiten. 
%%  [Beispiel: Produzieren Sie mit der XAMPL.bib-Datenbank aus dem Original-
%%  paket 2 verschiedene Literaturverzeichnisse.]     Zu Gunsten
%%  der Allgemeingueltigkeit von bib-files ist bei den Publikationstypen
%%  (entry-types) und den bibliographischen Kategorien (fields) in Zweifels-
%%  faellen immer die originale US-Bedeutung beibehalten worden. 
%%  Bei der Erfassung von Literaturquellen in bib-files 
%%  gelten folglich die in der TEX-Literatur veroeffentlichten Regeln.
%%  Kommt es dennoch zu kleineren "Schoenheitsfehlern" im fertig gesetzten 
%%  output, so koennen diese so gut wie immer durch eine leicht veraenderte 
%%  Erfassung im bib-inputfile beseitigt werden. Last but not least koennen
%%  Sie im output-file < *.bbl > noch letzte Hand zur Korrektur ansetzen.
%
%%  UMGANG MIT FEHLERMELDUNGEN
%%  Noch nicht alle ueberfluessigen Fehlermeldungen des Original-style sind 
%%  ausgemerzt. Die meisten Warnmeldungen beruhen auf
%%  den andersartigen bibliographischen Regeln nach DIN 1505 und dem damit
%%  verbundenen Ermessensspielraum, sind also in Wahrheit keine "Fehler". 
%%  Dennoch sollten Sie diese Warnungen beachten, um herauszufinden, ob 
%%  evtl. eine unzulaessige Kombination von Publikationstyp (=entry-type) und 
%%  "fields" vorgenommen worden ist. Das fuehrt mitunter zu Wasserfallartigen 
%%  Fehlermeldungen: meistens duerfen Sie das einfach ignorieren.
%%
%%  DANKSAGUNG
%%  Hartmut Lueddecke, FH Hamburg  habe ich fuer viele Verbesserungsvorschlaege 
%%  und stete Unterstuetzung zu danken. Vielen an dieser Stelle ungenannt
%%  bleibenden Anwendern gilt mein Dank, die in den vergangenen Jahren durch 
%%  ihre Aufmerksamkeit dazu beigetragen haben, Fehler auszumerzen und 
%%  Verbesserungen vorzunehmen.
%%
%%  HINWEIS:  es gibt eine Kombination von ALPHADIN.BST mit dem NATBIB-Stil 
%%            von Patrick W.Daly), womit Literaturverzeichnisse komplett nach
%%            DIN 1505 Teil 2 UND Teil 3 formatiert werden koennen. Naeheres
%%            per URL http://www.fh-hamburg.de/pers/Lorenzen/bibtex/
%%
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%%  Eine ausfuehrliches Internet-Tutorial mit Beispielen ist in Vorbereitung. 
%%  Fuer den Anfang ist diese Datei schon etwas kommentiert!
%%          Kritik, Vorschlaege usw. bitte an :
%%          FH Hamburg,  Klaus F. Lorenzen, Grindelhof 30, 20146 Hamburg
%%          e-mail: lorenzen.marxen@t-online.de
%%                             16/6/99
%%  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% version 0.99c for BibTeX versions 0.99c or later, LaTeX2e 
% Copyright (C) 1985, all rights reserved.
% Copying of this file is authorized only if either
% (1) you make absolutely no changes to your copy, including name, or
% (2) if you do make changes, you name it something other than
% bstdin.doc, plaindin.bst, unsrtdin.bst, alphadin.bst, and abbrvdin.bst.
% This restriction helps ensure that all standard styles are identical.
%% ==>  The file btxbst.doc has the original documentation for style 'alpha'.
%%      

ENTRY
  { address      %%  Verlagsort
    author       %%  persoenlicher Urheber eines Werkes
    booktitle    %%  a) Gesamttitel eines mehrbaendigen Werkes 
%                %%  b) Titel des Sammelwerks, das einzelne selbstaendige
%                %%     Beitraege mit eigenem Titel enthaelt (->incollection)
    chapter      %%  Kapitel in einem Buch (Monographie)
    edition      %%  Auflagevermerk
    editor       %%  Persoenl.Herausgeber oder Koerperschaftlicher Herausgeber
    howpublished %%  beliebiger Verlegervermerk: von wem, wo 
    institution  %%  Institution, die e.Verlagsfreie Veroeffentlichung betreibt
    isbn         %%  Standardnr fuer Buecher
    issn         %%  - " -    :      Zeitschriften u. Serien
    journal      %%  Titel einer Zeitschrift
    key          %%  Zusaetzlich vergebener Sortierschluessel, mitunter notwend.
    month        %%  naehere Bestimmung des Erscheinungsjahres (-> macro 's)
    note         %%  freies Eingabefeld fuer zusaetzliche Informationen
    number       %%  Mehrfachbedeutung in Abhaengigkeit vom Eingabetyp
    organization %%  a) Name der Organisation/des Veranstalters e. Tagung,Konferenz
%                %%  b) Name einer Firma/Gesellschaft, die ein ->manual herausgab
    pages        %%  Umfangsangaben, meist Seitenzahlen
    publisher    %%  Verlag
    school       %%  Hochschule/Universitaet, die eine Dipl.-Arb./Dissertation veroeff.
    series       %%  Titel e.Reihe, in der ein best. Buchtitel erschienen ist
    title        %%  Titel einer (namentlich gekennzeichneten) Veroeffentlichung
    type         %%  Zusatzfeld z.Kennzeichnung e.besonderen Publikationstyps
    volume       %%  a) Zaehlung bei einem mehrbaendigen Werk (-> book)
%                %%  b) Jahrgang einer Zeitschrift (-> article
    year         %%  Erscheinungsjahr
  }
  {}
  { label extra.label sort.label }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }

%% die folg. BOOLE'sche VAR steuern d. Ausg. ": " nach Urheber-Feldern
%%    und ". - " vor ISBN oder Anmerkungen (NOTE)

INTEGERS { colon.after  period.dash }

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
  #4 'colon.after :=
  #5 'period.dash :=
}
INTEGERS { zahl  lang }  

STRINGS { h s t u v }    

%% neue DIN-Funktion, 16/2/94

FUNCTION {output.nonnull}
{ 's :=
  output.state after.block =
      { add.period$  write$
        newline$
        "\newblock " write$
      }
      { output.state before.all =
          {  write$ }     
          {  output.state colon.after =
               { ": " * write$
                 newline$
                 "\newblock " write$
               }
               { output.state period.dash =
                   { ". -- " *  write$
                     newline$
                     "\newblock " write$
                   }
                   { output.state mid.sentence =
                       { ", " * write$ }
                       { write$ 
                         newline$
                         "\newblock " write$ 
                       }
                     if$
                   }
                if$
               }
            if$
           }     
         if$
         after.block '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 {output.bibitem}
{ newline$
  "\bibitem[" write$
  label write$
  "]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}   %%$$$  nach DIN neu 16/2/94
{ write$
  newline$
}

FUNCTION {set.period.dash}    %% Wenn ein ". - " die Satzteile trennen soll.!
{ output.state before.all =
    'skip$
    { period.dash  'output.state := }
  if$
}

%%   neu 16/2/94
%%   prueft, ob PAGES, ISBN- oder NOTE-Feld vh. ist und setzt dann ". - " davor.

FUNCTION {set.period.dash.check}  
{ empty$                            
    'skip$
    'set.period.dash  
  if$
}

FUNCTION {set.colon.after}   %%$$$ Wenn ein ": " d. Satzteile trennen soll!
{ output.state before.all =
    'skip$
    { colon.after 'output.state  := }
  if$
}

%% neu / alt 17/2/94          Wenn ein " " die Satzteile trennen soll.!
FUNCTION {new.sentence}
{ output.state before.all =
     'skip$
     { after.sentence 'output.state := }
  if$
}

%% neu 17/2/94                 Wenn ein ", " die Satzteile trennen soll.!
FUNCTION { part.of.sentence }
{ output.state before.all =
     'skip$
     { mid.sentence 'output.state := }
  if$
}


FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

INTEGERS { nameptr namesleft numnames }

STRINGS { fkt }

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "\emph{" swap$ * "}" * }
  if$
}

%% neu, setzt Autor/Hrsg. in Kapitaelchen 9/3/94
FUNCTION { capitalize }
 { duplicate$ empty$
    { pop$ "" }
    { "\textsc{" swap$ * "}" * }
  if$
}

%%$$$ DIN-Quellenangabe : spezieller unselbst. Teil ist erschienen "In: " 
%%                        dem bibliogr. selbst. Werk, z.B. Zeitschrift, Buch

%% 1/4/96
FUNCTION {article.in.journal}
{ duplicate$ empty$
    { pop$ "" }
    { author missing$
        { title missing$
	    { emphasize " " * * }%% wenn ein Zs-Heft als ganzes zitiert wird
	    { emphasize "{In: }" swap$ " " * * } 	
          if$
        }
        { emphasize "{In: }" swap$ " " * * }
      if$
     }
  if$
}

%% nach Vorschlag von H.Lueddecke, um Adelspraedikate beim Sortieren
%% nach den(m) Vornamen aufzufuehren. Lo, 2/11/94
FUNCTION {format.names}
{ 's :=
  "" 'u  :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    {
       s nameptr "{vv~}{ll}" format.name$ 't :=%% das ergibt DIN-Ansetzung
       %% Lue's Vorschlag   s nameptr "{ll}" format.name$ 't :=
       t capitalize 't :=
       s nameptr "{, ff}" format.name$ 'u := 
       %% Lue's Vorschlag   s nameptr "{, ff}{ vv}" format.name$ 'u := 
       u  text.length$  'lang :=     
       #1 'zahl :=
       "" 'v :=
         {  zahl  lang  <  }
         {  u  zahl  #1  substring$  "~"  =  
               {  v  ""  =
                     {  u  #1  zahl  #1  -  substring$  'v :=  }
                     'skip$
                  if$
                  v  u  zahl  #2  substring$  *  "."  *  'v :=  }
               'skip$
            if$
            zahl  #1  +  'zahl :=  }
      while$
      v  ""  =
         {  u  'v :=  }
         'skip$
      if$
%%    der string fkt enthaelt " (Hrsg.)", wenn Editorfeld nicht leer ist
      t  v  *  fkt  *  't :=  %% Komma nach Nachnamen wird oben erledigt!
                              %% t enthaelt nun d. formatierten Nnamen, Vnamen
      nameptr #1 >
         { namesleft #1 >
             { " ; " * t * }
             { numnames #2 >
                  { " " * }
                  'skip$
               if$
%%                                %% n. schindle's hinweis 12/1/96 erweitert
               t "\textsc{others}" = t "\textsc{others} (Hrsg.)" = or
                    { " [u.~a.]" * }%%   13/2/94
%%%%                  { "et~al." * } %% Geschmackssache, waehle eins von beiden
                    { " ; " * t * }
               if$
               }
            if$  %% Ende der namesleft-Pruefung
          }
            't    
           %% hierdurch wird bei jed. Schleifendurchgang das sich komplet-
           %% tierende Zwischen-Namensergebnis wieder auf den stack gelegt 

       if$  %%  Ende der nameptr-Pruefung

      nameptr #1 + 'nameptr :=
      namesleft #1 -  'namesleft :=
    }
  while$  %%  Ende von { namesleft #0 > } ganz oben
  "" 'fkt :=  %% fkt wird zurueckgesetzt
}

%%$$$ geaendert 14/2/94
 
FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

%%$$$ geaend. 20/2/94 Anpassung an DIN, wonach Autor + Hrsg. zusammen vorkom-
%%                    men duerfen.!!

FUNCTION {format.editors}
{ editor empty$
   { author empty$
       { "Weder Verfasser noch Hrsg. in " cite$ * warning$ }
       'skip$ 
     if$
    }
    { author empty$
        { " (Hrsg.)" 'fkt :=  
          editor format.names 
        }
        { " (Hrsg.)" 'fkt :=  
          " ; " * editor format.names *
        }
      if$
     }
   if$
 } 

%% Lo, 12/5/99 neue Funktion fuer proceedings, misc usw.

FUNCTION { format.editors.organization }
{ organization empty$
    'skip$
    { type$ "misc" =
        { organization }
        { " ; " * organization " (Veranst.)" *}
      if$
    }
  if$
}

%%$$$  Sonderfall: Herausgeber bei Typ incollection, 21/2/94
FUNCTION {format.ed.incoll}
{ editor empty$
     { "" }
     { " (Hrsg.)" 'fkt :=  
       editor format.names 
     }
  if$
} 

FUNCTION {format.title}
{ title empty$
    { "" }
    { title }  %% Text so wie er dasteht im Feld title
  if$
}

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
	{ t #1 #2 substring$ "--" = not
	    { "--" *
	      t #2 global.max$ substring$ 't :=
	    }
	    {   { t #1 #1 substring$ "-" = }
		{ "-" *
		  t #2 global.max$ substring$ 't :=
		}
	      while$
	    }
	  if$
	}
	{ t #1 #1 substring$ *
	  t #2 global.max$ substring$ 't :=
	}
      if$
    }
  while$
}

%% geaendert 24/2/94
FUNCTION {format.date}
{ year empty$
    { month empty$
	{ "" }
	{ "there's a month but no year in " cite$ * warning$
	  month
	}
      if$
    }
    { month empty$  %% b. Buechern nur Jahr, ohne Monat ausgeb. im Impressum
          'year
          { month " " * year * }
      if$
    }
  if$
}

%%
%%$$$  neue Fkt., 16/2/94 u. 14/3/94       das sog. Impressum
FUNCTION {format.address.publisher.year}
{  publisher empty$
      { address empty$
          { year empty$  
              { "" }
              { year } 
            if$
          }
          { "Es gibt einen Verlagsort, aber keinen Verlag in " cite$ * warning$
              address ", " * format.date * 
          }
        if$
      }
      { address empty$
          { year empty$
             { "Es gibt nur eine Verlagsangabe in " cite$ * warning$ 
                publisher
             }
             { publisher ", " * format.date * }
            if$
          }
          { year empty$
              { address " : " * publisher * }
              { address " : " * publisher * ", " * format.date * }
            if$
          }
        if$
      }
  if$
}

FUNCTION {format.btitle}
{ title emphasize
}


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

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

%% neu 8/3/94 in dieser Funkt. steckt im volume empty-Teil noch ein bug, der
%%            aber ignoriert werden kann; das Ergebnis ist ok.
FUNCTION {format.btitle.vol}
{ number empty$
   { series empty$
     { volume empty$
        { title emphasize }
        { title emphasize ". Bd." * volume tie.or.space.connect }
       if$
     }
     { volume empty$
        { title emphasize }%% ein Buch, das zusaetzl. SERIES=Reihentitel besitzt
    %% jetzt kommt d. Fall des mehrbaendigen Werkes mit Gesamttitel=SERIES
    %% Zaehlung=VOLUME und Bandtitel=TITLE; 
        { series emphasize ". Bd." * volume tie.or.space.connect  
                                 ": " * "{\emph{" * title * "}}" * } 
       if$
     }
     if$%% series-test
   }
   { title emphasize }%% wenn number ex., dann immer title-Feld
  if$%% Ende number-test
}

%%$$$ neu 16/2/94
%%   Serien- / Reihentitel werden im Feld series gespeichert. Weist die
%%   Serie eine Zaehlung der Einzeltitel auf, gibt man entweder nach DIN alles 
%%   in das Feld series so ein: ---> TITEL DER SERIE  NR. (der Vorlage) <---
%%   z. B.  SERIES= { Mensch und Computer 12 }. 
%%   [ Die Nummer der Vorlage darf auch durch " ; " abgesetzt werden. ]
%%   oder:
%%   man gibt die Zaehlung in das Feld NUMBER ein, z.B. NUMBER = {12}.
%%   Achtung!!
%%   Bei mehrbaendigen Werken steht d. Gesamttitel im Feld SERIES und die
%%   Bandzaehlung im Feld VOLUME; NUMBER darf dann nicht besetzt sein!
%%   Anderenfalls liegt ein Erfassungsfehler vor, da sich Reihe u. mehrbd.
%%   Werk gegenseitig ausschliessen.

FUNCTION {format.series.number.din}
{ volume empty$
    { number empty$
	  { series empty$
               { "" }%%   Ausstieg mit Nullstring
	       { "(" series * ")" * } %% d. Seriennr koennte auch gleich hier
                                      %% im SERIES-Feld miterfasst werden
	    if$
          }      
          { series empty$
	       { "(" number tie.or.space.connect ")" * 
                 "there's a number but no series in " cite$ * warning$ 
               }
               { "(" series * number tie.or.space.connect ")" * }
            if$
          }
       if$
     }
     { series empty$
          { "" }
          { type$ "proceedings" =  %% Sonderfall, es darf VOLUME und NUMBER ex. !
                { number empty$  
                    { "(" series * ")" * }
                    { "(" series * number tie.or.space.connect ")" * }
                  if$
                }
                { "" }%%   Ausstieg mit Nullstring, s. Kommentar
            if$
          }%% bei gezaehlten Reihen MUSS die Reihennr. im Feld NUMBER stehen!
       if$ %% wenn also d. Feld VOLUME nicht leer ist, dann liegt ausser bei 
           %% Typ PROCEEDINGS falsche
      }     %% Erfassung vor und es erfolgt d. Ausstieg mit d. Nullstring!
  if$ 
}

%% seltener Fall bei MISC: Ausgabe einer Serie; die Nummer der Serie muss
%%  in SERIES miterfasst werden  16/6/99

FUNCTION {format.misc.series}
{ series empty$
    { "" }
    { "(" series * ")" * }
  if$
}


%%$$$ 16/2/94
%%  Auflagenvermerke gibt man komplett, einschliesslich Abkuerzungen in 
%%  das Feld edition ein: ---> EDITION= { 3., erw. und verb. Aufl. }
%%  oder fremdsprachlich:      EDITION= { 2nd edition }

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { edition } 
  if$
}

%%$$$ neu, 18/3/94
FUNCTION { format.isbn.issn }
{ isbn empty$
     { issn empty$
          { "" }
          { "ISSN" issn n.dashify tie.or.space.connect }
       if$
     }
     { "ISBN" isbn n.dashify tie.or.space.connect }
  if$
}

%%$$$ geaendert, 21/2/94  gibt Seitenzahl bei BOOK-Typ und verwandten T. aus
FUNCTION {format.pages.book}
{ pages empty$
    { "" } 
    { "" pages n.dashify tie.or.space.connect " S" *} %% 17/12/95
  if$
}

%%$$$  alle anderen Seitenang. zB. Zeitschrft., INBOOK usw. a la Orig., 9/3/94
FUNCTION {format.pages}
{ pages empty$
    { "" }
    { "S." pages n.dashify  tie.or.space.connect } 
  if$
}

%%    Angaben v. Jahrgang, Jahr, Heftnr., Seiten bei Artikel-Typ
%%    14/3/94, 26/2/97

FUNCTION {format.vol.year.num.pages}
{ volume field.or.null
    year empty$
      { "Es gibt einen Jahrgang, aber kein Jahr in " cite$ * warning$ }
      { " (" year * ")" * * }
    if$
    month empty$
    'skip$
    { ", " month * * }
    if$
    number empty$
    'skip$
    { ", Nr. " number * * }
    if$
    pages empty$%%  Lo, 26/2/97
      'skip$
      { ", " format.pages * *}%% 
    if$

%%    pages empty$%%  das war die Fass. Nov. 96, die auch ging
%%      'skip$
%%      { duplicate$ empty$
%%	  { pop$ format.pages }%% da pages leer, wird nur "" auf stack gelegt
%%          { ", " format.pages * *}
%%        if$
%%      }
%%    if$

}

%% geaendert 21/2/94
FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
	{ "Kapitel " }
	{ type }
      if$
      chapter tie.or.space.connect
      pages empty$
	'skip$
	{ ", " * format.pages * }
      if$
    }
  if$
}

%%$$$  geaendert 21/2/94
FUNCTION {format.in.ed.booktitle.din}
{ booktitle empty$
    { "" }
    { editor empty$
	{ volume empty$
            { "{In: }" booktitle emphasize * }%% n. Belieben fettes In:
            { "{In: }" booktitle emphasize *  %%      - " -
              " Bd." volume tie.or.space.connect * 
            }
          if$
        }
	{ volume empty$
            { "{In: }" format.ed.incoll * ": " * booktitle emphasize * }
            { "{In: }" format.ed.incoll * ": " * booktitle emphasize * 
              " Bd." volume tie.or.space.connect * 
            }
          if$
        }
      if$
    }
  if$
}

%% geaendert 1/3/94
FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type 
    }
  if$
}

%% geaendert 23/2/94    i.Orig. wird zuerst die number, dann der type getestet
FUNCTION {format.tr.number.din}
{ type empty$
     { number empty$
         { " -- Forschungsbericht" }   %%  bei Minimalangaben besser ohne "."!
         { "(" number tie.or.space.connect "). -- Forschungsbericht" * }
       if$
     }
     { number empty$
         { " -- " type * }             %%  bei Minimalangaben besser ohne "."!
         { "(" number tie.or.space.connect "). -- " * type * }
       if$
     }
  if$
}


FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
	{ "need key or journal for " cite$ * " to crossref " * crossref *
	  warning$
	  ""
	}
	{ "{In: }{\em " journal * "\/}" * }%% 
      if$
    }
    { "{In: }" key * }%%  
  if$
  "{\cite{" * crossref * "}" * "}" * ", " * format.pages *
%%  " (siehe \cite{" * crossref * "}" * "), " * format.pages *
}

%%geaendert 7/3/94 und noch einmal nach Lueddecke, s.o.
FUNCTION {format.crossref.editor}
%vorher,Lue  { editor #1 "{vv~}{ll}" format.name$ " (Hrsg.)" *
 { editor #1 "{ll}" format.name$ " (Hrsg.)" *
   editor num.names$ duplicate$
   #2 >
    { pop$ " [u.~a.]" * }
%%    { pop$ " et~al." * }
    { #2 <
	'skip$
	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            { " [u.~a.]" }
%%	    { " et~al." * }
	    { " ; " * editor #2 "{vv~}{ll}" format.name$ * " (Hrsg.)" * }
	  if$
	}
      if$
    }
  if$
}


FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "{\texttt{siehe}} "
%%      "(siehe "
    }
    { ". -- Bd." volume tie.or.space.connect
      " von " *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ series empty$
	    { "need editor, key, or series for " cite$ * " to crossref " *
	      crossref * warning$
	      "" *
	    }
	    { "" * }%% dadurch kommt nach der Bandzaehl. gleich das label 2/6/99
%%	    { "{\emph{" * series * "}} {\texttt{siehe}}" * }
	  if$
	}
	{ key * }
      if$
    }
    { "" * }%% nach der Bandzaehlung kommt gleich das label; Lo 2/6/99
%%    { format.crossref.editor * }
  if$
  "{\cite{" * crossref * "}" * "}" * 
%%  "{\cite{" * crossref * "}" * "}" * %%"), " * format.pages *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ booktitle empty$
	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
	      crossref * warning$
	      ""
	    }
	    { "{In: }{\emph " booktitle * "}" * }%%  fettes In: n. Belieben
	  if$
	}
	{ "{In: }" }%% 26/5/99
%%           { "{In: }" key * }
      if$
    }
%%    { "{In: }{\em " booktitle * "\/}" * }%%
    { "{In: }" }%% Lo, 10/2/99 es sieht der reine Bezug (Referenz) besser aus!
  if$
%%  " (siehe \cite{" * crossref * "}" * "), " * format.pages *
  "{\cite{" * crossref * "}" * "}" * ", " * format.pages *%% das fette label, Lo 23/2/99
%% alte Vers. bis  27/2/97 " (siehe \cite{" * crossref * "}" * ")" *
}

%%geaendert
FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  crossref missing$
    { journal article.in.journal output.nonnull %   26/2/97
      new.sentence 
      format.vol.year.num.pages output
    }
    { format.article.crossref output.nonnull }
  if$
  note set.period.dash.check
  note output
  issn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

%%$$$   geaendert, 20/2/94
FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors  format.editors output.nonnull }
  if$
  set.colon.after
  crossref missing$
    { format.btitle.vol "title" output.check }
    { format.btitle "title" output.check }
  if$
  format.edition "edition" output.check  
  format.address.publisher.year "publisher" output.check
  new.sentence
  crossref missing$
    { format.series.number.din  output 
      pages set.period.dash.check%%  19/5/99 wie bei adinat.bst
      format.pages.book output  
    }
    { format.book.crossref output.nonnull 
      pages set.period.dash.check
      format.pages.book output  
    }
  if$
  note set.period.dash.check
  note output 
  isbn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

%% geaendert 23/2/94
FUNCTION {inbook}
{ output.bibitem
%% unselbst. Teile eines Buches werden am Anf. genannt, dann d selbst. Quelle 
  chapter empty$
    { "Es fehlen die Kapitelangaben in " cite$ * warning$ }
    { type empty$
         { "Kap. " }%%  d.i. die Standardvorgabe
         { type }%%  wenn man keine bes. Typform angeben will, koennte ein kl.
%%                   Zwischenraum gewaehlt werden, z.B. " \, "
      if$
      chapter tie.or.space.connect " {In: }" * * %% n. Belieben fettes In:
     }
  if$

%%   -------- jetzt kommt der bibliogr. selbst. Teil
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
    }
  if$
  set.colon.after
  format.btitle.vol "title" output.check
  crossref missing$
    { format.edition output
      format.address.publisher.year "publisher" output.check
      new.sentence
      format.series.number.din  output 
%% vorher note ...
      part.of.sentence
      format.pages "pages" output.check
      note set.period.dash.check
      note output 
    }
    { format.book.crossref output.nonnull
      note set.period.dash.check
      note output 
    }
  if$
  isbn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

%%  geaenderte Seitenzahlausgabe, wenn crossref-Feld benutzt wird, 27/2/97
FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  crossref missing$
    { format.in.ed.booktitle.din "booktitle" output.check
      format.edition output
      format.address.publisher.year "publisher" output.check
      new.sentence
      format.series.number.din output
      note set.period.dash.check
      note output 
      isbn set.period.dash.check
      issn set.period.dash.check
      format.isbn.issn output
      part.of.sentence
      format.chapter.pages "pages" output.check
    }
    { format.incoll.inproc.crossref output.nonnull 
      note set.period.dash.check
      note output 
      isbn set.period.dash.check
      issn set.period.dash.check
      format.isbn.issn output
    }
    if$
 fin.entry
}

%%  geaendert 22/2/94, 15/11/96 (Hinweis v. Alin Shindun, Uni Siegen)
FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.title "title" output.check
  crossref missing$
    { format.in.ed.booktitle.din "booktitle" output.check
      address empty$
	{ organization new.sentence.checka
	  organization output
          part.of.sentence
          format.address.publisher.year output
	}
	{ format.address.publisher.year "publisher" output.check }
      if$
      new.sentence
      series empty$ %%neu nach Hinweis v. Alin Shindun, 15/11/96
        'skip$
        { format.series.number.din output }
      if$
      note set.period.dash.check
      note output 
      isbn set.period.dash.check
      issn set.period.dash.check
      format.isbn.issn output
      part.of.sentence
      format.pages output
    }
    { format.incoll.inproc.crossref output.nonnull 
      note set.period.dash.check
      note output 
      isbn set.period.dash.check
      issn set.period.dash.check
      format.isbn.issn output
    }
    if$ 
 fin.entry
}

FUNCTION {conference} { inproceedings }%% nach Patashnik, wg US-Kompatibilitaet

%% geaendert, 11/6/99
FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
        { title empty$
	    'skip$
            {format.btitle "title" output.check }
          if$
        }
	{ organization output.nonnull
          set.colon.after
          format.btitle "title" output.check
	}
      if$
    }
    { format.authors output.nonnull 
      set.colon.after
      format.btitle "title" output.check
    }
  if$
  format.edition "edition" output.check
  author empty$
    { organization empty$
	{ address output
          part.of.sentence
	}
	'skip$
      if$
    }
    { address ": " *  organization * output
      part.of.sentence
    }
  if$
  format.date output
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output
  fin.entry
}

%%  MASTERSTHESIS ersetzt zugleich PHDTHESIS !!  KFL, 17/2/94 
%%  Ausgabe-Standard ist "Diplomarbeit", fuer andere Abschlussarbeiten
%%  bei der Erfassung TYPE="anderer Typ" eingeben.
%%  z.B. TYPE={Dissertation}, TYPE={Diss.}, TYPE={Habil.}, TYPE={Magisterarb.}
%%  
FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.btitle "title" output.check
  address output
  part.of.sentence 
  school "school" output.check
  part.of.sentence
  "Diplomarbeit" format.thesis.type output.nonnull
  part.of.sentence
  format.date "year" output.check
%%  pages new.sentence.checka
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output
  fin.entry
}

FUNCTION {phdthesis} %%  {mastersthesis}% ist identisch bis auf Standardwert, s.o.
{ output.bibitem
  format.authors "author" output.check
  set.colon.after
  format.btitle "title" output.check
  address output
  part.of.sentence 
  school "school" output.check
  part.of.sentence
  "Diss." format.thesis.type output.nonnull % koennte auch `Dissertation' sein
  part.of.sentence
  format.date "year" output.check
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output
  fin.entry
}

%% hiermit werden u.a. Normen erfasst
FUNCTION {misc}
{ output.bibitem
  note empty$
     { title empty$ 
          { "" }
          { format.authors format.editors output.nonnull
            format.btitle output
            howpublished output
            format.date output 
          } 
        if$
      }
      { note duplicate$ #1 #4 substring$ "Norm" =
           { output new.sentence 
             format.date output 
             format.title output
           }
           { pop$ ""
             author empty$
              { editor empty$
                { organization empty$
                  { 'skip$ }
                  { format.editors.organization output.nonnull 
                    set.colon.after }
                  if$
                }   
                { format.editors format.editors.organization output.nonnull 
                  set.colon.after }
               if$
              }              
              { format.authors format.editors output.nonnull 
                 set.colon.after }
             if$
             format.btitle output
             howpublished output
             format.date output 
             new.sentence
             format.misc.series output%%  neu 16/6/99
             note set.period.dash.check
             note output
           }
         if$
       }
   if$
  fin.entry
}

FUNCTION {booklet} {misc}%% booklet ist nach dt. Vorgehensweise oft ueberfluessig

%% geaendert 21/5/99
FUNCTION {proceedings}
{ output.bibitem
    editor empty$
      { organization empty$
           { "" } 
           { organization " (Veranst.)" * output }
        if$
      }
      { format.editors format.editors.organization output.nonnull }
    if$
  set.colon.after
  format.btitle "title" output.check
  volume empty$
    { "" output.nonnull } 
    { "{\textnormal{Bd.}}" volume tie.or.space.connect emphasize "volume" output.check }
  if$
  format.address.publisher.year "publisher" output.check
  new.sentence
  format.series.number.din output.nonnull
  pages set.period.dash.check
  format.pages.book output
  note set.period.dash.check
  note output 
  isbn set.period.dash.check
  issn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

%% geaendert 23/2/94 auch fuer Firmenschriften u."a. zu benutzen
FUNCTION {techreport}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors  format.editors output.nonnull }
  if$
  set.colon.after
  format.title "title" output.check
  institution new.sentence.checka
  institution empty$
     'skip$
     { " / " institution *  output.nonnull }
  if$
  format.address.publisher.year output
  number new.sentence.checka
  format.tr.number.din "number" output.check
%%  new.sentence
  pages set.period.dash.check
  format.pages.book output
  note "note" output.check
  isbn set.period.dash.check
  issn set.period.dash.check
  format.isbn.issn output
  fin.entry
}

FUNCTION {unpublished} {misc}%% author, title, note muessen sein! howpublished
%%                           %% entfaellt natuerlich 
FUNCTION {default.type} { misc }

MACRO {jan} {"Januar"}

MACRO {feb} {"Februar"}

MACRO {mar} {"M{\^^b a}rz"}
%% nach Bernd Raichle, Febr. 1999

MACRO {apr} {"April"}

MACRO {mai} {"Mai"}

MACRO {may} {"Mai"}

MACRO {jun} {"Juni"}

MACRO {jul} {"Juli"}

MACRO {aug} {"August"}

MACRO {sep} {"September"}

MACRO {okt} {"Oktober"}

MACRO {oct} {"Oktober"}

MACRO {nov} {"November"}

MACRO {dez} {"Dezember"}

MACRO {dec} {"Dezember"}

%%  stillgelegte Beispiele fuer den Gebrauch von Kuerzeln (hier Zs-Titel).

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

READ

FUNCTION {sortify}
{ purify$
  "l" change.case$
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

INTEGERS { et.al.char.used }

FUNCTION {initialize.et.al.char.used}
{ #0 'et.al.char.used :=
}

EXECUTE {initialize.et.al.char.used}

FUNCTION {format.lab.names}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #4 >
	{ #3 'namesleft := }
	{ numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
	{ namesleft #0 > }
	{ nameptr numnames =
	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
%%        	{ "\," *  %% kein besonderes Zeichen fuer "others" i. label
        	{ "{\etalchar{+}}" *   %% ein plus-Zeichen (+) fuer "others"!
		  #1 'et.al.char.used :=
		}
%%		{ s nameptr "{v{}}{l{}}" format.name$ * }
		{ s nameptr "{l{}}" format.name$ * }
	      if$
	    }
%%	    { s nameptr "{v{}}{l{}}" format.name$ * }
	    { s nameptr "{l{}}" format.name$ * }
	  if$
	  nameptr #1 + 'nameptr :=
	  namesleft #1 - 'namesleft :=
	}
      while$
      numnames #4 >
%%        { "\," *  %%  s. Bemerkung oben
	{ "{\etalchar{+}}" *
	  #1 'et.al.char.used :=
	}
	'skip$
      if$
    }
%%  { s #1 "{v{}}{l{}}" format.name$
    { s #1 "{l{}}" format.name$
      duplicate$ text.length$ #2 <
	{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } %%  vgl. Anmerkung!
	'skip$
      if$
    }
  if$
}
%% Anmerkung, Lo 14/12/95:
%% wenn man in der letzten label-Bearbeitung #4 statt #3 setzt, dann werden
%% auch Umlaute oder á an 3. Stelle im Namen korrekt in das label genommen.
%% Tip: Aendere diese Zahl nur, wenn in einer Lit.-Liste der Umlautsonderfall
%% stoerend auffaellt.

FUNCTION {author.key.label}
{ author empty$
    { key empty$
	{ cite$ #1 #3 substring$ }
	{ key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.editor.key.label}
{ author empty$
    { editor empty$
	{ key empty$
	    { cite$ #1 #3 substring$ }
	    { key #3 text.prefix$ }
	  if$
	}
	{ editor format.lab.names }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.key.organization.label}
{ author empty$
    { key empty$
	{ organization empty$
	    { cite$ #1 #3 substring$ }
	    { "The " #4 organization chop.word #3 text.prefix$ }
	  if$
	}
	{ key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}
%% neu 19/5/99 damit eigene labels fuer Konferenzen erzeugt werden koennen,
%%             darf man zusaetzlich auch ein key-Feld eingeben. Das produziert
%%             dann vorrangig das label.
FUNCTION {editor.key.organization.label}
{ editor empty$
    { key empty$
	{ organization empty$
	    { cite$ #1 #3 substring$ }
	    { "The " #4 organization chop.word organization } %% Lo, 26/1/98
%%	    { "The " #4 organization chop.word #3 text.prefix$ }
	  if$
	}
	{ key #5 text.prefix$ }%%  man kann Laenge des key einstellen
      if$
    }
    { key empty$%%  wenn key vh., dann macht er das label! Lo,18/5/99
        { editor format.lab.names }
        { key #5 text.prefix$ }
      if$
    }
  if$
}

FUNCTION {calc.label}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.key.label
    { type$ "proceedings" =
	'editor.key.organization.label
	{ type$ "manual" =
	    'author.key.organization.label
	    'author.key.label
	  if$
	}
      if$
    }
  if$
  duplicate$
  year field.or.null purify$ #-1 #2 substring$
  *
  'label :=
  year field.or.null purify$ #-1 #4 substring$
  *
  sortify 'sort.label :=
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
	{ "   " * }
	'skip$
      if$
%     s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
%
%     Zeile geaendert, damit die Namenszusaetze wie von, de usw nach deutscher
%     Norm richtig einsortiert werden.   27.10.94 Lueddecke
%
      s nameptr "{ll{ }}{  ff{ }}{ vv{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
	{ "[u.~a.]" * }
         %%     	{ "et al" * }% Geschmackssache
	{ t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "Der " #4
        "Die " #4
          "Das " #4
            "Ein " #4
              "Eine " #5 
                  "The " #4 t chop.word
               chop.word
             chop.word
           chop.word
         chop.word
       chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
	{ "to sort, need author or key in " cite$ * warning$
	  ""
	}
	{ key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
	{ key empty$
	    { "to sort, need author, editor, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
	{ key empty$
	    { "to sort, need author, organization, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
	{ key empty$
	    { "to sort, need editor, organization, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{ calc.label
  sort.label
  "    "
  *
  type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
	'editor.organization.sort
	{ type$ "manual" =
	    'author.organization.sort
	    'author.sort
	  if$
	}
      if$
    }
  if$
  *
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {presort}

SORT

STRINGS { longest.label last.sort.label next.extra }

INTEGERS { longest.label.width last.extra.num }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #0 int.to.chr$ 'last.sort.label :=
  "" 'next.extra :=
  #0 'longest.label.width :=
  #0 'last.extra.num :=
}

FUNCTION {forward.pass}
{ last.sort.label sort.label =
    { last.extra.num #1 + 'last.extra.num :=
      last.extra.num int.to.chr$ 'extra.label :=
    }
    { "a" chr.to.int$ 'last.extra.num :=
      "" 'extra.label :=
      sort.label 'last.sort.label :=
    }
  if$
}

FUNCTION {reverse.pass}
{ next.extra "b" =
    { "a" 'extra.label := }
    'skip$
  if$
  label extra.label * 'label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
  extra.label 'next.extra :=
}

EXECUTE {initialize.longest.label}

ITERATE {forward.pass}

REVERSE {reverse.pass}

FUNCTION {begin.bib}%%lt. Original wiederhergestellt 4/1/96
{ et.al.char.used
    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
    'skip$
  if$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}

%% Ende von ALPHADIN.BST  KFL, 23/11/99
