Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

First lot of source files and paper

  • Loading branch information...
commit dc0c198f0ca1aad56093f50409971c10d0fe304b 1 parent 6aac1a9
Edwin Brady authored
View
32 LICENSE
@@ -0,0 +1,32 @@
+Copyright (c) 2006-2010 Edwin Brady
+ School of Computer Science, University of St Andrews
+All rights reserved.
+
+This code is derived from software written by Edwin Brady
+(eb@cs.st-andrews.ac.uk).
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. None of the names of the copyright holders may be used to endorse
+ or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*** End of disclaimer. ***
View
41 impl-paper/Makefile
@@ -0,0 +1,41 @@
+PAPER = impldtp
+
+all: ${PAPER}.pdf
+
+TEXFILES = ${PAPER}.tex intro.tex conclusions.tex overview.tex
+
+DIAGS =
+
+SOURCES = ${TEXFILES} ${DIAGS} macros.ltx literature.bib
+
+DITAA = java -jar ~/Downloads/ditaa.jar
+
+${PAPER}.pdf: ${SOURCES}
+# dvipdf ${PAPER}.dvi
+ pdflatex ${PAPER}
+ -bibtex ${PAPER}
+ -pdflatex ${PAPER}
+ -pdflatex ${PAPER}
+
+${PAPER}.ps: ${PAPER}.dvi
+ dvips -o ${PAPER}.ps ${PAPER}
+
+${PAPER}.dvi: $(SOURCES)
+ -latex ${PAPER}
+ -bibtex ${PAPER}
+ -latex ${PAPER}
+ -latex ${PAPER}
+
+progress: .PHONY
+ wc -w ${TEXFILES}
+
+%.png : %.diag
+ $(DITAA) -o -E $<
+
+todropbox: .PHONY
+ cp ${SOURCES} ~/Dropbox/TeX/ImplDTP/
+
+fromdropbox: .PHONY
+ cp ~/Dropbox/TeX/ImplDTP/* .
+
+.PHONY:
View
1,770 impl-paper/acmtrans.bst
@@ -0,0 +1,1770 @@
+% "ACM Transactions" BibTeX style, acmtrans.bst
+% for BibTeX version 0.99c, LaTeX version 3.141
+% Revised 28-MARCH-1996
+% Revised 30-JUNE-1995
+% Revised 15-JAN-1996
+% $Header: acmtrans.bst,v 1.2 96/01/17 09:05:38 boyland Exp $
+%
+% Hacked by John T. Boyland at University of California, Berkeley
+% (with assistance by John R. Hauser)
+% Hacked by Andrew W. Appel and Rebecca L. Davies at Princeton University,
+% based on a "chicago.bst" by Glenn Paulley at U. Waterloo,
+% which was based on "newapa.bst" found at ymir.claremont.edu.
+%
+% Citation format: [author-last-name year]
+% [author-last-name and author-last-name year]
+% [author-last-name, author-last-name, and author-last-name year]
+% [author-last-name et al. year]
+% [author-last-name]
+% author-last-name [year]
+% [author-last-name and author-last-name]
+% [author-last-name et al.]
+% [year] or [year,year]
+% year or year,year
+%
+% Reference list ordering: alphabetical by author or whatever passes
+% for author in the absence of one.
+%
+% This BibTeX style has support for abbreviated author lists and for
+% year-only citations. This is done by having the citations
+% actually look like
+%
+% \citeauthoryear{full-author-info}{abbrev-author-info}{year}
+%
+% The LaTeX style has to have the following (or similar)
+%
+% \let\@internalcite\cite
+% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
+% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
+% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
+%
+% These TeX macro definitions are found in acmtrans.sty. Additional
+% commands to manipulate different components of a citation can be defined
+% so that, for example, you can list author's names without parentheses
+% if using a citation as a noun or object in a sentence.
+%
+% Features of acmtrans.bst:
+% ========================
+%
+% - all authors appear last name first.
+% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
+% - publishers are identified as publisher, address
+% - conferences papers (inproceedings) may give city of conference,
+% date of conference, and journal that the proceedings appear in.
+% - months abbreviated to max four letters (eg. Mar.)
+% - volume of a series indicated after the title of the series
+% - editors appear after edited title and are identified by a trailing "Eds."
+% not in parentheses. Editor names are not given in small caps.
+% (unless there is no author line)
+% - names terminated with a period even if there is no first name.
+% - editions are indicated trailing after the work, not in parentheses.
+% - "et al." citations have a protected period to avoid bad spacing (jrh)
+% - "address" required when publisher given
+% - series (roman) and volume are in a sentence separate from (book-)title
+%
+%
+% Features of chicago.bst:
+% =======================
+%
+% - full names used in citations, but abbreviated citations are available
+% (see above)
+% - if an entry has a "month", then the month and year are also printed
+% as part of that bibitem.
+% - all conjunctions use "and" instead of "\&"
+% - major modification from Chicago Manual of Style (13th ed.) is that
+% only the first author in a reference appears last name first-
+% additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+% article entries.
+% - book, inbook, and manual use "location: publisher" (or organization)
+% for address and publisher. All other types list publishers separately.
+% - "pp." are used to identify page numbers for all entry types except
+% articles.
+% - organization is used as a citation label if neither author nor editor
+% is present (for manuals).
+% - "et al." is used for long author and editor lists, or when "others"
+% is used.
+%
+% Modifications and bug fixes from newapa.bst:
+% ===========================================
+%
+% - added month, year to bib entries if month is present
+% - fixed bug with In proceedings, added necessary comma after title
+% - all conjunctions changed to "and" from "\&"
+% - fixed bug with author labels in my.full.label: "et al." now is
+% generated when "others" is an author name
+% - major modification from Chicago Manual of Style (13th ed.) is that
+% only the first author in a reference appears last name first-
+% additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+% article entries. Unnecessary (IMHO) "()" around page numbers
+% were removed, and page numbers now don't end with a period.
+% - created chicago.sty for use with this bibstyle (required).
+% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
+% number, and /or pages. Renamed to format.jour.vol.
+% - fixed bug in formatting booktitles: additional period an error if
+% book has a volume.
+% - fixed bug: editors usually given redundant period before next clause
+% (format.editors.dot) removed.
+% - added label support for organizations, if both author and editor
+% are missing (from alpha.bst). If organization is too long, then
+% the key field is used for abbreviated citations.
+% - In proceedings or books of several volumes, no comma was written
+% between the "Volume x" and the page numbers (this was intentional
+% in newapa.bst). Fixed.
+% - Some journals may not have volumes/numbers, only month/year (eg.
+% IEEE Computer). Fixed bug in article style that assumed volume/number
+% was always present.
+%
+% Original documentation for newapa.sty:
+% =====================================
+%
+% This version was made by modifying the master file made by
+% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX
+% style of Peter F. Patel-Schneider.
+%
+% 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 'newapa.bst'.
+% There are undoubtably bugs in this style. If you make bug fixes,
+% improvements, etc. please let me know. My e-mail address is:
+% spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com
+%
+% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
+% with lots of tweaking to make it look like APA style, along with tips
+% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ city % jtb: added
+ date % jtb: added
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label.year extra.label sort.year sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t u }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+% Use a colon to separate output. Used only for address/publisher
+% combination in book/inbook types, address/institution for manuals,
+% and organization:publisher for proceedings (inproceedings).
+%
+FUNCTION {output.nonnull.colon}
+{ 's :=
+ output.state mid.sentence =
+ { ": " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.colon}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull.colon
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check.colon}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull.colon
+ if$
+}
+
+FUNCTION {output.year.check}
+{ year empty$
+ { "empty year in " cite$ * warning$ }
+ { write$
+ " " year * extra.label *
+ mid.sentence 'output.state :=
+ }
+ if$
+}
+
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+%
+% Emphasize the top string on the stack.
+%
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+%
+% Emphasize the top string on the stack, but add a trailing space.
+%
+FUNCTION {emphasize.space}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "\/}" * }
+ if$
+}
+
+%
+% Emphasize the top string on stack, add a trailing comma and space.
+%
+FUNCTION {emphasize.comma}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * ",\/}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+%
+% Format bibliographical entries with the first author last name first,
+% and subsequent authors with initials followed by last name.
+% All names are formatted in this routine.
+%
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { nameptr #1 =
+ {"{\sc " s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * "}" * 't := }
+ {"{\sc " s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * "}" * 't := }
+ if$
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "{\sc others}" =
+ { " {\sc et~al\mbox{.}}" * } % jrh: avoid spacing problems
+ { " {\sc and} " * t * } % from Chicago Manual of Style
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+}
+
+FUNCTION {my.full.label}
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { " and " * t * } % from Chicago Manual of Style
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+
+}
+
+FUNCTION {format.names.fml}
+%
+% Format names in "familiar" format, with first initial followed by
+% last name. Like format.names, ALL names are formatted.
+% jtb: The names are NOT put in small caps
+%
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { "{" s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
+
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "{others}" =
+ { " {et~al\mbox{.}}" * }
+ { " {and} " * t * }
+% { " {\&} " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names add.period$} % jtb: add period if none before
+ if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+%
+% Format editor names for use in the "in" types: inbook, incollection,
+% inproceedings: first initial, then last names. When editors are the
+% LABEL for an entry, then format.editor is used which lists editors
+% by last name first.
+%
+FUNCTION {format.editors.fml}
+{ editor empty$
+ { "" }
+ { editor format.names.fml
+ editor num.names$ #1 >
+ { ", Eds." * } % jtb: removed parentheses
+ { ", Ed." * } % jtb: removed parentheses
+ if$
+ }
+ if$
+}
+
+%
+% Format editor names for use in labels, last names first.
+%
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", Eds." * } % jtb: removed parentheses
+ { ", Ed." * } % jtb: removed parentheses
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+% Note that the APA style requres case changes
+% in article titles. The following does not
+% change cases. If you perfer it, uncomment the
+% following and comment out the above.
+
+%FUNCTION {format.title}
+%{ title empty$
+% { "" }
+% { 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$
+}
+
+FUNCTION {format.btitle}
+{ edition empty$
+ { title emphasize }
+ { title empty$
+ { title emphasize } % jtb: what is this supposed to do ?!?
+ { "{\em " title * "\/}, " * edition * " ed." * } % jtb: no parens for ed.
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.emphasize.booktitle}
+{ edition empty$
+ { booktitle emphasize }
+ { booktitle empty$
+ { booktitle emphasize } % jtb: what is this supposed to do ?!?
+ { "{\em " booktitle * "\/}, " * edition * " ed." * } % jtb: no ()s for ed.
+ if$
+ }
+ if$
+ }
+
+% jtb: if the preceding string (the title of the conference) is non-empty,
+% jtb: append the location, otherwise leave empty (so as to trigger the
+% jtb: error message in output.check
+FUNCTION {format.city}
+{ duplicate$ empty$
+ { }
+ { city empty$
+ { date empty$
+ { }
+ { " (" * date * ")" * }
+ if$
+ }
+ { date empty$
+ { " (" * city * ")" * }
+ { " (" * city * ", " * date * ")" * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+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$
+}
+
+% jtb: If there is a series, this is added and the volume trails after it.
+% jtb: Otherwise, "Vol" is Capitalized.
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { series empty$
+ { "Vol." volume tie.or.space.connect}
+ { series ", " * "vol." volume tie.or.space.connect *}
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "Number" } % gnp - changed to mixed case always
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { pages n.dashify } % gnp - removed () % jtb: removed pp.
+ { pages }
+ if$
+ }
+ if$
+}
+
+% By Young (and Spencer)
+% GNP - fixed bugs with missing volume, number, and/or pages
+%
+% Format journal, volume, number, pages for article types.
+%
+FUNCTION {format.jour.vol}
+{ journal empty$
+ { "no journal in " cite$ * warning$
+ "" }
+ { journal emphasize.space }
+ if$
+ number empty$
+ { volume empty$
+ { "no number and no volume in " cite$ * warning$
+ "" * }
+ { "~{\em " * Volume * "}" * }
+ if$
+ }
+ { volume empty$
+ {"no volume for " cite$ * warning$
+ "~" * number * }
+ { "~" *
+ volume emphasize.comma
+ "~" * number * * }
+ if$
+ month empty$
+ {}
+ {" (" * month * ")" *}
+ if$
+ }
+ if$
+ pages empty$
+ {"page numbers missing in " cite$ * warning$
+ "" * } % gnp - place a null string on the stack for output
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ", " * pages n.dashify * } % gnp - removed pp. for articles
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "Chapter" } % gnp - changed to mixed case
+ { type "t" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ {"page numbers missing in " cite$ * warning$} % gnp - added check
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+% jtb: format for collections or proceedings not appearing in a journal
+FUNCTION {format.in.emphasize.booktitle}
+{ booktitle empty$
+ { "" }
+ { "In " format.emphasize.booktitle * }
+ if$
+}
+
+% jtb: format for proceedings appearing in a journal
+FUNCTION {format.in.booktitle}
+{ booktitle empty$
+ { "" }
+ { "In " booktitle * }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " format.emphasize.booktitle * }
+ % jtb: swapped editor location
+ { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+% {pop$
+ {{ "" }
+ type "t" change.case$}
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Tech. Rep." }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ "See"
+ "\citeN{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
+ " of " *
+ }
+ 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$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \citeN{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ "See"
+ " \citeN{" * crossref * "}" *
+}
+
+% format.lab.names:
+%
+% determines "short" names for the abbreviated author information.
+% "Long" labels are created in calc.label, using the routine my.full.label
+% to format author and editor fields.
+%
+% There are 4 cases for labels. (n=3 in the example)
+% a) one author Foo
+% b) one to n Foo, Bar and Baz
+% c) use of "and others" Foo, Bar et al.
+% d) more than n Foo et al.
+%
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #2 > % change number to number of others allowed before
+ % forcing "et al".
+ { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
+ {
+ numnames #1 - 'namesleft :=
+ #2 'nameptr :=
+ s #1 "{vv~}{ll}" format.name$
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { " and " * s nameptr "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ { ", " * s nameptr "{vv~}{ll}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { "no key, author in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { "no key, editor in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if author is null.
+%
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "no key, author or organization in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { organization }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if editor is null.
+%
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "no key, editor or organization in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { organization }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "no key, author, or editor in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+%
+% Changed - GNP. See also author.organization.sort, editor.organization.sort
+% Form label for BibTeX entry. The classification of which fields are used
+% for which type of entry (book, inbook, etc.) are taken from alpha.bst.
+% The change here from newapa is to also include organization as a
+% citation label if author or editor is missing.
+%
+{ 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$
+
+ author empty$ % generate the full label citation information.
+ { editor empty$
+ { organization empty$
+ { "no author, editor, or organization in " cite$ * warning$
+ "??" }
+ { organization }
+ if$
+ }
+ { editor my.full.label }
+ if$
+ }
+ { author my.full.label }
+ if$
+
+% leave label on the stack, to be popped when required.
+
+ "}{" * swap$ * "}{" *
+% year field.or.null purify$ #-1 #4 substring$ *
+%
+% save the year for sort processing afterwards (adding a, b, c, etc.)
+%
+ year field.or.null purify$ #-1 #4 substring$
+ 'label.year :=
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+
+ "\bibitem[\protect\citeauthoryear{" write$
+ calc.label write$
+ sort.year write$
+ "}]{" write$
+
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ crossref missing$
+ { format.jour.vol output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors
+ "author and editor" output.check }
+ { format.authors
+ output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ crossref missing$
+ { new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address "address" output.check % jtb: require address
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ howpublished output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors
+ "author and editor" output.check
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ crossref missing$
+ { new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address "address" output.check % jtb: require address
+ format.chapter.pages
+ "chapter and pages" output.check % jtb: moved from before publisher
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle
+ "booktitle" output.check
+ new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address "address" output.check % jtb: require address
+ format.chapter.pages output % gnp - was special.output.nonnull
+% left out comma before page numbers
+ % jtb: moved from before publisher
+ }
+ { format.incoll.inproc.crossref
+ output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ crossref missing$
+ { journal missing$ % jtb: proceedings appearing in journals
+ { format.in.emphasize.booktitle format.city "booktitle" output.check
+ format.editors.fml output
+ new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ organization output
+ publisher "publisher" output.check % jtb: require publisher (?)
+ address "address" output.check % jtb: require address
+ format.pages output % jtb: moved from before publisher
+ }
+ % jtb: new:
+ { format.in.booktitle format.city "booktitle" output.check
+ format.editors.fml output
+ new.sentence
+ format.jour.vol output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ { organization "organization" output.check
+ organization format.key output } % if all else fails, use key
+ { format.editors "author and editor" output.check }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ organization address new.block.checkb
+ % jtb: back to normal style: organization, address
+ organization "organization" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ "M.S.\ thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output % added
+ output.year.check % added
+ title howpublished new.block.checkb
+ format.title output
+ new.block
+ howpublished output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.thesis.type "Ph.D. thesis" output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output
+ organization format.key output } % gnp - changed from author format.key
+ { format.editors output.nonnull }
+ if$
+% author format.key output % gnp - removed (should be either
+% editor or organization
+ output.year.check % added (newapa)
+ new.block
+ format.btitle format.city "title" output.check % jtb: added city
+ new.sentence
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ organization output
+ % jtb: normal order: publisher, address
+ publisher output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output % jtb: moved month ...
+ institution "institution" output.check
+ address output
+ new.sentence
+ month output % jtb: ... to here (no parens)
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."} % jtb: corrected: was "March"
+
+MACRO {apr} {"Apr."} % jtb: corrected: was "April"
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acmlett} {"ACM Lett. Program. Lang. Syst."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {ai} {"Artificial Intelligence"}
+
+MACRO {al} {"Ada Lett."}
+
+MACRO {acr} {"Adv. Comput. Res."}
+
+MACRO {bit} {"Bit"}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {cj} {"Comput. J."}
+
+MACRO {cn} {"Comput. Netw."}
+
+MACRO {cl} {"Comput. Lang."}
+
+MACRO {ibmjrd} {"IBM J. Res. and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ict} {"Inf. Contr."}
+
+MACRO {ieebcs} {"IEE/BCS Softw. Eng. J."}
+
+MACRO {ieees} {"IEEE Softw."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ieeetpds} {"IEEE Trans. Parall. Distrib. Syst."}
+
+MACRO {ieeetit} {"IEEE Trans. Inf. Theory"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {icp} {"Inf. Comput."}
+
+MACRO {ist} {"Inf. Softw. Tech."}
+
+MACRO {ijsa} {"Int. J. Supercomput. Appl."}
+
+MACRO {ijpp} {"Int. J. Parallel Program."}
+
+MACRO {jlp} {"J. Logic Program."}
+
+MACRO {jfp} {"J. Funct. Program."}
+
+MACRO {jcss} {"J. Comput. Syst. Sci."}
+
+MACRO {jsmrp} {"J. Softw. Maint. Res. Pract."}
+
+MACRO {jss} {"J. Syst. Softw."}
+
+MACRO {jlc} {"J. Logic and Comput."}
+
+MACRO {jlsc} {"J. Lisp Symb. Comput."}
+
+MACRO {lpls} {"Lett. Program. Lang. Syst."}
+
+MACRO {mor} {"Math. Oper. Res."}
+
+MACRO {mscs} {"Math. Struct. Comput. Sci."}
+
+MACRO {mst} {"Math. Syst. Theor."} % jtb: was Math. Syst. Theory
+ % jtb: (if you ask me, I prefer the old way)
+MACRO {ngc} {"New Gen. Comput."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {spe} {"Softw. Pract. Exper."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphics"}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Program. Lang. Syst."}
+
+MACRO {tocl} {"ACM Trans. On Comp. Logic"}
+
+MACRO {tcs} {"Theor. Comput. Sci."} % jtb: was Theor. Comp. Sci.
+
+MACRO {tr} {"Tech. Rep."}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { " et~al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ "" }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { "missing author in " cite$ * warning$
+ 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}
+%
+% added - GNP. Stack author or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { organization sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+%
+% added - GNP. Stack editor or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { organization sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+%
+% Presort creates the bibentry's label via a call to calc.label, and then
+% sorts the entries based on entry type. Chicago.bst adds support for
+% including organizations as the sort key; the following is stolen from
+% alpha.bst.
+%
+{ calc.label sortify % recalculate bibitem label
+ year field.or.null purify$ #-1 #4 substring$ * % add year
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ #1 entry.max$ substring$ % added for newapa
+ 'sort.label := % added for newapa
+ sort.label % added for newapa
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT % by label, year, author/editor, title
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+%
+% Pass through all entries, comparing current entry to last one.
+% Need to concatenate year to the stack (done by calc.label) to determine
+% if two entries are the same (see presort)
+%
+{ last.label
+ calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+ #1 entry.max$ substring$ = % are they equal?
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+ #1 entry.max$ substring$ 'last.label := % assign to last.label
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label.year extra.label * 'sort.year :=
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT % by sort.label, year, title --- giving final bib. order.
+
+FUNCTION {begin.bib}
+
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{}" write$ newline$
+}
+
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
View
1,460 impl-paper/acmtrans2m.cls
@@ -0,0 +1,1460 @@
+% latex2e by nr 7/3/96
+% acmtrans.cls revised 4/19/96
+% revised again 31-JAN-1996 (see end of file)
+% revised 5-14-1997 :
+% Don't use sans-serif font in categories and descriptors
+% include latexsym by default
+% Define longpage and shortpage
+% Adjusted from the acmtrans2e.cls file to the needs of ACM TOCL by
+% Marco Aiello on June 14, 2000.
+% Further changes made by Frederic Goualard on Sep. 27, 2000
+% to take care of the indentation problem in the bibliography
+% arising without the use of the hyperref package.
+% Modularization to adapt to the needs of JACM, TOCL,
+% TODAES, TODS, TOGS, TOMS, AND TOPLAS, by Marco Aiello on
+% June 2001.
+% Here is the basic framework that is needed to convert your paper
+% into ACM Transactions format and bibliographic format. For a tutorial
+% introduction, see ``instructions.tex'' (compile it with LaTeX) that
+% accompanies the distribution of this style file.
+%
+% -> \documentclass{acmtrans2m}
+% -> \markboth{}{}
+% takes 2 arguments and it is for the left- and right-page headers:
+% the first set of braces is assigned for author's name(s)
+% and
+% the second set of braces is assigned for the title
+% (if the title is too long, contraction may be needed
+% -> \title{}
+% if the title is too long, it can be separated by \\
+% -> \author{}
+% author1 \\ author1 affiliation
+% \and
+% author2 \\ author2 affiliation
+% -> \begin{abstract}
+% -> \end{abstract}
+%
+% -> \category{}{}{}
+% takes 3 arguments for the Computing Reviews Classification Scheme.
+% ex: \category{D.3.3}{Programming Languages}{Language Constructs and
+% Features}[data types and structures]
+% the last argument, in square brackets, is optional.
+% -> \terms{} (ex: \terms{Human Factors, Languages})
+% -> \keywords{} (in alphabetical order \keywords{document processing, sequences,
+% string searching, subsequences, substrings})
+% -> \begin{document}
+%
+% -> \begin{bottomstuff}
+% similar to \thanks
+% for authors' addresses; research/grant statements
+% -> \end{bottomstuff}
+% -> \maketitle
+%
+% Now you can start the body of the paper; your figures, tables and
+% use all the latex constructs.
+%
+% -> \begin{acks}
+% acknowledgements
+% -> \end{acks}
+%
+% -> \bibliographystyle{acmtrans}
+% -> \bibliography{mybib_file}
+%
+% ****
+% If your paper has been accepted with a separate (electronic only)
+% appendix, you need to add the following control sequence:
+%
+%
+% body of appendix
+%!!!!!! \appendixhead has be cut into two: \appendixhead and \elecappendix
+%!!!!!! See end of file. (jtb)
+%
+% -> \end{document}
+%
+% Do not worry about the other definitions in this style file
+% Remember to compile: latex, bibtex, latex latex
+%
+% Bibliographic cite forms needed:
+%
+% \cite{key}
+% which produces citations with author list and year.
+% eg. [Brown 1978; Jarke, et al. 1985]
+% \citeA{key}
+% which produces citations with only the author list.
+% eg. [Brown; Jarke, et al.]
+% \citeN{key}
+% which produces citations with the author list and year, but
+% can be used as nouns in a sentence; no brackets appear around
+% the author names, but only around the year.
+% eg. Shneiderman [1978] states that......
+% \citeN should only be used for a single citation.
+% \citeNN{refkey1,refkey2} for author [ref1year; ref2year]
+% \citeyear{key}
+% which produces the year information only, within brackets.
+%
+% Abbreviated author lists use the ``et al.'' construct.
+%
+% The above are examples of required ACM bibliographic cite formats needed.
+% *******************
+% Here is the complete list of cite forms from the chicago bibliographic style
+%
+% \cite{key}
+% which produces citations with abbreviated author list and year.
+% \citeNP{key}
+% which produces citations with abbreviated author list and year.
+% \citeA{key}
+% which produces only the abbreviated author list.
+% \citeANP{key}
+% which produces only the abbreviated author list.
+% \citeN{key}
+% which produces the abbreviated author list and year, with only the
+% year in parentheses. Use with only one citation.
+% \citeyear{key}
+% which produces the year information only, within parentheses.
+% \citeyearNP{key}
+% which produces the year information only.
+%
+% Abbreviated author lists use the ``et al.'' construct.
+%
+% `NP' means `no parentheses'
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{acmtrans2m} [1996/07/03 ACM Transactions class based on <23 April 96>]
+\RequirePackage{latexsym}
+%aiellom{
+\RequirePackage{url}
+
+% Do not change the following! Use the appropriate acmtocl, acmtods, ... option
+\def\@acmVolume{V} %the volume
+\def\@acmNumber{N} %the number
+\def\@acmYear{YY} %the last two digits of the year,
+\def\@acmMonth{Month} %the month
+\def\@journalName{ACM Journal Name} %the name of the ACM journal
+\def\@journalNameShort{jn} %the acronym of the ACM journal
+\def\@permissionCodeOne{0000-0000} %the permission code of the ACM journal
+\def\@permissionCodeTwo{0000} %the permission code of the ACM journal part 2
+\def\@pageCode{\acmPageCode} %the first page of the article in 4 digits
+
+
+\newif\if@acmjacm
+\newif\if@acmtocl
+\newif\if@acmtodaes
+\newif\if@acmtods
+\newif\if@acmtogs
+\newif\if@acmtoms
+\newif\if@acmtoplas
+
+\DeclareOption{acmnow}{
+ \typeout{}
+ \typeout{Directly generating the Month and Year for footers from the clock.}
+ \def\@acmYear{\yearTwoDigits}
+ \def\@acmMonth{\monthWord}
+}
+
+\DeclareOption{acmjacm}{
+ \typeout{}
+ \typeout{Using ACM, JACM's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ %\global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmjacmtrue
+ \def\@journalName{Journal of the ACM}
+ \def\@journalNameShort{jacm}
+ \def\@permissionCodeOne{0004-5411}
+ \def\@permissionCodeTwo{0100}
+}
+
+\DeclareOption{acmtocl}{
+ \typeout{}
+ \typeout{Using ACM, TOCL's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtocltrue
+ \def\@journalName{ACM Transactions on Computational Logic}
+ \def\@journalNameShort{tocl}
+ \def\@permissionCodeOne{1529-3785}
+ \def\@permissionCodeTwo{0700}
+}
+
+\DeclareOption{acmtodaes}{
+ \typeout{}
+ \typeout{Using ACM, TODAES option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ %\global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtodaestrue
+ \def\@journalName{ACM Transactions on Design Automation of Electronic Systems}
+ \def\@journalNameShort{todaes}
+ \def\@permissionCodeOne{1084-4309}
+ \def\@permissionCodeTwo{0400}
+}
+
+\DeclareOption{acmtods}{
+ \typeout{}
+ \typeout{Using ACM, TODS's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ %\global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtodstrue
+ \def\@journalName{ACM Transactions on Database Systems}
+ \def\@journalNameShort{tods}
+ \def\@permissionCodeOne{0362-5915}
+ \def\@permissionCodeTwo{0300}
+}
+
+\DeclareOption{acmtogs}{
+ \typeout{}
+ \typeout{Using ACM, TOGS's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ %\global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtogstrue
+ \def\@journalName{ACM Transactions on Graphics}
+ \def\@journalNameShort{togs}
+ \def\@permissionCodeOne{0730-0301}
+ \def\@permissionCodeTwo{0100}
+}
+
+\DeclareOption{acmtoms}{
+ \typeout{}
+ \typeout{Using ACM, TOMS's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ %\global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtomstrue
+ \def\@journalName{ACM Transactions on Mathematical Software}
+ \def\@journalNameShort{toms}
+ \def\@permissionCodeOne{0098-3500}
+ \def\@permissionCodeTwo{1200}
+}
+
+\DeclareOption{acmtoplas}{
+ \typeout{}
+ \typeout{Using ACM, TOPLAS option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ %\global\@acmtoplasfalse
+ \global\@acmtoplastrue
+ \def\@journalName{ACM Transactions on Programming Languages and Systems}
+ \def\@journalNameShort{toplas}
+ \def\@permissionCodeOne{0164-0925}
+ \def\@permissionCodeTwo{0500}
+}
+%}aiellom
+
+
+
+\if@compatibility\else
+\DeclareOption{a4paper}
+ {\setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}%
+ \def\special@paper{210mm,297mm}}
+\DeclareOption{a5paper}
+ {\setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}%
+ \def\special@paper{148mm,210mm}}
+\DeclareOption{b5paper}
+ {\setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}%
+ \setlength\voffset {-15mm}%
+ \setlength\hoffset {-20mm}%
+ \def\special@paper{176mm,250mm}}
+\DeclareOption{letterpaper}
+ {\setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}%
+ \def\special@paper{8.5in,11in}}
+\DeclareOption{legalpaper}
+ {\setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}%
+ \def\special@paper{8.5in,14in}}
+\DeclareOption{executivepaper}
+ {\setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}%
+ \def\special@paper{7.25in,10.5in}}
+\DeclareOption{landscape}
+ {\setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}}
+\fi
+
+\DeclareOption{checkMargin}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
+
+\DeclareOption{10pt}{\def\@ptsize{0}} %needed for amssymbols.sty
+\DeclareOption{11pt}{\ClassError{acmtrans}{11pt style not supported}
+ {ACM transactions documents can be set in 10pt only}}
+\DeclareOption{12pt}{\ClassError{acmtrans}{11pt style not supported}
+ {ACM transactions documents can be set in 10pt only}}
+\newif\if@hyperref
+\DeclareOption{hyperref}{%
+ \def\pages{\pageref{@firstpg}--\pageref{@lastpg}}%
+ \def\mypage{\thepage}%
+ \def\@getpagenum#1#2#3#4{#2}%
+ \def\pdfinfo#1#2{\pdfmark{pdfmark=/DOCINFO,Title=#1,Author=#2}}
+ \global\@hyperreftrue
+ }
+\DeclareOption{nohyperref}{
+ \def\pages{\pageref{@firstpg}--\pageref{@lastpg}}%
+ \def\@getpagenum#1#2{#2}%
+ \def\mypage{\thepage}%
+ \def\pdfinfo#1#2{}%
+ \def\pdfbookmark#1#2{}%
+ \global\@hyperreffalse
+ }
+\DeclareOption{notfinal}{
+ \def\pages{BD}%
+ \def\mypage{TBD}%
+ \def\@getpagenum#1#2{#2}%
+ \def\pdfinfo#1#2{}%
+ \def\pdfbookmark#1#2{}%
+ }
+\DeclareOption{omitline}{\def\@abstractbottom{\relax}}
+\DeclareOption{dontomitline}{\def\@abstractbottom{\if@acmjacm\else\hbox{\vrule height .2pt width 30pc}\fi}}
+\ExecuteOptions{twoside,notfinal,10pt,dontomitline,nohyperref,letterpaper} % defaults
+
+
+
+\ProcessOptions
+
+%{aiellom to automatize the issue specific data
+\def\acmVolume#1{\def\@acmVolume{#1}}
+\def\acmNumber#1{\def\@acmNumber{#1}}
+\def\acmYear#1{\def\@acmYear{#1}}
+\def\acmMonth#1{\def\@acmMonth{#1}}
+
+
+% Command to get the year from the system and display the last two digits
+\newcommand{\ignoretwo}[2]{}
+\newcommand{\yearTwoDigits}{\expandafter\ignoretwo\the\year}
+%To transform the month number in its name in English
+\newcommand{\monthWord}{\ifnum\the\month=1 January\fi\ifnum\the\month=2 February\fi\ifnum\the\month=3 March\fi\ifnum\the\month=4 April\fi\ifnum\the\month=5 May\fi\ifnum\the\month=6 June\fi\ifnum\the\month=7 July\fi\ifnum\the\month=8 August\fi\ifnum\the\month=9 September\fi\ifnum\the\month=10 October\fi\ifnum\the\month=11 November\fi\ifnum\the\month=12 December\fi}
+% overright the \@setref definition, so that if a reference is undefined
+% then it returns a number 0 and then the usual double boldface
+% question marks ??
+% this is necessary for the \acmPageCode command, otherwise it gives an error
+% everytime the aux file is not there
+\def\@setref#1#2#3{%
+ \ifx#1\relax
+ \number 0\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#3' on page \thepage \space undefined}%
+ \else
+ \expandafter#2#1\null
+ \fi}
+%make the code a four digits string based on the first page number
+\newcommand{\acmPageCode}{\bgroup
+ \newcount\c@tempo
+ \setcounter{tempo}{\number\pageref{@firstpg}}\ifnum \c@tempo<1000 0\fi\ifnum \c@tempo<100 0\fi\ifnum \c@tempo<10 0\fi\ifnum \c@tempo<1 0\fi\pageref{@firstpg}
+ \egroup
+}
+%}aiellom
+
+
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\renewcommand\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 6pt plus2pt minus1pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6pt plus0pt minus 3pt
+ \belowdisplayshortskip 6pt plus0pt minus3pt\let\@listi\@listI}
+
+\newcommand\small{%
+ \@setfontsize\small\@ixpt{11pt}%
+ \abovedisplayskip 5pt plus 2pt minus 1pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 5pt plus0pt minus2pt\belowdisplayshortskip 5pt plus0pt
+ minus 2pt
+ \def\@listi{\leftmargin\leftmargini \topsep 5pt plus 2pt minus 1pt\parsep 0pt
+ plus .7pt
+ \itemsep 1.6pt plus .8pt}}
+\newcommand\footnotesize{%
+% \@setfontsize\footnotesize\@viiipt{10pt}
+ \@setsize\footnotesize{10pt}\viiipt\@viiipt
+ \abovedisplayskip 4pt plus 1pt minus 0pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 0pt minus 1pt\belowdisplayshortskip 4pt plus
+ 0pt minus 1pt
+ \def\@listi{\leftmargin\leftmargini \topsep 4pt plus 1pt minus
+ 0pt\parsep 0pt plus .5pt
+ \itemsep 1pt plus .7pt}}
+
+\newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}
+\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt}
+\newcommand\large{\@setfontsize\large\@xiipt{14}}
+\newcommand\Large{\@setfontsize\Large\@xivpt{18}}
+\newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20}}
+\newcommand\huge{\@setfontsize\huge\@xxpt{25}}
+\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}}
+
+\normalsize
+
+ \oddsidemargin .75in \evensidemargin .75in \marginparwidth .5in
+ \marginparsep .125in
+ \topmargin .25in \headheight 12pt\headsep 16pt
+ %% not in latex2e \footheight 10pt
+ \footskip 15pt
+
+\textheight 47pc \textwidth 30pc \columnsep 10pt \columnseprule 0pt
+% next five lines added by K.R. Apt, March 20, 01
+\advance\textheight-2.6pt
+\newdimen\normaltextheight
+\setlength\normaltextheight{\textheight}
+%\renewcommand\rmdefault{pnc}
+%\renewcommand\sfdefault{phv}
+
+
+\footnotesep 7pt
+\skip\footins 15pt plus 4pt minus 3pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep \floatsep
+\intextsep 1pc plus 1pc
+%%% not in 2e %% \@maxsep 1pc
+%%% not in 2e %% \@dblmaxsep 20pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil \@fpsep 1pc plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 6pt
+
+\parskip 0pt plus .1pt \parindent 10pt \partopsep 0pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\@ucheadtrue
+ \@startsection{part}{9}{\z@}{-10pt plus -4pt minus
+ -2pt}{4pt}{\reset@font\normalsize\sffamily}}
+\def\section{\@ucheadtrue
+ \@startsection{section}{1}{\z@}{-10pt plus -4pt minus
+ -2pt}{4pt}{\reset@font\normalsize\sffamily}}
+\def\subsection{\@ucheadfalse
+ \@startsection{subsection}{2}{\z@}{-8pt plus -2pt minus
+ -1pt}{4pt}{\reset@font\normalsize\sffamily}}
+\def\subsubsection{\@ucheadfalse
+ \@startsection{subsubsection}{3}{\parindent}{6pt plus
+1pt}{-5pt}{\reset@font\normalsize\itshape}}
+\def\paragraph{\@ucheadfalse
+ \@startsection{paragraph}{3}{\parindent}{6pt plus
+1pt}{-5pt}{\reset@font\normalsize\itshape}}
+
+\renewcommand{\@seccntformat}[1]{\textup{\csname the#1\endcsname}}
+
+\gdef\@period{.}
+\def\@trivlist{\@topsepadd\topsep
+\if@noskipsec \gdef\@period{}\leavevmode\gdef\@period{.}\fi
+ \ifvmode \advance\@topsepadd\partopsep \else \unskip\par\fi
+ \if@inlabel \@noparitemtrue \@noparlisttrue
+ \else \@noparlistfalse \@topsep\@topsepadd \fi
+ \advance\@topsep \parskip
+ \leftskip\z@\rightskip\@rightskip \parfillskip\@flushglue
+ \@setpar{\if@newlist\else{\@@par}\fi} \global\@newlisttrue
+\@outerparskip\parskip}
+
+
+\def\@startsection#1#2#3#4#5#6{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \if@uchead%
+ \protected@edef\@svsec{\@seccntformat{#1}.\quad\relax}%
+ \else%
+ \protected@edef\@svsec{\@seccntformat{#1}\quad\relax}%
+ \fi%
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #6{%
+ \@hangfrom{\hskip #3\relax\@svsec}%
+ \interlinepenalty \@M \if@uchead\MakeUppercase{#8}\else#8\fi \@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}%
+ \else
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec \if@uchead\Makeuppercase{#8}\else#8\fi}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}}%
+ \fi
+ \@xsect{#5}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd\@period \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+\newif\if@uchead\@ucheadfalse
+
+
+\setcounter{secnumdepth}{3}
+\newcounter{secnumbookdepth}
+\setcounter{secnumbookdepth}{3}
+
+\newfont{\apbf}{cmbx9}
+
+\def\@withappendix#1{App--\number #1}
+
+\newcommand{\elecappendix}{
+}
+
+\def\appenheader{\global\@topnum\z@ \global\@botroom \textheight \begin{figure}
+\newfont{\sc}{cmcsc10}
+\parindent\z@
+\hbox{}
+\vskip -\textfloatsep
+\vskip 11pt
+\hrule height .2pt width 30pc
+\vskip 2pt\rule{0pt}{10pt}\ignorespaces}
+\def\endappenheader{\end{figure}\gdef\appendixhead{}}
+
+\def\@appsec{}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\@appsec{APPENDIX }
+ \def\thesection{\Alph{section}}
+ \def\theHsection{\Alph{section}}}
+
+
+
+\labelsep 5pt
+\settowidth{\leftmargini}{(9)} \addtolength\leftmargini\labelsep
+\settowidth{\leftmarginii}{(b)} \addtolength\leftmarginii\labelsep
+\leftmarginiii \leftmarginii
+\leftmarginiv \leftmarginii
+\leftmarginv \leftmarginii
+\leftmarginvi \leftmarginii
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 0pt plus 1pt\topsep 6pt plus 2pt
+minus 2pt\itemsep 2pt plus 1pt minus .5pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt
+ \parsep 0pt plus .5pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt
+ \parsep 0pt plus .5pt
+ \itemsep \parsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+
+
+
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{##1\hss}}\fi}
+\def\longenum{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\labelwidth\z@}\fi}
+%\leftmargin\z@ \itemindent\parindent}\fi} - this indents each item in enumerate
+\let\endlongenum\endlist
+%%--------------------CHANGED: always roman parentheses. dave ---------------%%
+\def\labelenumi{{\rm (}\arabic{enumi}\/{\rm )}}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{{\rm (}\alph{enumii}\rm{)}}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi{\rm (}\theenumii{\rm )}}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\itemize{\list{---\hskip -\labelsep}{\settowidth
+ {\leftmargin}{---}\labelwidth\leftmargin
+ \addtolength{\labelwidth}{-\labelsep}}}
+\let\enditemize\endlist
+\def\longitem{\list{---}{\labelwidth\z@
+ \leftmargin\z@ \itemindent\parindent \advance\itemindent\labelsep}}
+\let\endlongitem\endlist
+\def\verse{\let\\=\@centercr
+ \list{}{\leftmargin 2pc
+ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\leftmargin 2pc \listparindent .5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\leftmargin 2pc \rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\description{\list{}{\listparindent\parindent\labelwidth\z@
+ \leftmargin\z@ \itemindent\parindent\advance\itemindent\labelsep
+ \def\makelabel##1{\it ##1.}}}
+\let\enddescription\endlist
+
+\def\describe#1{\list{}{\listparindent\parindent\settowidth{\labelwidth}{#1}\leftmargin
+ \labelwidth\addtolength\leftmargin\labelsep\def\makelabel##1{##1\hfil}}}
+\let\enddescribe\endlist
+
+ \def\program{\ifx\@currsize\normalsize\small \else \rm \fi\tabbing}
+ \let\endprogram\endtabbing
+ \def\@begintheorem#1#2{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\sc{#1}\hskip 5pt\relax #2.}] \itshape}
+ % aiellom{: this is what makes the theorem environment with names
+ % ABOVE #1 is the word example, corollary, etc.
+ % #2 is the number
+ % \def\@opargbegintheorem#1#2#3{\trivlist
+ % \item[\hskip 10pt \hskip \labelsep{\sc #1\savebox\@tempboxa{#3}\ifdim
+ % \wd\@tempboxa>\z@ \hskip 5pt\relax \box\@tempboxa\fi.}] \itshape}
+ % is been changed to
+ % #1 is the word theorem, lemma, etc.
+ % #2 is the number
+ % #3 is the name of the theorem, lemma, etc.
+ \def\@opargbegintheorem#1#2#3{\trivlist
+ \item[\hskip 10pt \hskip
+\labelsep{\sc{#1}\savebox\@tempboxa{\sc{#3}}\ifdim
+ \wd\@tempboxa>\z@ \hskip 5pt\relax \sc{#2} \box\@tempboxa\fi.}]
+\itshape}
+ % aiellom}
+
+
+
+\newif\if@qeded\global\@qededfalse
+\def\proof{\global\@qededfalse\@ifnextchar[{\@xproof}{\@proof}}
+\def\endproof{\if@qeded\else\qed\fi\endtrivlist}
+\def\qed{\unskip\kern 10pt{\unitlength1pt\linethickness{.4pt}\framebox(6,6){}}
+\global\@qededtrue}
+\def\@proof{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\sc Proof.}]\ignorespaces}
+\def\@xproof[#1]{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\sc Proof #1.}]\ignorespaces}
+
+\def\newdef#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\expandafter\xdef\csname
+the#1\endcsname{\@thmcounter{#1}}\global
+ \@namedef{#1}{\@defthm{#1}{#2}}\global
+ \@namedef{end#1}{\@endtheorem}}}
+\def\@defthm#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}}
+\def\@xdefthm#1#2{\@begindef{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ydefthm#1#2[#3]{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\it #2\savebox\@tempboxa{#3}\ifdim
+ \wd\@tempboxa>\z@ \ \box\@tempboxa\fi.}]\ignorespaces}
+\def\@begindef#1#2{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\it #1\ \rm #2.}]}
+
+\def\theequation{\arabic{equation}}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 2.5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\par\footnotesize
+\@ucheadfalse
+\@startsection{subsection}{2}{\z@}{16pt plus 2pt minus
+ 1pt}{2pt}{\sf}*{REFERENCES}%
+\list{\arabic{enumi}.}{%
+ \settowidth{\labelwidth}{99.}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep \topsep \z@ \parsep 0pt plus .1pt
+ \itemsep \parsep
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy
+ \widowpenalty=4500
+ \clubpenalty=4500
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule \@height 0.2\p@ \@width 47\p@
+ \kern 2.6\p@
+}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ $^{\@thefnmark}$#1}
+
+
+\setcounter{topnumber}{3}
+\def\topfraction{.99}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.5}
+\setcounter{totalnumber}{3}
+\def\textfraction{.01}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{\vskip 1pc \setbox\@tempboxa\hbox{#1.\hskip
+1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize #1. #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\def\nocaption{\refstepcounter\@captype \par
+ \vskip 1pc \hbox to\hsize{\hfil \footnotesize Figure \thefigure
+ \hfil}}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\ \thefigure}
+\def\figure{\let\normalsize\footnotesize \normalsize \@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\let\normalsize\footnotesize \normalsize\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+\def\acmtable#1{\@narrowfig #1\relax
+ \let\caption\@atcap \let\nocaption\@atnocap
+ \def\@tmpnf{}\@ifnextchar[{\@xntab}{\@ntab}}
+\def\endacmtable{\hbox to \textwidth{\hfil
+\vbox{\hsize \@narrowfig
+\box\@nfcapbox
+{\baselineskip 4pt \hbox{\vrule height .4pt width \hsize}}
+\vskip -1pt
+\box\@nfigbox\vskip -1pt
+{\baselineskip 4pt \hbox{\vrule height .4pt width \hsize}}}\hfil}
+\end@float}
+\def\@xntab[#1]{\def\@tmpnf{[#1]}\@ntab}
+\def\@ntab{\expandafter\table\@tmpnf
+ \setbox\@nfigbox\vbox\bgroup
+ \hsize \@narrowfig \@parboxrestore}
+\def\@atmakecap #1#2{\setbox\@tempboxa\hbox{#1.\hskip 1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize \sloppy #1.\hskip 1em\relax #2 \par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+\def\@atcap{\par\egroup\refstepcounter\@captype
+ \@dblarg{\@atcapx\@captype}}
+\long\def\@atcapx#1[#2]#3{\setbox\@nfcapbox\vbox {\hsize \wd\@nfigbox
+ \@parboxrestore
+ \@atmakecap{\csname fnum@#1\endcsname}{\ignorespaces #3}\par}}
+\def\@atnocap{\egroup \refstepcounter\@captype
+ \setbox\@nfcapbox\vbox {\hsize \wd\@nfigbox
+ \hbox to\hsize{\hfil \footnotesize Table \thetable\hfil}}}
+
+%
+%% Narrow figures
+%
+\def\narrowfig#1{\@narrowfig #1\relax
+ \let\caption\@nfcap \let\nocaption\@nfnocap
+ \def\@tmpnf{}\@ifnextchar[{\@xnfig}{\@nfig}}
+\def\endnarrowfig{\hbox to \textwidth{\if@nfeven
+ \box\@nfcapbox\hfil\box\@nfigbox
+ \else \box\@nfigbox\hfil\box\@nfcapbox\fi}\end@float}
+\def\@xnfig[#1]{\def\@tmpnf{[#1]}\@nfig}
+\def\@nfig{\expandafter\figure\@tmpnf
+ \setbox\@nfigbox\vbox\bgroup
+ \hsize \@narrowfig \@parboxrestore}
+\def\@nfmakecap #1#2{\setbox\@tempboxa\hbox{#1.\hskip 1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize \sloppy #1.\hskip 1em\relax #2 \par \else \hbox
+to\hsize{\if@nfeven\else\hfil\fi\box\@tempboxa\if@nfeven\hfil\fi}
+ \fi}
+\def\@nfcap{\par\egroup\refstepcounter\@captype
+ \@dblarg{\@nfcapx\@captype}}
+\long\def\@nfcapx#1[#2]#3{\@seteven
+ \setbox\@nfcapbox\vbox to \ht\@nfigbox
+ {\hsize \textwidth \advance\hsize -2pc \advance\hsize -\wd\@nfigbox
+ \@parboxrestore
+ \vfil
+ \@nfmakecap{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \vfil}}
+\def\@nfnocap{\egroup \refstepcounter\@captype \@seteven
+ \setbox\@nfcapbox\vbox to \ht\@nfigbox
+ {\hsize \textwidth \advance\hsize -2pc \advance\hsize -\wd\@nfigbox
+ \@parboxrestore
+ \vfil
+ \hbox to\hsize{\if@nfeven\else\hfil\fi
+ \footnotesize Figure \thefigure
+ \if@nfeven\hfil\fi}
+ \vfil}}
+\def\@seteven{\@nfeventrue
+ \@ifundefined{r@@nf\thefigure}{}{%
+ \edef\@tmpnf{\csname r@@nf\thefigure\endcsname}%
+ \edef\@tmpnf{\expandafter\@getpagenum\@tmpnf}%
+ \ifodd\@tmpnf\relax\@nfevenfalse\fi}%
+\label{@nf\thefigure}\edef\@tmpnfx{\if@nfeven e\else o\fi}
+\edef\@tmpnf{\write\@unused {\noexpand\ifodd \noexpand\c@page
+ \noexpand\if \@tmpnfx e\noexpand\@nfmsg{\thefigure} \noexpand\fi
+ \noexpand\else
+ \noexpand\if \@tmpnfx o\noexpand\@nfmsg{\thefigure}\noexpand\fi
+ \noexpand\fi }}\@tmpnf}
+\def\@nfmsg#1{Bad narrowfig: Figure #1 on page \thepage}
+
+\newdimen\@narrowfig
+\newbox\@nfigbox
+\newbox\@nfcapbox
+\newif\if@nfeven
+
+\def\and{\\ and\\}
+\def\maketitle{\newpage \thispagestyle{titlepage}\par
+ \begingroup \lineskip = \z@\null \vskip -30pt\relax
+ \parindent\z@ \LARGE {\raggedright \hyphenpenalty\@M
+ %\sf \@title \par
+ \@title \par
+ \global\firstfoot %aiellom
+ \global\runningfoot %aiellom
+}
+\label{@firstpg}
+{ \vskip 13.5pt\relax \normalsize \sf %vskip 13.5pt between title and author
+ \begingroup \addtolength{\baselineskip}{2pt}
+ \@author\par \vskip -2pt
+ \endgroup }
+ {\ifx \@categories\@empty
+ \else
+ \baselineskip 17pt\relax
+ \if@acmjacm\else\hbox{\vrule height .2pt width 30pc}\fi%to eliminate the lines for jacm
+ }
+ \vskip 8.5pt \footnotesize \box\@abstract \vskip 4pt\relax %vskip8.5 space above abstract
+ {\def\and{\unskip\/{\rm ; }}
+ Categories and Subject Descriptors: \@categories \fi}\par\vskip 4pt\relax
+ \box\@terms \vskip 4pt\relax
+ \box\@keywords \par
+ {\baselineskip 14pt\relax
+ \@abstractbottom
+ }
+ \vskip 23pt\relax
+ \endgroup
+\let\maketitle\relax
+ % \gdef\@author{}\gdef\@title{}
+ \gdef\@categories{}}
+
+
+\newbox\@abstract
+\newbox\@terms
+\newbox\@keywords
+\def\abstract{\global\setbox\@abstract=\vbox\bgroup \everypar{}
+ \footnotesize \hsize 30pc \parindent 10pt \noindent
+ \rule{0pt}{10pt}\ignorespaces}
+\def\endabstract{\egroup}
+
+\def\terms#1{\setbox\@terms=\vbox{\everypar{}
+ \footnotesize \hsize 30pc \parindent 0pt \noindent
+ General Terms: \ignorespaces #1}}
+\def\keywords#1{\setbox\@keywords=\vbox{\everypar{}
+ \footnotesize \hsize 30pc \parindent 0pt \noindent
+ Additional Key Words and Phrases: \ignorespaces #1}
+}
+
+\def\category#1#2#3{\@ifnextchar
+ [{\@category{#1}{#2}{#3}}{\@xcategory{#1}{#2}{#3}}}
+\def\@category#1#2#3[#4]{\edef\@tempa{\ifx \@categories\@empty
+ \else ; \fi}{\def\protect{\noexpand\protect
+ \noexpand}\def\and{\noexpand\and}\xdef\@categories{\@categories\@tempa #1
+[{\bf #2}]:
+ #3\kern\z@---\hskip\z@{\it #4}}}}
+\def\@xcategory#1#2#3{\edef\@tempa{\ifx \@categories\@empty \else ;
+\fi}{\def\protect{\noexpand\protect\noexpand}\def\and{\noexpand
+ \and}\xdef\@categories{\@categories\@tempa #1 [{\bf #2}]: #3}}}
+\def\@categories{}
+\def\bottomstuff{\global\@topnum\z@ \global\@botroom \textheight \begin{figure}
+\parindent\z@
+\hbox{}
+\vskip -\textfloatsep
+\vskip 10pt
+\hrule height .2pt width 30pc
+\vskip 2pt\rule{0pt}{10pt}\ignorespaces}
+\def\endbottomstuff{\permission\end{figure}\gdef\permission{}}
+
+\newenvironment{ackslike}[1]
+ {\par \footnotesize
+ \@ucheadfalse
+ \@startsection{subsection}{2}{\z@}{-16pt plus -2pt minus -1pt}{2pt}{\sf}*
+ {\uppercase{#1}}\par\normalsize
+ \pdfbookmark{Acknowledgments}{Ack}
+ }
+ {\par}
+\newenvironment{acks}{\begin{ackslike}{ACKNOWLEDGMENTS}}{\end{ackslike}}
+
+\def\received{\par\footnotesize\addvspace{18pt plus 0pt minus
+4pt}\parindent\z@}
+%the line below replaced by the line that follows (K.R. Apt, July 11, 2000
+%\def\endreceived{\label{@lastpg}\hskip-2pt\par}
+\def\endreceived{\label{@lastpg}\hskip-2pt\par\normalsize}
+
+\mark{{}{}}
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\hfill \small\sf \rightmark\hskip
+19pt{\Large$\cdot$}\hskip 17pt\mypage}
+\def\@oddfoot{\hbox{}\hfill\tiny\@runningfoot}
+\def\@evenhead{\small\sf\mypage \hskip 17pt{\Large$\cdot$}\hskip 19pt\leftmark\hfill \hbox{}}
+\def\@evenfoot{\tiny\@runningfoot\hfill\hbox{}}
+\def\sectionmark##1{}\def\subsectionmark##1{}}
+\def\@runningfoot{}
+\def\runningfoot{\def\@runningfoot{\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear.}}
+\def\@firstfoot{}
+\def\firstfoot{\def\@firstfoot{\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear, Pages \pages.}}
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+\def\@oddhead{}\def\@oddfoot{\hbox{}\hfill
+\tiny\@firstfoot}\def\@evenhead{}\def\@evenfoot{\tiny\@firstfoot\hfill\hbox{}}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\@marrayclassiv{\@addtopreamble{$\displaystyle \@nextchar$}}
+\def\@marrayclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+\edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\displaystyle\@sharp$\hfil \or $\relax\displaystyle\@sharp$\hfil
+ \or \hfil$\relax\displaystyle\@sharp$\fi}}
+\def\marray{\arraycolsep 2.5pt\let\@acol\@arrayacol \let\@classz\@marrayclassz
+ \let\@classiv\@marrayclassiv \let\\\@arraycr\def\@halignto{}\@tabarray}
+\def\endmarray{\crcr\egroup\egroup}
+