From: "Luke A. Kanies" Date: 2003-12-10T15:39:46+09:00 Subject: Request for comments (longish) ---559023410-1254324197-1071038465=:11775 Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-1254324197-1071038465=:11775" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-1254324197-1071038465=:11775 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi all, I've got some relatively hairy code on which I would really appreciate some comments. It's relatively succinct, but I'm sure there are a lot of things I'm missing because of my newness to ruby. The comments should make it as self-explanatory as possible, but like I said, the code is a bit hairy. Any comments, criticism, or approbation are definitely appreciated. Oh, and thanks Matz! Ruby is definitely awesome; I wish I'd picked it up much earlier. Luke Kanies (btw, for those who remember my lex/yacc thread, I'm going to use racc, but I realized I'm a ways from needing a parser. Rlex is quite out of date, but can be hacked to work) -- A government big enough to give you everything you want is big enough to take from you everything you have. --Gerald R. Ford ---559023410-1254324197-1071038465=:11775 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="autocheck2.rb" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="autocheck2.rb" IyEvdXNyL2xvY2FsL2Jpbi9ydWJ5IC13DQoNCiMgdGhpcyBpcyBhIHZpcnR1 YWwgYmFzZSBjbGFzcyBmb3Igb3BlcmF0aW9ucw0KIyBvcGVyYXRpb25zIHdp bGwgcGVyZm9ybSBzb21lIGtpbmQgb2YgY2hlY2ssIGFuZCB0aGVuDQojIHBl cmZvcm0gYSBmaXggaWYgdGhlIGNoZWNrIHJldHVybnMgdHJ1ZQ0KY2xhc3Mg T3BlcmF0aW9uDQoJQGRlcml2YXRpdmVzID0ge30NCglhdHRyX3JlYWRlciA6 cmV0cmlldmUsIDpvYmplY3QNCglhdHRyX3dyaXRlciA6cmV0cmlldmUsIDpm aXgsIDpvYmplY3QNCg0KCSMgb3BlcmF0aW9ucyB3aWxsIGJlIHJldHJpZXZl ZCBmcm9tIHRoZSBiYXNlIGNsYXNzIGJ5IG5hbWUNCgkjIHNob3VsZCBpIGJl IHVzaW5nIHN5bWJvbHMgaGVyZSBpbnN0ZWFkIG9mIHN0cmluZ3M/DQoJZGVm IE9wZXJhdGlvbi5bXShuYW1lKQ0KCQl1bmxlc3MgQGRlcml2YXRpdmVzLmlu Y2x1ZGU/KG5hbWUpDQoJCQlyYWlzZSAiTm8gY2xhc3MgT3BlcmF0aW9uOjoj e25hbWV9Ig0KCQllbmQNCg0KCQlyZXR1cm4gQGRlcml2YXRpdmVzW25hbWVd DQoJZW5kDQoNCgkjIHRoaXMgYXNzb2NpYXRlcyBhbiBJbnN0YW5jZSBjbGFz cyB3aXRoIGFuIE9wZXJhdGlvbiBjbGFzcw0KCSMgYmFzaWNhbGx5LCBpdCBz dG9yZXMgaG93IHRvIGdldCB0aGUgcmlnaHQgZGF0YSBmcm9tIGEgZ2l2ZW4N CgkjIGluc3RhbmNlIGludG8gYSBnaXZlbiBvcGVyYXRpb24NCglkZWYgT3Bl cmF0aW9uLmFzc29jaWF0ZShrbGFzcywmYmxvY2spDQoJCUBtYXBba2xhc3Nd ID0gYmxvY2sNCgllbmQNCg0KCSMgdGhpcyBkZWZpbmVzIGEgbmV3IE9wZXJh dGlvbiBzdWJjbGFzcw0KCSMgYXJlIHRob3NlIGNsYXNzIGluc3RhbmNlIHZh cmlhYmxlIHNldHRpbmdzIHRoZSBiZXN0IHdheT8NCgkjIHdoYXQgYWJvdXQg c2V0dGluZyB0aGUgQGRlcml2YXRpdmVzW25hbWVdIHZhbHVlPw0KCWRlZiBP cGVyYXRpb24uY3JlYXRlKG5hbWUsYXJ5LCZwcmVwYXJlKQ0KCQljbGFzc25h bWUgPSBuYW1lLmR1cA0KCQljbGFzc25hbWUuY2FwaXRhbGl6ZSENCgkJY2xh c3NkZWYgPSAle2NsYXNzIE9wZXJhdGlvbjo6I3tjbGFzc25hbWV9IDwgT3Bl cmF0aW9uOyANCgkJCUBuYW1lID0gIiN7bmFtZX0iDQoJCQlAbWFwID0gSGFz aC5uZXcNCgkJZW5kfQ0KCQlldmFsIGNsYXNzZGVmLCBuaWwsIF9fRklMRV9f LCBfX0xJTkVfXw0KCQlAZGVyaXZhdGl2ZXNbbmFtZV0ucHJlcGFyZSA9IHBy ZXBhcmUNCgllbmQNCg0KCSMgc29tZSBtb3JlIHNldCB1cA0KCSMgaXQnZCBi ZSBuaWNlIGlmIGkgY291bGQgc29tZWhvdyBwYXNzIHRoZSBuYW1lIHRvIHRo aXMgbWV0aG9kLA0KCSMgc28gaSBkaWRuJ3QgaGF2ZSB0byBnZW5lcmF0ZSBp dA0KCWRlZiBPcGVyYXRpb24uaW5oZXJpdGVkKHN1YikNCgkJcHJpbnQgIkNy ZWF0ZWQgYSBzdWJjbGFzcyAiLCBzdWIsICJcbiINCgkJY2xhc3NuYW1lID0g c3ViLnRvX3MNCgkJY2xhc3NuYW1lLmdzdWIhKC9PcGVyYXRpb246Oi8sICcn KQ0KCQljbGFzc25hbWUuZG93bmNhc2UhDQoJCUBkZXJpdmF0aXZlc1tjbGFz c25hbWVdID0gc3ViDQoJZW5kDQoNCgkjIHJldHVybiBhbiBhc3NvY2lhdGlv biBiZXR3ZWVuIGFuIG9wZXJhdGlvbiBjbGFzcyBhbmQgYW4NCgkjIGluc3Rh bmNlIGNsYXNzDQoJZGVmIE9wZXJhdGlvbi5hc3NvY2lhdGVkKGtsYXNzKQ0K CQl1bmxlc3MgQG1hcC5pbmNsdWRlPyhrbGFzcykNCgkJCXJhaXNlICJObyBt YXBwaW5nIGJldHdlZW4gI3tzZWxmfSBhbmQgI3trbGFzc30iDQoJCWVuZA0K CQlyZXR1cm4gQG1hcFtrbGFzc10NCgllbmQNCg0KCSMgdGhlIFByb2MgdGhh dCBnZW5lcmF0ZXMgdGhlIGZpeCB3aXRoIHRoZSBjb3JyZWN0IGlucHV0cw0K CWRlZiBPcGVyYXRpb24ucHJlcGFyZT0ocHJlcGFyZSkNCgkJQHByZXBhcmUg PSBwcmVwYXJlDQoJZW5kDQoNCgkjIGNhbGwgdGhlIHByb2MNCglkZWYgT3Bl cmF0aW9uLnByZXBhcmUNCgkJcmV0dXJuIEBwcmVwYXJlDQoJZW5kDQoNCgkj IHBlcmZvcm0gdGhlIGZpeA0KCWRlZiBmaXgNCgkJQGZpeC5jYWxsDQoJZW5k DQoNCglkZWYgaW5pdGlhbGl6ZShvYmplY3QpDQoJCXB1dHMgIkNyZWF0ZWQg YW4gaW5zdGFuY2Ugb2YgI3tzZWxmLmNsYXNzfSINCg0KCQkjIHRoaXMgaXMg dGhlIGNvZGUgdGhhdCBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBJbnN0YW5j ZQ0KCQkjIGluc3RhbmNlIGludG8gdGhlIE9wZXJhdGlvbiBpbnN0YW5jZQ0K CQlzZWxmLnJldHJpZXZlID0gc2VsZi5jbGFzcy5hc3NvY2lhdGVkKG9iamVj dC5jbGFzcykNCgkJc2VsZi5vYmplY3QgPSBvYmplY3QNCgllbmQNCg0KCSMg eWF5DQoJZGVmIHByZXBhcmUNCgkJc2VsZi5jbGFzcy5wcmVwYXJlDQoJZW5k DQoNCgkjIGEgZHVtbXkgY2hlY2sNCglkZWYgY2hlY2sNCgkJcmV0dXJuIDEN CgllbmQNCg0KCSMgdGhpcyBpcyB0aGUgbWFpbiBlbnRyYW5jZSBpbnRvIHRo ZSBvcGVyYXRpb24NCglkZWYgcnVuDQoJCXNlbGYucHJlcGFyZS5jYWxsKHNl bGYpDQoJCXNlbGYuY2hlY2sgYW5kIHNlbGYuZml4DQoJZW5kDQplbmQNCg0K IyB0aGlzIGlzIGhvdyB5b3UgY3JlYXRlIGFuIG9wZXJhdGlvbjsgeW91IG5l ZWQgYSBuYW1lLA0KIyBhbiBhcnJheSBvZiBhcmd1bWVudHMsIGFuZCBhIGJs b2NrIHdoaWNoIGNyZWF0ZXMgdGhlDQojIGZpeCBQcm9jDQojIEknbSBuZWFy bHkgcG9zaXRpdmUgdGhlcmUgYXJlIHRlbiBiZXR0ZXIgd2F5cyBvZiBkb2lu Zw0KIyB0aGlzLCA4IG9mIHRoZW0gdXNpbmcgeWllbGQoKSwgYnV0IEkgaGF2 ZSBubyBpZGVhDQojIHdoYXQgdGhleSBhcmUNCiMgaGVscCENCk9wZXJhdGlv bi5jcmVhdGUoImNob3duIixbOmNob3dudmFsXSkgeyB8b3BlcnwNCglvcGVy LmZpeCA9IHByb2Mgew0KCQljaG93bnZhbCA9IG9wZXIucmV0cmlldmUuY2Fs bChvcGVyLm9iamVjdCkNCgkJcHV0cyAiY2hvd24gaXMgI3tjaG93bnZhbH0i DQoJfQ0KfQ0KDQpPcGVyYXRpb24uY3JlYXRlKCJjaG1vZCIsWzpjaG1vZHZh bF0pIHsgfG9wZXJ8DQoJb3Blci5maXggPSBwcm9jIHsNCgkJY2htb2R2YWwg PSBvcGVyLnJldHJpZXZlLmNhbGwob3Blci5vYmplY3QpDQoJCXB1dHMgImNo bW9kIGlzICVvIiAlIGNobW9kdmFsDQoJfQ0KfQ0KDQojIHRoZSBpbnN0YW5j ZSBiYXNlIGNsYXNzDQojIGluIHRoaXMgZXhhbXBsZSwgaXQncyBhIHJlYWwg Y2xhc3MsIGJ1dCBpbiByZWFsIGxpZmUgdGhpcw0KIyB3aWxsIGJlIGEgdmly dHVhbCBjbGFzcyAod2l0aCBubyBpbnN0YW5jZXMpDQpjbGFzcyBJbnN0YW5j ZQ0KCUBAcGFyYW1zID0gWyA6bW9kZSwgOm93bmVyIF0NCg0KCSMgcGVyb2Zy bSB0aGUgYWN0dWFsIGFzc29jaWF0aW9uDQoJT3BlcmF0aW9uWyJjaG93biJd LmFzc29jaWF0ZShzZWxmKSB7IHxvYmplY3R8IG9iamVjdFs6b3duZXJdIH0N CglPcGVyYXRpb25bImNobW9kIl0uYXNzb2NpYXRlKHNlbGYpIHsgfG9iamVj dHwgb2JqZWN0Wzptb2RlXSB9DQoNCgkjIHllcywgdGhpcyBpcyBhbm90aGVy IGNsYXNzIGluc3RhbmNlIHZhcmlhYmxlDQoJIyBlYWNoIHN1YmNsYXNzIHdp bGwgaGF2ZSBpdHMgb3duIGxpc3Qgb2YgY2hlY2tzDQoJIyBvbmNlIGFnYWlu LCB0aGUgInN5bWJvbCB2cy4gc3RyaW5nIiBwcm9ibGVtIHJlYXJzIGl0cyBo ZWFkDQoJIyBqdXN0IGEgbGlzdCBvZiBvcGVyYXRpb25zIHdlIHNob3VsZCBw ZXJmb3JtDQoJQG9wZXJhdGlvbnMgPSBbImNob3duIiwgImNobW9kIl0NCg0K CSMgdXNlZCB0byByZXRyaWV2ZSBwYXJhbWV0ZXJzOyBpIGxvdmUgcnVieSEN CglkZWYgW10obmFtZSkNCgkJdW5sZXNzIEBwYXJhbXMuaW5jbHVkZT8obmFt ZSkNCgkJCXJhaXNlICJObyB2YWx1ZSBmb3IgI3tuYW1lfSINCgkJZW5kDQoJ CXJldHVybiBAcGFyYW1zW25hbWVdDQoJZW5kDQoNCglkZWYgSW5zdGFuY2Uu b3BlcmF0aW9ucw0KCQlyZXR1cm4gQG9wZXJhdGlvbnMNCgllbmQNCg0KCWRl ZiBpbml0aWFsaXplKGFyZ3MpDQoJCUBuYW1lID0gYXJnc1s6bmFtZV0NCgkJ QHBhcmFtcyA9IEhhc2gubmV3DQoNCgkJIyBzZXQgd2hhdCBwYXJhbXMgd2Vy ZSBwYXNzZWQNCgkJIyBhdCBzb21lIHBvaW50IGkgbmVlZCB0byBhbGxvdyBm b3Igbm90IGFsbCBwYXJhbXMgdG8NCgkJIyBiZSBwYXNzZWQNCgkJQEBwYXJh bXMuZWFjaCB7IHxwYXJhbXwNCgkJCWlmIGFyZ3MuaW5jbHVkZT8ocGFyYW0p DQoJCQkJQHBhcmFtc1twYXJhbV0gPSBhcmdzW3BhcmFtXQ0KCQkJZW5kDQoJ CX0NCg0KCWVuZA0KDQoJZGVmIG9wZXJhdGlvbnMNCgkJb3BzID0gc2VsZi5j bGFzcy5vcGVyYXRpb25zDQoJCXJldHVybiBvcHMNCgllbmQNCg0KCSMgcmV0 dXJuIHRoZSBhY3R1YWwgb3BlcmF0aW9uOyB0aGlzIHdpbGwgYmUgYW4gaW5z dGFuY2UNCgkjIG9mIGEgc3ViY2xhc3MsIGUuZy4sIE9wZXJhdGlvbjo6Q2hv d24NCglkZWYgZ2V0b3AobmFtZSkNCgkJcmV0dXJuIE9wZXJhdGlvbltuYW1l XS5uZXcoc2VsZikNCgllbmQNCmVuZA0KDQojIGNyZWF0ZSBhIGNvdXBsZSBp bnN0YW5jZXMNCmluc3RhbmNlID0gSW5zdGFuY2UubmV3KDpuYW1lID0+ICJ5 YXkiLDptb2RlID0+IDA2NDQsIDpvd25lciA9PiAicm9vdCIpDQpvdGhlciA9 IEluc3RhbmNlLm5ldyg6bmFtZSA9PiAidWdoIiw6b3duZXIgPT4gImx1a2Ui LCA6bW9kZSA9PiAwNDc3NykNCg0KIyBwZXJmb3JtIHRoZWlyIGNoZWNrcw0K IyBpbiB0aGUgcmVhbCBjb2RlLCB0aGVzZSBpdGVyYXRpb25zIHdpbGwgYmUg ZG9uZSBieSBhIHBhcmVudA0KIyBvYmplY3QgcmVzcG9uc2libGUgZm9yIG1h bmFnaW5nIG9iamVjdHMgYW5kIHRoZWlyIGNoZWNrcw0KaW5zdGFuY2Uub3Bl cmF0aW9ucy5lYWNoIHsgfG9wZXJhdGlvbnwNCglwdXRzICJvcCBpcyAje29w ZXJhdGlvbn0iDQoJb3AgPSBpbnN0YW5jZS5nZXRvcChvcGVyYXRpb24pDQoJ b3AucnVuDQp9DQpvdGhlci5vcGVyYXRpb25zLmVhY2ggeyB8b3BlcmF0aW9u fA0KCW9wID0gaW5zdGFuY2UuZ2V0b3Aob3BlcmF0aW9uKQ0KCW9wLnJ1bg0K fQ0K ---559023410-1254324197-1071038465=:11775-- ---559023410-1254324197-1071038465=:11775--