gnunetbib

Bibliography (BibTeX, based on AnonBib)
Log | Files | Refs | README | LICENSE

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:
MBibTeX.py | 6+++++-
Aanonbib.bib | 789+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acss/main.css | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Acss/pubs.css | 38++++++++++++++++++++++++++++++++++++++
Aperl-v2/BibTeX.pm | 303+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aperl-v2/PDOSBib.pm | 233+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aperl-v2/PDOSCGI.pm | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aperl-v2/bibtex-entry.cgi | 206+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aperl-v2/mkpdospubs.pl | 242+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aperl-v2/pubs-date.cgi | 288+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mperl/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&egrave;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&ouml;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&ntilde;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])/&amp;$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&nbsp;" : ", pages&nbsp;") + . $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&nbsp;" : ", pages&nbsp;") + . $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&nbsp;" : ", pages&nbsp;") + . $d->{'pages'} if $d->{'pages'}; + + } else { + $x = "&lt;odd type $_type&gt;"; + } + + $x = '<span class="biblio">' . ($x or "") . ".</span> "; + $x .= "<span class=\"availability\">(<a href=\"$cgi_dir/bibtex-entry.cgi?key="; + $x .= $d->{'_key'} . "\">BibTeX&nbsp;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&nbsp;PS'; + if (@availability) { + $x .= ' <span class="availability">('; + $x .= join(',&nbsp;', @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>&nbsp;&nbsp;<a href="http://web.mit.edu/">MIT</a>&nbsp;&gt;&nbsp;<a href="http://www.lcs.mit.edu/">LCS</a>&nbsp;&gt;&nbsp;<a href="/">PDOS&nbsp;Home</a>&nbsp;&gt;&nbsp;</p></td> +<td bgcolor="#ffffcc"><p><a href="$main_dir/pubs.html">Publications</a>&nbsp;&gt;&nbsp;</p></td> +<td bgcolor="#ffffcc"><p><b>BibTeX&nbsp;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>&nbsp;Publication +search:</strong><small>&nbsp;&nbsp;<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/&/&amp;/g; + $k =~ s/</&lt;/g; + $k =~ s/>/&gt;/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>&nbsp;&nbsp;<a href="http://web.mit.edu/">MIT</a>&nbsp;&gt;&nbsp;<a href="http://www.lcs.mit.edu/">LCS</a>&nbsp;&gt;&nbsp;<a href="/">PDOS&nbsp;Home</a>&nbsp;&gt;&nbsp;</p></td> +<td bgcolor="#ffffcc"><p><b>Publications</b>&nbsp;&gt;&nbsp;</p></td> +<td bgcolor="#ffffcc"><p><b>By&nbsp;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>&nbsp;&nbsp;<a href="http://web.mit.edu/">MIT</a>&nbsp;&gt;&nbsp;<a href="http://www.lcs.mit.edu/">LCS</a>&nbsp;&gt;&nbsp;<a href="/">PDOS&nbsp;Home</a>&nbsp;&gt;&nbsp;</p></td> +<td bgcolor="#ffffcc"><p><a href="$main_dir/pubs.html">Publications</a>&nbsp;&gt;&nbsp;</p></td> +EOD; + +if (defined($match)) { + print '<td bgcolor="#ffffcc"><p><b>Search&nbsp;results</b></p></td>', "\n"; +} else { + print '<td bgcolor="#ffffcc"><p><b>By&nbsp;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&nbsp;by&nbsp;subject</a><br>', "\n"; + print '<a href="/cgi-bin/pubs-date.cgi">All&nbsp;by&nbsp;date</a><br>', "\n"; +} else { + print '<a href="', $main_dir, '/pubs.html">By&nbsp;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>&nbsp;Publication +search:</strong><small>&nbsp;&nbsp;<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>&nbsp;<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