commit 5be3b12cc0550042b0e5526d7c0bc4b7e7b2812f
parent 1d07a97300d48872726edd989f53bf489dc00a41
Author: Nick Mathewson <nickm@torproject.org>
Date: Sat, 17 May 2003 06:18:24 +0000
Adding second version of perl files, css support, first take on anon bib
svn:r6
Diffstat:
| M | BibTeX.py | | | 6 | +++++- |
| A | anonbib.bib | | | 789 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | css/main.css | | | 85 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | css/pubs.css | | | 38 | ++++++++++++++++++++++++++++++++++++++ |
| A | perl-v2/BibTeX.pm | | | 303 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | perl-v2/PDOSBib.pm | | | 233 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | perl-v2/PDOSCGI.pm | | | 69 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | perl-v2/bibtex-entry.cgi | | | 206 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | perl-v2/mkpdospubs.pl | | | 242 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | perl-v2/pubs-date.cgi | | | 288 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | perl/mkpdospubs.pl | | | 2 | +- |
11 files changed, 2259 insertions(+), 2 deletions(-)
diff --git a/BibTeX.py b/BibTeX.py
@@ -621,7 +621,11 @@ BRACE_OPEN_RE = re.compile(r'^([^\{\}]*\{)(.*)')
RAW_DATA_RE = re.compile(r'^([^\s\},]+)(.*)')
if __name__ == '__main__':
- f = FileIter(fname="testbib/pdos.bib")
+ import sys
+ if len(sys.argv)>1:
+ f = FileIter(fname=sys.argv[1])
+ else:
+ f = FileIter(fname="testbib/pdos.bib")
p = Parser(f, {})
print p
r = p.parse()
diff --git a/anonbib.bib b/anonbib.bib
@@ -0,0 +1,789 @@
+
+%% List of sections
+@string{mix = "Mix Networks: Design"}
+@string{mixattacks = "Mix Networks: Attacks"}
+@string{stream = "Stream-based anonymity"}
+@string{traffic = "Traffic analysis"}
+@string{pub = "Anonymous publication"}
+@string{nym = "Pseudonymity"}
+
+%% Section: Mix Networks: Design
+
+@Article{chaum-mix,
+ author = {David Chaum},
+ title = {Untraceable electronic mail, return addresses, and digital pseudonyms},
+ journal = {Communications of the ACM},
+ year = {1982},
+ volume = {4},
+ number = {2},
+ month = {February},
+ www_section = mix,
+ www_txt_url = "http://www.eskimo.com/~weidai/mix-net.txt",
+}
+
+@Misc{mixminion-spec,
+ author = {Mixminion},
+ title = {Type {III} ({M}ixminion) Mix Protocol Specifications},
+ www_section = mix,
+ www_txt_url = "http://mixminion.net/minion-spec.txt",
+}
+
+@InProceedings{BM:mixencrypt,
+ author = {M{\"o}ller, Bodo},
+ title = {Provably Secure Public-Key Encryption for Length-Preserving Chaumian Mixes},
+ booktitle = {{CT-RSA} 2003},
+ publisher = {Springer-Verlag, LNCS 2612},
+ year = 2003,
+ www_section = mix,
+ www_pdf_url = "http://www.informatik.tu-darmstadt.de/TI/Mitarbeiter/moeller/mixencrypt-ct-rsa2003.pdf",
+}
+
+@Misc{mixmaster-spec,
+ author = {Ulf M\"oller and Lance Cottrell},
+ title = {Mixmaster {P}rotocol --- {V}ersion 2},
+ howpublished = {Unfinished draft, January 2000},
+ www_section = mix,
+ www_txt_url = "http://www.eskimo.com/~rowdenw/crypt/Mix/draft-moeller-mixmaster2-protocol-00.txt",
+}
+
+@InProceedings{abe,
+ author = {Masayuki Abe},
+ title = {Universally Verifiable {MIX} With Verification Work Independent of
+ The Number of {MIX} Servers},
+ booktitle = {{EUROCRYPT} 1998},
+ year = {1998},
+ publisher = {Springer-Verlag, LNCS 1403},
+ www_section = mix,
+}
+
+@InProceedings{desmedt,
+ author = {Yvo Desmedt and Kaoru Kurosawa},
+ title = {How To Break a Practical {MIX} and Design a New One},
+ booktitle = {{EUROCRYPT} 2000},
+ year = {2000},
+ publisher = {Springer-Verlag, LNCS 1803},
+ www_section = mix,
+ www_html_url = "http://citeseer.nj.nec.com/447709.html",
+}
+
+@InProceedings{hybrid-mix,
+ author = {M. Ohkubo and M. Abe},
+ title = {A {L}ength-{I}nvariant {H}ybrid {MIX}},
+ booktitle = {Advances in Cryptology - {ASIACRYPT} 2000},
+ year = {2000},
+ publisher = {Springer-Verlag, LNCS 1976},
+ www_section = mix,
+}
+
+@InProceedings{jakobsson-optimally,
+ author = "Markus Jakobsson and Ari Juels",
+ title = "An Optimally Robust Hybrid Mix Network (Extended Abstract)",
+ booktitle = {Principles of Distributed Computing - {PODC} '01},
+ year = "2001",
+ publisher = {ACM Press},
+ www_section = mix,
+ www_html_url = "http://citeseer.nj.nec.com/492015.html",
+}
+
+@InProceedings{kesdogan,
+ author = {D. Kesdogan and M. Egner and T. B\"uschkes},
+ title = {Stop-and-Go {MIX}es Providing Probabilistic Anonymity in an Open
+ System},
+ booktitle = {Information Hiding (IH 1998)},
+ year = {1998},
+ publisher = {Springer-Verlag, LNCS 1525},
+ www_section = mix,
+ www_pdf_url = "http://www.cl.cam.ac.uk/~fapp2/ihw98/ihw98-sgmix.pdf",
+}
+
+@InProceedings{flash-mix,
+ author = {Markus Jakobsson},
+ title = {Flash {M}ixing},
+ booktitle = {Principles of Distributed Computing - {PODC} '99},
+ year = {1999},
+ publisher = {ACM Press},
+ www_section = mix,
+ www_html_url = "http://citeseer.nj.nec.com/jakobsson99flash.html",
+}
+
+@InProceedings{babel,
+ author = {C. Gulcu and G. Tsudik},
+ title = {Mixing {E}-mail With {B}abel},
+ booktitle = {Network and Distributed Security Symposium - {NDSS} '96},
+ year = {1996},
+ publisher = {IEEE},
+ www_section = mix,
+ www_html_url = "http://citeseer.nj.nec.com/2254.html",
+}
+
+@Article{remailer-history,
+ author = {Sameer Parekh},
+ title = {Prospects for Remailers},
+ journal = {First Monday},
+ volume = {1},
+ number = {2},
+ month = {August},
+ year = {1996},
+ www_section = mix,
+ www_html_url = "http://www.firstmonday.dk/issues/issue2/remailers/",
+}
+
+@Misc{remailer-history-old,
+ author = {Tim May},
+ title = {Description of early remailer history},
+ howpublished = {Archived e-mail}
+ www_section = mix,
+ www_html_url = "http://www.inet-one.com/cypherpunks/dir.1996.08.29-1996.09.04/msg00431.html",
+}
+
+@InProceedings{mix-acc,
+ author = {Roger Dingledine and Michael J. Freedman and David
+ Hopwood and David Molnar},
+ title = {{A Reputation System to Increase MIX-net
+ Reliability}},
+ booktitle = {Information Hiding (IH 2001)},
+ pages = {126--141},
+ year = 2001,
+ editor = {Ira S. Moskowitz},
+ publisher = {Springer-Verlag, LNCS 2137},
+ www_section = mix,
+ www_ps_url = "http://freehaven.net/doc/mix-acc/mix-acc.ps",
+ www_pdf_url = "http://freehaven.net/doc/mix-acc/mix-acc.pdf",
+}
+
+@InProceedings{casc-rep,
+ author = {Roger Dingledine and Paul Syverson},
+ title = {{Reliable MIX Cascade Networks through Reputation}},
+ booktitle = {Financial Cryptography (FC '02)},
+ year = 2002,
+ editor = {Matt Blaze},
+ publisher = {Springer-Verlag, LNCS (forthcoming)},
+ www_section = mix,
+ www_ps_url = "http://freehaven.net/doc/casc-rep/casc-rep.ps",
+ www_pdf_url = "http://freehaven.net/doc/casc-rep/casc-rep.pdf",
+}
+
+%% Section: Mix Networks: Attacks
+
+@InProceedings{pfitzmann90how,
+ author = "Birgit Pfitzmann and Andreas Pfitzmann",
+ title = "How to Break the Direct {RSA}-Implementation of {MIXes}",
+ booktitle = {Eurocrypt 89},
+ publisher = {Springer-Verlag, LNCS 434},
+ year = {1990},
+ www_section = mixattacks,
+ www_abstract_url = "http://www.semper.org/sirene/lit/abstr90.html#PfPf_90",
+ www_ps_gz_url = "http://www.semper.org/sirene/lit/abstr90.html#PfPf_90",
+}
+
+@InProceedings{back01,
+ author = {Adam Back and Ulf M\"oller and Anton Stiglic},
+ title = {Traffic Analysis Attacks and Trade-Offs in Anonymity Providing Systems},
+ booktitle = {Information Hiding (IH 2001)},
+ pages = {245--257},
+ year = 2001,
+ editor = {Ira S. Moskowitz},
+ publisher = {Springer-Verlag, LNCS 2137},
+ www_section = mixattacks,
+ www_pdf_url = "http://www.cypherspace.org/adam/pubs/traffic.pdf",
+}
+
+@Misc{mixmaster-attacks,
+ author = {Lance Cottrell},
+ title = {Mixmaster and Remailer Attacks},
+ www_section = mixattacks,
+ www_html_url = http://www.obscura.com/~loki/remailer/remailer-essay.html,
+}
+
+@InProceedings{mitkuro,
+ author = {M. Mitomo and K. Kurosawa},
+ title = {{Attack for Flash MIX}},
+ booktitle = {{ASIACRYPT} 2000},
+ year = {2000},
+ publisher = {Springer-Verlag, LNCS 1976},
+ www_section = mixattacks,
+ www_html_url = "http://citeseer.nj.nec.com/450148.html",
+}
+
+%% Section : nymservers
+
+@InProceedings{nym-alias-net,
+ author = {David Mazi\`{e}res and M. Frans Kaashoek},
+ title = {{The Design, Implementation and Operation of an Email
+ Pseudonym Server}},
+ booktitle = {$5^{th}$ ACM Conference on Computer and
+ Communications Security (CCS'98)},
+ year = 1998,
+ publisher = {ACM Press},
+ www_section = nym,
+ www_ps_gz_url = "ftp://cag.lcs.mit.edu/pub/dm/papers/mazieres:pnym.ps.gz",
+ www_ps_gz_url = "ftp://cag.lcs.mit.edu/pub/dm/papers/mazieres:pnym.pdf",
+}
+
+@Misc{freedom-nyms,
+ author = {Russell Samuels},
+ title = {Untraceable Nym Creation on the {F}reedom {N}etwork},
+ year = {1999},
+ month = {November},
+ day = {21},
+ www_section = nym,
+ www_html_url = "http://www.freedom.net/products/whitepapers/white11.html",
+}
+
+%% Section: Traffic analysis
+
+@InProceedings{rackoff93cryptographic,
+ author = {Charles Rackoff and Daniel R. Simon},
+ title = {Cryptographic Defense Against Traffic Analysis},
+ booktitle = {{ACM} Symposium on Theory of Computing},
+ pages = {672--681},
+ year = {1993},
+ www_section = traffic,
+ www_html_url = "http://research.microsoft.com/crypto/dansimon/me.htm",
+}
+
+
+
+@InProceedings{raymond00,
+ author = {J. F. Raymond},
+ title = {{Traffic Analysis: Protocols, Attacks, Design Issues,
+ and Open Problems}},
+ booktitle = {Designing Privacy Enhancing Technologies: Workshop
+ on Design Issue in Anonymity and Unobservability},
+ year = 2000,
+ month = {July},
+ pages = {10-29},
+ editor = {H. Federrath},
+ publisher = {Springer-Verlag, LNCS 2009},
+ www_section = traffic,
+}
+
+@InProceedings{trickle02,
+ author = {Andrei Serjantov and Roger Dingledine and Paul Syverson},
+ title = {From a Trickle to a Flood: Active Attacks on Several
+ Mix Types},
+ booktitle = {Information Hiding (IH 2002)},
+ year = {2002},
+ editor = {Fabien Petitcolas},
+ publisher = {Springer-Verlag, LNCS (forthcoming)},
+ www_section = traffic,
+ www_ps_url = "http://freehaven.net/doc/batching-taxonomy/taxonomy.ps",
+ www_pdf_url = "http://freehaven.net/doc/batching-taxonomy/taxonomy.pdf",
+}
+
+@InProceedings{langos02,
+ author = {Oliver Berthold and Heinrich Langos},
+ title = {Dummy Traffic Against Long Term Intersection Attacks},
+ booktitle = {Privacy Enhancing Technologies (PET 2002)},
+ year = {2002},
+ editor = {Roger Dingledine and Paul Syverson},
+ publisher = {Springer-Verlag, LNCS 2482},
+ www_section = traffic,
+}
+
+@InProceedings{disad-free-routes,
+ author = {Oliver Berthold and Andreas Pfitzmann and Ronny Standtke},
+ title = {The disadvantages of free {MIX} routes and how to overcome
+ them},
+ booktitle = {Designing Privacy Enhancing Technologies: Workshop
+ on Design Issue in Anonymity and Unobservability},
+ pages = {30--45},
+ year = 2000,
+ editor = {H. Federrath},
+ publisher = {Springer-Verlag, LNCS 2009},
+ www_section = traffic,
+ www_pdf_url = "http://www.tik.ee.ethz.ch/~weiler/lehre/netsec/Unterlagen/anon/disadvantages_berthold.pdf",
+}
+
+%% Section: Anonymous publication
+
+@InProceedings{freehaven-berk,
+ author = {Roger Dingledine and Michael J. Freedman and David Molnar},
+ title = {The Free Haven Project: Distributed Anonymous Storage Service},
+ booktitle = {Designing Privacy Enhancing Technologies: Workshop
+ on Design Issue in Anonymity and Unobservability},
+ year = {2000},
+ month = {July},
+ editor = {H. Federrath},
+ publisher = {Springer-Verlag, LNCS 2009},
+ www_section = pub,
+ www_ps_url = "http://freehaven.net/doc/berk/freehaven-berk.ps"
+}
+
+@InProceedings{freenet,
+ author = {Ian Clarke and Oskar Sandberg and Brandon Wiley and Theodore W. Hong},
+ title = {Freenet: {A} Distributed Anonymous Information Storage and Retrieval
+ System},
+ booktitle = {Workshop on Design Issues in Anonymity and Unobservability},
+ pages = {46--66},
+ year = {2000},
+ www_section = pub,
+ www_html_url = "http://citeseer.nj.nec.com/clarke00freenet.html",
+}
+
+@InProceedings{garay97secure,
+ author = {J. Garay and R. Gennaro and C. Jutla and T. Rabin},
+ title = {Secure distributed storage and retrieval},
+ booktitle = {11th International Workshop, WDAG '97},
+ pages = {275--289},
+ year = {1997},
+ publisher = {Springer-Verlag, LNCS 1320},
+ www_section = pub,
+ www_html_url = "http://citeseer.nj.nec.com/garay97secure.html",
+}
+
+@InProceedings{publius,
+ author = {Marc Waldman and Aviel Rubin and Lorrie Cranor},
+ title = {Publius: {A} robust, tamper-evident, censorship-resistant and
+ source-anonymous web publishing system},
+ booktitle = {Proc. 9th USENIX Security Symposium},
+ pages = {59--72},
+ year = {2000},
+ month = {August},
+ www_section = pub,
+ www_html_url = "http://citeseer.nj.nec.com/waldman00publius.html",
+}
+
+
+%% Section: Stream-based anonymity
+
+@InProceedings{onion-discex00,
+ author = {Paul Syverson and Michael Reed and David Goldschlag},
+ title = {{O}nion {R}outing Access Configurations},
+ booktitle = {DARPA Information Survivability Conference and
+ Exposition (DISCEX 2000)},
+ year = {2000},
+ publisher = {IEEE CS Press},
+ pages = {34--40},
+ volume = {1},
+ www_section = stream,
+ www_abstact_url = "http://www.onion-router.net/Publications.html",
+ www_ps_url = "http://www.onion-router.net/Publications/DISCEX-2000.ps",
+ www_ps_gz_url = "http://www.onion-router.net/Publications/DISCEX-2000.ps.gz",
+ www_pdf_url = "http://www.onion-router.net/Publications/DISCEX-2000.ps",
+}
+
+@InProceedings{syverson_2000,
+ author = {Paul F. Syverson and Gene Tsudik and Michael G. Reed
+ and Carl E. Landwehr},
+ title = {Towards an Analysis of Onion Routing Security},
+ booktitle = {Designing Privacy Enhancing Technologies: Workshop
+ on Design Issue in Anonymity and Unobservability},
+ year = 2000,
+ month = {July},
+ pages = {96--114},
+ editor = {H. Federrath},
+ publisher = {Springer-Verlag, LNCS 2009},
+ www_section = stream,
+ www_html_url = "http://citeseer.nj.nec.com/syverson00towards.html"
+}
+
+@InProceedings{web-mix,
+ author = {Oliver Berthold and Hannes Federrath and Stefan K\"opsell},
+ title = {Web {MIX}es: A system for anonymous and unobservable
+ {I}nternet access},
+ booktitle = {Designing Privacy Enhancing Technologies: Workshop
+ on Design Issue in Anonymity and Unobservability},
+ editor = {H. Federrath},
+ publisher = {Springer-Verlag, LNCS 2009},
+ pages = {115--129},
+ year = 2000,
+ www_section = stream,
+}
+
+@Article{crowds,
+ author = {Michael K. Reiter and Aviel D. Rubin},
+ title = {Crowds: Anonymity for Web Transactions},
+ journal = {{DIMACS} Technical Report},
+ volume = {97},
+ number = {15},
+ month = {April},
+ year = {1997},
+ www_section = stream,
+ www_html_url = "http://citeseer.nj.nec.com/284739.html",
+}
+
+@Misc{freedom,
+ author = {Zero Knowledge Systems},
+ title = {Freedom Version 2 White Papers},
+ www_section = stream,
+ www_html_url = \url{http://www.freedom.net/info/whitepapers/,
+}
+
+@Misc{realtime-mix,
+ author = {Anja Jerichow and Jan M\"uller and Andreas Pfitzmann and
+ Birgit Pfitzmann and Michael Waidner},
+ title = {{Real-Time MIXes: A Bandwidth-Efficient Anonymity Protocol}},
+ howpublished = {IEEE Journal on Selected Areas in Communications, 1998.},
+ www_section = stream,
+ www_html_url = "http://www.zurich.ibm.com/security/publications/1998.html",
+}
+
+
+%% Section: Misc
+
+@inproceedings{rao-pseudonymity,
+ author = "Josyula R. Rao and Pankaj Rohatgi",
+ title = "Can Pseudonymity Really Guarantee Privacy?",
+ booktitle = "Proceedings of the Ninth USENIX Security Symposium",
+ year = {2000},
+ month = Aug,
+ publisher = {USENIX},
+ pages = "85--96",
+ www_pdf_url = "http://www.usenix.org/publications/library/proceedings/sec2000/full_papers/rao/rao.pdf",
+}
+
+@misc{echolot,
+ author = {Peter Palfrader},
+ title = {Echolot: a pinger for anonymous remailers},
+ www_html_url = "http://www.palfrader.org/echolot/",
+}
+
+@Misc{hashcash,
+ author = {Adam Back},
+ title = {Hash cash},
+ www_html_url = http://www.cypherspace.org/~adam/hashcash/",
+}
+
+@InProceedings{oreilly-acc,
+ author = {Roger Dingledine and Michael J. Freedman and David Molnar},
+ title = {Accountability},
+ booktitle = {Peer-to-peer: Harnessing the Benefits of a Disruptive
+ Technology},
+ year = {2001},
+ publisher = {O'Reilly and Associates},
+}
+
+@InProceedings{SK,
+ author = {Joe Kilian and Kazue Sako},
+ title = {Receipt-Free {MIX}-Type Voting Scheme - A Practical Solution to
+ the Implementation of a Voting Booth},
+ booktitle = {EUROCRYPT '95},
+ year = {1995},
+ publisher = {Springer-Verlag},
+}
+
+@Misc{rprocess,
+ author = {RProcess},
+ title = {Selective Denial of Service Attacks},
+ www_html_url = "http://www.eff.org/pub/Privacy/Anonymity/1999\_09\_DoS\_remail\_vuln.html",
+}
+
+
+@misc{neochaum,
+ author = {Tim May},
+ title = {Payment mixes for anonymity},
+ howpublished = {Archived e-mail}
+ www_html_url = "http://www.inet-one.com/cypherpunks/dir.2000.02.28-2000.03.05/msg00334.html",
+}
+
+@misc{pidaho,
+ author = {Joel McNamara},
+ title = {{P}rivate {I}daho},
+ www_html_url = "http://www.eskimo.com/~joelm/pi.html",
+}
+
+@misc{potato,
+ author = {RProcess},
+ title = {{P}otato {S}oftware},
+ www_html_url = "http://www.skuz.net/potatoware/",
+}
+
+@misc{helsingius,
+ author = {J. Helsingius},
+ title = {{\tt anon.penet.fi} press release},
+ www_html_url = "http://www.penet.fi/press-english.html",
+}
+
+@InProceedings{PIK,
+ author = {C. Park and K. Itoh and K. Kurosawa},
+ title = {Efficient anonymous channel and all/nothing election scheme},
+ booktitle = {Advances in Cryptology -- {EUROCRYPT} '93},
+ pages = {248--259},
+ publisher = {Springer-Verlag, LNCS 765},
+}
+
+@Article{riordan-schneier,
+ author = {James Riordan and Bruce Schneier},
+ title = {A Certified E-mail Protocol with No Trusted Third Party},
+ journal = {13th Annual Computer Security Applications Conference},
+ month = {December},
+ year = {1998},
+ www_html_url = "http://www.counterpane.com/certified-email.html",
+}
+
+@Misc{recovery,
+ author = {Miguel Castro and Barbara Liskov},
+ title = {Proactive Recovery in a Byzantine-Fault-Tolerant System},
+ www_pdf_url = "http://www.pmg.lcs.mit.edu/~castro/application/recovery.pdf",
+}
+
+@Misc{advogato,
+ author = {Raph Levien},
+ title = {Advogato's Trust Metric},
+ www_html_url = "http://www.advogato.org/trust-metric.html",
+}
+
+@PhdThesis{malkin-thesis,
+ author = {Tal Malkin},
+ school = {{MIT}},
+ title = {Private {I}nformation {R}etrieval},
+ year = {2000},
+ www_html_url = "http://toc.lcs.mit.edu/~tal/pubs.html",
+}
+
+@InProceedings{zhou96certified,
+ author = {Zhou and Gollmann},
+ title = {Certified Electronic Mail},
+ booktitle = {{ESORICS: European Symposium on Research in Computer
+ Security}},
+ publisher = {Springer-Verlag, LNCS 1146},
+ year = {1996},
+ www_html_url = "http://citeseer.nj.nec.com/zhou96certified.html",
+}
+
+%% These have little to do with anonymity, so I'm commenting them out.
+%%
+%% @InProceedings{BEAR-LIONESS,
+%% author = {Ross Anderson and Eli Biham},
+%% title = {Two Practical and Provably Secure Block Ciphers: {BEAR} and {LION}},
+%% booktitle = {International Workshop on Fast Software Encryption},
+%% year = {1996},
+%% publisher = {Springer-Verlag},
+%% note = {\url{http://citeseer.nj.nec.com/anderson96two.html}},
+%% }
+%%
+%% @Misc{SPC,
+%% author = {Daniel Bleichenbacher and Anand Desai},
+%% title = {A Construction of a Super-Pseudorandom Cipher},
+%% howpublished = {Manuscript},
+%% }
+%%
+%% % Would a more recent reference for SPRPs be more useful?
+%% @Article{sprp,
+%% author = {Michael Luby and Charles Rackoff},
+%% title = {How to Construct Pseudorandom Permutations from
+%% Pseudorandom Functions},
+%% journal = {SIAM Journal on Computing},
+%% year = {1988},
+%% volume = {17},
+%% number = {2},
+%% pages = {373--386},
+%% }
+%%
+%% @Misc{TLS,
+%% author = {T. Dierks and C. Allen},
+%% title = {The {TLS} {P}rotocol --- {V}ersion 1.0},
+%% howpublished = {IETF RFC 2246},
+%% month = {January},
+%% year = {1999},
+%% note = {\newline \url{http://www.rfc-editor.org/rfc/rfc2246.txt}},
+%% }
+%%
+%% @Misc{SMTP,
+%% author = {J. Postel},
+%% title = {Simple {M}ail {T}ransfer {P}rotocol},
+%% howpublished = {IETF RFC 2821 (also STD0010)},
+%% month = {April},
+%% year = {2001},
+%% note = {\newline \url{http://www.rfc-editor.org/rfc/rfc2821.txt}},
+%% }
+%%
+%% @Misc{IMAP,
+%% author = {M. Crispin},
+%% title = {Internet {M}essage {A}ccess {P}rotocol --- {V}ersion 4rev1},
+%% howpublished = {IETF RFC 2060},
+%% month = {December},
+%% year = {1996},
+%% note = {\url{http://www.rfc-editor.org/rfc/rfc2060.txt}},
+%% }
+%%
+%% @Misc{POP3,
+%% author = {J. Myers and M. Rose},
+%% title = {Post {O}ffice {P}rotocol --- {V}ersion 3},
+%% howpublished = {IETF RFC 1939 (also STD0053)},
+%% month = {May},
+%% year = {1996},
+%% note = {\newline \url{http://www.rfc-editor.org/rfc/rfc1939.txt}},
+%% }
+%%
+%% @InProceedings{shuffle,
+%% author = {C. Andrew Neff},
+%% title = {A Verifiable Secret Shuffle and its Application to E-Voting},
+%% booktitle = {8th ACM Conference on Computer and Communications
+%% Security (CCS-8)},
+%% pages = {116--125},
+%% year = 2001,
+%% editor = {P. Samarati},
+%% month = {November},
+%% publisher = {ACM Press},
+%% note = {\url{http://www.votehere.net/ada_compliant/ourtechnology/
+%% technicaldocs/shuffle.pdf}},
+%% }
+%%
+%% @InProceedings{dolev91,
+%% author = {Danny Dolev and Cynthia Dwork and Moni Naor},
+%% title = {Non-Malleable Cryptography},
+%% booktitle = {23rd ACM Symposium on the Theory of Computing (STOC)},
+%% pages = {542--552},
+%% year = 1991,
+%% note = {Updated version at
+%% \url{http://citeseer.nj.nec.com/dolev00nonmalleable.html}},
+%% }
+%%
+%% @TechReport{rsw96,
+%% author = {Ronald L. Rivest and Adi Shamir and David A. Wagner},
+%% title = {Time-lock puzzles and timed-release Crypto},
+%% year = 1996,
+%% type = {MIT LCS technical memo},
+%% number = {MIT/LCS/TR-684},
+%% month = {February},
+%% note = {\newline \url{http://citeseer.nj.nec.com/rivest96timelock.html}},
+%% }
+%%
+%% @InProceedings{boneh00,
+%% author = {Dan Boneh and Moni Naor},
+%% title = {Timed Commitments},
+%% booktitle = {Advances in Cryptology -- {CRYPTO} 2000},
+%% pages = {236--254},
+%% year = 2000,
+%% publisher = {Springer-Verlag, LNCS 1880},
+%% note = {\newline \url{http://crypto.stanford.edu/~dabo/abstracts/timedcommit.html}},
+%% }
+%%
+%% @InProceedings{goldschlag98,
+%% author = {David M. Goldschlag and Stuart G. Stubblebine},
+%% title = {Publicly Verifiable Lotteries: Applications of
+%% Delaying Functions},
+%% booktitle = {Financial Cryptography, FC'98},
+%% pages = {214--226},
+%% year = 1998,
+%% publisher = {Springer-Verlag, LNCS 1465},
+%% note = {\newline \url{http://citeseer.nj.nec.com/goldschlag98publicly.html}},
+%% }
+%%
+%% @InProceedings{syverson98,
+%% author = {Paul Syverson},
+%% title = {Weakly Secret Bit Commitment: Applications to
+%% Lotteries and Fair Exchange},
+%% booktitle = {Computer Security Foundations Workshop (CSFW11)},
+%% pages = {2--13},
+%% year = 1998,
+%% address = {Rockport Massachusetts},
+%% month = {June},
+%% publisher = {IEEE CS Press},
+%% note = {\newline \url{http://chacs.nrl.navy.mil/publications/CHACS/1998/}},
+%% }
+%%
+%% @Misc{shoup-iso,
+%% author = {Victor Shoup},
+%% title = {A Proposal for an {ISO} {S}tandard for Public Key Encryption (version 2.1)},
+%% note = {Revised December 20, 2001. \url{http://www.shoup.net/papers/}},
+%% }
+%%
+%% @Misc{shoup-oaep,
+%% author = {Victor Shoup},
+%% title = {{OAEP} Reconsidered},
+%% howpublished = {{IACR} e-print 2000/060},
+%% note = {\newline \url{http://eprint.iacr.org/2000/060/}},
+%% }
+%%
+%% @Misc{oaep-still-alive,
+%% author = {E. Fujisaki and D. Pointcheval and T. Okamoto and J. Stern},
+%% title = {{RSA}-{OAEP} is Still Alive!},
+%% howpublished = {{IACR} e-print 2000/061},
+%% note = {\newline \url{http://eprint.iacr.org/2000/061/}},
+%% }
+%%
+%% @Article{mitzenm-loss,
+%% author = {G. Louth and M. Mitzenmacher and F.P. Kelly},
+%% title = {Computational Complexity of Loss Networks},
+%% journal = {Theoretical Computer Science},
+%% year = {1994},
+%% volume = {125},
+%% pages = {45-59},
+%% note = {\newline \url{http://citeseer.nj.nec.com/louth94computational.html}},
+%% }
+%%
+%% @InProceedings{han,
+%% author = {Yongfei Han},
+%% title = {Investigation of non-repudiation protocols},
+%% booktitle = {ACISP '96},
+%% year = {1996},
+%% publisher = {Springer-Verlag},
+%% }
+%%
+%% @InProceedings{PShuffle,
+%% author = {Jun Furukawa and Kazue Sako},
+%% title = {An Efficient Scheme for Proving a Shuffle},
+%% editor = {Joe Kilian},
+%% booktitle = {CRYPTO 2001},
+%% year = {2001},
+%% publisher = {Springer-Verlag, LNCS 2139},
+%% }
+%%
+%% @InProceedings{OAEP,
+%% author = {M. Bellare and P. Rogaway},
+%% year = {1994},
+%% booktitle = {EUROCRYPT '94},
+%% title = {Optimal {A}symmetric {E}ncryption {P}adding : How To Encrypt With
+%% {RSA}},
+%% publisher = {Springer-Verlag},
+%% note = {\newline \url{http://www-cse.ucsd.edu/users/mihir/papers/oaep.html}},
+%% }
+%%
+%% @Misc{timmay,
+%% author = {Tim May},
+%% title = {Cyphernomicon},
+%% note = {\newline \url{http://www2.pro-ns.net/~crypto/cyphernomicon.html}},
+%% }
+%%
+%% @Misc{pgpfaq,
+%% key = {PGP},
+%% title = {{PGP} {FAQ}},
+%% note = {\newline \url{http://www.faqs.org/faqs/pgp-faq/}},
+%% }
+%%
+%% @Misc{rabin-ida,
+%% author = {Michael O. Rabin},
+%% title = {Efficient Dispersal of Information for security, load balancing,
+%% and fault tolerance},
+%% booktitle = {Journal of the ACM},
+%% year = {1989},
+%% volume = {36},
+%% number = {2},
+%% series = {335--348},
+%% month = {April},
+%% }
+%%
+%%
+%% @Article{raghavan87randomized,
+%% author = {P. Raghavan and C. Thompson},
+%% title = {Randomized rounding: A technique for provably good algorithms and algorithmic proofs},
+%% journal = {Combinatorica},
+%% volume = {7},
+%% pages = {365--374},
+%% year = {1987},
+%% }
+%%
+%% @InProceedings{leighton91fast,
+%% author = {Frank Thomson Leighton and Fillia Makedon and Serge A. Plotkin and
+%% Clifford Stein and Eva Tardos and Spyros Tragoudas},
+%% title = {Fast Approximation Algorithms for Multicommodity Flow Problems},
+%% booktitle = {{ACM} Symposium on Theory of Computing},
+%% pages = {101-111},
+%% year = {1991},
+%% note = {\newline \url{http://citeseer.nj.nec.com/91073.html}},
+%% }
+%%
+%% @Misc{pk-relations,
+%% author = {M. Bellare and A. Desai and D. Pointcheval and P. Rogaway},
+%% title = {Relations Among Notions of Security for Public-Key Encryption
+%% Schemes},
+%% howpublished = {
+%% Extended abstract in {\em Advances in Cryptology - CRYPTO '98}, LNCS Vol. 1462.
+%% Springer-Verlag, 1998.
+%% Full version available from \newline \url{http://www-cse.ucsd.edu/users/mihir/}},
+%% }
+%%
+%%
diff --git a/css/main.css b/css/main.css
@@ -0,0 +1,85 @@
+BODY {
+ background-color: #FFF;
+ color: #000;
+ margin: 0px;
+}
+
+FORM {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+P, TD {
+ font-family: lucida, "Lucida Sans Unicode", Geneva, sans-serif;
+}
+
+P IMG {
+ vertical-align: text-bottom;
+}
+
+P.crumbbreadth {
+ margin-top: 0.25em;
+}
+
+.compact {
+ margin-top: -0.5em;
+ text-indent: 0em;
+}
+
+SPAN.biblio {
+ font-style: italic;
+}
+
+SPAN.biblio A {
+ font-family: lucida, "Lucida Sans Unicode", Geneva, sans-serif;
+ font-weight: normal;
+ text-decoration: underline;
+}
+
+SPAN.availability {
+ font-family: lucidatypewriter, "Lucida Typewriter", Monaco, "Lucida Sans Unicode", monospace;
+ font-weight: normal;
+}
+
+UL {
+ list-style: outside;
+}
+
+UL.expand {
+ margin-bottom: 1em;
+}
+
+/* Font-level properties */
+
+PRE {
+ font-family: lucidatypewriter, "Lucida Typewriter", Monaco, "Lucida Sans Unicode", monospace;
+}
+
+STRONG, A {
+ font-family: lucidatypewriter, "Lucida Typewriter", Monaco, "Rockwell", "Lucida Sans Unicode", monospace;
+ font-weight: bold;
+}
+
+A:link {
+ color: #B00;
+}
+
+A:visited {
+ color: #903;
+}
+
+H1, H2, H3, H4, H5, H6 {
+ font-family: lucidatypewriter, "Lucida Typewriter", "Lucida Console", Monaco, monospace;
+}
+
+H1 A, H2 A, H3 A, H4 A, H5 A, H6 A {
+ font-family: lucidatypewriter, "Lucida Typewriter", "Lucida Console", Monaco, monospace;
+}
+
+H1 {
+ color: #338;
+}
+
+H2 {
+ color: #006;
+}
diff --git a/css/pubs.css b/css/pubs.css
@@ -0,0 +1,38 @@
+SPAN.title {
+ font-family: lucida, "Lucida Sans Unicode", Geneva, sans-serif;
+ font-weight: bold;
+}
+
+SPAN.author {
+ font-family: lucida, "Lucida Sans Unicode", Geneva, sans-serif;
+ font-weight: normal;
+}
+
+SPAN.availability {
+ font-family: lucidatypewriter, "Lucida Typewriter", Monaco, "Lucida Sans Unicode", monospace;
+ font-weight: normal;
+}
+
+SPAN.author A {
+ font-family: lucida, "Lucida Sans Unicode", Geneva, sans-serif;
+ font-weight: normal;
+}
+
+SPAN.biblio {
+ font-family: lucida, "Lucida Sans Unicode", Geneva, sans-serif;
+ font-style: italic;
+}
+
+SPAN.biblio A {
+ text-decoration: underline;
+}
+
+P.l1 {
+ margin-left: 0.5em;
+}
+
+P.l2 {
+ margin-left: 1em;
+ margin-top: 0.3em;
+ margin-bottom: 0.3em;
+}
diff --git a/perl-v2/BibTeX.pm b/perl-v2/BibTeX.pm
@@ -0,0 +1,303 @@
+package BibTeX;
+use Symbol 'qualify_to_ref';
+
+%bibtex_prototypes = ('string' => 'p', 'preamble' => 'v', '_' => 'kp*');
+
+sub parse_bibtex_key ($) {
+ my($fh) = @_;
+ $_ = <$fh> while ((/^\s+$/s || /^\s+%/) && !eof $fh);
+ if (/^\s*([^"#%'(),={}\s]+)(.*)/s) {
+ $_ = $2;
+ lc($1);
+ } else {
+ print STDERR "no key at line $.\n";
+ "";
+ }
+}
+
+sub parse_bibtex_value ($$) {
+ my($fh, $strings) = @_;
+ my($data) = "";
+ my($bracelevel, $line);
+
+ # loop over concatenation
+ while (1) {
+
+ # loop over lines
+ $_ = <$fh> while ((/^\s+$/s || /^\s+%/) && !eof $fh);
+ s/^\s+//;
+ if (eof $fh) {
+ print STDERR "unexpected end of file\n";
+ return $data;
+ }
+
+ # check type of thing
+ if (/^\"(.*)/s) {
+ $_ = $1;
+ $bracelevel = 0;
+ $line = $.;
+ while (1) {
+ if (!$bracelevel && /^([^{}\"]*)\"(.*)/s) {
+ $data .= $1;
+ $_ = $2;
+ last;
+ } elsif ($bracelevel && /^([^{}]*\})(.*)/s) {
+ $data .= $1;
+ $_ = $2;
+ $bracelevel--;
+ } elsif (/^([^{}]*\{)(.*)/s) {
+ $data .= $1;
+ $_ = $2;
+ $bracelevel++;
+ } else {
+ $data .= $_;
+ die "end of file within quotes started at line $line" if eof $fh;
+ $_ = <$fh>;
+ }
+ }
+
+ } elsif (/^\{(.*)/s) {
+ $_ = $1;
+ $bracelevel = 1;
+ $line = $.;
+ while ($bracelevel) {
+ if (/^([^{}]*)\}(.*)/s) {
+ $data .= $1;
+ $data .= "}" if $bracelevel > 1;
+ $_ = $2;
+ $bracelevel--;
+ } elsif (/^([^{}]*\{)(.*)/s) {
+ $data .= $1;
+ $_ = $2;
+ $bracelevel++;
+ } else {
+ $data .= $_;
+ die "end of file within braces started at line $line" if eof $fh;
+ $_ = <$fh>;
+ }
+ }
+
+ } elsif (/^\#/) {
+ # do nothing
+ print STDERR "warning: odd concatenation at line $.\n";
+ } elsif (/^[\},]/) {
+ print STDERR "no data after field at line $.\n" if $data eq '';
+ return $data;
+ } elsif (/^([^\s\},]+)(.*)/s) {
+ if ($strings->{lc($1)}) {
+ $data .= $strings->{lc($1)};
+ } else {
+ $data .= $1;
+ }
+ $_ = $2;
+ }
+
+ # got a single string, check for concatenation
+ $_ = <$fh> while ((/^\s+$/s || /^\s+%/) && !eof $fh);
+ s/^\s+//;
+ if (/^\#(.*)/s) {
+ $_ = $1;
+ } else {
+ return $data;
+ }
+ }
+}
+
+sub parse_bibtex_entry ($$$$) {
+ # uses caller's $_
+ my($fh, $name, $strings, $entries) = @_;
+ my($entryline) = $.;
+
+ $_ = <$fh> while /^\s+$/ && !eof $fh;
+ if (/^\s*\{(.*)/s) {
+ $_ = $1;
+ } else {
+ print STDERR "no open brace after \@$name starting at line $entryline\n";
+ return [];
+ }
+
+ # get prototype
+ my($prototype) = $bibtex_prototypes{$name};
+ $prototype = $bibtex_prototypes{'_'} if !defined $prototype;
+
+ # parse entry into `@v'
+ my(@v, $a, $b);
+ while (!eof $fh) {
+ $_ = <$fh> while /^\s*$/ && !eof $fh;
+ if (/^\s*\}(.*)/s) {
+ $_ = $1;
+ last;
+ } elsif ($prototype =~ /^k/) {
+ push @v, parse_bibtex_key($fh);
+ } elsif ($prototype =~ /^v/) {
+ push @v, parse_bibtex_value($fh, $strings);
+ } elsif ($prototype =~ /^p/) {
+ push @v, parse_bibtex_key($fh);
+ $_ = <$fh> while /^\s+$/ && !eof $fh;
+ s/^\s+\=?//;
+ push @v, parse_bibtex_value($fh, $strings);
+ }
+ $_ = <$fh> while /^\s*$/ && !eof $fh;
+ s/^\s*,?//;
+ $prototype = substr($prototype, 1)
+ if $prototype && $prototype !~ /^.\*/;
+ }
+ print STDERR "missing args to \@$name at line $.\n"
+ if $prototype && $prototype !~ /^.\*/;
+
+ # do something with entry
+ if ($name eq 'string') {
+ $strings->{$v[0]} = $v[1];
+ } elsif ($name eq 'preamble') {
+ # do nothing
+ } else {
+ my($key) = shift @v;
+ $entries->{$key} = {@v};
+ $entries->{$key}->{'_type'} = $name;
+ $entries->{$key}->{'_key'} = $key;
+ push @{$entries->{'_'}}, $key;
+ }
+}
+
+sub parse (*;\%) {
+ my($fh) = qualify_to_ref(shift, caller);
+ my($initial_strings) = @_;
+ my($strings) = $initial_strings;
+
+ my($curname, $garbage, %entries);
+ local($_) = '';
+ while (<$fh>) {
+
+ if (/^\s*[%\#]/ || /^\s*$/) {
+ # comment
+
+ } elsif (/^\s*\@([^\s\"\#%\'(),={}]+)(.*)/s) {
+ $curname = lc($1);
+ $_ = $2;
+ parse_bibtex_entry($fh, $curname, $strings, \%entries);
+
+ } else {
+ print STDERR "garbage at line $.\n" if !defined $garbage;
+ $garbage = 1;
+ }
+ }
+
+ \%entries;
+}
+
+sub expand ($$) {
+ my($e, $key) = @_;
+ my(%d) = %{$e->{$key}};
+ while ($d{'crossref'}) {
+ my($v) = $d{'crossref'};
+ delete $d{'crossref'};
+ %d = (%{$e->{$v}}, %d);
+ }
+ \%d;
+}
+
+
+sub split_von ($$$@) {
+ my($f, $v, $l, @x) = @_;
+ my(@pre, $t, $in_von, $tt);
+ while (@x) {
+ $t = $tt = shift @x;
+ if ($tt =~ /^\{\\/) {
+ $tt =~ s/\\[A-Za-z@]+//g;
+ $tt =~ s/\\.//g;
+ $tt =~ tr/{}//d;
+ }
+ if ($tt =~ /^[a-z]/) {
+ push @$v, $t;
+ $in_von = 1;
+ } elsif ($in_von || !ref($f)) {
+ push @$l, $t, @x;
+ return;
+ } else {
+ push @$f, $t;
+ }
+ }
+ if (!$in_von) {
+ push @$l, (pop @$f);
+ }
+}
+
+sub parse_author ($) {
+ local($_) = $_[0];
+ my(@x) = ();
+ my($pos, $pos0, $t, $bracelevel);
+
+ $bracelevel = 0;
+
+ # move text into @x
+ while (!/^\s*$/) {
+ s/^\s+//;
+ $pos = 0;
+ while ($pos < length) {
+ $t = substr($_, $pos, 1);
+ if ($t eq '{') {
+ $bracelevel++;
+ } elsif ($t eq '}') {
+ $bracelevel--;
+ } elsif ($bracelevel <= 0) {
+ last if ($t =~ /[\s,]/);
+ }
+ $pos++;
+ }
+
+ push @x, substr($_, 0, $pos);
+ if ($t eq ',') {
+ push @x, ',';
+ $pos++;
+ }
+ $_ = substr($_, $pos);
+ }
+
+ # split @x into arrays based on `and'
+ my(@aa) = ([]);
+ foreach $t (@x) {
+ if ($t eq 'and') {
+ push @aa, [] if @{$aa[-1]} > 0;
+ } else {
+ push @{$aa[-1]}, $t;
+ }
+ }
+
+ # massage each subarray into four parts: first, von, last, jr
+ my(@aaa) = ();
+ foreach $t (@aa) {
+ my(@fvl, @vl, @v, @l, @f, @j, $cur, $commas);
+ $cur = \@fvl; $commas = 0;
+
+ # split into subarrays if possible
+ foreach $x (@$t) {
+ if ($x eq ',') {
+ if ($commas == 0) {
+ @vl = @fvl;
+ @fvl = ();
+ $cur = \@f;
+ } else {
+ push @j, @f;
+ @f = ();
+ }
+ $commas++;
+ } else {
+ push @$cur, $x;
+ }
+ }
+
+ # split out the `von' part
+ if ($commas == 0) {
+ split_von(\@f, \@v, \@l, @fvl);
+ } else {
+ split_von(0, \@v, \@l, @vl);
+ }
+
+ # store as an array of arrays
+ push @aaa, [[@f], [@v], [@l], [@j]];
+ }
+
+ @aaa;
+}
+
+1;
diff --git a/perl-v2/PDOSBib.pm b/perl-v2/PDOSBib.pm
@@ -0,0 +1,233 @@
+package main;
+
+# maps regexps, which are applied to authors, to their home page URLs
+@author_urls =
+ (
+ 'Berthold' => 'http://page.inf.fu-berlin.de/~berthold/',
+ 'Chaum' => 'http://www.chaum.org',
+ 'Dingledine' => 'http://www.freehaven.net/~arma/cv.html',
+ 'Desmedt' => 'http://www.cs.fsu.edu/~desmedt/',
+ 'Jakobsson' => 'http://www.cs.ucsd.edu/users/markus/',
+ 'K.*Kurosawa' => 'http://kuro.cis.ibaraki.ac.jp/~kurosawa/',
+ 'Mathewson' => 'http://www.wangafu.net/~nickm/',
+ 'Mazières' => 'http://www.scs.cs.nyu.edu/~dm/',
+ 'A.*Pfitzmann' => 'http://dud.inf.tu-dresden.de/~pfitza/',
+ 'B.*Pfitzmann' => 'http://www.zurich.ibm.com/~bpf/',
+ 'Rivest' => 'http://theory.lcs.mit.edu/~rivest/',
+ 'Serjantov' => 'http://www.cl.cam.ac.uk/users/aas23/',
+ 'Syverson' => 'http://www.syverson.org/',
+ 'David.*Wagner' => 'http://www.cs.berkeley.edu/~daw/',
+ 'Shoup' => 'http://www.shoup.net/',
+ 'B.*Möller' => 'http://www.informatik.tu-darmstadt.de/TI/Mitarbeiter/moeller.html',
+
+
+# From the old PDOS file...
+ 'Engler' => 'http://www.pdos.lcs.mit.edu/~engler/',
+ 'Kaashoek' => 'http://www.pdos.lcs.mit.edu/~kaashoek/',
+ 'Blake' => 'http://www.pdos.lcs.mit.edu/cb/',
+
+ 'Ganger' => 'http://www.ece.cmu.edu/~ganger/',
+ 'Grimm' => 'http://www.cs.washington.edu/homes/rgrimm/',
+ 'Hsieh' => 'http://www2.cs.utah.edu/~wilson/',
+ 'Briceño' => 'http://mit.edu/hbriceno/www/',
+ 'Wallach' => 'http://www.pdos.lcs.mit.edu/~kerr/',
+ 'Candea' => 'http://www.cs.stanford.edu/~candea/',
+ 'Kohler' => 'http://www.pdos.lcs.mit.edu/~eddietwo/',
+ 'Kirk.*Johnson' => 'http://www.cs.colorado.edu/~tuna/',
+ 'Weihl' => 'http://www.research.digital.com/SRC/staff/weihl/',
+ 'Nygren' => 'http://www.mit.edu/people/nygren/',
+ 'Anthony.*Joseph' => 'http://www.cs.berkeley.edu/~adj/',
+ 'Poletto' => 'http://www.pdos.lcs.mit.edu/~maxp/',
+ 'Kaminsky' => 'http://www.pdos.lcs.mit.edu/~kaminsky/',
+ 'Morris' => 'http://www.pdos.lcs.mit.edu/~rtm/',
+ 'Jannotti' => 'http://www.jannotti.com/',
+ 'Benjie' => 'http://www.pdos.lcs.mit.edu/~benjie/',
+ 'Jinyang' => 'http://www.pdos.lcs.mit.edu/~jinyang/',
+ 'Douglas.*outo' => 'http://www.pdos.lcs.mit.edu/~decouto/',
+ 'Kevin.*Fu' => 'http://snafu.fooworld.org/~fubob/',
+ 'Karger' => 'http://theory.lcs.mit.edu/~karger/',
+ 'Dabek' => 'http://pdos.lcs.mit.edu/~fdabek/',
+ 'Brunskill' => 'http://pdos.lcs.mit.edu/~emma/',
+ 'Balakrishnan' => 'http://nms.lcs.mit.edu/~hari/',
+ 'Stoica' => 'http://www.cs.berkeley.edu/~istoica/',
+ 'Andersen' => 'http://nms.lcs.mit.edu/~dga/',
+ 'Snoeren' => 'http://nms.lcs.mit.edu/~snoeren/',
+ 'Freedman' => 'http://www.pdos.lcs.mit.edu/~mfreed/',
+ 'Emil.*Sit' => 'http://www.mit.edu/~sit/',
+ 'Nick.*Feamster' => 'http://nms.lcs.mit.edu/~feamster/',
+ );
+
+# don't print entries for these types, which are only used for crossreferences
+%dont_print =
+ ('proceedings' => 1, 'journal' => 1);
+
+%initial_strings =
+ ('jan' => 'January', 'feb' => 'February',
+ 'mar' => 'March', 'apr' => 'April',
+ 'may' => 'May', 'jun' => 'June',
+ 'jul' => 'July', 'aug' => 'August',
+ 'sep' => 'September', 'oct' => 'October',
+ 'nov' => 'November', 'dec' => 'December');
+
+
+sub dont_print ($) {
+ my($d) = @_;
+ $dont_print{$d->{'_type'}} ||
+ ($d->{'www_show'} && ($d->{'www_show'} eq 'no'));
+}
+
+sub htmlize ($) {
+ my($x) = @_;
+ $x =~ s/&([^a-z0-9])/&$1/g;
+ $x =~ s/\\i([^a-zA-Z@])/i$1/g;
+ $x =~ s/\\'(.)/&$1acute;/g;
+ $x =~ s/\\`(.)/&$1grave;/g;
+ $x =~ s/\\~(.)/&$1tilde;/g;
+ $x =~ s/\\\^(.)/&$1circ;/g;
+ $x =~ s/\\"(.)/&$1uml;/g;
+ $x =~ s/\\[a-zA-Z@]+//g;
+ $x =~ s/\\.//g;
+ $x =~ tr/{}//d;
+ $x =~ s/(\d)--(\d)/$1-$2/g;
+ $x;
+}
+
+sub htmlize_author ($) {
+ my($aaa) = @_;
+ my($x) = join(' ', @{$aaa->[0]}, @{$aaa->[1]}, @{$aaa->[2]});
+ if (@{$aaa->[3]}) {
+ $x .= ', ' . join(' ', @{$aaa->[3]});
+ }
+ htmlize($x);
+}
+
+sub push_availability ($$\@$) {
+ my($d, $key, $availability, $name) = @_;
+ if ($d->{$key}) {
+ my($url) = $d->{$key};
+ $url = $server_url . $url if $url =~ /^\//;
+ push @$availability, '<a href="' . $url . '">' . $name . '</a>';
+ }
+}
+
+sub htmlize_biblio_info ($) {
+ my($d) = @_;
+ my($_type) = $d->{'_type'};
+ my($x, $i);
+
+ if ($_type eq 'inproceedings') {
+ $x = "In the " . $d->{'booktitle'};
+ if ($d->{'bookurl'}) {
+ if ($x =~ /^(in the proceedings of( the)? )(.*)/i
+ || $x =~ /^(in the workshop record of( the)? )(.*)/i) {
+ $x = $1 . "<a href=\"$d->{'bookurl'}\">" . $3 . "</a>";
+ } else {
+ $x = "In the <a href=\"$d->{'bookurl'}\">$d->{'booktitle'}</a>";
+ }
+ }
+ $x .= ", " . $d->{'edition'} if $d->{'edition'};
+ $x .= ", " . $d->{'address'} if $d->{'address'};
+ $x .= ", " . ($d->{'month'} or "") . " " . ($d->{'year'} or "")
+ if $d->{'month'} || $d->{'year'};
+ $x .= ($d->{'pages'} =~ /^\d+$/ ? ", page " : ", pages ")
+ . $d->{'pages'} if $d->{'pages'};
+
+ } elsif ($_type eq 'article') {
+ $x = "In " . $d->{'journal'};
+ if ($d->{'journalurl'}) {
+ $x =~ s/^(in )(.*)$/$1<a href="$d->{'journalurl'}">$2<\/a>/;
+ }
+ $x .= " <b>" . $d->{'volume'} . "</b>" if $d->{'volume'};
+ $x .= "(" . $d->{'number'} . ")" if $d->{'number'};
+ $x .= ", " . ($d->{'month'} or "") . " " . ($d->{'year'} or "")
+ if $d->{'month'} || $d->{'year'};
+ $x .= ($d->{'pages'} =~ /^\d+$/ ? ", page " : ", pages ")
+ . $d->{'pages'} if $d->{'pages'};
+
+ } elsif ($_type eq 'techreport') {
+ $x = $d->{'institution'};
+ $x .= " " . ($d->{'type'} ? $d->{'type'} : "technical report");
+ $x .= " " . $d->{'number'};
+ $x .= ", " . $d->{'month'} . " " . $d->{'year'}
+ if $d->{'month'} || $d->{'year'};
+
+ } elsif ($_type eq 'mastersthesis' || $_type eq 'phdthesis') {
+ $x = ($_type eq 'mastersthesis' ? "Master's thesis" : "Ph.D. thesis");
+ $x = $d->{'type'} if $d->{'type'};
+ $x .= ", " . $d->{'school'} if $d->{'school'};
+ $x .= ", " . $d->{'month'} . " " . $d->{'year'}
+ if $d->{'month'} || $d->{'year'};
+
+ } elsif ($_type eq 'misc') {
+ $x = $d->{'howpublished'};
+ $x .= ", " . $d->{'month'} . " " . $d->{'year'}
+ if $d->{'month'} || $d->{'year'};
+ $x .= ($d->{'pages'} =~ /^\d+$/ ? ", page " : ", pages ")
+ . $d->{'pages'} if $d->{'pages'};
+
+ } else {
+ $x = "<odd type $_type>";
+ }
+
+ $x = '<span class="biblio">' . ($x or "") . ".</span> ";
+ $x .= "<span class=\"availability\">(<a href=\"$cgi_dir/bibtex-entry.cgi?key=";
+ $x .= $d->{'_key'} . "\">BibTeX entry</a>)</span>";
+ htmlize($x);
+}
+
+sub htmlize_entry ($) {
+ my($d) = @_;
+ my(@availability, @a, $a, $i, $j, $x);
+
+ # print title
+ $x .= '<li><p class="entry"><span class="title">' . htmlize($d->{'title'}) . ".</span>";
+
+ # print availability
+ @availability = ();
+ push_availability $d, 'www_abstract_url', @availability, 'abstract';
+ push_availability $d, 'www_html_url', @availability, 'HTML';
+ push_availability $d, 'www_txt_url', @availability, 'TXT';
+ push_availability $d, 'www_pdf_url', @availability, 'PDF';
+ push_availability $d, 'www_ps_url', @availability, 'PS';
+ push_availability $d, 'www_ps_gz_url', @availability, 'gzipped PS';
+ if (@availability) {
+ $x .= ' <span class="availability">(';
+ $x .= join(', ', @availability) . ")</span>";
+ }
+ $x .= "<br>\n";
+
+ # print authors
+ $x .= '<span class="author">by ';
+ @a = BibTeX::parse_author($d->{'author'});
+ foreach $i (0..$#a) {
+ $x .= ", " if ($i > 0 && $i < $#a);
+ $x .= " and " if ($i == $#a && $#a == 1);
+ $x .= ", and " if ($i == $#a && $#a > 1);
+ $a = htmlize_author($a[$i]);
+ for ($j = 0; $j < @author_urls; $j += 2) {
+ if ($a =~ /$author_urls[$j]/) {
+ $x .= '<a href="' . $author_urls[$j+1] . '">' . $a . '</a>';
+ undef $a;
+ last;
+ }
+ }
+ $x .= $a if defined $a;
+ }
+ $x .= "." if (defined $a and $a !~ /\.$/);
+ $x .= "</span><br>\n";
+
+ $x .= htmlize_biblio_info($d);
+ $x .= "</p></li>\n\n";
+
+ $x;
+}
+
+
+sub url_untranslate ($) {
+ my($x) = $_[0];
+ $x =~ s/ /+/g;
+ $x =~ s/([%<>])/sprintf("%02x", chr($1))/eg;
+ $x;
+}
+
+1;
diff --git a/perl-v2/PDOSCGI.pm b/perl-v2/PDOSCGI.pm
@@ -0,0 +1,69 @@
+package main;
+
+#####
+# SERVER DATA
+
+$server_url = "http://www.pdos.lcs.mit.edu";
+$img_dir = "/img";
+$cgi_dir = "/cgi-bin";
+$main_dir = ""; # == top dir
+$css_dir = ""; # == top dir
+#$pdos_bib_dir = "/home/am0/httpd/htdocs/pdosbib";
+$pdos_bib_dir = ".";
+
+
+#####
+# ERROR_EXIT
+# &error_exit($title, $message...) prints an HTML document summarizing the
+# error and exits.
+
+sub error_exit ($@) {
+ my($title) = $_[0];
+ my($message) = join('', @_[1..$#_]);
+ print <<"EOD;";
+Content-type: text/html
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head><title>PDOS CGI Error</title></head>
+<body>
+
+<h1>$title</h1>
+
+<p>$message
+
+<p><a href="$server_url">PDOS home page</a>
+
+</body>
+</html>
+EOD;
+ exit 0;
+}
+
+#####
+# HTTP_DATE
+# Given a time value (seconds since 00:00:00 UTC, Jan 1, 1970), formats an
+# HTTP date and returns it. Useful for Expires:.
+
+@PDOSCGI::weekdays = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
+@PDOSCGI::months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
+
+sub http_date ($) {
+ my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+ gmtime($_[0]);
+ sprintf("%s, %02d %s %d %02d:%02d:%02d GMT",
+ $PDOSCGI::weekdays[$wday], $mday, $PDOSCGI::months[$mon],
+ $year, $hour, $min, $sec);
+}
+
+#####
+# URL_TRANSLATE
+
+sub url_translate ($) {
+ my($x) = $_[0];
+ $x =~ s/\+/ /g;
+ $x =~ s/%(\w\w)/pack('C', hex($1))/eg;
+ $x;
+}
+
+1;
diff --git a/perl-v2/bibtex-entry.cgi b/perl-v2/bibtex-entry.cgi
@@ -0,0 +1,206 @@
+#!/usr/bin/perl
+# CGI script: PDOS publication BibTeX entry
+# Eddie Kohler, June 10, 1999
+
+use lib '/home/am3/httpd/htdocs/pdosbib';
+#use lib '/u/eddietwo/www/pdos/pdosbib';
+use BibTeX;
+use PDOSCGI;
+
+%initial_strings =
+ ('jan' => 'January', 'feb' => 'February',
+ 'mar' => 'March', 'apr' => 'April',
+ 'may' => 'May', 'jun' => 'June',
+ 'jul' => 'July', 'aug' => 'August',
+ 'sep' => 'September', 'oct' => 'October',
+ 'nov' => 'November', 'dec' => 'December');
+
+open(BIB, "$pdos_bib_dir/pdos.bib")
+ || error_exit("Can't open <tt>pdos.bib</tt>!");
+$e = BibTeX::parse(*BIB, %initial_strings);
+close BIB;
+
+#####
+# PROCESS_QUERY
+
+sub process_query ($) {
+ my($q) = $_[0];
+ while ($q =~ /^\&?([^\&]+)(.*)/) {
+ $_ = url_translate($1);
+ $q = $2;
+ if (/^key=(.*)$/) {
+ $bibtex_key = $1;
+ } else {
+ error_exit('Bad Query', <<"EOD;");
+I don't understand part of your query -- specifically, the ``<tt>$_</tt>''
+part.
+EOD;
+ }
+ }
+}
+
+
+##
+# INITIALIZATION & READING
+
+$index_url = "http://$ENV{'SERVER_NAME'}$ENV{'REQUEST_URI'}";
+$index_url =~ s#/[^/]+$#/#;
+
+&process_query($ENV{'QUERY_STRING'}) if exists $ENV{'QUERY_STRING'};
+
+print <<"EOD;";
+Content-type: text/html
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+
+<!-- Generated by `bibtex-entry.cgi'
+ -- (c) Eddie Kohler 1999-2000 -->
+
+<title>PDOS Publications Search Results</title>
+
+<link rel="stylesheet" type="text/css" href="$css_dir/main.css">
+<link rel="stylesheet" type="text/css" href="$css_dir/pubs.css">
+
+</head>
+<body bgcolor="#ffffff" text="#000000" link="#bb0000" vlink="#990099"
+alink="#ff9900" marginheight="0" marginwidth="0">
+
+<table cellspacing="0" cellpadding="0" border="0" align="center">
+
+<tr valign="top">
+<td rowspan="8" width="134"><div align="right"><a href="/"><img
+src="/img/pdostab.gif" width="134" height="61" border="0"
+alt="PDOS Home"></a></div></td>
+<td rowspan="8" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td rowspan="4" width="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+<td rowspan="6" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td bgcolor="#ffffcc"><p> <a href="http://web.mit.edu/">MIT</a> > <a href="http://www.lcs.mit.edu/">LCS</a> > <a href="/">PDOS Home</a> > </p></td>
+<td bgcolor="#ffffcc"><p><a href="$main_dir/pubs.html">Publications</a> > </p></td>
+<td bgcolor="#ffffcc"><p><b>BibTeX entry</b></p></td>
+</tr>
+
+<tr valign="top">
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p class="crumbbreadth">
+<a href="$main_dir/projects.html">Projects</a><br>
+<a href="$main_dir/people.html">People</a><br>
+<a href="$main_dir/software.html">Software</a></p></td>
+<td bgcolor="#ffffcc"><p class="crumbbreadth">
+<a href="$main_dir/pubs.html">By subject</a><br>
+<a href="/cgi-bin/pubs-date.cgi">By date</a><br>
+</p></td>
+</tr>
+
+<tr valign="top">
+<td colspan="2" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="1" height="8" alt=""></td>
+<td height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="100" height="8" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td colspan="4" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td rowspan="2" colspan="3" bgcolor="#ccffff"><form action="/cgi-bin/pubs-date.cgi"
+method="get"><strong> Publication
+search:</strong><small> <input type=entry
+name=match size=15> <input type=submit
+value="Go"><br></small></form></td>
+
+<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+</tr>
+
+<tr valign="bottom">
+<td rowspan="2" colspan="2" width="9" height="9" bgcolor="#ccffff" background="/img/nineborder.gif"><img src="/img/whitecorner.gif" width="9" height="9" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td colspan="3" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+</table>
+
+
+<table cellspacing="0" cellpadding="0" border="0" width="100%">
+
+<tr valign="top">
+<td width="15%" height="24"><br></td>
+</tr>
+
+<tr valign="top">
+<td></td>
+
+<td width="70%">
+
+EOD;
+
+$type = ($bibtex_key ? "<tt>`$bibtex_key'</tt>" : "all entries");
+print "<h1>BibTeX entry server: results for $type</h1>\n";
+
+sub break_lines ($$) {
+ my($t, $l) = @_;
+ my($s, $f, $p, $x) = (0, 0, 0, "");
+ while ($p < length $t) {
+ if (substr($t, $p, 1) =~ /\s/) {
+ $s = $p;
+ } elsif ($f + $l <= $p && $s > $f) {
+ $x .= substr($t, $f, $s - $f) . "\n";
+ $s = $f = $s + 1;
+ }
+ $p++;
+ }
+ $x .= substr($t, $f);
+ $x;
+}
+
+if ($bibtex_key && $e->{$bibtex_key}) {
+ $d = BibTeX::expand($e, $bibtex_key);
+ $k = "\@" . $d->{'_type'} . "{" . $bibtex_key . ",\n";
+ foreach $i ('title', 'author', 'journal', 'booktitle', 'school', 'institution', 'organization', 'volume', 'number', 'year', 'month', 'address', 'chapter', 'edition', 'pages', 'editor', 'howpublished', 'key', 'publisher', 'type', 'note') {
+ if (exists $d->{$i}) {
+ $k .= break_lines(" " . $i . " = {" . $d->{$i} . "},\n", 80);
+ }
+ }
+ $k .= "}\n";
+} elsif ($bibtex_key) {
+ print "<p>There is no PDOS paper with key `<tt>$bibtex_key</tt>'.\n";
+ undef $k;
+} else {
+ $k = `cat pdos.bib`;
+}
+if (defined $k) {
+ $k =~ s/&/&/g;
+ $k =~ s/</</g;
+ $k =~ s/>/>/g;
+ print "<p><pre>$k</pre>\n";
+}
+
+
+print <<"EOD;";
+</td>
+
+<td width="15%"><br></td>
+
+</tr>
+</table>
+
+</body>
+</html>
+EOD;
diff --git a/perl-v2/mkpdospubs.pl b/perl-v2/mkpdospubs.pl
@@ -0,0 +1,242 @@
+#!/usr/local/bin/perl -w
+# ***
+# *** CGI script: static PDOS publication list
+# *** Eddie Kohler, June 10, 1999
+# ***
+# *** Take a look at PDOSBib.pm
+# *** to change things like people's URLs
+# *** and how different bibliography entries are generated
+# ***
+# *** Take a look at PDOSCGI.pm
+# *** to change where files are located
+# ***
+
+#use lib '/home/am0/httpd/htdocs/pdosbib';
+use BibTeX;
+use PDOSBib;
+use PDOSCGI;
+
+sub do_entries () {
+ my($section, $key, $d);
+ foreach $section (@sections) {
+ # print section header
+ print '<h3><a name="', url_untranslate($section), '">';
+ print $section, "</a></h3>\n";
+ print "<ul class=\"expand\">\n";
+
+ # print all papers in that section
+ foreach $key (@{$e->{'_'}}) {
+ $d = BibTeX::expand($e, $key);
+ next if dont_print($d) || $d->{'www_section'} ne $section;
+ print htmlize_entry $d;
+ }
+
+ print "</ul>\n";
+ }
+}
+
+
+sub do_sections () {
+ foreach $section (@sections) {
+ print '<p class="l2"><a href="#', url_untranslate($section);
+ print '">', $section, "</a></p>\n";
+ }
+}
+
+
+# main program
+if (@ARGV > 0) {
+ open(BIB, $ARGV[0]) || die "can't open $ARGV[0]";
+} else {
+ open(BIB, "<&STDIN");
+}
+$e = BibTeX::parse(*BIB, %initial_strings);
+close BIB;
+
+if (@ARGV > 1) {
+ open(STDOUT, ">$ARGV[1]") || die "can't open $ARGV[1]";
+}
+
+# make sections
+@sections = ();
+foreach $key (@{$e->{'_'}}) {
+ next if dont_print($e->{$key});
+ $section = $e->{$key}->{'www_section'};
+ if (not $section) {
+ $e->{$key}->{'www_section'} = $section = "Miscellaneous";
+ }
+
+ if (!exists $sections{$section}) {
+ push @sections, $section if $section ne '';
+ $sections{$section} = 1;
+ }
+}
+push @sections, 'Miscellaneous'
+ if $sections{''} && !$sections{'Miscellaneous'};
+
+## PRINT STUFF!
+$argv_string = join(' ', 'mkpdospubs.pl', @ARGV);
+print <<"EOD;";
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+
+<!-- *** I AM MACHINE GENERATED! DO NOT EDIT ME!
+ -- *** EDIT THE .bib FILE INSTEAD!
+ --
+ -- Generated by `$argv_string'
+ -- (c) Eddie Kohler 1999-2000 -->
+
+<title>Anonymity Bibliography</title>
+
+<link rel="stylesheet" type="text/css" href="main.css">
+<link rel="stylesheet" type="text/css" href="pubs.css">
+
+</head>
+<body bgcolor="#ffffff" text="#000000" link="#bb0000" vlink="#990099"
+alink="#ff9900" marginheight="0" marginwidth="0">
+
+<table cellspacing="0" cellpadding="0" border="0" align="center">
+
+<!--
+<tr valign="top">
+<td rowspan="5" width="134"><div align="right"><a href="/"><img
+src="/img/pdostab.gif" width="134" height="61" border="0"
+alt="PDOS Home"></a></div></td>
+<td rowspan="5" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td rowspan="3" width="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+<td rowspan="3" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td bgcolor="#ffffcc"><p> <a href="http://web.mit.edu/">MIT</a> > <a href="http://www.lcs.mit.edu/">LCS</a> > <a href="/">PDOS Home</a> > </p></td>
+<td bgcolor="#ffffcc"><p><b>Publications</b> > </p></td>
+<td bgcolor="#ffffcc"><p><b>By subject</b></p></td>
+</tr>
+
+<tr valign="top">
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p class="crumbbreadth">
+<a href="projects.html">Projects</a><br>
+<a href="people.html">People</a><br>
+<a href="software.html">Software</a></p></td>
+<td bgcolor="#ffffcc"><p class="crumbbreadth">
+<a href="/cgi-bin/pubs-date.cgi">By date</a></p></td>
+</tr>
+
+<tr valign="top">
+<td colspan="2" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="1" height="8" alt=""></td>
+<td colspan="1" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="100" height="8" alt=""></td>
+<td colspan="2" rowspan="2" width="9" height="9" bgcolor="#ffffcc"><img
+src="/img/whitecorner.gif" width="9" height="9" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td colspan="3" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+</table>
+-->
+
+<h1 align="center">Anonymity bibliography</h1>
+<p align="center">By subject | <a href="/cgi-bin/pubs-date.cgi">By date</a></p>
+
+<table cellspacing="0" cellpadding="0" border="0" width="100%">
+
+<tr valign="top">
+<td width="10%" height="24"><br></td>
+</tr>
+
+<tr valign="top">
+<td><div align="right">
+<table cellspacing="0" cellpadding="0" border="0" width="161">
+
+<tr valign="top">
+<td rowspan="6" width="8"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+<td colspan="4" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td rowspan="5" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+
+<td bgcolor="#ccffff"><p class="l1"><br><form action="/cgi-bin/pubs-date.cgi"
+method="get"><strong>Publication search:</strong><br>
+<small><input type=entry name=match size=15> <input type=submit
+value="Go"><br></small></form></p></td>
+
+<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+<td rowspan="3" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+<td rowspan="3" width="12"><img src="/img/emptydot.gif"
+width="12" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td colspan="2" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td bgcolor="#ccffff"><p class="l1"><br><form action="/cgi-bin/pubs-date.cgi"
+method="get"><strong>Subjects:</strong><br>
+EOD;
+
+## PRINT SECTIONS
+do_sections;
+
+print <<"EOD;";
+</p></td>
+
+<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td height="8" bgcolor="#ccffff"><img src="/img/emptydot.gif"
+width="1" height="8" alt=""></td>
+<td colspan="2" rowspan="2" width="9" height="9" bgcolor="#ccffff"><img
+src="/img/whitecorner.gif" width="9" height="9" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+</table>
+</div></td>
+
+<td width="75%">
+
+<h2>Publications by subject</h2>
+
+EOD;
+
+## PRINT ENTRIES
+do_entries;
+
+print <<"EOD;";
+</td>
+
+<td width="15%"><br></td>
+
+</tr>
+</table>
+
+</body>
+</html>
+EOD;
diff --git a/perl-v2/pubs-date.cgi b/perl-v2/pubs-date.cgi
@@ -0,0 +1,288 @@
+#!/usr/local/bin/perl -wT
+# CGI script: PDOS publications by date
+# Eddie Kohler, June 10, 1999
+
+#use lib '.';
+#use lib '/home/am0/httpd/htdocs/pdosbib';
+#use lib '/u/eddietwo/www/pdos/pdosbib';
+use BibTeX;
+use PDOSBib;
+use PDOSCGI;
+
+%date_back =
+ ('January' => 1, 'February' => 2,
+ 'March' => 3, 'April' => 4,
+ 'May' => 5, 'June' => 6,
+ 'July' => 7, 'August' => 8,
+ 'September' => 9, 'October' => 10,
+ 'November' => 11, 'December' => 12);
+
+sub do_entries () {
+ my($key, $d, @x, @d, @date, @permute, $x, $y, $i, $ever);
+ my($current_year) = (gmtime())[5] + 1900;
+
+ foreach $key (@{$e->{'_'}}) {
+ $d = BibTeX::expand($e, $key);
+ next if dont_print($d);
+ $x = $y = htmlize_entry $d;
+ if (defined $match) {
+ $y =~ s/&([\w])\w+;/$1/g;
+ $y =~ s/<.*?>//g;
+ next if !&matcher($y);
+ }
+ push @x, $x;
+ push @d, $d;
+ if ($d->{'year'} and $d->{'year'} =~ /to appear/i) {
+ push @date, 12*$current_year + 12;
+ $d->{'_show_year'} = $current_year;
+ } elsif ($d->{'year'}) {
+ push @date, 12*$d->{'year'} + $date_back{($d->{'month'} or "January")};
+ $d->{'_show_year'} = ($d->{'year'} ? $d->{'year'} : 'unknown');
+ } else {
+ push @date, 0;
+ $d->{'_show_year'} = "(No date)";
+ }
+ push @permute, $#x;
+ }
+
+ # permute the list, sort by date
+ @permute = reverse sort { $date[$a] <=> $date[$b] } @permute;
+ undef $y;
+
+ # print entries
+ foreach $i (@permute) {
+ $d = $d[$i];
+ if ($d->{'_show_year'} and $d->{'_show_year'} ne $y || !$ever) {
+ print "</ul>\n" if $ever;
+ $y = $d->{'_show_year'};
+ $ever = 1;
+ print "<h2>$y</h2>\n<ul class=\"expand\">\n";
+ }
+ print $x[$i];
+ }
+
+ print "</ul>\n" if $ever;
+ print "No matches.\n" if !$ever;
+}
+
+#####
+# PROCESS_QUERY
+
+sub process_query ($) {
+ my($q) = $_[0];
+ while ($q =~ /^\&?([^\&]+)(.*)/) {
+ $_ = url_translate($1);
+ $q = $2;
+ if (/^match=(.*)$/) {
+ $match = $1;
+ $match =~ s/\///g;
+ # my name gets mangled a lot... decouto
+ $match =~ s/decouto/De Couto/i;
+ } else {
+ error_exit('Bad Query', <<"EOD;");
+I don't understand part of your query -- specifically, the ``<tt>$_</tt>''
+part.
+EOD;
+ }
+ }
+}
+
+##
+# INITIALIZATION & READING
+
+$index_url = "http://$ENV{'SERVER_NAME'}$ENV{'REQUEST_URI'}";
+$index_url =~ s#/[^/]+$#/#;
+
+&process_query($ENV{'QUERY_STRING'}) if exists $ENV{'QUERY_STRING'};
+
+## PRINT DATA
+
+$| = 1;
+print <<"EOD;";
+Content-type: text/html
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+
+<!-- Generated by `pubs-date.cgi'
+ -- (c) Eddie Kohler 1999-2000 -->
+
+<title>Anonymity Bibliography: Search Results</title>
+
+<link rel="stylesheet" type="text/css" href="$css_dir/main.css">
+<link rel="stylesheet" type="text/css" href="$css_dir/pubs.css">
+
+</head>
+<body bgcolor="#ffffff" text="#000000" link="#bb0000" vlink="#990099"
+alink="#ff9900" marginheight="0" marginwidth="0">
+
+<!--
+<table cellspacing="0" cellpadding="0" border="0" align="center">
+
+<tr valign="top">
+<td rowspan="8" width="134"><div align="right"><a href="/"><img
+src="/img/pdostab.gif" width="134" height="61" border="0"
+alt="PDOS Home"></a></div></td>
+<td rowspan="8" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td rowspan="4" width="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+<td rowspan="6" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td bgcolor="#ffffcc"><p> <a href="http://web.mit.edu/">MIT</a> > <a href="http://www.lcs.mit.edu/">LCS</a> > <a href="/">PDOS Home</a> > </p></td>
+<td bgcolor="#ffffcc"><p><a href="$main_dir/pubs.html">Publications</a> > </p></td>
+EOD;
+
+if (defined($match)) {
+ print '<td bgcolor="#ffffcc"><p><b>Search results</b></p></td>', "\n";
+} else {
+ print '<td bgcolor="#ffffcc"><p><b>By date</b></p></td>', "\n";
+}
+
+print <<"EOD;";
+</tr>
+
+<tr valign="top">
+<td bgcolor="#ffffcc"><p><br></p></td>
+<td bgcolor="#ffffcc"><p class="crumbbreadth">
+<a href="$main_dir/projects.html">Projects</a><br>
+<a href="$main_dir/people.html">People</a><br>
+<a href="$main_dir/software.html">Software</a></p></td>
+<td bgcolor="#ffffcc"><p class="crumbbreadth">
+EOD;
+
+if (defined($match)) {
+ print '<a href="', $main_dir, '/pubs.html">All by subject</a><br>', "\n";
+ print '<a href="/cgi-bin/pubs-date.cgi">All by date</a><br>', "\n";
+} else {
+ print '<a href="', $main_dir, '/pubs.html">By subject</a><br>', "\n";
+}
+
+print <<"EOD;";
+</p></td>
+</tr>
+
+<tr valign="top">
+<td colspan="2" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="1" height="8" alt=""></td>
+<td height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif"
+width="100" height="8" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td colspan="4" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td rowspan="2" colspan="3" bgcolor="#ccffff"><form action="/cgi-bin/pubs-date.cgi"
+method="get"><strong> Publication
+search:</strong><small> <input type="entry"
+name="match" size="15" value="$match"> <input type="submit"
+value="Go"><br></small></form></td>
+
+<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif"
+width="8" height="1" alt=""></td>
+</tr>
+
+<tr valign="bottom">
+<td rowspan="2" colspan="2" width="9" height="9" bgcolor="#ccffff" background="/img/nineborder.gif"><img src="/img/whitecorner.gif" width="9" height="9" alt=""></td>
+</tr>
+
+<tr valign="top">
+<td colspan="3" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif"
+width="1" height="1" alt=""></td>
+</tr>
+
+</table>
+-->
+
+<h1 align="center">Anonymity Bibliography</h1>
+<form action="/cgi-bin/pubs-date.cgi" method="get">
+<p align="center"><strong><a href="$main_dir/pubs.html">By subject</a> |
+ <a href="$main_dir/pubs-date.cgi">By date</a> |
+ Search:<small> <input type="entry" name="match" size="15" value="$match">
+ <input type="submit" value="Go"><br></small></strong>
+</p></form>
+
+
+<table cellspacing="0" cellpadding="0" border="0" width="100%">
+
+<tr valign="top">
+<td width="15%" height="24"><br></td>
+</tr>
+
+<tr valign="top">
+<td></td>
+
+<td width="70%">
+
+EOD;
+
+if (defined($match)) {
+ print "<h2>Publications matching `<tt>$match</tt>'</h2>\n";
+} else {
+ print "<h2>Publications by date</h2>\n";
+}
+
+$| = 0;
+
+open(BIB, "$pdos_bib_dir/anonbib.bib")
+ || error_exit("Can't open <tt>$pdos_bib_dir/anonbib.bib</tt>!");
+$e = BibTeX::parse(*BIB, %initial_strings);
+close BIB;
+
+# make sections
+foreach $key (@{$e->{'_'}}) {
+ next if dont_print($e->{$key});
+ $e->{$key}->{'www_section'} = "Miscellaneous"
+ if (not $e->{$key}->{'www_section'});
+}
+
+if (defined($match)) {
+ $sub = 'sub main::matcher ($) { 1';
+ if ($match =~ /[\.\^\$\[\](){}*|]/) {
+ $sub .= " && \$_[0] =~ /$match/oi";
+ } elsif ($match eq ':abstract:') {
+ $sub .= " && \$_[0] =~ /\\(abstract\\b/oi";
+ } else {
+ $_ = $match;
+ s/\+//;
+ while ($_ ne '') {
+ s/^\s+//;
+ if (/^\"([^\"]+)(.*)/) {
+ $sub .= " && \$_[0] =~ /$1/oi";
+ $_ = $2;
+ $_ =~ s/^\"//;
+ } elsif (/^\"\"(.*)/) {
+ $_ = $2;
+ } elsif (/^(\S+)(.*)/) {
+ $sub .= " && \$_[0] =~ /$1/oi";
+ $_ = $2;
+ }
+ }
+ }
+ eval "$sub; }";
+}
+
+do_entries;
+
+print <<"EOD;";
+</td>
+
+<td width="15%"><br></td>
+
+</tr>
+</table>
+
+</body>
+</html>
+EOD;
diff --git a/perl/mkpdospubs.pl b/perl/mkpdospubs.pl
@@ -1,4 +1,4 @@
-v#!/usr/local/bin/perl
+#!/usr/local/bin/perl
# ***
# *** CGI script: static PDOS publication list
# *** Eddie Kohler, June 10, 1999