]> AND Private Git Repository - Sensornets15.git/blob - ijuc.bst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
ok
[Sensornets15.git] / ijuc.bst
1 % BibTeX standard bibliography style `plain'\r
2         % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.\r
3         % Copyright (C) 1985, all rights reserved.\r
4         % Copying of this file is authorized only if either\r
5         % (1) you make absolutely no changes to your copy, including name, or\r
6         % (2) if you do make changes, you name it something other than\r
7         % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.\r
8         % This restriction helps ensure that all standard styles are identical.\r
9         % The file btxbst.doc has the documentation for this style.\r
10 \r
11 ENTRY\r
12   { address\r
13     author\r
14     booktitle\r
15     chapter\r
16     edition\r
17     editor\r
18     howpublished\r
19     institution\r
20     journal\r
21     key\r
22     month\r
23     note\r
24     number\r
25     organization\r
26     pages\r
27     publisher\r
28     school\r
29     series\r
30     title\r
31     type\r
32     volume\r
33     year\r
34   }\r
35   {}\r
36   { label }\r
37 \r
38 INTEGERS { output.state before.all mid.sentence after.sentence after.block }\r
39 \r
40 FUNCTION {init.state.consts}\r
41 { #0 'before.all :=\r
42   #1 'mid.sentence :=\r
43   #2 'after.sentence :=\r
44   #3 'after.block :=\r
45 }\r
46 \r
47 STRINGS { s t }\r
48 \r
49 FUNCTION {output.nonnull}\r
50 { 's :=\r
51   output.state mid.sentence =\r
52     { ", " * write$ }\r
53     { output.state after.block =\r
54         { add.period$ write$\r
55           newline$\r
56           "\newblock " write$\r
57         }\r
58         { output.state before.all =\r
59             'write$\r
60             { add.period$ " " * write$ }\r
61           if$\r
62         }\r
63       if$\r
64       mid.sentence 'output.state :=\r
65     }\r
66   if$\r
67   s\r
68 }\r
69 \r
70 FUNCTION {output}\r
71 { duplicate$ empty$\r
72     'pop$\r
73     'output.nonnull\r
74   if$\r
75 }\r
76 \r
77 FUNCTION {output.check}\r
78 { 't :=\r
79   duplicate$ empty$\r
80     { pop$ "empty " t * " in " * cite$ * warning$ }\r
81     'output.nonnull\r
82   if$\r
83 }\r
84 \r
85 FUNCTION {output.bibitem}\r
86 { newline$\r
87   "\bibitem{" write$\r
88   cite$ write$\r
89   "}" write$\r
90   newline$\r
91   ""\r
92   before.all 'output.state :=\r
93 }\r
94 \r
95 FUNCTION {fin.entry}\r
96 { add.period$\r
97   write$\r
98   newline$\r
99 }\r
100 \r
101 FUNCTION {new.block}\r
102 { output.state before.all =\r
103     'skip$\r
104     { after.block 'output.state := }\r
105   if$\r
106 }\r
107 \r
108 FUNCTION {new.sentence}\r
109 { output.state after.block =\r
110     'skip$\r
111     { output.state before.all =\r
112         'skip$\r
113         { after.sentence 'output.state := }\r
114       if$\r
115     }\r
116   if$\r
117 }\r
118 \r
119 FUNCTION {not}\r
120 {   { #0 }\r
121     { #1 }\r
122   if$\r
123 }\r
124 \r
125 FUNCTION {and}\r
126 {   'skip$\r
127     { pop$ #0 }\r
128   if$\r
129 }\r
130 \r
131 FUNCTION {or}\r
132 {   { pop$ #1 }\r
133     'skip$\r
134   if$\r
135 }\r
136 \r
137 FUNCTION {new.block.checka}\r
138 { empty$\r
139     'skip$\r
140     'new.block\r
141   if$\r
142 }\r
143 \r
144 FUNCTION {new.block.checkb}\r
145 { empty$\r
146   swap$ empty$\r
147   and\r
148     'skip$\r
149     'new.block\r
150   if$\r
151 }\r
152 \r
153 FUNCTION {new.sentence.checka}\r
154 { empty$\r
155     'skip$\r
156     'new.sentence\r
157   if$\r
158 }\r
159 \r
160 FUNCTION {new.sentence.checkb}\r
161 { empty$\r
162   swap$ empty$\r
163   and\r
164     'skip$\r
165     'new.sentence\r
166   if$\r
167 }\r
168 \r
169 FUNCTION {field.or.null}\r
170 { duplicate$ empty$\r
171     { pop$ "" }\r
172     'skip$\r
173   if$\r
174 }\r
175 \r
176 FUNCTION {emphasize}\r
177 { duplicate$ empty$\r
178     { pop$ "" }\r
179     { "{\em " swap$ * "}" * }\r
180   if$\r
181 }\r
182 \r
183 FUNCTION {parenthesize}\r
184 { duplicate$ empty$\r
185     { pop$ "" }\r
186     { "(" swap$ * ")" * }\r
187   if$\r
188 }\r
189 \r
190 \r
191 INTEGERS { nameptr namesleft numnames }\r
192 \r
193 FUNCTION {format.names}\r
194 { 's :=\r
195   #1 'nameptr :=\r
196   s num.names$ 'numnames :=\r
197   numnames 'namesleft :=\r
198     { namesleft #0 > }\r
199     { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=\r
200       nameptr #1 >\r
201         { namesleft #1 >\r
202             { ", " * t * }\r
203             { numnames #2 >\r
204                 { "," * }\r
205                 'skip$\r
206               if$\r
207               t "others" =\r
208                 { " {\it et~al.}" * }\r
209                 { " and " * t * }\r
210               if$\r
211             }\r
212           if$\r
213         }\r
214         't\r
215       if$\r
216       nameptr #1 + 'nameptr :=\r
217       namesleft #1 - 'namesleft :=\r
218     }\r
219   while$\r
220 }\r
221 \r
222 FUNCTION {format.authors}\r
223 { author empty$\r
224     { "" }\r
225     { author format.names }\r
226   if$\r
227 }\r
228 \r
229 FUNCTION {format.editors}\r
230 { editor empty$\r
231     { "" }\r
232     { editor format.names\r
233       editor num.names$ #1 >\r
234         { ", editors" * }\r
235         { ", editor" * }\r
236       if$\r
237     }\r
238   if$\r
239 }\r
240 \r
241 FUNCTION {format.title}\r
242 { title empty$\r
243     { "" }\r
244     { title "t" change.case$ }\r
245   if$\r
246 }\r
247 \r
248 FUNCTION {n.dashify}\r
249 { 't :=\r
250   ""\r
251     { t empty$ not }\r
252     { t #1 #1 substring$ "-" =\r
253         { t #1 #2 substring$ "--" = not\r
254             { "--" *\r
255               t #2 global.max$ substring$ 't :=\r
256             }\r
257             {   { t #1 #1 substring$ "-" = }\r
258                 { "-" *\r
259                   t #2 global.max$ substring$ 't :=\r
260                 }\r
261               while$\r
262             }\r
263           if$\r
264         }\r
265         { t #1 #1 substring$ *\r
266           t #2 global.max$ substring$ 't :=\r
267         }\r
268       if$\r
269     }\r
270   while$\r
271 }\r
272 \r
273 \r
274 FUNCTION {format.datea}\r
275 { year empty$\r
276     { month empty$\r
277         { "" }\r
278         { "there's a month but no year in " cite$ * warning$\r
279           month\r
280         }\r
281       if$\r
282     }\r
283     { month empty$\r
284         'year\r
285         { month " " * year * }\r
286       if$\r
287     }\r
288   if$\r
289 }\r
290 \r
291 \r
292 FUNCTION {format.date}\r
293 { format.datea parenthesize\r
294 }\r
295 \r
296 FUNCTION {format.btitle}\r
297 { title emphasize\r
298 }\r
299 \r
300 FUNCTION {tie.or.space.connect}\r
301 { duplicate$ text.length$ #3 <\r
302     { "~" }\r
303     { " " }\r
304   if$\r
305   swap$ * *\r
306 }\r
307 \r
308 FUNCTION {either.or.check}\r
309 { empty$\r
310     'pop$\r
311     { "can't use both " swap$ * " fields in " * cite$ * warning$ }\r
312   if$\r
313 }\r
314 \r
315 FUNCTION {format.bvolume}\r
316 { volume empty$\r
317     { "" }\r
318     { "volume" volume tie.or.space.connect\r
319       series empty$\r
320         'skip$\r
321         { " of " * series emphasize * }\r
322       if$\r
323       "volume and number" number either.or.check\r
324     }\r
325   if$\r
326 }\r
327 \r
328 FUNCTION {format.number.series}\r
329 { volume empty$\r
330     { number empty$\r
331         { series field.or.null }\r
332         { output.state mid.sentence =\r
333             { "number" }\r
334             { "Number" }\r
335           if$\r
336           number tie.or.space.connect\r
337           series empty$\r
338             { "there's a number but no series in " cite$ * warning$ }\r
339             { " in " * series * }\r
340           if$\r
341         }\r
342       if$\r
343     }\r
344     { "" }\r
345   if$\r
346 }\r
347 \r
348 FUNCTION {format.edition}\r
349 { edition empty$\r
350     { "" }\r
351     { output.state mid.sentence =\r
352         { edition "l" change.case$ " edition" * }\r
353         { edition "t" change.case$ " edition" * }\r
354       if$\r
355     }\r
356   if$\r
357 }\r
358 \r
359 INTEGERS { multiresult }\r
360 \r
361 FUNCTION {multi.page.check}\r
362 { 't :=\r
363   #0 'multiresult :=\r
364     { multiresult not\r
365       t empty$ not\r
366       and\r
367     }\r
368     { t #1 #1 substring$\r
369       duplicate$ "-" =\r
370       swap$ duplicate$ "," =\r
371       swap$ "+" =\r
372       or or\r
373         { #1 'multiresult := }\r
374         { t #2 global.max$ substring$ 't := }\r
375       if$\r
376     }\r
377   while$\r
378   multiresult\r
379 }\r
380 \r
381 FUNCTION {format.pages}\r
382 { pages empty$\r
383     { "" }\r
384     { pages multi.page.check\r
385         { "pages" pages n.dashify tie.or.space.connect }\r
386         { "page" pages tie.or.space.connect }\r
387       if$\r
388     }\r
389   if$\r
390 }\r
391 \r
392 FUNCTION {format.vol.num.pages}\r
393 { volume field.or.null\r
394   number empty$\r
395     'skip$\r
396     { "(" number * ")" * *\r
397       volume empty$\r
398         { "there's a number but no volume in " cite$ * warning$ }\r
399         'skip$\r
400       if$\r
401     }\r
402   if$\r
403   pages empty$\r
404     'skip$\r
405     { duplicate$ empty$\r
406         { pop$ format.pages }\r
407         { ":" * pages n.dashify * }\r
408       if$\r
409     }\r
410   if$\r
411 }\r
412 \r
413 FUNCTION {format.chapter.pages}\r
414 { chapter empty$\r
415     'format.pages\r
416     { type empty$\r
417         { "chapter" }\r
418         { type "l" change.case$ }\r
419       if$\r
420       chapter tie.or.space.connect\r
421       pages empty$\r
422         'skip$\r
423         { ", " * format.pages * }\r
424       if$\r
425     }\r
426   if$\r
427 }\r
428 \r
429 FUNCTION {format.in.ed.booktitle}\r
430 { booktitle empty$\r
431     { "" }\r
432     { editor empty$\r
433         { "In " booktitle emphasize * }\r
434         { "In " format.editors * ", " * booktitle emphasize * }\r
435       if$\r
436     }\r
437   if$\r
438 }\r
439 \r
440 FUNCTION {empty.misc.check}\r
441 { author empty$ title empty$ howpublished empty$\r
442   month empty$ year empty$ note empty$\r
443   and and and and and\r
444   key empty$ not and\r
445     { "all relevant fields are empty in " cite$ * warning$ }\r
446     'skip$\r
447   if$\r
448 }\r
449 \r
450 FUNCTION {format.thesis.type}\r
451 { type empty$\r
452     'skip$\r
453     { pop$\r
454       type "t" change.case$\r
455     }\r
456   if$\r
457 }\r
458 \r
459 FUNCTION {format.tr.number}\r
460 { type empty$\r
461     { "Technical Report" }\r
462     'type\r
463   if$\r
464   number empty$\r
465     { "t" change.case$ }\r
466     { number tie.or.space.connect }\r
467   if$\r
468 }\r
469 \r
470 FUNCTION {format.article.crossref}\r
471 { key empty$\r
472     { journal empty$\r
473         { "need key or journal for " cite$ * " to crossref " * crossref *\r
474           warning$\r
475           ""\r
476         }\r
477         { "In {\em " journal * "\/}" * }\r
478       if$\r
479     }\r
480     { "In " key * }\r
481   if$\r
482   " \cite{" * crossref * "}" *\r
483 }\r
484 \r
485 FUNCTION {format.crossref.editor}\r
486 { editor #1 "{vv~}{ll}" format.name$\r
487   editor num.names$ duplicate$\r
488   #2 >\r
489     { pop$ " {\it et~al.}" * }\r
490     { #2 <\r
491         'skip$\r
492         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =\r
493             { " {\it et~al.}" * }\r
494             { " and " * editor #2 "{vv~}{ll}" format.name$ * }\r
495           if$\r
496         }\r
497       if$\r
498     }\r
499   if$\r
500 }\r
501 \r
502 FUNCTION {format.book.crossref}\r
503 { volume empty$\r
504     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$\r
505       "In "\r
506     }\r
507     { "Volume" volume tie.or.space.connect\r
508       " of " *\r
509     }\r
510   if$\r
511   editor empty$\r
512   editor field.or.null author field.or.null =\r
513   or\r
514     { key empty$\r
515         { series empty$\r
516             { "need editor, key, or series for " cite$ * " to crossref " *\r
517               crossref * warning$\r
518               "" *\r
519             }\r
520             { "{\em " * series * "\/}" * }\r
521           if$\r
522         }\r
523         { key * }\r
524       if$\r
525     }\r
526     { format.crossref.editor * }\r
527   if$\r
528   " \cite{" * crossref * "}" *\r
529 }\r
530 \r
531 FUNCTION {format.incoll.inproc.crossref}\r
532 { editor empty$\r
533   editor field.or.null author field.or.null =\r
534   or\r
535     { key empty$\r
536         { booktitle empty$\r
537             { "need editor, key, or booktitle for " cite$ * " to crossref " *\r
538               crossref * warning$\r
539               ""\r
540             }\r
541             { "In {\em " booktitle * "\/}" * }\r
542           if$\r
543         }\r
544         { "In " key * }\r
545       if$\r
546     }\r
547     { "In " format.crossref.editor * }\r
548   if$\r
549   " \cite{" * crossref * "}" *\r
550 }\r
551 \r
552 FUNCTION {article}\r
553 { output.bibitem\r
554   format.authors "author" output.check\r
555   new.block\r
556   format.date "year" output.check\r
557   new.block\r
558   format.title "title" output.check\r
559   new.block\r
560   crossref missing$\r
561     { journal emphasize "journal" output.check\r
562       format.vol.num.pages output\r
563     }\r
564     { format.article.crossref output.nonnull\r
565       format.pages output\r
566     }\r
567   if$\r
568   new.block\r
569   note output\r
570   fin.entry\r
571 }\r
572 \r
573 FUNCTION {book}\r
574 { output.bibitem\r
575   author empty$\r
576     { format.editors "author and editor" output.check }\r
577     { format.authors output.nonnull\r
578       crossref missing$\r
579         { "author and editor" editor either.or.check }\r
580         'skip$\r
581       if$\r
582     }\r
583   if$\r
584   new.block\r
585   format.date "year" output.check\r
586   new.block\r
587   format.btitle "title" output.check\r
588   crossref missing$\r
589     { format.bvolume output\r
590       new.block\r
591       format.number.series output\r
592       new.sentence\r
593       publisher "publisher" output.check\r
594       address output\r
595     }\r
596     { new.block\r
597       format.book.crossref output.nonnull\r
598     }\r
599   if$\r
600   format.edition output\r
601   new.block\r
602   note output\r
603   fin.entry\r
604 }\r
605 \r
606 FUNCTION {booklet}\r
607 { output.bibitem\r
608   format.authors output\r
609   new.block\r
610   format.date output\r
611   new.block\r
612   format.title "title" output.check\r
613   howpublished address new.block.checkb\r
614   howpublished output\r
615   address output\r
616   new.block\r
617   note output\r
618   fin.entry\r
619 }\r
620 \r
621 FUNCTION {inbook}\r
622 { output.bibitem\r
623   author empty$\r
624     { format.editors "author and editor" output.check }\r
625     { format.authors output.nonnull\r
626       crossref missing$\r
627         { "author and editor" editor either.or.check }\r
628         'skip$\r
629       if$\r
630     }\r
631   if$\r
632   new.block\r
633   format.date "year" output.check\r
634   new.block\r
635   format.btitle "title" output.check\r
636   crossref missing$\r
637     { format.bvolume output\r
638       format.chapter.pages "chapter and pages" output.check\r
639       new.block\r
640       format.number.series output\r
641       new.sentence\r
642       publisher "publisher" output.check\r
643       address output\r
644     }\r
645     { format.chapter.pages "chapter and pages" output.check\r
646       new.block\r
647       format.book.crossref output.nonnull\r
648     }\r
649   if$\r
650   format.edition output\r
651   new.block\r
652   note output\r
653   fin.entry\r
654 }\r
655 \r
656 FUNCTION {incollection}\r
657 { output.bibitem\r
658   format.authors "author" output.check\r
659   new.block\r
660   format.date "year" output.check\r
661   new.block\r
662   format.title "title" output.check\r
663   new.block\r
664   crossref missing$\r
665     { format.in.ed.booktitle "booktitle" output.check\r
666       format.bvolume output\r
667       format.number.series output\r
668       format.chapter.pages output\r
669       new.sentence\r
670       publisher "publisher" output.check\r
671       address output\r
672       format.edition output\r
673     }\r
674     { format.incoll.inproc.crossref output.nonnull\r
675       format.chapter.pages output\r
676     }\r
677   if$\r
678   new.block\r
679   note output\r
680   fin.entry\r
681 }\r
682 \r
683 FUNCTION {inproceedings}\r
684 { output.bibitem\r
685   format.authors "author" output.check\r
686   new.block\r
687   format.date "year" output.check\r
688   new.block\r
689   format.title "title" output.check\r
690   new.block\r
691   crossref missing$\r
692     { format.in.ed.booktitle "booktitle" output.check\r
693       format.bvolume output\r
694       format.number.series output\r
695       format.pages output\r
696       address empty$\r
697         { organization publisher new.sentence.checkb\r
698           organization output\r
699           publisher output\r
700         }\r
701         { address output.nonnull\r
702           new.sentence\r
703           organization output\r
704           publisher output\r
705         }\r
706       if$\r
707     }\r
708     { format.incoll.inproc.crossref output.nonnull\r
709       format.pages output\r
710     }\r
711   if$\r
712   new.block\r
713   note output\r
714   fin.entry\r
715 }\r
716 \r
717 FUNCTION {conference} { inproceedings }\r
718 \r
719 FUNCTION {manual}\r
720 { output.bibitem\r
721   author empty$\r
722     { organization empty$\r
723         'skip$\r
724         { organization output.nonnull\r
725           address output\r
726         }\r
727       if$\r
728     }\r
729     { format.authors output.nonnull }\r
730   if$\r
731   new.block\r
732   format.date output\r
733   new.block\r
734   format.btitle "title" output.check\r
735   author empty$\r
736     { organization empty$\r
737         { address new.block.checka\r
738           address output\r
739         }\r
740         'skip$\r
741       if$\r
742     }\r
743     { organization address new.block.checkb\r
744       organization output\r
745       address output\r
746     }\r
747   if$\r
748   format.edition output\r
749   new.block\r
750   note output\r
751   fin.entry\r
752 }\r
753 \r
754 FUNCTION {mastersthesis}\r
755 { output.bibitem\r
756   format.authors "author" output.check\r
757   new.block\r
758   format.date "year" output.check\r
759   new.block\r
760   format.title "title" output.check\r
761   new.block\r
762   "Master's thesis" format.thesis.type output.nonnull\r
763   school "school" output.check\r
764   address output\r
765   new.block\r
766   note output\r
767   fin.entry\r
768 }\r
769 \r
770 FUNCTION {misc}\r
771 { output.bibitem\r
772   format.authors output\r
773   format.date output\r
774   title howpublished new.block.checkb\r
775   format.title output\r
776   howpublished new.block.checka\r
777   howpublished output\r
778   new.block\r
779   note output\r
780   fin.entry\r
781   empty.misc.check\r
782 }\r
783 \r
784 FUNCTION {phdthesis}\r
785 { output.bibitem\r
786   format.authors "author" output.check\r
787   new.block\r
788   format.date "year" output.check\r
789   new.block\r
790   format.btitle "title" output.check\r
791   new.block\r
792   "PhD thesis" format.thesis.type output.nonnull\r
793   school "school" output.check\r
794   address output\r
795   new.block\r
796   note output\r
797   fin.entry\r
798 }\r
799 \r
800 FUNCTION {proceedings}\r
801 { output.bibitem\r
802   editor empty$\r
803     { organization output }\r
804     { format.editors output.nonnull }\r
805   if$\r
806   new.block\r
807   format.date "year" output.check\r
808   new.block\r
809   format.btitle "title" output.check\r
810   format.bvolume output\r
811   format.number.series output\r
812   address empty$\r
813     { editor empty$\r
814         { publisher new.sentence.checka }\r
815         { organization publisher new.sentence.checkb\r
816           organization output\r
817         }\r
818       if$\r
819       publisher output\r
820     }\r
821     { address output.nonnull\r
822       new.sentence\r
823       editor empty$\r
824         'skip$\r
825         { organization output }\r
826       if$\r
827       publisher output\r
828     }\r
829   if$\r
830   new.block\r
831   note output\r
832   fin.entry\r
833 }\r
834 \r
835 FUNCTION {techreport}\r
836 { output.bibitem\r
837   format.authors "author" output.check\r
838   new.block\r
839   format.date "year" output.check\r
840   new.block\r
841   format.title "title" output.check\r
842   new.block\r
843   format.tr.number output.nonnull\r
844   institution "institution" output.check\r
845   address output\r
846   new.block\r
847   note output\r
848   fin.entry\r
849 }\r
850 \r
851 FUNCTION {unpublished}\r
852 { output.bibitem\r
853   format.authors "author" output.check\r
854   new.block\r
855   format.date output\r
856   new.block\r
857   format.title "title" output.check\r
858   new.block\r
859   note "note" output.check\r
860   fin.entry\r
861 }\r
862 \r
863 FUNCTION {default.type} { misc }\r
864 \r
865 MACRO {jan} {"January"}\r
866 \r
867 MACRO {feb} {"February"}\r
868 \r
869 MACRO {mar} {"March"}\r
870 \r
871 MACRO {apr} {"April"}\r
872 \r
873 MACRO {may} {"May"}\r
874 \r
875 MACRO {jun} {"June"}\r
876 \r
877 MACRO {jul} {"July"}\r
878 \r
879 MACRO {aug} {"August"}\r
880 \r
881 MACRO {sep} {"September"}\r
882 \r
883 MACRO {oct} {"October"}\r
884 \r
885 MACRO {nov} {"November"}\r
886 \r
887 MACRO {dec} {"December"}\r
888 \r
889 MACRO {acmcs} {"ACM Computing Surveys"}\r
890 \r
891 MACRO {acta} {"Acta Informatica"}\r
892 \r
893 MACRO {cacm} {"Communications of the ACM"}\r
894 \r
895 MACRO {ibmjrd} {"IBM Journal of Research and Development"}\r
896 \r
897 MACRO {ibmsj} {"IBM Systems Journal"}\r
898 \r
899 MACRO {ieeese} {"IEEE Transactions on Software Engineering"}\r
900 \r
901 MACRO {ieeetc} {"IEEE Transactions on Computers"}\r
902 \r
903 MACRO {ieeetcad}\r
904  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}\r
905 \r
906 MACRO {ipl} {"Information Processing Letters"}\r
907 \r
908 MACRO {jacm} {"Journal of the ACM"}\r
909 \r
910 MACRO {jcss} {"Journal of Computer and System Sciences"}\r
911 \r
912 MACRO {scp} {"Science of Computer Programming"}\r
913 \r
914 MACRO {sicomp} {"SIAM Journal on Computing"}\r
915 \r
916 MACRO {tocs} {"ACM Transactions on Computer Systems"}\r
917 \r
918 MACRO {tods} {"ACM Transactions on Database Systems"}\r
919 \r
920 MACRO {tog} {"ACM Transactions on Graphics"}\r
921 \r
922 MACRO {toms} {"ACM Transactions on Mathematical Software"}\r
923 \r
924 MACRO {toois} {"ACM Transactions on Office Information Systems"}\r
925 \r
926 MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}\r
927 \r
928 MACRO {tcs} {"Theoretical Computer Science"}\r
929 \r
930 READ\r
931 \r
932 FUNCTION {sortify}\r
933 { purify$\r
934   "l" change.case$\r
935 }\r
936 \r
937 INTEGERS { len }\r
938 \r
939 FUNCTION {chop.word}\r
940 { 's :=\r
941   'len :=\r
942   s #1 len substring$ =\r
943     { s len #1 + global.max$ substring$ }\r
944     's\r
945   if$\r
946 }\r
947 \r
948 FUNCTION {sort.format.names}\r
949 { 's :=\r
950   #1 'nameptr :=\r
951   ""\r
952   s num.names$ 'numnames :=\r
953   numnames 'namesleft :=\r
954     { namesleft #0 > }\r
955     { nameptr #1 >\r
956         { "   " * }\r
957         'skip$\r
958       if$\r
959       s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=\r
960       nameptr numnames = t "others" = and\r
961         { " {\it et~al.}" * }\r
962         { t sortify * }\r
963       if$\r
964       nameptr #1 + 'nameptr :=\r
965       namesleft #1 - 'namesleft :=\r
966     }\r
967   while$\r
968 }\r
969 \r
970 FUNCTION {sort.format.title}\r
971 { 't :=\r
972   "A " #2\r
973     "An " #3\r
974       "The " #4 t chop.word\r
975     chop.word\r
976   chop.word\r
977   sortify\r
978   #1 global.max$ substring$\r
979 }\r
980 \r
981 FUNCTION {author.sort}\r
982 { author empty$\r
983     { key empty$\r
984         { "to sort, need author or key in " cite$ * warning$\r
985           ""\r
986         }\r
987         { key sortify }\r
988       if$\r
989     }\r
990     { author sort.format.names }\r
991   if$\r
992 }\r
993 \r
994 FUNCTION {author.editor.sort}\r
995 { author empty$\r
996     { editor empty$\r
997         { key empty$\r
998             { "to sort, need author, editor, or key in " cite$ * warning$\r
999               ""\r
1000             }\r
1001             { key sortify }\r
1002           if$\r
1003         }\r
1004         { editor sort.format.names }\r
1005       if$\r
1006     }\r
1007     { author sort.format.names }\r
1008   if$\r
1009 }\r
1010 \r
1011 FUNCTION {author.organization.sort}\r
1012 { author empty$\r
1013     { organization empty$\r
1014         { key empty$\r
1015             { "to sort, need author, organization, or key in " cite$ * warning$\r
1016               ""\r
1017             }\r
1018             { key sortify }\r
1019           if$\r
1020         }\r
1021         { "The " #4 organization chop.word sortify }\r
1022       if$\r
1023     }\r
1024     { author sort.format.names }\r
1025   if$\r
1026 }\r
1027 \r
1028 FUNCTION {editor.organization.sort}\r
1029 { editor empty$\r
1030     { organization empty$\r
1031         { key empty$\r
1032             { "to sort, need editor, organization, or key in " cite$ * warning$\r
1033               ""\r
1034             }\r
1035             { key sortify }\r
1036           if$\r
1037         }\r
1038         { "The " #4 organization chop.word sortify }\r
1039       if$\r
1040     }\r
1041     { editor sort.format.names }\r
1042   if$\r
1043 }\r
1044 \r
1045 FUNCTION {presort}\r
1046 { type$ "book" =\r
1047   type$ "inbook" =\r
1048   or\r
1049     'author.editor.sort\r
1050     { type$ "proceedings" =\r
1051         'editor.organization.sort\r
1052         { type$ "manual" =\r
1053             'author.organization.sort\r
1054             'author.sort\r
1055           if$\r
1056         }\r
1057       if$\r
1058     }\r
1059   if$\r
1060   "    "\r
1061   *\r
1062   year field.or.null sortify\r
1063   *\r
1064   "    "\r
1065   *\r
1066   title field.or.null\r
1067   sort.format.title\r
1068   *\r
1069   #1 entry.max$ substring$\r
1070   'sort.key$ :=\r
1071 }\r
1072 \r
1073 ITERATE {presort}\r
1074 \r
1075 SORT\r
1076 \r
1077 STRINGS { longest.label }\r
1078 \r
1079 INTEGERS { number.label longest.label.width }\r
1080 \r
1081 FUNCTION {initialize.longest.label}\r
1082 { "" 'longest.label :=\r
1083   #1 'number.label :=\r
1084   #0 'longest.label.width :=\r
1085 }\r
1086 \r
1087 FUNCTION {longest.label.pass}\r
1088 { number.label int.to.str$ 'label :=\r
1089   number.label #1 + 'number.label :=\r
1090   label width$ longest.label.width >\r
1091     { label 'longest.label :=\r
1092       label width$ 'longest.label.width :=\r
1093     }\r
1094     'skip$\r
1095   if$\r
1096 }\r
1097 \r
1098 EXECUTE {initialize.longest.label}\r
1099 \r
1100 ITERATE {longest.label.pass}\r
1101 \r
1102 FUNCTION {begin.bib}\r
1103 { preamble$ empty$\r
1104     'skip$\r
1105     { preamble$ write$ newline$ }\r
1106   if$\r
1107   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$\r
1108 }\r
1109 \r
1110 EXECUTE {begin.bib}\r
1111 \r
1112 EXECUTE {init.state.consts}\r
1113 \r
1114 ITERATE {call.type$}\r
1115 \r
1116 FUNCTION {end.bib}\r
1117 { newline$\r
1118   "\end{thebibliography}" write$ newline$\r
1119 }\r
1120 \r
1121 EXECUTE {end.bib}\r