]> AND Private Git Repository - HindawiJournalOfChaos.git/blob - IH/iihmsp13/compj.bst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
tt
[HindawiJournalOfChaos.git] / IH / iihmsp13 / compj.bst
1 % cj.bst v1.1 2003-08-18
2 % Antonio Vallecillo (av@lcc.uma.es)
3 % Revision History:
4 %     v1.1 - First version (2003-08-18)
5 %
6 %======================================================================
7 % EXAMPLES OF USE and NOTES ON "cj.bst"
8 %
9 % The following examples of BibTeX entries can be used for producing 
10 % references of journal articles, books, chapters, conferences, 
11 % and technical documents: 
12 %
13 % -- journal article
14 % @ARTICLE{CAN01,
15 %   author =       {Carlos Canal and Lidia Fuentes and Ernesto Pimentel
16 %                   and Jos\'e M. Troya and Antonio Vallecillo},
17 %   title =        {Extending {CORBA} Interfaces with Protocols},
18 %   journal =      cj,
19 %   year =         2001,
20 %   volume =       44,
21 %   number =       5,
22 %   pages =        {448--462},
23 % }
24 %
25 % -- book
26 % @BOOK{Sowa2000,
27 %   author =       {John F. Sowa},
28 %   title =        {Knowledge Representation},
29 %   publisher =    {Brooks/Cole},
30 %   year =         2000,
31 %   address =      {Pacific Grove, CA},
32 % }
33 %
34 % -- chapter
35 % @Incollection{SZY00,
36 %   author =       {Clemens Szyperski},
37 %   booktitle =    {Foundations of Component-Based Systems},
38 %   title =        {Components and the Way Ahead},
39 %   editor =       {Gary T. Leavens and Murali Sitaraman},
40 %   publisher =    {Cambridge University Press},
41 %   year =         2000,
42 %   address = {Cambrigde, UK},
43 % }
44 %
45 % -- conference paper
46 % @Inproceedings{cda-wordgraphs:97,
47 %     author = {M. Crochemore and R. Verin},
48 %     year = 1997,
49 %     title = {Direct construction of compact directed acyclic word graphs},
50 %     booktitle = {Proc. of CPM 97},
51 %     month = {12-14 August},
52 %     address = {Cambridge, MA},
53 %     pages = {192--211},
54 %     publisher = {Springer-Verlag, Berlin},
55 % }
56 %
57 % -- technical document/standard
58 % @MANUAL {Z.500,
59 %     author = {{ITU-T}},
60 %     organization = {International Telecommunications Union},
61 %     title = {Framework on formal methods in conformance testing},
62 %     year = 1997,
63 %     address = {Geneva, Switzerland},
64 %     note = {ITU-T Recommendation X.500},
65 %     number = {ITU-T X.500},
66 % }
67 %
68 % Using the "cj.bst" style they produce, respectively:
69 %
70 % \bibitem{CAN01}
71 % Canal, C., Fuentes, L., Pimentel, E., Troya, J.~M., and 
72 %   Vallecillo, A. (2001)
73 %   Extending {CORBA} interfaces with protocols.
74 % \newblock {\em The Computer Journal}, {\bf  44}, 448--462.
75
76 % \bibitem{Sowa2000}
77 % Sowa, J.~F. (2000) {\em Knowledge Representation}. 
78 %   Brooks/Cole,  Pacific Grove, CA.
79
80 % \bibitem{SZY00}
81 % Szyperski, C. (2000) Components and the way ahead.
82 % \newblock In Leavens, G.~T. and Sitaraman, M. (eds.), 
83 %   {\em Foundations of Component-Based Systems}. 
84 %   Cambridge University Press,  Cambrigde, UK.
85
86 % \bibitem{cda-wordgraphs:97}
87 % Crochemore, M. and Verin, R. (1997) Direct construction of 
88 %   compact directed acyclic word graphs.
89 % \newblock {\em Proc. of CPM 97},  Cambridge, MA,  12-14 August,  
90 %   pp. 192--211. Springer-Verlag, Berlin.
91
92 % \bibitem{Z.500}
93 % ITU-T X.500 (1997) {\em Framework on formal methods in conformance testing}.
94 % \newblock International Telecommunications Union.
95 % \newblock Geneva, Switzerland.
96
97 % NOTES: 
98 % - In the "book", "Incollection", and "Technical Report" items, 
99 %   the "address" field contains the publisher location.
100 % - In the "Inproceedings" and "conference" BibTeX items, the "address"
101 %   field contains the conference location, so the publisher location
102 %   should be included in the "publisher" field. 
103 % - In "Inproceedings" and "conference" BibTeX items, the "month" field
104 %   should also contain the days of the conference, as indicated in the 
105 %   example above.
106 % - In the "Manual" BibTeX item, the "number" field should contain the
107 %   number of the technical document being referenced. This field will
108 %   be used as main index for the entry in the bibliography produced.
109 % - A warning is generated if any of the fields shown for these examples 
110 %   is missing.
111 % - Some literals are avaliable for the most common journals and 
112 %   editorials, as indicated by the following list of BibTeX macros 
113 %======================================================================
114
115 % Literals for MONTHS
116
117 MACRO {jan} {"January"}
118
119 MACRO {feb} {"February"}
120
121 MACRO {mar} {"March"}
122
123 MACRO {apr} {"April"}
124
125 MACRO {may} {"May"}
126
127 MACRO {jun} {"June"}
128
129 MACRO {jul} {"July"}
130
131 MACRO {aug} {"August"}
132
133 MACRO {sep} {"September"}
134
135 MACRO {oct} {"October"}
136
137 MACRO {nov} {"November"}
138
139 MACRO {dec} {"December"}
140
141 % Literals for JOURNALS
142
143 MACRO {acmcs} {"ACM Computing Surveys"}
144
145 MACRO {acta} {"Acta Informatica"}
146
147 MACRO {cacm} {"Communications of the ACM"}
148
149 MACRO {cj} {"The Computer Journal"}
150
151 MACRO {ibmjrd} {"IBM Journal of Research and Development"}
152
153 MACRO {ibmsj} {"IBM Systems Journal"}
154
155 MACRO {ist} {"Information and Software Technology"}
156
157 MACRO {ieeec} {"IEEE Computer"}
158
159 MACRO {ieees} {"IEEE Software"}
160
161 MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
162
163 MACRO {ieeetc} {"IEEE Transactions on Computers"}
164
165 MACRO {ieeetcad}
166  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
167
168 MACRO {ipl} {"Information Processing Letters"}
169
170 MACRO {jacm} {"Journal of the ACM"}
171
172 MACRO {jcss} {"Journal of Computer and System Sciences"}
173
174 MACRO {jss} {"Journal of Systems and Software"}
175
176 MACRO {scp} {"Science of Computer Programming"}
177
178 MACRO {sicomp} {"SIAM Journal on Computing"}
179
180 MACRO {spe} {"Software--Practice and Experience"}
181
182 MACRO {tocs} {"ACM Transactions on Computer Systems"}
183
184 MACRO {tods} {"ACM Transactions on Database Systems"}
185
186 MACRO {tog} {"ACM Transactions on Graphics"}
187
188 MACRO {toms} {"ACM Transactions on Mathematical Software"}
189
190 MACRO {toois} {"ACM Transactions on Office Information Systems"}
191
192 MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
193
194 MACRO {tcs} {"Theoretical Computer Science"}
195
196 % Literals for EDITORIALS
197
198 MACRO {ACMP} {"ACM Press"}
199
200 MACRO {ADDISON} {"Addison-Wesley"}
201
202 MACRO {ADDISON-BOSTON} {"Addison-Wesley, Boston"}
203
204 MACRO {CUP} {"Cambridge University Press"}
205
206 MACRO {CUP-UK} {"Cambridge University Press, Cambridge, England"}
207
208 MACRO {IEEE-CSP} {"IEEE Computer Society Press"}
209
210 MACRO {ICP} {"Imperial College Press"}
211
212 MACRO {ICP-UK} {"Imperial College Press, UK"}
213
214 MACRO {KAP} {"Kluwer Academic Publishers"}
215
216 MACRO {MIT} {"MIT Press"}
217
218 MACRO {NH} {"North-Holland"}
219
220 MACRO {OUP} {"Oxford University Press"}
221
222 MACRO {OUP-UK} {"Oxford University Press, UK"}
223
224 MACRO {PRENTICE} {"Prentice Hall"}
225
226 MACRO {SPRINGER} {"Springer-Verlag"}
227
228 MACRO {SPRINGER-BERLIN} {"Springer-Verlag, Berlin"}
229
230 MACRO {SPRINGER-HEIDELBERG} {"Springer-Verlag, Heidelberg"}
231
232 MACRO {SPRINGER-NY} {"Springer-Verlag, NY"}
233
234 % Literals for SERIES
235
236 MACRO {LNCS} {"Lecture Notes in Computer Science"}
237
238 MACRO {LNAI} {"LNAI"}
239
240 MACRO {ENTCS} {"Electronic Notes in Theoretical Computer Science"}
241
242 %=================================================================
243 %% Start of the cj.bst code
244
245 ENTRY
246   { address
247     author
248     booktitle
249     chapter
250     edition
251     editor
252     howpublished
253     institution
254     journal
255     key
256     month
257     note
258     number
259     organization
260     pages
261     publisher
262     school
263     series
264     title
265     type
266     volume
267     year
268   }
269   {}
270   { label }
271
272 INTEGERS { output.state before.all mid.sentence after.sentence after.block
273            doblank }
274
275 FUNCTION {init.state.consts}
276 { #0 'before.all :=
277   #1 'mid.sentence :=
278   #2 'after.sentence :=
279   #3 'after.block :=
280
281   #0 'doblank := % put a blank in output.nonnul if not zero
282 }
283
284 STRINGS { s t }
285
286 FUNCTION {between}
287 { % what to do between output items
288    doblank #0 =
289    {" " * write$}
290    {write$}
291    if$
292 }
293
294 % from plain.bst (add periods after title, but also adds 
295 % commas in other places)
296 FUNCTION {output.nonnull}
297 { 's :=
298   output.state mid.sentence =
299 %    { ", " * write$ }
300     { " " * write$ }
301     { output.state after.block =
302         { add.period$ write$
303           newline$
304           "\newblock " write$
305         }
306         { output.state before.all =
307             'write$
308             { add.period$ " " * write$ }
309           if$
310         }
311       if$
312       mid.sentence 'output.state :=
313     }
314   if$
315   s
316 }
317
318 FUNCTION {output}
319 { duplicate$ empty$
320     'pop$
321     'output.nonnull
322   if$
323 }
324
325 FUNCTION {output.check}
326 { 't :=
327   duplicate$ empty$
328     { pop$ "empty " t * " in " * cite$ * warning$ }
329     'output.nonnull
330   if$
331 }
332
333 FUNCTION {output.bibitem}
334 { newline$
335   "\bibitem{" write$
336   cite$ write$
337   "}" write$
338   newline$
339   ""
340   before.all 'output.state :=
341 }
342
343 FUNCTION {fin.entry}
344 { add.period$
345   write$
346   newline$
347 }
348
349 FUNCTION {new.block}
350 { output.state before.all =
351     'skip$
352     { after.block 'output.state := }
353   if$
354 }
355
356 FUNCTION {new.sentence}
357 { output.state after.block =
358     'skip$
359     { output.state before.all =
360     'skip$
361     { after.sentence 'output.state := }
362       if$
363     }
364   if$
365 }
366
367 FUNCTION {not}
368 {   { #0 }
369     { #1 }
370   if$
371 }
372
373 FUNCTION {and}
374 {   'skip$
375     { pop$ #0 }
376   if$
377 }
378
379 FUNCTION {or}
380 {   { pop$ #1 }
381     'skip$
382   if$
383 }
384
385 FUNCTION {new.block.checka}
386 { empty$
387     'skip$
388     'new.block
389   if$
390 }
391
392 FUNCTION {new.block.checkb}
393 { empty$
394   swap$ empty$
395   and
396     'skip$
397     'new.block
398   if$
399 }
400
401 FUNCTION {new.sentence.checka}
402 { empty$
403     'skip$
404     'new.sentence
405   if$
406 }
407
408 FUNCTION {new.sentence.checkb}
409 { empty$
410   swap$ empty$
411   and
412     'skip$
413     'new.sentence
414   if$
415 }
416
417 FUNCTION {field.or.null}
418 { duplicate$ empty$
419     { pop$ "" }
420     'skip$
421   if$
422 }
423
424 FUNCTION {emphasize}
425 { duplicate$ empty$
426     { pop$ "" }
427     { "{\em " swap$ * "}" * }
428   if$
429 }
430
431 INTEGERS { nameptr namesleft numnames }
432
433 FUNCTION {format.names} % needs a total rewrite using 'and' function
434 { 's :=
435   #1 'nameptr :=
436   s num.names$ 'numnames :=
437   numnames 'namesleft :=
438     { namesleft #0 > }
439     {
440       s nameptr "{vv }{ll}{, f.}{, jj}"  format.name$ 't :=  % de Geuzaine, C., jr
441 %     s nameptr "{vv }{ll}{ f.}{, jj}"  format.name$ 't :=  % de Geuzaine C., jr
442 %     s nameptr "{ff }{vv }{ll}{, jj}"  format.name$ 't :=  % Christophe de Geuzaine, jr
443 %     s nameptr "{f. }{vv }{ll}{, jj}"  format.name$ 't :=  % C. de Geuzaine, jr
444 %     s nameptr "{vv }{ll}{, ff}{, jj}" format.name$ 't :=  % de Geuzaine, Christophe, jr
445 %     s nameptr "{vv }{ll}{, ff}{, jj}" format.name$ 't :=  % de Geuzaine, Christophe, jr
446       nameptr #1 >
447     { namesleft #1 >
448         { ", " * t * }
449         { numnames #2 >
450         { "," * }
451         'skip$
452           if$
453           t "others" =
454         { " et al." * } 
455         { " and " * t * }
456           if$
457         }
458       if$
459     }
460     't
461       if$
462       nameptr #1 + 'nameptr :=
463       namesleft #1 - 'namesleft :=
464     }
465   while$
466 }
467
468 FUNCTION {format.authors}
469 { author empty$
470     { "" }
471     { author format.names }
472   if$
473 }
474
475 FUNCTION {format.editors}
476 {
477  editor empty$
478     { "" }
479     {  editor format.names
480        editor num.names$ #1 >
481        { " (eds.)" * }
482        { " (ed.)" * }
483       if$
484     }
485   if$
486 }
487
488 FUNCTION {format.title}
489 { title empty$
490     { "" }
491     { title "t" change.case$ }
492   if$
493 }
494
495 FUNCTION {format.address}
496 { address empty$
497     { "" }
498     { ", " * address }
499     if$
500 }
501
502 FUNCTION {format.note}
503 { note empty$
504     { "" }
505     { new.block 
506       note }
507     if$
508 }
509
510 FUNCTION {n.dashify}
511 { 't :=
512   ""
513     { t empty$ not }
514     { t #1 #1 substring$ "-" =
515     { t #1 #2 substring$ "--" = not
516         { "--" *
517           t #2 global.max$ substring$ 't :=
518         }
519         {   { t #1 #1 substring$ "-" = }
520         { "-" *
521           t #2 global.max$ substring$ 't :=
522         }
523           while$
524         }
525       if$
526     }
527     { t #1 #1 substring$ *
528       t #2 global.max$ substring$ 't :=
529     }
530       if$
531     }
532   while$
533 }
534
535 FUNCTION {format.date}
536 { year empty$
537     { month empty$
538         { "" }
539         { "there's a month but no year in " cite$ * warning$
540             month
541         }
542         if$
543     }
544     { month empty$
545         {"(" year ")" * * } 
546 %       { month " " * year * }
547         {"(" year ")" * * } 
548         if$
549     }
550     if$
551 }
552
553 FUNCTION {format.month}
554 { month empty$
555    { "" }
556    { ", " * month }
557    if$ 
558 }
559
560
561 FUNCTION {format.btitle}
562 { title %emphasize 
563 }
564
565 FUNCTION {tie.or.space.connect}
566 { duplicate$ text.length$ #3 <
567     { "~" }
568     { " " }
569   if$
570   swap$ * *
571 }
572
573 FUNCTION {either.or.check}
574 { empty$
575     'pop$
576     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
577   if$
578 }
579
580 FUNCTION {format.bvolume}
581 { volume empty$
582     { "" }
583     { series empty$ 
584         { "" } 
585 %        { ", Vol. " * "{\bf " * volume "} of " * series * }  %% No "vol."
586          { ", " * series ", " * "{\bf" * volume "}" * * }
587     if$
588     "volume and number" number either.or.check
589     }
590   if$
591 }
592
593 FUNCTION {format.chapter}
594 { chapter empty$
595     { "" }
596     { ", chapter" * chapter %tie.or.space.connect 
597     }
598   if$
599 }
600
601
602 FUNCTION {format.number.series}
603 { volume empty$
604     { number empty$
605         { series field.or.null }
606         { series empty$
607             { "there's a number but no series in " cite$ * warning$ }
608             { ", " * series ", " * "{\bf" * number "}" * * }
609         if$
610         }
611     if$
612     }
613     { "" }
614   if$
615 }
616
617
618 FUNCTION {format.edition}
619 { edition empty$
620     { "" }
621     { output.state mid.sentence =
622        { ", " * edition "l" change.case$ " edition" * } 
623        { ", " * edition "t" change.case$ " edition" * } 
624        if$
625     }
626   if$
627 }
628
629 INTEGERS { multiresult }
630
631 FUNCTION {multi.page.check}
632 { 't :=
633   #0 'multiresult :=
634     { multiresult not
635       t empty$ not
636       and
637     }
638     { t #1 #1 substring$
639       duplicate$ "-" =
640       swap$ duplicate$ "," =
641       swap$ "+" =
642       or or
643     { #1 'multiresult := }
644     { t #2 global.max$ substring$ 't := }
645       if$
646     }
647   while$
648   multiresult
649 }
650
651 FUNCTION {format.pages}
652 { pages empty$
653     { "" }
654     { pages multi.page.check
655         { ", " * "pp." pages n.dashify tie.or.space.connect }
656         { "" pages tie.or.space.connect } 
657       if$
658     }
659   if$
660 }
661
662 FUNCTION {format.vol.num.pages}
663 { volume empty$
664   {  "empty volume in " cite$ * warning$
665      ", {\bf ?}" 
666   }
667   {  ", {\bf " * volume "}" * field.or.null 
668   }
669   if$
670   number empty$
671     'skip$
672     'skip$
673   if$
674   pages empty$
675     'skip$
676     { duplicate$ empty$
677         { pop$ format.pages }
678        { ", " * pages n.dashify * } 
679       if$
680     }
681   if$
682 }
683
684 FUNCTION {format.chapter.pages}
685 { chapter empty$
686     'format.pages
687     { type empty$
688         { "chapter" }
689         { type "l" change.case$ }
690       if$
691       chapter tie.or.space.connect
692       pages empty$
693         'skip$
694         { ", " * format.pages * }
695       if$
696     }
697   if$
698 }
699
700 FUNCTION {format.in.ed.booktitle}
701 { booktitle empty$
702     { "" }
703     { editor empty$
704 %    { "In " booktitle emphasize *} 
705     { booktitle emphasize } 
706     { "In " format.editors * ", " * booktitle emphasize * } 
707       if$
708     }
709   if$
710 }
711
712 FUNCTION {empty.misc.check}
713 { author empty$ title empty$ howpublished empty$
714   month empty$ year empty$ note empty$
715   and and and and and
716     { "all relevant fields are empty in " cite$ * warning$ }
717     'skip$
718   if$
719 }
720
721 FUNCTION {format.thesis.type}
722 { type empty$
723     'skip$
724     { pop$
725       type "t" change.case$
726     }
727   if$
728 }
729
730 FUNCTION {format.tr.type} 
731 {  type empty$
732     { "Technical Report" }
733     'type
734   if$
735 }
736
737 FUNCTION {format.tr.number} %% old way
738 { type empty$
739     { "Technical Report" }
740     'type
741   if$
742   number empty$
743     { "t" change.case$ }
744     { number tie.or.space.connect }
745   if$
746 }
747
748 FUNCTION {format.article.crossref}
749 { key empty$
750     { journal empty$
751     { "need key or journal for " cite$ * " to crossref " * crossref *
752       warning$
753       ""
754     }
755     { "In {\em " journal * "\/}" * } 
756       if$
757     }
758     { "In " key * } 
759   if$
760   " \cite{" * crossref * "}" *
761 }
762
763 FUNCTION {format.crossref.editor}
764 { editor #1 "{vv~}{ll}" format.name$
765   editor num.names$ duplicate$
766   #2 >
767     { pop$ " et~al." * }
768     { #2 <
769     'skip$
770     { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
771         { " et~al." * }
772         { " and " * editor #2 "{vv~}{ll}" format.name$ * }
773       if$
774     }
775       if$
776     }
777   if$
778 }
779
780 FUNCTION {format.book.crossref}
781 { volume empty$
782     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
783       "In " 
784     }
785     { "Volume" volume tie.or.space.connect
786       " of " *
787     }
788   if$
789   editor empty$
790   editor field.or.null author field.or.null =
791   or
792     { key empty$
793     { series empty$
794         { "need editor, key, or series for " cite$ * " to crossref " *
795           crossref * warning$
796           "" *
797         }
798         { "{\em " * series * "\/}" * }
799       if$
800     }
801     { key * }
802       if$
803     }
804     { format.crossref.editor * }
805   if$
806   " \cite{" * crossref * "}" *
807 }
808
809 FUNCTION {format.incoll.inproc.crossref}
810 { editor empty$
811   editor field.or.null author field.or.null =
812   or
813     { key empty$
814     { booktitle empty$
815         { "need editor, key, or booktitle for " cite$ * " to crossref " *
816           crossref * warning$
817           ""
818         }
819         { "In " booktitle * } 
820       if$
821     }
822     { "In " key * }
823       if$
824     }
825     { "In " format.crossref.editor * } 
826   if$
827   " \cite{" * crossref * "}" *
828 }
829
830 FUNCTION {article}
831 { output.bibitem
832   format.authors "author" output.check
833   format.date "year" output.check 
834   format.title "title"  output.check 
835   new.block
836   crossref missing$
837     { journal emphasize "journal" output.check
838       format.vol.num.pages output
839     }
840     { format.article.crossref output.nonnull
841       format.pages output
842     }
843   if$
844   format.note output
845   fin.entry
846 }
847
848 FUNCTION {book}
849 { output.bibitem
850   author empty$
851     { format.editors "author and editor" output.check }
852     { format.authors output.nonnull
853       crossref missing$
854     { "author and editor" editor either.or.check }
855     'skip$
856       if$
857     }
858   if$
859   format.date "year" output.check 
860   #1 'doblank := % remove blanks
861   format.btitle emphasize "title" output.check
862   format.edition output
863   crossref missing$
864     { format.bvolume output
865       format.number.series output
866       new.sentence
867       publisher "publisher" output.check
868       format.address "address" output.check
869     }
870     { new.block 
871       format.book.crossref output.nonnull
872     }
873   if$
874   format.note output 
875   fin.entry
876   #0 'doblank := % blanks again TDS
877 }
878
879 FUNCTION {booklet}
880 { output.bibitem
881   format.authors output
882   format.date "year" output.check 
883   format.title "title" output.check
884   howpublished address new.block.checkb
885   howpublished output
886   format.address output
887   format.note output 
888   fin.entry
889 }
890
891 FUNCTION {inbook}
892 { output.bibitem
893   author empty$
894     { format.editors "author and editor" output.check }
895     { format.authors output.nonnull
896     }
897   if$
898   format.date "year" output.check
899   format.btitle "title" output.check
900   new.sentence
901   format.in.ed.booktitle output
902   new.sentence 
903   crossref missing$
904     { publisher output
905       format.address "address" output.check
906     }
907     { format.chapter.pages "chapter and pages" output.check
908       new.block
909       format.book.crossref output.nonnull
910     }
911   if$
912 %  format.edition output
913    format.note output
914    fin.entry
915 }
916
917
918 FUNCTION {inproceedings}
919 { output.bibitem
920   format.authors "author" output.check
921   format.date "year" output.check 
922   format.title "title" output.check 
923   new.block
924   crossref missing$
925     { format.in.ed.booktitle "booktitle" output.check
926       format.address "address" output.check
927       format.month "month" output.check  
928       format.bvolume output
929       format.number.series output
930       format.pages "pages" output.check 
931       new.sentence
932       organization publisher new.sentence.checkb
933           organization output
934           publisher "publisher" output.check
935     }
936     { format.incoll.inproc.crossref output.nonnull
937       format.chapter output
938       format.pages output
939     }
940   if$
941   format.note output
942   fin.entry
943 }
944
945 FUNCTION {incollection}
946 %% same as "inproceedings, but without pages
947 %% and the address means the publisher location, and therefore goes at the end.
948 %% Useful for book chapters.
949 %%
950 { output.bibitem
951   format.authors "author" output.check
952   format.date "year" output.check 
953   format.title "title" output.check 
954   new.block
955   crossref missing$
956     { format.in.ed.booktitle "booktitle" output.check
957       format.chapter output
958       format.month output  
959       format.bvolume output
960       format.number.series output
961 %%    format.chapter.pages "pages" output.check 
962       format.pages output
963       new.sentence
964       organization publisher new.sentence.checkb
965       organization output
966       publisher "publisher" output.check
967       format.address "address" output.check
968     }
969     { format.incoll.inproc.crossref output.nonnull
970       format.chapter output
971       format.pages output
972     }
973   if$
974   format.note output
975   fin.entry
976 }
977
978 FUNCTION {conference} { incollection }
979
980 FUNCTION {manual}
981 { output.bibitem
982   number empty$
983   { % original output
984     "empty number in " cite$ * warning$
985     author empty$
986       { organization empty$
987           'skip$
988           { organization output.nonnull
989               address "address" output.check
990           }
991           if$
992       }
993       { format.authors output.nonnull }
994     if$
995     format.date "year" output.check
996     format.btitle emphasize "title" output.check
997     format.edition output
998     author empty$
999       { organization empty$
1000           { address new.block.checka
1001             address output
1002           }
1003           'skip$
1004         if$
1005       }
1006       { organization address new.block.checkb
1007         organization output
1008         new.block
1009         address "address" output.check
1010       }
1011     if$
1012     format.note output
1013   }
1014   { % if number is not empty
1015   number output
1016   format.date "year" output.check
1017   format.btitle emphasize "title" output.check
1018   format.edition output
1019   author empty$
1020     { organization empty$
1021         { address new.block.checka
1022           address output
1023         }
1024         'skip$
1025       if$
1026     }
1027     { organization address new.block.checkb
1028       organization output
1029       new.block
1030       address "address" output.check
1031     }
1032   if$
1033   }
1034   if$
1035   fin.entry
1036 }
1037
1038
1039 FUNCTION {mastersthesis}
1040 { output.bibitem
1041   format.authors "author" output.check
1042   format.date "year" output.check
1043   format.title "title" output.check
1044   new.block
1045   "Master's thesis." format.thesis.type output.nonnull
1046   school "school" output.check
1047   address output
1048   format.note output
1049   fin.entry
1050 }
1051
1052 FUNCTION {masterthesis} { mastersthesis }
1053
1054 FUNCTION {misc}
1055 { output.bibitem
1056   format.authors output
1057   format.date output
1058   title howpublished new.block.checkb
1059   format.title output
1060   howpublished new.block.checka
1061   howpublished output
1062   format.note output
1063   fin.entry
1064   empty.misc.check
1065 }
1066
1067 FUNCTION {phdthesis}
1068 { output.bibitem
1069   format.authors "author" output.check
1070   format.date "year" output.check
1071   format.btitle "title" output.check
1072   new.block
1073   "PhD thesis" format.thesis.type output.nonnull
1074   school "school" output.check
1075   address output
1076   format.note output
1077   fin.entry
1078 }
1079
1080 FUNCTION {proceedings}
1081 { output.bibitem
1082   editor empty$
1083     { format.editors "editor" output.check
1084       organization output 
1085     }
1086     { format.editors output.nonnull }
1087   if$
1088   format.date "year" output.check
1089   format.btitle emphasize "title" output.check
1090   format.address "address" output.check
1091   format.month "month" output.check  
1092   format.bvolume output
1093   format.number.series output
1094   new.sentence
1095   organization publisher new.sentence.checkb
1096   organization output
1097   publisher "publisher" output.check
1098   format.note output
1099   fin.entry
1100 }
1101
1102 FUNCTION {techreport}
1103 { output.bibitem
1104   author empty$
1105   { number "number" output.check
1106     format.date "year" output.check
1107     format.title "title" output.check
1108     add.period$
1109     format.tr.type output
1110   }
1111   { format.authors "author" output.check
1112     format.date "year" output.check
1113     format.title "title" output.check
1114     add.period$
1115     format.tr.number "number" output.check %output.nonnull
1116 %   format.tr.type output
1117   }
1118   if$
1119   add.period$
1120   institution "institution" output.check
1121   format.address "address" output.check
1122   format.note output
1123   fin.entry
1124 }
1125
1126 FUNCTION {unpublished}
1127 { output.bibitem
1128   format.authors "author" output.check
1129   format.date "year" output.check
1130   format.title "title" output.check
1131   new.block
1132   format.note "note" output.check
1133   fin.entry
1134 }
1135
1136 FUNCTION {default.type} { misc }
1137
1138
1139
1140 READ
1141
1142 FUNCTION {begin.bib}
1143 { preamble$ empty$
1144     'skip$
1145     { preamble$ write$ newline$ }
1146   if$
1147   "\begin{thebibliography}{99}" 
1148   write$ newline$
1149 }
1150
1151 EXECUTE {begin.bib}
1152
1153 EXECUTE {init.state.consts}
1154
1155 ITERATE {call.type$}
1156
1157 FUNCTION {end.bib}
1158 { newline$
1159   "\end{thebibliography}" write$ newline$
1160 }
1161
1162 EXECUTE {end.bib}