summaryrefslogtreecommitdiff
path: root/bench/example.rubylex
blob: b3cdfbe0b59175c43fe394ea9094f27099f27c36 (plain)
ofshex dumpascii
0000 0d 0a 62 65 67 69 6e 0d 0a 20 20 61 2e 65 61 63 68 7b 20 7c 65 6c 7c 20 61 6e 7a 5b 65 6c 5d 20 ..begin....a.each{.|el|.anz[el].
0020 3d 20 61 6e 7a 5b 65 6c 5d 20 3f 61 20 6e 7a 5b 65 6c 5d 20 2b 31 20 3a 31 7d 0d 0a 20 20 77 68 =.anz[el].?a.nz[el].+1.:1}....wh
0040 69 6c 65 20 78 20 3c 31 20 30 30 30 30 0d 0a 20 20 20 20 23 61 20 62 69 73 20 66 20 64 69 65 6e ile.x.<1.0000......#a.bis.f.dien
0060 65 6e 20 64 61 7a 75 20 64 69 65 20 4e 61 63 68 62 61 72 73 63 68 61 66 74 20 66 65 73 74 7a 75 en.dazu.die.Nachbarschaft.festzu
0080 6c 65 67 65 6e 2e 20 4d 61 6e 20 73 74 65 6c 6c 65 20 73 69 63 68 20 64 69 65 20 23 5a 61 68 6c legen..Man.stelle.sich.die.#Zahl
00a0 20 76 6f 6e 20 31 20 62 69 73 20 36 34 20 69 6d 20 42 69 6e e4 72 63 6f 64 65 20 76 6f 72 20 31 .von.1.bis.64.im.Bin.rcode.vor.1
00c0 20 62 65 64 65 75 74 65 74 20 61 6e 20 30 20 61 75 73 0d 0a 20 20 20 20 62 20 3d 20 28 70 5b 20 .bedeutet.an.0.aus......b.=.(p[.
00e0 78 5d 20 25 33 20 32 29 20 2f 20 31 36 20 3c 31 20 3f 20 30 20 3a 20 31 0d 0a 0d 0a 20 20 20 20 x].%3.2)./.16.<1.?.0.:.1........
0100 28 78 20 2d 20 31 30 32 20 3e 3d 20 30 20 3f 20 6e 5b 78 20 2d 20 31 30 32 5d 2e 74 6f 5f 69 20 (x.-.102.>=.0.?.n[x.-.102].to_i.
0120 3a 20 30 29 20 2a 20 61 20 2b 20 28 78 20 2d 20 31 30 31 20 3e 3d 20 30 20 3f 6e 5b 78 20 2d 20 :.0).*.a.+.(x.-.101.>=.0.?n[x.-.
0140 31 30 31 5d 2e 74 6f 5f 69 20 3a 20 30 29 20 2a 20 65 20 2b 20 6e 5b 78 20 2d 20 31 30 30 5d 2e 101].to_i.:.0).*.e.+.n[x.-.100].
0160 74 6f 5f 69 2b 28 78 20 2d 20 39 39 20 3e 3d 20 30 20 3f 20 6e 5b 78 20 2d 20 39 39 5d 2e 74 6f to_i+(x.-.99.>=.0.?.n[x.-.99].to
0180 5f 69 20 3a 20 30 29 20 2a 20 66 20 2b 20 28 78 20 2d 20 39 38 20 3e 3d 20 30 20 3f 20 6e 5b 78 _i.:.0).*.f.+.(x.-.98.>=.0.?.n[x
01a0 20 2d 20 39 38 5d 2e 74 6f 5f 69 20 3a 20 30 29 20 2a 20 61 20 2b 0d 0a 20 20 20 20 6e 5b 78 20 .-.98].to_i.:.0).*.a.+......n[x.
01c0 2b 20 31 39 39 5d 2e 74 6f 5f 69 2a 20 62 20 2b 20 6e 5b 78 20 2b 20 32 30 30 5d 2e 74 6f 5f 69 +.199].to_i*.b.+.n[x.+.200].to_i
01e0 2a 20 64 20 2b 20 6e 5b 78 20 2b 20 32 30 31 5d 2e 74 6f 5f 69 2a 20 62 0d 0a 20 20 20 20 23 20 *.d.+.n[x.+.201].to_i*.b......#.
0200 4c 00 00 74 20 65 69 6e 20 54 65 73 74 70 72 6f 67 72 61 6d 6d 20 61 62 6c 61 75 66 65 6e 2e 20 L..t.ein.Testprogramm.ablaufen..
0220 46 49 58 4d 45 20 69 6e 76 61 6c 69 64 20 58 48 54 4d 4c 0d 0a 0d 0a 20 20 20 20 23 75 6e 64 20 FIXME.invalid.XHTML........#und.
0240 64 69 65 20 41 75 73 67 61 62 65 20 66 6f 6c 67 74 0d 0a 20 20 20 20 67 20 3d 20 25 77 7b 7d 0d die.Ausgabe.folgt......g.=.%w{}.
0260 0a 78 3d 30 0d 0a 77 68 69 6c 65 20 78 3c 31 30 30 0d 0a 20 70 75 74 73 22 23 7b 67 5b 78 5d 7d .x=0..while.x<100...puts"#{g[x]}
0280 20 22 0d 0a 20 78 2b 3d 31 0d 0a 65 6e 64 0d 0a 70 75 74 73 22 22 0d 0a 20 20 20 20 20 20 73 6c ."...x+=1..end..puts""........sl
02a0 65 65 70 28 31 30 29 0d 0a 0d 0a 20 20 20 20 20 20 31 45 31 45 31 0d 0a 20 20 20 20 20 20 70 75 eep(10)..........1E1E1........pu
02c0 74 73 20 33 20 30 2e 73 65 6e 64 28 3a 2f 2c 20 35 29 20 23 20 70 72 69 6e 74 73 20 36 0d 0a 0d ts.3.0.send(:/,.5).#.prints.6...
02e0 0a 20 20 20 20 20 20 22 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 ......."instance.variables.can.b
0300 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 e.#@included,.#@@class_variables
0320 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 22 0d 0a 20 20 20 20 \n.and.#$globals.as.well."......
0340 20 20 60 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 ..`instance.variables.can.be.#@i
0360 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e ncluded,.#@@class_variables\n.an
0380 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 60 0d 0a 20 20 20 20 20 20 27 69 6e d.#$globals.as.well.`........'in
03a0 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 stance.variables.can.be.#@includ
03c0 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 ed,.#@@class_variables\n.and.#$g
03e0 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 27 0d 0a 20 20 20 20 20 20 2f 69 6e 73 74 61 6e 63 lobals.as.well.'......../instanc
0400 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 e.variables.can.be.#@included,.#
0420 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c @@class_variables\n.and.#$global
0440 73 20 61 73 20 77 65 6c 6c 2e 2f 6d 20 6f 75 73 65 6e 69 78 0d 0a 20 20 20 20 20 20 3a 22 20 69 s.as.well./m.ousenix........:".i
0460 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 nstance.variables.can.be.#@inclu
0480 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 ded,.#@@class_variables\n.and.#$
04a0 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 22 0d 0a 20 20 20 20 20 20 3a 27 20 69 6e 73 74 globals.as.well."........:'.inst
04c0 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 ance.variables.can.be.#@included
04e0 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f ,.#@@class_variables\n.and.#$glo
0500 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 27 0d 0a 20 20 20 20 20 20 25 27 20 69 6e 73 74 61 6e 63 bals.as.well.'........%'.instanc
0520 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 e.variables.can.be.#@included,.#
0540 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c @@class_variables\n.and.#$global
0560 73 20 61 73 20 77 65 6c 6c 2e 27 0d 0a 20 20 20 20 20 20 25 71 27 69 6e 73 74 61 6e 63 65 20 76 s.as.well.'........%q'instance.v
0580 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 ariables.can.be.#@included,.#@@c
05a0 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 lass_variables\n.and.#$globals.a
05c0 73 20 77 65 6c 6c 2e 27 0d 0a 20 20 20 20 20 20 25 51 27 69 6e 73 74 61 6e 63 65 20 76 61 72 69 s.well.'........%Q'instance.vari
05e0 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 ables.can.be.#@included,.#@@clas
0600 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 s_variables\n.and.#$globals.as.w
0620 65 6c 6c 2e 27 0d 0a 20 20 20 20 20 20 25 77 27 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c ell.'........%w'instance.variabl
0640 65 73 20 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 es.can.be.#@included,.#@@class_v
0660 61 72 69 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c ariables\n.and.#$globals.as.well
0680 2e 27 0d 0a 20 20 20 20 20 20 25 57 27 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 .'........%W'instance.variables.
06a0 63 61 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 can.be.#@included,.#@@class_vari
06c0 61 62 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 27 0d ables\n.and.#$globals.as.well.'.
06e0 0a 20 20 20 20 20 20 25 73 20 27 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 .......%s.'instance.variables.ca
0700 6e 20 62 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 n.be.#@included,.#@@class_variab
0720 6c 65 73 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 27 0d 0a 20 les\n.and.#$globals.as.well.'...
0740 20 20 20 20 20 25 72 27 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 .....%r'instance.variables.can.b
0760 65 20 23 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 e.#@included,.#@@class_variables
0780 5c 6e 20 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 27 0d 0a 20 20 20 20 \n.and.#$globals.as.well.'......
07a0 20 20 25 78 27 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 62 65 20 23 ..%x'instance.variables.can.be.#
07c0 40 69 6e 63 6c 75 64 65 64 2c 20 23 40 40 63 6c 61 73 73 5f 76 61 72 69 61 62 6c 65 73 5c 6e 20 @included,.#@@class_variables\n.
07e0 61 6e 64 20 23 24 67 6c 6f 62 61 6c 73 20 61 73 20 77 65 6c 6c 2e 27 0d 0a 0d 0a 20 20 20 20 20 and.#$globals.as.well.'.........
0800 20 23 25 57 5b 20 62 75 74 20 23 40 30 69 6c 6c 65 67 61 6c 5f 76 61 6c 75 65 73 20 6c 6f 6f 6b .#%W[.but.#@0illegal_values.look
0820 20 73 74 72 61 6e 67 65 2e 5d 0d 0a 0d 0a 20 20 20 20 20 20 25 73 20 23 72 75 62 79 20 61 6c 6c .strange.]..........%s.#ruby.all
0840 6f 77 73 20 73 74 72 61 6e 67 65 23 7b 63 6f 6e 73 74 72 75 63 74 73 7d 0d 0a 20 20 20 20 20 20 ows.strange#{constructs}........
0860 25 73 20 23 72 75 62 79 20 61 6c 6c 6f 77 73 20 73 74 72 61 6e 67 65 23 24 63 6f 6e 73 74 72 75 %s.#ruby.allows.strange#$constru
0880 63 74 73 0d 0a 20 20 20 20 20 20 25 73 20 23 72 75 62 79 20 61 6c 6c 6f 77 73 20 73 74 72 61 6e cts........%s.#ruby.allows.stran
08a0 67 65 23 40 40 63 6f 6e 73 74 72 75 63 74 73 0d 0a 0d 0a 20 20 20 20 20 20 25 72 5c 56 45 52 59 ge#@@constructs..........%r\VERY
08c0 20 53 54 52 41 4e 47 45 21 5c 78 20 30 30 0d 0a 20 20 20 20 20 20 25 78 5c 56 45 52 59 20 53 54 .STRANGE!\x.00........%x\VERY.ST
08e0 52 41 4e 47 45 21 5c 20 78 30 30 0d 0a 0d 0a 20 20 20 20 20 20 7e 20 25 72 23 3c 58 4d 50 3e 23 RANGE!\.x00..........~.%r#<XMP>#
0900 69 20 2e 2e 20 7e 25 72 23 3c 2f 58 4d 50 3e 23 69 3b 0d 0a 0d 0a 20 20 20 20 20 20 61 20 3d 20 i....~%r#</XMP>#i;..........a.=.
0920 3c 3c 22 45 4f 46 22 0d 0a 54 68 69 73 20 69 73 20 61 20 6d 75 6c 74 69 6c 69 6e 65 20 23 24 68 <<"EOF"..This.is.a.multiline.#$h
0940 65 72 65 20 64 6f 63 75 6d 65 6e 74 0d 0a 74 65 72 6d 69 6e 61 74 65 64 20 62 79 20 45 4f 46 20 ere.document..terminated.by.EOF.
0960 6f 6e 20 61 20 6c 69 6e 65 20 62 79 20 69 74 73 65 6c 66 0d 0a 45 4f 46 0d 0a 0d 0a 61 20 3d 20 on.a.line.by.itself..EOF....a.=.
0980 3c 3c 27 45 4f 46 27 0d 0a 54 68 69 73 20 69 73 20 61 20 6d 75 6c 74 69 6c 69 6e 65 20 23 24 68 <<'EOF'..This.is.a.multiline.#$h
09a0 65 72 65 20 64 6f 63 75 6d 65 6e 74 0d 0a 74 65 72 6d 69 6e 61 74 65 64 20 62 79 20 45 4f 46 20 ere.document..terminated.by.EOF.
09c0 6f 6e 20 61 20 6c 69 6e 65 20 62 79 20 69 74 73 65 6c 66 0d 0a 45 4f 46 0d 0a 0d 0a 62 3d 28 70 on.a.line.by.itself..EOF....b=(p
09e0 5b 78 5d 20 25 33 32 29 2f 31 36 3c 31 20 3f 20 30 20 3a 20 31 0d 0a 0d 0a 3c 3c 22 22 0d 0a 23 [x].%32)/16<1.?.0.:.1....<<""..#
0a00 7b 74 65 73 74 7d 0d 0a 23 40 62 6c 61 0d 0a 23 64 69 65 20 73 75 70 70 65 21 21 21 0d 0a 5c 78 {test}..#@bla..#die.suppe!!!..\x
0a20 66 66 66 66 66 0d 0a 0d 0a 0d 0a 73 75 70 65 72 20 3c 3c 2d 45 4f 45 20 25 20 5b 0d 0a 09 09 09 fffff......super.<<-EOE.%.[.....
0a40 45 4f 45 0d 0a 0d 0a 3c 3c 58 0d 0a 58 0d 0a 58 0d 0a 25 73 28 75 6e 69 6e 74 65 72 5c 29 70 72 EOE....<<X..X..X..%s(uninter\)pr
0a60 65 5c 74 65 64 29 0d 0a 25 71 28 75 6e 69 6e 74 65 72 5c 29 70 72 65 5c 74 65 64 29 0d 0a 25 51 e\ted)..%q(uninter\)pre\ted)..%Q
0a80 28 69 6e 74 65 72 5c 29 70 72 65 5c 74 65 64 29 0d 0a 3a 22 69 6e 74 65 72 5c 29 70 72 65 5c 74 (inter\)pre\ted)..:"inter\)pre\t
0aa0 65 64 22 0d 0a 3a 27 75 6e 69 6e 74 65 72 5c 27 70 72 65 5c 74 65 64 27 0d 0a 0d 0a 25 71 5b 68 ed"..:'uninter\'pre\ted'....%q[h
0ac0 61 68 61 21 20 5b 6e 65 73 74 69 6e 67 20 5b 72 6f 63 6b 73 5d 20 5d 20 21 20 5d 0d 0a 0d 0a 25 aha!.[nesting.[rocks].].!.]....%
0ae0 51 5b 68 65 68 65 21 20 23 7b 20 25 51 5d 6e 65 73 74 69 6e 67 20 23 7b 22 72 65 61 6c 6c 79 22 Q[hehe!.#{.%Q]nesting.#{"really"
0b00 7d 20 72 6f 63 6b 73 5d 20 7d 20 21 20 5d 0d 0a 0d 0a 22 62 75 74 20 69 74 20 23 7b 3c 3c 6d 61 }.rocks].}.!.]...."but.it.#{<<ma
0b20 79 7d 20 62 72 65 61 6b 22 0d 0a 74 68 65 20 63 6f 64 65 2e 0d 0a 6d 61 79 0d 0a 0d 0a 23 20 74 y}.break"..the.code...may....#.t
0b40 68 69 73 20 69 73 20 61 20 6b 6e 6f 77 6e 20 62 75 67 2e 0d 0a 70 20 3c 3c 74 68 69 73 0d 0a 62 his.is.a.known.bug...p.<<this..b
0b60 75 74 20 69 74 20 6d 61 79 20 62 72 65 61 6b 20 23 7b 3c 3c 74 68 61 74 7d 0d 0a 63 6f 64 65 2e ut.it.may.break.#{<<that}..code.
0b80 0d 0a 74 68 61 74 0d 0a 74 68 69 73 0d 0a 74 68 61 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 ..that..this..that....##########
0ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 63 6c 61 73 73 20 ########################..class.
0be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
0c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 50 0d 0a 64 65 66 20 20 69 6e 69 74 69 61 .................NP..def..initia
0c20 6c 69 7a 65 20 61 3d 40 70 3d 5b 5d 2c 20 62 3d 40 62 3d 5b 5d 3b 20 20 20 20 20 20 20 20 20 20 lize.a=@p=[],.b=@b=[];..........
0c40 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 64 65 66 20 2b 40 3b 40 62 3c 3c 31 3b 62 32 ............end..def.+@;@b<<1;b2
0c60 63 20 65 6e 64 3b 64 65 66 2d 40 3b 40 62 3c 3c 30 3b 62 32 63 20 20 20 20 20 20 20 20 20 20 20 c.end;def-@;@b<<0;b2c...........
0c80 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 64 65 66 20 20 62 32 63 3b 69 66 20 40 62 2e 73 69 7a 65 ........end..def..b2c;if.@b.size
0ca0 3d 3d 38 3b 63 3d 30 3b 40 62 2e 65 61 63 68 7b 7c 62 7c 63 3c 3c 3d 31 3b 63 7c 3d 62 7d 3b 73 ==8;c=0;@b.each{|b|c<<=1;c|=b};s
0cc0 65 6e 64 28 0d 0a 20 20 20 20 20 27 6c 61 76 65 27 2e 72 65 76 65 72 73 65 2c 28 40 70 2e 6a 6f end(.......'lave'.reverse,(@p.jo
0ce0 69 6e 29 29 69 66 20 63 3d 3d 30 3b 40 70 3c 3c 63 2e 63 68 72 3b 40 62 3d 5b 5d 20 65 6e 64 0d in))if.c==0;@p<<c.chr;@b=[].end.
0d00 0a 20 20 20 20 20 73 65 6c 66 20 65 6e 64 20 65 6e 64 20 3b 20 62 65 67 69 6e 20 5f 20 3d 20 4e ......self.end.end.;.begin._.=.N
0d20 50 2e 6e 65 77 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 63 0d 0a P.new...................end..c..
0d40 23 20 5e 20 54 68 69 73 20 69 73 20 61 20 62 75 67 20 3a 28 0d 0a 0d 0a 23 20 54 68 65 20 50 72 #.^.This.is.a.bug.:(....#.The.Pr
0d60 6f 67 72 61 6d 6d 69 6e 67 20 4c 61 6e 67 75 61 67 65 20 60 4e 65 67 61 50 6f 73 69 27 0d 0a 2b ogramming.Language.`NegaPosi'..+
0d80 2d 2b 2d 2d 2b 2b 2d 2d 2d 2d 2b 2d 2d 2b 2d 2b 2b 2b 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2b -+--++----+--+-+++--+-------+--+
0da0 2b 2d 2d 2b 2b 2b 2d 2d 2d 2b 2d 2b 2b 2b 2d 2b 2d 2b 2d 2b 2b 2b 2d 2d 2d 2d 2d 2b 2b 2b 2d 5f +--+++---+-+++-+-+-+++-----+++-_
0dc0 0d 0a 2b 2d 2d 2b 2b 2b 2b 2d 2d 2b 2d 2d 2d 2b 2b 2d 2b 2d 2b 2d 2b 2b 2b 2d 2d 2b 2d 2d 2b 2d ..+--++++--+---++-+-+-+++--+--+-
0de0 2b 2d 2d 2d 2d 2d 2d 2b 2d 2d 2b 2b 2b 2b 2d 2b 2b 2d 2d 2d 2b 2b 2d 2b 2b 2d 2d 2d 2b 2b 2d 2b +------+--++++-++---++-++---++-+
0e00 2b 2d 5f 0d 0a 2b 2b 2b 2d 2d 2b 2b 2d 2b 2d 2b 2d 2d 2b 2b 2d 2d 2b 2b 2b 2d 2d 2b 2d 2d 2d 2d +-_..+++--++-+-+--++--+++--+----
0e20 2d 2d 2b 2d 2d 2d 2d 2b 2d 2d 2b 2b 2d 2d 2b 2b 2b 2d 2b 2b 2d 2b 2d 2d 2d 2d 2b 2b 2d 2d 2d 2d --+----+--++--+++-++-+----++----
0e40 2d 2d 2b 2d 2d 5f 0d 0a 2d 2b 2d 2b 2d 2d 2d 2d 2b 2b 2b 2d 2d 2b 2d 2d 2b 2d 2d 2d 2d 2b 2d 2d --+--_..-+-+----+++--+--+----+--
0e60 2b 2d 2d 2b 2d 2b 2b 2d 2b 2b 2d 2d 2b 2b 2b 2d 2b 2b 2b 2b 2d 2b 2b 2d 2d 2d 2d 2d 2b 2d 2b 2d +--+-++-++--+++-++++-++-----+-+-
0e80 2b 2d 2d 2d 2d 2b 2b 2d 5f 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2b 2d 2d 2d 2d 20 20 20 20 20 +----++-_..---------+-+----.....
0ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
0ec0 20 20 20 20 20 20 20 20 20 20 20 5f 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ..........._..##################
0ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 0d 0a 23 20 64 61 74 65 3a 20 30 33 ################......#.date:.03
0f20 2f 31 38 2f 32 30 30 34 0d 0a 23 20 74 69 74 6c 65 3a 20 70 72 69 6d 65 73 20 6c 65 73 73 20 74 /18/2004..#.title:.primes.less.t
0f40 68 61 6e 20 31 30 30 30 20 28 20 32 30 30 35 20 4f 62 66 75 73 63 61 74 65 64 20 52 75 62 79 20 han.1000.(.2005.Obfuscated.Ruby.
0f60 43 6f 6e 74 65 73 74 20 29 0d 0a 23 20 61 75 74 68 6f 72 3a 20 4a 69 6d 20 4c 61 77 6c 65 73 73 Contest.)..#.author:.Jim.Lawless
0f80 0d 0a 23 20 65 6d 61 69 6c 3a 20 6a 69 6d 62 6f 20 61 74 20 72 61 64 69 6b 73 20 64 6f 74 73 6b ..#.email:.jimbo.at.radiks.dotsk
0fa0 69 20 6e 65 74 0d 0a 23 20 63 6f 6d 6d 65 6e 74 73 3a 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 i.net..#.comments:.This.program.
0fc0 77 69 6c 6c 20 64 69 73 70 6c 61 79 20 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 70 72 69 6d 65 20 will.display.all.positive.prime.
0fe0 69 6e 74 65 67 65 72 73 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 6c 65 73 73 20 74 68 61 6e 20 integers..#...........less.than.
1000 31 30 30 30 2e 20 20 50 72 6f 67 72 61 6d 20 6c 69 63 65 6e 73 20 69 73 20 74 68 65 20 73 61 6d 1000...Program.licens.is.the.sam
1020 65 20 61 73 20 74 68 65 20 52 75 62 79 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 6c 69 63 65 6e e.as.the.Ruby..#...........licen
1040 73 65 20 28 20 68 74 74 70 3a 2f 2f 77 77 77 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 2f 65 6e se.(.http://www.ruby-lang.org/en
1060 2f 4c 49 43 45 4e 53 45 2e 74 78 74 20 29 0d 0a 0d 0a 20 20 20 24 65 3d 22 22 0d 0a 0d 0a 64 65 /LICENSE.txt.).......$e=""....de
1080 66 20 61 28 29 0d 0a 20 20 20 24 61 3d 24 61 2b 31 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 62 28 f.a().....$a=$a+1..end....def.b(
10a0 29 0d 0a 20 20 20 24 61 3d 24 61 2b 35 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 63 28 29 0d 0a 20 ).....$a=$a+5..end....def.c()...
10c0 20 20 24 65 3d 24 65 2b 24 61 2e 63 68 72 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 64 28 29 0d 0a ..$e=$e+$a.chr..end....def.d()..
10e0 20 20 20 24 61 3d 31 30 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 65 28 29 0d 0a 20 20 20 24 61 3d ...$a=10..end....def.e().....$a=
1100 24 61 2b 31 36 0d 0a 65 6e 64 0d 0a 0d 0a 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b $a+16..end....d;e;b;a;a;a;a;a;c;
1120 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b d;e;e;e;e;e;e;b;a;a;a;a;c;d;e;e;
1140 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 62 3b 62 3b 0d 0a 61 3b 63 3b 64 3b 63 3b 64 3b e;a;a;a;c;d;e;e;b;b;..a;c;d;c;d;
1160 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b e;e;e;e;e;e;b;b;a;a;a;c;d;e;e;e;
1180 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 0d 0a 65 3b e;e;b;b;a;a;a;a;c;d;e;e;e;e;..e;
11a0 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b b;b;a;a;a;a;a;c;d;e;e;e;e;e;e;a;
11c0 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b a;c;d;e;e;e;e;e;b;b;a;c;d;e;b;a;
11e0 63 3b 0d 0a 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b c;..d;e;b;a;a;a;a;a;c;d;e;e;e;e;
1200 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b 63 3b 64 3b e;e;b;a;a;a;a;c;d;e;e;e;a;a;c;d;
1220 65 3b 65 3b 62 3b 61 3b 61 3b 0d 0a 63 3b 64 3b 65 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b e;e;b;a;a;..c;d;e;e;b;a;c;d;e;e;
1240 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 62 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b b;a;c;d;e;e;b;a;c;d;c;d;e;b;a;a;
1260 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 0d 0a 62 3b 61 3b 61 3b 61 3b a;a;a;c;d;e;e;e;e;e;b;..b;a;a;a;
1280 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 62 3b 61 3b a;a;c;d;e;e;e;a;a;a;c;d;e;e;b;a;
12a0 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b a;a;c;d;c;d;e;b;a;a;a;a;a;c;d;e;
12c0 0d 0a 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b ..e;e;e;e;b;b;a;a;c;d;e;e;e;e;e;
12e0 65 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b e;a;a;a;a;a;c;d;e;e;e;e;e;e;b;b;
1300 61 3b 63 3b 0d 0a 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b a;c;..d;e;e;e;e;e;e;a;a;a;a;c;d;
1320 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b e;e;e;e;e;b;a;a;a;a;a;c;d;e;e;e;
1340 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 0d 0a 65 3b 62 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 65 3b a;a;a;c;d;e;..e;b;a;c;d;c;d;e;e;
1360 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b e;e;e;e;b;b;a;a;a;c;d;e;e;e;e;e;
1380 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 0d 0a 65 3b 65 3b 65 3b 62 3b 62 3b b;b;a;a;a;a;c;d;e;e;..e;e;e;b;b;
13a0 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 63 3b a;a;a;a;a;c;d;e;e;e;e;e;e;a;a;c;
13c0 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 0d 0a 61 3b 63 3b d;e;e;e;e;e;b;b;a;c;d;e;b;..a;c;
13e0 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b d;e;b;a;a;a;a;a;c;d;e;e;e;e;e;b;
1400 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b 63 3b 64 3b 65 3b b;a;a;a;a;a;c;d;e;e;e;a;a;c;d;e;
1420 62 3b 0d 0a 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b b;..a;a;a;a;a;c;d;e;e;e;e;e;e;b;
1440 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 65 3b 65 3b a;a;a;a;c;d;e;b;a;c;d;c;d;e;e;e;
1460 65 3b 65 3b 62 3b 62 3b 61 3b 0d 0a 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b e;e;b;b;a;..a;a;a;a;c;d;e;e;e;e;
1480 65 3b 62 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b e;b;b;a;a;c;d;e;b;b;a;a;a;a;c;d;
14a0 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 0d 0a 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b e;b;a;c;d;e;b;b;a;..a;a;a;c;d;e;
14c0 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b b;a;a;a;a;a;c;d;e;e;e;e;e;e;b;a;
14e0 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 0d 0a 64 3b 65 3b 65 3b a;a;a;c;d;e;e;a;a;a;a;c;..d;e;e;
1500 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b e;e;e;e;a;a;a;c;d;e;e;e;e;e;e;a;
1520 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 0d 0a a;a;a;a;c;d;e;e;e;e;e;b;a;a;a;..
1540 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b a;a;c;d;e;e;e;e;e;e;b;b;a;c;d;e;
1560 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b e;e;e;e;e;a;a;c;d;e;e;e;e;e;e;a;
1580 61 3b 61 3b 0d 0a 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b a;a;..a;a;c;d;e;b;b;a;a;a;a;c;d;
15a0 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b e;b;a;a;a;a;a;c;d;e;e;e;e;e;b;b;
15c0 61 3b 61 3b 61 3b 61 3b 61 3b 0d 0a 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b a;a;a;a;a;..c;d;e;b;b;a;a;a;a;a;
15e0 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b c;d;e;b;b;a;a;a;a;a;c;d;e;e;e;a;
1600 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b 0d 0a 61 3b 63 3b 64 3b 65 3b 65 3b 62 3b a;a;c;d;e;e;e;a;a;..a;c;d;e;e;b;
1620 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b a;c;d;e;b;b;a;a;a;a;a;c;d;e;b;a;
1640 63 3b 64 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 0d 0a c;d;c;d;e;b;a;a;a;a;a;c;d;e;e;..
1660 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b e;e;e;b;b;a;a;c;d;e;e;e;e;e;e;a;
1680 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b a;a;a;a;c;d;e;e;e;e;e;e;b;b;a;c;
16a0 64 3b 65 3b 0d 0a 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b d;e;..e;e;e;e;e;a;a;a;a;c;d;e;e;
16c0 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b e;e;e;b;a;a;a;a;a;c;d;e;e;e;a;a;
16e0 61 3b 63 3b 64 3b 65 3b 65 3b 0d 0a 62 3b 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 65 3b 65 3b a;c;d;e;e;..b;a;a;c;d;c;d;e;e;e;
1700 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b e;e;b;a;a;a;c;d;e;e;e;e;e;e;b;a;
1720 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 0d 0a 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b a;a;c;d;e;e;e;e;e;..b;b;a;c;d;e;
1740 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b e;e;e;e;b;a;a;c;d;e;e;e;e;e;e;a;
1760 63 3b 64 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 0d 0a 64 3b 65 3b c;d;c;d;e;e;e;e;e;b;b;a;c;..d;e;
1780 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b e;e;e;e;e;a;a;a;a;c;d;e;e;e;e;e;
17a0 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b b;a;a;a;a;a;c;d;c;d;e;b;a;a;a;a;
17c0 61 3b 0d 0a 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b a;..c;d;e;e;e;e;e;b;b;a;a;a;a;a;
17e0 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b c;d;e;e;e;a;a;a;c;d;e;b;a;a;a;a;
1800 61 3b 63 3b 64 3b 65 3b 65 3b 0d 0a 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b a;c;d;e;e;..e;e;e;b;b;a;a;a;a;a;
1820 63 3b 64 3b 65 3b 65 3b 61 3b 63 3b 64 3b 65 3b 65 3b 62 3b 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b c;d;e;e;a;c;d;e;e;b;a;a;c;d;c;d;
1840 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 0d 0a 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b e;e;e;e;e;b;b;a;a;..a;a;a;c;d;e;
1860 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b e;e;e;e;b;b;a;a;c;d;e;b;a;c;d;e;
1880 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 0d 0a 61 3b 61 3b b;b;a;a;a;a;c;d;e;b;b;a;a;..a;a;
18a0 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b c;d;e;b;a;a;a;a;a;c;d;e;e;e;e;e;
18c0 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 62 3b 61 3b 63 3b 64 3b b;b;a;a;a;a;a;c;d;e;b;b;b;a;c;d;
18e0 65 3b 0d 0a 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b e;..b;a;a;a;a;a;c;d;e;e;e;e;e;b;
1900 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b b;a;a;a;a;a;c;d;e;b;b;a;a;a;a;a;
1920 63 3b 64 3b 65 3b 65 3b 0d 0a 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b c;d;e;e;..e;a;a;a;a;c;d;e;b;a;a;
1940 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b a;a;a;c;d;e;e;e;e;e;e;b;a;a;a;a;
1960 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 0d 0a 61 3b 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b c;d;e;b;b;a;a;..a;a;a;c;d;c;d;e;
1980 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b e;e;e;e;b;a;a;a;c;d;e;e;e;e;e;e;
19a0 62 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 0d 0a 62 3b 62 3b 61 3b 63 3b b;a;a;a;c;d;e;e;e;e;e;..b;b;a;c;
19c0 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b d;e;e;e;e;e;b;a;a;c;d;e;e;e;e;e;
19e0 65 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 0d 0a e;a;c;d;c;d;e;e;e;e;e;b;b;a;c;..
1a00 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b d;e;e;e;e;e;e;a;a;a;a;c;d;e;e;e;
1a20 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b e;e;b;a;a;a;a;a;c;d;c;d;e;e;e;e;
1a40 65 3b 62 3b 62 3b 0d 0a 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b e;b;b;..a;c;d;e;e;e;e;e;e;a;a;a;
1a60 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b a;c;d;e;e;e;e;e;b;a;a;a;a;a;c;d;
1a80 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 0d 0a 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b c;d;e;e;e;e;e;..b;b;a;a;a;a;a;c;
1aa0 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b d;e;e;e;e;e;b;b;a;a;c;d;e;b;b;a;
1ac0 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 0d 0a 61 3b 61 3b 63 3b 64 3b 65 3b a;a;a;c;d;e;b;a;a;a;..a;a;c;d;e;
1ae0 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b e;e;e;e;b;b;a;a;c;d;e;e;e;e;e;e;
1b00 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 0d 0a 62 3b 62 3b a;a;a;a;a;c;d;e;e;e;e;e;e;..b;b;
1b20 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b a;c;d;e;e;e;e;e;e;a;a;a;a;c;d;e;
1b40 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b e;e;e;e;b;a;a;a;a;a;c;d;e;e;e;a;
1b60 0d 0a 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 62 3b ..a;a;c;d;e;e;e;a;a;a;c;d;e;e;b;
1b80 61 3b 63 3b 64 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b a;c;d;e;b;b;a;a;a;a;a;c;d;e;b;a;
1ba0 63 3b 64 3b 63 3b 64 3b 65 3b 65 3b 0d 0a 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b c;d;c;d;e;e;..e;e;e;e;b;a;c;d;e;
1bc0 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b e;e;e;e;e;b;b;a;c;d;e;e;e;e;e;e;
1be0 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 0d 0a 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b b;a;a;a;a;a;c;d;e;..e;e;e;e;e;b;
1c00 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b a;a;a;a;c;d;e;b;a;c;d;e;b;a;a;a;
1c20 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 0d 0a 65 3b 65 3b c;d;e;b;a;a;a;a;c;d;e;e;e;..e;e;
1c40 65 3b 65 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b e;e;a;c;d;e;b;a;a;a;a;a;c;d;e;e;
1c60 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b e;e;e;e;b;a;a;a;a;c;d;e;e;e;e;e;
1c80 0d 0a 65 3b 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b ..e;e;a;a;a;c;d;e;b;a;c;d;e;e;e;
1ca0 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b e;e;b;b;a;a;a;a;a;c;d;e;e;e;e;e;
1cc0 65 3b 62 3b 61 3b 0d 0a 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b e;b;a;..a;a;a;c;d;e;b;a;c;d;e;e;
1ce0 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b e;e;e;e;b;a;c;d;e;e;e;e;e;e;b;a;
1d00 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 0d 0a 65 3b 65 3b 62 3b 62 3b 61 3b 61 3b 61 3b 61 3b a;a;c;d;e;e;e;..e;e;b;b;a;a;a;a;
1d20 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b a;c;d;e;e;e;e;e;e;a;a;a;c;d;e;e;
1d40 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 0d 0a 61 3b 61 3b 61 3b 63 3b 64 3b e;e;e;b;b;a;c;d;e;b;..a;a;a;c;d;
1d60 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b c;d;e;e;e;e;e;b;b;a;c;d;e;e;e;e;
1d80 65 3b 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 0d 0a 61 3b e;e;a;a;a;a;c;d;e;e;e;e;e;b;..a;
1da0 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b a;a;a;a;c;d;c;d;e;b;a;a;a;a;a;c;
1dc0 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b d;e;e;e;e;e;e;b;a;a;a;a;c;d;e;b;
1de0 61 3b 63 3b 0d 0a 64 3b 65 3b 65 3b 65 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b a;c;..d;e;e;e;a;a;a;c;d;e;b;a;c;
1e00 64 3b 65 3b 62 3b 61 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 65 3b d;e;b;a;a;a;a;a;c;d;e;e;e;e;e;e;
1e20 62 3b 61 3b 61 3b 61 3b 61 3b 63 3b 0d 0a 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 61 3b b;a;a;a;a;c;..d;e;b;a;c;d;e;e;a;
1e40 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 62 3b 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b c;d;e;b;a;c;d;e;e;b;a;a;c;d;c;d;
1e60 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 62 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 0d 0a 65 3b 65 3b e;e;e;e;e;b;b;a;c;d;e;e;e;..e;e;
1e80 65 3b 61 3b 61 3b 61 3b 61 3b 63 3b 64 3b 65 3b 65 3b 65 3b 65 3b 65 3b 62 3b 61 3b 61 3b 61 3b e;a;a;a;a;c;d;e;e;e;e;e;b;a;a;a;
1ea0 61 3b 61 3b 63 3b 64 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b a;a;c;d;c;d;e;b;a;c;d;e;b;a;c;d;
1ec0 65 3b 62 3b 0d 0a 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 64 3b e;b;..a;c;d;e;b;a;c;d;e;b;a;c;d;
1ee0 65 3b 62 3b 61 3b 63 3b 64 3b 65 3b 62 3b 61 3b 63 3b 65 76 61 6c 20 24 65 0d 0a 0d 0a 24 5f 3d e;b;a;c;d;e;b;a;c;eval.$e....$_=
1f00 25 7b 71 2c 6c 3d 20 25 77 7b 52 75 62 79 5c 5c 20 51 75 69 7a 20 4c 6f 61 64 65 72 7d 0d 0a 6e %{q,l=.%w{Ruby\\.Quiz.Loader}..n
1f20 2c 70 2c 61 3d 20 22 5c 23 7b 71 2e 64 6f 23 7b 25 77 7b 77 20 61 20 6e 20 63 7d 2e 73 6f 72 74 ,p,a=."\#{q.do#{%w{w.a.n.c}.sort
1f40 7b 7c 6f 2c 74 7c 74 3c 3d 3e 6f 7d 7d 73 65 2e 64 5c 78 36 35 6c 5c 78 36 35 74 5c 78 36 35 28 {|o,t|t<=>o}}se.d\x65l\x65t\x65(
1f60 27 20 27 29 7d 2e 63 6f 6d 2f 22 2c 0d 0a 7b 22 62 6d 4a 7a 63 41 3d 3d 5c 6e 22 2e 5c 78 37 35 '.')}.com/",..{"bmJzcA==\n".\x75
1f80 6e 70 5c 78 36 31 63 6b 28 22 6d 22 29 5b 30 5d 3d 3e 22 20 22 2c 22 62 48 51 3d 5c 6e 22 2e 5c np\x61ck("m")[0]=>".","bHQ=\n".\
1fa0 78 37 35 6e 70 5c 78 36 31 63 6b 28 28 3f 6e 2d 31 29 2e 63 68 72 29 5b 30 5d 3d 3e 0d 0a 3a 3c x75np\x61ck((?n-1).chr)[0]=>..:<
1fc0 2c 22 5a 33 51 3d 5c 6e 22 2e 5c 78 37 35 6e 70 5c 78 36 31 63 6b 28 22 6d 22 29 5b 30 5d 3d 3e ,"Z3Q=\n".\x75np\x61ck("m")[0]=>
1fe0 3a 3e 2c 22 59 57 31 77 5c 6e 22 2e 5c 78 37 35 6e 70 5c 78 36 31 63 6b 28 28 3f 6c 2b 31 29 2e :>,"YW1w\n".\x75np\x61ck((?l+1).
2000 63 68 72 29 5b 30 5d 3d 3e 3a 26 7d 2c 0d 0a 5b 5b 2f 5e 5c 5c 73 2b 3c 5c 5c 2f 64 69 76 3e 2e chr)[0]=>:&},..[[/^\\s+<\\/div>.
2020 2b 2f 6d 2c 22 22 5d 2c 5b 2f 5e 5c 5c 73 2b 2f 2c 22 22 5d 2c 5b 2f 5c 6e 2f 2c 22 5c 6e 5c 6e +/m,""],[/^\\s+/,""],[/\n/,"\n\n
2040 22 5d 2c 5b 2f 3c 62 72 20 5c 5c 2f 3e 2f 2c 22 5c 6e 22 5d 2c 0d 0a 5b 2f 3c 68 72 20 5c 5c 2f "],[/<br.\\/>/,"\n"],..[/<hr.\\/
2060 3e 2f 2c 22 2d 3d 22 2a 34 30 5d 2c 5b 2f 3c 5b 5e 3e 5d 2b 3e 2f 2c 22 22 5d 2c 5b 2f 5e 72 75 >/,"-="*40],[/<[^>]+>/,""],[/^ru
2080 62 79 2f 2c 22 22 5d 2c 5b 2f 5c 6e 7b 33 2c 7d 2f 2c 22 5c 6e 5c 6e 22 5d 5d 3b 70 5c 31 36 35 by/,""],[/\n{3,}/,"\n\n"]];p\165
20a0 74 73 22 0d 0a 5c 23 7b 6c 5b 30 2e 2e 2d 33 5d 7d 69 6e 67 2e 2e 2e 5c 6e 5c 6e 22 3b 73 65 6e ts"..\#{l[0..-3]}ing...\n\n";sen
20c0 64 28 4b 65 72 6e 65 6c 2e 6d 65 74 68 6f 64 73 2e 66 69 6e 64 5f 61 6c 6c 7b 7c 78 7c 78 5b 30 d(Kernel.methods.find_all{|x|x[0
20e0 5d 3d 3d 3f 65 7d 5b 2d 31 5d 2c 0d 0a 22 72 65 5c 23 7b 71 5b 35 2e 2e 2e 38 5d 2e 64 6f 77 6e ]==?e}[-1],.."re\#{q[5...8].down
2100 63 61 73 65 7d 72 65 20 27 31 31 31 31 31 32 31 30 31 31 31 30 2d 31 31 37 31 31 34 31 30 35 27 case}re.'111112101110-117114105'
2120 2e 73 63 61 6e 28 2f 2d 7c 5c 5c 5c 5c 64 7b 33 7d 2f 29 2e 0d 0a 69 6e 6a 65 63 74 28 27 27 29 .scan(/-|\\\\d{3}/)...inject('')
2140 7b 7c 6d 2c 76 7c 76 2e 6c 65 6e 67 74 68 3e 31 3f 6d 2b 76 2e 74 6f 5f 69 2e 63 68 72 3a 20 6d {|m,v|v.length>1?m+v.to_i.chr:.m
2160 2b 76 7d 22 29 3b 6f 23 7b 25 77 7b 65 20 50 7d 2e 73 6f 72 74 2e 6a 6f 69 6e 2e 64 6f 77 6e 63 +v}");o#{%w{e.P}.sort.join.downc
2180 61 73 65 0d 0a 7d 6e 28 22 68 74 74 70 3a 2f 2f 77 77 77 2e 5c 23 7b 6e 7d 22 29 7b 7c 77 7c 24 ase..}n("http://www.\#{n}"){|w|$
21a0 46 3d 77 2e 72 65 61 64 2e 73 63 5c 78 36 31 6e 28 2f 6c 69 3e 2e 2b 3f 22 28 5b 5e 22 5d 2b 29 F=w.read.sc\x61n(/li>.+?"([^"]+)
21c0 2e 2e 28 5b 5e 3c 5d 2b 29 2f 29 7d 3b 5c 31 36 30 75 74 73 5c 0d 0a 22 5c 23 7b 71 7d 5c 6e 5c ..([^<]+)/)};\160uts\.."\#{q}\n\
21e0 6e 22 3b 24 46 2e 5c 31 34 35 5c 31 34 31 63 68 7b 7c 65 7c 69 3d 65 5b 30 5d 5b 2f 5c 5c 64 2b n";$F.\145\141ch{|e|i=e[0][/\\d+
2200 2f 5d 3b 73 3d 22 25 32 73 2e 20 20 25 73 22 25 5b 69 2c 65 5b 31 5d 5d 3b 69 2e 74 6f 5f 69 25 /];s="%2s...%s"%[i,e[1]];i.to_i%
2220 32 3d 3d 30 20 3f 0d 0a 5c 31 36 30 75 74 5c 78 37 33 28 73 29 20 3a 20 23 7b 25 77 7b 73 20 70 2==0.?..\160ut\x73(s).:.#{%w{s.p
2240 7d 5b 2d 31 5d 7d 72 69 6e 74 28 22 25 2d 33 38 73 20 20 22 25 73 29 7d 3b 70 5c 78 37 32 5c 78 }[-1]}rint("%-38s.."%s)};p\x72\x
2260 36 39 5c 78 36 65 74 22 5c 6e 3f 20 20 22 3b 65 5c 78 37 36 61 6c 28 0d 0a 5b 27 70 75 74 73 22 69\x6et"\n?..";e\x76al(..['puts"
2280 5c 6e 5c 23 7b 6c 5b 30 2e 2e 33 5d 7d 69 6e 67 2e 2e 2e 5c 6e 5c 6e 22 27 2c 27 24 63 3d 67 65 \n\#{l[0..3]}ing...\n\n"','$c=ge
22a0 74 73 2e 63 68 6f 6d 70 2e 74 6f 5f 69 27 5d 2e 73 6f 72 74 2e 6a 6f 69 6e 28 22 3b 22 29 29 3b ts.chomp.to_i'].sort.join(";"));
22c0 23 7b 31 31 31 2e 63 68 72 0d 0a 7d 70 65 6e 28 22 68 74 74 70 3a 2f 2f 77 77 77 2e 5c 23 7b 6e #{111.chr..}pen("http://www.\#{n
22e0 7d 22 2b 24 46 5b 24 63 2d 31 5d 5b 30 5d 29 7b 7c 6e 7c 24 5f 3d 6e 2e 72 65 61 64 5b 2f 5e 5c }"+$F[$c-1][0]){|n|$_=n.read[/^\
2300 5c 73 2b 3c 73 70 61 6e 2e 2b 2f 6d 5d 3b 23 7b 28 27 61 27 2e 2e 22 7a 22 29 2e 0d 0a 74 6f 5f \s+<span.+/m];#{('a'.."z")...to_
2320 61 5b 31 30 2d 35 2a 32 5d 7d 2e 65 5c 31 34 31 63 68 7b 7c 28 7a 2c 66 29 7c 5c 78 36 37 73 75 a[10-5*2]}.e\141ch{|(z,f)|\x67su
2340 62 21 28 7a 2c 66 29 7d 3b 5c 31 34 37 73 75 62 21 28 2f 26 28 5c 5c 77 2b 29 3b 2f 29 7b 7c 79 b!(z,f)};\147sub!(/&(\\w+);/){|y
2360 7c 70 2e 0d 0a 6b 65 5c 31 37 31 5c 30 37 37 28 24 31 29 3f 70 5b 24 31 5d 3a 79 7d 3b 77 68 69 |p...ke\171\077($1)?p[$1]:y};whi
2380 6c 65 24 5f 3d 7e 2f 28 5b 5e 5c 6e 5d 7b 38 31 2c 7d 29 2f 3a 7a 3d 24 31 2e 64 75 70 3b 66 3d le$_=~/([^\n]{81,})/:z=$1.dup;f=
23a0 24 31 2e 64 75 70 3b 66 5b 66 2e 72 69 6e 64 65 78 28 0d 0a 22 20 22 2c 38 30 29 2c 31 5d 3d 22 $1.dup;f[f.rindex(..".",80),1]="
23c0 5c 6e 22 3b 66 2e 73 5c 31 36 35 62 21 28 2f 5c 6e 5b 20 5c 74 5d 2b 2f 2c 22 5c 6e 22 29 3b 73 \n";f.s\165b!(/\n[.\t]+/,"\n");s
23e0 5c 31 36 35 62 21 28 2f 5c 23 7b 52 5c 78 36 35 67 5c 78 36 35 78 70 2e 0d 0a 5c 78 36 35 73 63 \165b!(/\#{R\x65g\x65xp...\x65sc
2400 61 70 5c 78 36 35 28 7a 29 7d 2f 2c 66 29 65 6e 64 7d 3b 77 68 69 6c 65 5c 30 34 30 5c 31 36 33 ap\x65(z)}/,f)end};while\040\163
2420 75 62 21 28 2f 5e 28 3f 3a 5b 5e 5c 6e 5d 2a 5c 6e 29 7b 32 30 7d 2f 2c 20 22 22 29 3a 70 75 74 ub!(/^(?:[^\n]*\n){20}/,.""):put
2440 73 22 5c 23 24 26 0d 0a 2d 2d 5c 78 34 64 4f 5c 78 35 32 45 2d 2d 22 3b 67 3d 24 5f 3b 67 23 7b s"\#$&..--\x4dO\x52E--";g=$_;g#{
2460 22 5c 31 34 35 22 7d 74 73 3b 3b 23 7b 22 65 78 63 69 74 65 64 22 5b 30 2e 2e 34 5d 2e 64 65 6c "\145"}ts;;#{"excited"[0..4].del
2480 65 74 65 28 22 63 22 29 7d 5c 30 34 30 69 66 24 5f 5b 30 5d 3d 3d 3f 71 0d 0a 24 5f 3d 67 3b 65 ete("c")}\040if$_[0]==?q..$_=g;e
24a0 6e 64 3b 24 5f 2e 64 23 7b 22 49 6e 74 65 72 6e 65 74 20 53 65 72 76 69 63 65 20 50 72 6f 76 69 nd;$_.d#{"Internet.Service.Provi
24c0 64 65 72 22 2e 73 63 61 6e 28 2f 5b 41 2d 5a 5d 2f 29 2e 6a 6f 69 6e 2e 64 6f 77 6e 63 61 73 65 der".scan(/[A-Z]/).join.downcase
24e0 0d 0a 7d 6c 61 79 7d 3b 65 76 61 6c 24 5f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 3d 5b 33 30 36 ..}lay};eval$_............d=[306
2500 34 34 32 35 30 37 38 30 2c 39 30 30 33 31 30 36 38 37 38 2c 0d 0a 20 20 20 20 33 30 36 33 36 32 44250780,9003106878,......306362
2520 37 38 38 34 36 2c 36 36 36 34 31 32 31 37 36 39 32 2c 34 35 30 31 37 39 30 39 38 30 2c 0d 0a 20 78846,66641217692,4501790980,...
2540 36 37 31 5f 32 34 5f 36 30 33 30 33 36 2c 31 33 31 5f 36 31 39 37 33 39 31 36 2c 36 36 5f 36 30 671_24_603036,131_61973916,66_60
2560 36 36 32 39 5f 39 32 30 2c 0d 0a 20 20 20 33 30 36 34 32 36 37 37 39 31 36 2c 33 30 36 34 33 30 6629_920,.....30642677916,306430
2580 36 39 30 35 38 5d 3b 61 2c 73 3d 5b 5d 2c 24 2a 5b 30 5d 0d 0a 20 20 20 20 20 20 73 2e 65 61 63 69058];a,s=[],$*[0]........s.eac
25a0 68 5f 62 79 74 65 7b 7c 62 7c 61 3c 3c 28 22 25 30 33 36 62 22 25 64 5b 62 2e 0d 0a 20 20 20 20 h_byte{|b|a<<("%036b"%d[b.......
25c0 20 20 20 20 20 63 68 72 2e 74 6f 5f 69 5d 29 2e 73 63 61 6e 28 2f 5c 64 7b 36 7d 2f 29 7d 0d 0a .....chr.to_i]).scan(/\d{6}/)}..
25e0 20 20 20 20 20 20 20 20 20 20 61 2e 74 72 61 6e 73 70 6f 73 65 2e 65 61 63 68 7b 20 7c 61 7c 0d ..........a.transpose.each{.|a|.
2600 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 2e 6a 6f 69 6e 2e 65 61 63 68 5f 62 79 74 65 7b 5c 0d .............a.join.each_byte{\.
2620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 69 7c 70 72 69 6e 74 20 69 3d 3d 34 39 3f 5c 0d 0a ..............|i|print.i==49?\..
2640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 2a 5b 31 5d 7c 7c 22 23 22 29 5c 0d 0a 20 20 ...............($*[1]||"#")\....
2660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 33 32 2e 63 68 72 7d 0d 0a 20 20 20 20 20 20 20 ...............:32.chr}.........
2680 20 20 20 20 20 20 20 20 20 20 20 20 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ............puts................
26a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 72 75 62 79 0d ......}....#!./usr/bin/env.ruby.
26c0 0a 23 20 4c 69 63 65 6e 73 65 3a 20 49 66 20 52 75 62 79 20 69 73 20 6c 69 63 65 6e 73 65 64 20 .#.License:.If.Ruby.is.licensed.
26e0 74 6f 20 74 68 65 20 67 65 6e 65 72 61 6c 20 70 75 62 6c 69 63 20 69 6e 20 61 20 63 65 72 74 61 to.the.general.public.in.a.certa
2700 69 6e 20 77 61 79 2c 20 74 68 69 73 20 69 73 20 61 6c 73 6f 20 6c 69 63 65 6e 73 65 64 20 69 6e in.way,.this.is.also.licensed.in
2720 20 74 68 61 74 20 77 61 79 2e 0d 0a 72 65 71 75 69 72 65 27 7a 6c 69 62 27 3b 65 76 61 6c 28 5a .that.way...require'zlib';eval(Z
2740 6c 69 62 3a 3a 49 6e 66 6c 61 74 65 2e 69 6e 66 6c 61 74 65 28 22 78 5c 33 33 32 5c 33 35 35 57 lib::Inflate.inflate("x\332\355W
2760 4b 6f 5c 33 33 33 46 5c 30 32 30 5c 32 37 36 5c 33 36 37 57 5c 32 35 30 5c 32 36 32 5c 30 30 31 Ko\333F\020\276\367W\250\262\001
2780 5c 32 32 32 5c 74 4d 5c 33 35 37 5c 32 34 36 4d 5c 30 31 37 5c 32 34 32 5c 32 31 31 5c 32 34 32 \222\tM\357\246M\017\242\211\242
27a0 68 5c 32 30 30 5c 30 33 36 5c 32 31 32 60 5c 32 30 31 5c 30 32 36 5c 33 35 30 5c 32 30 35 60 5c h\200\036\212`\201\026\350\205`\
27c0 66 3d 68 5c 32 33 33 5c 33 30 31 5a 74 25 5c 32 37 33 41 2d 32 5c 32 37 37 5c 32 37 35 5c 33 36 f=h\233\301Zt%\273A-2\277\275\36
27e0 33 5c 33 31 35 5c 32 32 32 5c 33 33 34 5c 32 34 31 2c 23 76 5c 32 31 34 5c 33 36 36 54 5c 33 33 3\315\222\334\241,#v\214\366T\33
2800 31 5c 32 36 32 5c 33 32 36 5c 33 30 33 79 5c 33 31 37 37 5c 32 36 33 5c 32 34 33 4d 5c 33 37 31 1\262\326\303y\3177\263\243M\371
2820 5c 33 34 37 5d 5c 32 36 35 29 5c 32 30 33 55 75 59 6e 6f 4f 5c 32 35 37 57 6f 5c 32 30 33 5c 33 \347]\265)\203UuYnoO\257Wo\203\3
2840 36 34 3e 5b 54 5c 33 35 33 55 5c 32 36 35 5c 32 37 36 4c 5c 32 35 37 5c 33 35 33 5c 33 32 35 5c 64>[T\353U\265\276L\257\353\325\
2860 32 33 35 2d 27 5c 32 37 37 5c 32 32 36 5c 32 33 33 75 69 5c 33 32 33 55 79 31 5c 32 35 31 5c 30 235-'\277\226\233ui\323Uy1\251\0
2880 32 37 5c 30 32 37 5c 33 34 31 5c 32 35 33 5c 33 37 31 5c 33 34 36 72 5c 65 5c 32 34 35 75 5c 33 27\027\341\253\371\346r\e\245u\3
28a0 36 36 5c 32 31 36 5c 32 30 35 66 5c 32 36 33 5c 33 36 37 5c 33 35 37 5c 33 33 36 26 5c 33 35 33 66\216\205f\263\367\357\336&\353
28c0 5c 33 36 32 53 5c 30 31 30 7a 72 3d 5c 32 37 37 5c 33 33 31 35 77 5c 33 31 35 5d 72 5b 5c 32 33 \362S\010zr=\277\3315w\315]r[\23
28e0 37 6f 5c 33 33 33 5c 33 34 34 63 5d 5c 32 35 35 23 3e 5c 33 34 33 4f 5c 30 32 35 5c 33 35 32 5c 7o\333\344c]\255#>\343O\025\352\
2900 30 33 37 5c 33 33 34 5c 31 37 37 5c 33 34 31 5c 33 36 37 5c 33 36 34 5c 32 37 31 5c 74 5c 30 30 037\334\177\341\367\364\271\t\00
2920 33 5c 32 34 35 5c 33 33 37 7c 5c 30 32 37 5c 33 30 34 5c 33 36 34 61 4d 40 3a 5c 33 36 33 5c 32 3\245\337|\027\304\364aM@:\363\2
2940 36 30 5c 33 31 36 3e 5c 32 33 37 5c 32 33 32 5c 33 32 33 28 5c 33 32 36 5c 32 35 32 28 5c 33 32 60\316>\237\232\323(\326\252(\32
2960 37 5c 32 35 33 5c 74 5c 32 37 35 5c 33 32 33 5c 33 33 32 68 5c 32 35 33 5c 32 32 34 56 5c 33 30 7\253\t\275\323\332h\253\224V\30
2980 36 64 5c 32 34 37 5c 30 33 37 5c 33 36 32 5c 33 37 31 5c 33 31 31 7d 5c 33 32 31 5c 33 31 34 66 6d\247\037\362\371\311}\321\314f
29a0 5c 33 35 36 5c 33 36 33 43 5c 30 31 36 5c 33 31 31 5c 33 34 32 5c 33 36 35 5c 33 36 31 69 6a 5c \356\363C\016\311\342\365\361ij\
29c0 30 32 36 5c 30 33 37 5c 33 31 33 5c 33 34 35 5c 33 35 35 5c 33 35 37 37 5c 33 36 33 65 5c 32 33 026\037\313\345\355\3577\363e\23
29e0 31 5c 32 32 34 5c 33 36 33 5c 33 34 35 5c 33 32 35 79 5c 33 31 35 5c 32 30 34 5d 5c 32 36 33 6c 1\224\363\345\325y\315\204]\263l
2a00 5c 33 36 32 30 5c 31 37 37 5c 33 31 37 5c 32 34 31 5c 30 32 34 4d 5c 33 37 36 5c 32 36 33 5c 32 \3620\177\317\241\024M\376\263\2
2a20 33 35 6f 5c 32 36 37 45 74 5c 32 32 32 2f 5c 32 32 33 25 5c 30 33 37 5c 32 31 33 5c 33 37 34 44 35o\267Et\222/\223%\037\213\374D
2a40 5c 33 32 33 5c 33 37 33 4d 5c 33 32 31 34 4b 76 2d 5c 33 37 33 3c 5c 33 36 31 5c 30 32 36 5c 32 \323\373M\3214Kv-\373<\361\026\2
2a60 33 33 26 5c 5c 5c 33 30 34 5c 32 35 33 2c 5c 33 35 34 5c 32 37 30 5c 32 36 33 5c 33 31 34 29 5c 33&\\\304\253,\354\270\263\314)\
2a80 32 33 32 5c 33 37 34 38 5c 33 31 31 5c 32 34 37 5d 7a 5c 32 31 36 76 5c 33 31 33 36 5c 32 33 35 232\3748\311\247]z\216v\3136\235
2aa0 5c 33 30 36 5c 33 32 33 5c 32 34 33 5c 30 33 35 5c 32 36 32 5c 32 36 33 5c 32 31 34 5c 33 33 32 \306\323\243\035\262\263\214\332
2ac0 5c 66 5c 30 32 34 5c 33 34 32 5c 32 35 37 5c 33 32 37 5c 33 34 35 5c 32 36 34 5c 32 33 30 5c 32 \f\024\342\257\327\345\264\230\2
2ae0 30 35 5c 33 31 33 6f 33 36 5c 33 31 32 32 5c 32 35 34 65 32 5c 32 36 30 5c 32 33 36 5c 32 36 31 05\313o36\3122\254e2\260\236\261
2b00 30 5c 32 30 32 5c 33 35 34 5c 30 33 37 5c 32 36 30 5c 32 35 36 20 28 66 3d 2f 5c 33 31 33 3a 5a 0\202\354\037\260\256.(f=/\313:Z
2b20 5c 30 32 34 5c 32 34 35 5c 33 31 33 5c 32 34 34 5a 6f 6f 5c 33 34 37 5c 33 35 33 65 79 7e 5d 5c \024\245\313\244Zoo\347\353ey~]\
2b40 33 33 36 5e 5c 33 32 35 5c 32 35 33 2d 5c 61 5c 32 37 33 6b 5c 32 35 32 66 71 76 36 5c 32 33 35 336^\325\253-\a\273k\252fqv6\235
2b60 5c 33 33 33 6a 5c 32 37 36 5c 33 35 35 5c 32 33 36 74 56 5c 32 35 32 5c 32 33 30 5c 33 37 37 46 \333j\276\355\236tV\252\230\377F
2b80 5c 32 37 36 5c 6e 5c 33 33 33 5c 32 37 37 5c 32 35 37 5c 32 34 31 5c 33 34 35 5c 32 30 36 5c 32 \276\n\333\277\257\241\345\206\2
2ba0 36 32 5c 33 32 33 5c 33 30 36 47 5c 32 37 33 5c 33 35 32 5c 33 34 30 5c 32 30 33 74 5c 33 33 32 62\323\306G\273\352\340\203t\332
2bc0 5c 32 34 36 5c 32 34 34 31 60 27 5c 33 31 36 5c 33 31 36 5c 32 36 36 5c 32 34 35 5c 32 37 35 48 \246\2441`'\316\316\266\245\275H
2be0 5c 30 30 33 32 5c 33 37 37 6c 5c 32 35 33 5c 30 31 37 2c 3d 34 32 45 5c 30 30 32 5c 33 36 30 5c \0032\377l\253\017,=42E\002\360\
2c00 32 33 36 5c 32 34 36 5c 33 34 35 5f 73 3b 59 5c 32 37 34 5e 5c 33 30 35 5c 33 36 37 51 5c 32 33 236\246\345_s;Y\274^\305\367Q\23
2c20 33 5c 30 33 36 5c 32 33 33 5c 32 37 36 5c 30 31 36 5c 33 31 32 5c 32 34 35 30 3d 5c 32 35 36 3d 3\036\233\276\016\312\2450=\256=
2c40 5c 33 30 35 55 5c 32 30 32 5c 32 33 30 5c 32 35 34 5c 22 5c 32 32 32 5c 32 36 35 5c 30 30 34 5c \305U\202\230\254\"\222\265\004\
2c60 32 31 37 5c 32 33 37 7e 5c 33 37 33 5c 33 34 35 5c 30 31 37 5c 22 68 5c 32 34 33 5c 32 31 30 5c 217\237~\373\345\017\"h\243\210\
2c80 33 30 37 6a 5c 32 33 35 5c 32 35 31 5c 32 30 35 56 38 5c 33 35 33 5c 33 30 34 58 5c 33 37 32 21 307j\235\251\205V8\353\304X\372!
2ca0 31 43 47 63 2d 5c 32 35 31 5c 32 34 30 5c 33 33 37 5c 30 32 30 5c 33 31 37 5c 33 36 31 23 5c 30 1CGc-\251\240\337\020\317\361#\0
2cc0 33 36 5c 30 32 33 5c 6e 5c 32 35 35 36 5c 32 35 34 43 67 33 5c 30 30 32 7d 5c 32 36 35 5c 33 35 36\023\n\2556\254Cg3\002}\265\35
2ce0 36 73 5c 32 33 35 5c 32 30 32 4b 5b 4b 5c 30 32 32 5c 30 32 30 20 5c 32 34 33 5c 32 30 36 5c 32 6s\235\202K[K\022\020.\243\206\2
2d00 31 36 5c 32 34 31 70 33 5c 33 33 32 35 35 5c 33 35 30 5c 32 33 32 5c 30 33 36 5c 30 33 30 71 24 16\241p3\33255\350\232\036\030q$
2d20 5c 32 33 33 5c 33 34 34 21 5c 33 36 33 5c 32 30 34 5e 7d 2c 24 5c 30 32 33 58 67 5c 32 33 35 3a \233\344!\363\204^},$\023Xg\235:
2d40 5c 33 36 34 72 31 5c 22 31 5c 33 34 34 5c 32 37 37 5c 32 36 31 5c 32 30 37 5c 30 33 31 28 5c 33 \364r1\"1\344\277\261\207\031(\3
2d60 30 31 44 45 5c 32 36 30 5c 33 34 34 5c 30 32 36 59 5c 31 37 37 5c 33 34 35 5c 30 33 36 5c 32 32 01DE\260\344\026Y\177\345\036\22
2d80 31 5c 32 30 34 6d 50 5c 32 36 33 5c 32 36 36 4d 6b 5c 33 30 35 5c 33 36 36 5c 32 31 30 25 33 5c 1\204mP\263\266Mk\305\366\210%3\
2da0 32 32 30 5c 33 30 32 53 5c 33 32 32 5c 33 30 36 49 52 5c 33 31 36 5c 33 37 37 21 5c 32 30 33 20 220\302S\322\306IR\316\377!\203.
2dc0 53 5c 33 33 36 5c 33 31 30 5c 32 31 36 5c 32 31 35 5c 32 30 33 5c 33 31 35 5c 30 30 32 2d 5c 32 S\336\310\216\215\203\315\002-\2
2de0 31 31 20 35 44 32 5c 32 35 37 5c 32 31 30 5c 33 30 32 5c 33 32 31 70 5c 32 33 34 5c 33 36 34 5c 11.5D2\257\210\302\321p\234\364\
2e00 32 30 35 5c 32 32 32 4a 6a 5c 32 32 30 5c 30 32 32 45 5c 33 32 31 68 5c 33 34 37 5c 32 32 33 52 205\222Jj\220\022E\321h\347\223R
2e20 51 2a 39 34 4b 5c 30 32 32 5c 32 34 33 5c 33 31 34 48 60 34 7b 4c 56 5c 30 30 33 5c 30 32 31 4e Q*94K\022\243\314H`4{LV\003\021N
2e40 5c 66 5c 33 33 33 5c 33 36 34 49 5c 33 34 37 6c 5c 33 32 37 55 52 5c 33 30 35 74 5c 33 34 30 5c \f\333\364I\347l\327UR\305t\340\
2e60 33 33 32 69 3e 5c 32 34 31 78 3d 4d 75 34 52 5c 32 34 35 5c 33 37 33 5c 32 32 33 5c 32 34 34 5c 332i>\241x=Mu4R\245\373\223\244\
2e80 32 35 31 4e 42 5c 32 31 31 5c 32 34 37 5c 32 33 36 5c 33 34 36 35 5c 32 35 33 5e 62 78 5c 33 33 251NB\211\247\236\3465\253^bx\33
2ea0 32 59 63 5c 32 36 33 5c 32 35 32 4d 5c 32 32 30 62 5c 32 35 33 5c 32 32 30 5c 33 31 30 5c 30 30 2Yc\263\252M\220b\253\220\310\00
2ec0 34 5c 33 33 31 5c 32 34 32 5c 30 32 30 2c 60 5c 30 30 35 54 5c 30 32 31 59 5c 32 35 31 50 40 5c 4\331\242\020,`\005T\021Y\251P@\
2ee0 30 32 30 5c 33 36 35 41 78 5c 33 31 30 7a 5c 33 36 34 5c 32 36 34 5c 32 34 30 5c 32 36 35 76 6a 020\365Ax\310z\364\264\240\265vj
2f00 32 5c 30 33 37 3f 30 5c 76 5c 22 65 6e 5c 32 34 34 5c 33 37 34 5c 32 35 31 5c 30 33 32 5c 32 32 2\037?0\v\"en\244\374\251\032\22
2f20 35 5c 32 35 33 76 5c 33 34 36 5c 32 35 33 5c 33 37 31 32 5c 32 31 35 5c 30 33 32 5c 33 32 32 28 5\253v\346\253\3712\215\032\322(
2f40 6f 5c 32 30 36 7e 41 5c 30 30 36 5c 30 31 30 5c 66 5c 33 32 34 5c 32 32 33 35 37 5c 30 32 36 5c o\206~A\006\010\f\324\22357\026\
2f60 22 5c 33 31 36 5c 30 32 34 5c 33 36 35 5c 30 32 31 5c 33 36 30 40 5c 32 37 37 3a 5c 33 36 33 2e "\316\024\365\021\360@\277:\363.
2f80 24 5c 66 5c 33 34 32 5c 30 31 36 24 5c 32 30 30 5c 76 5c 33 34 31 5c 33 30 32 5c 32 33 30 5c 30 $\f\342\016$\200\v\341\302\230\0
2fa0 32 30 5c 33 34 30 5c 33 34 31 5c 32 30 31 4b 5c 30 31 37 5c 32 37 30 2b 69 5c 33 32 36 2d 5c 33 20\340\341\201K\017\270+i\326-\3
2fc0 31 32 5c 33 31 33 6a 5c 32 33 35 5c 6e 5b 5c 33 37 36 28 7b 5c 33 33 30 75 5c 32 35 34 5c 32 36 12\313j\235\n[\376({\330u\254\26
2fe0 36 5c 33 33 34 5c 30 33 34 5c 30 33 31 5c 33 36 37 25 3a 43 4b 5c 32 31 30 7b 5c 33 31 31 68 5c 6\334\034\031\367%:CK\210{\311h\
3000 61 51 48 5c 33 33 33 51 5c 30 32 33 5c 32 35 30 5c 32 31 30 3b 65 5c 33 36 30 5c 33 32 32 5c 33 aQH\333Q\023\250\210;e\360\322\3
3020 36 32 5c 32 31 33 5c 32 30 32 5c 32 34 37 5c 32 31 36 5c 32 36 36 5c 33 34 30 43 26 28 70 5c 32 62\213\202\247\216\266\340C&(p\2
3040 37 34 48 54 37 5c 33 33 36 26 42 5c 33 35 32 5c 33 30 30 5c 30 33 36 7a 5c 32 30 36 5c 32 30 34 74HT7\336&B\352\300\036z\206\204
3060 5c 33 37 35 20 5c 30 33 32 7a 5c 33 30 34 5c 32 33 33 5c 32 31 37 5c 30 33 34 5c 32 36 37 41 4b \375.\032z\304\233\217\034\267AK
3080 5c 32 30 37 52 5c 33 36 33 5c 32 31 33 5c 33 32 34 75 5c 33 33 34 5c 32 30 33 5c 32 37 32 68 5c \207R\363\213\324u\334\203\272h\
30a0 32 33 34 20 5c 33 30 34 26 5c 33 36 34 53 5c 33 30 32 5d 7c 5c 30 32 34 5c 32 33 33 62 5c 30 30 234.\304&\364S\302]|\024\233b\00
30c0 30 5c 30 32 33 45 5c 30 33 34 5c 30 30 35 5c 33 30 30 21 5c 33 33 30 5c 32 32 37 34 5c 30 32 36 0\023E\034\005\300!\330\2274\026
30e0 5c 32 30 35 5c 33 31 36 5c 33 36 33 5c 32 30 33 5c 33 36 34 5c 22 5c 33 31 36 5c 32 34 35 21 5c \205\316\363\203\364\"\316\245!\
3100 32 34 32 5c 33 36 30 59 3f 34 5c 32 30 34 62 5c 30 32 33 2e 5c 32 30 30 39 5c 30 33 36 58 5c 33 242\360Y?4\204b\023.\2009\036X\3
3120 30 30 5c 32 31 33 70 5c 32 30 30 5d 5c 33 30 34 5c 33 32 34 5c 32 30 30 24 5e 5c 32 30 34 5c 30 00\213p\200]\304\324\200$^\204\0
3140 32 35 5c 32 32 32 44 5c 33 32 35 58 20 5c 33 36 33 5c 33 32 34 5c 30 30 34 5c 32 32 33 5c 32 30 25\222D\325X.\363\324\004\223\20
3160 35 5c 32 30 37 5c 32 34 31 4d 5c 32 34 35 5c 33 35 32 5c 33 34 31 28 73 5c 33 34 31 35 5c 32 36 5\207\241M\245\352\341(s\3415\26
3180 30 77 5c 32 32 36 5c 33 31 33 3d 5c 32 34 32 32 20 5c 32 30 30 5c 31 37 37 5c 33 34 34 5c 33 35 0w\226\313=\2422.\200\177\344\35
31a0 35 5c 32 31 31 5c 33 33 35 30 5c 30 30 34 5c 33 34 31 5c 32 31 37 5c 32 30 37 5c 32 31 35 72 25 5\211\3350\004\341\217\207\215r%
31c0 78 5c 30 33 30 5c 33 30 32 5c 33 30 34 5c 32 33 30 5c 33 33 35 7b 23 5c 32 35 30 23 6f 5c 32 30 x\030\302\304\230\335{#\250#o\20
31e0 34 68 5c 33 32 37 3b 5c 32 32 30 5c 32 34 32 5c 32 37 35 42 25 6a 26 5c 33 34 33 65 5c 30 30 35 4h\327;\220\242\275B%j&\343e\005
3200 5c 32 32 36 2f 5c 72 5c 32 30 30 5c 30 33 35 5c 30 33 35 5c 32 30 36 4b 5c 32 34 33 5c 30 32 37 \226/\r\200\035\035\206K\243\027
3220 5c 32 31 36 5a 5c 32 33 30 5c 33 32 33 2e 5c 33 33 35 5c 33 35 36 5e 21 5c 76 46 5c 30 30 32 4b \216Z\230\323.\335\356^!\vF\002K
3240 5c 33 36 36 5c 32 34 36 6b 47 5c 33 32 31 5c 33 36 34 45 5c 33 30 31 5c 33 36 32 5c 32 35 30 5c \366\246kG\321\364E\301\362\250\
3260 32 37 35 61 5c 66 5c 30 33 31 5c 32 30 37 69 25 5c 32 31 36 5c 33 34 32 26 69 65 5c 32 30 35 5c 275a\f\031\207i%\216\342&ie\205\
3280 32 36 30 5c 33 32 34 7d 5c 32 37 32 5c 32 35 32 68 6f 5c 32 32 32 5c 33 30 36 5c 33 37 30 5c 33 260\324}\272\252ho\222\306\370\3
32a0 36 32 21 7d 36 5c 33 36 34 43 5c 30 30 33 5c 32 37 31 37 5c 32 30 36 27 21 2e 5c 33 31 35 5c 30 62!}6\364C\003\2717\206'!.\315\0
32c0 33 36 6d 68 4d 6d 5c 33 37 30 5c 32 35 32 5c 32 34 31 5c 33 36 35 5c 32 32 31 67 5c 32 37 35 5c 36mhMm\370\252\241\365\221g\275\
32e0 33 32 36 41 5c 33 30 32 5c 32 35 34 5c 32 37 30 58 2c 5c 33 37 31 5c 33 35 33 5c 32 33 32 3a 5c 326A\302\254\270X,\371\353\232:\
3300 32 32 32 5c 33 32 31 5c 32 35 33 5c 30 32 35 5c 32 31 37 76 25 5c 32 32 32 5c 30 32 33 21 5c 32 222\321\253\025\217v%\222\023!\2
3320 34 33 72 5c 32 37 32 5c 33 36 34 28 5c 33 37 36 5c 31 37 37 5c 32 33 36 5c 33 37 34 5c 32 33 33 43r\272\364(\376\177\236\374\233
3340 5c 33 36 33 5c 33 30 34 38 5c 33 33 30 62 5c 32 34 31 78 64 54 70 5c 33 32 35 5c 33 32 31 5c 33 \363\3048\330b\241xdTp\325\321\3
3360 37 37 5c 33 34 32 38 46 5c 32 33 34 5c 32 31 34 5c 32 36 33 5c 33 35 37 5c 32 35 35 66 5c 33 32 77\3428F\234\214\263\357\255f\32
3380 34 5c 33 30 36 5c 32 32 36 5c 32 35 37 5c 30 32 32 5c 22 5c 30 30 30 5c 33 35 34 5c 30 30 33 5c 4\306\226\257\022\"\000\354\003\
33a0 30 32 34 43 5c 32 30 37 5c 6e 61 5c 33 35 33 5c 32 34 30 26 4f 5c 33 30 35 5c 33 37 36 5c 30 30 024C\207\na\353\240&O\305\376\00
33c0 34 6e 63 79 5c 33 35 30 5c 66 5c 32 37 36 5c 33 35 37 2b 51 7c 5c 32 30 31 62 42 69 5c 32 30 36 4ncy\350\f\276\357+Q|\201bBi\206
33e0 5c 32 37 37 5c 33 34 35 75 5c 32 35 31 5c 32 37 33 5c 33 31 30 5c 33 36 37 5c 32 34 32 5c 33 30 \277\345u\251\273\310\367\242\30
3400 33 2a 5c 32 30 34 64 5c 6e 5c 32 37 31 7d 5c 30 31 36 5c 32 33 34 35 72 38 5c 30 33 34 5c 32 30 3*\204d\n\271}\016\2345r8\034\20
3420 31 5b 5c 33 34 33 3a 3e 5c 33 36 34 2a 5c 32 34 32 5c 32 36 36 5c 30 32 35 2b 48 5a 5c 32 36 33 1[\343:>\364*\242\266\025+HZ\263
3440 65 5c 32 31 32 5c 30 32 34 37 71 5c 33 35 37 5c 33 31 30 58 5c 32 36 37 5b 5c 33 33 33 28 39 5f e\212\0247q\357\310X\267[\333(9_
3460 6f 7d 50 5c 32 30 31 5c 33 32 34 3e 5c 32 36 36 5c 33 36 34 5c 30 30 30 5c 32 31 37 68 68 5c 33 o}P\201\324>\266\364\000\217hh\3
3480 35 32 5c 32 32 35 61 5c 32 31 33 71 5c 32 36 30 5c 30 33 31 5c 33 33 34 5c 30 32 32 73 67 5c 33 52\225a\213q\260\031\334\022sg\3
34a0 36 30 5c 65 5c 32 30 36 5c 32 33 34 42 3d 5c 32 34 36 5c 32 34 32 31 5c 33 34 31 65 5c 33 36 34 60\e\206\234B=\246\2421\341e\364
34c0 5c 32 37 30 5c 33 32 31 5c 32 32 34 5c 33 34 37 5c 30 30 35 36 4c 5c 32 36 37 5c 32 32 37 29 5c \270\321\224\347\0056L\267\227)\
34e0 32 34 34 5c 32 31 30 5c 33 30 37 5c 30 32 37 5c 32 35 37 3c 5c 33 34 33 5c 32 35 37 5c 30 30 30 244\210\307\027\257<\343\257\000
3500 5c 33 30 33 5c 32 36 34 75 7b 5c 32 33 35 5c 33 32 36 5c 33 35 32 69 5c 33 30 33 5e 5c 33 33 32 \303\264u{\235\326\352i\303^\332
3520 5c 32 30 30 5c 6e 5c 32 33 36 5c 32 34 33 61 5c 32 37 37 5c 30 33 34 4a 23 7e 53 5c 33 33 35 27 \200\n\236\243a\277\034J#~S\335'
3540 32 5c 33 37 31 5c 30 30 31 71 5c 33 37 34 35 24 5c 33 35 36 5c 30 32 37 5e 5c 33 37 31 5c 33 32 2\371\001q\3745$\356\027^\371\32
3560 35 5c 33 34 34 5c 33 33 31 5c 30 33 36 5c 33 36 32 5c 30 30 34 5c 32 36 37 5c 33 33 30 5c 32 35 5\344\331\036\362\004\267\330\25
3580 31 3c 5c 32 31 32 5c 32 33 37 5c 32 35 37 5c 33 34 35 6b 72 5c 33 37 31 5c 33 30 32 64 5c 33 36 1<\212\237\257\345kr\371\302d\36
35a0 32 72 5c 33 37 36 5c 33 34 34 64 5c 32 35 32 43 5c 33 31 31 5c 33 37 34 52 36 5c 30 31 37 65 5c 2r\376\344d\252C\311\374R6\017e\
35c0 33 37 35 5c 30 30 35 5c 32 37 31 79 41 56 5c 33 36 33 2f 5c 32 35 37 5c 33 34 35 5c 32 36 31 28 375\005\271yAV\363/\257\345\261(
35e0 5c 33 34 30 68 57 5c 30 32 30 5c 32 32 32 5c 61 5c 30 32 37 6b 29 36 30 5c 33 35 34 5c 32 31 37 \340hW\020\222\a\027k)60\354\217
3600 5c 33 36 33 5c 33 35 30 31 5c 32 36 33 72 74 5c 30 33 36 34 5c 30 32 35 5c 30 32 35 7c 5c 32 36 \363\3501\263rt\0364\025\025|\26
3620 35 5c 30 33 31 5c 33 35 35 5c 32 37 36 64 5c 33 35 37 5c 33 31 35 39 5c 33 36 37 5c 32 32 35 5c 5\031\355\276d\357\3159\367\225\
3640 30 32 35 5c 32 32 33 55 5c 32 37 33 6e 5c 30 32 37 5c 33 32 34 5c 33 32 31 48 5c 30 33 31 5c 30 025\223U\273n\027\324\321H\031\0
3660 33 30 5c 30 33 36 5c 33 35 37 5c 33 35 36 5c 33 37 37 5c 30 31 30 5c 32 36 36 5c 33 33 37 5c 33 30\036\357\356\377\010\266\337\3
3680 37 34 5c 30 30 33 5c 33 33 37 35 51 5c 33 33 35 22 29 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 72 74\003\3375Q\335"))..#include."r
36a0 75 62 79 2e 68 22 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 20 2f 73 4c 61 53 68 20 20 20 20 20 20 uby.h".../*........./sLaSh......
36c0 20 20 2a 0d 0a 20 20 6f 42 66 55 73 43 61 54 65 44 20 20 52 75 42 79 20 20 20 2a 0d 0a 20 20 20 ..*....oBfUsCaTeD..RuBy...*.....
36e0 63 4f 70 59 72 49 67 48 74 20 32 30 30 35 20 20 20 20 2a 0d 0a 62 59 20 53 69 4d 6f 4e 20 53 74 cOpYrIgHt.2005....*..bY.SiMoN.St
3700 52 61 4e 64 47 61 41 72 44 20 2a 0d 0a 20 23 7b 58 3d 33 32 30 3b 59 3d 32 30 30 3b 5a 3d 32 30 RaNdGaArD.*...#{X=320;Y=200;Z=20
3720 7d 20 20 2a 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 47 55 4e 31 20 34 32 3a 0d 0a 23 64 65 66 69 }..*/....#define.GUN1.42:..#defi
3740 6e 65 20 47 55 4e 32 20 34 33 3a 0d 0a 23 64 65 66 69 6e 65 20 62 6f 20 64 6f 0d 0a 23 64 65 66 ne.GUN2.43:..#define.bo.do..#def
3760 69 6e 65 20 77 68 65 6e 28 67 75 6e 29 20 2f 2a 2a 2f 0d 0a 23 64 65 66 69 6e 65 20 44 41 54 41 ine.when(gun)./**/..#define.DATA
3780 20 22 70 20 27 48 65 6c 6c 6f 20 65 6d 62 65 64 64 65 64 20 77 6f 72 6c 64 27 22 0d 0a 23 64 65 ."p.'Hello.embedded.world'"..#de
37a0 66 69 6e 65 20 44 49 52 54 59 28 61 72 67 63 2c 61 72 67 76 29 5c 0d 0a 61 72 67 63 2c 61 72 67 fine.DIRTY(argc,argv)\..argc,arg
37c0 76 2c 63 68 61 72 3d 65 76 61 6c 28 5c 0d 0a 22 23 7b 44 41 54 41 2e 72 65 61 64 7d 5c 6e 5b 33 v,char=eval(\.."#{DATA.read}\n[3
37e0 2c 32 2c 31 5d 22 5c 0d 0a 29 3b 73 75 6e 3d 4f 2e 6e 65 77 5c 0d 0a 69 66 28 30 29 0d 0a 0d 0a ,2,1]"\..);sun=O.new\..if(0)....
3800 69 6e 74 0d 0a 73 75 6e 5b 5d 3d 7b 31 32 2c 39 2c 31 36 2c 39 2c 32 2c 31 2c 37 2c 31 2c 33 2c int..sun[]={12,9,16,9,2,1,7,1,3,
3820 39 2c 32 37 2c 34 2c 20 31 33 2c 32 2c 31 31 2c 35 2c 34 2c 31 2c 32 35 2c 0d 0a 35 2c 30 2c 31 9,27,4,.13,2,11,5,4,1,25,..5,0,1
3840 2c 31 34 2c 39 2c 31 35 2c 34 2c 32 36 2c 39 2c 32 33 2c 32 2c 31 37 2c 36 2c 33 31 2c 20 36 2c ,14,9,15,4,26,9,23,2,17,6,31,.6,
3860 31 30 2c 38 2c 32 32 2c 39 2c 32 31 2c 31 2c 0d 0a 32 34 2c 38 2c 32 30 2c 38 2c 31 38 2c 39 2c 10,8,22,9,21,1,..24,8,20,8,18,9,
3880 32 39 2c 35 2c 39 2c 35 2c 31 2c 31 2c 32 38 2c 38 2c 38 2c 31 2c 33 30 2c 20 39 2c 36 2c 38 2c 29,5,9,5,1,1,28,8,8,1,30,.9,6,8,
38a0 20 35 2c 31 2c 0d 0a 31 39 2c 39 2c 33 36 2c 31 39 2c 34 33 2c 20 39 2c 33 34 2c 31 31 2c 35 30 .5,1,..19,9,36,19,43,.9,34,11,50
38c0 2c 31 39 2c 34 38 2c 31 38 2c 34 39 2c 39 2c 20 33 35 2c 38 2c 34 32 2c 31 38 2c 0d 0a 35 31 2c ,19,48,18,49,9,.35,8,42,18,..51,
38e0 38 2c 34 34 2c 31 31 2c 33 32 2c 20 31 31 2c 34 37 2c 39 2c 33 37 2c 31 2c 33 39 2c 39 2c 33 38 8,44,11,32,.11,47,9,37,1,39,9,38
3900 2c 31 39 2c 20 20 34 35 2c 38 2c 34 30 2c 31 32 2c 0d 0a 34 31 2c 39 2c 34 36 2c 31 32 2c 33 33 ,19,..45,8,40,12,..41,9,46,12,33
3920 2c 31 2c 35 37 2c 31 2c 38 35 2c 35 2c 38 38 2c 32 38 2c 38 33 2c 34 2c 38 37 2c 20 36 2c 36 32 ,1,57,1,85,5,88,28,83,4,87,.6,62
3940 2c 32 38 2c 38 39 2c 0d 0a 39 2c 38 30 2c 32 38 2c 36 30 2c 32 31 2c 35 32 2c 32 31 2c 37 32 2c ,28,89,..9,80,28,60,21,52,21,72,
3960 32 39 2c 35 34 2c 32 31 2c 37 35 2c 38 2c 37 30 2c 32 39 2c 35 38 2c 32 38 2c 36 35 2c 0d 0a 39 29,54,21,75,8,70,29,58,28,65,..9
3980 2c 39 31 2c 38 2c 37 34 2c 32 39 2c 37 39 2c 32 2c 37 37 2c 31 2c 35 33 2c 31 2c 38 31 2c 35 2c ,91,8,74,29,79,2,77,1,53,1,81,5,
39a0 20 36 39 2c 32 2c 36 34 2c 32 31 2c 20 38 36 2c 32 39 2c 0d 0a 36 37 2c 39 2c 35 39 2c 31 2c 36 .69,2,64,21,.86,29,..67,9,59,1,6
39c0 31 2c 35 2c 37 33 2c 36 2c 37 36 2c 32 38 2c 35 36 2c 32 31 2c 36 38 2c 32 39 2c 37 38 2c 32 39 1,5,73,6,76,28,56,21,68,29,78,29
39e0 2c 36 33 2c 35 2c 36 36 2c 0d 0a 32 38 2c 39 30 2c 32 39 2c 20 37 31 2c 34 2c 35 35 2c 39 2c 38 ,63,5,66,..28,90,29,.71,4,55,9,8
3a00 34 2c 32 38 2c 38 32 2c 32 39 2c 31 30 31 2c 35 2c 20 31 30 33 2c 39 2c 20 39 38 2c 33 35 2c 0d 4,28,82,29,101,5,.103,9,.98,35,.
3a20 0a 39 37 2c 31 2c 39 34 2c 33 35 2c 39 33 2c 31 2c 31 30 30 2c 33 35 2c 39 32 2c 33 31 2c 39 39 .97,1,94,35,93,1,100,35,92,31,99
3a40 2c 35 2c 39 36 2c 33 39 2c 39 35 2c 35 2c 31 30 32 2c 33 35 7d 3b 0d 0a 0d 0a 76 6f 69 64 20 72 ,5,96,39,95,5,102,35};....void.r
3a60 75 6e 28 69 6e 74 20 67 75 6e 3d 30 29 20 7b 20 20 20 20 20 20 20 20 2f 2f 20 5b 67 75 6e 5d 3d un(int.gun=0).{........//.[gun]=
3a80 5b 3a 47 55 4e 31 2c 3a 47 55 4e 32 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 72 [:GUN1,:GUN2]..........printf("r
3aa0 75 6e 28 29 20 25 69 5c 6e 22 2c 20 67 75 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 un().%i\n",.gun);..........switc
3ac0 68 28 67 75 6e 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 47 55 4e 31 20 77 68 65 6e h(gun).{..........case.GUN1.when
3ae0 28 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 77 68 65 (2)..................printf("whe
3b00 6e 32 5c 6e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 20 n2\n");..................break;.
3b20 2f 2f 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 47 55 4e 32 20 77 68 65 6e 28 33 //.end..........case.GUN2.when(3
3b40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 77 68 65 6e 33 )..................printf("when3
3b60 5c 6e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2f \n");..................break;.//
3b80 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 6d 61 69 6e 28 69 .end..........}..}....int.main(i
3ba0 6e 74 20 61 72 67 63 2c 20 63 68 61 72 2a 2a 20 61 72 67 76 29 20 7b 0d 0a 20 20 20 20 20 20 20 nt.argc,.char**.argv).{.........
3bc0 20 70 72 69 6e 74 66 28 22 68 65 6c 6c 6f 20 77 6f 72 6c 64 2e 20 20 20 6e 75 6d 62 65 72 20 6f .printf("hello.world....number.o
3be0 66 20 61 72 67 75 6d 65 6e 74 73 3d 25 69 5c 6e 22 2c 20 61 72 67 63 29 3b 0d 0a 20 20 20 20 20 f.arguments=%i\n",.argc);.......
3c00 20 20 20 69 6e 74 20 66 75 6e 3d 35 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f 20 7b 0d 0a 20 20 20 ...int.fun=5;..........bo.{.....
3c20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 20 2d 3d 20 31 3b 20 2f 2f 2e 69 64 20 2d 20 67 .............fun.-=.1;.//.id.-.g
3c40 75 6e 20 3d 20 66 75 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 28 66 75 un.=.fun..................run(fu
3c60 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28 66 75 6e 3e 30 29 3b 0d 0a 20 20 n);..........}.while(fun>0);....
3c80 20 20 20 20 20 20 72 75 62 79 5f 69 6e 69 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 62 5f 65 ......ruby_init();..........rb_e
3ca0 76 61 6c 5f 73 74 72 69 6e 67 28 44 41 54 41 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 val_string(DATA);..........retur
3cc0 6e 20 30 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 30 20 20 2f 2f 20 6e 6f 62 6f 64 79 20 72 65 61 64 n.0;..}....#if.0..//.nobody.read
3ce0 73 20 75 6e 2d 64 65 66 69 6e 65 64 20 63 6f 64 65 0d 0a 64 65 66 20 67 6f 74 6f 2a 73 3b 24 73 s.un-defined.code..def.goto*s;$s
3d00 3d 5b 5d 3b 59 2e 74 69 6d 65 73 7b 73 3d 5b 5d 3b 58 2e 74 69 6d 65 73 7b 73 3c 3c 5b 30 5d 2a =[];Y.times{s=[];X.times{s<<[0]*
3d20 33 7d 3b 24 73 3c 3c 20 73 7d 65 6e 64 3b 41 3d 30 2e 35 0d 0a 69 6e 63 6c 75 64 65 20 4d 61 74 3};$s<<.s}end;A=0.5..include.Mat
3d40 68 3b 64 65 66 20 75 20 67 2c 68 2c 69 2c 6a 2c 6b 2c 6c 3b 66 2c 2a 6d 3d 28 28 6a 2d 68 29 2e h;def.u.g,h,i,j,k,l;f,*m=((j-h).
3d60 61 62 73 3e 28 6b 2d 69 29 2e 61 62 73 29 3f 5b 70 72 6f 63 7b 0d 0a 7c 6e 2c 6f 7c 20 20 20 20 abs>(k-i).abs)?[proc{..|n,o|....
3d80 20 20 67 5b 6f 5d 20 20 5b 6e 20 20 20 5d 3d 6c 20 20 20 20 20 20 7d 2c 5b 68 20 20 2c 69 20 20 ..g[o]..[n...]=l......},[h..,i..
3da0 20 5d 2c 5b 6a 2c 6b 5d 5d 3a 5b 70 72 6f 63 7b 0d 0a 7c 70 2c 71 7c 20 20 67 5b 20 20 20 70 5d .],[j,k]]:[proc{..|p,q|..g[...p]
3dc0 5b 20 20 71 5d 20 20 20 3d 6c 7d 20 20 2c 5b 20 20 20 69 2c 68 20 20 5d 2c 20 20 20 5b 6b 2c 6a [..q]...=l}..,[...i,h..],...[k,j
3de0 5d 5d 3b 62 2c 61 3d 6d 2e 73 6f 72 74 0d 0a 63 2c 64 3d 61 20 20 5b 31 20 20 20 5d 2d 62 20 20 ]];b,a=m.sort..c,d=a..[1...]-b..
3e00 5b 31 20 20 20 5d 2c 61 20 20 5b 30 20 20 20 5d 2d 62 20 20 5b 30 20 20 20 5d 3b 64 2e 74 69 6d [1...],a..[0...]-b..[0...];d.tim
3e20 65 73 7b 7c 65 7c 66 2e 0d 0a 63 61 6c 6c 28 20 20 20 20 20 20 65 2b 62 5b 20 20 30 5d 20 20 20 es{|e|f...call(......e+b[..0]...
3e40 2c 63 2a 20 20 20 20 20 20 65 2f 64 2b 62 20 20 20 20 20 5b 31 5d 29 7d 3b 65 6e 64 3b 56 3d 30 ,c*......e/d+b.....[1])};end;V=0
3e60 3b 64 65 66 20 62 6f 26 75 0d 0a 24 75 7c 7c 3d 20 20 56 3b 20 20 20 3b 24 75 20 20 2b 3d 20 20 ;def.bo&u..$u||=..V;...;$u..+=..
3e80 20 31 2b 56 20 20 3b 3b 20 20 20 72 65 74 75 72 6e 20 75 2e 63 61 6c 6c 20 69 66 24 75 3e 31 3b .1+V..;;...return.u.call.if$u>1;
3ea0 71 3d 31 32 38 2e 30 0d 0a 3b 78 3d 28 56 20 20 2e 2e 20 20 20 32 35 35 20 20 29 2e 20 20 20 6d q=128.0..;x=(V.......255..)....m
3ec0 61 70 20 20 7b 7c 20 20 20 79 7c 66 31 2c 7a 20 3d 73 69 6e 28 79 2e 74 6f 5f 66 2a 50 49 2f 71 ap..{|...y|f1,z.=sin(y.to_f*PI/q
3ee0 29 2c 0d 0a 73 69 6e 28 28 20 20 79 2e 20 20 20 74 6f 5f 66 20 20 20 20 2b 20 32 30 30 20 20 20 ),..sin((..y....to_f....+.200...
3f00 20 20 20 29 2a 50 49 2f 28 20 20 20 71 29 29 3b 5b 28 66 31 2a 33 30 2e 30 2b 31 31 30 2e 30 29 ...)*PI/(...q));[(f1*30.0+110.0)
3f20 2e 0d 0a 74 6f 5f 69 2c 28 28 66 31 2b 7a 29 2a 31 30 2e 30 2b 34 30 2e 30 29 2e 74 6f 5f 69 2c ...to_i,((f1+z)*10.0+40.0).to_i,
3f40 28 7a 2a 32 30 2e 30 2b 31 32 30 2e 30 29 2e 74 6f 5f 69 5d 7d 3b 59 2e 74 69 6d 65 73 7b 7c 69 (z*20.0+120.0).to_i]};Y.times{|i
3f60 7c 58 2e 0d 0a 74 69 6d 65 73 7b 7c 6a 7c 69 31 3d 28 28 69 2a 30 2e 33 2b 31 35 30 29 2a 28 6a |X...times{|j|i1=((i*0.3+150)*(j
3f80 2a 31 2e 31 2b 35 30 29 2f 35 30 2e 30 29 2e 74 6f 5f 69 3b 69 32 3d 28 28 69 2a 30 2e 38 2b 35 *1.1+50)/50.0).to_i;i2=((i*0.8+5
3fa0 31 30 29 2a 28 0d 0a 6a 2a 30 2e 39 2b 31 30 36 30 29 2f 35 31 2e 30 29 2e 74 6f 5f 69 3b 24 73 10)*(..j*0.9+1060)/51.0).to_i;$s
3fc0 5b 69 5d 5b 6a 5d 3d 78 5b 28 69 31 2a 69 32 29 25 32 35 35 5d 2e 63 6c 6f 6e 65 7d 7d 3b 24 61 [i][j]=x[(i1*i2)%255].clone}};$a
3fe0 3d 28 30 2e 2e 32 35 29 2e 0d 0a 69 6e 6a 65 63 74 28 5b 5d 29 7b 7c 61 2c 69 7c 61 3c 3c 28 56 =(0..25)...inject([]){|a,i|a<<(V
4000 2e 2e 33 29 2e 69 6e 6a 65 63 74 28 5b 5d 29 7b 7c 72 2c 6a 7c 72 3c 3c 24 63 5b 69 2a 34 2b 6a ..3).inject([]){|r,j|r<<$c[i*4+j
4020 5d 7d 7d 3b 75 2e 63 61 6c 6c 3b 65 6e 64 0d 0a 49 3d 4c 6f 63 61 6c 4a 75 6d 70 45 72 72 6f 72 ]}};u.call;end..I=LocalJumpError
4040 3b 64 65 66 20 72 75 6e 2a 61 2c 26 62 3b 72 65 74 75 72 6e 20 69 66 20 61 2e 73 69 7a 65 3d 3d ;def.run*a,&b;return.if.a.size==
4060 56 3b 69 66 20 61 5b 56 5d 3d 3d 36 36 36 3b 24 62 3d 62 0d 0a 65 6c 73 69 66 24 62 3b 24 62 2e V;if.a[V]==666;$b=b..elsif$b;$b.
4080 63 61 6c 6c 3b 65 6e 64 3b 65 6e 64 3b 64 65 66 20 6d 61 69 6e 20 73 2c 26 75 3b 24 6d 3d 56 3b call;end;end;def.main.s,&u;$m=V;
40a0 75 2e 63 61 6c 6c 20 72 65 73 63 75 65 20 49 3b 65 6e 64 0d 0a 64 65 66 20 72 62 5f 65 76 61 6c u.call.rescue.I;end..def.rb_eval
40c0 5f 73 74 72 69 6e 67 28 2a 61 29 3b 65 6e 64 20 20 20 20 20 23 20 79 6f 75 20 70 72 6f 6d 69 73 _string(*a);end.....#.you.promis
40e0 65 64 20 6e 6f 74 20 74 6f 20 6c 6f 6f 6b 20 68 65 72 65 0d 0a 64 65 66 20 72 75 62 79 5f 69 6e ed.not.to.look.here..def.ruby_in
4100 69 74 3b 71 3d 32 2e 30 3b 6c 3d 28 28 58 2a 2a 71 29 2a 41 2b 28 59 2a 2a 71 29 2a 41 29 2a 2a it;q=2.0;l=((X**q)*A+(Y**q)*A)**
4120 41 3b 56 2e 75 70 74 6f 28 59 2d 34 29 7b 7c 73 7c 56 2e 0d 0a 75 70 74 6f 28 58 2d 34 29 7b 7c A;V.upto(Y-4){|s|V...upto(X-4){|
4140 71 7c 64 3d 28 28 71 2d 58 2f 41 29 2a 2a 71 2b 28 73 2d 59 2f 41 29 2a 2a 71 29 2a 2a 41 3b 65 q|d=((q-X/A)**q+(s-Y/A)**q)**A;e
4160 3d 28 63 6f 73 28 64 2a 50 49 2f 28 6c 2f 71 29 29 2f 71 0d 0a 2b 41 29 2a 33 2e 30 2b 31 2e 30 =(cos(d*PI/(l/q))/q..+A)*3.0+1.0
4180 3b 76 3d 32 3b 66 3d 76 2f 65 3b 61 2c 70 2c 62 3d 24 73 5b 73 5d 2c 24 73 5b 73 2b 31 5d 2c 24 ;v=2;f=v/e;a,p,b=$s[s],$s[s+1],$
41a0 73 5b 73 2b 76 5d 3b 72 3d 61 5b 71 5d 5b 56 5d 2a 65 2b 0d 0a 70 5b 71 5d 5b 56 5d 2b 61 5b 71 s[s+v];r=a[q][V]*e+..p[q][V]+a[q
41c0 2b 31 5d 5b 56 5d 2b 62 5b 71 5d 5b 56 5d 2b 61 5b 71 2b 76 5d 5b 56 5d 2b 62 5b 71 2b 76 2f 76 +1][V]+b[q][V]+a[q+v][V]+b[q+v/v
41e0 5d 5b 56 5d 2b 70 5b 71 2b 76 5d 5b 56 5d 2b 62 5b 71 2b 0d 0a 76 5d 5b 56 5d 2a 66 3b 67 3d 5b ][V]+p[q+v][V]+b[q+..v][V]*f;g=[
4200 61 5b 71 5d 5b 56 5d 2c 62 5b 71 5d 5b 56 5d 2c 61 5b 71 2b 76 5d 5b 56 5d 2c 62 5b 71 2b 76 5d a[q][V],b[q][V],a[q+v][V],b[q+v]
4220 5b 56 5d 5d 3b 68 3d 28 67 2e 6d 61 78 2d 67 2e 6d 69 6e 0d 0a 29 2a 66 3b 24 73 5b 73 5d 5b 71 [V]];h=(g.max-g.min..)*f;$s[s][q
4240 5d 5b 56 5d 3d 5b 5b 28 72 2f 28 65 2b 66 2b 36 2e 30 29 2b 41 2b 28 68 2a 30 2e 34 29 29 2e 74 ][V]=[[(r/(e+f+6.0)+A+(h*0.4)).t
4260 6f 5f 69 2c 32 35 35 5d 2e 6d 69 6e 2c 56 5d 2e 6d 61 78 0d 0a 7d 7d 3b 46 69 6c 65 2e 6f 70 65 o_i,255].min,V].max..}};File.ope
4280 6e 28 22 72 65 73 2e 70 70 6d 22 2c 22 77 2b 22 29 7b 7c 66 7c 66 2e 77 72 69 74 65 28 23 20 73 n("res.ppm","w+"){|f|f.write(#.s
42a0 65 63 72 65 74 2e 67 72 65 65 74 69 6e 67 73 20 3a 2d 29 0d 0a 22 50 33 5c 6e 23 20 72 65 73 2e ecret.greetings.:-).."P3\n#.res.
42c0 70 70 6d 5c 6e 23 7b 58 7d 20 23 7b 59 7d 5c 6e 32 35 35 5c 6e 22 2b 24 73 2e 6d 61 70 7b 7c 61 ppm\n#{X}.#{Y}\n255\n"+$s.map{|a
42e0 7c 61 2e 6d 61 70 7b 7c 62 7c 62 2e 6a 6f 69 6e 27 20 27 0d 0a 7d 2e 6a 6f 69 6e 28 27 20 27 29 |a.map{|b|b.join'.'..}.join('.')
4300 2b 22 5c 6e 22 7d 2e 6a 6f 69 6e 29 7d 3b 65 6e 64 3b 64 65 66 20 73 77 69 74 63 68 20 69 2c 26 +"\n"}.join)};end;def.switch.i,&
4320 62 3b 62 2e 63 61 6c 6c 3b 72 65 74 75 72 6e 20 75 6e 6c 65 73 73 0d 0a 64 65 66 69 6e 65 64 3f b;b.call;return.unless..defined?
4340 28 24 6d 29 3b 62 3d 28 58 2a 30 2e 30 31 29 2e 74 6f 5f 69 3b 64 3d 31 2e 30 2f 34 30 2e 30 3b ($m);b=(X*0.01).to_i;d=1.0/40.0;
4360 65 3d 30 2e 30 39 3b 63 3d 28 59 2a 30 2e 30 31 29 2e 74 6f 5f 69 0d 0a 61 3d 24 61 2e 6d 61 70 e=0.09;c=(Y*0.01).to_i..a=$a.map
4380 7b 7c 28 66 2c 67 2c 68 2c 6a 29 7c 5b 66 2a 64 2c 67 2a 65 2c 68 2a 64 2c 6a 2a 65 5d 7d 3b 61 {|(f,g,h,j)|[f*d,g*e,h*d,j*e]};a
43a0 2e 65 61 63 68 7b 7c 28 6b 2c 6c 2c 6d 2c 6e 29 7c 75 28 24 73 2c 28 6b 2a 58 0d 0a 29 2e 74 6f .each{|(k,l,m,n)|u($s,(k*X..).to
43c0 5f 69 2b 62 2b 69 2c 28 6c 2a 59 29 2e 74 6f 5f 69 2b 63 2b 69 2c 28 6d 2a 58 29 2e 74 6f 5f 69 _i+b+i,(l*Y).to_i+c+i,(m*X).to_i
43e0 2b 62 2b 69 2c 28 6e 2a 59 29 2e 74 6f 5f 69 2b 63 2b 69 2c 5b 5a 5d 2a 33 29 7d 0d 0a 61 2e 65 +b+i,(n*Y).to_i+c+i,[Z]*3)}..a.e
4400 61 63 68 7b 7c 28 6f 2c 71 2c 72 2c 73 29 7c 75 28 24 73 2c 28 6f 2a 28 58 2d 5a 29 29 2e 74 6f ach{|(o,q,r,s)|u($s,(o*(X-Z)).to
4420 5f 69 2b 69 2c 28 71 2a 28 59 2d 5a 29 29 2e 74 6f 5f 69 2b 69 2c 28 72 2a 28 58 2d 0d 0a 5a 29 _i+i,(q*(Y-Z)).to_i+i,(r*(X-..Z)
4440 29 2e 74 6f 5f 69 2b 69 2c 28 73 2a 28 59 2d 5a 29 29 2e 74 6f 5f 69 2b 69 2c 5b 28 31 3c 3c 38 ).to_i+i,(s*(Y-Z)).to_i+i,[(1<<8
4460 29 2d 31 5d 2a 33 29 7d 3b 65 6e 64 3b 51 3d 4f 62 6a 65 63 74 3b 63 6c 61 73 73 0d 0a 52 65 67 )-1]*3)};end;Q=Object;class..Reg
4480 65 78 70 3b 64 65 66 20 5b 5d 3d 28 76 2c 69 73 29 3b 69 73 2e 65 61 63 68 7b 7c 73 7c 51 2e 73 exp;def.[]=(v,is);is.each{|s|Q.s
44a0 65 6e 64 28 3a 72 65 6d 6f 76 65 5f 63 6f 6e 73 74 2c 73 29 69 66 20 51 2e 0d 0a 63 6f 6e 73 74 end(:remove_const,s)if.Q...const
44c0 5f 64 65 66 69 6e 65 64 3f 20 73 3b 51 2e 63 6f 6e 73 74 5f 73 65 74 28 73 2c 76 29 7d 3b 65 6e _defined?.s;Q.const_set(s,v)};en
44e0 64 3b 65 6e 64 3b 64 65 66 20 69 6e 74 2a 70 74 72 3b 36 36 36 0d 0a 65 6e 64 3b 63 6c 61 73 73 d;end;def.int*ptr;666..end;class
4500 20 4f 3b 64 65 66 20 5b 5d 3d 28 61 2c 62 3d 6e 69 6c 29 3b 24 63 3d 61 3b 65 6e 64 3b 65 6e 64 .O;def.[]=(a,b=nil);$c=a;end;end
4520 3b 61 6c 69 61 73 3a 76 6f 69 64 3a 67 6f 74 6f 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 70 72 65 74 ;alias:void:goto..#endif.//.pret
4540 65 6e 64 20 61 73 20 69 66 20 79 6f 75 20 68 61 76 6e 27 74 20 73 65 65 6e 20 61 6e 79 74 68 69 end.as.if.you.havn't.seen.anythi
4560 6e 67 0d 0a 3d 65 6e 64 0d 0a 6d 6f 64 75 6c 65 20 43 6f 64 65 52 61 79 0d 0a 09 6d 6f 64 75 6c ng..=end..module.CodeRay...modul
4580 65 20 53 63 61 6e 6e 65 72 73 0d 0a 0d 0a 63 6c 61 73 73 20 52 75 62 79 20 3c 20 53 63 61 6e 6e e.Scanners....class.Ruby.<.Scann
45a0 65 72 0d 0a 0d 0a 09 52 45 53 45 52 56 45 44 5f 57 4f 52 44 53 20 3d 20 5b 0d 0a 09 09 27 61 6e er.....RESERVED_WORDS.=.[....'an
45c0 64 27 2c 20 27 64 65 66 27 2c 20 27 65 6e 64 27 2c 20 27 69 6e 27 2c 20 27 6f 72 27 2c 20 27 75 d',.'def',.'end',.'in',.'or',.'u
45e0 6e 6c 65 73 73 27 2c 20 27 62 65 67 69 6e 27 2c 0d 0a 09 09 27 64 65 66 69 6e 65 64 3f 27 2c 20 nless',.'begin',....'defined?',.
4600 27 65 6e 73 75 72 65 27 2c 20 27 6d 6f 64 75 6c 65 27 2c 20 27 72 65 64 6f 27 2c 20 27 73 75 70 'ensure',.'module',.'redo',.'sup
4620 65 72 27 2c 20 27 75 6e 74 69 6c 27 2c 0d 0a 09 09 27 42 45 47 49 4e 27 2c 20 27 62 72 65 61 6b er',.'until',....'BEGIN',.'break
4640 27 2c 20 27 64 6f 27 2c 20 27 6e 65 78 74 27 2c 20 27 72 65 73 63 75 65 27 2c 20 27 74 68 65 6e ',.'do',.'next',.'rescue',.'then
4660 27 2c 0d 0a 09 09 27 77 68 65 6e 27 2c 20 27 45 4e 44 27 2c 20 27 63 61 73 65 27 2c 20 27 65 6c ',....'when',.'END',.'case',.'el
4680 73 65 27 2c 20 27 66 6f 72 27 2c 20 27 72 65 74 72 79 27 2c 0d 0a 09 09 27 77 68 69 6c 65 27 2c se',.'for',.'retry',....'while',
46a0 20 27 61 6c 69 61 73 27 2c 20 27 63 6c 61 73 73 27 2c 20 27 65 6c 73 69 66 27 2c 20 27 69 66 27 .'alias',.'class',.'elsif',.'if'
46c0 2c 20 27 6e 6f 74 27 2c 20 27 72 65 74 75 72 6e 27 2c 0d 0a 09 09 27 75 6e 64 65 66 27 2c 20 27 ,.'not',.'return',....'undef',.'
46e0 79 69 65 6c 64 27 2c 0d 0a 09 5d 0d 0a 0d 0a 09 44 45 46 5f 4b 45 59 57 4f 52 44 53 20 3d 20 5b yield',...].....DEF_KEYWORDS.=.[
4700 27 64 65 66 27 5d 0d 0a 09 4d 4f 44 55 4c 45 5f 4b 45 59 57 4f 52 44 53 20 3d 20 5b 27 63 6c 61 'def']...MODULE_KEYWORDS.=.['cla
4720 73 73 27 2c 20 27 6d 6f 64 75 6c 65 27 5d 0d 0a 09 44 45 46 5f 4e 45 57 5f 53 54 41 54 45 20 3d ss',.'module']...DEF_NEW_STATE.=
4740 20 57 6f 72 64 4c 69 73 74 2e 6e 65 77 28 3a 69 6e 69 74 69 61 6c 29 2e 0d 0a 09 09 61 64 64 28 .WordList.new(:initial).....add(
4760 44 45 46 5f 4b 45 59 57 4f 52 44 53 2c 20 3a 64 65 66 5f 65 78 70 65 63 74 65 64 29 2e 0d 0a 09 DEF_KEYWORDS,.:def_expected)....
4780 09 61 64 64 28 4d 4f 44 55 4c 45 5f 4b 45 59 57 4f 52 44 53 2c 20 3a 6d 6f 64 75 6c 65 5f 65 78 .add(MODULE_KEYWORDS,.:module_ex
47a0 70 65 63 74 65 64 29 0d 0a 0d 0a 09 57 4f 52 44 53 5f 41 4c 4c 4f 57 49 4e 47 5f 52 45 47 45 58 pected).....WORDS_ALLOWING_REGEX
47c0 50 20 3d 20 5b 0d 0a 09 09 27 61 6e 64 27 2c 20 27 6f 72 27 2c 20 27 6e 6f 74 27 2c 20 27 77 68 P.=.[....'and',.'or',.'not',.'wh
47e0 69 6c 65 27 2c 20 27 75 6e 74 69 6c 27 2c 20 27 75 6e 6c 65 73 73 27 2c 20 27 69 66 27 2c 20 27 ile',.'until',.'unless',.'if',.'
4800 65 6c 73 69 66 27 2c 20 27 77 68 65 6e 27 0d 0a 09 5d 0d 0a 09 52 45 47 45 58 50 5f 41 4c 4c 4f elsif',.'when'...]...REGEXP_ALLO
4820 57 45 44 20 3d 20 57 6f 72 64 4c 69 73 74 2e 6e 65 77 28 66 61 6c 73 65 29 2e 0d 0a 09 09 61 64 WED.=.WordList.new(false).....ad
4840 64 28 57 4f 52 44 53 5f 41 4c 4c 4f 57 49 4e 47 5f 52 45 47 45 58 50 2c 20 3a 73 65 74 29 0d 0a d(WORDS_ALLOWING_REGEXP,.:set)..
4860 0d 0a 09 50 52 45 44 45 46 49 4e 45 44 5f 43 4f 4e 53 54 41 4e 54 53 20 3d 20 5b 0d 0a 09 09 27 ...PREDEFINED_CONSTANTS.=.[....'
4880 6e 69 6c 27 2c 20 27 74 72 75 65 27 2c 20 27 66 61 6c 73 65 27 2c 20 27 73 65 6c 66 27 2c 0d 0a nil',.'true',.'false',.'self',..
48a0 09 09 27 44 41 54 41 27 2c 20 27 41 52 47 56 27 2c 20 27 41 52 47 46 27 2c 20 27 5f 5f 46 49 4c ..'DATA',.'ARGV',.'ARGF',.'__FIL
48c0 45 5f 5f 27 2c 20 27 5f 5f 4c 49 4e 45 5f 5f 27 2c 0d 0a 09 5d 0d 0a 0d 0a 09 49 44 45 4e 54 5f E__',.'__LINE__',...].....IDENT_
48e0 4b 49 4e 44 20 3d 20 57 6f 72 64 4c 69 73 74 2e 6e 65 77 28 3a 69 64 65 6e 74 29 2e 0d 0a 09 09 KIND.=.WordList.new(:ident).....
4900 61 64 64 28 52 45 53 45 52 56 45 44 5f 57 4f 52 44 53 2c 20 3a 72 65 73 65 72 76 65 64 29 2e 0d add(RESERVED_WORDS,.:reserved)..
4920 0a 09 09 61 64 64 28 50 52 45 44 45 46 49 4e 45 44 5f 43 4f 4e 53 54 41 4e 54 53 2c 20 3a 70 72 ...add(PREDEFINED_CONSTANTS,.:pr
4940 65 5f 63 6f 6e 73 74 61 6e 74 29 0d 0a 0d 0a 09 4d 45 54 48 4f 44 5f 4e 41 4d 45 20 3d 20 2f 20 e_constant).....METHOD_NAME.=./.
4960 23 7b 49 44 45 4e 54 7d 20 5b 3f 21 5d 3f 20 2f 78 6f 0d 0a 09 4d 45 54 48 4f 44 5f 4e 41 4d 45 #{IDENT}.[?!]?./xo...METHOD_NAME
4980 5f 45 58 20 3d 20 2f 0d 0a 09 20 23 7b 4d 45 54 48 4f 44 5f 4e 41 4d 45 7d 20 20 23 20 63 6f 6d _EX.=./....#{METHOD_NAME}..#.com
49a0 6d 6f 6e 20 6d 65 74 68 6f 64 73 3a 20 73 70 6c 69 74 2c 20 66 6f 6f 3d 2c 20 65 6d 70 74 79 3f mon.methods:.split,.foo=,.empty?
49c0 2c 20 67 73 75 62 21 0d 0a 09 20 7c 20 5c 2a 5c 2a 3f 20 20 20 20 20 20 20 20 20 23 20 6d 75 6c ,.gsub!....|.\*\*?.........#.mul
49e0 74 69 70 6c 69 63 61 74 69 6f 6e 20 61 6e 64 20 70 6f 77 65 72 0d 0a 09 20 7c 20 5b 2d 2b 7e 5d tiplication.and.power....|.[-+~]
4a00 40 3f 20 20 20 20 20 20 20 23 20 70 6c 75 73 2c 20 6d 69 6e 75 73 0d 0a 09 20 7c 20 5b 5c 2f 25 @?.......#.plus,.minus....|.[\/%
4a20 26 7c 5e 60 5d 20 20 20 20 20 23 20 64 69 76 69 73 69 6f 6e 2c 20 6d 6f 64 75 6c 6f 20 6f 72 20 &|^`].....#.division,.modulo.or.
4a40 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 73 2c 20 26 61 6e 64 2c 20 7c 6f 72 2c 20 5e 78 6f 72 2c format.strings,.&and,.|or,.^xor,
4a60 20 60 73 79 73 74 65 6d 60 0d 0a 09 20 7c 20 5c 5b 5c 5d 3d 3f 20 20 20 20 20 20 20 20 23 20 61 .`system`....|.\[\]=?........#.a
4a80 72 72 61 79 20 67 65 74 74 65 72 20 61 6e 64 20 73 65 74 74 65 72 0d 0a 09 20 7c 20 3c 3d 3f 3e rray.getter.and.setter....|.<=?>
4aa0 3f 20 7c 20 3e 3d 3f 20 20 20 23 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 72 6f 63 6b 65 74 20 6f ?.|.>=?...#.comparison,.rocket.o
4ac0 70 65 72 61 74 6f 72 0d 0a 09 20 7c 20 3c 3c 20 7c 20 3e 3e 20 20 20 20 20 20 20 23 20 61 70 70 perator....|.<<.|.>>.......#.app
4ae0 65 6e 64 20 6f 72 20 73 68 69 66 74 20 6c 65 66 74 2c 20 73 68 69 66 74 20 72 69 67 68 74 0d 0a end.or.shift.left,.shift.right..
4b00 09 20 7c 20 3d 3d 3d 3f 20 20 20 20 20 20 20 20 20 20 23 20 73 69 6d 70 6c 65 20 65 71 75 61 6c ..|.===?..........#.simple.equal
4b20 69 74 79 20 61 6e 64 20 63 61 73 65 20 65 71 75 61 6c 69 74 79 0d 0a 09 2f 6f 78 0d 0a 09 47 4c ity.and.case.equality.../ox...GL
4b40 4f 42 41 4c 5f 56 41 52 49 41 42 4c 45 20 3d 20 2f 20 5c 24 20 28 3f 3a 20 23 7b 49 44 45 4e 54 OBAL_VARIABLE.=./.\$.(?:.#{IDENT
4b60 7d 20 7c 20 5c 64 2b 20 7c 20 5b 7e 26 2b 60 27 3d 5c 2f 2c 3b 5f 2e 3c 3e 21 40 30 24 3f 2a 22 }.|.\d+.|.[~&+`'=\/,;_.<>!@0$?*"
4b80 3a 46 5c 5c 5d 20 7c 20 2d 5b 61 2d 7a 41 2d 5a 5f 30 2d 39 5d 20 29 20 2f 6f 78 0d 0a 0d 0a 09 :F\\].|.-[a-zA-Z_0-9].)./ox.....
4ba0 44 4f 55 42 4c 45 51 20 3d 20 2f 20 22 20 20 5b 5e 22 5c 23 5c 5c 5d 2a 20 20 28 3f 3a 20 28 3f DOUBLEQ.=./."..[^"\#\\]*..(?:.(?
4bc0 3a 20 5c 23 5c 7b 2e 2a 3f 5c 7d 20 7c 20 5c 23 28 3f 3a 24 22 29 3f 20 20 7c 20 5c 5c 2e 20 29 :.\#\{.*?\}.|.\#(?:$")?..|.\\..)
4be0 20 5b 5e 22 5c 23 5c 5c 5d 2a 20 20 29 2a 20 22 3f 20 20 2f 6f 78 0d 0a 09 53 49 4e 47 4c 45 51 .[^"\#\\]*..)*."?../ox...SINGLEQ
4c00 20 3d 20 2f 20 27 20 20 5b 5e 27 5c 5c 5d 2a 20 20 20 20 28 3f 3a 20 20 20 20 20 20 20 20 20 20 .=./.'..[^'\\]*....(?:..........
4c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 5c 2e 20 20 20 5b 5e 27 5c 5c 5d ....................\\....[^'\\]
4c40 2a 20 20 20 20 29 2a 20 27 3f 20 20 2f 6f 78 0d 0a 09 53 54 52 49 4e 47 20 20 3d 20 2f 20 23 7b *....)*.'?../ox...STRING..=./.#{
4c60 53 49 4e 47 4c 45 51 7d 20 7c 20 23 7b 44 4f 55 42 4c 45 51 7d 20 2f 6f 78 0d 0a 09 53 48 45 4c SINGLEQ}.|.#{DOUBLEQ}./ox...SHEL
4c80 4c 20 20 20 3d 20 2f 20 60 20 20 5b 5e 60 5c 23 5c 5c 5d 2a 20 20 28 3f 3a 20 28 3f 3a 20 5c 23 L...=./.`..[^`\#\\]*..(?:.(?:.\#
4ca0 5c 7b 2e 2a 3f 5c 7d 20 7c 20 5c 23 28 3f 3a 24 60 29 3f 20 20 7c 20 5c 5c 2e 20 29 20 5b 5e 60 \{.*?\}.|.\#(?:$`)?..|.\\..).[^`
4cc0 5c 23 5c 5c 5d 2a 20 20 29 2a 20 60 3f 20 20 2f 6f 78 0d 0a 09 52 45 47 45 58 50 20 20 3d 20 2f \#\\]*..)*.`?../ox...REGEXP..=./
4ce0 20 5c 2f 20 5b 5e 5c 2f 5c 23 5c 5c 5d 2a 20 28 3f 3a 20 28 3f 3a 20 5c 23 5c 7b 2e 2a 3f 5c 7d .\/.[^\/\#\\]*.(?:.(?:.\#\{.*?\}
4d00 20 7c 20 5c 23 28 3f 3a 24 5c 2f 29 3f 20 7c 20 5c 5c 2e 20 29 20 5b 5e 5c 2f 5c 23 5c 5c 5d 2a .|.\#(?:$\/)?.|.\\..).[^\/\#\\]*
4d20 20 29 2a 20 5c 2f 3f 20 2f 6f 78 0d 0a 0d 0a 09 44 45 43 49 4d 41 4c 20 3d 20 2f 5c 64 2b 28 3f .)*.\/?./ox.....DECIMAL.=./\d+(?
4d40 3a 5f 5c 64 2b 29 2a 2f 20 20 23 20 64 6f 65 73 6e 27 74 20 72 65 63 6f 67 6e 69 7a 65 20 30 39 :_\d+)*/..#.doesn't.recognize.09
4d60 20 61 73 20 6f 63 74 61 6c 20 65 72 72 6f 72 0d 0a 09 4f 43 54 41 4c 20 3d 20 2f 30 5f 3f 5b 30 .as.octal.error...OCTAL.=./0_?[0
4d80 2d 37 5d 2b 28 3f 3a 5f 5b 30 2d 37 5d 2b 29 2a 2f 0d 0a 09 48 45 58 41 44 45 43 49 4d 41 4c 20 -7]+(?:_[0-7]+)*/...HEXADECIMAL.
4da0 3d 20 2f 30 78 5b 30 2d 39 41 2d 46 61 2d 66 5d 2b 28 3f 3a 5f 5b 30 2d 39 41 2d 46 61 2d 66 5d =./0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]
4dc0 2b 29 2a 2f 0d 0a 09 42 49 4e 41 52 59 20 3d 20 2f 30 62 5b 30 31 5d 2b 28 3f 3a 5f 5b 30 31 5d +)*/...BINARY.=./0b[01]+(?:_[01]
4de0 2b 29 2a 2f 0d 0a 0d 0a 09 45 58 50 4f 4e 45 4e 54 20 3d 20 2f 20 5b 65 45 5d 20 5b 2b 2d 5d 3f +)*/.....EXPONENT.=./.[eE].[+-]?
4e00 20 23 7b 44 45 43 49 4d 41 4c 7d 20 2f 6f 78 0d 0a 09 46 4c 4f 41 54 20 3d 20 2f 20 23 7b 44 45 .#{DECIMAL}./ox...FLOAT.=./.#{DE
4e20 43 49 4d 41 4c 7d 20 28 3f 3a 20 23 7b 45 58 50 4f 4e 45 4e 54 7d 20 7c 20 5c 2e 20 23 7b 44 45 CIMAL}.(?:.#{EXPONENT}.|.\..#{DE
4e40 43 49 4d 41 4c 7d 20 23 7b 45 58 50 4f 4e 45 4e 54 7d 3f 20 29 20 2f 0d 0a 09 49 4e 54 45 47 45 CIMAL}.#{EXPONENT}?.)./...INTEGE
4e60 52 20 3d 20 2f 23 7b 4f 43 54 41 4c 7d 7c 23 7b 48 45 58 41 44 45 43 49 4d 41 4c 7d 7c 23 7b 42 R.=./#{OCTAL}|#{HEXADECIMAL}|#{B
4e80 49 4e 41 52 59 7d 7c 23 7b 44 45 43 49 4d 41 4c 7d 2f 0d 0a 0d 0a 09 64 65 66 20 72 65 73 65 74 INARY}|#{DECIMAL}/.....def.reset
4ea0 0d 0a 09 09 73 75 70 65 72 0d 0a 09 09 40 72 65 67 65 78 70 5f 61 6c 6c 6f 77 65 64 20 3d 20 66 ....super....@regexp_allowed.=.f
4ec0 61 6c 73 65 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 6e 65 78 74 5f 74 6f 6b 65 6e 0d 0a 09 alse...end.....def.next_token...
4ee0 09 72 65 74 75 72 6e 20 69 66 20 40 73 63 61 6e 6e 65 72 2e 65 6f 73 3f 0d 0a 0d 0a 09 09 6b 69 .return.if.@scanner.eos?......ki
4f00 6e 64 20 3d 20 3a 65 72 72 6f 72 0d 0a 09 09 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 nd.=.:error....if.@scanner.scan(
4f20 2f 5c 73 2b 2f 29 20 20 23 20 69 6e 20 65 76 65 72 79 20 73 74 61 74 65 0d 0a 09 09 09 6b 69 6e /\s+/)..#.in.every.state.....kin
4f40 64 20 3d 20 3a 73 70 61 63 65 0d 0a 09 09 09 40 72 65 67 65 78 70 5f 61 6c 6c 6f 77 65 64 20 3d d.=.:space.....@regexp_allowed.=
4f60 20 3a 73 65 74 20 69 66 20 40 72 65 67 65 78 70 5f 61 6c 6c 6f 77 65 64 20 6f 72 20 40 73 63 61 .:set.if.@regexp_allowed.or.@sca
4f80 6e 6e 65 72 2e 6d 61 74 63 68 65 64 2e 69 6e 64 65 78 28 3f 5c 6e 29 20 20 23 20 64 65 6c 61 79 nner.matched.index(?\n)..#.delay
4fa0 65 64 20 66 6c 61 67 20 73 65 74 74 69 6e 67 0d 0a 0d 0a 09 09 65 6c 73 69 66 20 40 73 74 61 74 ed.flag.setting......elsif.@stat
4fc0 65 20 3d 3d 20 3a 64 65 66 5f 65 78 70 65 63 74 65 64 0d 0a 09 09 09 69 66 20 40 73 63 61 6e 6e e.==.:def_expected.....if.@scann
4fe0 65 72 2e 73 63 61 6e 28 2f 20 28 3f 3a 20 28 3f 3a 23 7b 49 44 45 4e 54 7d 28 3f 3a 5c 2e 7c 3a er.scan(/.(?:.(?:#{IDENT}(?:\.|:
5000 3a 29 29 2a 20 7c 20 28 3f 3a 40 40 3f 7c 24 29 3f 20 23 7b 49 44 45 4e 54 7d 28 3f 3a 5c 2e 7c :))*.|.(?:@@?|$)?.#{IDENT}(?:\.|
5020 3a 3a 29 20 29 20 23 7b 4d 45 54 48 4f 44 5f 4e 41 4d 45 5f 45 58 7d 20 2f 6f 78 29 0d 0a 09 09 ::).).#{METHOD_NAME_EX}./ox)....
5040 09 09 6b 69 6e 64 20 3d 20 3a 6d 65 74 68 6f 64 0d 0a 09 09 09 09 40 73 74 61 74 65 20 3d 20 3a ..kind.=.:method......@state.=.:
5060 69 6e 69 74 69 61 6c 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 40 73 63 61 6e 6e 65 72 2e 67 initial.....else......@scanner.g
5080 65 74 63 68 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 09 40 73 74 61 74 65 20 3d 20 3a 69 6e 69 74 69 etch.....end.....@state.=.:initi
50a0 61 6c 0d 0a 0d 0a 09 09 65 6c 73 69 66 20 40 73 74 61 74 65 20 3d 3d 20 3a 6d 6f 64 75 6c 65 5f al......elsif.@state.==.:module_
50c0 65 78 70 65 63 74 65 64 0d 0a 09 09 09 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 3c expected.....if.@scanner.scan(/<
50e0 3c 2f 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 6f 70 65 72 61 74 6f 72 0d 0a 09 09 09 65 6c </)......kind.=.:operator.....el
5100 73 65 0d 0a 09 09 09 09 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 20 28 3f 3a 20 23 se......if.@scanner.scan(/.(?:.#
5120 7b 49 44 45 4e 54 7d 20 28 3f 3a 5c 2e 7c 3a 3a 29 29 2a 20 23 7b 49 44 45 4e 54 7d 20 2f 6f 78 {IDENT}.(?:\.|::))*.#{IDENT}./ox
5140 29 0d 0a 09 09 09 09 09 6b 69 6e 64 20 3d 20 3a 6d 65 74 68 6f 64 0d 0a 09 09 09 09 65 6c 73 65 ).......kind.=.:method......else
5160 0d 0a 09 09 09 09 09 40 73 63 61 6e 6e 65 72 2e 67 65 74 63 68 0d 0a 09 09 09 09 65 6e 64 0d 0a .......@scanner.getch......end..
5180 09 09 09 09 40 73 74 61 74 65 20 3d 20 3a 69 6e 69 74 69 61 6c 0d 0a 09 09 09 65 6e 64 0d 0a 0d ....@state.=.:initial.....end...
51a0 0a 09 09 65 6c 73 69 66 20 23 20 73 74 61 74 65 20 3d 3d 20 3a 69 6e 69 74 69 61 6c 0d 0a 09 09 ...elsif.#.state.==.:initial....
51c0 09 23 20 49 44 45 4e 54 49 46 49 45 52 53 2c 20 4b 45 59 57 4f 52 44 53 0d 0a 09 09 09 69 66 20 .#.IDENTIFIERS,.KEYWORDS.....if.
51e0 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 47 4c 4f 42 41 4c 5f 56 41 52 49 41 42 4c 45 29 0d 0a @scanner.scan(GLOBAL_VARIABLE)..
5200 09 09 09 09 6b 69 6e 64 20 3d 20 3a 67 6c 6f 62 61 6c 5f 76 61 72 69 61 62 6c 65 0d 0a 09 09 09 ....kind.=.:global_variable.....
5220 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 20 40 40 20 23 7b 49 44 45 4e 54 elsif.@scanner.scan(/.@@.#{IDENT
5240 7d 20 2f 6f 78 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 63 6c 61 73 73 5f 76 61 72 69 61 62 }./ox)......kind.=.:class_variab
5260 6c 65 0d 0a 09 09 09 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 20 40 20 23 le.....elsif.@scanner.scan(/.@.#
5280 7b 49 44 45 4e 54 7d 20 2f 6f 78 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 69 6e 73 74 61 6e {IDENT}./ox)......kind.=.:instan
52a0 63 65 5f 76 61 72 69 61 62 6c 65 0d 0a 09 09 09 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 ce_variable.....elsif.@scanner.s
52c0 63 61 6e 28 2f 20 5f 5f 45 4e 44 5f 5f 5c 6e 20 28 20 28 3f 21 5c 23 43 4f 44 45 5c 23 29 20 2e can(/.__END__\n.(.(?!\#CODE\#)..
52e0 2a 20 29 3f 20 7c 20 5c 23 5b 5e 5c 6e 5d 2a 20 7c 20 3d 62 65 67 69 6e 28 3f 3d 5c 73 29 2e 2a *.)?.|.\#[^\n]*.|.=begin(?=\s).*
5300 3f 20 5c 6e 3d 65 6e 64 28 3f 3d 5c 73 7c 5c 7a 29 28 3f 3a 5b 5e 5c 6e 5d 2a 29 3f 20 2f 6d 78 ?.\n=end(?=\s|\z)(?:[^\n]*)?./mx
5320 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 63 6f 6d 6d 65 6e 74 0d 0a 09 09 09 65 6c 73 69 66 )......kind.=.:comment.....elsif
5340 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 4d 45 54 48 4f 44 5f 4e 41 4d 45 29 0d 0a 09 09 09 .@scanner.scan(METHOD_NAME).....
5360 09 69 66 20 40 6c 61 73 74 5f 74 6f 6b 65 6e 5f 64 6f 74 0d 0a 09 09 09 09 09 6b 69 6e 64 20 3d .if.@last_token_dot.......kind.=
5380 20 3a 69 64 65 6e 74 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 6d 61 74 63 68 65 64 20 .:ident......else.......matched.
53a0 3d 20 40 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 0d 0a 09 09 09 09 09 6b 69 6e 64 20 3d 20 =.@scanner.matched.......kind.=.
53c0 49 44 45 4e 54 5f 4b 49 4e 44 5b 6d 61 74 63 68 65 64 5d 0d 0a 09 09 09 09 09 69 66 20 6b 69 6e IDENT_KIND[matched].......if.kin
53e0 64 20 3d 3d 20 3a 69 64 65 6e 74 20 61 6e 64 20 6d 61 74 63 68 65 64 20 3d 7e 20 2f 5e 5b 41 2d d.==.:ident.and.matched.=~./^[A-
5400 5a 5d 2f 0d 0a 09 09 09 09 09 09 6b 69 6e 64 20 3d 20 3a 63 6f 6e 73 74 61 6e 74 0d 0a 09 09 09 Z]/........kind.=.:constant.....
5420 09 09 65 6c 73 69 66 20 6b 69 6e 64 20 3d 3d 20 3a 72 65 73 65 72 76 65 64 0d 0a 09 09 09 09 09 ..elsif.kind.==.:reserved.......
5440 09 40 73 74 61 74 65 20 3d 20 44 45 46 5f 4e 45 57 5f 53 54 41 54 45 5b 6d 61 74 63 68 65 64 5d .@state.=.DEF_NEW_STATE[matched]
5460 0d 0a 09 09 09 09 09 09 40 72 65 67 65 78 70 5f 61 6c 6c 6f 77 65 64 20 3d 20 52 45 47 45 58 50 ........@regexp_allowed.=.REGEXP
5480 5f 41 4c 4c 4f 57 45 44 5b 6d 61 74 63 68 65 64 5d 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 _ALLOWED[matched].......end.....
54a0 09 65 6e 64 0d 0a 0d 0a 09 09 09 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 53 .end.......elsif.@scanner.scan(S
54c0 54 52 49 4e 47 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 73 74 72 69 6e 67 0d 0a 09 09 09 65 TRING)......kind.=.:string.....e
54e0 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 53 48 45 4c 4c 29 0d 0a 09 09 09 09 6b lsif.@scanner.scan(SHELL)......k
5500 69 6e 64 20 3d 20 3a 73 68 65 6c 6c 0d 0a 09 09 09 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e ind.=.:shell.....elsif.@scanner.
5520 73 63 61 6e 28 2f 3c 3c 0d 0a 09 09 09 09 28 3f 3a 0d 0a 09 09 09 09 09 28 5b 61 2d 7a 41 2d 5a scan(/<<......(?:.......([a-zA-Z
5540 5f 30 2d 39 5d 2b 29 0d 0a 09 09 09 09 09 09 28 3f 3a 20 2e 2a 3f 20 5e 5c 31 24 20 7c 20 2e 2a _0-9]+)........(?:..*?.^\1$.|..*
5560 20 29 0d 0a 09 09 09 09 7c 0d 0a 09 09 09 09 09 2d 28 5b 61 2d 7a 41 2d 5a 5f 30 2d 39 5d 2b 29 .)......|.......-([a-zA-Z_0-9]+)
5580 0d 0a 09 09 09 09 09 09 28 3f 3a 20 2e 2a 3f 20 5e 5c 73 2a 5c 32 24 20 7c 20 2e 2a 20 29 0d 0a ........(?:..*?.^\s*\2$.|..*.)..
55a0 09 09 09 09 7c 0d 0a 09 09 09 09 09 28 5b 22 5c 27 60 5d 29 20 28 2e 2b 3f 29 20 5c 33 0d 0a 09 ....|.......(["\'`]).(.+?).\3...
55c0 09 09 09 09 09 28 3f 3a 20 2e 2a 3f 20 5e 5c 34 24 20 7c 20 2e 2a 20 29 0d 0a 09 09 09 09 7c 0d .....(?:..*?.^\4$.|..*.)......|.
55e0 0a 09 09 09 09 09 2d 20 28 5b 22 5c 27 60 5d 29 20 28 2e 2b 3f 29 20 5c 35 0d 0a 09 09 09 09 09 ......-.(["\'`]).(.+?).\5.......
5600 09 28 3f 3a 20 2e 2a 3f 20 5e 5c 73 2a 5c 36 24 20 7c 20 2e 2a 20 29 0d 0a 09 09 09 09 29 0d 0a .(?:..*?.^\s*\6$.|..*.)......)..
5620 09 09 09 2f 6d 78 6f 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 73 74 72 69 6e 67 0d 0a 09 09 .../mxo)......kind.=.:string....
5640 09 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 5c 2f 2f 29 20 61 6e 64 20 40 .elsif.@scanner.scan(/\//).and.@
5660 72 65 67 65 78 70 5f 61 6c 6c 6f 77 65 64 0d 0a 09 09 09 09 40 73 63 61 6e 6e 65 72 2e 75 6e 73 regexp_allowed......@scanner.uns
5680 63 61 6e 0d 0a 09 09 09 09 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 52 45 47 45 58 50 29 0d 0a can......@scanner.scan(REGEXP)..
56a0 09 09 09 09 6b 69 6e 64 20 3d 20 3a 72 65 67 65 78 70 0d 0a 2f 25 28 3f 3a 5b 51 71 78 72 77 5d ....kind.=.:regexp../%(?:[Qqxrw]
56c0 28 3f 3a 5c 28 5b 5e 29 23 5c 5c 5c 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c 23 7c (?:\([^)#\\\\]*(?:(?:#\{.*?\}|#|
56e0 5c 5c 5c 5c 2e 29 5b 5e 29 23 5c 5c 5c 5c 5d 2a 29 2a 5c 29 3f 7c 5c 5b 5b 5e 5c 5d 23 5c 5c 5c \\\\.)[^)#\\\\]*)*\)?|\[[^\]#\\\
5700 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c 23 7c 5c 5c 5c 5c 2e 29 5b 5e 5c 5d 23 5c \]*(?:(?:#\{.*?\}|#|\\\\.)[^\]#\
5720 5c 5c 5c 5d 2a 29 2a 5c 5d 3f 7c 5c 7b 5b 5e 7d 23 5c 5c 5c 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b \\\]*)*\]?|\{[^}#\\\\]*(?:(?:#\{
5740 2e 2a 3f 5c 7d 7c 23 7c 5c 5c 5c 5c 2e 29 5b 5e 7d 23 5c 5c 5c 5c 5d 2a 29 2a 5c 7d 3f 7c 3c 5b .*?\}|#|\\\\.)[^}#\\\\]*)*\}?|<[
5760 5e 3e 23 5c 5c 5c 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c 23 7c 5c 5c 5c 5c 2e 29 ^>#\\\\]*(?:(?:#\{.*?\}|#|\\\\.)
5780 5b 5e 3e 23 5c 5c 5c 5c 5d 2a 29 2a 3e 3f 7c 28 5b 5e 61 2d 7a 41 2d 5a 5c 5c 5c 5c 5d 29 28 3f [^>#\\\\]*)*>?|([^a-zA-Z\\\\])(?
57a0 3a 28 3f 21 5c 31 29 5b 5e 23 5c 5c 5c 5c 5d 29 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c :(?!\1)[^#\\\\])*(?:(?:#\{.*?\}|
57c0 23 7c 5c 5c 5c 5c 2e 29 28 3f 3a 28 3f 21 5c 31 29 5b 5e 23 5c 5c 5c 5c 5d 29 2a 29 2a 5c 31 3f #|\\\\.)(?:(?!\1)[^#\\\\])*)*\1?
57e0 29 7c 5c 28 5b 5e 29 23 5c 5c 5c 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c 23 7c 5c )|\([^)#\\\\]*(?:(?:#\{.*?\}|#|\
5800 5c 5c 5c 2e 29 5b 5e 29 23 5c 5c 5c 5c 5d 2a 29 2a 5c 29 3f 7c 5c 5b 5b 5e 5c 5d 23 5c 5c 5c 5c \\\.)[^)#\\\\]*)*\)?|\[[^\]#\\\\
5820 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c 23 7c 5c 5c 5c 5c 2e 29 5b 5e 5c 5d 23 5c 5c ]*(?:(?:#\{.*?\}|#|\\\\.)[^\]#\\
5840 5c 5c 5d 2a 29 2a 5c 5d 3f 7c 5c 7b 5b 5e 7d 23 5c 5c 5c 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e \\]*)*\]?|\{[^}#\\\\]*(?:(?:#\{.
5860 2a 3f 5c 7d 7c 23 7c 5c 5c 5c 5c 2e 29 5b 5e 7d 23 5c 5c 5c 5c 5d 2a 29 2a 5c 7d 3f 7c 3c 5b 5e *?\}|#|\\\\.)[^}#\\\\]*)*\}?|<[^
5880 3e 23 5c 5c 5c 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c 23 7c 5c 5c 5c 5c 2e 29 5b >#\\\\]*(?:(?:#\{.*?\}|#|\\\\.)[
58a0 5e 3e 23 5c 5c 5c 5c 5d 2a 29 2a 3e 3f 7c 28 5b 5e 61 2d 7a 41 2d 5a 5c 73 5c 5c 5c 5c 5d 29 28 ^>#\\\\]*)*>?|([^a-zA-Z\s\\\\])(
58c0 3f 3a 28 3f 21 5c 32 29 5b 5e 23 5c 5c 5c 5c 5d 29 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d ?:(?!\2)[^#\\\\])*(?:(?:#\{.*?\}
58e0 7c 23 7c 5c 5c 5c 5c 2e 29 28 3f 3a 28 3f 21 5c 32 29 5b 5e 23 5c 5c 5c 5c 5d 29 2a 29 2a 5c 32 |#|\\\\.)(?:(?!\2)[^#\\\\])*)*\2
5900 3f 7c 5c 5c 5c 5c 5b 5e 23 5c 5c 5c 5c 5d 2a 28 3f 3a 28 3f 3a 23 5c 7b 2e 2a 3f 5c 7d 7c 23 29 ?|\\\\[^#\\\\]*(?:(?:#\{.*?\}|#)
5920 5b 5e 23 5c 5c 5c 5c 5d 2a 29 2a 5c 5c 5c 5c 3f 29 2f 0d 0a 09 09 09 65 6c 73 69 66 20 40 73 63 [^#\\\\]*)*\\\\?)/.....elsif.@sc
5940 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 3a 28 3f 3a 23 7b 47 4c 4f 42 41 4c 5f 56 41 52 49 41 42 4c anner.scan(/:(?:#{GLOBAL_VARIABL
5960 45 7d 7c 23 7b 4d 45 54 48 4f 44 5f 4e 41 4d 45 5f 45 58 7d 7c 23 7b 53 54 52 49 4e 47 7d 29 2f E}|#{METHOD_NAME_EX}|#{STRING})/
5980 6f 78 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 73 79 6d 62 6f 6c 0d 0a 09 09 09 65 6c 73 69 ox)......kind.=.:symbol.....elsi
59a0 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 0d 0a 09 09 09 09 5c 3f 20 28 3f 3a 0d 0a 09 f.@scanner.scan(/......\?.(?:...
59c0 09 09 09 09 5b 5e 5c 73 5c 5c 5d 0d 0a 09 09 09 09 7c 0d 0a 09 09 09 09 09 5c 5c 20 28 3f 3a 4d ....[^\s\\]......|.......\\.(?:M
59e0 2d 5c 5c 43 2d 7c 43 2d 5c 5c 4d 2d 7c 4d 2d 5c 5c 63 7c 63 5c 5c 4d 2d 7c 63 7c 43 2d 7c 4d 2d -\\C-|C-\\M-|M-\\c|c\\M-|c|C-|M-
5a00 29 29 3f 20 28 3f 3a 20 5c 5c 20 28 3f 3a 20 2e 20 7c 20 5b 30 2d 37 5d 7b 33 7d 20 7c 20 78 5b ))?.(?:.\\.(?:...|.[0-7]{3}.|.x[
5a20 30 2d 39 41 2d 46 61 2d 66 5d 5b 30 2d 39 41 2d 46 61 2d 66 5d 20 29 0d 0a 09 09 09 09 29 0d 0a 0-9A-Fa-f][0-9A-Fa-f].)......)..
5a40 09 09 09 2f 6d 6f 78 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 69 6e 74 65 67 65 72 0d 0a 0d .../mox)......kind.=.:integer...
5a60 0a 09 09 09 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 20 5b 2d 2b 2a 5c 2f ....elsif.@scanner.scan(/.[-+*\/
5a80 25 3d 3c 3e 3b 2c 7c 26 21 28 29 5c 5b 5c 5d 7b 7d 7e 3f 5d 20 7c 20 5c 2e 5c 2e 3f 5c 2e 3f 20 %=<>;,|&!()\[\]{}~?].|.\.\.?\.?.
5aa0 7c 20 3a 3a 3f 20 2f 78 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 6f 70 65 72 61 74 6f 72 0d |.::?./x)......kind.=.:operator.
5ac0 0a 09 09 09 09 40 72 65 67 65 78 70 5f 61 6c 6c 6f 77 65 64 20 3d 20 3a 73 65 74 20 69 66 20 40 .....@regexp_allowed.=.:set.if.@
5ae0 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 5b 2d 31 2c 31 5d 20 3d 7e 20 2f 5b 7e 3d 21 3c 3e scanner.matched[-1,1].=~./[~=!<>
5b00 7c 26 5e 2c 5c 28 5c 5b 2b 5c 2d 5c 2f 5c 2a 25 5d 5c 7a 2f 0d 0a 09 09 09 65 6c 73 69 66 20 40 |&^,\(\[+\-\/\*%]\z/.....elsif.@
5b20 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 46 4c 4f 41 54 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 scanner.scan(FLOAT)......kind.=.
5b40 3a 66 6c 6f 61 74 0d 0a 09 09 09 65 6c 73 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 49 :float.....elsif.@scanner.scan(I
5b60 4e 54 45 47 45 52 29 0d 0a 09 09 09 09 6b 69 6e 64 20 3d 20 3a 69 6e 74 65 67 65 72 0d 0a 09 09 NTEGER)......kind.=.:integer....
5b80 09 65 6c 73 65 0d 0a 09 09 09 09 40 73 63 61 6e 6e 65 72 2e 67 65 74 63 68 0d 0a 09 09 09 65 6e .else......@scanner.getch.....en
5ba0 64 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 74 6f 6b 65 6e 20 3d 20 54 6f 6b 65 6e 2e 6e 65 77 20 d....end......token.=.Token.new.
5bc0 40 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 2c 20 6b 69 6e 64 0d 0a 0d 0a 09 09 69 66 20 6b @scanner.matched,.kind......if.k
5be0 69 6e 64 20 3d 3d 20 3a 72 65 67 65 78 70 0d 0a 09 09 09 74 6f 6b 65 6e 2e 74 65 78 74 20 3c 3c ind.==.:regexp.....token.text.<<
5c00 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 5b 65 69 6d 6e 6f 73 75 78 5d 2a 2f 29 0d 0a 09 .@scanner.scan(/[eimnosux]*/)...
5c20 09 65 6e 64 0d 0a 0d 0a 09 09 40 72 65 67 65 78 70 5f 61 6c 6c 6f 77 65 64 20 3d 20 28 40 72 65 .end......@regexp_allowed.=.(@re
5c40 67 65 78 70 5f 61 6c 6c 6f 77 65 64 20 3d 3d 20 3a 73 65 74 29 20 20 23 20 64 65 6c 61 79 65 64 gexp_allowed.==.:set)..#.delayed
5c60 20 66 6c 61 67 20 73 65 74 74 69 6e 67 0d 0a 0d 0a 09 09 74 6f 6b 65 6e 0d 0a 09 65 6e 64 0d 0a .flag.setting......token...end..
5c80 65 6e 64 0d 0a 0d 0a 72 65 67 69 73 74 65 72 20 52 75 62 79 2c 20 27 72 75 62 79 27 2c 20 27 72 end....register.Ruby,.'ruby',.'r
5ca0 62 27 0d 0a 0d 0a 09 65 6e 64 0d 0a 65 6e 64 0d 0a 63 6c 61 73 73 20 53 65 74 0d 0a 20 20 69 6e b'.....end..end..class.Set....in
5cc0 63 6c 75 64 65 20 45 6e 75 6d 65 72 61 62 6c 65 0d 0a 0d 0a 20 20 23 20 43 72 65 61 74 65 73 20 clude.Enumerable......#.Creates.
5ce0 61 20 6e 65 77 20 73 65 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 67 69 76 65 6e 20 6f a.new.set.containing.the.given.o
5d00 62 6a 65 63 74 73 2e 0d 0a 20 20 64 65 66 20 73 65 6c 66 2e 5b 5d 28 2a 61 72 79 29 0d 0a 20 20 bjects.....def.self.[](*ary)....
5d20 20 20 6e 65 77 28 61 72 79 29 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 43 72 65 61 74 65 73 ..new(ary)....end......#.Creates
5d40 20 61 20 6e 65 77 20 73 65 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 6c 65 6d 65 6e .a.new.set.containing.the.elemen
5d60 74 73 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 65 6e 75 6d 65 72 61 62 6c 65 0d 0a 20 20 23 20 ts.of.the.given.enumerable....#.
5d80 6f 62 6a 65 63 74 2e 0d 0a 20 20 23 0d 0a 20 20 23 20 49 66 20 61 20 62 6c 6f 63 6b 20 69 73 20 object.....#....#.If.a.block.is.
5da0 67 69 76 65 6e 2c 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 65 6e 75 6d 20 61 72 65 20 given,.the.elements.of.enum.are.
5dc0 70 72 65 70 72 6f 63 65 73 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 23 20 67 69 76 65 6e 20 62 preprocessed.by.the....#.given.b
5de0 6c 6f 63 6b 2e 0d 0a 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 65 6e 75 6d 20 3d 20 6e lock.....def.initialize(enum.=.n
5e00 69 6c 2c 20 26 62 6c 6f 63 6b 29 20 23 20 3a 79 69 65 6c 64 73 3a 20 6f 0d 0a 20 20 20 20 40 68 il,.&block).#.:yields:.o......@h
5e20 61 73 68 20 7c 7c 3d 20 48 61 73 68 2e 6e 65 77 0d 0a 0d 0a 20 20 20 20 65 6e 75 6d 2e 6e 69 6c ash.||=.Hash.new........enum.nil
5e40 3f 20 61 6e 64 20 72 65 74 75 72 6e 0d 0a 0d 0a 20 20 20 20 69 66 20 62 6c 6f 63 6b 0d 0a 20 20 ?.and.return........if.block....
5e60 20 20 20 20 65 6e 75 6d 2e 65 61 63 68 20 7b 20 7c 6f 7c 20 61 64 64 28 62 6c 6f 63 6b 5b 6f 5d ....enum.each.{.|o|.add(block[o]
5e80 29 20 7d 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 6d 65 72 67 65 28 65 6e 75 6d 29 ).}......else........merge(enum)
5ea0 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 43 6f 70 79 20 69 6e 74 ......end....end......#.Copy.int
5ec0 65 72 6e 61 6c 20 68 61 73 68 2e 0d 0a 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 5f 63 6f ernal.hash.....def.initialize_co
5ee0 70 79 28 6f 72 69 67 29 0d 0a 20 20 20 20 40 68 61 73 68 20 3d 20 6f 72 69 67 2e 69 6e 73 74 61 py(orig)......@hash.=.orig.insta
5f00 6e 63 65 5f 65 76 61 6c 7b 40 68 61 73 68 7d 2e 64 75 70 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 nce_eval{@hash}.dup....end......
5f20 23 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 #.Returns.the.number.of.elements
5f40 2e 0d 0a 20 20 64 65 66 20 73 69 7a 65 0d 0a 20 20 20 20 40 68 61 73 68 2e 73 69 7a 65 0d 0a 20 .....def.size......@hash.size...
5f60 20 65 6e 64 0d 0a 20 20 61 6c 69 61 73 20 6c 65 6e 67 74 68 20 73 69 7a 65 0d 0a 0d 0a 20 20 23 .end....alias.length.size......#
5f80 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20 73 65 74 20 63 6f 6e 74 61 69 6e .Returns.true.if.the.set.contain
5fa0 73 20 6e 6f 20 65 6c 65 6d 65 6e 74 73 2e 0d 0a 20 20 64 65 66 20 65 6d 70 74 79 3f 0d 0a 20 20 s.no.elements.....def.empty?....
5fc0 20 20 40 68 61 73 68 2e 65 6d 70 74 79 3f 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 65 6d ..@hash.empty?....end......#.Rem
5fe0 6f 76 65 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 73 65 oves.all.elements.and.returns.se
6000 6c 66 2e 0d 0a 20 20 64 65 66 20 63 6c 65 61 72 0d 0a 20 20 20 20 40 68 61 73 68 2e 63 6c 65 61 lf.....def.clear......@hash.clea
6020 72 0d 0a 20 20 20 20 73 65 6c 66 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 65 70 6c 61 63 r......self....end......#.Replac
6040 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 73 65 74 20 77 69 74 68 20 es.the.contents.of.the.set.with.
6060 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 67 69 76 65 6e 0d 0a 20 20 23 20 65 the.contents.of.the.given....#.e
6080 6e 75 6d 65 72 61 62 6c 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 72 65 74 75 72 6e 73 20 73 65 6c numerable.object.and.returns.sel
60a0 66 2e 0d 0a 20 20 64 65 66 20 72 65 70 6c 61 63 65 28 65 6e 75 6d 29 0d 0a 20 20 20 20 69 66 20 f.....def.replace(enum)......if.
60c0 65 6e 75 6d 2e 63 6c 61 73 73 20 3d 3d 20 73 65 6c 66 2e 63 6c 61 73 73 0d 0a 20 20 20 20 20 20 enum.class.==.self.class........
60e0 40 68 61 73 68 2e 72 65 70 6c 61 63 65 28 65 6e 75 6d 2e 69 6e 73 74 61 6e 63 65 5f 65 76 61 6c @hash.replace(enum.instance_eval
6100 20 7b 20 40 68 61 73 68 20 7d 29 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 65 6e 75 .{.@hash.})......else........enu
6120 6d 2e 69 73 5f 61 3f 28 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 m.is_a?(Enumerable).or.raise.Arg
6140 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 6d 65 umentError,."value.must.be.enume
6160 72 61 62 6c 65 22 0d 0a 20 20 20 20 20 20 63 6c 65 61 72 0d 0a 20 20 20 20 20 20 65 6e 75 6d 2e rable"........clear........enum.
6180 65 61 63 68 20 7b 20 7c 6f 7c 20 61 64 64 28 6f 29 20 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a each.{.|o|.add(o).}......end....
61a0 20 20 20 20 73 65 6c 66 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 43 6f 6e 76 65 72 74 73 20 ....self....end......#.Converts.
61c0 74 68 65 20 73 65 74 20 74 6f 20 61 6e 20 61 72 72 61 79 2e 20 20 54 68 65 20 6f 72 64 65 72 20 the.set.to.an.array...The.order.
61e0 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 73 20 75 6e 63 65 72 74 61 69 6e 2e 0d 0a 20 20 64 65 66 of.elements.is.uncertain.....def
6200 20 74 6f 5f 61 0d 0a 20 20 20 20 40 68 61 73 68 2e 6b 65 79 73 0d 0a 20 20 65 6e 64 0d 0a 0d 0a .to_a......@hash.keys....end....
6220 20 20 64 65 66 20 66 6c 61 74 74 65 6e 5f 6d 65 72 67 65 28 73 65 74 2c 20 73 65 65 6e 20 3d 20 ..def.flatten_merge(set,.seen.=.
6240 53 65 74 2e 6e 65 77 29 0d 0a 20 20 20 20 73 65 74 2e 65 61 63 68 20 7b 20 7c 65 7c 0d 0a 20 20 Set.new)......set.each.{.|e|....
6260 20 20 20 20 69 66 20 65 2e 69 73 5f 61 3f 28 53 65 74 29 0d 0a 09 69 66 20 73 65 65 6e 2e 69 6e ....if.e.is_a?(Set)...if.seen.in
6280 63 6c 75 64 65 3f 28 65 5f 69 64 20 3d 20 65 2e 6f 62 6a 65 63 74 5f 69 64 29 0d 0a 09 20 20 72 clude?(e_id.=.e.object_id).....r
62a0 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 74 72 69 65 64 20 74 6f 20 66 6c aise.ArgumentError,."tried.to.fl
62c0 61 74 74 65 6e 20 72 65 63 75 72 73 69 76 65 20 53 65 74 22 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 73 atten.recursive.Set"...end.....s
62e0 65 65 6e 2e 61 64 64 28 65 5f 69 64 29 0d 0a 09 66 6c 61 74 74 65 6e 5f 6d 65 72 67 65 28 65 2c een.add(e_id)...flatten_merge(e,
6300 20 73 65 65 6e 29 0d 0a 09 73 65 65 6e 2e 64 65 6c 65 74 65 28 65 5f 69 64 29 0d 0a 20 20 20 20 .seen)...seen.delete(e_id)......
6320 20 20 65 6c 73 65 0d 0a 09 61 64 64 28 65 29 0d 0a 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 ..else...add(e)........end......
6340 7d 0d 0a 0d 0a 20 20 20 20 73 65 6c 66 0d 0a 20 20 65 6e 64 0d 0a 20 20 70 72 6f 74 65 63 74 65 }........self....end....protecte
6360 64 20 3a 66 6c 61 74 74 65 6e 5f 6d 65 72 67 65 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 d.:flatten_merge......#.Returns.
6380 61 20 6e 65 77 20 73 65 74 20 74 68 61 74 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 a.new.set.that.is.a.copy.of.the.
63a0 73 65 74 2c 20 66 6c 61 74 74 65 6e 69 6e 67 20 65 61 63 68 0d 0a 20 20 23 20 63 6f 6e 74 61 69 set,.flattening.each....#.contai
63c0 6e 69 6e 67 20 73 65 74 20 72 65 63 75 72 73 69 76 65 6c 79 2e 0d 0a 20 20 64 65 66 20 66 6c 61 ning.set.recursively.....def.fla
63e0 74 74 65 6e 0d 0a 20 20 20 20 73 65 6c 66 2e 63 6c 61 73 73 2e 6e 65 77 2e 66 6c 61 74 74 65 6e tten......self.class.new.flatten
6400 5f 6d 65 72 67 65 28 73 65 6c 66 29 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 45 71 75 69 76 _merge(self)....end......#.Equiv
6420 61 6c 65 6e 74 20 74 6f 20 53 65 74 23 66 6c 61 74 74 65 6e 2c 20 62 75 74 20 72 65 70 6c 61 63 alent.to.Set#flatten,.but.replac
6440 65 73 20 74 68 65 20 72 65 63 65 69 76 65 72 20 77 69 74 68 20 74 68 65 0d 0a 20 20 23 20 72 65 es.the.receiver.with.the....#.re
6460 73 75 6c 74 20 69 6e 20 70 6c 61 63 65 2e 20 20 52 65 74 75 72 6e 73 20 6e 69 6c 20 69 66 20 6e sult.in.place...Returns.nil.if.n
6480 6f 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 77 65 72 65 20 6d 61 64 65 2e 0d 0a 20 20 64 65 o.modifications.were.made.....de
64a0 66 20 66 6c 61 74 74 65 6e 21 0d 0a 20 20 20 20 69 66 20 64 65 74 65 63 74 20 7b 20 7c 65 7c 20 f.flatten!......if.detect.{.|e|.
64c0 65 2e 69 73 5f 61 3f 28 53 65 74 29 20 7d 0d 0a 20 20 20 20 20 20 72 65 70 6c 61 63 65 28 66 6c e.is_a?(Set).}........replace(fl
64e0 61 74 74 65 6e 28 29 29 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 69 6c 0d 0a 20 atten())......else........nil...
6500 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 74 72 75 ...end....end......#.Returns.tru
6520 65 20 69 66 20 74 68 65 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 67 69 76 65 6e 20 e.if.the.set.contains.the.given.
6540 6f 62 6a 65 63 74 2e 0d 0a 20 20 64 65 66 20 69 6e 63 6c 75 64 65 3f 28 6f 29 0d 0a 20 20 20 20 object.....def.include?(o)......
6560 40 68 61 73 68 2e 69 6e 63 6c 75 64 65 3f 28 6f 29 0d 0a 20 20 65 6e 64 0d 0a 20 20 61 6c 69 61 @hash.include?(o)....end....alia
6580 73 20 6d 65 6d 62 65 72 3f 20 69 6e 63 6c 75 64 65 3f 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e s.member?.include?......#.Return
65a0 73 20 74 72 75 65 20 69 66 20 74 68 65 20 73 65 74 20 69 73 20 61 20 73 75 70 65 72 73 65 74 20 s.true.if.the.set.is.a.superset.
65c0 6f 66 20 74 68 65 20 67 69 76 65 6e 20 73 65 74 2e 0d 0a 20 20 64 65 66 20 73 75 70 65 72 73 65 of.the.given.set.....def.superse
65e0 74 3f 28 73 65 74 29 0d 0a 20 20 20 20 73 65 74 2e 69 73 5f 61 3f 28 53 65 74 29 20 6f 72 20 72 t?(set)......set.is_a?(Set).or.r
6600 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 aise.ArgumentError,."value.must.
6620 62 65 20 61 20 73 65 74 22 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66 20 73 be.a.set"......return.false.if.s
6640 69 7a 65 20 3c 20 73 65 74 2e 73 69 7a 65 0d 0a 20 20 20 20 73 65 74 2e 61 6c 6c 3f 20 7b 20 7c ize.<.set.size......set.all?.{.|
6660 6f 7c 20 69 6e 63 6c 75 64 65 3f 28 6f 29 20 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 o|.include?(o).}....end......#.R
6680 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20 73 65 74 20 69 73 20 61 20 70 72 6f 70 eturns.true.if.the.set.is.a.prop
66a0 65 72 20 73 75 70 65 72 73 65 74 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 73 65 74 2e 0d 0a 20 er.superset.of.the.given.set....
66c0 20 64 65 66 20 70 72 6f 70 65 72 5f 73 75 70 65 72 73 65 74 3f 28 73 65 74 29 0d 0a 20 20 20 20 .def.proper_superset?(set)......
66e0 73 65 74 2e 69 73 5f 61 3f 28 53 65 74 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 set.is_a?(Set).or.raise.Argument
6700 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20 73 65 74 22 0d 0a 20 20 Error,."value.must.be.a.set"....
6720 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66 20 73 69 7a 65 20 3c 3d 20 73 65 74 2e 73 69 ..return.false.if.size.<=.set.si
6740 7a 65 0d 0a 20 20 20 20 73 65 74 2e 61 6c 6c 3f 20 7b 20 7c 6f 7c 20 69 6e 63 6c 75 64 65 3f 28 ze......set.all?.{.|o|.include?(
6760 6f 29 20 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 o).}....end......#.Returns.true.
6780 69 66 20 74 68 65 20 73 65 74 20 69 73 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 67 69 if.the.set.is.a.subset.of.the.gi
67a0 76 65 6e 20 73 65 74 2e 0d 0a 20 20 64 65 66 20 73 75 62 73 65 74 3f 28 73 65 74 29 0d 0a 20 20 ven.set.....def.subset?(set)....
67c0 20 20 73 65 74 2e 69 73 5f 61 3f 28 53 65 74 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 ..set.is_a?(Set).or.raise.Argume
67e0 6e 74 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20 73 65 74 22 0d 0a ntError,."value.must.be.a.set"..
6800 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66 20 73 65 74 2e 73 69 7a 65 20 3c 20 73 ....return.false.if.set.size.<.s
6820 69 7a 65 0d 0a 20 20 20 20 61 6c 6c 3f 20 7b 20 7c 6f 7c 20 73 65 74 2e 69 6e 63 6c 75 64 65 3f ize......all?.{.|o|.set.include?
6840 28 6f 29 20 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 74 72 75 65 (o).}....end......#.Returns.true
6860 20 69 66 20 74 68 65 20 73 65 74 20 69 73 20 61 20 70 72 6f 70 65 72 20 73 75 62 73 65 74 20 6f .if.the.set.is.a.proper.subset.o
6880 66 20 74 68 65 20 67 69 76 65 6e 20 73 65 74 2e 0d 0a 20 20 64 65 66 20 70 72 6f 70 65 72 5f 73 f.the.given.set.....def.proper_s
68a0 75 62 73 65 74 3f 28 73 65 74 29 0d 0a 20 20 20 20 73 65 74 2e 69 73 5f 61 3f 28 53 65 74 29 20 ubset?(set)......set.is_a?(Set).
68c0 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d or.raise.ArgumentError,."value.m
68e0 75 73 74 20 62 65 20 61 20 73 65 74 22 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 ust.be.a.set"......return.false.
6900 69 66 20 73 65 74 2e 73 69 7a 65 20 3c 3d 20 73 69 7a 65 0d 0a 20 20 20 20 61 6c 6c 3f 20 7b 20 if.set.size.<=.size......all?.{.
6920 7c 6f 7c 20 73 65 74 2e 69 6e 63 6c 75 64 65 3f 28 6f 29 20 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a |o|.set.include?(o).}....end....
6940 20 20 23 20 43 61 6c 6c 73 20 74 68 65 20 67 69 76 65 6e 20 62 6c 6f 63 6b 20 6f 6e 63 65 20 66 ..#.Calls.the.given.block.once.f
6960 6f 72 20 65 61 63 68 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 65 74 2c 20 70 61 73 73 or.each.element.in.the.set,.pass
6980 69 6e 67 0d 0a 20 20 23 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 61 73 20 70 61 72 61 6d 65 74 65 ing....#.the.element.as.paramete
69a0 72 2e 0d 0a 20 20 64 65 66 20 65 61 63 68 0d 0a 20 20 20 20 40 68 61 73 68 2e 65 61 63 68 5f 6b r.....def.each......@hash.each_k
69c0 65 79 20 7b 20 7c 6f 7c 20 79 69 65 6c 64 28 6f 29 20 7d 0d 0a 20 20 20 20 73 65 6c 66 0d 0a 20 ey.{.|o|.yield(o).}......self...
69e0 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 41 64 64 73 20 74 68 65 20 67 69 76 65 6e 20 6f 62 6a 65 63 .end......#.Adds.the.given.objec
6a00 74 20 74 6f 20 74 68 65 20 73 65 74 20 61 6e 64 20 72 65 74 75 72 6e 73 20 73 65 6c 66 2e 20 20 t.to.the.set.and.returns.self...
6a20 55 73 65 20 2b 6d 65 72 67 65 2b 20 74 6f 0d 0a 20 20 23 20 61 64 64 20 73 65 76 65 72 61 6c 20 Use.+merge+.to....#.add.several.
6a40 65 6c 65 6d 65 6e 74 73 20 61 74 20 6f 6e 63 65 2e 0d 0a 20 20 64 65 66 20 61 64 64 28 6f 29 0d elements.at.once.....def.add(o).
6a60 0a 20 20 20 20 40 68 61 73 68 5b 6f 5d 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 73 65 6c 66 0d 0a .....@hash[o].=.true......self..
6a80 20 20 65 6e 64 0d 0a 20 20 61 6c 69 61 73 20 3c 3c 20 61 64 64 0d 0a 0d 0a 20 20 23 20 41 64 64 ..end....alias.<<.add......#.Add
6aa0 73 20 74 68 65 20 67 69 76 65 6e 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 65 20 73 65 74 20 61 6e s.the.given.object.to.the.set.an
6ac0 64 20 72 65 74 75 72 6e 73 20 73 65 6c 66 2e 20 20 49 66 20 74 68 65 0d 0a 20 20 23 20 6f 62 6a d.returns.self...If.the....#.obj
6ae0 65 63 74 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68 65 20 73 65 74 2c 20 72 65 74 75 72 ect.is.already.in.the.set,.retur
6b00 6e 73 20 6e 69 6c 2e 0d 0a 20 20 64 65 66 20 61 64 64 3f 28 6f 29 0d 0a 20 20 20 20 69 66 20 69 ns.nil.....def.add?(o)......if.i
6b20 6e 63 6c 75 64 65 3f 28 6f 29 0d 0a 20 20 20 20 20 20 6e 69 6c 0d 0a 20 20 20 20 65 6c 73 65 0d nclude?(o)........nil......else.
6b40 0a 20 20 20 20 20 20 61 64 64 28 6f 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 0d .......add(o)......end....end...
6b60 0a 20 20 23 20 44 65 6c 65 74 65 73 20 74 68 65 20 67 69 76 65 6e 20 6f 62 6a 65 63 74 20 66 72 ...#.Deletes.the.given.object.fr
6b80 6f 6d 20 74 68 65 20 73 65 74 20 61 6e 64 20 72 65 74 75 72 6e 73 20 73 65 6c 66 2e 20 20 55 73 om.the.set.and.returns.self...Us
6ba0 65 20 2b 73 75 62 74 72 61 63 74 2b 20 74 6f 0d 0a 20 20 23 20 64 65 6c 65 74 65 20 73 65 76 65 e.+subtract+.to....#.delete.seve
6bc0 72 61 6c 20 69 74 65 6d 73 20 61 74 20 6f 6e 63 65 2e 0d 0a 20 20 64 65 66 20 64 65 6c 65 74 65 ral.items.at.once.....def.delete
6be0 28 6f 29 0d 0a 20 20 20 20 40 68 61 73 68 2e 64 65 6c 65 74 65 28 6f 29 0d 0a 20 20 20 20 73 65 (o)......@hash.delete(o)......se
6c00 6c 66 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 44 65 6c 65 74 65 73 20 74 68 65 20 67 69 76 lf....end......#.Deletes.the.giv
6c20 65 6e 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 61 6e 64 20 72 65 74 75 72 en.object.from.the.set.and.retur
6c40 6e 73 20 73 65 6c 66 2e 20 20 49 66 20 74 68 65 0d 0a 20 20 23 20 6f 62 6a 65 63 74 20 69 73 20 ns.self...If.the....#.object.is.
6c60 6e 6f 74 20 69 6e 20 74 68 65 20 73 65 74 2c 20 72 65 74 75 72 6e 73 20 6e 69 6c 2e 0d 0a 20 20 not.in.the.set,.returns.nil.....
6c80 64 65 66 20 64 65 6c 65 74 65 3f 28 6f 29 0d 0a 20 20 20 20 69 66 20 69 6e 63 6c 75 64 65 3f 28 def.delete?(o)......if.include?(
6ca0 6f 29 0d 0a 20 20 20 20 20 20 64 65 6c 65 74 65 28 6f 29 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 o)........delete(o)......else...
6cc0 20 20 20 20 20 6e 69 6c 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 .....nil......end....end......#.
6ce0 44 65 6c 65 74 65 73 20 65 76 65 72 79 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 73 65 74 Deletes.every.element.of.the.set
6d00 20 66 6f 72 20 77 68 69 63 68 20 62 6c 6f 63 6b 20 65 76 61 6c 75 61 74 65 73 20 74 6f 0d 0a 20 .for.which.block.evaluates.to...
6d20 20 23 20 74 72 75 65 2c 20 61 6e 64 20 72 65 74 75 72 6e 73 20 73 65 6c 66 2e 0d 0a 20 20 64 65 .#.true,.and.returns.self.....de
6d40 66 20 64 65 6c 65 74 65 5f 69 66 0d 0a 20 20 20 20 40 68 61 73 68 2e 64 65 6c 65 74 65 5f 69 66 f.delete_if......@hash.delete_if
6d60 20 7b 20 7c 6f 2c 7c 20 79 69 65 6c 64 28 6f 29 20 7d 0d 0a 20 20 20 20 73 65 6c 66 0d 0a 20 20 .{.|o,|.yield(o).}......self....
6d80 65 6e 64 0d 0a 0d 0a 20 20 23 20 44 6f 20 63 6f 6c 6c 65 63 74 28 29 20 64 65 73 74 72 75 63 74 end......#.Do.collect().destruct
6da0 69 76 65 6c 79 2e 0d 0a 20 20 64 65 66 20 63 6f 6c 6c 65 63 74 21 0d 0a 20 20 20 20 73 65 74 20 ively.....def.collect!......set.
6dc0 3d 20 73 65 6c 66 2e 63 6c 61 73 73 2e 6e 65 77 0d 0a 20 20 20 20 65 61 63 68 20 7b 20 7c 6f 7c =.self.class.new......each.{.|o|
6de0 20 73 65 74 20 3c 3c 20 79 69 65 6c 64 28 6f 29 20 7d 0d 0a 20 20 20 20 72 65 70 6c 61 63 65 28 .set.<<.yield(o).}......replace(
6e00 73 65 74 29 0d 0a 20 20 65 6e 64 0d 0a 20 20 61 6c 69 61 73 20 6d 61 70 21 20 63 6f 6c 6c 65 63 set)....end....alias.map!.collec
6e20 74 21 0d 0a 0d 0a 20 20 23 20 45 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 53 65 74 23 64 65 6c 65 t!......#.Equivalent.to.Set#dele
6e40 74 65 5f 69 66 2c 20 62 75 74 20 72 65 74 75 72 6e 73 20 6e 69 6c 20 69 66 20 6e 6f 20 63 68 61 te_if,.but.returns.nil.if.no.cha
6e60 6e 67 65 73 20 77 65 72 65 0d 0a 20 20 23 20 6d 61 64 65 2e 0d 0a 20 20 64 65 66 20 72 65 6a 65 nges.were....#.made.....def.reje
6e80 63 74 21 0d 0a 20 20 20 20 6e 20 3d 20 73 69 7a 65 0d 0a 20 20 20 20 64 65 6c 65 74 65 5f 69 66 ct!......n.=.size......delete_if
6ea0 20 7b 20 7c 6f 7c 20 79 69 65 6c 64 28 6f 29 20 7d 0d 0a 20 20 20 20 73 69 7a 65 20 3d 3d 20 6e .{.|o|.yield(o).}......size.==.n
6ec0 20 3f 20 6e 69 6c 20 3a 20 73 65 6c 66 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 4d 65 72 67 .?.nil.:.self....end......#.Merg
6ee0 65 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 65 6e 75 es.the.elements.of.the.given.enu
6f00 6d 65 72 61 62 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 65 20 73 65 74 20 61 6e 64 0d 0a 20 merable.object.to.the.set.and...
6f20 20 23 20 72 65 74 75 72 6e 73 20 73 65 6c 66 2e 0d 0a 20 20 64 65 66 20 6d 65 72 67 65 28 65 6e .#.returns.self.....def.merge(en
6f40 75 6d 29 0d 0a 20 20 20 20 69 66 20 65 6e 75 6d 2e 69 73 5f 61 3f 28 53 65 74 29 0d 0a 20 20 20 um)......if.enum.is_a?(Set).....
6f60 20 20 20 40 68 61 73 68 2e 75 70 64 61 74 65 28 65 6e 75 6d 2e 69 6e 73 74 61 6e 63 65 5f 65 76 ...@hash.update(enum.instance_ev
6f80 61 6c 20 7b 20 40 68 61 73 68 20 7d 29 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 65 al.{.@hash.})......else........e
6fa0 6e 75 6d 2e 69 73 5f 61 3f 28 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 num.is_a?(Enumerable).or.raise.A
6fc0 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 rgumentError,."value.must.be.enu
6fe0 6d 65 72 61 62 6c 65 22 0d 0a 20 20 20 20 20 20 65 6e 75 6d 2e 65 61 63 68 20 7b 20 7c 6f 7c 20 merable"........enum.each.{.|o|.
7000 61 64 64 28 6f 29 20 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 73 65 6c 66 0d 0a 20 add(o).}......end........self...
7020 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 44 65 6c 65 74 65 73 20 65 76 65 72 79 20 65 6c 65 6d 65 6e .end......#.Deletes.every.elemen
7040 74 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20 65 6e 75 6d t.that.appears.in.the.given.enum
7060 65 72 61 62 6c 65 20 6f 62 6a 65 63 74 0d 0a 20 20 23 20 61 6e 64 20 72 65 74 75 72 6e 73 20 73 erable.object....#.and.returns.s
7080 65 6c 66 2e 0d 0a 20 20 64 65 66 20 73 75 62 74 72 61 63 74 28 65 6e 75 6d 29 0d 0a 20 20 20 20 elf.....def.subtract(enum)......
70a0 65 6e 75 6d 2e 69 73 5f 61 3f 28 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 enum.is_a?(Enumerable).or.raise.
70c0 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e ArgumentError,."value.must.be.en
70e0 75 6d 65 72 61 62 6c 65 22 0d 0a 20 20 20 20 65 6e 75 6d 2e 65 61 63 68 20 7b 20 7c 6f 7c 20 64 umerable"......enum.each.{.|o|.d
7100 65 6c 65 74 65 28 6f 29 20 7d 0d 0a 20 20 20 20 73 65 6c 66 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 elete(o).}......self....end.....
7120 20 23 20 52 65 74 75 72 6e 73 20 61 20 6e 65 77 20 73 65 74 20 62 75 69 6c 74 20 62 79 20 6d 65 .#.Returns.a.new.set.built.by.me
7140 72 67 69 6e 67 20 74 68 65 20 73 65 74 20 61 6e 64 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f rging.the.set.and.the.elements.o
7160 66 20 74 68 65 0d 0a 20 20 23 20 67 69 76 65 6e 20 65 6e 75 6d 65 72 61 62 6c 65 20 6f 62 6a 65 f.the....#.given.enumerable.obje
7180 63 74 2e 0d 0a 20 20 64 65 66 20 7c 28 65 6e 75 6d 29 0d 0a 20 20 20 20 65 6e 75 6d 2e 69 73 5f ct.....def.|(enum)......enum.is_
71a0 61 3f 28 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 a?(Enumerable).or.raise.Argument
71c0 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 6d 65 72 61 62 6c 65 Error,."value.must.be.enumerable
71e0 22 0d 0a 20 20 20 20 64 75 70 2e 6d 65 72 67 65 28 65 6e 75 6d 29 0d 0a 20 20 65 6e 64 0d 0a 20 "......dup.merge(enum)....end...
7200 20 61 6c 69 61 73 20 2b 20 7c 09 09 23 23 0d 0a 20 20 61 6c 69 61 73 20 75 6e 69 6f 6e 20 7c 09 .alias.+.|..##....alias.union.|.
7220 09 23 23 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 61 20 6e 65 77 20 73 65 74 20 62 75 69 .##......#.Returns.a.new.set.bui
7240 6c 74 20 62 79 20 64 75 70 6c 69 63 61 74 69 6e 67 20 74 68 65 20 73 65 74 2c 20 72 65 6d 6f 76 lt.by.duplicating.the.set,.remov
7260 69 6e 67 20 65 76 65 72 79 0d 0a 20 20 23 20 65 6c 65 6d 65 6e 74 20 74 68 61 74 20 61 70 70 65 ing.every....#.element.that.appe
7280 61 72 73 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20 65 6e 75 6d 65 72 61 62 6c 65 20 6f 62 6a 65 ars.in.the.given.enumerable.obje
72a0 63 74 2e 0d 0a 20 20 64 65 66 20 2d 28 65 6e 75 6d 29 0d 0a 20 20 20 20 65 6e 75 6d 2e 69 73 5f ct.....def.-(enum)......enum.is_
72c0 61 3f 28 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 a?(Enumerable).or.raise.Argument
72e0 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 6d 65 72 61 62 6c 65 Error,."value.must.be.enumerable
7300 22 0d 0a 20 20 20 20 64 75 70 2e 73 75 62 74 72 61 63 74 28 65 6e 75 6d 29 0d 0a 20 20 65 6e 64 "......dup.subtract(enum)....end
7320 0d 0a 20 20 61 6c 69 61 73 20 64 69 66 66 65 72 65 6e 63 65 20 2d 09 23 23 0d 0a 0d 0a 20 20 23 ....alias.difference.-.##......#
7340 20 52 65 74 75 72 6e 73 20 61 20 6e 65 77 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 .Returns.a.new.array.containing.
7360 65 6c 65 6d 65 6e 74 73 20 63 6f 6d 6d 6f 6e 20 74 6f 20 74 68 65 20 73 65 74 20 61 6e 64 20 74 elements.common.to.the.set.and.t
7380 68 65 0d 0a 20 20 23 20 67 69 76 65 6e 20 65 6e 75 6d 65 72 61 62 6c 65 20 6f 62 6a 65 63 74 2e he....#.given.enumerable.object.
73a0 0d 0a 20 20 64 65 66 20 26 28 65 6e 75 6d 29 0d 0a 20 20 20 20 65 6e 75 6d 2e 69 73 5f 61 3f 28 ....def.&(enum)......enum.is_a?(
73c0 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 Enumerable).or.raise.ArgumentErr
73e0 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 6d 65 72 61 62 6c 65 22 0d 0a or,."value.must.be.enumerable"..
7400 20 20 20 20 6e 20 3d 20 73 65 6c 66 2e 63 6c 61 73 73 2e 6e 65 77 0d 0a 20 20 20 20 65 6e 75 6d ....n.=.self.class.new......enum
7420 2e 65 61 63 68 20 7b 20 7c 6f 7c 20 6e 2e 61 64 64 28 6f 29 20 69 66 20 69 6e 63 6c 75 64 65 3f .each.{.|o|.n.add(o).if.include?
7440 28 6f 29 20 7d 0d 0a 20 20 20 20 6e 0d 0a 20 20 65 6e 64 0d 0a 20 20 61 6c 69 61 73 20 69 6e 74 (o).}......n....end....alias.int
7460 65 72 73 65 63 74 69 6f 6e 20 26 09 23 23 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 61 20 ersection.&.##......#.Returns.a.
7480 6e 65 77 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 65 6c 65 6d 65 6e 74 73 20 65 78 new.array.containing.elements.ex
74a0 63 6c 75 73 69 76 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 73 65 74 0d 0a 20 20 23 20 61 6e 64 clusive.between.the.set....#.and
74c0 20 74 68 65 20 67 69 76 65 6e 20 65 6e 75 6d 65 72 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20 20 28 .the.given.enumerable.object...(
74e0 73 65 74 20 5e 20 65 6e 75 6d 29 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 0d 0a 20 20 set.^.enum).is.equivalent.to....
7500 23 20 28 28 73 65 74 20 7c 20 65 6e 75 6d 29 20 2d 20 28 73 65 74 20 26 20 65 6e 75 6d 29 29 2e #.((set.|.enum).-.(set.&.enum)).
7520 0d 0a 20 20 64 65 66 20 5e 28 65 6e 75 6d 29 0d 0a 20 20 20 20 65 6e 75 6d 2e 69 73 5f 61 3f 28 ....def.^(enum)......enum.is_a?(
7540 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 Enumerable).or.raise.ArgumentErr
7560 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 6d 65 72 61 62 6c 65 22 0d 0a or,."value.must.be.enumerable"..
7580 20 20 20 20 6e 20 3d 20 64 75 70 0d 0a 20 20 20 20 65 6e 75 6d 2e 65 61 63 68 20 7b 20 7c 6f 7c ....n.=.dup......enum.each.{.|o|
75a0 20 69 66 20 6e 2e 69 6e 63 6c 75 64 65 3f 28 6f 29 20 74 68 65 6e 20 6e 2e 64 65 6c 65 74 65 28 .if.n.include?(o).then.n.delete(
75c0 6f 29 20 65 6c 73 65 20 6e 2e 61 64 64 28 6f 29 20 65 6e 64 20 7d 0d 0a 20 20 20 20 6e 0d 0a 20 o).else.n.add(o).end.}......n...
75e0 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 77 6f 20 .end......#.Returns.true.if.two.
7600 73 65 74 73 20 61 72 65 20 65 71 75 61 6c 2e 20 20 54 68 65 20 65 71 75 61 6c 69 74 79 20 6f 66 sets.are.equal...The.equality.of
7620 20 65 61 63 68 20 63 6f 75 70 6c 65 0d 0a 20 20 23 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 73 .each.couple....#.of.elements.is
7640 20 64 65 66 69 6e 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 4f 62 6a 65 63 74 23 65 71 6c .defined.according.to.Object#eql
7660 3f 2e 0d 0a 20 20 64 65 66 20 3d 3d 28 73 65 74 29 0d 0a 20 20 20 20 65 71 75 61 6c 3f 28 73 65 ?.....def.==(set)......equal?(se
7680 74 29 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 73 65 74 2e 69 73 t).and.return.true........set.is
76a0 5f 61 3f 28 53 65 74 29 20 26 26 20 73 69 7a 65 20 3d 3d 20 73 65 74 2e 73 69 7a 65 20 6f 72 20 _a?(Set).&&.size.==.set.size.or.
76c0 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 20 20 68 61 73 68 20 3d 20 40 68 61 73 68 return.false........hash.=.@hash
76e0 2e 64 75 70 0d 0a 20 20 20 20 73 65 74 2e 61 6c 6c 3f 20 7b 20 7c 6f 7c 20 68 61 73 68 2e 69 6e .dup......set.all?.{.|o|.hash.in
7700 63 6c 75 64 65 3f 28 6f 29 20 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 68 61 73 68 clude?(o).}....end......def.hash
7720 09 23 20 3a 6e 6f 64 6f 63 3a 0d 0a 20 20 20 20 40 68 61 73 68 2e 68 61 73 68 0d 0a 20 20 65 6e .#.:nodoc:......@hash.hash....en
7740 64 0d 0a 0d 0a 20 20 64 65 66 20 65 71 6c 3f 28 6f 29 09 23 20 3a 6e 6f 64 6f 63 3a 0d 0a 20 20 d......def.eql?(o).#.:nodoc:....
7760 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 6f 2e 69 73 5f 61 3f 28 53 65 ..return.false.unless.o.is_a?(Se
7780 74 29 0d 0a 20 20 20 20 40 68 61 73 68 2e 65 71 6c 3f 28 6f 2e 69 6e 73 74 61 6e 63 65 5f 65 76 t)......@hash.eql?(o.instance_ev
77a0 61 6c 7b 40 68 61 73 68 7d 29 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 43 6c 61 73 73 69 66 al{@hash})....end......#.Classif
77c0 69 65 73 20 74 68 65 20 73 65 74 20 62 79 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 ies.the.set.by.the.return.value.
77e0 6f 66 20 74 68 65 20 67 69 76 65 6e 20 62 6c 6f 63 6b 20 61 6e 64 0d 0a 20 20 23 20 72 65 74 75 of.the.given.block.and....#.retu
7800 72 6e 73 20 61 20 68 61 73 68 20 6f 66 20 7b 76 61 6c 75 65 20 3d 3e 20 73 65 74 20 6f 66 20 65 rns.a.hash.of.{value.=>.set.of.e
7820 6c 65 6d 65 6e 74 73 7d 20 70 61 69 72 73 2e 20 20 54 68 65 20 62 6c 6f 63 6b 20 69 73 0d 0a 20 lements}.pairs...The.block.is...
7840 20 23 20 63 61 6c 6c 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 65 6c 65 6d 65 6e 74 20 .#.called.once.for.each.element.
7860 6f 66 20 74 68 65 20 73 65 74 2c 20 70 61 73 73 69 6e 67 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 of.the.set,.passing.the.element.
7880 61 73 0d 0a 20 20 23 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 23 20 65 2e 67 as....#.parameter.....#....#.e.g
78a0 2e 3a 0d 0a 20 20 23 0d 0a 20 20 23 20 20 20 72 65 71 75 69 72 65 20 27 73 65 74 27 0d 0a 20 20 .:....#....#...require.'set'....
78c0 23 20 20 20 66 69 6c 65 73 20 3d 20 53 65 74 2e 6e 65 77 28 44 69 72 2e 67 6c 6f 62 28 22 2a 2e #...files.=.Set.new(Dir.glob("*.
78e0 72 62 22 29 29 0d 0a 20 20 23 20 20 20 68 61 73 68 20 3d 20 66 69 6c 65 73 2e 63 6c 61 73 73 69 rb"))....#...hash.=.files.classi
7900 66 79 20 7b 20 7c 66 7c 20 46 69 6c 65 2e 6d 74 69 6d 65 28 66 29 2e 79 65 61 72 20 7d 0d 0a 20 fy.{.|f|.File.mtime(f).year.}...
7920 20 23 20 20 20 70 20 68 61 73 68 20 20 20 20 23 20 3d 3e 20 7b 32 30 30 30 3d 3e 23 3c 53 65 74 .#...p.hash....#.=>.{2000=>#<Set
7940 3a 20 7b 22 61 2e 72 62 22 2c 20 22 62 2e 72 62 22 7d 3e 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 :.{"a.rb",."b.rb"}>,....#.......
7960 20 20 20 20 20 20 23 20 20 20 20 20 32 30 30 31 3d 3e 23 3c 53 65 74 3a 20 7b 22 63 2e 72 62 22 ......#.....2001=>#<Set:.{"c.rb"
7980 2c 20 22 64 2e 72 62 22 2c 20 22 65 2e 72 62 22 7d 3e 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 20 ,."d.rb",."e.rb"}>,....#........
79a0 20 20 20 20 20 23 20 20 20 20 20 32 30 30 32 3d 3e 23 3c 53 65 74 3a 20 7b 22 66 2e 72 62 22 7d .....#.....2002=>#<Set:.{"f.rb"}
79c0 3e 7d 0d 0a 20 20 64 65 66 20 63 6c 61 73 73 69 66 79 20 23 20 3a 79 69 65 6c 64 73 3a 20 6f 0d >}....def.classify.#.:yields:.o.
79e0 0a 20 20 20 20 68 20 3d 20 7b 7d 0d 0a 0d 0a 20 20 20 20 65 61 63 68 20 7b 20 7c 69 7c 0d 0a 20 .....h.=.{}........each.{.|i|...
7a00 20 20 20 20 20 78 20 3d 20 79 69 65 6c 64 28 69 29 0d 0a 20 20 20 20 20 20 28 68 5b 78 5d 20 7c .....x.=.yield(i)........(h[x].|
7a20 7c 3d 20 73 65 6c 66 2e 63 6c 61 73 73 2e 6e 65 77 29 2e 61 64 64 28 69 29 0d 0a 20 20 20 20 7d |=.self.class.new).add(i)......}
7a40 0d 0a 0d 0a 20 20 20 20 68 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 44 69 76 69 64 65 73 20 ........h....end......#.Divides.
7a60 74 68 65 20 73 65 74 20 69 6e 74 6f 20 61 20 73 65 74 20 6f 66 20 73 75 62 73 65 74 73 20 61 63 the.set.into.a.set.of.subsets.ac
7a80 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0d 0a 20 20 23 20 cording.to.the.commonality....#.
7aa0 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 67 69 76 65 6e 20 62 6c 6f 63 6b 2e 0d 0a 20 20 23 defined.by.the.given.block.....#
7ac0 0d 0a 20 20 23 20 49 66 20 74 68 65 20 61 72 69 74 79 20 6f 66 20 74 68 65 20 62 6c 6f 63 6b 20 ....#.If.the.arity.of.the.block.
7ae0 69 73 20 32 2c 20 65 6c 65 6d 65 6e 74 73 20 6f 31 20 61 6e 64 20 6f 32 20 61 72 65 20 69 6e 20 is.2,.elements.o1.and.o2.are.in.
7b00 63 6f 6d 6d 6f 6e 0d 0a 20 20 23 20 69 66 20 62 6c 6f 63 6b 2e 63 61 6c 6c 28 6f 31 2c 20 6f 32 common....#.if.block.call(o1,.o2
7b20 29 20 69 73 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 65 6c 65 6d 65 6e 74 73 20 ).is.true...Otherwise,.elements.
7b40 6f 31 20 61 6e 64 20 6f 32 20 61 72 65 0d 0a 20 20 23 20 69 6e 20 63 6f 6d 6d 6f 6e 20 69 66 20 o1.and.o2.are....#.in.common.if.
7b60 62 6c 6f 63 6b 2e 63 61 6c 6c 28 6f 31 29 20 3d 3d 20 62 6c 6f 63 6b 2e 63 61 6c 6c 28 6f 32 29 block.call(o1).==.block.call(o2)
7b80 2e 0d 0a 20 20 23 0d 0a 20 20 23 20 65 2e 67 2e 3a 0d 0a 20 20 23 0d 0a 20 20 23 20 20 20 72 65 .....#....#.e.g.:....#....#...re
7ba0 71 75 69 72 65 20 27 73 65 74 27 0d 0a 20 20 23 20 20 20 6e 75 6d 62 65 72 73 20 3d 20 53 65 74 quire.'set'....#...numbers.=.Set
7bc0 5b 31 2c 20 33 2c 20 34 2c 20 36 2c 20 39 2c 20 31 30 2c 20 31 31 5d 0d 0a 20 20 23 20 20 20 73 [1,.3,.4,.6,.9,.10,.11]....#...s
7be0 65 74 20 3d 20 6e 75 6d 62 65 72 73 2e 64 69 76 69 64 65 20 7b 20 7c 69 2c 6a 7c 20 28 69 20 2d et.=.numbers.divide.{.|i,j|.(i.-
7c00 20 6a 29 2e 61 62 73 20 3d 3d 20 31 20 7d 0d 0a 20 20 23 20 20 20 70 20 73 65 74 20 20 20 20 20 .j).abs.==.1.}....#...p.set.....
7c20 23 20 3d 3e 20 23 3c 53 65 74 3a 20 7b 23 3c 53 65 74 3a 20 7b 31 7d 3e 2c 0d 0a 20 20 23 20 20 #.=>.#<Set:.{#<Set:.{1}>,....#..
7c40 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 23 3c 53 65 74 3a 20 7b ...........#............#<Set:.{
7c60 31 31 2c 20 39 2c 20 31 30 7d 3e 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 11,.9,.10}>,....#.............#.
7c80 20 20 20 20 20 20 20 20 20 20 20 23 3c 53 65 74 3a 20 7b 33 2c 20 34 7d 3e 2c 0d 0a 20 20 23 20 ...........#<Set:.{3,.4}>,....#.
7ca0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 23 3c 53 65 74 3a 20 ............#............#<Set:.
7cc0 7b 36 7d 3e 7d 3e 0d 0a 20 20 64 65 66 20 64 69 76 69 64 65 28 26 66 75 6e 63 29 0d 0a 20 20 20 {6}>}>....def.divide(&func).....
7ce0 20 69 66 20 66 75 6e 63 2e 61 72 69 74 79 20 3d 3d 20 32 0d 0a 20 20 20 20 20 20 72 65 71 75 69 .if.func.arity.==.2........requi
7d00 72 65 20 27 74 73 6f 72 74 27 0d 0a 0d 0a 20 20 20 20 20 20 63 6c 61 73 73 20 3c 3c 20 64 69 67 re.'tsort'..........class.<<.dig
7d20 20 3d 20 7b 7d 09 09 23 20 3a 6e 6f 64 6f 63 3a 0d 0a 09 69 6e 63 6c 75 64 65 20 54 53 6f 72 74 .=.{}..#.:nodoc:...include.TSort
7d40 0d 0a 0d 0a 09 61 6c 69 61 73 20 74 73 6f 72 74 5f 65 61 63 68 5f 6e 6f 64 65 20 65 61 63 68 5f .....alias.tsort_each_node.each_
7d60 6b 65 79 0d 0a 09 64 65 66 20 74 73 6f 72 74 5f 65 61 63 68 5f 63 68 69 6c 64 28 6e 6f 64 65 2c key...def.tsort_each_child(node,
7d80 20 26 62 6c 6f 63 6b 29 0d 0a 09 20 20 66 65 74 63 68 28 6e 6f 64 65 29 2e 65 61 63 68 28 26 62 .&block).....fetch(node).each(&b
7da0 6c 6f 63 6b 29 0d 0a 09 65 6e 64 0d 0a 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 lock)...end........end..........
7dc0 65 61 63 68 20 7b 20 7c 75 7c 0d 0a 09 64 69 67 5b 75 5d 20 3d 20 61 20 3d 20 5b 5d 0d 0a 09 65 each.{.|u|...dig[u].=.a.=.[]...e
7de0 61 63 68 7b 20 7c 76 7c 20 66 75 6e 63 2e 63 61 6c 6c 28 75 2c 20 76 29 20 61 6e 64 20 61 20 3c ach{.|v|.func.call(u,.v).and.a.<
7e00 3c 20 76 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 3d 20 53 65 <.v.}........}..........set.=.Se
7e20 74 2e 6e 65 77 28 29 0d 0a 20 20 20 20 20 20 64 69 67 2e 65 61 63 68 5f 73 74 72 6f 6e 67 6c 79 t.new()........dig.each_strongly
7e40 5f 63 6f 6e 6e 65 63 74 65 64 5f 63 6f 6d 70 6f 6e 65 6e 74 20 7b 20 7c 63 73 73 7c 0d 0a 09 73 _connected_component.{.|css|...s
7e60 65 74 2e 61 64 64 28 73 65 6c 66 2e 63 6c 61 73 73 2e 6e 65 77 28 63 73 73 29 29 0d 0a 20 20 20 et.add(self.class.new(css)).....
7e80 20 20 20 7d 0d 0a 20 20 20 20 20 20 73 65 74 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 ...}........set......else.......
7ea0 20 53 65 74 2e 6e 65 77 28 63 6c 61 73 73 69 66 79 28 26 66 75 6e 63 29 2e 76 61 6c 75 65 73 29 .Set.new(classify(&func).values)
7ec0 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 49 6e 73 70 65 63 74 4b 65 79 ......end....end......InspectKey
7ee0 20 3d 20 3a 5f 5f 69 6e 73 70 65 63 74 5f 6b 65 79 5f 5f 20 20 20 20 20 20 20 20 20 23 20 3a 6e .=.:__inspect_key__.........#.:n
7f00 6f 64 6f 63 3a 0d 0a 0d 0a 20 20 23 20 52 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f odoc:......#.Returns.a.string.co
7f20 6e 74 61 69 6e 69 6e 67 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 72 65 70 72 65 73 ntaining.a.human-readable.repres
7f40 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a 20 20 23 20 73 65 74 2e 20 28 22 23 3c 53 65 entation.of.the....#.set..("#<Se
7f60 74 3a 20 7b 65 6c 65 6d 65 6e 74 31 2c 20 65 6c 65 6d 65 6e 74 32 2c 20 2e 2e 2e 7d 3e 22 29 0d t:.{element1,.element2,....}>").
7f80 0a 20 20 64 65 66 20 69 6e 73 70 65 63 74 0d 0a 20 20 20 20 69 64 73 20 3d 20 28 54 68 72 65 61 ...def.inspect......ids.=.(Threa
7fa0 64 2e 63 75 72 72 65 6e 74 5b 49 6e 73 70 65 63 74 4b 65 79 5d 20 7c 7c 3d 20 5b 5d 29 0d 0a 0d d.current[InspectKey].||=.[])...
7fc0 0a 20 20 20 20 69 66 20 69 64 73 2e 69 6e 63 6c 75 64 65 3f 28 6f 62 6a 65 63 74 5f 69 64 29 0d .....if.ids.include?(object_id).
7fe0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 70 72 69 6e 74 66 28 27 23 3c 25 73 3a 20 7b 2e 2e .......return.sprintf('#<%s:.{..
8000 2e 7d 3e 27 2c 20 73 65 6c 66 2e 63 6c 61 73 73 2e 6e 61 6d 65 29 0d 0a 20 20 20 20 65 6e 64 0d .}>',.self.class.name)......end.
8020 0a 0d 0a 20 20 20 20 62 65 67 69 6e 0d 0a 20 20 20 20 20 20 69 64 73 20 3c 3c 20 6f 62 6a 65 63 .......begin........ids.<<.objec
8040 74 5f 69 64 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 70 72 69 6e 74 66 28 27 23 3c 25 73 t_id........return.sprintf('#<%s
8060 3a 20 7b 25 73 7d 3e 27 2c 20 73 65 6c 66 2e 63 6c 61 73 73 2c 20 74 6f 5f 61 2e 69 6e 73 70 65 :.{%s}>',.self.class,.to_a.inspe
8080 63 74 5b 31 2e 2e 2d 32 5d 29 0d 0a 20 20 20 20 65 6e 73 75 72 65 0d 0a 20 20 20 20 20 20 69 64 ct[1..-2])......ensure........id
80a0 73 2e 70 6f 70 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 70 s.pop......end....end......def.p
80c0 72 65 74 74 79 5f 70 72 69 6e 74 28 70 70 29 09 23 20 3a 6e 6f 64 6f 63 3a 0d 0a 20 20 20 20 70 retty_print(pp).#.:nodoc:......p
80e0 70 2e 74 65 78 74 20 73 70 72 69 6e 74 66 28 27 23 3c 25 73 3a 20 7b 27 2c 20 73 65 6c 66 2e 63 p.text.sprintf('#<%s:.{',.self.c
8100 6c 61 73 73 2e 6e 61 6d 65 29 0d 0a 20 20 20 20 70 70 2e 6e 65 73 74 28 31 29 20 7b 0d 0a 20 20 lass.name)......pp.nest(1).{....
8120 20 20 20 20 70 70 2e 73 65 70 6c 69 73 74 28 73 65 6c 66 29 20 7b 20 7c 6f 7c 0d 0a 09 70 70 2e ....pp.seplist(self).{.|o|...pp.
8140 70 70 20 6f 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 70 70 2e 74 65 78 pp.o........}......}......pp.tex
8160 74 20 22 7d 3e 22 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 70 72 65 74 74 79 5f 70 72 t."}>"....end......def.pretty_pr
8180 69 6e 74 5f 63 79 63 6c 65 28 70 70 29 09 23 20 3a 6e 6f 64 6f 63 3a 0d 0a 20 20 20 20 70 70 2e int_cycle(pp).#.:nodoc:......pp.
81a0 74 65 78 74 20 73 70 72 69 6e 74 66 28 27 23 3c 25 73 3a 20 7b 25 73 7d 3e 27 2c 20 73 65 6c 66 text.sprintf('#<%s:.{%s}>',.self
81c0 2e 63 6c 61 73 73 2e 6e 61 6d 65 2c 20 65 6d 70 74 79 3f 20 3f 20 27 27 20 3a 20 27 2e 2e 2e 27 .class.name,.empty?.?.''.:.'...'
81e0 29 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 53 6f 72 74 65 64 53 65 74 20 69 6d 70 )....end..end....#.SortedSet.imp
8200 6c 65 6d 65 6e 74 73 20 61 20 73 65 74 20 77 68 69 63 68 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 lements.a.set.which.elements.are
8220 20 73 6f 72 74 65 64 20 69 6e 20 6f 72 64 65 72 2e 20 20 53 65 65 20 53 65 74 2e 0d 0a 63 6c 61 .sorted.in.order...See.Set...cla
8240 73 73 20 53 6f 72 74 65 64 53 65 74 20 3c 20 53 65 74 0d 0a 20 20 40 40 73 65 74 75 70 20 3d 20 ss.SortedSet.<.Set....@@setup.=.
8260 66 61 6c 73 65 0d 0a 0d 0a 20 20 63 6c 61 73 73 20 3c 3c 20 73 65 6c 66 0d 0a 20 20 20 20 64 65 false......class.<<.self......de
8280 66 20 5b 5d 28 2a 61 72 79 29 09 23 20 3a 6e 6f 64 6f 63 3a 0d 0a 20 20 20 20 20 20 6e 65 77 28 f.[](*ary).#.:nodoc:........new(
82a0 61 72 79 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 73 65 74 75 70 09 23 ary)......end........def.setup.#
82c0 20 3a 6e 6f 64 6f 63 3a 0d 0a 20 20 20 20 20 20 40 40 73 65 74 75 70 20 61 6e 64 20 72 65 74 75 .:nodoc:........@@setup.and.retu
82e0 72 6e 0d 0a 0d 0a 20 20 20 20 20 20 62 65 67 69 6e 0d 0a 09 72 65 71 75 69 72 65 20 27 72 62 74 rn..........begin...require.'rbt
8300 72 65 65 27 0d 0a 0d 0a 09 6d 6f 64 75 6c 65 5f 65 76 61 6c 20 25 7b 0d 0a 09 20 20 64 65 66 20 ree'.....module_eval.%{.....def.
8320 69 6e 69 74 69 61 6c 69 7a 65 28 2a 61 72 67 73 2c 20 26 62 6c 6f 63 6b 29 0d 0a 09 20 20 20 20 initialize(*args,.&block).......
8340 40 68 61 73 68 20 3d 20 52 42 54 72 65 65 2e 6e 65 77 0d 0a 09 20 20 20 20 73 75 70 65 72 0d 0a @hash.=.RBTree.new.......super..
8360 09 20 20 65 6e 64 0d 0a 09 7d 0d 0a 20 20 20 20 20 20 72 65 73 63 75 65 20 4c 6f 61 64 45 72 72 ...end...}........rescue.LoadErr
8380 6f 72 0d 0a 09 6d 6f 64 75 6c 65 5f 65 76 61 6c 20 25 7b 0d 0a 09 20 20 64 65 66 20 69 6e 69 74 or...module_eval.%{.....def.init
83a0 69 61 6c 69 7a 65 28 2a 61 72 67 73 2c 20 26 62 6c 6f 63 6b 29 0d 0a 09 20 20 20 20 40 6b 65 79 ialize(*args,.&block).......@key
83c0 73 20 3d 20 6e 69 6c 0d 0a 09 20 20 20 20 73 75 70 65 72 0d 0a 09 20 20 65 6e 64 0d 0a 0d 0a 09 s.=.nil.......super.....end.....
83e0 20 20 64 65 66 20 63 6c 65 61 72 0d 0a 09 20 20 20 20 40 6b 65 79 73 20 3d 20 6e 69 6c 0d 0a 09 ..def.clear.......@keys.=.nil...
8400 20 20 20 20 73 75 70 65 72 0d 0a 09 20 20 65 6e 64 0d 0a 0d 0a 09 20 20 64 65 66 20 72 65 70 6c ....super.....end.......def.repl
8420 61 63 65 28 65 6e 75 6d 29 0d 0a 09 20 20 20 20 40 6b 65 79 73 20 3d 20 6e 69 6c 0d 0a 09 20 20 ace(enum).......@keys.=.nil.....
8440 20 20 73 75 70 65 72 0d 0a 09 20 20 65 6e 64 0d 0a 0d 0a 09 20 20 64 65 66 20 61 64 64 28 6f 29 ..super.....end.......def.add(o)
8460 0d 0a 09 20 20 20 20 40 6b 65 79 73 20 3d 20 6e 69 6c 0d 0a 09 20 20 20 20 40 68 61 73 68 5b 6f .......@keys.=.nil.......@hash[o
8480 5d 20 3d 20 74 72 75 65 0d 0a 09 20 20 20 20 73 65 6c 66 0d 0a 09 20 20 65 6e 64 0d 0a 09 20 20 ].=.true.......self.....end.....
84a0 61 6c 69 61 73 20 3c 3c 20 61 64 64 0d 0a 0d 0a 09 20 20 64 65 66 20 64 65 6c 65 74 65 28 6f 29 alias.<<.add.......def.delete(o)
84c0 0d 0a 09 20 20 20 20 40 6b 65 79 73 20 3d 20 6e 69 6c 0d 0a 09 20 20 20 20 40 68 61 73 68 2e 64 .......@keys.=.nil.......@hash.d
84e0 65 6c 65 74 65 28 6f 29 0d 0a 09 20 20 20 20 73 65 6c 66 0d 0a 09 20 20 65 6e 64 0d 0a 0d 0a 09 elete(o).......self.....end.....
8500 20 20 64 65 66 20 64 65 6c 65 74 65 5f 69 66 0d 0a 09 20 20 20 20 6e 20 3d 20 40 68 61 73 68 2e ..def.delete_if.......n.=.@hash.
8520 73 69 7a 65 0d 0a 09 20 20 20 20 40 68 61 73 68 2e 64 65 6c 65 74 65 5f 69 66 20 7b 20 7c 6f 2c size.......@hash.delete_if.{.|o,
8540 7c 20 79 69 65 6c 64 28 6f 29 20 7d 0d 0a 09 20 20 20 20 40 6b 65 79 73 20 3d 20 6e 69 6c 20 69 |.yield(o).}.......@keys.=.nil.i
8560 66 20 40 68 61 73 68 2e 73 69 7a 65 20 21 3d 20 6e 0d 0a 09 20 20 20 20 73 65 6c 66 0d 0a 09 20 f.@hash.size.!=.n.......self....
8580 20 65 6e 64 0d 0a 0d 0a 09 20 20 64 65 66 20 6d 65 72 67 65 28 65 6e 75 6d 29 0d 0a 09 20 20 20 .end.......def.merge(enum)......
85a0 20 40 6b 65 79 73 20 3d 20 6e 69 6c 0d 0a 09 20 20 20 20 73 75 70 65 72 0d 0a 09 20 20 65 6e 64 .@keys.=.nil.......super.....end
85c0 0d 0a 0d 0a 09 20 20 64 65 66 20 65 61 63 68 0d 0a 09 20 20 20 20 74 6f 5f 61 2e 65 61 63 68 20 .......def.each.......to_a.each.
85e0 7b 20 7c 6f 7c 20 79 69 65 6c 64 28 6f 29 20 7d 0d 0a 09 20 20 65 6e 64 0d 0a 0d 0a 09 20 20 64 {.|o|.yield(o).}.....end.......d
8600 65 66 20 74 6f 5f 61 0d 0a 09 20 20 20 20 28 40 6b 65 79 73 20 3d 20 40 68 61 73 68 2e 6b 65 79 ef.to_a.......(@keys.=.@hash.key
8620 73 29 2e 73 6f 72 74 21 20 75 6e 6c 65 73 73 20 40 6b 65 79 73 0d 0a 09 20 20 20 20 40 6b 65 79 s).sort!.unless.@keys.......@key
8640 73 0d 0a 09 20 20 65 6e 64 0d 0a 09 7d 0d 0a 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 s.....end...}........end........
8660 20 20 40 40 73 65 74 75 70 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 ..@@setup.=.true......end....end
8680 0d 0a 0d 0a 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 2a 61 72 67 73 2c 20 26 62 6c 6f ......def.initialize(*args,.&blo
86a0 63 6b 29 09 23 20 3a 6e 6f 64 6f 63 3a 0d 0a 20 20 20 20 53 6f 72 74 65 64 53 65 74 2e 73 65 74 ck).#.:nodoc:......SortedSet.set
86c0 75 70 0d 0a 20 20 20 20 69 6e 69 74 69 61 6c 69 7a 65 28 2a 61 72 67 73 2c 20 26 62 6c 6f 63 6b up......initialize(*args,.&block
86e0 29 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 6d 6f 64 75 6c 65 20 45 6e 75 6d 65 72 61 62 )....end..end....module.Enumerab
8700 6c 65 0d 0a 20 20 23 20 4d 61 6b 65 73 20 61 20 73 65 74 20 66 72 6f 6d 20 74 68 65 20 65 6e 75 le....#.Makes.a.set.from.the.enu
8720 6d 65 72 61 62 6c 65 20 6f 62 6a 65 63 74 20 77 69 74 68 20 67 69 76 65 6e 20 61 72 67 75 6d 65 merable.object.with.given.argume
8740 6e 74 73 2e 0d 0a 20 20 64 65 66 20 74 6f 5f 73 65 74 28 6b 6c 61 73 73 20 3d 20 53 65 74 2c 20 nts.....def.to_set(klass.=.Set,.
8760 2a 61 72 67 73 2c 20 26 62 6c 6f 63 6b 29 0d 0a 20 20 20 20 6b 6c 61 73 73 2e 6e 65 77 28 73 65 *args,.&block)......klass.new(se
8780 6c 66 2c 20 2a 61 72 67 73 2c 20 26 62 6c 6f 63 6b 29 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a lf,.*args,.&block)....end..end..
87a0 0d 0a 23 20 3d 62 65 67 69 6e 0d 0a 23 20 3d 3d 20 52 65 73 74 72 69 63 65 64 53 65 74 20 63 6c ..#.=begin..#.==.RestricedSet.cl
87c0 61 73 73 0d 0a 23 20 52 65 73 74 72 69 63 65 64 53 65 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 ass..#.RestricedSet.implements.a
87e0 20 73 65 74 20 77 69 74 68 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 62 .set.with.restrictions.defined.b
8800 79 20 61 20 67 69 76 65 6e 0d 0a 23 20 62 6c 6f 63 6b 2e 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 53 75 y.a.given..#.block...#..#.===.Su
8820 70 65 72 20 63 6c 61 73 73 0d 0a 23 20 20 20 20 20 53 65 74 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 43 per.class..#.....Set..#..#.===.C
8840 6c 61 73 73 20 4d 65 74 68 6f 64 73 0d 0a 23 20 2d 2d 2d 20 52 65 73 74 72 69 63 65 64 53 65 74 lass.Methods..#.---.RestricedSet
8860 3a 3a 6e 65 77 28 65 6e 75 6d 20 3d 20 6e 69 6c 29 20 7b 20 7c 6f 7c 20 2e 2e 2e 20 7d 0d 0a 23 ::new(enum.=.nil).{.|o|.....}..#
8880 20 2d 2d 2d 20 52 65 73 74 72 69 63 65 64 53 65 74 3a 3a 6e 65 77 28 65 6e 75 6d 20 3d 20 6e 69 .---.RestricedSet::new(enum.=.ni
88a0 6c 29 20 7b 20 7c 72 73 65 74 2c 20 6f 7c 20 2e 2e 2e 20 7d 0d 0a 23 20 20 20 20 20 43 72 65 61 l).{.|rset,.o|.....}..#.....Crea
88c0 74 65 73 20 61 20 6e 65 77 20 72 65 73 74 72 69 63 74 65 64 20 73 65 74 20 63 6f 6e 74 61 69 6e tes.a.new.restricted.set.contain
88e0 69 6e 67 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 67 69 76 65 6e 0d 0a 23 ing.the.elements.of.the.given..#
8900 20 20 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20 20 52 65 73 74 72 69 63 .....enumerable.object...Restric
8920 74 69 6f 6e 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 67 69 76 65 6e 20 62 tions.are.defined.by.the.given.b
8940 6c 6f 63 6b 2e 0d 0a 23 0d 0a 23 20 20 20 20 20 49 66 20 74 68 65 20 62 6c 6f 63 6b 27 73 20 61 lock...#..#.....If.the.block's.a
8960 72 69 74 79 20 69 73 20 32 2c 20 69 74 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 74 68 65 rity.is.2,.it.is.called.with.the
8980 20 52 65 73 74 72 69 63 74 65 64 53 65 74 0d 0a 23 20 20 20 20 20 69 74 73 65 6c 66 20 61 6e 64 .RestrictedSet..#.....itself.and
89a0 20 61 6e 20 6f 62 6a 65 63 74 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 6f 62 6a 65 63 74 20 .an.object.to.see.if.the.object.
89c0 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 70 75 74 20 69 6e 0d 0a 23 20 20 20 20 20 74 is.allowed.to.be.put.in..#.....t
89e0 68 65 20 73 65 74 2e 0d 0a 23 0d 0a 23 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 he.set...#..#.....Otherwise,.the
8a00 20 62 6c 6f 63 6b 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 6f 62 6a 65 63 74 20 .block.is.called.with.an.object.
8a20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 6f 62 6a 65 63 74 0d 0a 23 20 20 20 20 20 69 73 20 61 to.see.if.the.object..#.....is.a
8a40 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 70 75 74 20 69 6e 20 74 68 65 20 73 65 74 2e 0d 0a 23 0d llowed.to.be.put.in.the.set...#.
8a60 0a 23 20 3d 3d 3d 20 49 6e 73 74 61 6e 63 65 20 4d 65 74 68 6f 64 73 0d 0a 23 20 2d 2d 2d 20 72 .#.===.Instance.Methods..#.---.r
8a80 65 73 74 72 69 63 74 69 6f 6e 5f 70 72 6f 63 0d 0a 23 20 20 20 20 20 52 65 74 75 72 6e 73 20 74 estriction_proc..#.....Returns.t
8aa0 68 65 20 72 65 73 74 72 69 63 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 20 6f 66 20 74 68 65 20 he.restriction.procedure.of.the.
8ac0 73 65 74 2e 0d 0a 23 0d 0a 23 20 3d 65 6e 64 0d 0a 23 0d 0a 23 20 63 6c 61 73 73 20 52 65 73 74 set...#..#.=end..#..#.class.Rest
8ae0 72 69 63 65 64 53 65 74 20 3c 20 53 65 74 0d 0a 23 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 ricedSet.<.Set..#...def.initiali
8b00 7a 65 28 2a 61 72 67 73 2c 20 26 62 6c 6f 63 6b 29 0d 0a 23 20 20 20 20 20 40 70 72 6f 63 20 3d ze(*args,.&block)..#.....@proc.=
8b20 20 62 6c 6f 63 6b 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 .block.or.raise.ArgumentError,."
8b40 6d 69 73 73 69 6e 67 20 61 20 62 6c 6f 63 6b 22 0d 0a 23 0d 0a 23 20 20 20 20 20 69 66 20 40 70 missing.a.block"..#..#.....if.@p
8b60 72 6f 63 2e 61 72 69 74 79 20 3d 3d 20 32 0d 0a 23 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65 roc.arity.==.2..#.......instance
8b80 5f 65 76 61 6c 20 25 7b 0d 0a 23 20 09 64 65 66 20 61 64 64 28 6f 29 0d 0a 23 20 09 20 20 40 68 _eval.%{..#..def.add(o)..#....@h
8ba0 61 73 68 5b 6f 5d 20 3d 20 74 72 75 65 20 69 66 20 40 70 72 6f 63 2e 63 61 6c 6c 28 73 65 6c 66 ash[o].=.true.if.@proc.call(self
8bc0 2c 20 6f 29 0d 0a 23 20 09 20 20 73 65 6c 66 0d 0a 23 20 09 65 6e 64 0d 0a 23 20 09 61 6c 69 61 ,.o)..#....self..#..end..#..alia
8be0 73 20 3c 3c 20 61 64 64 0d 0a 23 0d 0a 23 20 09 64 65 66 20 61 64 64 3f 28 6f 29 0d 0a 23 20 09 s.<<.add..#..#..def.add?(o)..#..
8c00 20 20 69 66 20 69 6e 63 6c 75 64 65 3f 28 6f 29 20 7c 7c 20 21 40 70 72 6f 63 2e 63 61 6c 6c 28 ..if.include?(o).||.!@proc.call(
8c20 73 65 6c 66 2c 20 6f 29 0d 0a 23 20 09 20 20 20 20 6e 69 6c 0d 0a 23 20 09 20 20 65 6c 73 65 0d self,.o)..#......nil..#....else.
8c40 0a 23 20 09 20 20 20 20 40 68 61 73 68 5b 6f 5d 20 3d 20 74 72 75 65 0d 0a 23 20 09 20 20 20 20 .#......@hash[o].=.true..#......
8c60 73 65 6c 66 0d 0a 23 20 09 20 20 65 6e 64 0d 0a 23 20 09 65 6e 64 0d 0a 23 0d 0a 23 20 09 64 65 self..#....end..#..end..#..#..de
8c80 66 20 72 65 70 6c 61 63 65 28 65 6e 75 6d 29 0d 0a 23 20 09 20 20 65 6e 75 6d 2e 69 73 5f 61 3f f.replace(enum)..#....enum.is_a?
8ca0 28 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 (Enumerable).or.raise.ArgumentEr
8cc0 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 6d 65 72 61 62 6c 65 22 0d ror,."value.must.be.enumerable".
8ce0 0a 23 20 09 20 20 63 6c 65 61 72 0d 0a 23 20 09 20 20 65 6e 75 6d 2e 65 61 63 68 20 7b 20 7c 6f .#....clear..#....enum.each.{.|o
8d00 7c 20 61 64 64 28 6f 29 20 7d 0d 0a 23 0d 0a 23 20 09 20 20 73 65 6c 66 0d 0a 23 20 09 65 6e 64 |.add(o).}..#..#....self..#..end
8d20 0d 0a 23 0d 0a 23 20 09 64 65 66 20 6d 65 72 67 65 28 65 6e 75 6d 29 0d 0a 23 20 09 20 20 65 6e ..#..#..def.merge(enum)..#....en
8d40 75 6d 2e 69 73 5f 61 3f 28 45 6e 75 6d 65 72 61 62 6c 65 29 20 6f 72 20 72 61 69 73 65 20 41 72 um.is_a?(Enumerable).or.raise.Ar
8d60 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 65 6e 75 6d gumentError,."value.must.be.enum
8d80 65 72 61 62 6c 65 22 0d 0a 23 20 09 20 20 65 6e 75 6d 2e 65 61 63 68 20 7b 20 7c 6f 7c 20 61 64 erable"..#....enum.each.{.|o|.ad
8da0 64 28 6f 29 20 7d 0d 0a 23 0d 0a 23 20 09 20 20 73 65 6c 66 0d 0a 23 20 09 65 6e 64 0d 0a 23 20 d(o).}..#..#....self..#..end..#.
8dc0 20 20 20 20 20 20 7d 0d 0a 23 20 20 20 20 20 65 6c 73 65 0d 0a 23 20 20 20 20 20 20 20 69 6e 73 ......}..#.....else..#.......ins
8de0 74 61 6e 63 65 5f 65 76 61 6c 20 25 7b 0d 0a 23 20 09 64 65 66 20 61 64 64 28 6f 29 0d 0a 23 20 tance_eval.%{..#..def.add(o)..#.
8e00 20 20 20 20 20 20 20 20 69 66 20 40 70 72 6f 63 2e 63 61 6c 6c 28 6f 29 0d 0a 23 20 09 20 20 20 ........if.@proc.call(o)..#.....
8e20 20 40 68 61 73 68 5b 6f 5d 20 3d 20 74 72 75 65 0d 0a 23 20 20 20 20 20 20 20 20 20 65 6e 64 0d .@hash[o].=.true..#.........end.
8e40 0a 23 20 09 20 20 73 65 6c 66 0d 0a 23 20 09 65 6e 64 0d 0a 23 20 09 61 6c 69 61 73 20 3c 3c 20 .#....self..#..end..#..alias.<<.
8e60 61 64 64 0d 0a 23 0d 0a 23 20 09 64 65 66 20 61 64 64 3f 28 6f 29 0d 0a 23 20 09 20 20 69 66 20 add..#..#..def.add?(o)..#....if.
8e80 69 6e 63 6c 75 64 65 3f 28 6f 29 20 7c 7c 20 21 40 70 72 6f 63 2e 63 61 6c 6c 28 6f 29 0d 0a 23 include?(o).||.!@proc.call(o)..#
8ea0 20 09 20 20 20 20 6e 69 6c 0d 0a 23 20 09 20 20 65 6c 73 65 0d 0a 23 20 09 20 20 20 20 40 68 61 ......nil..#....else..#......@ha
8ec0 73 68 5b 6f 5d 20 3d 20 74 72 75 65 0d 0a 23 20 09 20 20 20 20 73 65 6c 66 0d 0a 23 20 09 20 20 sh[o].=.true..#......self..#....
8ee0 65 6e 64 0d 0a 23 20 09 65 6e 64 0d 0a 23 20 20 20 20 20 20 20 7d 0d 0a 23 20 20 20 20 20 65 6e end..#..end..#.......}..#.....en
8f00 64 0d 0a 23 0d 0a 23 20 20 20 20 20 73 75 70 65 72 28 2a 61 72 67 73 29 0d 0a 23 20 20 20 65 6e d..#..#.....super(*args)..#...en
8f20 64 0d 0a 23 0d 0a 23 20 20 20 64 65 66 20 72 65 73 74 72 69 63 74 69 6f 6e 5f 70 72 6f 63 0d 0a d..#..#...def.restriction_proc..
8f40 23 20 20 20 20 20 40 70 72 6f 63 0d 0a 23 20 20 20 65 6e 64 0d 0a 23 20 65 6e 64 0d 0a 0d 0a 69 #.....@proc..#...end..#.end....i
8f60 66 20 24 30 20 3d 3d 20 5f 5f 46 49 4c 45 5f 5f 0d 0a 20 20 65 76 61 6c 20 44 41 54 41 2e 72 65 f.$0.==.__FILE__....eval.DATA.re
8f80 61 64 2c 20 6e 69 6c 2c 20 24 30 2c 20 5f 5f 4c 49 4e 45 5f 5f 2b 34 0d 0a 65 6e 64 0d 0a 0d 0a ad,.nil,.$0,.__LINE__+4..end....
8fa0 23 20 3d 20 72 77 65 62 20 2d 20 43 47 49 20 53 75 70 70 6f 72 74 20 4c 69 62 72 61 72 79 0d 0a #.=.rweb.-.CGI.Support.Library..
8fc0 23 0d 0a 23 20 41 75 74 68 6f 72 3a 3a 20 4a 6f 68 61 6e 6e 65 73 20 42 61 72 72 65 20 28 6d 61 #..#.Author::.Johannes.Barre.(ma
8fe0 69 6c 74 6f 3a 72 77 65 62 40 69 67 65 6c 73 2e 6e 65 74 29 0d 0a 23 20 43 6f 70 79 72 69 67 68 ilto:rweb@igels.net)..#.Copyrigh
9000 74 3a 3a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 30 33 2c 20 30 34 20 62 79 20 4a 6f t::.Copyright.(c).2003,.04.by.Jo
9020 68 61 6e 6e 65 73 20 42 61 72 72 65 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 3a 20 47 4e 55 20 4c 65 hannes.Barre..#.License::.GNU.Le
9040 73 73 65 72 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 28 43 4f 50 sser.General.Public.License.(COP
9060 59 49 4e 47 2c 20 68 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 63 6f 70 79 6c 65 66 YING,.http://www.gnu.org/copylef
9080 74 2f 6c 65 73 73 65 72 2e 68 74 6d 6c 29 0d 0a 23 20 56 65 72 73 69 6f 6e 3a 3a 20 30 2e 31 2e t/lesser.html)..#.Version::.0.1.
90a0 30 0d 0a 23 20 43 56 53 2d 49 44 3a 3a 20 24 49 64 3a 20 72 77 65 62 2e 72 62 20 36 20 32 30 30 0..#.CVS-ID::.$Id:.rweb.rb.6.200
90c0 34 2d 30 36 2d 31 36 20 31 35 3a 35 36 3a 32 36 5a 20 69 67 65 6c 20 24 0d 0a 23 0d 0a 23 20 3d 4-06-16.15:56:26Z.igel.$..#..#.=
90e0 3d 20 57 68 61 74 20 69 73 20 52 77 65 62 3f 0d 0a 23 20 52 77 65 62 20 69 73 20 61 20 72 65 70 =.What.is.Rweb?..#.Rweb.is.a.rep
9100 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 63 67 69 20 63 6c 61 73 73 20 69 6e 63 6c 75 lacement.for.the.cgi.class.inclu
9120 64 65 64 20 69 6e 20 74 68 65 20 72 75 62 79 20 64 69 73 74 72 69 62 75 74 69 6f 6e 2e 0d 0a 23 ded.in.the.ruby.distribution...#
9140 0d 0a 23 20 3d 3d 20 48 6f 77 20 74 6f 20 75 73 65 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 42 61 73 69 ..#.==.How.to.use..#..#.===.Basi
9160 63 73 0d 0a 23 0d 0a 23 20 54 68 69 73 20 63 6c 61 73 73 20 69 73 20 6d 61 64 65 20 74 6f 20 62 cs..#..#.This.class.is.made.to.b
9180 65 20 61 73 20 65 61 73 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 75 73 65 2e 20 41 6e e.as.easy.as.possible.to.use..An
91a0 20 65 78 61 6d 70 6c 65 3a 0d 0a 23 0d 0a 23 20 09 72 65 71 75 69 72 65 20 22 72 77 65 62 22 0d .example:..#..#..require."rweb".
91c0 0a 23 0d 0a 23 20 09 77 65 62 20 3d 20 52 77 65 62 2e 6e 65 77 0d 0a 23 20 09 77 65 62 2e 6f 75 .#..#..web.=.Rweb.new..#..web.ou
91e0 74 20 64 6f 0d 0a 23 20 09 09 77 65 62 2e 70 75 74 73 20 22 48 65 6c 6c 6f 20 77 6f 72 6c 64 21 t.do..#...web.puts."Hello.world!
9200 22 0d 0a 23 20 09 65 6e 64 0d 0a 23 0d 0a 23 20 54 68 65 20 76 69 73 69 74 6f 72 20 77 69 6c 6c "..#..end..#..#.The.visitor.will
9220 20 67 65 74 20 61 20 73 69 6d 70 6c 65 20 22 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 22 20 69 6e 20 .get.a.simple."Hello.World!".in.
9240 68 69 73 20 62 72 6f 77 73 65 72 2e 20 50 6c 65 61 73 65 20 6e 6f 74 69 63 65 2c 0d 0a 23 20 74 his.browser..Please.notice,..#.t
9260 68 61 74 20 77 6f 6e 27 74 20 73 65 74 20 68 74 6d 6c 2d 74 61 67 73 20 66 6f 72 20 79 6f 75 2c hat.won't.set.html-tags.for.you,
9280 20 73 6f 20 79 6f 75 20 73 68 6f 75 6c 64 20 62 65 74 74 65 72 20 64 6f 20 73 6f 6d 65 74 68 69 .so.you.should.better.do.somethi
92a0 6e 67 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 23 0d 0a 23 20 09 72 65 71 75 69 72 65 20 22 72 77 ng.like.this:..#..#..require."rw
92c0 65 62 22 0d 0a 23 0d 0a 23 20 09 77 65 62 20 3d 20 52 77 65 62 2e 6e 65 77 0d 0a 23 20 09 77 65 eb"..#..#..web.=.Rweb.new..#..we
92e0 62 2e 6f 75 74 20 64 6f 0d 0a 23 20 09 09 77 65 62 2e 70 75 74 73 20 22 3c 68 74 6d 6c 3e 3c 62 b.out.do..#...web.puts."<html><b
9300 6f 64 79 3e 48 65 6c 6c 6f 20 77 6f 72 6c 64 21 3c 2f 62 6f 64 79 3e 3c 2f 68 74 6d 6c 3e 22 0d ody>Hello.world!</body></html>".
9320 0a 23 20 09 65 6e 64 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 53 65 74 20 68 65 61 64 65 72 73 0d 0a 23 .#..end..#..#.===.Set.headers..#
9340 20 4f 66 20 63 6f 75 72 73 65 2c 20 69 74 27 73 20 61 6c 73 6f 20 70 6f 73 73 69 62 6c 65 20 74 .Of.course,.it's.also.possible.t
9360 6f 20 74 65 6c 6c 20 74 68 65 20 62 72 6f 77 73 65 72 2c 20 74 68 61 74 20 74 68 65 20 63 6f 6e o.tell.the.browser,.that.the.con
9380 74 65 6e 74 20 6f 66 20 74 68 69 73 0d 0a 23 20 70 61 67 65 20 69 73 20 70 6c 61 69 6e 20 74 65 tent.of.this..#.page.is.plain.te
93a0 78 74 20 69 6e 73 74 65 61 64 20 6f 66 20 68 74 6d 6c 20 63 6f 64 65 3a 0d 0a 23 0d 0a 23 20 09 xt.instead.of.html.code:..#..#..
93c0 72 65 71 75 69 72 65 20 22 72 77 65 62 22 0d 0a 23 0d 0a 23 20 09 77 65 62 20 3d 20 52 77 65 62 require."rweb"..#..#..web.=.Rweb
93e0 2e 6e 65 77 0d 0a 23 20 09 77 65 62 2e 6f 75 74 20 64 6f 0d 0a 23 20 09 09 77 65 62 2e 68 65 61 .new..#..web.out.do..#...web.hea
9400 64 65 72 28 22 63 6f 6e 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74 2f 70 6c 61 69 6e 22 29 0d der("content-type:.text/plain").
9420 0a 23 20 09 09 77 65 62 2e 70 75 74 73 20 22 48 65 6c 6c 6f 20 70 6c 61 69 6e 20 77 6f 72 6c 64 .#...web.puts."Hello.plain.world
9440 21 22 0d 0a 23 20 09 65 6e 64 0d 0a 23 0d 0a 23 20 50 6c 65 61 73 65 20 72 65 6d 65 6d 62 65 72 !"..#..end..#..#.Please.remember
9460 2c 20 68 65 61 64 65 72 73 20 63 61 6e 27 74 20 62 65 20 73 65 74 20 61 66 74 65 72 20 74 68 65 ,.headers.can't.be.set.after.the
9480 20 70 61 67 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 62 65 65 6e 20 73 65 6e 64 2e 0d 0a 23 20 .page.content.has.been.send...#.
94a0 59 6f 75 20 68 61 76 65 20 74 6f 20 73 65 74 20 61 6c 6c 20 6e 65 73 73 65 73 73 61 72 79 20 68 You.have.to.set.all.nessessary.h
94c0 65 61 64 65 72 73 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 70 75 74 73 20 6f 64 65 eaders.before.the.first.puts.ode
94e0 72 20 70 72 69 6e 74 2e 20 49 74 27 73 0d 0a 23 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 61 63 r.print..It's..#.possible.to.cac
9500 68 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 75 6e 74 69 6c 20 65 76 65 72 79 74 68 69 6e 67 20 he.the.content.until.everything.
9520 69 73 20 63 6f 6d 70 6c 65 74 65 2e 20 44 6f 69 6e 67 20 69 74 20 74 68 69 73 0d 0a 23 20 77 61 is.complete..Doing.it.this..#.wa
9540 79 2c 20 79 6f 75 20 63 61 6e 20 73 65 74 20 68 65 61 64 65 72 73 20 65 76 65 72 79 77 68 65 72 y,.you.can.set.headers.everywher
9560 65 2e 0d 0a 23 0d 0a 23 20 49 66 20 79 6f 75 20 73 65 74 20 61 20 68 65 61 64 65 72 20 74 77 69 e...#..#.If.you.set.a.header.twi
9580 63 65 2c 20 74 68 65 20 73 65 63 6f 6e 64 20 68 65 61 64 65 72 20 77 69 6c 6c 20 72 65 70 6c 61 ce,.the.second.header.will.repla
95a0 63 65 20 74 68 65 20 66 69 72 73 74 20 6f 6e 65 2e 20 54 68 65 0d 0a 23 20 68 65 61 64 65 72 20 ce.the.first.one..The..#.header.
95c0 6e 61 6d 65 20 69 73 20 6e 6f 74 20 63 61 73 65 73 65 6e 73 69 74 69 76 65 2c 20 69 74 20 77 69 name.is.not.casesensitive,.it.wi
95e0 6c 6c 20 61 6c 6c 77 61 79 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 20 74 6f 20 74 68 65 0d 0a ll.allways.converted.in.to.the..
9600 23 20 63 61 70 69 74 61 6c 69 73 65 64 20 66 6f 72 6d 20 73 75 67 67 65 73 74 65 64 20 62 79 20 #.capitalised.form.suggested.by.
9620 74 68 65 20 77 33 63 20 28 68 74 74 70 3a 2f 2f 77 33 2e 6f 72 67 29 0d 0a 23 0d 0a 23 20 3d 3d the.w3c.(http://w3.org)..#..#.==
9640 3d 20 53 65 74 20 63 6f 6f 6b 69 65 73 0d 0a 23 20 53 65 74 74 69 6e 67 20 63 6f 6f 6b 69 65 73 =.Set.cookies..#.Setting.cookies
9660 20 69 73 20 71 75 69 74 65 20 65 61 73 79 3a 0d 0a 23 20 09 69 6e 63 6c 75 64 65 20 27 72 77 65 .is.quite.easy:..#..include.'rwe
9680 62 27 0d 0a 23 0d 0a 23 20 09 77 65 62 20 3d 20 52 77 65 62 2e 6e 65 77 0d 0a 23 20 09 43 6f 6f b'..#..#..web.=.Rweb.new..#..Coo
96a0 6b 69 65 2e 6e 65 77 28 22 56 69 73 69 74 73 22 2c 20 77 65 62 2e 63 6f 6f 6b 69 65 73 5b 27 76 kie.new("Visits",.web.cookies['v
96c0 69 73 69 74 73 27 5d 2e 74 6f 5f 69 20 2b 31 29 0d 0a 23 20 09 77 65 62 2e 6f 75 74 20 64 6f 0d isits'].to_i.+1)..#..web.out.do.
96e0 0a 23 20 09 09 77 65 62 2e 70 75 74 73 20 22 57 65 6c 63 6f 6d 65 20 62 61 63 6b 21 20 59 6f 75 .#...web.puts."Welcome.back!.You
9700 20 76 69 73 69 74 65 64 20 74 68 69 73 20 70 61 67 65 20 23 7b 77 65 62 2e 63 6f 6f 6b 69 65 73 .visited.this.page.#{web.cookies
9720 5b 27 76 69 73 69 74 73 27 5d 2e 74 6f 5f 69 20 2b 31 7d 20 74 69 6d 65 73 22 0d 0a 23 20 09 65 ['visits'].to_i.+1}.times"..#..e
9740 6e 64 0d 0a 23 0d 0a 23 20 53 65 65 20 74 68 65 20 63 6c 61 73 73 20 43 6f 6f 6b 69 65 20 66 6f nd..#..#.See.the.class.Cookie.fo
9760 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 47 65 74 20 66 6f r.more.details...#..#.===.Get.fo
9780 72 6d 20 61 6e 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 73 0d 0a 23 20 54 68 65 72 65 20 61 72 rm.and.cookie.values..#.There.ar
97a0 65 20 66 6f 75 72 20 77 61 79 73 20 74 6f 20 73 75 62 6d 69 74 20 64 61 74 61 20 66 72 6f 6d 20 e.four.ways.to.submit.data.from.
97c0 74 68 65 20 62 72 6f 77 73 65 72 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 20 61 6e 64 20 79 6f the.browser.to.the.server.and.yo
97e0 75 72 0d 0a 23 20 72 75 62 79 20 73 63 72 69 70 74 3a 20 76 69 61 20 47 45 54 2c 20 50 4f 53 54 ur..#.ruby.script:.via.GET,.POST
9800 2c 20 63 6f 6f 6b 69 65 73 20 61 6e 64 20 66 69 6c 65 20 75 70 6c 6f 61 64 2e 20 52 77 65 62 20 ,.cookies.and.file.upload..Rweb.
9820 64 6f 65 73 6e 27 74 20 73 75 70 70 6f 72 74 0d 0a 23 20 66 69 6c 65 20 75 70 6c 6f 61 64 20 62 doesn't.support..#.file.upload.b
9840 79 20 6e 6f 77 2e 0d 0a 23 0d 0a 23 20 09 69 6e 63 6c 75 64 65 20 27 72 77 65 62 27 0d 0a 23 0d y.now...#..#..include.'rweb'..#.
9860 0a 23 20 09 77 65 62 20 3d 20 52 77 65 62 2e 6e 65 77 0d 0a 23 20 09 77 65 62 2e 6f 75 74 20 64 .#..web.=.Rweb.new..#..web.out.d
9880 6f 0d 0a 23 20 09 09 77 65 62 2e 70 72 69 6e 74 20 22 61 63 74 69 6f 6e 3a 20 23 7b 77 65 62 2e o..#...web.print."action:.#{web.
98a0 67 65 74 5b 27 61 63 74 69 6f 6e 27 5d 7d 20 22 0d 0a 23 20 09 09 77 65 62 2e 70 75 74 73 20 22 get['action']}."..#...web.puts."
98c0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6f 6b 69 65 20 27 76 69 73 69 74 73 27 The.value.of.the.cookie.'visits'
98e0 20 69 73 20 23 7b 77 65 62 2e 63 6f 6f 6b 69 65 73 5b 27 76 69 73 69 74 73 27 5d 7d 22 0d 0a 23 .is.#{web.cookies['visits']}"..#
9900 20 09 09 77 65 62 2e 70 75 74 73 20 22 54 68 65 20 70 6f 73 74 20 70 61 72 61 6d 65 74 65 72 20 ...web.puts."The.post.parameter.
9920 27 74 65 73 74 5b 27 78 27 5d 27 20 69 73 20 23 7b 77 65 62 2e 70 6f 73 74 5b 27 74 65 73 74 27 'test['x']'.is.#{web.post['test'
9940 5d 5b 27 78 27 5d 7d 22 0d 0a 23 20 09 65 6e 64 0d 0a 0d 0a 52 57 45 42 5f 56 45 52 53 49 4f 4e ]['x']}"..#..end....RWEB_VERSION
9960 20 3d 20 22 30 2e 31 2e 30 22 0d 0a 52 57 45 42 20 3d 20 22 72 77 65 62 2f 23 7b 52 57 45 42 5f .=."0.1.0"..RWEB.=."rweb/#{RWEB_
9980 56 45 52 53 49 4f 4e 7d 22 0d 0a 0d 0a 23 72 65 71 75 69 72 65 20 27 72 77 65 62 63 6f 6f 6b 69 VERSION}"....#require.'rwebcooki
99a0 65 27 20 2d 3e 20 65 64 69 74 20 62 79 20 62 75 6e 6e 79 20 3a 2d 29 0d 0a 0d 0a 63 6c 61 73 73 e'.->.edit.by.bunny.:-)....class
99c0 20 52 77 65 62 0d 0a 20 20 20 20 23 20 41 6c 6c 20 70 61 72 61 6d 65 74 65 72 20 73 75 62 6d 69 .Rweb......#.All.parameter.submi
99e0 74 74 65 64 20 76 69 61 20 74 68 65 20 47 45 54 20 6d 65 74 68 6f 64 20 61 72 65 20 61 76 61 69 tted.via.the.GET.method.are.avai
9a00 6c 61 62 6c 65 20 69 6e 20 61 74 74 72 69 62 75 74 65 0d 0a 09 09 23 20 67 65 74 2e 20 54 68 69 lable.in.attribute....#.get..Thi
9a20 73 20 69 73 20 48 61 73 68 2c 20 77 68 65 72 65 20 65 76 65 72 79 20 70 61 72 61 6d 65 74 65 72 s.is.Hash,.where.every.parameter
9a40 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 61 20 6b 65 79 2d 76 61 6c 75 65 0d 0a 09 09 .is.available.as.a.key-value....
9a60 23 20 70 61 69 72 2e 0d 0a 09 09 23 0d 0a 09 09 23 20 49 66 20 79 6f 75 72 20 69 6e 70 75 74 20 #.pair.....#....#.If.your.input.
9a80 74 61 67 20 68 61 73 20 61 20 6e 61 6d 65 20 6c 69 6b 65 20 74 68 69 73 20 6f 6e 65 2c 20 69 74 tag.has.a.name.like.this.one,.it
9aa0 27 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 61 76 61 69 6c 61 62 6c 65 0d 0a 09 09 23 20 's.value.will.be.available....#.
9ac0 61 73 20 77 65 62 2e 67 65 74 5b 22 66 69 65 6c 64 6e 61 6d 65 22 5d 0d 0a 09 09 23 20 20 3c 69 as.web.get["fieldname"]....#..<i
9ae0 6e 70 75 74 20 6e 61 6d 65 3d 22 66 69 65 6c 64 6e 61 6d 65 22 3e 0d 0a 09 09 23 20 59 6f 75 20 nput.name="fieldname">....#.You.
9b00 63 61 6e 20 73 75 62 6d 69 74 20 76 61 6c 75 65 73 20 61 73 20 61 20 48 61 73 68 0d 0a 09 09 23 can.submit.values.as.a.Hash....#
9b20 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 74 65 78 74 5b 27 69 6e 64 65 78 27 5d 22 3e 0d 0a ..<input.name="text['index']">..
9b40 09 09 23 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 74 65 78 74 5b 27 69 6e 64 65 78 32 27 5d ..#..<input.name="text['index2']
9b60 22 3e 0d 0a 09 09 23 20 77 69 6c 6c 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 0d 0a 09 09 ">....#.will.be.available.as....
9b80 23 20 20 77 65 62 2e 67 65 74 5b 22 74 65 78 74 22 5d 5b 22 69 6e 64 65 78 22 5d 0d 0a 09 09 23 #..web.get["text"]["index"]....#
9ba0 20 20 77 65 62 2e 67 65 74 5b 22 74 65 78 74 22 5d 5b 22 69 6e 64 65 78 32 22 5d 0d 0a 09 09 23 ..web.get["text"]["index2"]....#
9bc0 20 49 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c 73 6f 20 70 6f 73 73 69 62 6c 65 0d 0a 09 09 23 .Integers.are.also.possible....#
9be0 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 69 6e 74 5b 32 5d 22 3e 0d 0a 09 09 23 20 20 3c 69 ..<input.name="int[2]">....#..<i
9c00 6e 70 75 74 20 6e 61 6d 65 3d 22 69 6e 74 5b 33 5d 5b 27 68 69 27 5d 3e 0d 0a 09 09 23 20 77 69 nput.name="int[3]['hi']>....#.wi
9c20 6c 6c 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 0d 0a 09 09 23 20 20 77 65 62 2e 67 65 74 ll.be.available.as....#..web.get
9c40 5b 22 69 6e 74 22 5d 5b 32 5d 0d 0a 09 09 23 20 20 77 65 62 2e 67 65 74 5b 22 69 6e 74 22 5d 5b ["int"][2]....#..web.get["int"][
9c60 33 5d 5b 22 68 69 22 5d 0d 0a 09 09 23 20 49 66 20 79 6f 75 20 73 70 65 63 69 66 79 20 6e 6f 20 3]["hi"]....#.If.you.specify.no.
9c80 69 6e 64 65 78 2c 20 74 68 65 20 6c 6f 77 65 73 74 20 75 6e 75 73 65 64 20 69 6e 64 65 78 20 77 index,.the.lowest.unused.index.w
9ca0 69 6c 6c 20 62 65 20 75 73 65 64 3a 0d 0a 09 09 23 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 ill.be.used:....#..<input.name="
9cc0 69 6e 74 5b 5d 22 3e 3c 21 2d 2d 20 46 69 72 73 74 20 46 69 65 6c 64 20 2d 2d 3e 0d 0a 09 09 23 int[]"><!--.First.Field.-->....#
9ce0 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 69 6e 74 5b 5d 22 3e 3c 21 2d 2d 20 53 65 63 6f 6e ..<input.name="int[]"><!--.Secon
9d00 64 20 6f 6e 65 20 2d 2d 3e 0d 0a 09 09 23 20 77 69 6c 6c 20 62 65 20 61 76 61 69 6c 61 62 6c 65 d.one.-->....#.will.be.available
9d20 20 61 73 0d 0a 09 09 23 20 20 77 65 62 2e 67 65 74 5b 22 69 6e 74 22 5d 5b 30 5d 20 23 20 46 69 .as....#..web.get["int"][0].#.Fi
9d40 72 73 74 20 46 69 65 6c 64 0d 0a 09 09 23 20 20 77 65 62 2e 67 65 74 5b 22 69 6e 74 22 5d 5b 31 rst.Field....#..web.get["int"][1
9d60 5d 20 23 20 53 65 63 6f 6e 64 20 6f 6e 65 0d 0a 09 09 23 20 50 6c 65 61 73 65 20 6e 6f 74 69 63 ].#.Second.one....#.Please.notic
9d80 65 2c 20 74 68 69 73 20 64 6f 65 73 6e 27 64 20 77 6f 72 6b 20 6c 69 6b 65 20 79 6f 75 20 6d 69 e,.this.doesn'd.work.like.you.mi
9da0 67 68 74 20 65 78 70 65 63 74 3a 0d 0a 09 09 23 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 74 ght.expect:....#..<input.name="t
9dc0 65 78 74 5b 69 6e 64 65 78 5d 22 3e 0d 0a 09 09 23 20 49 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 ext[index]">....#.It.will.not.be
9de0 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 77 65 62 2e 67 65 74 5b 22 74 65 78 74 22 5d 5b 22 69 .available.as.web.get["text"]["i
9e00 6e 64 65 78 22 5d 20 62 75 74 0d 0a 09 09 23 20 20 77 65 62 2e 67 65 74 5b 22 74 65 78 74 5b 69 ndex"].but....#..web.get["text[i
9e20 6e 64 65 78 5d 22 5d 0d 0a 20 20 20 20 61 74 74 72 5f 72 65 61 64 65 72 20 3a 67 65 74 0d 0a 0d ndex]"]......attr_reader.:get...
9e40 0a 20 20 20 20 23 20 41 6c 6c 20 70 61 72 61 6d 65 74 65 72 73 20 73 75 62 6d 69 74 74 65 64 20 .....#.All.parameters.submitted.
9e60 76 69 61 20 50 4f 53 54 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 61 74 via.POST.are.available.in.the.at
9e80 74 72 69 62 75 74 65 20 70 6f 73 74 2e 20 49 74 0d 0a 09 09 23 20 77 6f 72 6b 73 20 6c 69 6b 65 tribute.post..It....#.works.like
9ea0 20 74 68 65 20 67 65 74 20 61 74 74 72 69 62 75 74 65 2e 0d 0a 09 09 23 20 20 3c 69 6e 70 75 74 .the.get.attribute.....#..<input
9ec0 20 6e 61 6d 65 3d 22 74 65 78 74 5b 30 5d 22 3e 0d 0a 09 09 23 20 77 69 6c 6c 20 62 65 20 61 76 .name="text[0]">....#.will.be.av
9ee0 61 69 6c 61 62 6c 65 20 61 73 0d 0a 09 09 23 20 20 77 65 62 2e 70 6f 73 74 5b 22 74 65 78 74 22 ailable.as....#..web.post["text"
9f00 5d 5b 30 5d 0d 0a 09 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 70 6f 73 74 0d 0a 0d 0a 20 20 20 ][0]....attr_reader.:post.......
9f20 20 23 20 41 6c 6c 20 63 6f 6f 6b 69 65 73 20 73 75 62 6d 69 74 74 65 64 20 62 79 20 74 68 65 20 .#.All.cookies.submitted.by.the.
9f40 62 72 6f 77 73 65 72 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 63 6f 6f 6b 69 65 73 browser.are.available.in.cookies
9f60 2e 20 54 68 69 73 20 69 73 20 61 0d 0a 09 09 23 20 48 61 73 68 2c 20 77 68 65 72 65 20 65 76 65 ..This.is.a....#.Hash,.where.eve
9f80 72 79 20 63 6f 6f 6b 69 65 20 69 73 20 61 20 6b 65 79 2d 76 61 6c 75 65 20 70 61 69 72 2e 0d 0a ry.cookie.is.a.key-value.pair...
9fa0 09 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 63 6f 6f 6b 69 65 73 0d 0a 0d 0a 20 20 20 20 23 20 ..attr_reader.:cookies........#.
9fc0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 72 6f 77 73 65 72 20 69 64 65 6e 74 69 66 69 The.name.of.the.browser.identifi
9fe0 63 61 74 69 6f 6e 20 69 73 20 73 75 62 6d 69 74 74 65 64 20 61 73 20 55 53 45 52 5f 41 47 45 4e cation.is.submitted.as.USER_AGEN
a000 54 20 61 6e 64 0d 0a 09 09 23 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20 61 74 74 T.and....#.available.in.this.att
a020 72 69 62 75 74 65 2e 0d 0a 09 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 75 73 65 72 5f 61 67 65 ribute.....attr_reader.:user_age
a040 6e 74 0d 0a 0d 0a 20 20 20 20 23 20 54 68 65 20 49 50 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 nt........#.The.IP.address.of.th
a060 65 20 63 6c 69 65 6e 74 2e 0d 0a 09 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 72 65 6d 6f 74 65 e.client.....attr_reader.:remote
a080 5f 61 64 64 72 0d 0a 0d 0a 20 20 20 20 23 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 52 77 65 _addr........#.Creates.a.new.Rwe
a0a0 62 20 6f 62 6a 65 63 74 2e 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 64 6f 6e 65 20 b.object..This.should.only.done.
a0c0 6f 6e 63 65 2e 20 59 6f 75 20 63 61 6e 20 73 65 74 20 76 61 72 69 6f 75 73 0d 0a 20 20 20 20 23 once..You.can.set.various......#
a0e0 20 6f 70 74 69 6f 6e 73 20 76 69 61 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 68 61 73 68 2e 0d .options.via.the.settings.hash..
a100 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 22 63 61 63 68 65 22 20 3d 3e 20 74 72 75 65 3a 20 45 .....#......#."cache".=>.true:.E
a120 76 65 72 79 74 68 69 6e 67 20 79 6f 75 20 73 63 72 69 70 74 20 73 65 6e 64 20 74 6f 20 74 68 65 verything.you.script.send.to.the
a140 20 63 6c 69 65 6e 74 20 77 69 6c 6c 20 62 65 20 63 61 63 68 65 64 0d 0a 20 20 20 20 23 20 75 6e .client.will.be.cached......#.un
a160 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6f 75 74 20 62 6c 6f 63 6b 20 6f 72 20 til.the.end.of.the.out.block.or.
a180 75 6e 74 69 6c 20 66 6c 75 73 68 20 69 73 20 63 61 6c 6c 65 64 2e 20 54 68 69 73 20 77 61 79 2c until.flush.is.called..This.way,
a1a0 20 79 6f 75 0d 0a 20 20 20 20 23 20 63 61 6e 20 6d 6f 64 69 66 79 20 68 65 61 64 65 72 73 20 61 .you......#.can.modify.headers.a
a1c0 6e 64 20 63 6f 6f 6b 69 65 73 20 65 76 65 6e 20 61 66 74 65 72 20 70 72 69 6e 74 69 6e 67 20 73 nd.cookies.even.after.printing.s
a1e0 6f 6d 65 74 68 69 6e 67 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 2e 0d 0a 20 20 20 20 23 0d 0a omething.to.the.client.......#..
a200 20 20 20 20 23 20 22 73 61 66 65 22 20 3d 3e 20 6c 65 76 65 6c 3a 20 43 68 61 6e 67 65 73 20 74 ....#."safe".=>.level:.Changes.t
a220 68 65 20 24 53 41 46 45 20 61 74 74 72 69 62 75 74 65 2e 20 42 79 20 64 65 66 61 75 6c 74 2c 20 he.$SAFE.attribute..By.default,.
a240 24 53 41 46 45 20 77 69 6c 6c 20 62 65 20 73 65 74 0d 0a 20 20 20 20 23 20 74 6f 20 31 2e 20 49 $SAFE.will.be.set......#.to.1..I
a260 66 20 24 53 41 46 45 20 69 73 20 61 6c 72 65 61 64 79 20 68 69 67 68 65 72 20 74 68 61 6e 20 74 f.$SAFE.is.already.higher.than.t
a280 68 69 73 20 76 61 6c 75 65 2c 20 69 74 20 77 6f 6e 27 74 20 62 65 20 63 68 61 6e 67 65 64 2e 0d his.value,.it.won't.be.changed..
a2a0 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 22 73 69 6c 65 6e 64 22 20 3d 3e 20 74 72 75 65 3a 20 .....#......#."silend".=>.true:.
a2c0 4e 6f 72 6d 61 6c 79 2c 20 52 77 65 62 20 61 64 64 73 20 61 75 74 6f 6d 61 74 69 63 6c 79 20 61 Normaly,.Rweb.adds.automaticly.a
a2e0 20 68 65 61 64 65 72 20 6c 69 6b 65 20 74 68 69 73 0d 0a 20 20 20 20 23 20 22 58 2d 50 6f 77 65 .header.like.this......#."X-Powe
a300 72 65 64 2d 42 79 3a 20 52 77 65 62 2f 78 2e 78 2e 78 20 28 52 75 62 79 2f 79 2e 79 2e 79 29 22 red-By:.Rweb/x.x.x.(Ruby/y.y.y)"
a320 2e 20 57 69 74 68 20 74 68 65 20 73 69 6c 65 6e 64 20 6f 70 74 69 6f 6e 20 79 6f 75 20 63 61 6e ..With.the.silend.option.you.can
a340 0d 0a 20 20 20 20 23 20 73 75 70 70 72 65 73 73 20 74 68 69 73 2e 0d 0a 20 20 20 20 64 65 66 20 ......#.suppress.this.......def.
a360 69 6e 69 74 69 61 6c 69 7a 65 20 28 73 65 74 74 69 6e 67 73 20 3d 20 7b 7d 29 0d 0a 20 20 20 20 initialize.(settings.=.{})......
a380 20 20 20 20 23 20 7b 7b 7b 0d 0a 20 20 20 20 20 20 20 20 40 68 65 61 64 65 72 20 3d 20 7b 7d 0d ....#.{{{..........@header.=.{}.
a3a0 0a 20 20 20 20 20 20 20 20 40 63 6f 6f 6b 69 65 73 20 3d 20 7b 7d 0d 0a 20 20 20 20 20 20 20 20 .........@cookies.=.{}..........
a3c0 40 67 65 74 20 3d 20 7b 7d 0d 0a 20 20 20 20 20 20 20 20 40 70 6f 73 74 20 3d 20 7b 7d 0d 0a 0d @get.=.{}..........@post.=.{}...
a3e0 0a 20 20 20 20 20 20 20 20 23 20 49 6e 74 65 72 6e 61 6c 20 61 74 74 72 69 62 75 74 65 73 0d 0a .........#.Internal.attributes..
a400 20 20 20 20 20 20 20 20 40 73 74 61 74 75 73 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 40 ........@status.=.nil..........@
a420 72 65 61 73 6f 6e 50 68 72 61 73 65 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 40 73 65 74 reasonPhrase.=.nil..........@set
a440 63 6f 6f 6b 69 65 73 20 3d 20 5b 5d 0d 0a 20 20 20 20 20 20 20 20 40 6f 75 74 70 75 74 5f 73 74 cookies.=.[]..........@output_st
a460 61 72 74 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 40 6f 75 74 70 75 74 5f arted.=.false;..........@output_
a480 61 6c 6c 6f 77 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 40 6d 6f 64 allowed.=.false;............@mod
a4a0 5f 72 75 62 79 20 3d 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 40 65 6e 76 20 3d 20 45 4e _ruby.=.false..........@env.=.EN
a4c0 56 2e 74 6f 5f 68 61 73 68 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 64 65 66 69 6e 65 64 3f V.to_hash............if.defined?
a4e0 28 4d 4f 44 5f 52 55 42 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 6f 75 74 70 75 74 5f (MOD_RUBY)..............@output_
a500 6d 65 74 68 6f 64 20 3d 20 22 6d 6f 64 5f 72 75 62 79 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 method.=."mod_ruby".............
a520 20 40 6d 6f 64 5f 72 75 62 79 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 .@mod_ruby.=.true..........elsif
a540 20 40 65 6e 76 5b 27 53 45 52 56 45 52 5f 53 4f 46 54 57 41 52 45 27 5d 20 3d 7e 20 2f 5e 4d 69 .@env['SERVER_SOFTWARE'].=~./^Mi
a560 63 72 6f 73 6f 66 74 2d 49 49 53 2f 69 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 6f 75 74 70 crosoft-IIS/i..............@outp
a580 75 74 5f 6d 65 74 68 6f 64 20 3d 20 22 6e 70 68 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d ut_method.=."nph"..........else.
a5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 6f 75 74 70 75 74 5f 6d 65 74 68 6f 64 20 3d 20 22 70 .............@output_method.=."p
a5c0 68 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 6c 65 73 h"..........end............unles
a5e0 73 20 73 65 74 74 69 6e 67 73 2e 69 73 5f 61 3f 28 48 61 73 68 29 0d 0a 20 20 20 20 20 20 20 20 s.settings.is_a?(Hash)..........
a600 20 20 20 20 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 73 65 74 74 69 6e 67 73 20 6d ....raise.TypeError,."settings.m
a620 75 73 74 20 62 65 20 61 20 48 61 73 68 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 ust.be.a.Hash"..........end.....
a640 20 20 20 20 20 40 73 65 74 74 69 6e 67 73 20 3d 20 73 65 74 74 69 6e 67 73 0d 0a 0d 0a 20 20 20 .....@settings.=.settings.......
a660 20 20 20 20 20 75 6e 6c 65 73 73 20 40 73 65 74 74 69 6e 67 73 2e 68 61 73 5f 6b 65 79 3f 28 22 .....unless.@settings.has_key?("
a680 73 61 66 65 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 73 65 74 74 69 6e 67 73 5b 22 73 safe")..............@settings["s
a6a0 61 66 65 22 5d 20 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 afe"].=.1..........end..........
a6c0 20 20 69 66 20 24 53 41 46 45 20 3c 20 40 73 65 74 74 69 6e 67 73 5b 22 73 61 66 65 22 5d 0d 0a ..if.$SAFE.<.@settings["safe"]..
a6e0 20 20 20 20 20 20 20 20 20 20 20 20 24 53 41 46 45 20 3d 20 40 73 65 74 74 69 6e 67 73 5b 22 73 ............$SAFE.=.@settings["s
a700 61 66 65 22 5d 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e afe"]..........end............un
a720 6c 65 73 73 20 40 73 65 74 74 69 6e 67 73 2e 68 61 73 5f 6b 65 79 3f 28 22 63 61 63 68 65 22 29 less.@settings.has_key?("cache")
a740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 73 65 74 74 69 6e 67 73 5b 22 63 61 63 68 65 22 5d ..............@settings["cache"]
a760 20 3d 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 .=.false..........end...........
a780 20 23 20 6d 6f 64 5f 72 75 62 79 20 73 65 74 73 20 6e 6f 20 51 55 45 52 59 5f 53 54 52 49 4e 47 .#.mod_ruby.sets.no.QUERY_STRING
a7a0 20 76 61 72 69 61 62 6c 65 2c 20 69 66 20 6e 6f 20 47 45 54 2d 50 61 72 61 6d 65 74 65 72 73 20 .variable,.if.no.GET-Parameters.
a7c0 61 72 65 20 67 69 76 65 6e 0d 0a 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 65 6e 76 2e 68 are.given..........unless.@env.h
a7e0 61 73 5f 6b 65 79 3f 28 22 51 55 45 52 59 5f 53 54 52 49 4e 47 22 29 0d 0a 20 20 20 20 20 20 20 as_key?("QUERY_STRING").........
a800 20 20 20 20 20 40 65 6e 76 5b 22 51 55 45 52 59 5f 53 54 52 49 4e 47 22 5d 20 3d 20 22 22 0d 0a .....@env["QUERY_STRING"].=.""..
a820 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 6f 77 20 77 65 20 ........end............#.Now.we.
a840 73 70 6c 69 74 20 74 68 65 20 51 55 45 52 59 5f 53 54 52 49 4e 47 20 62 79 20 74 68 65 20 73 65 split.the.QUERY_STRING.by.the.se
a860 70 65 72 61 74 6f 72 73 20 26 20 61 6e 64 20 3b 20 6f 72 2c 20 69 66 0d 0a 20 20 20 20 20 20 20 perators.&.and.;.or,.if.........
a880 20 23 20 73 70 65 63 69 66 69 65 64 2c 20 73 65 74 74 69 6e 67 73 5b 27 67 65 74 20 73 65 70 65 .#.specified,.settings['get.sepe
a8a0 72 61 74 6f 72 27 5d 0d 0a 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 73 65 74 74 69 6e 67 rator']..........unless.@setting
a8c0 73 2e 68 61 73 5f 6b 65 79 3f 28 22 67 65 74 20 73 65 70 65 72 61 74 6f 72 22 29 0d 0a 20 20 20 s.has_key?("get.seperator").....
a8e0 20 20 20 20 20 20 20 20 20 67 65 74 5f 61 72 67 73 20 3d 20 40 65 6e 76 5b 27 51 55 45 52 59 5f .........get_args.=.@env['QUERY_
a900 53 54 52 49 4e 47 27 5d 2e 73 70 6c 69 74 28 2f 5b 26 3b 5d 2f 29 0d 0a 20 20 20 20 20 20 20 20 STRING'].split(/[&;]/)..........
a920 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 5f 61 72 67 73 20 3d 20 40 65 6e else..............get_args.=.@en
a940 76 5b 27 51 55 45 52 59 5f 53 54 52 49 4e 47 27 5d 2e 73 70 6c 69 74 28 40 73 65 74 74 69 6e 67 v['QUERY_STRING'].split(@setting
a960 73 5b 27 67 65 74 20 73 65 70 65 72 61 74 6f 72 27 5d 29 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 s['get.seperator'])..........end
a980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 67 65 74 5f 61 72 67 73 2e 65 61 63 68 20 64 6f 20 7c 20 61 ............get_args.each.do.|.a
a9a0 72 67 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 5f 6b 65 79 2c 20 61 72 67 5f 76 rg.|..............arg_key,.arg_v
a9c0 61 6c 20 3d 20 61 72 67 2e 73 70 6c 69 74 28 2f 3d 2f 2c 20 32 29 0d 0a 20 20 20 20 20 20 20 20 al.=.arg.split(/=/,.2)..........
a9e0 20 20 20 20 61 72 67 5f 6b 65 79 20 3d 20 52 77 65 62 3a 3a 75 6e 65 73 63 61 70 65 28 61 72 67 ....arg_key.=.Rweb::unescape(arg
aa00 5f 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 5f 76 61 6c 20 3d 20 52 77 65 _key)..............arg_val.=.Rwe
aa20 62 3a 3a 75 6e 65 73 63 61 70 65 28 61 72 67 5f 76 61 6c 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 b::unescape(arg_val)............
aa40 20 20 20 20 23 20 50 61 72 73 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20 6e 61 6d 65 5b 30 5d 2c 20 ....#.Parse.names.like.name[0],.
aa60 6e 61 6d 65 5b 27 74 65 78 74 27 5d 20 6f 72 20 6e 61 6d 65 5b 5d 0d 0a 20 20 20 20 20 20 20 20 name['text'].or.name[]..........
aa80 20 20 20 20 70 61 74 74 65 72 6e 20 3d 20 2f 5e 28 2e 2b 29 5c 5b 28 22 5b 5e 5c 5d 5d 2a 22 7c ....pattern.=./^(.+)\[("[^\]]*"|
aaa0 27 5b 5e 5c 5d 5d 2a 27 7c 5b 30 2d 39 5d 2a 29 5c 5d 24 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 '[^\]]*'|[0-9]*)\]$/............
aac0 20 20 6b 65 79 73 20 3d 20 5b 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 6d ..keys.=.[]..............while.m
aae0 61 74 63 68 20 3d 20 70 61 74 74 65 72 6e 2e 6d 61 74 63 68 28 61 72 67 5f 6b 65 79 29 0d 0a 20 atch.=.pattern.match(arg_key)...
ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 5f 6b 65 79 20 3d 20 6d 61 74 63 68 5b 31 ...............arg_key.=.match[1
ab20 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 73 20 3d 20 5b 6d 61 74 63 68 ]..................keys.=.[match
ab40 5b 32 5d 5d 20 2b 20 6b 65 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 [2]].+.keys..............end....
ab60 20 20 20 20 20 20 20 20 20 20 6b 65 79 73 20 3d 20 5b 61 72 67 5f 6b 65 79 5d 20 2b 20 6b 65 79 ..........keys.=.[arg_key].+.key
ab80 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 6b 74 20 3d 20 40 67 65 74 0d 0a 20 20 20 s................akt.=.@get.....
aba0 20 20 20 20 20 20 20 20 20 6c 61 73 74 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .........last.=.nil.............
abc0 20 6c 61 73 74 6b 65 79 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 73 .lastkey.=.nil..............keys
abe0 2e 65 61 63 68 20 64 6f 20 7c 6b 65 79 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .each.do.|key|..................
ac00 69 66 20 6b 65 79 20 3d 3d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 if.key.==.""....................
ac20 20 20 23 20 4e 6f 20 6b 65 79 20 73 70 65 63 69 66 69 65 64 20 28 6c 69 6b 65 20 69 6e 20 22 74 ..#.No.key.specified.(like.in."t
ac40 65 73 74 5b 5d 22 29 2c 20 73 6f 20 77 65 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 est[]"),.so.we.use.the..........
ac60 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6c 6f 77 65 72 73 74 20 75 6e 75 73 65 64 20 49 6e 74 ............#.lowerst.unused.Int
ac80 65 67 65 72 20 61 73 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 eger.as.key.....................
aca0 20 6b 65 79 20 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 .key.=.0......................wh
acc0 69 6c 65 20 61 6b 74 2e 68 61 73 5f 6b 65 79 3f 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 ile.akt.has_key?(key)...........
ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 2b 3d 20 31 0d 0a 20 20 20 20 20 20 20 ...............key.+=.1.........
ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .............end................
ad20 20 20 65 6c 73 69 66 20 2f 5e 5b 30 2d 39 5d 2a 24 2f 20 3d 7e 20 6b 65 79 0d 0a 20 20 20 20 20 ..elsif./^[0-9]*$/.=~.key.......
ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 49 66 20 74 68 65 20 69 6e 64 65 78 20 69 73 ...............#.If.the.index.is
ad60 20 6e 75 6d 65 72 69 63 61 6c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 49 6e 74 65 .numerical.convert.it.to.an.Inte
ad80 67 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6b ger......................key.=.k
ada0 65 79 2e 74 6f 5f 69 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 6b ey.to_i..................elsif.k
adc0 65 79 5b 30 5d 2e 63 68 72 20 3d 3d 20 22 27 22 20 7c 7c 20 6b 65 79 5b 30 5d 2e 63 68 72 20 3d ey[0].chr.==."'".||.key[0].chr.=
ade0 3d 20 27 22 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d =.'"'......................key.=
ae00 20 6b 65 79 5b 31 2c 20 6b 65 79 2e 6c 65 6e 67 74 68 28 29 20 2d 32 5d 0d 0a 20 20 20 20 20 20 .key[1,.key.length().-2]........
ae20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 ..........end..................i
ae40 66 20 21 61 6b 74 2e 68 61 73 5f 6b 65 79 3f 28 6b 65 79 29 20 7c 7c 20 21 61 6b 74 5b 6b 65 79 f.!akt.has_key?(key).||.!akt[key
ae60 5d 2e 63 6c 61 73 73 20 3d 3d 20 48 61 73 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ].class.==.Hash.................
ae80 20 20 20 20 20 23 20 63 72 65 61 74 65 20 61 6e 20 65 6d 70 74 79 20 48 61 73 68 20 69 66 20 74 .....#.create.an.empty.Hash.if.t
aea0 68 65 72 65 20 69 73 6e 27 74 20 61 6c 72 65 61 64 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 here.isn't.already.one..........
aec0 20 20 20 20 20 20 20 20 20 20 20 20 61 6b 74 5b 6b 65 79 5d 20 3d 20 7b 7d 0d 0a 20 20 20 20 20 ............akt[key].=.{}.......
aee0 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........end..................
af00 6c 61 73 74 20 3d 20 61 6b 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 last.=.akt..................last
af20 6b 65 79 20 3d 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6b 74 20 3d key.=.key..................akt.=
af40 20 61 6b 74 5b 6b 65 79 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 .akt[key]..............end......
af60 20 20 20 20 20 20 20 20 6c 61 73 74 5b 6c 61 73 74 6b 65 79 5d 20 3d 20 61 72 67 5f 76 61 6c 0d ........last[lastkey].=.arg_val.
af80 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 40 65 6e 76 5b .........end............if.@env[
afa0 27 52 45 51 55 45 53 54 5f 4d 45 54 48 4f 44 27 5d 20 3d 3d 20 22 50 4f 53 54 22 0d 0a 20 20 20 'REQUEST_METHOD'].==."POST".....
afc0 20 20 20 20 20 20 20 20 20 69 66 20 40 65 6e 76 2e 68 61 73 5f 6b 65 79 3f 28 22 43 4f 4e 54 45 .........if.@env.has_key?("CONTE
afe0 4e 54 5f 54 59 50 45 22 29 20 26 26 20 40 65 6e 76 5b 27 43 4f 4e 54 45 4e 54 5f 54 59 50 45 27 NT_TYPE").&&.@env['CONTENT_TYPE'
b000 5d 20 3d 3d 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 77 77 77 2d 66 6f 72 6d 2d 75 72 6c ].==."application/x-www-form-url
b020 65 6e 63 6f 64 65 64 22 20 26 26 20 40 65 6e 76 2e 68 61 73 5f 6b 65 79 3f 28 27 43 4f 4e 54 45 encoded".&&.@env.has_key?('CONTE
b040 4e 54 5f 4c 45 4e 47 54 48 27 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c NT_LENGTH')..................unl
b060 65 73 73 20 40 73 65 74 74 69 6e 67 73 2e 68 61 73 5f 6b 65 79 3f 28 22 70 6f 73 74 20 73 65 70 ess.@settings.has_key?("post.sep
b080 65 72 61 74 6f 72 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6f erator")......................po
b0a0 73 74 5f 61 72 67 73 20 3d 20 24 73 74 64 69 6e 2e 72 65 61 64 28 40 65 6e 76 5b 27 43 4f 4e 54 st_args.=.$stdin.read(@env['CONT
b0c0 45 4e 54 5f 4c 45 4e 47 54 48 27 5d 2e 74 6f 5f 69 29 2e 73 70 6c 69 74 28 2f 5b 26 3b 5d 2f 29 ENT_LENGTH'].to_i).split(/[&;]/)
b0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 ..................else..........
b100 20 20 20 20 20 20 20 20 20 20 20 20 70 6f 73 74 5f 61 72 67 73 20 3d 20 24 73 74 64 69 6e 2e 72 ............post_args.=.$stdin.r
b120 65 61 64 28 40 65 6e 76 5b 27 43 4f 4e 54 45 4e 54 5f 4c 45 4e 47 54 48 27 5d 2e 74 6f 5f 69 29 ead(@env['CONTENT_LENGTH'].to_i)
b140 2e 73 70 6c 69 74 28 40 73 65 74 74 69 6e 67 73 5b 27 70 6f 73 74 20 73 65 70 65 72 61 74 6f 72 .split(@settings['post.seperator
b160 27 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 '])..................end........
b180 20 20 20 20 20 20 20 20 20 20 70 6f 73 74 5f 61 72 67 73 2e 65 61 63 68 20 64 6f 20 7c 20 61 72 ..........post_args.each.do.|.ar
b1a0 67 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 5f 6b 65 79 g.|......................arg_key
b1c0 2c 20 61 72 67 5f 76 61 6c 20 3d 20 61 72 67 2e 73 70 6c 69 74 28 2f 3d 2f 2c 20 32 29 0d 0a 20 ,.arg_val.=.arg.split(/=/,.2)...
b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 5f 6b 65 79 20 3d 20 52 77 65 ...................arg_key.=.Rwe
b200 62 3a 3a 75 6e 65 73 63 61 70 65 28 61 72 67 5f 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 b::unescape(arg_key)............
b220 20 20 20 20 20 20 20 20 20 20 61 72 67 5f 76 61 6c 20 3d 20 52 77 65 62 3a 3a 75 6e 65 73 63 61 ..........arg_val.=.Rweb::unesca
b240 70 65 28 61 72 67 5f 76 61 6c 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 pe(arg_val).....................
b260 20 20 20 23 20 50 61 72 73 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20 6e 61 6d 65 5b 30 5d 2c 20 6e ...#.Parse.names.like.name[0],.n
b280 61 6d 65 5b 27 74 65 78 74 27 5d 20 6f 72 20 6e 61 6d 65 5b 5d 0d 0a 20 20 20 20 20 20 20 20 20 ame['text'].or.name[]...........
b2a0 20 20 20 20 20 20 20 20 20 20 20 70 61 74 74 65 72 6e 20 3d 20 2f 5e 28 2e 2b 29 5c 5b 28 22 5b ...........pattern.=./^(.+)\[("[
b2c0 5e 5c 5d 5d 2a 22 7c 27 5b 5e 5c 5d 5d 2a 27 7c 5b 30 2d 39 5d 2a 29 5c 5d 24 2f 0d 0a 20 20 20 ^\]]*"|'[^\]]*'|[0-9]*)\]$/.....
b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 73 20 3d 20 5b 5d 0d 0a 20 20 20 20 .................keys.=.[]......
b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 6d 61 74 63 68 20 3d 20 70 61 ................while.match.=.pa
b320 74 74 65 72 6e 2e 6d 61 74 63 68 28 61 72 67 5f 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ttern.match(arg_key)............
b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 5f 6b 65 79 20 3d 20 6d 61 74 63 68 5b 31 5d ..............arg_key.=.match[1]
b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 73 20 3d ..........................keys.=
b380 20 5b 6d 61 74 63 68 5b 32 5d 5d 20 2b 20 6b 65 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .[match[2]].+.keys..............
b3a0 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ........end.....................
b3c0 20 6b 65 79 73 20 3d 20 5b 61 72 67 5f 6b 65 79 5d 20 2b 20 6b 65 79 73 0d 0a 0d 0a 20 20 20 20 .keys.=.[arg_key].+.keys........
b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6b 74 20 3d 20 40 70 6f 73 74 0d 0a 20 20 20 ................akt.=.@post.....
b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 20 3d 20 6e 69 6c 0d 0a 20 20 20 .................last.=.nil.....
b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 6b 65 79 20 3d 20 6e 69 6c 0d 0a .................lastkey.=.nil..
b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 73 2e 65 61 63 68 20 64 6f ....................keys.each.do
b460 20 7c 6b 65 79 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .|key|..........................
b480 69 66 20 6b 65 79 20 3d 3d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 if.key.==.""....................
b4a0 20 20 20 20 20 20 20 20 20 20 23 20 4e 6f 20 6b 65 79 20 73 70 65 63 69 66 69 65 64 20 28 6c 69 ..........#.No.key.specified.(li
b4c0 6b 65 20 69 6e 20 22 74 65 73 74 5b 5d 22 29 2c 20 73 6f 20 77 65 20 75 73 65 0d 0a 20 20 20 20 ke.in."test[]"),.so.we.use......
b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65 20 6c 6f ........................#.the.lo
b500 77 65 72 73 74 20 75 6e 75 73 65 64 20 49 6e 74 65 67 65 72 20 61 73 20 6b 65 79 0d 0a 20 20 20 werst.unused.Integer.as.key.....
b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 30 .........................key.=.0
b540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 ..............................wh
b560 69 6c 65 20 61 6b 74 2e 68 61 73 5f 6b 65 79 3f 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 ile.akt.has_key?(key)...........
b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 2b 3d 20 31 0d .......................key.+=.1.
b5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 .............................end
b5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 ..........................elsif.
b5e0 2f 5e 5b 30 2d 39 5d 2a 24 2f 20 3d 7e 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /^[0-9]*$/.=~.key...............
b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 49 66 20 74 68 65 20 69 6e 64 65 78 20 69 73 ...............#.If.the.index.is
b620 20 6e 75 6d 65 72 69 63 61 6c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 49 6e 74 65 .numerical.convert.it.to.an.Inte
b640 67 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ger.............................
b660 20 6b 65 79 20 3d 20 6b 65 79 2e 74 6f 5f 69 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .key.=.key.to_i.................
b680 20 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 6b 65 79 5b 30 5d 2e 63 68 72 20 3d 3d 20 22 27 22 .........elsif.key[0].chr.==."'"
b6a0 20 7c 7c 20 6b 65 79 5b 30 5d 2e 63 68 72 20 3d 3d 20 27 22 27 0d 0a 20 20 20 20 20 20 20 20 20 .||.key[0].chr.==.'"'...........
b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6b 65 79 5b 31 2c 20 ...................key.=.key[1,.
b6e0 6b 65 79 2e 6c 65 6e 67 74 68 28 29 20 2d 32 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 key.length().-2]................
b700 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........end...................
b720 20 20 20 20 20 20 20 69 66 20 21 61 6b 74 2e 68 61 73 5f 6b 65 79 3f 28 6b 65 79 29 20 7c 7c 20 .......if.!akt.has_key?(key).||.
b740 21 61 6b 74 5b 6b 65 79 5d 2e 63 6c 61 73 73 20 3d 3d 20 48 61 73 68 0d 0a 20 20 20 20 20 20 20 !akt[key].class.==.Hash.........
b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 63 72 65 61 74 65 20 61 6e .....................#.create.an
b780 20 65 6d 70 74 79 20 48 61 73 68 20 69 66 20 74 68 65 72 65 20 69 73 6e 27 74 20 61 6c 72 65 61 .empty.Hash.if.there.isn't.alrea
b7a0 64 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dy.one..........................
b7c0 20 20 20 20 61 6b 74 5b 6b 65 79 5d 20 3d 20 7b 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ....akt[key].=.{}...............
b7e0 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........end..................
b800 20 20 20 20 20 20 20 20 6c 61 73 74 20 3d 20 61 6b 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ........last.=.akt..............
b820 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 6b 65 79 20 3d 20 6b 65 79 0d 0a 20 20 20 20 20 ............lastkey.=.key.......
b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6b 74 20 3d 20 61 6b 74 5b 6b 65 79 ...................akt.=.akt[key
b860 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 ]......................end......
b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 5b 6c 61 73 74 6b 65 79 5d 20 3d 20 ................last[lastkey].=.
b8a0 61 72 67 5f 76 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 arg_val..................end....
b8c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........else..................
b8e0 23 20 4d 61 79 62 65 20 77 65 20 73 68 6f 75 6c 64 20 70 72 69 6e 74 20 61 20 77 61 72 6e 69 6e #.Maybe.we.should.print.a.warnin
b900 67 20 68 65 72 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 73 74 64 65 72 72 g.here?..................$stderr
b920 2e 70 72 69 6e 74 28 22 55 6e 69 64 65 6e 74 69 66 69 65 64 20 66 6f 72 6d 20 64 61 74 61 20 72 .print("Unidentified.form.data.r
b940 65 63 69 76 65 64 20 61 6e 64 20 64 69 73 63 61 72 64 65 64 2e 22 29 0d 0a 20 20 20 20 20 20 20 ecived.and.discarded.").........
b960 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 .....end..........end...........
b980 20 69 66 20 40 65 6e 76 2e 68 61 73 5f 6b 65 79 3f 28 22 48 54 54 50 5f 43 4f 4f 4b 49 45 22 29 .if.@env.has_key?("HTTP_COOKIE")
b9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6f 6b 69 65 20 3d 20 40 65 6e 76 5b 27 48 54 54 ..............cookie.=.@env['HTT
b9c0 50 5f 43 4f 4f 4b 49 45 27 5d 2e 73 70 6c 69 74 28 2f 3b 20 3f 2f 29 0d 0a 20 20 20 20 20 20 20 P_COOKIE'].split(/;.?/).........
b9e0 20 20 20 20 20 63 6f 6f 6b 69 65 2e 65 61 63 68 20 64 6f 20 7c 20 63 20 7c 0d 0a 20 20 20 20 20 .....cookie.each.do.|.c.|.......
ba00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6f 6b 69 65 5f 6b 65 79 2c 20 63 6f 6f 6b 69 65 5f 76 61 ...........cookie_key,.cookie_va
ba20 6c 20 3d 20 63 2e 73 70 6c 69 74 28 2f 3d 2f 2c 20 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 l.=.c.split(/=/,.2).............
ba40 20 20 20 20 20 20 20 40 63 6f 6f 6b 69 65 73 20 5b 52 77 65 62 3a 3a 75 6e 65 73 63 61 70 65 28 .......@cookies.[Rweb::unescape(
ba60 63 6f 6f 6b 69 65 5f 6b 65 79 29 5d 20 3d 20 52 77 65 62 3a 3a 75 6e 65 73 63 61 70 65 28 63 6f cookie_key)].=.Rweb::unescape(co
ba80 6f 6b 69 65 5f 76 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 okie_val)..............end......
baa0 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 64 65 66 69 6e 65 64 3f 28 40 ....end............if.defined?(@
bac0 65 6e 76 5b 27 48 54 54 50 5f 55 53 45 52 5f 41 47 45 4e 54 27 5d 29 0d 0a 20 20 20 20 20 20 20 env['HTTP_USER_AGENT']).........
bae0 20 20 20 20 20 40 75 73 65 72 5f 61 67 65 6e 74 20 3d 20 40 65 6e 76 5b 27 48 54 54 50 5f 55 53 .....@user_agent.=.@env['HTTP_US
bb00 45 52 5f 41 47 45 4e 54 27 5d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 ER_AGENT']..........else........
bb20 20 20 20 20 20 20 40 75 73 65 72 5f 61 67 65 6e 74 20 3d 20 6e 69 6c 3b 0d 0a 20 20 20 20 20 20 ......@user_agent.=.nil;........
bb40 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 64 65 66 69 6e 65 64 3f 28 40 65 6e ..end............if.defined?(@en
bb60 76 5b 27 52 45 4d 4f 54 45 5f 41 44 44 52 27 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 v['REMOTE_ADDR'])..............@
bb80 72 65 6d 6f 74 65 5f 61 64 64 72 20 3d 20 40 65 6e 76 5b 27 52 45 4d 4f 54 45 5f 41 44 44 52 27 remote_addr.=.@env['REMOTE_ADDR'
bba0 5d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 72 65 ]..........else..............@re
bbc0 6d 6f 74 65 5f 61 64 64 72 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 mote_addr.=.nil..........end....
bbe0 20 20 20 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 50 72 ......#.}}}......end........#.Pr
bc00 69 6e 74 73 20 61 20 53 74 72 69 6e 67 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 2e 20 49 66 20 ints.a.String.to.the.client..If.
bc20 63 61 63 68 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 74 68 65 20 53 74 72 69 6e 67 20 77 caching.is.enabled,.the.String.w
bc40 69 6c 6c 0d 0a 20 20 20 20 23 20 62 75 66 66 65 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 65 6e ill......#.buffered.until.the.en
bc60 64 20 6f 66 20 74 68 65 20 6f 75 74 20 62 6c 6f 63 6b 20 65 6e 64 73 2e 0d 0a 20 20 20 20 64 65 d.of.the.out.block.ends.......de
bc80 66 20 70 72 69 6e 74 28 73 74 72 20 3d 20 22 22 29 0d 0a 20 20 20 20 20 20 20 20 23 20 7b 7b 7b f.print(str.=."")..........#.{{{
bca0 0d 0a 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f 75 74 70 75 74 5f 61 6c 6c 6f 77 65 64 ..........unless.@output_allowed
bcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 22 59 6f 75 20 6a 75 73 74 20 63 61 ..............raise."You.just.ca
bce0 6e 20 77 72 69 74 65 20 74 6f 20 6f 75 74 70 75 74 20 69 6e 73 69 64 65 20 6f 66 20 61 20 52 77 n.write.to.output.inside.of.a.Rw
bd00 65 62 3a 3a 6f 75 74 2d 62 6c 6f 63 6b 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 eb::out-block"..........end.....
bd20 20 20 20 20 20 20 20 69 66 20 40 73 65 74 74 69 6e 67 73 5b 22 63 61 63 68 65 22 5d 0d 0a 20 20 .......if.@settings["cache"]....
bd40 20 20 20 20 20 20 20 20 20 20 40 62 75 66 66 65 72 20 2b 3d 20 5b 73 74 72 2e 74 6f 5f 73 5d 0d ..........@buffer.+=.[str.to_s].
bd60 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c 65 73 .........else..............unles
bd80 73 20 40 6f 75 74 70 75 74 5f 73 74 61 72 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s.@output_started...............
bda0 20 20 20 73 65 6e 64 48 65 61 64 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d ...sendHeaders..............end.
bdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 74 64 6f 75 74 2e 70 72 69 6e 74 28 73 74 72 29 0d .............$stdout.print(str).
bde0 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 6e 69 6c 0d 0a 20 20 20 20 20 .........end..........nil.......
be00 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 50 72 69 6e 74 ...#.}}}......end........#.Print
be20 73 20 61 20 53 74 72 69 6e 67 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 20 61 6e 64 20 61 64 64 s.a.String.to.the.client.and.add
be40 73 20 61 20 6c 69 6e 65 20 62 72 65 61 6b 20 61 74 20 74 68 65 20 65 6e 64 2e 20 50 6c 65 61 73 s.a.line.break.at.the.end..Pleas
be60 65 0d 0a 09 09 23 20 72 65 6d 65 6d 62 65 72 2c 20 74 68 61 74 20 61 20 6c 69 6e 65 20 62 72 65 e....#.remember,.that.a.line.bre
be80 61 6b 20 69 73 20 6e 6f 74 20 76 69 73 69 62 6c 65 20 69 6e 20 48 54 4d 4c 2c 20 75 73 65 20 74 ak.is.not.visible.in.HTML,.use.t
bea0 68 65 20 3c 62 72 3e 20 48 54 4d 4c 2d 54 61 67 0d 0a 09 09 23 20 66 6f 72 20 74 68 69 73 2e 20 he.<br>.HTML-Tag....#.for.this..
bec0 49 66 20 63 61 63 68 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 74 68 65 20 53 74 72 69 6e If.caching.is.enabled,.the.Strin
bee0 67 20 77 69 6c 6c 20 62 75 66 66 65 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 0d 0a 09 g.will.buffered.until.the.end...
bf00 09 23 20 6f 66 20 74 68 65 20 6f 75 74 20 62 6c 6f 63 6b 20 65 6e 64 73 2e 0d 0a 20 20 20 20 64 .#.of.the.out.block.ends.......d
bf20 65 66 20 70 75 74 73 28 73 74 72 20 3d 20 22 22 29 0d 0a 20 20 20 20 20 20 20 20 23 20 7b 7b 7b ef.puts(str.=."")..........#.{{{
bf40 0d 0a 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 72 69 6e 74 28 73 74 72 20 2b 20 22 5c 6e 22 29 ..........self.print(str.+."\n")
bf60 0d 0a 20 20 20 20 20 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 09 09 23 20 ..........#.}}}......end......#.
bf80 41 6c 69 61 73 20 74 6f 20 70 72 69 6e 74 2e 0d 0a 20 20 20 20 64 65 66 20 77 72 69 74 65 28 73 Alias.to.print.......def.write(s
bfa0 74 72 20 3d 20 22 22 29 0d 0a 20 20 20 20 20 20 20 20 23 20 7b 7b 7b 0d 0a 20 20 20 20 20 20 20 tr.=."")..........#.{{{.........
bfc0 20 73 65 6c 66 2e 70 72 69 6e 74 28 73 74 72 29 0d 0a 20 20 20 20 20 20 20 20 23 20 7d 7d 7d 0d .self.print(str)..........#.}}}.
bfe0 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 49 66 20 63 61 63 68 69 6e 67 20 69 73 20 .....end........#.If.caching.is.
c000 65 6e 61 62 6c 65 64 2c 20 61 6c 6c 20 63 61 63 68 65 64 20 64 61 74 61 20 61 72 65 20 73 65 6e enabled,.all.cached.data.are.sen
c020 64 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 64 20 61 6e 64 20 74 68 65 0d 0a 09 09 23 20 63 61 63 d.to.the.cliend.and.the....#.cac
c040 68 65 20 65 6d 70 74 69 65 64 2e 0d 0a 20 20 20 20 64 65 66 20 66 6c 75 73 68 0d 0a 20 20 20 20 he.emptied.......def.flush......
c060 20 20 20 20 23 20 7b 7b 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f 75 74 70 75 ....#.{{{..........unless.@outpu
c080 74 5f 61 6c 6c 6f 77 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 22 59 6f t_allowed..............raise."Yo
c0a0 75 20 63 61 6e 27 74 20 75 73 65 20 66 6c 75 73 68 20 6f 75 74 73 69 64 65 20 6f 66 20 61 20 52 u.can't.use.flush.outside.of.a.R
c0c0 77 65 62 3a 3a 6f 75 74 2d 62 6c 6f 63 6b 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 web::out-block"..........end....
c0e0 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 40 62 75 66 66 65 72 2e 6a 6f 69 6e 0d 0a 0d 0a 20 ......buffer.=.@buffer.join.....
c100 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f 75 74 70 75 74 5f 73 74 61 72 74 65 64 0d 0a 20 .......unless.@output_started...
c120 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 48 65 61 64 65 72 73 0d 0a 20 20 20 20 20 20 20 20 ...........sendHeaders..........
c140 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 24 73 74 64 6f 75 74 2e 70 72 69 6e 74 28 62 75 66 66 65 end..........$stdout.print(buffe
c160 72 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 40 62 75 66 66 65 72 20 3d 20 5b 5d 0d 0a 20 20 20 20 r)............@buffer.=.[]......
c180 20 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 53 65 6e 64 ....#.}}}......end........#.Send
c1a0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 68 65 61 64 65 72 20 74 6f 20 74 68 65 20 63 6c 69 65 s.one.or.more.header.to.the.clie
c1c0 6e 74 2e 20 41 6c 6c 20 68 65 61 64 65 72 73 20 61 72 65 20 63 61 63 68 65 64 20 6a 75 73 74 0d nt..All.headers.are.cached.just.
c1e0 0a 09 09 23 20 62 65 66 6f 72 65 20 62 6f 64 79 20 64 61 74 61 20 61 72 65 20 73 65 6e 64 20 74 ...#.before.body.data.are.send.t
c200 6f 20 74 68 65 20 63 6c 69 65 6e 74 2e 20 49 66 20 74 68 65 20 73 61 6d 65 20 68 65 61 64 65 72 o.the.client..If.the.same.header
c220 20 61 72 65 20 73 65 74 0d 0a 09 09 23 20 74 77 69 63 65 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 .are.set....#.twice,.only.the.la
c240 73 74 20 76 61 6c 75 65 20 69 73 20 73 65 6e 64 2e 0d 0a 09 09 23 0d 0a 09 09 23 20 45 78 61 6d st.value.is.send.....#....#.Exam
c260 70 6c 65 3a 0d 0a 09 09 23 20 20 77 65 62 2e 68 65 61 64 65 72 28 22 4c 61 73 74 2d 4d 6f 64 69 ple:....#..web.header("Last-Modi
c280 66 69 65 64 3a 20 4d 6f 6e 2c 20 31 36 20 46 65 62 20 32 30 30 34 20 32 30 3a 31 35 3a 34 31 20 fied:.Mon,.16.Feb.2004.20:15:41.
c2a0 47 4d 54 22 29 0d 0a 09 09 23 20 20 77 65 62 2e 68 65 61 64 65 72 28 22 4c 6f 63 61 74 69 6f 6e GMT")....#..web.header("Location
c2c0 3a 20 68 74 74 70 3a 2f 2f 77 77 77 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 22 29 0d 0a 09 09 :.http://www.ruby-lang.org")....
c2e0 23 0d 0a 09 09 23 20 59 6f 75 20 63 61 6e 20 73 70 65 63 69 66 79 20 6d 6f 72 65 20 74 68 61 6e #....#.You.can.specify.more.than
c300 20 6f 6e 65 20 68 65 61 64 65 72 20 61 74 20 74 68 65 20 74 69 6d 65 20 62 79 20 64 6f 69 6e 67 .one.header.at.the.time.by.doing
c320 20 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 0d 0a 09 09 23 20 74 68 69 73 3a 0d 0a 09 09 23 20 .something.like....#.this:....#.
c340 20 77 65 62 2e 68 65 61 64 65 72 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f .web.header("Content-Type:.text/
c360 70 6c 61 69 6e 5c 6e 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 33 38 33 22 29 0d 0a 09 09 plain\nContent-Length:.383")....
c380 23 20 6f 72 0d 0a 09 09 23 20 20 77 65 62 2e 68 65 61 64 65 72 28 5b 22 43 6f 6e 74 65 6e 74 2d #.or....#..web.header(["Content-
c3a0 54 79 70 65 3a 20 74 65 78 74 2f 70 6c 61 69 6e 22 2c 20 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 Type:.text/plain",."Content-Leng
c3c0 74 68 3a 20 33 38 33 22 5d 29 0d 0a 20 20 20 20 64 65 66 20 68 65 61 64 65 72 28 73 74 72 29 0d th:.383"])......def.header(str).
c3e0 0a 20 20 20 20 20 20 20 20 23 20 7b 7b 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 40 6f 75 74 70 .........#.{{{..........if.@outp
c400 75 74 5f 73 74 61 72 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 22 48 ut_started..............raise."H
c420 54 54 50 2d 48 65 61 64 65 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 73 65 6e 64 2e 20 59 6f TTP-Headers.are.already.send..Yo
c440 75 20 63 61 6e 27 74 20 63 68 61 6e 67 65 20 74 68 65 6d 20 61 66 74 65 72 20 6f 75 74 70 75 74 u.can't.change.them.after.output
c460 20 68 61 73 20 73 74 61 72 74 65 64 21 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 .has.started!"..........end.....
c480 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f 75 74 70 75 74 5f 61 6c 6c 6f 77 65 64 0d 0a 20 20 20 .....unless.@output_allowed.....
c4a0 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 22 59 6f 75 20 6a 75 73 74 20 63 61 6e 20 73 65 74 .........raise."You.just.can.set
c4c0 20 68 65 61 64 65 72 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 52 77 65 62 3a 3a 6f 75 74 2d 62 .headers.inside.of.a.Rweb::out-b
c4e0 6c 6f 63 6b 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 69 66 20 73 lock"..........end..........if.s
c500 74 72 2e 69 73 5f 61 3f 41 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 2e 65 tr.is_a?Array..............str.e
c520 61 63 68 20 64 6f 20 7c 20 76 61 6c 75 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ach.do.|.value.|................
c540 20 20 73 65 6c 66 2e 68 65 61 64 65 72 28 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ..self.header(value)............
c560 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 72 2e 73 70 6c 69 74 ..end............elsif.str.split
c580 28 2f 5c 6e 2f 29 2e 6c 65 6e 67 74 68 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 (/\n/).length.>.1..............s
c5a0 74 72 2e 73 70 6c 69 74 28 2f 5c 6e 2f 29 2e 65 61 63 68 20 64 6f 20 7c 20 76 61 6c 75 65 20 7c tr.split(/\n/).each.do.|.value.|
c5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 68 65 61 64 65 72 28 76 61 ..................self.header(va
c5e0 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 lue)..............end...........
c600 20 65 6c 73 69 66 20 73 74 72 2e 69 73 5f 61 3f 20 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 .elsif.str.is_a?.String.........
c620 20 20 20 20 20 73 74 72 2e 67 73 75 62 21 28 2f 5c 72 2f 2c 20 22 22 29 0d 0a 0d 0a 20 20 20 20 .....str.gsub!(/\r/,."")........
c640 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 20 3d 7e 20 2f 5e 48 54 54 50 5c 2f 31 5c 2e 5b 30 ........if.(str.=~./^HTTP\/1\.[0
c660 31 5d 20 5b 30 2d 39 5d 7b 33 7d 20 3f 2e 2a 24 2f 29 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 1].[0-9]{3}.?.*$/).==.0.........
c680 20 20 20 20 20 20 20 20 20 70 61 74 74 65 72 6e 20 3d 20 2f 5e 48 54 54 50 5c 2f 31 2e 5b 30 31 .........pattern.=./^HTTP\/1.[01
c6a0 5d 20 28 5b 30 2d 39 5d 7b 33 7d 29 20 3f 28 2e 2a 29 24 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ].([0-9]{3}).?(.*)$/............
c6c0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 70 61 74 74 65 72 6e 2e 6d 61 74 63 68 28 73 ........result.=.pattern.match(s
c6e0 74 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 73 65 74 73 74 61 tr)..................self.setsta
c700 74 75 73 28 72 65 73 75 6c 74 5b 30 5d 2c 20 72 65 73 75 6c 74 5b 31 5d 29 0d 0a 20 20 20 20 20 tus(result[0],.result[1]).......
c720 20 20 20 20 20 20 20 65 6c 73 69 66 20 28 73 74 72 20 3d 7e 20 2f 5e 73 74 61 74 75 73 3a 20 5b .......elsif.(str.=~./^status:.[
c740 30 2d 39 5d 7b 33 7d 20 3f 2e 2a 24 2f 69 29 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 0-9]{3}.?.*$/i).==.0............
c760 20 20 20 20 20 20 70 61 74 74 65 72 6e 20 3d 20 2f 5e 73 74 61 74 75 73 3a 20 28 5b 30 2d 39 5d ......pattern.=./^status:.([0-9]
c780 7b 33 7d 29 20 3f 28 2e 2a 29 24 2f 69 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {3}).?(.*)$/i...................
c7a0 20 72 65 73 75 6c 74 20 3d 20 70 61 74 74 65 72 6e 2e 6d 61 74 63 68 28 73 74 72 29 0d 0a 20 20 .result.=.pattern.match(str)....
c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 73 65 74 73 74 61 74 75 73 28 72 65 73 ..............self.setstatus(res
c7e0 75 6c 74 5b 30 5d 2c 20 72 65 73 75 6c 74 5b 31 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ult[0],.result[1])..............
c800 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20 3d 20 73 74 72 2e 73 70 else..................a.=.str.sp
c820 6c 69 74 28 2f 3a 20 3f 2f 2c 20 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lit(/:.?/,.2)...................
c840 20 40 68 65 61 64 65 72 5b 61 5b 30 5d 2e 64 6f 77 6e 63 61 73 65 5d 20 3d 20 61 5b 31 5d 0d 0a .@header[a[0].downcase].=.a[1]..
c860 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 ............end..........end....
c880 20 20 20 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 43 68 ......#.}}}......end........#.Ch
c8a0 61 6e 67 65 73 20 74 68 65 20 73 74 61 74 75 73 20 6f 66 20 74 68 69 73 20 70 61 67 65 2e 20 54 anges.the.status.of.this.page..T
c8c0 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 63 6f 64 65 73 20 6c 69 6b 65 20 22 32 30 30 here.are.several.codes.like."200
c8e0 20 4f 4b 22 2c 0d 0a 09 09 23 20 22 33 30 32 20 46 6f 75 6e 64 22 2c 20 22 34 30 34 20 4e 6f 74 .OK",....#."302.Found",."404.Not
c900 20 46 6f 75 6e 64 22 20 6f 72 20 22 35 30 30 20 49 6e 74 65 72 6e 61 6c 20 53 65 72 76 65 72 20 .Found".or."500.Internal.Server.
c920 45 72 72 6f 72 22 2e 20 41 20 6c 69 73 74 20 6f 66 0d 0a 09 09 23 20 61 6c 6c 20 63 6f 64 65 73 Error"..A.list.of....#.all.codes
c940 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 61 74 0d 0a 09 09 23 20 68 74 74 70 3a 2f 2f 77 77 77 .is.available.at....#.http://www
c960 2e 77 33 2e 6f 72 67 2f 50 72 6f 74 6f 63 6f 6c 73 2f 72 66 63 32 36 31 36 2f 72 66 63 32 36 31 .w3.org/Protocols/rfc2616/rfc261
c980 36 2d 73 65 63 31 30 2e 68 74 6d 6c 23 73 65 63 31 30 0d 0a 09 09 23 0d 0a 09 09 23 20 59 6f 75 6-sec10.html#sec10....#....#.You
c9a0 20 63 61 6e 20 6a 75 73 74 20 73 65 6e 64 20 74 68 65 20 63 6f 64 65 20 6e 75 6d 62 65 72 2c 20 .can.just.send.the.code.number,.
c9c0 74 68 65 20 72 65 61 73 6f 6e 20 70 68 72 61 73 65 20 77 69 6c 6c 20 62 65 20 61 64 64 65 64 0d the.reason.phrase.will.be.added.
c9e0 0a 09 09 23 20 61 75 74 6f 6d 61 74 69 63 6c 79 20 77 69 74 68 20 74 68 65 20 72 65 63 6f 6d 6d ...#.automaticly.with.the.recomm
ca00 65 6e 64 61 74 69 6f 6e 73 20 66 72 6f 6d 20 74 68 65 20 77 33 63 20 69 66 20 6e 6f 74 20 73 70 endations.from.the.w3c.if.not.sp
ca20 65 63 69 66 69 65 64 2e 20 49 66 0d 0a 09 09 23 20 79 6f 75 20 73 65 74 20 74 68 65 20 73 74 61 ecified..If....#.you.set.the.sta
ca40 74 75 73 20 74 77 69 63 65 20 6f 72 20 6d 6f 72 65 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 tus.twice.or.more,.only.the.last
ca60 20 73 74 61 74 75 73 20 77 69 6c 6c 20 62 65 20 73 65 6e 64 2e 0d 0a 09 09 23 20 45 78 61 6d 70 .status.will.be.send.....#.Examp
ca80 6c 65 73 3a 0d 0a 09 09 23 20 20 77 65 62 2e 73 74 61 74 75 73 28 22 34 30 31 20 55 6e 61 75 74 les:....#..web.status("401.Unaut
caa0 68 6f 72 69 7a 65 64 22 29 0d 0a 09 09 23 20 20 77 65 62 2e 73 74 61 74 75 73 28 22 34 31 30 20 horized")....#..web.status("410.
cac0 53 61 64 20 62 75 74 20 74 72 75 65 2c 20 74 68 69 73 20 6c 6f 6e 65 6c 79 20 70 61 67 65 20 69 Sad.but.true,.this.lonely.page.i
cae0 73 20 67 6f 6e 65 20 3a 28 22 29 0d 0a 09 09 23 20 20 77 65 62 2e 73 74 61 74 75 73 28 32 30 36 s.gone.:(")....#..web.status(206
cb00 29 0d 0a 09 09 23 20 20 77 65 62 2e 73 74 61 74 75 73 28 22 34 30 30 22 29 0d 0a 09 09 23 0d 0a )....#..web.status("400")....#..
cb20 09 09 23 20 54 68 65 20 64 65 66 61 75 6c 74 20 73 74 61 74 75 73 20 69 73 20 22 32 30 30 20 4f ..#.The.default.status.is."200.O
cb40 4b 22 2e 20 49 66 20 61 20 22 4c 6f 63 61 74 69 6f 6e 22 20 68 65 61 64 65 72 20 69 73 20 73 65 K"..If.a."Location".header.is.se
cb60 74 2c 20 74 68 65 0d 0a 09 09 23 20 64 65 66 61 75 6c 74 20 73 74 61 74 75 73 20 69 73 20 22 33 t,.the....#.default.status.is."3
cb80 30 32 20 46 6f 75 6e 64 22 2e 0d 0a 20 20 20 20 64 65 66 20 73 74 61 74 75 73 28 73 74 72 29 0d 02.Found".......def.status(str).
cba0 0a 20 20 20 20 20 20 20 20 23 20 7b 7b 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 40 6f 75 74 70 .........#.{{{..........if.@outp
cbc0 75 74 5f 73 74 61 72 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 22 48 ut_started..............raise."H
cbe0 54 54 50 2d 48 65 61 64 65 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 73 65 6e 64 2e 20 59 6f TTP-Headers.are.already.send..Yo
cc00 75 20 63 61 6e 27 74 20 63 68 61 6e 67 65 20 74 68 65 6d 20 61 66 74 65 72 20 6f 75 74 70 75 74 u.can't.change.them.after.output
cc20 20 68 61 73 20 73 74 61 72 74 65 64 21 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 .has.started!"..........end.....
cc40 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f 75 74 70 75 74 5f 61 6c 6c 6f 77 65 64 0d 0a 20 20 20 .....unless.@output_allowed.....
cc60 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 22 59 6f 75 20 6a 75 73 74 20 63 61 6e 20 73 65 74 .........raise."You.just.can.set
cc80 20 68 65 61 64 65 72 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 52 77 65 62 3a 3a 6f 75 74 2d 62 .headers.inside.of.a.Rweb::out-b
cca0 6c 6f 63 6b 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 69 66 20 73 lock"..........end..........if.s
ccc0 74 72 2e 69 73 5f 61 3f 49 6e 74 65 67 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 73 74 tr.is_a?Integer..............@st
cce0 61 74 75 73 20 3d 20 73 74 72 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 72 2e 69 73 atus.=.str..........elsif.str.is
cd00 5f 61 3f 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 31 20 3d 20 2f 5e 28 5b _a?String..............p1.=./^([
cd20 30 2d 39 5d 7b 33 7d 29 20 3f 28 2e 2a 29 24 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 32 0-9]{3}).?(.*)$/..............p2
cd40 20 3d 20 2f 5e 48 54 54 50 5c 2f 31 5c 2e 5b 30 31 5d 20 28 5b 30 2d 39 5d 7b 33 7d 29 20 3f 28 .=./^HTTP\/1\.[01].([0-9]{3}).?(
cd60 2e 2a 29 24 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 33 20 3d 20 2f 5e 73 74 61 74 75 73 .*)$/..............p3.=./^status
cd80 3a 20 28 5b 30 2d 39 5d 7b 33 7d 29 20 3f 28 2e 2a 29 24 2f 69 0d 0a 0d 0a 20 20 20 20 20 20 20 :.([0-9]{3}).?(.*)$/i...........
cda0 20 20 20 20 20 69 66 20 28 61 20 3d 20 70 31 2e 6d 61 74 63 68 28 73 74 72 29 29 20 3d 3d 20 6e .....if.(a.=.p1.match(str)).==.n
cdc0 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 20 3d 20 70 32 2e 6d il..................if.(a.=.p2.m
cde0 61 74 63 68 28 73 74 72 29 29 20 3d 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 atch(str)).==.nil...............
ce00 20 20 20 20 20 20 20 69 66 20 28 61 20 3d 20 70 33 2e 6d 61 74 63 68 28 73 74 72 29 29 20 3d 3d .......if.(a.=.p3.match(str)).==
ce20 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 61 .nil..........................ra
ce40 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 49 6e 76 61 6c 69 64 20 61 72 67 75 ise.ArgumentError,."Invalid.argu
ce60 6d 65 6e 74 22 2c 20 63 61 6c 6c 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ment",.caller...................
ce80 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 ...end..................end.....
cea0 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 73 74 61 74 75 .........end..............@statu
cec0 73 20 3d 20 61 5b 31 5d 2e 74 6f 5f 69 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 61 5b s.=.a[1].to_i..............if.a[
cee0 32 5d 20 21 3d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 40 72 65 61 73 6f 2].!=.""..................@reaso
cf00 6e 50 68 72 61 73 65 20 3d 20 61 5b 32 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 nPhrase.=.a[2]..............else
cf20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 40 72 65 61 73 6f 6e 50 68 72 61 73 65 20 ..................@reasonPhrase.
cf40 3d 20 67 65 74 52 65 61 73 6f 6e 50 68 72 61 73 65 28 40 73 74 61 74 75 73 29 0d 0a 20 20 20 20 =.getReasonPhrase(@status)......
cf60 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 ........end..........else.......
cf80 20 20 20 20 20 20 20 72 61 69 73 65 20 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 41 72 67 .......raise.ArgumentError,."Arg
cfa0 75 6d 65 6e 74 20 6f 66 20 73 65 74 73 74 61 74 75 73 20 6d 75 73 74 20 62 65 20 69 6e 74 65 67 ument.of.setstatus.must.be.integ
cfc0 65 72 20 6f 72 20 73 74 72 69 6e 67 22 2c 20 63 61 6c 6c 65 72 0d 0a 20 20 20 20 20 20 20 20 65 er.or.string",.caller..........e
cfe0 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 nd..........#.}}}......end......
d000 20 20 23 20 48 61 6e 64 6c 65 73 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 79 6f 75 72 20 63 ..#.Handles.the.output.of.your.c
d020 6f 6e 74 65 6e 74 20 61 6e 64 20 72 65 73 63 75 65 73 20 61 6c 6c 20 65 78 63 65 70 74 69 6f 6e ontent.and.rescues.all.exception
d040 73 2e 20 53 65 6e 64 20 61 6c 6c 0d 0a 09 09 23 20 64 61 74 61 20 69 6e 20 74 68 65 20 62 6c 6f s..Send.all....#.data.in.the.blo
d060 63 6b 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0d ck.to.this.method..For.example:.
d080 0a 09 09 23 20 20 77 65 62 2e 6f 75 74 20 64 6f 0d 0a 09 09 23 20 20 20 20 20 20 77 65 62 2e 68 ...#..web.out.do....#......web.h
d0a0 65 61 64 65 72 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 6c 61 69 6e 22 eader("Content-Type:.text/plain"
d0c0 29 0d 0a 09 09 23 20 20 20 20 20 20 77 65 62 2e 70 75 74 73 28 22 48 65 6c 6c 6f 2c 20 70 6c 61 )....#......web.puts("Hello,.pla
d0e0 69 6e 20 77 6f 72 6c 64 21 22 29 0d 0a 09 09 23 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 6f in.world!")....#..end......def.o
d100 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20 7b 7b 7b 0d 0a 20 20 20 20 20 20 20 20 40 6f 75 74 70 ut..........#.{{{..........@outp
d120 75 74 5f 61 6c 6c 6f 77 65 64 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 40 62 75 66 66 ut_allowed.=.true..........@buff
d140 65 72 20 3d 20 5b 5d 3b 20 23 20 57 65 20 75 73 65 20 61 6e 20 61 72 72 61 79 20 61 73 20 62 75 er.=.[];.#.We.use.an.array.as.bu
d160 66 66 65 72 2c 20 62 65 63 61 75 73 65 20 69 74 27 73 20 6d 6f 72 65 20 70 65 72 66 6f 72 6d 61 ffer,.because.it's.more.performa
d180 6e 74 20 3a 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 65 67 69 6e 0d 0a 20 20 20 20 20 20 20 20 nt.:)............begin..........
d1a0 20 20 20 20 79 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 72 65 73 63 75 65 20 45 78 63 65 70 74 ....yield..........rescue.Except
d1c0 69 6f 6e 20 3d 3e 20 65 78 63 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 ion.=>.exception..............$s
d1e0 74 64 65 72 72 2e 70 75 74 73 20 22 52 75 62 79 20 65 78 63 65 70 74 69 6f 6e 20 72 65 73 63 75 tderr.puts."Ruby.exception.rescu
d200 65 64 20 28 23 7b 65 78 63 65 70 74 69 6f 6e 2e 63 6c 61 73 73 7d 29 3a 20 23 7b 65 78 63 65 70 ed.(#{exception.class}):.#{excep
d220 74 69 6f 6e 2e 6d 65 73 73 61 67 65 7d 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 74 64 tion.message}"..............$std
d240 65 72 72 2e 70 75 74 73 20 65 78 63 65 70 74 69 6f 6e 2e 62 61 63 6b 74 72 61 63 65 2e 6a 6f 69 err.puts.exception.backtrace.joi
d260 6e 28 22 5c 6e 22 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f n("\n")................unless.@o
d280 75 74 70 75 74 5f 73 74 61 72 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 utput_started..................s
d2a0 65 6c 66 2e 73 65 74 73 74 61 74 75 73 28 35 30 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 elf.setstatus(500)..............
d2c0 20 20 20 20 40 68 65 61 64 65 72 20 3d 20 7b 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e ....@header.=.{}..............en
d2e0 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 28 40 73 65 74 74 69 6e d................unless.(@settin
d300 67 73 2e 68 61 73 5f 6b 65 79 3f 28 22 68 69 64 65 20 65 72 72 6f 72 73 22 29 20 61 6e 64 20 40 gs.has_key?("hide.errors").and.@
d320 73 65 74 74 69 6e 67 73 5b 22 68 69 64 65 20 65 72 72 6f 72 73 22 5d 20 3d 3d 20 74 72 75 65 29 settings["hide.errors"].==.true)
d340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f 75 74 70 75 74 ..................unless.@output
d360 5f 73 74 61 72 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 _started......................se
d380 6c 66 2e 68 65 61 64 65 72 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 lf.header("Content-Type:.text/ht
d3a0 6d 6c 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 ml")......................self.p
d3c0 75 74 73 20 22 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20 50 55 42 4c 49 43 20 5c 22 2d 2f 2f uts."<!DOCTYPE.HTML.PUBLIC.\"-//
d3e0 57 33 43 2f 2f 44 54 44 20 48 54 4d 4c 20 34 2e 30 31 20 53 74 72 69 63 74 2f 2f 45 4e 5c 22 20 W3C//DTD.HTML.4.01.Strict//EN\".
d400 5c 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 54 52 2f 68 74 6d 6c 34 2f 73 74 72 \"http://www.w3.org/TR/html4/str
d420 69 63 74 2e 64 74 64 5c 22 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ict.dtd\">".....................
d440 20 73 65 6c 66 2e 70 75 74 73 20 22 3c 68 74 6d 6c 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .self.puts."<html>".............
d460 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 3c 68 65 61 64 3e 22 0d 0a 20 20 20 .........self.puts."<head>".....
d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 3c 74 69 74 .................self.puts."<tit
d4a0 6c 65 3e 35 30 30 20 49 6e 74 65 72 6e 61 6c 20 53 65 72 76 65 72 20 45 72 72 6f 72 3c 2f 74 69 le>500.Internal.Server.Error</ti
d4c0 74 6c 65 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e tle>"......................self.
d4e0 70 75 74 73 20 22 3c 2f 68 65 61 64 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 puts."</head>"..................
d500 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 3c 62 6f 64 79 3e 22 0d 0a 20 20 20 20 20 20 20 20 ....self.puts."<body>"..........
d520 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 ........end..................if.
d540 40 68 65 61 64 65 72 2e 68 61 73 5f 6b 65 79 3f 28 22 63 6f 6e 74 65 6e 74 2d 74 79 70 65 22 29 @header.has_key?("content-type")
d560 20 61 6e 64 20 28 40 68 65 61 64 65 72 5b 22 63 6f 6e 74 65 6e 74 2d 74 79 70 65 22 5d 20 3d 7e .and.(@header["content-type"].=~
d580 20 2f 5e 74 65 78 74 5c 2f 68 74 6d 6c 2f 69 29 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 20 ./^text\/html/i).==.0...........
d5a0 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 3c 68 31 3e 49 6e 74 65 72 6e ...........self.puts."<h1>Intern
d5c0 61 6c 20 53 65 72 76 65 72 20 45 72 72 6f 72 3c 2f 68 31 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 al.Server.Error</h1>"...........
d5e0 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 3c 70 3e 54 68 65 20 73 65 72 ...........self.puts."<p>The.ser
d600 76 65 72 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 ver.encountered.an.exception.and
d620 20 77 61 73 20 75 6e 61 62 6c 65 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 79 6f 75 72 20 72 65 71 .was.unable.to.complete.your.req
d640 75 65 73 74 2e 3c 2f 70 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 uest.</p>"......................
d660 73 65 6c 66 2e 70 75 74 73 20 22 3c 70 3e 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 68 61 73 20 self.puts."<p>The.exception.has.
d680 70 72 6f 76 69 64 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 provided.the.following.informati
d6a0 6f 6e 3a 3c 2f 70 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 on:</p>"......................se
d6c0 6c 66 2e 70 75 74 73 20 22 3c 70 72 65 20 73 74 79 6c 65 3d 5c 22 62 61 63 6b 67 72 6f 75 6e 64 lf.puts."<pre.style=\"background
d6e0 3a 20 23 46 46 43 43 43 43 3b 20 62 6f 72 64 65 72 3a 20 62 6c 61 63 6b 20 73 6f 6c 69 64 20 32 :.#FFCCCC;.border:.black.solid.2
d700 70 78 3b 20 6d 61 72 67 69 6e 2d 6c 65 66 74 3a 20 32 63 6d 3b 20 6d 61 72 67 69 6e 2d 72 69 67 px;.margin-left:.2cm;.margin-rig
d720 68 74 3a 20 32 63 6d 3b 20 70 61 64 64 69 6e 67 3a 20 32 6d 6d 3b 5c 22 3e 3c 62 3e 23 7b 65 78 ht:.2cm;.padding:.2mm;\"><b>#{ex
d740 63 65 70 74 69 6f 6e 2e 63 6c 61 73 73 7d 3c 2f 62 3e 3a 20 23 7b 65 78 63 65 70 74 69 6f 6e 2e ception.class}</b>:.#{exception.
d760 6d 65 73 73 61 67 65 7d 20 3c 62 3e 6f 6e 3c 2f 62 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 message}.<b>on</b>".............
d780 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .........self.puts..............
d7a0 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 23 7b 65 78 63 65 70 74 69 6f 6e 2e 62 ........self.puts."#{exception.b
d7c0 61 63 6b 74 72 61 63 65 2e 6a 6f 69 6e 28 22 5c 6e 22 29 7d 3c 2f 70 72 65 3e 22 0d 0a 20 20 20 acktrace.join("\n")}</pre>".....
d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 3c 2f 62 6f .................self.puts."</bo
d800 64 79 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 dy>"......................self.p
d820 75 74 73 20 22 3c 2f 68 74 6d 6c 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 uts."</html>"..................e
d840 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 lse......................self.pu
d860 74 73 20 22 54 68 65 20 73 65 72 76 65 72 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 6e 20 65 78 ts."The.server.encountered.an.ex
d880 63 65 70 74 69 6f 6e 20 61 6e 64 20 77 61 73 20 75 6e 61 62 6c 65 20 74 6f 20 63 6f 6d 70 6c 65 ception.and.was.unable.to.comple
d8a0 74 65 20 79 6f 75 72 20 72 65 71 75 65 73 74 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 te.your.request"................
d8c0 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 22 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 68 ......self.puts."The.exception.h
d8e0 61 73 20 70 72 6f 76 69 64 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d as.provided.the.following.inform
d900 61 74 69 6f 6e 3a 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c ation:"......................sel
d920 66 2e 70 75 74 73 20 22 23 7b 65 78 63 65 70 74 69 6f 6e 2e 63 6c 61 73 73 7d 3a 20 23 7b 65 78 f.puts."#{exception.class}:.#{ex
d940 63 65 70 74 69 6f 6e 2e 6d 65 73 73 61 67 65 7d 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ception.message}"...............
d960 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .......self.puts................
d980 20 20 20 20 20 20 73 65 6c 66 2e 70 75 74 73 20 65 78 63 65 70 74 69 6f 6e 2e 62 61 63 6b 74 72 ......self.puts.exception.backtr
d9a0 61 63 65 2e 6a 6f 69 6e 28 22 5c 6e 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ace.join("\n")..................
d9c0 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e end..............end..........en
d9e0 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 40 73 65 74 74 69 6e 67 73 5b 22 63 61 63 68 65 d............if.@settings["cache
da00 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 40 62 75 66 66 65 72 "]..............buffer.=.@buffer
da20 2e 6a 6f 69 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c 65 73 73 20 40 6f 75 74 .join................unless.@out
da40 70 75 74 5f 73 74 61 72 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 6c put_started..................unl
da60 65 73 73 20 40 68 65 61 64 65 72 2e 68 61 73 5f 6b 65 79 3f 28 22 63 6f 6e 74 65 6e 74 2d 6c 65 ess.@header.has_key?("content-le
da80 6e 67 74 68 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 ngth")......................self
daa0 2e 68 65 61 64 65 72 28 22 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 3a 20 23 7b 62 75 66 66 65 .header("content-length:.#{buffe
dac0 72 2e 6c 65 6e 67 74 68 7d 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 r.length}")..................end
dae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 48 65 61 64 65 72 73 0d ....................sendHeaders.
db00 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 .............end..............$s
db20 74 64 6f 75 74 2e 70 72 69 6e 74 28 62 75 66 66 65 72 29 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 tdout.print(buffer)..........els
db40 69 66 20 21 40 6f 75 74 70 75 74 5f 73 74 61 72 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 if.!@output_started.............
db60 20 73 65 6e 64 48 65 61 64 65 72 73 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 .sendHeaders..........end.......
db80 20 20 20 40 6f 75 74 70 75 74 5f 61 6c 6c 6f 77 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 ...@output_allowed.=.false;.....
dba0 20 20 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 44 65 63 .....#.}}}......end........#.Dec
dbc0 6f 64 65 73 20 55 52 4c 20 65 6e 63 6f 64 65 64 20 64 61 74 61 2c 20 25 32 30 20 66 6f 72 20 65 odes.URL.encoded.data,.%20.for.e
dbe0 78 61 6d 70 6c 65 20 73 74 61 6e 64 73 20 66 6f 72 20 61 20 73 70 61 63 65 2e 0d 0a 20 20 20 20 xample.stands.for.a.space.......
dc00 64 65 66 20 52 77 65 62 2e 75 6e 65 73 63 61 70 65 28 73 74 72 29 0d 0a 20 20 20 20 20 20 20 20 def.Rweb.unescape(str)..........
dc20 23 20 7b 7b 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 64 65 66 69 6e 65 64 3f 20 73 74 72 20 61 #.{{{..........if.defined?.str.a
dc40 6e 64 20 73 74 72 2e 69 73 5f 61 3f 20 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nd.str.is_a?.String.............
dc60 20 73 74 72 2e 67 73 75 62 21 28 2f 5c 2b 2f 2c 20 22 20 22 29 0d 0a 20 20 20 20 20 20 20 20 20 .str.gsub!(/\+/,.".")...........
dc80 20 20 20 73 74 72 2e 67 73 75 62 28 2f 25 2e 7b 32 7d 2f 29 20 64 6f 20 7c 20 73 20 7c 0d 0a 20 ...str.gsub(/%.{2}/).do.|.s.|...
dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 5b 31 2c 32 5d 2e 68 65 78 2e 63 68 72 0d 0a 20 ...............s[1,2].hex.chr...
dcc0 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 ...........end..........end.....
dce0 20 20 20 20 20 23 20 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 .....#.}}}......end........prote
dd00 63 74 65 64 0d 0a 20 20 20 20 64 65 66 20 73 65 6e 64 48 65 61 64 65 72 73 0d 0a 20 20 20 20 20 cted......def.sendHeaders.......
dd20 20 20 20 23 20 7b 7b 7b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 43 6f 6f 6b 69 65 2e 64 69 73 61 6c ...#.{{{............Cookie.disal
dd40 6c 6f 77 20 23 20 6e 6f 20 6d 6f 72 65 20 63 6f 6f 6b 69 65 73 20 63 61 6e 20 62 65 20 73 65 74 low.#.no.more.cookies.can.be.set
dd60 20 6f 72 20 6d 6f 64 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20 69 66 20 21 28 40 73 65 74 74 .or.modified..........if.!(@sett
dd80 69 6e 67 73 2e 68 61 73 5f 6b 65 79 3f 28 22 73 69 6c 65 6e 74 22 29 20 61 6e 64 20 40 73 65 74 ings.has_key?("silent").and.@set
dda0 74 69 6e 67 73 5b 22 73 69 6c 65 6e 74 22 5d 20 3d 3d 20 74 72 75 65 29 20 61 6e 64 20 21 40 68 tings["silent"].==.true).and.!@h
ddc0 65 61 64 65 72 2e 68 61 73 5f 6b 65 79 3f 28 22 78 2d 70 6f 77 65 72 65 64 2d 62 79 22 29 0d 0a eader.has_key?("x-powered-by")..
dde0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 40 6d 6f 64 5f 72 75 62 79 0d 0a 20 20 20 20 20 20 ............if.@mod_ruby........
de00 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 28 22 78 2d 70 6f 77 65 72 65 64 2d 62 79 3a 20 ..........header("x-powered-by:.
de20 23 7b 52 57 45 42 7d 20 28 52 75 62 79 2f 23 7b 52 55 42 59 5f 56 45 52 53 49 4f 4e 7d 2c 20 23 #{RWEB}.(Ruby/#{RUBY_VERSION},.#
de40 7b 4d 4f 44 5f 52 55 42 59 7d 29 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 {MOD_RUBY})");..............else
de60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 28 22 78 2d 70 6f 77 65 ..................header("x-powe
de80 72 65 64 2d 62 79 3a 20 23 7b 52 57 45 42 7d 20 28 52 75 62 79 2f 23 7b 52 55 42 59 5f 56 45 52 red-by:.#{RWEB}.(Ruby/#{RUBY_VER
dea0 53 49 4f 4e 7d 29 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 SION})");..............end......
dec0 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 40 6f 75 74 70 75 74 5f 6d 65 ....end............if.@output_me
dee0 74 68 6f 64 20 3d 3d 20 22 70 68 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 40 thod.==."ph"..............if.((@
df00 73 74 61 74 75 73 20 3d 3d 20 6e 69 6c 20 6f 72 20 40 73 74 61 74 75 73 20 3d 3d 20 32 30 30 29 status.==.nil.or.@status.==.200)
df20 20 61 6e 64 20 21 40 68 65 61 64 65 72 2e 68 61 73 5f 6b 65 79 3f 28 22 63 6f 6e 74 65 6e 74 2d .and.!@header.has_key?("content-
df40 74 79 70 65 22 29 20 61 6e 64 20 21 40 68 65 61 64 65 72 2e 68 61 73 5f 6b 65 79 3f 28 22 6c 6f type").and.!@header.has_key?("lo
df60 63 61 74 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 cation"))..................heade
df80 72 28 22 63 6f 6e 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c 22 29 0d 0a 20 20 r("content-type:.text/html")....
dfa0 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 ..........end................if.
dfc0 40 73 74 61 74 75 73 20 21 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 @status.!=.nil..................
dfe0 24 73 74 64 6f 75 74 2e 70 72 69 6e 74 20 22 53 74 61 74 75 73 3a 20 23 7b 40 73 74 61 74 75 73 $stdout.print."Status:.#{@status
e000 7d 20 23 7b 40 72 65 61 73 6f 6e 50 68 72 61 73 65 7d 5c 72 5c 6e 22 0d 0a 20 20 20 20 20 20 20 }.#{@reasonPhrase}\r\n".........
e020 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 68 65 61 64 65 72 2e .....end................@header.
e040 65 61 63 68 20 64 6f 20 7c 6b 65 79 2c 20 76 61 6c 75 65 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 each.do.|key,.value|............
e060 20 20 20 20 20 20 6b 65 79 20 3d 20 6b 65 79 20 2a 31 20 23 20 22 75 6e 66 72 65 65 7a 65 22 20 ......key.=.key.*1.#."unfreeze".
e080 6b 65 79 20 3a 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 5b 30 5d 20 3d key.:)..................key[0].=
e0a0 20 6b 65 79 5b 30 2c 31 5d 2e 75 70 63 61 73 65 21 5b 30 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .key[0,1].upcase![0]............
e0c0 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6b 65 79 2e 67 73 75 62 28 2f 2d 5b 61 2d 7a 5d 2f 29 ........key.=.key.gsub(/-[a-z]/)
e0e0 20 64 6f 20 7c 63 68 61 72 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .do.|char|......................
e100 22 2d 22 20 2b 20 63 68 61 72 5b 31 2c 31 5d 2e 75 70 63 61 73 65 0d 0a 20 20 20 20 20 20 20 20 "-".+.char[1,1].upcase..........
e120 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 ........end....................$
e140 73 74 64 6f 75 74 2e 70 72 69 6e 74 20 22 23 7b 6b 65 79 7d 3a 20 23 7b 76 61 6c 75 65 7d 5c 72 stdout.print."#{key}:.#{value}\r
e160 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"..............end............
e180 20 20 63 6f 6f 6b 69 65 73 20 3d 20 43 6f 6f 6b 69 65 2e 67 65 74 48 74 74 70 48 65 61 64 65 72 ..cookies.=.Cookie.getHttpHeader
e1a0 20 23 20 47 65 74 20 61 6c 6c 20 63 6f 6f 6b 69 65 73 20 61 73 20 61 6e 20 48 54 54 50 20 48 65 .#.Get.all.cookies.as.an.HTTP.He
e1c0 61 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 63 6f 6f 6b 69 65 73 0d 0a 20 20 ader..............if.cookies....
e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 73 74 64 6f 75 74 2e 70 72 69 6e 74 20 63 6f 6f 6b ..............$stdout.print.cook
e200 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ies..............end............
e220 20 20 20 20 24 73 74 64 6f 75 74 2e 70 72 69 6e 74 20 22 5c 72 5c 6e 22 0d 0a 0d 0a 20 20 20 20 ....$stdout.print."\r\n"........
e240 20 20 20 20 65 6c 73 69 66 20 40 6f 75 74 70 75 74 5f 6d 65 74 68 6f 64 20 3d 3d 20 22 6e 70 68 ....elsif.@output_method.==."nph
e260 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 40 6f 75 74 70 75 74 5f 6d 65 74 68 6f 64 20 "..........elsif.@output_method.
e280 3d 3d 20 22 6d 6f 64 5f 72 75 62 79 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 41 ==."mod_ruby"..............r.=.A
e2a0 70 61 63 68 65 2e 72 65 71 75 65 73 74 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 pache.request................if.
e2c0 28 28 40 73 74 61 74 75 73 20 3d 3d 20 6e 69 6c 20 6f 72 20 40 73 74 61 74 75 73 20 3d 3d 20 32 ((@status.==.nil.or.@status.==.2
e2e0 30 30 29 20 61 6e 64 20 21 40 68 65 61 64 65 72 2e 68 61 73 5f 6b 65 79 3f 28 22 63 6f 6e 74 65 00).and.!@header.has_key?("conte
e300 6e 74 2d 74 79 70 65 22 29 20 61 6e 64 20 21 40 68 65 61 64 65 72 2e 68 61 73 5f 6b 65 79 3f 28 nt-type").and.!@header.has_key?(
e320 22 6c 6f 63 61 74 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 "location"))..................he
e340 61 64 65 72 28 22 74 65 78 74 2f 68 74 6d 6c 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 ader("text/html")..............e
e360 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 40 73 74 61 74 75 73 20 21 3d 20 nd................if.@status.!=.
e380 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 2e 73 74 61 74 75 73 5f 6c 69 nil..................r.status_li
e3a0 6e 65 20 3d 20 22 23 7b 40 73 74 61 74 75 73 7d 20 23 7b 40 72 65 61 73 6f 6e 50 68 72 61 73 65 ne.=."#{@status}.#{@reasonPhrase
e3c0 7d 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }"..............end.............
e3e0 20 20 20 72 2e 73 65 6e 64 5f 68 74 74 70 5f 68 65 61 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 ...r.send_http_header...........
e400 20 20 20 40 68 65 61 64 65 72 2e 65 61 63 68 20 64 6f 20 7c 6b 65 79 2c 20 76 61 6c 75 65 7c 0d ...@header.each.do.|key,.value|.
e420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6b 65 79 20 2a 31 20 23 20 .................key.=.key.*1.#.
e440 22 75 6e 66 72 65 65 7a 65 22 20 6b 65 79 20 3a 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 "unfreeze".key.:)...............
e460 20 20 20 20 20 6b 65 79 5b 30 5d 20 3d 20 6b 65 79 5b 30 2c 31 5d 2e 75 70 63 61 73 65 21 5b 30 .....key[0].=.key[0,1].upcase![0
e480 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6b 65 79 2e 67 73 75 ]..................key.=.key.gsu
e4a0 62 28 2f 2d 5b 61 2d 7a 5d 2f 29 20 64 6f 20 7c 63 68 61 72 7c 0d 0a 20 20 20 20 20 20 20 20 20 b(/-[a-z]/).do.|char|...........
e4c0 20 20 20 20 20 20 20 20 20 20 20 22 2d 22 20 2b 20 63 68 61 72 5b 31 2c 31 5d 2e 75 70 63 61 73 ..........."-".+.char[1,1].upcas
e4e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 e..................end..........
e500 20 20 20 20 20 20 20 20 70 75 74 73 20 22 23 7b 6b 65 79 7d 3a 20 23 7b 76 61 6c 75 65 2e 63 6c ........puts."#{key}:.#{value.cl
e520 61 73 73 7d 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 2e 68 65 61 64 65 72 ass}"..................#r.header
e540 73 5f 6f 75 74 5b 6b 65 79 5d 20 3d 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s_out[key].=.value..............
e560 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 40 6f 75 74 70 75 end..........end..........@outpu
e580 74 5f 73 74 61 72 74 65 64 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 23 20 7d 7d 7d 0d t_started.=.true..........#.}}}.
e5a0 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 67 65 74 52 65 61 73 6f 6e 50 68 72 .....end........def.getReasonPhr
e5c0 61 73 65 20 28 73 74 61 74 75 73 29 0d 0a 20 20 20 20 20 20 20 20 23 20 7b 7b 7b 0d 0a 20 20 20 ase.(status)..........#.{{{.....
e5e0 20 20 20 20 20 69 66 20 73 74 61 74 75 73 20 3d 3d 20 31 30 30 0d 0a 20 20 20 20 20 20 20 20 20 .....if.status.==.100...........
e600 20 20 20 22 43 6f 6e 74 69 6e 75 65 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 ..."Continue"..........elsif.sta
e620 74 75 73 20 3d 3d 20 31 30 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53 77 69 74 63 68 69 tus.==.101.............."Switchi
e640 6e 67 20 50 72 6f 74 6f 63 6f 6c 73 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 ng.Protocols"..........elsif.sta
e660 74 75 73 20 3d 3d 20 32 30 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 4b 22 0d 0a 20 20 tus.==.200.............."OK"....
e680 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 32 30 31 0d 0a 20 20 20 20 20 ......elsif.status.==.201.......
e6a0 20 20 20 20 20 20 20 22 43 72 65 61 74 65 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 ......."Created"..........elsif.
e6c0 73 74 61 74 75 73 20 3d 3d 20 32 30 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 41 63 63 65 status.==.202.............."Acce
e6e0 70 74 65 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 32 pted"..........elsif.status.==.2
e700 30 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 6e 2d 41 75 74 68 6f 72 69 74 61 74 69 03.............."Non-Authoritati
e720 76 65 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 ve.Information"..........elsif.s
e740 74 61 74 75 73 20 3d 3d 20 32 30 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20 43 6f tatus.==.204.............."No.Co
e760 6e 74 65 6e 74 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 ntent"..........elsif.status.==.
e780 32 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 73 65 74 20 43 6f 6e 74 65 6e 74 22 205.............."Reset.Content"
e7a0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 32 30 36 0d 0a 20 ..........elsif.status.==.206...
e7c0 20 20 20 20 20 20 20 20 20 20 20 22 50 61 72 74 69 61 6c 20 43 6f 6e 74 65 6e 74 22 0d 0a 20 20 ..........."Partial.Content"....
e7e0 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 33 30 30 0d 0a 20 20 20 20 20 ......elsif.status.==.300.......
e800 20 20 20 20 20 20 20 22 4d 75 6c 74 69 70 6c 65 20 43 68 6f 69 63 65 73 22 0d 0a 20 20 20 20 20 ......."Multiple.Choices".......
e820 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 33 30 31 0d 0a 20 20 20 20 20 20 20 20 ...elsif.status.==.301..........
e840 20 20 20 20 22 4d 6f 76 65 64 20 50 65 72 6d 61 6e 65 6e 74 6c 79 22 0d 0a 20 20 20 20 20 20 20 ...."Moved.Permanently".........
e860 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 33 30 32 0d 0a 20 20 20 20 20 20 20 20 20 20 .elsif.status.==.302............
e880 20 20 22 46 6f 75 6e 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 .."Found"..........elsif.status.
e8a0 3d 3d 20 33 30 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53 65 65 20 4f 74 68 65 72 22 0d ==.303.............."See.Other".
e8c0 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 33 30 34 0d 0a 20 20 .........elsif.status.==.304....
e8e0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 74 20 4d 6f 64 69 66 69 65 64 22 0d 0a 20 20 20 20 20 20 .........."Not.Modified"........
e900 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 33 30 35 0d 0a 20 20 20 20 20 20 20 20 20 ..elsif.status.==.305...........
e920 20 20 20 22 55 73 65 20 50 72 6f 78 79 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 ..."Use.Proxy"..........elsif.st
e940 61 74 75 73 20 3d 3d 20 33 30 37 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 54 65 6d 70 6f 72 atus.==.307.............."Tempor
e960 61 72 79 20 52 65 64 69 72 65 63 74 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 ary.Redirect"..........elsif.sta
e980 74 75 73 20 3d 3d 20 34 30 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 64 20 52 65 71 tus.==.400.............."Bad.Req
e9a0 75 65 73 74 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 34 uest"..........elsif.status.==.4
e9c0 30 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 61 75 74 68 6f 72 69 7a 65 64 22 0d 0a 01.............."Unauthorized"..
e9e0 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 34 30 32 0d 0a 20 20 20 ........elsif.status.==.402.....
ea00 20 20 20 20 20 20 20 20 20 22 50 61 79 6d 65 6e 74 20 52 65 71 75 69 72 65 64 22 0d 0a 20 20 20 ........."Payment.Required".....
ea20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 34 30 33 0d 0a 20 20 20 20 20 20 .....elsif.status.==.403........
ea40 20 20 20 20 20 20 22 46 6f 72 62 69 64 64 65 6e 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 ......"Forbidden"..........elsif
ea60 20 73 74 61 74 75 73 20 3d 3d 20 34 30 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 74 .status.==.404.............."Not
ea80 20 46 6f 75 6e 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d .Found"..........elsif.status.==
eaa0 20 34 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4d 65 74 68 6f 64 20 4e 6f 74 20 41 6c .405.............."Method.Not.Al
eac0 6c 6f 77 65 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 lowed"..........elsif.status.==.
eae0 34 30 36 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 74 20 41 63 63 65 70 74 61 62 6c 65 406.............."Not.Acceptable
eb00 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 34 30 37 0d 0a "..........elsif.status.==.407..
eb20 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 6f 78 79 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f ............"Proxy.Authenticatio
eb40 6e 20 52 65 71 75 69 72 65 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 n.Required"..........elsif.statu
eb60 73 20 3d 3d 20 34 30 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 71 75 65 73 74 20 54 s.==.408.............."Request.T
eb80 69 6d 65 2d 6f 75 74 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d ime-out"..........elsif.status.=
eba0 3d 20 34 30 39 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 6c 69 63 74 22 0d 0a 20 =.409.............."Conflict"...
ebc0 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 34 31 30 0d 0a 20 20 20 20 .......elsif.status.==.410......
ebe0 20 20 20 20 20 20 20 20 22 47 6f 6e 65 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 ........"Gone"..........elsif.st
ec00 61 74 75 73 20 3d 3d 20 34 31 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 65 6e 67 74 68 atus.==.411.............."Length
ec20 20 52 65 71 75 69 72 65 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 .Required"..........elsif.status
ec40 20 3d 3d 20 34 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 65 63 6f 6e 64 69 74 69 .==.412.............."Preconditi
ec60 6f 6e 20 46 61 69 6c 65 64 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 on.Failed"..........elsif.status
ec80 20 3d 3d 20 34 31 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 71 75 65 73 74 20 45 6e .==.413.............."Request.En
eca0 74 69 74 79 20 54 6f 6f 20 4c 61 72 67 65 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 tity.Too.Large"..........elsif.s
ecc0 74 61 74 75 73 20 3d 3d 20 34 31 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 71 75 65 tatus.==.414.............."Reque
ece0 73 74 2d 55 52 49 20 54 6f 6f 20 4c 61 72 67 65 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 st-URI.Too.Large"..........elsif
ed00 20 73 74 61 74 75 73 20 3d 3d 20 34 31 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 .status.==.415.............."Uns
ed20 75 70 70 6f 72 74 65 64 20 4d 65 64 69 61 20 54 79 70 65 22 0d 0a 20 20 20 20 20 20 20 20 65 6c upported.Media.Type"..........el
ed40 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 34 31 36 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 sif.status.==.416.............."
ed60 52 65 71 75 65 73 74 65 64 20 72 61 6e 67 65 20 6e 6f 74 20 73 61 74 69 73 66 69 61 62 6c 65 22 Requested.range.not.satisfiable"
ed80 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 34 31 37 0d 0a 20 ..........elsif.status.==.417...
eda0 20 20 20 20 20 20 20 20 20 20 20 22 45 78 70 65 63 74 61 74 69 6f 6e 20 46 61 69 6c 65 64 22 0d ..........."Expectation.Failed".
edc0 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 35 30 30 0d 0a 20 20 .........elsif.status.==.500....
ede0 20 20 20 20 20 20 20 20 20 20 22 49 6e 74 65 72 6e 61 6c 20 53 65 72 76 65 72 20 45 72 72 6f 72 .........."Internal.Server.Error
ee00 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 35 30 31 0d 0a "..........elsif.status.==.501..
ee20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 74 20 49 6d 70 6c 65 6d 65 6e 74 65 64 22 0d 0a 20 ............"Not.Implemented"...
ee40 20 20 20 20 20 20 20 65 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 35 30 32 0d 0a 20 20 20 20 .......elsif.status.==.502......
ee60 20 20 20 20 20 20 20 20 22 42 61 64 20 47 61 74 65 77 61 79 22 0d 0a 20 20 20 20 20 20 20 20 65 ........"Bad.Gateway"..........e
ee80 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 35 30 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 lsif.status.==.503..............
eea0 22 53 65 72 76 69 63 65 20 55 6e 61 76 61 69 6c 61 62 6c 65 22 0d 0a 20 20 20 20 20 20 20 20 65 "Service.Unavailable"..........e
eec0 6c 73 69 66 20 73 74 61 74 75 73 20 3d 3d 20 35 30 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 lsif.status.==.504..............
eee0 22 47 61 74 65 77 61 79 20 54 69 6d 65 2d 6f 75 74 22 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 "Gateway.Time-out"..........elsi
ef00 66 20 73 74 61 74 75 73 20 3d 3d 20 35 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 48 54 f.status.==.505.............."HT
ef20 54 50 20 56 65 72 73 69 6f 6e 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 22 0d 0a 20 20 20 20 20 TP.Version.not.supported".......
ef40 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 20 22 55 6e 6b 6e ...else..............raise."Unkn
ef60 6f 77 6e 20 53 74 61 74 75 73 63 6f 64 65 2e 20 53 65 65 20 68 74 74 70 3a 2f 2f 77 77 77 2e 77 own.Statuscode..See.http://www.w
ef80 33 2e 6f 72 67 2f 50 72 6f 74 6f 63 6f 6c 73 2f 72 66 63 32 36 31 36 2f 72 66 63 32 36 31 36 2d 3.org/Protocols/rfc2616/rfc2616-
efa0 73 65 63 36 2e 68 74 6d 6c 23 73 65 63 36 2e 31 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d sec6.html#sec6.1.for.more.inform
efc0 61 74 69 6f 6e 2e 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 ation."..........end..........#.
efe0 7d 7d 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 63 6c 61 73 73 20 43 6f 6f 6b 69 }}}......end..end....class.Cooki
f000 65 0d 0a 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 6e 61 6d 65 2c 20 3a 76 61 6c 75 65 2c 20 3a e...attr_reader.:name,.:value,.:
f020 6d 61 78 61 67 65 2c 20 3a 70 61 74 68 2c 20 3a 64 6f 6d 61 69 6e 2c 20 3a 73 65 63 75 72 65 2c maxage,.:path,.:domain,.:secure,
f040 20 3a 63 6f 6d 6d 65 6e 74 0d 0a 0d 0a 09 23 20 53 65 74 73 20 61 20 63 6f 6f 6b 69 65 2e 20 50 .:comment.....#.Sets.a.cookie..P
f060 6c 65 61 73 65 20 73 65 65 20 62 65 6c 6f 77 20 66 6f 72 20 64 65 74 61 69 6c 73 20 6f 66 20 74 lease.see.below.for.details.of.t
f080 68 65 20 61 74 74 72 69 62 75 74 65 73 2e 0d 0a 09 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 20 he.attributes....def.initialize.
f0a0 28 6e 61 6d 65 2c 20 76 61 6c 75 65 20 3d 20 6e 69 6c 2c 20 6d 61 78 61 67 65 20 3d 20 6e 69 6c (name,.value.=.nil,.maxage.=.nil
f0c0 2c 20 70 61 74 68 20 3d 20 6e 69 6c 2c 20 64 6f 6d 61 69 6e 20 3d 20 6e 69 6c 2c 20 73 65 63 75 ,.path.=.nil,.domain.=.nil,.secu
f0e0 72 65 20 3d 20 66 61 6c 73 65 29 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 09 23 20 48 54 54 50 20 68 re.=.false)....#.{{{....#.HTTP.h
f100 65 61 64 65 72 73 20 28 43 6f 6f 6b 69 65 73 20 61 72 65 20 61 20 48 54 54 50 20 68 65 61 64 65 eaders.(Cookies.are.a.HTTP.heade
f120 72 29 20 63 61 6e 20 6f 6e 6c 79 20 73 65 74 2c 20 77 68 69 6c 65 20 6e 6f 20 63 6f 6e 74 65 6e r).can.only.set,.while.no.conten
f140 74 0d 0a 09 09 23 20 69 73 20 73 65 6e 64 2e 20 53 6f 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 t....#.is.send..So.an.exception.
f160 77 69 6c 6c 20 62 65 20 72 61 69 73 65 64 2c 20 77 68 65 6e 20 40 40 61 6c 6c 6f 77 65 64 20 69 will.be.raised,.when.@@allowed.i
f180 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 0d 0a 09 09 23 20 61 6e 64 20 61 20 6e 65 77 20 63 6f s.set.to.false....#.and.a.new.co
f1a0 6f 6b 69 65 20 68 61 73 20 73 65 74 2e 0d 0a 09 09 75 6e 6c 65 73 73 20 64 65 66 69 6e 65 64 3f okie.has.set.....unless.defined?
f1c0 28 40 40 61 6c 6c 6f 77 65 64 29 0d 0a 09 09 09 40 40 61 6c 6c 6f 77 65 64 20 3d 20 74 72 75 65 (@@allowed).....@@allowed.=.true
f1e0 0d 0a 09 09 65 6e 64 0d 0a 09 09 75 6e 6c 65 73 73 20 40 40 61 6c 6c 6f 77 65 64 0d 0a 09 09 09 ....end....unless.@@allowed.....
f200 72 61 69 73 65 20 22 59 6f 75 20 63 61 6e 27 74 20 73 65 74 20 63 6f 6f 6b 69 65 73 20 61 66 74 raise."You.can't.set.cookies.aft
f220 65 72 20 74 68 65 20 48 54 54 50 20 68 65 61 64 65 72 73 20 61 72 65 20 73 65 6e 64 2e 22 0d 0a er.the.HTTP.headers.are.send."..
f240 09 09 65 6e 64 0d 0a 0d 0a 09 09 75 6e 6c 65 73 73 20 64 65 66 69 6e 65 64 3f 28 40 40 6c 69 73 ..end......unless.defined?(@@lis
f260 74 29 0d 0a 09 09 09 40 40 6c 69 73 74 20 3d 20 5b 5d 0d 0a 09 09 65 6e 64 0d 0a 09 09 40 40 6c t).....@@list.=.[]....end....@@l
f280 69 73 74 20 2b 3d 20 5b 73 65 6c 66 5d 0d 0a 0d 0a 09 09 75 6e 6c 65 73 73 20 64 65 66 69 6e 65 ist.+=.[self]......unless.define
f2a0 64 3f 28 40 40 74 79 70 65 29 0d 0a 09 09 09 40 40 74 79 70 65 20 3d 20 22 6e 65 74 73 63 61 70 d?(@@type).....@@type.=."netscap
f2c0 65 22 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 75 6e 6c 65 73 73 20 6e 61 6d 65 2e 63 6c 61 73 73 e"....end......unless.name.class
f2e0 20 3d 3d 20 53 74 72 69 6e 67 0d 0a 09 09 09 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 .==.String.....raise.TypeError,.
f300 22 54 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 61 20 "The.name.of.a.cookie.must.be.a.
f320 73 74 72 69 6e 67 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a 09 09 69 66 20 76 61 6c string",.caller....end....if.val
f340 75 65 2e 63 6c 61 73 73 2e 73 75 70 65 72 63 6c 61 73 73 20 3d 3d 20 49 6e 74 65 67 65 72 20 7c ue.class.superclass.==.Integer.|
f360 7c 20 76 61 6c 75 65 2e 63 6c 61 73 73 20 3d 3d 20 46 6c 6f 61 74 0d 0a 09 09 09 76 61 6c 75 65 |.value.class.==.Float.....value
f380 20 3d 20 76 61 6c 75 65 2e 74 6f 5f 73 0d 0a 09 09 65 6c 73 69 66 20 76 61 6c 75 65 2e 63 6c 61 .=.value.to_s....elsif.value.cla
f3a0 73 73 20 21 3d 20 53 74 72 69 6e 67 20 26 26 20 76 61 6c 75 65 20 21 3d 20 6e 69 6c 0d 0a 09 09 ss.!=.String.&&.value.!=.nil....
f3c0 09 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 76 61 6c 75 65 20 6f 66 20 .raise.TypeError,."The.value.of.
f3e0 61 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 61 20 73 74 72 69 6e 67 2c 20 69 6e 74 65 67 a.cookie.must.be.a.string,.integ
f400 65 72 2c 20 66 6c 6f 61 74 20 6f 72 20 6e 69 6c 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 er,.float.or.nil",.caller....end
f420 0d 0a 09 09 69 66 20 6d 61 78 61 67 65 2e 63 6c 61 73 73 20 3d 3d 20 54 69 6d 65 0d 0a 09 09 09 ....if.maxage.class.==.Time.....
f440 6d 61 78 61 67 65 20 3d 20 6d 61 78 61 67 65 20 2d 20 54 69 6d 65 2e 6e 6f 77 0d 0a 09 09 65 6c maxage.=.maxage.-.Time.now....el
f460 73 69 66 20 21 6d 61 78 61 67 65 2e 63 6c 61 73 73 2e 73 75 70 65 72 63 6c 61 73 73 20 3d 3d 20 sif.!maxage.class.superclass.==.
f480 49 6e 74 65 67 65 72 20 20 7c 7c 20 21 6d 61 78 61 67 65 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 72 Integer..||.!maxage.==.nil.....r
f4a0 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 6d 61 78 61 67 65 20 64 61 74 65 aise.TypeError,."The.maxage.date
f4c0 20 6f 66 20 61 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 61 6e 20 49 6e 74 65 67 65 72 20 .of.a.cookie.must.be.an.Integer.
f4e0 6f 72 20 54 69 6d 65 20 6f 62 6a 65 63 74 20 6f 72 20 6e 69 6c 2e 22 2c 20 63 61 6c 6c 65 72 0d or.Time.object.or.nil.",.caller.
f500 0a 09 09 65 6e 64 0d 0a 09 09 75 6e 6c 65 73 73 20 70 61 74 68 2e 63 6c 61 73 73 20 3d 3d 20 53 ...end....unless.path.class.==.S
f520 74 72 69 6e 67 20 20 7c 7c 20 70 61 74 68 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 72 61 69 73 65 20 tring..||.path.==.nil.....raise.
f540 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 70 61 74 68 20 6f 66 20 61 20 63 6f 6f 6b 69 65 TypeError,."The.path.of.a.cookie
f560 20 6d 75 73 74 20 62 65 20 6e 69 6c 20 6f 72 20 61 20 73 74 72 69 6e 67 22 2c 20 63 61 6c 6c 65 .must.be.nil.or.a.string",.calle
f580 72 0d 0a 09 09 65 6e 64 0d 0a 09 09 75 6e 6c 65 73 73 20 64 6f 6d 61 69 6e 2e 63 6c 61 73 73 20 r....end....unless.domain.class.
f5a0 3d 3d 20 53 74 72 69 6e 67 20 20 7c 7c 20 64 6f 6d 61 69 6e 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 ==.String..||.domain.==.nil.....
f5c0 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 raise.TypeError,."The.value.of.a
f5e0 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 6e 69 6c 20 6f 72 20 61 20 73 74 72 69 6e 67 22 .cookie.must.be.nil.or.a.string"
f600 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a 09 09 75 6e 6c 65 73 73 20 73 65 63 75 72 65 ,.caller....end....unless.secure
f620 20 3d 3d 20 74 72 75 65 20 20 7c 7c 20 73 65 63 75 72 65 20 3d 3d 20 66 61 6c 73 65 0d 0a 09 09 .==.true..||.secure.==.false....
f640 09 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 73 65 63 75 72 65 20 66 69 .raise.TypeError,."The.secure.fi
f660 65 6c 64 20 6f 66 20 61 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 74 72 75 65 20 6f 72 20 eld.of.a.cookie.must.be.true.or.
f680 66 61 6c 73 65 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 40 6e 61 6d 65 false",.caller....end......@name
f6a0 2c 20 40 76 61 6c 75 65 2c 20 40 6d 61 78 61 67 65 2c 20 40 70 61 74 68 2c 20 40 64 6f 6d 61 69 ,.@value,.@maxage,.@path,.@domai
f6c0 6e 2c 20 40 73 65 63 75 72 65 20 3d 20 6e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 6d 61 78 61 67 65 n,.@secure.=.name,.value,.maxage
f6e0 2c 20 70 61 74 68 2c 20 64 6f 6d 61 69 6e 2c 20 73 65 63 75 72 65 0d 0a 09 09 40 63 6f 6d 6d 65 ,.path,.domain,.secure....@comme
f700 6e 74 20 3d 20 6e 69 6c 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 4d 6f nt.=.nil....#.}}}...end.....#.Mo
f720 64 69 66 69 65 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6f 6b 69 65 2e difies.the.value.of.this.cookie.
f740 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 73 74 6f .The.information.you.want.to.sto
f760 72 65 2e 20 49 66 20 74 68 65 0d 0a 09 23 20 76 61 6c 75 65 20 69 73 20 6e 69 6c 2c 20 74 68 65 re..If.the...#.value.is.nil,.the
f780 20 63 6f 6f 6b 69 65 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 63 .cookie.will.be.deleted.by.the.c
f7a0 6c 69 65 6e 74 2e 0d 0a 09 23 0d 0a 09 23 20 54 68 69 73 20 61 74 74 72 69 62 75 74 65 20 63 61 lient....#...#.This.attribute.ca
f7c0 6e 20 62 65 20 61 20 53 74 72 69 6e 67 2c 20 49 6e 74 65 67 65 72 20 6f 72 20 46 6c 6f 61 74 20 n.be.a.String,.Integer.or.Float.
f7e0 6f 62 6a 65 63 74 20 6f 72 20 6e 69 6c 2e 0d 0a 09 64 65 66 20 76 61 6c 75 65 3d 28 76 61 6c 75 object.or.nil....def.value=(valu
f800 65 29 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 09 69 66 20 76 61 6c 75 65 2e 63 6c 61 73 73 2e 73 75 e)....#.{{{....if.value.class.su
f820 70 65 72 63 6c 61 73 73 20 3d 3d 20 49 6e 74 65 67 65 72 20 7c 7c 20 76 61 6c 75 65 2e 63 6c 61 perclass.==.Integer.||.value.cla
f840 73 73 20 3d 3d 20 46 6c 6f 61 74 0d 0a 09 09 09 76 61 6c 75 65 20 3d 20 76 61 6c 75 65 2e 74 6f ss.==.Float.....value.=.value.to
f860 5f 73 0d 0a 09 09 65 6c 73 69 66 20 76 61 6c 75 65 2e 63 6c 61 73 73 20 21 3d 20 53 74 72 69 6e _s....elsif.value.class.!=.Strin
f880 67 20 26 26 20 76 61 6c 75 65 20 21 3d 20 6e 69 6c 0d 0a 09 09 09 72 61 69 73 65 20 54 79 70 65 g.&&.value.!=.nil.....raise.Type
f8a0 45 72 72 6f 72 2c 20 22 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6f 6b 69 65 20 6d 75 Error,."The.value.of.a.cookie.mu
f8c0 73 74 20 62 65 20 61 20 73 74 72 69 6e 67 2c 20 69 6e 74 65 67 65 72 2c 20 66 6c 6f 61 74 20 6f st.be.a.string,.integer,.float.o
f8e0 72 20 6e 69 6c 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a 09 09 40 76 61 6c 75 65 20 r.nil",.caller....end....@value.
f900 3d 20 76 61 6c 75 65 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 4d 6f 64 =.value....#.}}}...end.....#.Mod
f920 69 66 69 65 73 20 74 68 65 20 6d 61 78 61 67 65 20 6f 66 20 74 68 69 73 20 63 6f 6f 6b 69 65 2e ifies.the.maxage.of.this.cookie.
f940 20 54 68 69 73 20 61 74 74 72 69 62 75 74 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 6c 69 66 65 .This.attribute.defines.the.life
f960 74 69 6d 65 20 6f 66 0d 0a 09 23 20 74 68 65 20 63 6f 6f 6b 69 65 2c 20 69 6e 20 73 65 63 6f 6e time.of...#.the.cookie,.in.secon
f980 64 73 2e 20 41 20 76 61 6c 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68 65 20 63 6f 6f 6b 69 ds..A.value.of.0.means.the.cooki
f9a0 65 20 73 68 6f 75 6c 64 20 62 65 20 64 69 73 63 61 72 64 65 64 0d 0a 09 23 20 69 6d 65 64 69 61 e.should.be.discarded...#.imedia
f9c0 74 6c 79 2e 20 49 66 20 69 74 20 73 65 74 20 74 6f 20 6e 69 6c 2c 20 74 68 65 20 63 6f 6f 6b 69 tly..If.it.set.to.nil,.the.cooki
f9e0 65 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20 62 72 6f 77 73 e.will.be.deleted.when.the.brows
fa00 65 72 0d 0a 09 23 20 77 69 6c 6c 20 62 65 20 63 6c 6f 73 65 64 2e 0d 0a 09 23 0d 0a 09 23 20 41 er...#.will.be.closed....#...#.A
fa20 74 74 65 6e 74 69 6f 6e 3a 20 54 68 69 73 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d ttention:.This.is.different.from
fa40 20 6f 74 68 65 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6c 69 6b 65 20 50 48 50 2c .other.implementations.like.PHP,
fa60 20 77 68 65 72 65 20 79 6f 75 0d 0a 09 23 20 67 69 76 65 73 20 74 68 65 20 73 65 63 6f 6e 64 73 .where.you...#.gives.the.seconds
fa80 20 73 69 6e 63 65 20 31 2f 31 2f 31 39 37 30 20 30 3a 30 30 3a 30 30 20 47 4d 54 2e 0d 0a 09 23 .since.1/1/1970.0:00:00.GMT....#
faa0 0d 0a 09 23 20 54 68 69 73 20 61 74 74 72 69 62 75 74 65 20 6d 75 73 74 20 62 65 20 61 6e 20 49 ...#.This.attribute.must.be.an.I
fac0 6e 74 65 67 65 72 20 6f 72 20 54 69 6d 65 20 6f 62 6a 65 63 74 20 6f 72 20 6e 69 6c 2e 0d 0a 09 nteger.or.Time.object.or.nil....
fae0 64 65 66 20 6d 61 78 61 67 65 3d 28 6d 61 78 61 67 65 29 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 09 def.maxage=(maxage)....#.{{{....
fb00 69 66 20 6d 61 78 61 67 65 2e 63 6c 61 73 73 20 3d 3d 20 54 69 6d 65 0d 0a 09 09 09 6d 61 78 61 if.maxage.class.==.Time.....maxa
fb20 67 65 20 3d 20 6d 61 78 61 67 65 20 2d 20 54 69 6d 65 2e 6e 6f 77 0d 0a 09 09 65 6c 73 69 66 20 ge.=.maxage.-.Time.now....elsif.
fb40 6d 61 78 61 67 65 2e 63 6c 61 73 73 2e 73 75 70 65 72 63 6c 61 73 73 20 3d 3d 20 49 6e 74 65 67 maxage.class.superclass.==.Integ
fb60 65 72 20 20 7c 7c 20 21 6d 61 78 61 67 65 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 72 61 69 73 65 20 er..||.!maxage.==.nil.....raise.
fb80 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 6d 61 78 61 67 65 20 6f 66 20 61 20 63 6f 6f 6b TypeError,."The.maxage.of.a.cook
fba0 69 65 20 6d 75 73 74 20 62 65 20 61 6e 20 49 6e 74 65 72 67 65 72 20 6f 72 20 54 69 6d 65 20 6f ie.must.be.an.Interger.or.Time.o
fbc0 62 6a 65 63 74 20 6f 72 20 6e 69 6c 2e 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a 09 bject.or.nil.",.caller....end...
fbe0 09 40 6d 61 78 61 67 65 20 3d 20 6d 61 78 61 67 65 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 .@maxage.=.maxage....#.}}}...end
fc00 0d 0a 0d 0a 09 23 20 4d 6f 64 69 66 69 65 73 20 74 68 65 20 70 61 74 68 20 76 61 6c 75 65 20 6f .....#.Modifies.the.path.value.o
fc20 66 20 74 68 69 73 20 63 6f 6f 6b 69 65 2e 20 54 68 65 20 63 6c 69 65 6e 74 20 77 69 6c 6c 20 73 f.this.cookie..The.client.will.s
fc40 65 6e 64 20 74 68 69 73 20 63 6f 6f 6b 69 65 0d 0a 09 23 20 6f 6e 6c 79 2c 20 69 66 20 74 68 65 end.this.cookie...#.only,.if.the
fc60 20 72 65 71 75 65 73 74 65 64 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 74 68 69 73 20 64 69 72 65 .requested.document.is.this.dire
fc80 63 74 6f 72 79 20 6f 72 20 61 20 73 75 62 64 69 72 65 63 74 6f 72 79 20 6f 66 20 69 74 2e 0d 0a ctory.or.a.subdirectory.of.it...
fca0 09 23 0d 0a 09 23 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 61 74 74 72 69 62 75 74 .#...#.The.value.of.the.attribut
fcc0 65 20 6d 75 73 74 20 62 65 20 61 20 53 74 72 69 6e 67 20 6f 62 6a 65 63 74 20 6f 72 20 6e 69 6c e.must.be.a.String.object.or.nil
fce0 2e 0d 0a 09 64 65 66 20 70 61 74 68 3d 28 70 61 74 68 29 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 09 ....def.path=(path)....#.{{{....
fd00 75 6e 6c 65 73 73 20 70 61 74 68 2e 63 6c 61 73 73 20 3d 3d 20 53 74 72 69 6e 67 20 20 7c 7c 20 unless.path.class.==.String..||.
fd20 70 61 74 68 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c path.==.nil.....raise.TypeError,
fd40 20 22 54 68 65 20 70 61 74 68 20 6f 66 20 61 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 6e ."The.path.of.a.cookie.must.be.n
fd60 69 6c 20 6f 72 20 61 20 73 74 72 69 6e 67 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a il.or.a.string",.caller....end..
fd80 09 09 40 70 61 74 68 20 3d 20 70 61 74 68 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 0d ..@path.=.path....#.}}}...end...
fda0 0a 09 23 20 4d 6f 64 69 66 69 65 73 20 74 68 65 20 64 6f 6d 61 69 6e 20 76 61 6c 75 65 20 6f 66 ..#.Modifies.the.domain.value.of
fdc0 20 74 68 69 73 20 63 6f 6f 6b 69 65 2e 20 54 68 65 20 63 6c 69 65 6e 74 20 77 69 6c 6c 20 73 65 .this.cookie..The.client.will.se
fde0 6e 64 20 74 68 69 73 20 63 6f 6f 6b 69 65 0d 0a 09 23 20 6f 6e 6c 79 20 69 66 20 69 74 27 73 20 nd.this.cookie...#.only.if.it's.
fe00 63 6f 6e 6e 65 63 74 65 64 20 77 69 74 68 20 74 68 69 73 20 64 6f 6d 61 69 6e 20 28 6f 72 20 61 connected.with.this.domain.(or.a
fe20 20 73 75 62 64 6f 6d 61 69 6e 2c 20 69 66 20 74 68 65 20 66 69 72 73 74 0d 0a 09 23 20 63 68 61 .subdomain,.if.the.first...#.cha
fe40 72 61 63 74 65 72 20 69 73 20 61 20 64 6f 74 20 6c 69 6b 65 20 69 6e 20 22 2e 72 75 62 79 2d 6c racter.is.a.dot.like.in.".ruby-l
fe60 61 6e 67 2e 6f 72 67 22 29 0d 0a 09 23 0d 0a 09 23 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 ang.org")...#...#.The.value.of.t
fe80 68 69 73 20 61 74 74 72 69 62 75 74 65 20 6d 75 73 74 20 62 65 20 61 20 53 74 72 69 6e 67 20 6f his.attribute.must.be.a.String.o
fea0 72 20 6e 69 6c 2e 0d 0a 09 64 65 66 20 64 6f 6d 61 69 6e 3d 28 64 6f 6d 61 69 6e 29 0d 0a 09 09 r.nil....def.domain=(domain)....
fec0 23 20 7b 7b 7b 0d 0a 09 09 75 6e 6c 65 73 73 20 64 6f 6d 61 69 6e 2e 63 6c 61 73 73 20 3d 3d 20 #.{{{....unless.domain.class.==.
fee0 53 74 72 69 6e 67 20 20 7c 7c 20 64 6f 6d 61 69 6e 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 72 61 69 String..||.domain.==.nil.....rai
ff00 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 64 6f 6d 61 69 6e 20 6f 66 20 61 20 63 se.TypeError,."The.domain.of.a.c
ff20 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 61 20 53 74 72 69 6e 67 20 6f 72 20 6e 69 6c 2e 22 2c ookie.must.be.a.String.or.nil.",
ff40 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a 09 09 40 64 6f 6d 61 69 6e 20 3d 20 64 6f 6d 61 .caller....end....@domain.=.doma
ff60 69 6e 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 4d 6f 64 69 66 69 65 73 in....#.}}}...end.....#.Modifies
ff80 20 74 68 65 20 73 65 63 75 72 65 20 66 6c 61 67 20 6f 66 20 74 68 69 73 20 63 6f 6f 6b 69 65 2e .the.secure.flag.of.this.cookie.
ffa0 20 49 66 20 69 74 27 73 20 74 72 75 65 2c 20 74 68 65 20 63 6c 69 65 6e 74 20 77 69 6c 6c 20 6f .If.it's.true,.the.client.will.o
ffc0 6e 6c 79 0d 0a 09 23 20 73 65 6e 64 20 74 68 69 73 20 63 6f 6f 6b 69 65 20 69 66 20 69 74 20 69 nly...#.send.this.cookie.if.it.i
ffe0 73 20 73 65 63 75 72 65 64 20 63 6f 6e 6e 65 63 74 65 64 20 77 69 74 68 20 75 73 2e 0d 0a 09 23 s.secured.connected.with.us....#
10000 0d 0a 09 23 20 54 68 65 20 76 61 6c 75 65 20 6f 64 20 74 68 69 73 20 61 74 74 72 69 62 75 74 65 ...#.The.value.od.this.attribute
10020 20 68 61 73 20 74 6f 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2e 0d 0a 09 64 65 66 20 .has.to.be.true.or.false....def.
10040 73 65 63 75 72 65 3d 28 73 65 63 75 72 65 29 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 09 75 6e 6c 65 secure=(secure)....#.{{{....unle
10060 73 73 20 73 65 63 75 72 65 20 3d 3d 20 74 72 75 65 20 20 7c 7c 20 73 65 63 75 72 65 20 3d 3d 20 ss.secure.==.true..||.secure.==.
10080 66 61 6c 73 65 0d 0a 09 09 09 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 false.....raise.TypeError,."The.
100a0 73 65 63 75 72 65 20 66 69 65 6c 64 20 6f 66 20 61 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 secure.field.of.a.cookie.must.be
100c0 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a .true.or.false",.caller....end..
100e0 09 09 40 73 65 63 75 72 65 20 3d 20 73 65 63 75 72 65 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e ..@secure.=.secure....#.}}}...en
10100 64 0d 0a 0d 0a 09 23 20 4d 6f 64 69 66 69 65 73 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 76 61 6c d.....#.Modifies.the.comment.val
10120 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6f 6b 69 65 2e 20 54 68 65 20 63 6f 6d 6d 65 6e 74 20 77 ue.of.this.cookie..The.comment.w
10140 6f 6e 27 74 20 62 65 20 73 65 6e 64 2c 20 69 66 0d 0a 09 23 20 74 79 70 65 20 69 73 20 22 6e 65 on't.be.send,.if...#.type.is."ne
10160 74 73 63 61 70 65 22 2e 0d 0a 09 64 65 66 20 63 6f 6d 6d 65 6e 74 3d 28 63 6f 6d 6d 65 6e 74 29 tscape"....def.comment=(comment)
10180 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 09 75 6e 6c 65 73 73 20 63 6f 6d 6d 65 6e 74 2e 63 6c 61 73 ....#.{{{....unless.comment.clas
101a0 73 20 3d 3d 20 53 74 72 69 6e 67 20 7c 7c 20 63 6f 6d 6d 65 6e 74 20 3d 3d 20 6e 69 6c 0d 0a 09 s.==.String.||.comment.==.nil...
101c0 09 09 72 61 69 73 65 20 54 79 70 65 45 72 72 6f 72 2c 20 22 54 68 65 20 63 6f 6d 6d 65 6e 74 20 ..raise.TypeError,."The.comment.
101e0 6f 66 20 61 20 63 6f 6f 6b 69 65 20 6d 75 73 74 20 62 65 20 61 20 73 74 72 69 6e 67 20 6f 72 20 of.a.cookie.must.be.a.string.or.
10200 6e 69 6c 22 2c 20 63 61 6c 6c 65 72 0d 0a 09 09 65 6e 64 0d 0a 09 09 40 63 6f 6d 6d 65 6e 74 20 nil",.caller....end....@comment.
10220 3d 20 63 6f 6d 6d 65 6e 74 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 43 =.comment....#.}}}...end.....#.C
10240 68 61 6e 67 65 73 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 6c 6c 20 63 6f 6f 6b 69 65 73 2e 0d hanges.the.type.of.all.cookies..
10260 0a 09 23 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 52 46 43 32 31 30 39 20 61 ..#.Allowed.values.are.RFC2109.a
10280 6e 64 20 6e 65 74 73 63 61 70 65 20 28 64 65 66 61 75 6c 74 29 2e 0d 0a 09 64 65 66 20 43 6f 6f nd.netscape.(default)....def.Coo
102a0 6b 69 65 2e 74 79 70 65 3d 28 74 79 70 65 29 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 09 75 6e 6c 65 kie.type=(type)....#.{{{....unle
102c0 73 73 20 40 40 61 6c 6c 6f 77 65 64 0d 0a 09 09 09 72 61 69 73 65 20 22 54 68 65 20 63 6f 6f 6b ss.@@allowed.....raise."The.cook
102e0 69 65 73 20 61 72 65 20 61 6c 6c 72 65 61 64 79 20 73 65 6e 64 2c 20 73 6f 20 79 6f 75 20 63 61 ies.are.allready.send,.so.you.ca
10300 6e 27 74 20 63 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 61 6e 79 6d 6f 72 65 2e 22 0d 0a 09 n't.change.the.type.anymore."...
10320 09 65 6e 64 0d 0a 09 09 75 6e 6c 65 73 73 20 74 79 70 65 2e 64 6f 77 6e 63 61 73 65 20 3d 3d 20 .end....unless.type.downcase.==.
10340 22 72 66 63 32 31 30 39 22 20 26 26 20 74 79 70 65 2e 64 6f 77 6e 63 61 73 65 20 3d 3d 20 22 6e "rfc2109".&&.type.downcase.==."n
10360 65 74 73 63 61 70 65 22 0d 0a 09 09 09 72 61 69 73 65 20 22 54 68 65 20 74 79 70 65 20 6f 66 20 etscape".....raise."The.type.of.
10380 74 68 65 20 63 6f 6f 6b 69 65 73 20 6d 75 73 74 20 62 65 20 5c 22 52 46 43 32 31 30 39 5c 22 20 the.cookies.must.be.\"RFC2109\".
103a0 6f 72 20 5c 22 6e 65 74 73 63 61 70 65 5c 22 2e 22 0d 0a 09 09 65 6e 64 0d 0a 09 09 40 40 74 79 or.\"netscape\"."....end....@@ty
103c0 70 65 20 3d 20 74 79 70 65 3b 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 pe.=.type;....#.}}}...end.....#.
103e0 41 66 74 65 72 20 73 65 6e 64 69 6e 67 20 74 68 69 73 20 6d 65 73 73 61 67 65 2c 20 6e 6f 20 63 After.sending.this.message,.no.c
10400 6f 6f 6b 69 65 73 20 63 61 6e 20 62 65 20 73 65 74 20 6f 72 20 6d 6f 64 69 66 69 65 64 2e 20 55 ookies.can.be.set.or.modified..U
10420 73 65 20 69 74 2c 20 77 68 65 6e 0d 0a 09 23 20 48 54 54 50 2d 48 65 61 64 65 72 73 20 61 72 65 se.it,.when...#.HTTP-Headers.are
10440 20 73 65 6e 64 2e 20 52 77 65 62 20 64 6f 65 73 20 74 68 69 73 20 66 6f 72 20 79 6f 75 2e 0d 0a .send..Rweb.does.this.for.you...
10460 09 64 65 66 20 43 6f 6f 6b 69 65 2e 64 69 73 61 6c 6c 6f 77 0d 0a 09 09 23 20 7b 7b 7b 0d 0a 09 .def.Cookie.disallow....#.{{{...
10480 09 40 40 61 6c 6c 6f 77 65 64 20 3d 20 66 61 6c 73 65 0d 0a 09 09 74 72 75 65 0d 0a 09 09 23 20 .@@allowed.=.false....true....#.
104a0 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 52 65 74 75 72 6e 73 20 61 20 48 54 54 50 20 68 }}}...end.....#.Returns.a.HTTP.h
104c0 65 61 64 65 72 20 28 74 79 70 65 20 53 74 72 69 6e 67 29 20 77 69 74 68 20 61 6c 6c 20 63 6f 6f eader.(type.String).with.all.coo
104e0 6b 69 65 73 2e 20 52 77 65 62 20 64 6f 65 73 20 74 68 69 73 20 66 6f 72 0d 0a 09 23 20 79 6f 75 kies..Rweb.does.this.for...#.you
10500 2e 0d 0a 09 64 65 66 20 43 6f 6f 6b 69 65 2e 67 65 74 48 74 74 70 48 65 61 64 65 72 0d 0a 09 09 ....def.Cookie.getHttpHeader....
10520 23 20 7b 7b 7b 0d 0a 09 09 69 66 20 64 65 66 69 6e 65 64 3f 28 40 40 6c 69 73 74 29 0d 0a 09 09 #.{{{....if.defined?(@@list)....
10540 09 69 66 20 40 40 74 79 70 65 20 3d 3d 20 22 6e 65 74 73 63 61 70 65 22 0d 0a 09 09 09 09 73 74 .if.@@type.==."netscape"......st
10560 72 20 3d 20 22 22 0d 0a 09 09 09 09 40 40 6c 69 73 74 2e 65 61 63 68 20 64 6f 20 7c 63 6f 6f 6b r.=.""......@@list.each.do.|cook
10580 69 65 7c 0d 0a 09 09 09 09 09 69 66 20 63 6f 6f 6b 69 65 2e 76 61 6c 75 65 20 3d 3d 20 6e 69 6c ie|.......if.cookie.value.==.nil
105a0 0d 0a 09 09 09 09 09 09 63 6f 6f 6b 69 65 2e 6d 61 78 61 67 65 20 3d 20 30 0d 0a 09 09 09 09 09 ........cookie.maxage.=.0.......
105c0 09 63 6f 6f 6b 69 65 2e 76 61 6c 75 65 20 3d 20 22 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 .cookie.value.=."".......end....
105e0 09 09 09 23 20 54 4f 44 4f 3a 20 4e 61 6d 65 20 61 6e 64 20 76 61 6c 75 65 20 73 68 6f 75 6c 64 ...#.TODO:.Name.and.value.should
10600 20 62 65 20 65 73 63 61 70 65 64 21 0d 0a 09 09 09 09 09 73 74 72 20 2b 3d 20 22 53 65 74 2d 43 .be.escaped!.......str.+=."Set-C
10620 6f 6f 6b 69 65 3a 20 23 7b 63 6f 6f 6b 69 65 2e 6e 61 6d 65 7d 3d 23 7b 63 6f 6f 6b 69 65 2e 76 ookie:.#{cookie.name}=#{cookie.v
10640 61 6c 75 65 7d 22 0d 0a 09 09 09 09 09 75 6e 6c 65 73 73 20 63 6f 6f 6b 69 65 2e 6d 61 78 61 67 alue}".......unless.cookie.maxag
10660 65 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 09 09 09 65 78 70 69 72 65 20 3d 20 54 69 6d 65 2e 6e 6f e.==.nil........expire.=.Time.no
10680 77 20 2b 20 63 6f 6f 6b 69 65 2e 6d 61 78 61 67 65 0d 0a 09 09 09 09 09 09 65 78 70 69 72 65 2e w.+.cookie.maxage........expire.
106a0 67 6d 74 69 6d 65 0d 0a 09 09 09 09 09 09 73 74 72 20 2b 3d 20 22 3b 20 45 78 70 69 72 65 3d 23 gmtime........str.+=.";.Expire=#
106c0 7b 65 78 70 69 72 65 2e 73 74 72 66 74 69 6d 65 28 22 25 61 2c 20 25 64 2d 25 62 2d 25 59 20 25 {expire.strftime("%a,.%d-%b-%Y.%
106e0 48 3a 25 4d 3a 25 53 20 25 5a 22 29 7d 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 75 H:%M:%S.%Z")}".......end.......u
10700 6e 6c 65 73 73 20 63 6f 6f 6b 69 65 2e 64 6f 6d 61 69 6e 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 09 nless.cookie.domain.==.nil......
10720 09 09 73 74 72 20 2b 3d 20 22 3b 20 44 6f 6d 61 69 6e 3d 23 7b 63 6f 6f 6b 69 65 2e 64 6f 6d 61 ..str.+=.";.Domain=#{cookie.doma
10740 69 6e 7d 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 75 6e 6c 65 73 73 20 63 6f 6f 6b in}".......end.......unless.cook
10760 69 65 2e 70 61 74 68 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 09 09 09 73 74 72 20 2b 3d 20 22 3b 20 ie.path.==.nil........str.+=.";.
10780 50 61 74 68 3d 23 7b 63 6f 6f 6b 69 65 2e 70 61 74 68 7d 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a Path=#{cookie.path}".......end..
107a0 09 09 09 09 09 69 66 20 63 6f 6f 6b 69 65 2e 73 65 63 75 72 65 0d 0a 09 09 09 09 09 09 73 74 72 .....if.cookie.secure........str
107c0 20 2b 3d 20 22 3b 20 53 65 63 75 72 65 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 73 .+=.";.Secure".......end.......s
107e0 74 72 20 2b 3d 20 22 5c 72 5c 6e 22 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 72 65 74 75 72 tr.+=."\r\n"......end......retur
10800 6e 20 73 74 72 0d 0a 09 09 09 65 6c 73 65 20 23 20 74 79 70 65 20 3d 3d 20 22 52 46 43 32 31 30 n.str.....else.#.type.==."RFC210
10820 39 22 0d 0a 09 09 09 09 73 74 72 20 3d 20 22 53 65 74 2d 43 6f 6f 6b 69 65 3a 20 22 0d 0a 09 09 9"......str.=."Set-Cookie:."....
10840 09 09 63 6f 6d 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 09 09 09 40 40 6c 69 73 74 2e 65 ..comma.=.false;........@@list.e
10860 61 63 68 20 64 6f 20 7c 63 6f 6f 6b 69 65 7c 0d 0a 09 09 09 09 09 69 66 20 63 6f 6f 6b 69 65 2e ach.do.|cookie|.......if.cookie.
10880 76 61 6c 75 65 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 09 09 09 63 6f 6f 6b 69 65 2e 6d 61 78 61 67 value.==.nil........cookie.maxag
108a0 65 20 3d 20 30 0d 0a 09 09 09 09 09 09 63 6f 6f 6b 69 65 2e 76 61 6c 75 65 20 3d 20 22 22 0d 0a e.=.0........cookie.value.=.""..
108c0 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 69 66 20 63 6f 6d 6d 61 0d 0a 09 09 09 09 09 09 73 .....end.......if.comma........s
108e0 74 72 20 2b 3d 20 22 2c 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 63 6f 6d 6d 61 20 tr.+=.",".......end.......comma.
10900 3d 20 74 72 75 65 0d 0a 0d 0a 09 09 09 09 09 73 74 72 20 2b 3d 20 22 23 7b 63 6f 6f 6b 69 65 2e =.true.........str.+=."#{cookie.
10920 6e 61 6d 65 7d 3d 5c 22 23 7b 63 6f 6f 6b 69 65 2e 76 61 6c 75 65 7d 5c 22 22 0d 0a 09 09 09 09 name}=\"#{cookie.value}\""......
10940 09 75 6e 6c 65 73 73 20 63 6f 6f 6b 69 65 2e 6d 61 78 61 67 65 20 3d 3d 20 6e 69 6c 0d 0a 09 09 .unless.cookie.maxage.==.nil....
10960 09 09 09 09 73 74 72 20 2b 3d 20 22 3b 20 4d 61 78 2d 41 67 65 3d 5c 22 23 7b 63 6f 6f 6b 69 65 ....str.+=.";.Max-Age=\"#{cookie
10980 2e 6d 61 78 61 67 65 7d 5c 22 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 75 6e 6c 65 .maxage}\"".......end.......unle
109a0 73 73 20 63 6f 6f 6b 69 65 2e 64 6f 6d 61 69 6e 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 09 09 09 73 ss.cookie.domain.==.nil........s
109c0 74 72 20 2b 3d 20 22 3b 20 44 6f 6d 61 69 6e 3d 5c 22 23 7b 63 6f 6f 6b 69 65 2e 64 6f 6d 61 69 tr.+=.";.Domain=\"#{cookie.domai
109e0 6e 7d 5c 22 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 75 6e 6c 65 73 73 20 63 6f 6f n}\"".......end.......unless.coo
10a00 6b 69 65 2e 70 61 74 68 20 3d 3d 20 6e 69 6c 0d 0a 09 09 09 09 09 09 73 74 72 20 2b 3d 20 22 3b kie.path.==.nil........str.+=.";
10a20 20 50 61 74 68 3d 5c 22 23 7b 63 6f 6f 6b 69 65 2e 70 61 74 68 7d 5c 22 22 0d 0a 09 09 09 09 09 .Path=\"#{cookie.path}\"".......
10a40 65 6e 64 0d 0a 09 09 09 09 09 69 66 20 63 6f 6f 6b 69 65 2e 73 65 63 75 72 65 0d 0a 09 09 09 09 end.......if.cookie.secure......
10a60 09 09 73 74 72 20 2b 3d 20 22 3b 20 53 65 63 75 72 65 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 ..str.+=.";.Secure".......end...
10a80 09 09 09 09 75 6e 6c 65 73 73 20 63 6f 6f 6b 69 65 2e 63 6f 6d 6d 65 6e 74 20 3d 3d 20 6e 69 6c ....unless.cookie.comment.==.nil
10aa0 0d 0a 09 09 09 09 09 09 73 74 72 20 2b 3d 20 22 3b 20 43 6f 6d 6d 65 6e 74 3d 5c 22 23 7b 63 6f ........str.+=.";.Comment=\"#{co
10ac0 6f 6b 69 65 2e 63 6f 6d 6d 65 6e 74 7d 5c 22 22 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 okie.comment}\"".......end......
10ae0 09 73 74 72 20 2b 3d 20 22 3b 20 56 65 72 73 69 6f 6e 3d 5c 22 31 5c 22 22 0d 0a 09 09 09 09 65 .str.+=.";.Version=\"1\""......e
10b00 6e 64 0d 0a 09 09 09 09 73 74 72 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 09 nd......str.....end....else.....
10b20 66 61 6c 73 65 0d 0a 09 09 65 6e 64 0d 0a 09 09 23 20 7d 7d 7d 0d 0a 09 65 6e 64 0d 0a 65 6e 64 false....end....#.}}}...end..end
10b40 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 73 74 72 73 63 61 6e 27 0d 0a 0d 0a 6d 6f 64 75 6c 65 20 ....require.'strscan'....module.
10b60 42 42 43 6f 64 65 0d 0a 09 44 45 42 55 47 20 3d 20 74 72 75 65 0d 0a 0d 0a 09 75 73 65 20 27 65 BBCode...DEBUG.=.true.....use.'e
10b80 6e 63 6f 64 65 72 27 2c 20 27 74 61 67 73 27 2c 20 27 74 61 67 73 74 61 63 6b 27 2c 20 27 73 6d ncoder',.'tags',.'tagstack',.'sm
10ba0 69 6c 65 79 73 27 0d 0a 0d 0a 3d 62 65 67 69 6e 0d 0a 09 54 68 65 20 50 61 72 73 65 72 20 63 6c ileys'....=begin...The.Parser.cl
10bc0 61 73 73 20 74 61 6b 65 73 20 63 61 72 65 20 6f 66 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 2e 0d ass.takes.care.of.the.encoding..
10be0 0a 09 49 74 20 73 63 61 6e 73 20 74 68 65 20 67 69 76 65 6e 20 42 42 43 6f 64 65 20 28 61 73 20 ..It.scans.the.given.BBCode.(as.
10c00 70 6c 61 69 6e 20 74 65 78 74 29 2c 20 66 69 6e 64 73 20 74 61 67 73 0d 0a 09 61 6e 64 20 73 6d plain.text),.finds.tags...and.sm
10c20 69 6c 69 65 73 20 61 6e 64 20 61 6c 73 6f 20 6d 61 6b 65 73 20 6c 69 6e 6b 73 20 6f 66 20 75 72 ilies.and.also.makes.links.of.ur
10c40 6c 73 20 69 6e 20 74 65 78 74 2e 0d 0a 0d 0a 09 4e 6f 72 6d 61 6c 20 74 65 78 74 20 69 73 20 73 ls.in.text......Normal.text.is.s
10c60 65 6e 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 20 65 6e 63 6f 64 65 72 2e 0d 0a 0d 0a end.directly.to.the.encoder.....
10c80 09 49 66 20 61 20 74 61 67 20 77 61 73 20 66 6f 75 6e 64 2c 20 61 6e 20 69 6e 73 74 61 6e 63 65 .If.a.tag.was.found,.an.instance
10ca0 20 6f 66 20 61 20 54 61 67 20 73 75 62 63 6c 61 73 73 20 69 73 20 63 72 65 61 74 65 64 0d 0a 09 .of.a.Tag.subclass.is.created...
10cc0 74 6f 20 68 61 6e 64 6c 65 20 74 68 65 20 63 61 73 65 2e 0d 0a 0d 0a 09 54 68 65 20 40 74 61 67 to.handle.the.case......The.@tag
10ce0 73 74 61 63 6b 20 6d 61 6e 61 67 65 73 20 74 61 67 20 6e 65 73 74 69 6e 67 20 61 6e 64 20 65 6e stack.manages.tag.nesting.and.en
10d00 73 75 72 65 73 20 76 61 6c 69 64 20 48 54 4d 4c 2e 0d 0a 3d 65 6e 64 0d 0a 0d 0a 09 63 6c 61 73 sures.valid.HTML...=end.....clas
10d20 73 20 50 61 72 73 65 72 0d 0a 09 09 63 6c 61 73 73 20 41 74 74 72 69 62 75 74 65 0d 0a 09 09 09 s.Parser....class.Attribute.....
10d40 23 20 66 6c 61 74 74 65 6e 20 61 6e 64 20 75 73 65 20 6f 6e 6c 79 20 6f 6e 65 20 65 6d 70 74 79 #.flatten.and.use.only.one.empty
10d60 5f 61 72 67 0d 0a 09 09 09 64 65 66 20 73 65 6c 66 2e 63 72 65 61 74 65 20 61 74 74 72 0d 0a 09 _arg.....def.self.create.attr...
10d80 09 09 09 61 74 74 72 20 3d 20 66 6c 61 74 74 65 6e 20 61 74 74 72 0d 0a 09 09 09 09 72 65 74 75 ...attr.=.flatten.attr......retu
10da0 72 6e 20 40 40 65 6d 70 74 79 5f 61 74 74 72 20 69 66 20 61 74 74 72 2e 65 6d 70 74 79 3f 0d 0a rn.@@empty_attr.if.attr.empty?..
10dc0 09 09 09 09 6e 65 77 20 61 74 74 72 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 70 72 69 76 61 ....new.attr.....end.......priva
10de0 74 65 5f 63 6c 61 73 73 5f 6d 65 74 68 6f 64 20 3a 6e 65 77 0d 0a 0d 0a 09 09 09 23 20 72 65 6d te_class_method.:new.......#.rem
10e00 6f 76 65 20 6c 65 61 64 69 6e 67 20 61 6e 64 20 74 72 61 69 6c 69 6e 67 20 77 68 69 74 65 73 70 ove.leading.and.trailing.whitesp
10e20 61 63 65 3b 20 63 6f 6e 63 61 74 20 6c 69 6e 65 73 0d 0a 09 09 09 64 65 66 20 73 65 6c 66 2e 66 ace;.concat.lines.....def.self.f
10e40 6c 61 74 74 65 6e 20 61 74 74 72 0d 0a 09 09 09 09 61 74 74 72 2e 73 74 72 69 70 2e 67 73 75 62 latten.attr......attr.strip.gsub
10e60 28 2f 5c 6e 2f 2c 20 27 20 27 29 0d 0a 09 09 09 09 23 20 2d 3e 20 5e 20 61 6e 64 20 24 20 63 61 (/\n/,.'.')......#.->.^.and.$.ca
10e80 6e 20 6f 6e 6c 79 20 6d 61 74 63 68 20 61 74 20 62 65 67 69 6e 20 61 6e 64 20 65 6e 64 20 6e 6f n.only.match.at.begin.and.end.no
10ea0 77 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 41 54 54 52 49 42 55 54 45 5f 53 43 41 4e 20 3d w.....end.......ATTRIBUTE_SCAN.=
10ec0 20 2f 0d 0a 09 09 09 09 28 3f 21 24 29 20 20 23 20 64 6f 6e 27 74 20 6d 61 74 63 68 20 61 74 20 ./......(?!$)..#.don't.match.at.
10ee0 65 6e 64 0d 0a 09 09 09 09 5c 73 2a 0d 0a 09 09 09 09 28 20 23 20 24 31 20 3d 20 6b 65 79 0d 0a end......\s*......(.#.$1.=.key..
10f00 09 09 09 09 09 5b 5e 3d 5c 73 5c 5d 22 5c 5c 5d 2a 0d 0a 09 09 09 09 09 28 3f 3a 0d 0a 09 09 09 .....[^=\s\]"\\]*.......(?:.....
10f20 09 09 09 28 3f 3a 20 5c 5c 2e 20 7c 20 22 5b 5e 22 5c 5c 5d 2a 28 3f 3a 5c 5c 2e 5b 5e 22 5c 5c ...(?:.\\..|."[^"\\]*(?:\\.[^"\\
10f40 5d 2a 29 2a 22 3f 20 29 0d 0a 09 09 09 09 09 09 5b 5e 3d 5c 73 5c 5d 22 5c 5c 5d 2a 0d 0a 09 09 ]*)*"?.)........[^=\s\]"\\]*....
10f60 09 09 09 29 2a 0d 0a 09 09 09 09 29 0d 0a 09 09 09 09 28 3f 3a 0d 0a 09 09 09 09 09 3d 0d 0a 09 ...)*......)......(?:.......=...
10f80 09 09 09 09 28 20 23 20 24 32 20 3d 20 76 61 6c 75 65 0d 0a 09 09 09 09 09 09 5b 5e 5c 73 5c 5d ....(.#.$2.=.value........[^\s\]
10fa0 22 5c 5c 5d 2a 0d 0a 09 09 09 09 09 09 28 3f 3a 0d 0a 09 09 09 09 09 09 09 28 3f 3a 20 5c 5c 2e "\\]*........(?:.........(?:.\\.
10fc0 20 7c 20 22 5b 5e 22 5c 5c 5d 2a 28 3f 3a 5c 5c 2e 5b 5e 22 5c 5c 5d 2a 29 2a 22 3f 20 29 0d 0a .|."[^"\\]*(?:\\.[^"\\]*)*"?.)..
10fe0 09 09 09 09 09 09 09 5b 5e 5c 73 5c 5d 22 5c 5c 5d 2a 0d 0a 09 09 09 09 09 09 29 2a 0d 0a 09 09 .......[^\s\]"\\]*........)*....
11000 09 09 09 29 3f 0d 0a 09 09 09 09 29 3f 0d 0a 09 09 09 09 5c 73 2a 0d 0a 09 09 09 2f 78 0d 0a 0d ...)?......)?......\s*...../x...
11020 0a 09 09 09 64 65 66 20 73 65 6c 66 2e 70 61 72 73 65 20 73 6f 75 72 63 65 0d 0a 09 09 09 09 73 ....def.self.parse.source......s
11040 6f 75 72 63 65 20 3d 20 73 6f 75 72 63 65 2e 64 75 70 0d 0a 09 09 09 09 23 20 65 6d 70 74 79 5f ource.=.source.dup......#.empty_
11060 74 61 67 3a 20 74 68 65 20 74 61 67 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 5b 2e 2e 2e 20 2f 5d 0d tag:.the.tag.looks.like.[..../].
11080 0a 09 09 09 09 23 20 73 6c 69 63 65 21 3a 20 74 68 69 73 20 64 65 6c 65 74 65 73 20 74 68 65 20 .....#.slice!:.this.deletes.the.
110a0 5c 73 2a 2f 5d 20 61 74 20 74 68 65 20 65 6e 64 0d 0a 09 09 09 09 23 20 5c 73 2b 20 62 65 63 61 \s*/].at.the.end......#.\s+.beca
110c0 75 73 65 20 5b 75 72 6c 3d 68 74 74 70 3a 2f 2f 72 75 62 79 62 62 2e 6f 72 67 2f 66 6f 72 75 6d use.[url=http://rubybb.org/forum
110e0 2f 5d 20 69 73 20 4e 4f 54 20 61 6e 20 65 6d 70 74 79 20 74 61 67 2e 0d 0a 09 09 09 09 23 20 49 /].is.NOT.an.empty.tag.......#.I
11100 6e 20 52 75 62 79 42 42 43 6f 64 65 2c 20 79 6f 75 20 63 61 6e 20 75 73 65 20 5b 75 72 6c 3d 68 n.RubyBBCode,.you.can.use.[url=h
11120 74 74 70 3a 2f 2f 72 75 62 79 62 62 2e 6f 72 67 2f 66 6f 72 75 6d 2f 20 2f 5d 2c 20 61 6e 64 20 ttp://rubybb.org/forum/./],.and.
11140 74 68 69 73 20 68 61 73 20 74 6f 20 62 65 0d 0a 09 09 09 09 23 20 69 6e 74 65 72 70 72 65 74 65 this.has.to.be......#.interprete
11160 64 20 63 6f 72 72 65 63 74 6c 79 2e 0d 0a 09 09 09 09 65 6d 70 74 79 5f 74 61 67 20 3d 20 73 6f d.correctly.......empty_tag.=.so
11180 75 72 63 65 2e 73 75 62 21 28 2f 5e 3a 2f 2c 20 27 3d 27 29 20 6f 72 20 73 6f 75 72 63 65 2e 73 urce.sub!(/^:/,.'=').or.source.s
111a0 6c 69 63 65 21 28 2f 5c 2f 24 2f 29 0d 0a 09 09 09 09 64 65 62 75 67 20 27 50 41 52 53 45 3a 20 lice!(/\/$/)......debug.'PARSE:.
111c0 27 20 2b 20 73 6f 75 72 63 65 2e 69 6e 73 70 65 63 74 20 2b 20 27 20 3d 3e 20 27 20 2b 20 65 6d '.+.source.inspect.+.'.=>.'.+.em
111e0 70 74 79 5f 74 61 67 2e 69 6e 73 70 65 63 74 0d 0a 09 09 09 09 23 2d 3e 20 77 65 20 68 61 76 65 pty_tag.inspect......#->.we.have
11200 20 6e 6f 77 20 61 6e 20 61 74 74 72 20 74 68 61 74 27 73 20 45 49 54 48 45 52 20 65 6d 70 74 79 .now.an.attr.that's.EITHER.empty
11220 20 4f 52 20 62 65 67 69 6e 73 20 61 6e 64 20 65 6e 64 73 20 77 69 74 68 20 6e 6f 6e 2d 77 68 69 .OR.begins.and.ends.with.non-whi
11240 74 65 73 70 61 63 65 2e 0d 0a 0d 0a 09 09 09 09 61 74 74 72 20 3d 20 48 61 73 68 2e 6e 65 77 0d tespace.........attr.=.Hash.new.
11260 0a 09 09 09 09 61 74 74 72 5b 3a 66 6c 61 67 73 5d 20 3d 20 5b 5d 0d 0a 09 09 09 09 73 6f 75 72 .....attr[:flags].=.[]......sour
11280 63 65 2e 73 63 61 6e 28 41 54 54 52 49 42 55 54 45 5f 53 43 41 4e 29 20 7b 20 7c 6b 65 79 2c 20 ce.scan(ATTRIBUTE_SCAN).{.|key,.
112a0 76 61 6c 75 65 7c 0d 0a 09 09 09 09 09 69 66 20 6e 6f 74 20 76 61 6c 75 65 0d 0a 09 09 09 09 09 value|.......if.not.value.......
112c0 09 61 74 74 72 5b 3a 66 6c 61 67 73 5d 20 3c 3c 20 75 6e 65 73 63 61 70 65 28 6b 65 79 29 0d 0a .attr[:flags].<<.unescape(key)..
112e0 09 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 09 6e 65 78 74 20 69 66 20 76 61 6c 75 65 2e 65 .....else........next.if.value.e
11300 6d 70 74 79 3f 20 61 6e 64 20 6b 65 79 2e 65 6d 70 74 79 3f 0d 0a 09 09 09 09 09 09 61 74 74 72 mpty?.and.key.empty?........attr
11320 5b 75 6e 65 73 63 61 70 65 28 6b 65 79 29 5d 20 3d 20 75 6e 65 73 63 61 70 65 28 76 61 6c 75 65 [unescape(key)].=.unescape(value
11340 29 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 64 65 62 75 67 20 61 74 ).......end......}......debug.at
11360 74 72 2e 69 6e 73 70 65 63 74 0d 0a 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 65 6d 70 74 79 5f 74 tr.inspect........return.empty_t
11380 61 67 2c 20 61 74 74 72 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 64 65 66 20 73 65 6c 66 2e ag,.attr.....end.......def.self.
113a0 75 6e 65 73 63 61 70 65 5f 63 68 61 72 20 65 73 63 0d 0a 09 09 09 09 65 73 63 5b 31 5d 0d 0a 09 unescape_char.esc......esc[1]...
113c0 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 64 65 66 20 73 65 6c 66 2e 75 6e 71 75 6f 74 65 20 71 74 0d ..end.......def.self.unquote.qt.
113e0 0a 09 09 09 09 71 74 5b 31 2e 2e 2d 31 5d 2e 63 68 6f 6d 70 28 27 22 27 29 2e 67 73 75 62 28 2f .....qt[1..-1].chomp('"').gsub(/
11400 5c 5c 2e 2f 29 20 7b 20 7c 65 73 63 7c 20 75 6e 65 73 63 61 70 65 5f 63 68 61 72 20 65 73 63 20 \\./).{.|esc|.unescape_char.esc.
11420 7d 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 64 65 66 20 73 65 6c 66 2e 75 6e 65 73 63 61 70 }.....end.......def.self.unescap
11440 65 20 73 74 72 0d 0a 09 09 09 09 73 74 72 2e 67 73 75 62 28 2f 20 28 5c 5c 2e 29 20 7c 20 28 22 e.str......str.gsub(/.(\\.).|.("
11460 20 5b 5e 22 5c 5c 5d 2a 20 28 3f 3a 5c 5c 2e 5b 5e 22 5c 5c 5d 2a 29 2a 20 22 3f 29 20 2f 78 29 .[^"\\]*.(?:\\.[^"\\]*)*."?)./x)
11480 20 7b 0d 0a 09 09 09 09 09 69 66 20 24 31 0d 0a 09 09 09 09 09 09 75 6e 65 73 63 61 70 65 5f 63 .{.......if.$1........unescape_c
114a0 68 61 72 20 24 31 0d 0a 09 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 09 75 6e 71 75 6f 74 65 har.$1.......else........unquote
114c0 20 24 32 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a .$2.......end......}.....end....
114e0 09 09 09 69 6e 63 6c 75 64 65 20 45 6e 75 6d 65 72 61 62 6c 65 0d 0a 09 09 09 64 65 66 20 65 61 ...include.Enumerable.....def.ea
11500 63 68 20 26 62 6c 6f 63 6b 0d 0a 09 09 09 09 40 61 72 67 73 2e 65 61 63 68 28 26 62 6c 6f 63 6b ch.&block......@args.each(&block
11520 29 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 73 6f 75 ).....end.......attr_reader.:sou
11540 72 63 65 2c 20 3a 61 72 67 73 2c 20 3a 76 61 6c 75 65 0d 0a 0d 0a 09 09 09 64 65 66 20 69 6e 69 rce,.:args,.:value.......def.ini
11560 74 69 61 6c 69 7a 65 20 73 6f 75 72 63 65 0d 0a 09 09 09 09 40 73 6f 75 72 63 65 20 3d 20 73 6f tialize.source......@source.=.so
11580 75 72 63 65 0d 0a 09 09 09 09 64 65 62 75 67 20 27 41 74 74 72 69 62 75 74 65 23 6e 65 77 28 25 urce......debug.'Attribute#new(%
115a0 70 29 27 20 25 20 73 6f 75 72 63 65 0d 0a 09 09 09 09 40 65 6d 70 74 79 5f 74 61 67 2c 20 40 61 p)'.%.source......@empty_tag,.@a
115c0 74 74 72 20 3d 20 41 74 74 72 69 62 75 74 65 2e 70 61 72 73 65 20 73 6f 75 72 63 65 0d 0a 09 09 ttr.=.Attribute.parse.source....
115e0 09 09 40 76 61 6c 75 65 20 3d 20 40 61 74 74 72 5b 27 27 5d 2e 74 6f 5f 73 0d 0a 09 09 09 65 6e ..@value.=.@attr[''].to_s.....en
11600 64 0d 0a 0d 0a 09 09 09 64 65 66 20 65 6d 70 74 79 3f 0d 0a 09 09 09 09 73 65 6c 66 20 3d 3d 20 d.......def.empty?......self.==.
11620 40 40 65 6d 70 74 79 5f 61 74 74 72 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 64 65 66 20 65 @@empty_attr.....end.......def.e
11640 6d 70 74 79 5f 74 61 67 3f 0d 0a 09 09 09 09 40 65 6d 70 74 79 5f 74 61 67 0d 0a 09 09 09 65 6e mpty_tag?......@empty_tag.....en
11660 64 0d 0a 0d 0a 09 09 09 64 65 66 20 5b 5d 20 2a 6b 65 79 73 0d 0a 09 09 09 09 72 65 73 20 3d 20 d.......def.[].*keys......res.=.
11680 40 61 74 74 72 5b 2a 6b 65 79 73 5d 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 64 65 66 20 66 @attr[*keys].....end.......def.f
116a0 6c 61 67 73 0d 0a 09 09 09 09 61 74 74 72 5b 3a 66 6c 61 67 73 5d 0d 0a 09 09 09 65 6e 64 0d 0a lags......attr[:flags].....end..
116c0 0d 0a 09 09 09 64 65 66 20 74 6f 5f 73 0d 0a 09 09 09 09 40 61 74 74 72 0d 0a 09 09 09 65 6e 64 .....def.to_s......@attr.....end
116e0 0d 0a 0d 0a 09 09 09 64 65 66 20 69 6e 73 70 65 63 74 0d 0a 09 09 09 09 27 41 54 54 52 5b 27 20 .......def.inspect......'ATTR['.
11700 2b 20 40 61 74 74 72 2e 69 6e 73 70 65 63 74 20 2b 20 28 40 65 6d 70 74 79 5f 74 61 67 20 3f 20 +.@attr.inspect.+.(@empty_tag.?.
11720 27 20 7c 20 65 6d 70 74 79 20 74 61 67 27 20 3a 20 27 27 29 20 2b 20 27 5d 27 0d 0a 09 09 09 65 '.|.empty.tag'.:.'').+.']'.....e
11740 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 09 63 6c 61 73 73 20 41 74 74 72 69 62 75 74 65 0d 0a 09 09 nd....end....class.Attribute....
11760 09 40 40 65 6d 70 74 79 5f 61 74 74 72 20 3d 20 6e 65 77 20 27 27 0d 0a 09 09 65 6e 64 0d 0a 09 .@@empty_attr.=.new.''....end...
11780 65 6e 64 0d 0a 0d 0a 09 63 6c 61 73 73 20 50 61 72 73 65 72 0d 0a 09 09 64 65 66 20 50 61 72 73 end.....class.Parser....def.Pars
117a0 65 72 2e 66 6c 61 74 74 65 6e 20 73 74 72 0d 0a 09 09 09 23 20 72 65 70 6c 61 63 65 20 6d 61 63 er.flatten.str.....#.replace.mac
117c0 20 26 20 64 6f 73 20 6e 65 77 6c 69 6e 65 73 20 77 69 74 68 20 75 6e 69 78 20 73 74 79 6c 65 0d .&.dos.newlines.with.unix.style.
117e0 0a 09 09 09 73 74 72 2e 67 73 75 62 28 2f 5c 72 5c 6e 3f 2f 2c 20 22 5c 6e 22 29 0d 0a 09 09 65 ....str.gsub(/\r\n?/,."\n")....e
11800 6e 64 0d 0a 0d 0a 09 09 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 20 69 6e 70 75 74 20 3d 20 27 nd......def.initialize.input.=.'
11820 27 0d 0a 09 09 09 23 20 69 6e 70 75 74 20 6d 61 6e 61 67 65 72 0d 0a 09 09 09 40 73 63 61 6e 6e '.....#.input.manager.....@scann
11840 65 72 20 3d 20 53 74 72 69 6e 67 53 63 61 6e 6e 65 72 2e 6e 65 77 20 27 27 0d 0a 09 09 09 23 20 er.=.StringScanner.new.''.....#.
11860 6f 75 74 70 75 74 20 6d 61 6e 61 67 65 72 0d 0a 09 09 09 40 65 6e 63 6f 64 65 72 20 3d 20 45 6e output.manager.....@encoder.=.En
11880 63 6f 64 65 72 2e 6e 65 77 0d 0a 09 09 09 40 6f 75 74 70 75 74 20 3d 20 27 27 0d 0a 09 09 09 23 coder.new.....@output.=.''.....#
118a0 20 74 61 67 20 6d 61 6e 61 67 65 72 0d 0a 09 09 09 40 74 61 67 73 74 61 63 6b 20 3d 20 54 61 67 .tag.manager.....@tagstack.=.Tag
118c0 53 74 61 63 6b 2e 6e 65 77 28 40 65 6e 63 6f 64 65 72 29 0d 0a 0d 0a 09 09 09 40 64 6f 5f 6d 61 Stack.new(@encoder).......@do_ma
118e0 67 69 63 20 3d 20 74 72 75 65 0d 0a 09 09 09 23 20 73 65 74 20 74 68 65 20 69 6e 70 75 74 0d 0a gic.=.true.....#.set.the.input..
11900 09 09 09 66 65 65 64 20 69 6e 70 75 74 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 23 20 69 66 20 79 ...feed.input....end......#.if.y
11920 6f 75 20 77 61 6e 74 2c 20 79 6f 75 20 63 61 6e 20 66 65 65 64 20 61 20 70 61 72 73 65 72 20 69 ou.want,.you.can.feed.a.parser.i
11940 6e 73 74 61 6e 63 65 20 61 66 74 65 72 20 63 72 65 61 74 69 6e 67 2c 0d 0a 09 09 23 20 6f 72 20 nstance.after.creating,....#.or.
11960 65 76 65 6e 20 66 65 65 64 20 69 74 20 72 65 70 65 61 74 65 64 6c 79 2e 0d 0a 09 09 64 65 66 20 even.feed.it.repeatedly.....def.
11980 66 65 65 64 20 66 6f 6f 64 0d 0a 09 09 09 40 73 63 61 6e 6e 65 72 2e 73 74 72 69 6e 67 20 3d 20 feed.food.....@scanner.string.=.
119a0 50 61 72 73 65 72 2e 66 6c 61 74 74 65 6e 20 66 6f 6f 64 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 Parser.flatten.food....end......
119c0 23 20 70 61 72 73 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 73 74 72 69 6e 67 20 75 73 69 6e 67 #.parse.through.the.string.using
119e0 20 70 61 72 73 65 5f 74 6f 6b 65 6e 0d 0a 09 09 64 65 66 20 70 61 72 73 65 0d 0a 09 09 09 70 61 .parse_token....def.parse.....pa
11a00 72 73 65 5f 74 6f 6b 65 6e 20 75 6e 74 69 6c 20 40 73 63 61 6e 6e 65 72 2e 65 6f 73 3f 0d 0a 09 rse_token.until.@scanner.eos?...
11a20 09 09 40 74 61 67 73 74 61 63 6b 2e 63 6c 6f 73 65 5f 61 6c 6c 0d 0a 09 09 09 40 6f 75 74 70 75 ..@tagstack.close_all.....@outpu
11a40 74 20 3d 20 70 61 72 73 65 5f 6d 61 67 69 63 20 40 65 6e 63 6f 64 65 72 2e 6f 75 74 70 75 74 0d t.=.parse_magic.@encoder.output.
11a60 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 64 65 66 20 6f 75 74 70 75 74 0d 0a 09 09 09 40 6f 75 74 70 ...end......def.output.....@outp
11a80 75 74 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 23 20 6f 6b 2c 20 69 6e 74 65 72 6e 61 6c 73 20 73 74 ut....end.....#.ok,.internals.st
11aa0 61 72 74 20 68 65 72 65 0d 0a 09 70 72 69 76 61 74 65 0d 0a 09 09 23 20 74 68 65 20 64 65 66 61 art.here...private....#.the.defa
11ac0 75 6c 74 20 6f 75 74 70 75 74 20 66 75 6e 63 74 69 6f 6e 73 2e 20 65 76 65 72 79 74 68 69 6e 67 ult.output.functions..everything
11ae0 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 6d 20 6f 72 20 74 68 65 20 74 61 67 73 2e 0d 0a 09 .should.use.them.or.the.tags....
11b00 09 64 65 66 20 61 64 64 5f 74 65 78 74 20 74 65 78 74 20 3d 20 40 73 63 61 6e 6e 65 72 2e 6d 61 .def.add_text.text.=.@scanner.ma
11b20 74 63 68 65 64 0d 0a 09 09 09 40 65 6e 63 6f 64 65 72 2e 61 64 64 5f 74 65 78 74 20 74 65 78 74 tched.....@encoder.add_text.text
11b40 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 23 20 75 73 65 20 74 68 69 73 20 63 61 72 65 66 75 6c 6c ....end......#.use.this.carefull
11b60 79 0d 0a 09 09 64 65 66 20 61 64 64 5f 68 74 6d 6c 20 68 74 6d 6c 0d 0a 09 09 09 40 65 6e 63 6f y....def.add_html.html.....@enco
11b80 64 65 72 2e 61 64 64 5f 68 74 6d 6c 20 68 74 6d 6c 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 23 20 der.add_html.html....end......#.
11ba0 68 69 67 68 6c 69 67 68 74 73 20 74 68 65 20 74 65 78 74 20 61 73 20 65 72 72 6f 72 0d 0a 09 09 highlights.the.text.as.error....
11bc0 64 65 66 20 61 64 64 5f 67 61 72 62 61 67 65 20 67 61 72 62 61 67 65 0d 0a 09 09 09 61 64 64 5f def.add_garbage.garbage.....add_
11be0 68 74 6d 6c 20 27 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 65 72 72 6f 72 22 3e 27 20 69 66 20 44 html.'<span.class="error">'.if.D
11c00 45 42 55 47 0d 0a 09 09 09 61 64 64 5f 74 65 78 74 20 67 61 72 62 61 67 65 0d 0a 09 09 09 61 64 EBUG.....add_text.garbage.....ad
11c20 64 5f 68 74 6d 6c 20 27 3c 2f 73 70 61 6e 3e 27 20 69 66 20 44 45 42 55 47 0d 0a 09 09 65 6e 64 d_html.'</span>'.if.DEBUG....end
11c40 0d 0a 0d 0a 09 09 23 20 75 6e 6b 6e 6f 77 6e 20 61 6e 64 20 69 6e 63 6f 72 72 65 63 74 6c 79 20 ......#.unknown.and.incorrectly.
11c60 6e 65 73 74 65 64 20 74 61 67 73 20 61 72 65 20 69 67 6e 6f 72 65 64 20 61 6e 64 0d 0a 09 09 23 nested.tags.are.ignored.and....#
11c80 20 73 65 6e 74 20 61 73 20 70 6c 61 69 6e 74 65 78 74 20 28 67 61 72 62 61 67 65 20 69 6e 20 2d .sent.as.plaintext.(garbage.in.-
11ca0 20 67 61 72 62 61 67 65 20 6f 75 74 29 2e 0d 0a 09 09 23 20 69 6e 20 64 65 62 75 67 20 6d 6f 64 .garbage.out).....#.in.debug.mod
11cc0 65 2c 20 67 61 72 62 61 67 65 20 69 73 20 6d 61 72 6b 65 64 20 77 69 74 68 20 6c 69 6d 65 20 62 e,.garbage.is.marked.with.lime.b
11ce0 61 63 6b 67 72 6f 75 6e 64 2e 0d 0a 09 09 64 65 66 20 67 61 72 62 61 67 65 5f 6f 75 74 20 73 74 ackground.....def.garbage_out.st
11d00 61 72 74 0d 0a 09 09 09 40 73 63 61 6e 6e 65 72 2e 70 6f 73 20 3d 20 73 74 61 72 74 0d 0a 09 09 art.....@scanner.pos.=.start....
11d20 09 67 61 72 62 61 67 65 20 3d 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 2e 2f 6d 29 0d 0a .garbage.=.@scanner.scan(/./m)..
11d40 09 09 09 64 65 62 75 67 20 27 47 41 52 42 41 47 45 3a 20 27 20 2b 20 67 61 72 62 61 67 65 0d 0a ...debug.'GARBAGE:.'.+.garbage..
11d60 09 09 09 61 64 64 5f 67 61 72 62 61 67 65 20 67 61 72 62 61 67 65 0d 0a 09 09 65 6e 64 0d 0a 0d ...add_garbage.garbage....end...
11d80 0a 09 09 23 20 73 69 6d 70 6c 65 20 74 65 78 74 3b 20 65 76 65 72 79 74 68 69 6e 67 20 62 75 74 ...#.simple.text;.everything.but
11da0 20 5b 2c 20 5c 5b 20 61 6c 6c 6f 77 65 64 0d 0a 09 09 53 49 4d 50 4c 45 5f 54 45 58 54 5f 53 43 .[,.\[.allowed....SIMPLE_TEXT_SC
11dc0 41 4e 5f 20 3d 20 2f 0d 0a 09 09 09 5b 5e 5c 5b 5c 5c 5d 2a 20 20 20 20 23 20 6e 6f 72 6d 61 6c AN_.=./.....[^\[\\]*....#.normal
11de0 2a 0d 0a 09 09 09 28 3f 3a 20 20 20 20 20 20 20 20 20 23 20 28 0d 0a 09 09 09 5c 5c 2e 3f 20 20 *.....(?:.........#.(.....\\.?..
11e00 20 20 20 20 20 20 23 20 20 20 73 70 65 63 69 61 6c 0d 0a 09 09 09 5b 5e 5c 5b 5c 5c 5d 2a 20 20 ......#...special.....[^\[\\]*..
11e20 20 20 23 20 20 20 6e 6f 72 6d 61 6c 2a 0d 0a 09 09 09 29 2a 20 20 20 20 20 20 20 20 20 20 23 20 ..#...normal*.....)*..........#.
11e40 29 2a 0d 0a 09 09 2f 6d 78 0d 0a 09 09 53 49 4d 50 4c 45 5f 54 45 58 54 5f 53 43 41 4e 20 3d 20 )*..../mx....SIMPLE_TEXT_SCAN.=.
11e60 2f 5b 5e 5c 5b 5d 2b 2f 0d 0a 0d 0a 3d 62 65 67 69 6e 0d 0a 0d 0a 09 57 48 41 54 20 49 53 20 41 /[^\[]+/....=begin.....WHAT.IS.A
11e80 20 54 41 47 3f 0d 0a 09 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 09 54 61 67 73 20 .TAG?...==============.....Tags.
11ea0 69 6e 20 42 42 43 6f 64 65 20 63 61 6e 20 62 65 20 6d 75 63 68 20 6d 6f 72 65 20 74 68 61 6e 20 in.BBCode.can.be.much.more.than.
11ec0 6a 75 73 74 20 61 20 73 69 6d 70 6c 65 20 5b 62 5d 2e 0d 0a 09 49 20 75 73 65 20 6d 61 6e 79 20 just.a.simple.[b]....I.use.many.
11ee0 74 65 72 6d 73 20 68 65 72 65 20 74 6f 20 64 69 66 66 65 72 20 74 68 65 20 70 61 72 74 73 20 6f terms.here.to.differ.the.parts.o
11f00 66 20 65 61 63 68 20 74 61 67 2e 0d 0a 0d 0a 09 42 61 73 69 63 20 73 63 68 65 6d 65 3a 0d 0a 09 f.each.tag......Basic.scheme:...
11f20 20 20 20 20 5b 20 20 20 20 20 20 20 20 20 63 6f 64 65 20 20 20 20 20 20 20 20 5d 0d 0a 09 54 41 ....[.........code........]...TA
11f40 47 20 53 54 41 52 54 20 20 20 54 41 47 20 49 4e 46 4f 20 20 20 54 41 47 20 45 4e 44 0d 0a 0d 0a G.START...TAG.INFO...TAG.END....
11f60 09 4d 6f 73 74 20 74 61 67 73 20 6e 65 65 64 20 61 20 73 65 63 6f 6e 64 20 74 61 67 20 74 6f 20 .Most.tags.need.a.second.tag.to.
11f80 63 6c 6f 73 65 20 74 68 65 20 72 61 6e 67 65 20 69 74 20 6f 70 65 6e 65 64 2e 0d 0a 09 54 68 69 close.the.range.it.opened....Thi
11fa0 73 20 69 73 20 64 6f 6e 65 20 77 69 74 68 20 43 4c 4f 53 49 4e 47 20 54 41 47 53 3a 0d 0a 09 09 s.is.done.with.CLOSING.TAGS:....
11fc0 5b 2f 63 6f 64 65 5d 0d 0a 09 6f 72 20 62 79 20 75 73 69 6e 67 20 65 6d 70 74 79 20 74 61 67 73 [/code]...or.by.using.empty.tags
11fe0 20 74 68 61 74 20 68 61 76 65 20 6e 6f 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6c 6f 73 65 20 .that.have.no.content.and.close.
12000 74 68 65 6d 73 65 6c 66 65 73 3a 0d 0a 09 09 5b 75 72 6c 3d 77 69 6e 61 6d 70 2e 63 6f 6d 20 2f themselfes:....[url=winamp.com./
12020 5d 0d 0a 09 59 6f 75 20 73 75 72 65 6c 79 20 6b 6e 6f 77 20 74 68 69 73 20 66 72 6f 6d 20 48 54 ]...You.surely.know.this.from.HT
12040 4d 4c 2e 0d 0a 09 54 68 65 73 65 20 73 6c 61 73 68 65 73 20 64 65 66 69 6e 65 20 74 68 65 20 54 ML....These.slashes.define.the.T
12060 41 47 20 4b 49 4e 44 20 3d 20 6e 6f 72 6d 61 6c 7c 63 6c 6f 73 69 6e 67 7c 65 6d 70 74 79 20 61 AG.KIND.=.normal|closing|empty.a
12080 6e 64 0d 0a 09 63 61 6e 6e 6f 74 20 62 65 09 75 73 65 64 20 74 6f 67 65 74 68 65 72 2e 0d 0a 0d nd...cannot.be.used.together....
120a0 0a 09 45 76 65 72 79 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 5b 20 61 6e 64 20 5d 20 61 6e 64 ..Everything.between.[.and.].and
120c0 20 65 78 70 6c 75 64 69 6e 67 20 74 68 65 20 73 6c 61 73 68 65 73 20 69 73 20 63 61 6c 6c 65 64 .expluding.the.slashes.is.called
120e0 20 74 68 65 0d 0a 09 54 41 47 20 49 4e 46 4f 2e 09 54 68 69 73 20 69 6e 66 6f 20 6d 61 79 20 63 .the...TAG.INFO..This.info.may.c
12100 6f 6e 74 61 69 6e 3a 0d 0a 09 2d 20 54 41 47 20 49 44 0d 0a 09 2d 20 54 41 47 20 4e 41 4d 45 20 ontain:...-.TAG.ID...-.TAG.NAME.
12120 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 74 61 67 20 69 64 0d 0a 09 2d 20 61 74 74 72 69 62 75 including.the.tag.id...-.attribu
12140 74 65 73 0d 0a 0d 0a 09 54 68 65 20 54 41 47 20 49 44 20 69 73 20 74 68 65 20 66 69 72 73 74 20 tes.....The.TAG.ID.is.the.first.
12160 63 68 61 72 20 6f 66 20 74 68 65 20 69 6e 66 6f 3a 0d 0a 0d 0a 09 54 41 47 20 20 20 20 20 20 20 char.of.the.info:.....TAG.......
12180 7c 20 49 44 0d 0a 09 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2d 2d 0d 0a 09 5b 71 75 6f 74 65 5d |.ID...----------+----...[quote]
121a0 20 20 20 7c 20 71 0d 0a 09 5b 26 70 6c 75 73 6d 6e 5d 20 7c 20 26 0d 0a 09 5b 22 5b 62 5d 22 5d ...|.q...[&plusmn].|.&...["[b]"]
121c0 20 20 20 7c 20 22 0d 0a 09 5b 2f 75 72 6c 5d 20 20 20 20 7c 20 75 0d 0a 09 5b 2d 2d 2d 5d 20 20 ...|."...[/url]....|.u...[---]..
121e0 20 20 20 7c 20 2d 0d 0a 0d 0a 09 41 73 20 79 6f 75 20 63 61 6e 20 73 65 65 2c 20 74 68 65 20 74 ...|.-.....As.you.can.see,.the.t
12200 61 67 20 69 64 20 73 68 6f 77 73 20 74 68 65 20 54 41 47 20 54 59 50 45 2c 20 69 74 20 63 61 6e ag.id.shows.the.TAG.TYPE,.it.can
12220 20 62 65 20 61 0d 0a 09 6e 6f 72 6d 61 6c 20 74 61 67 2c 09 61 20 66 6f 72 6d 61 74 74 69 6e 67 .be.a...normal.tag,.a.formatting
12240 20 74 61 67 20 6f 72 20 61 6e 20 65 6e 74 69 74 79 2e 0d 0a 09 54 68 65 72 65 66 6f 72 2c 20 74 .tag.or.an.entity....Therefor,.t
12260 68 65 20 70 61 72 73 65 72 20 66 69 72 73 74 20 73 63 61 6e 73 20 74 68 65 20 69 64 20 74 6f 20 he.parser.first.scans.the.id.to.
12280 64 65 63 69 64 65 20 68 6f 77 20 74 6f 20 67 6f 0d 0a 09 6f 6e 20 77 69 74 68 20 70 61 72 73 69 decide.how.to.go...on.with.parsi
122a0 6e 67 2e 0d 0a 3d 65 6e 64 0d 0a 09 09 23 20 74 61 67 0d 0a 09 09 23 20 54 4f 44 4f 20 6d 6f 72 ng...=end....#.tag....#.TODO.mor
122c0 65 20 63 6f 6d 70 6c 65 78 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6c 6c 6f 77 69 6e 67 0d 0a 09 e.complex.expression.allowing...
122e0 09 23 20 20 20 5b 71 75 6f 74 65 3d 22 5b 6c 61 64 69 63 6f 5d 22 5d 20 61 6e 64 20 5b 71 75 6f .#...[quote="[ladico]"].and.[quo
12300 74 65 3d 5c 5b 6c 61 64 69 63 6f 5c 5d 5d 20 74 6f 20 62 65 20 63 6f 72 72 65 63 74 20 74 61 67 te=\[ladico\]].to.be.correct.tag
12320 73 0d 0a 09 09 54 41 47 5f 42 45 47 49 4e 5f 53 43 41 4e 20 3d 20 2f 0d 0a 09 09 09 5c 5b 20 20 s....TAG_BEGIN_SCAN.=./.....\[..
12340 20 20 20 20 20 20 20 20 20 20 20 23 20 74 61 67 20 73 74 61 72 74 0d 0a 09 09 09 28 20 5c 2f 20 ...........#.tag.start.....(.\/.
12360 29 3f 20 20 20 20 20 20 20 20 23 20 24 31 20 3d 20 63 6c 6f 73 69 6e 67 20 74 61 67 3f 0d 0a 09 )?........#.$1.=.closing.tag?...
12380 09 09 28 20 5b 5e 5c 5d 5d 20 29 20 20 20 20 20 20 23 20 24 32 20 3d 20 74 61 67 20 69 64 0d 0a ..(.[^\]].)......#.$2.=.tag.id..
123a0 09 09 2f 78 0d 0a 09 09 54 41 47 5f 45 4e 44 5f 53 43 41 4e 20 3d 20 2f 0d 0a 09 09 09 5b 5e 5c ../x....TAG_END_SCAN.=./.....[^\
123c0 5d 5d 2a 20 20 20 20 20 20 20 20 20 23 20 72 65 73 74 20 74 68 61 74 20 77 61 73 20 6e 6f 74 20 ]]*.........#.rest.that.was.not.
123e0 68 61 6e 64 6c 65 64 0d 0a 09 09 09 5c 5d 3f 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 61 67 handled.....\]?............#.tag
12400 20 65 6e 64 0d 0a 09 09 2f 78 0d 0a 09 09 43 4c 4f 53 45 5f 54 41 47 5f 53 43 41 4e 20 3d 20 2f .end..../x....CLOSE_TAG_SCAN.=./
12420 0d 0a 09 09 09 28 20 5b 5e 5c 5d 5d 2a 20 29 20 20 20 20 20 23 20 24 31 20 3d 20 74 68 65 20 72 .....(.[^\]]*.).....#.$1.=.the.r
12440 65 73 74 20 6f 66 20 74 68 65 20 74 61 67 20 69 6e 66 6f 0d 0a 09 09 09 28 20 5c 2f 20 29 3f 20 est.of.the.tag.info.....(.\/.)?.
12460 20 20 20 20 20 20 20 23 20 24 32 20 3d 20 65 6d 70 74 79 20 74 61 67 3f 0d 0a 09 09 09 5c 5d 3f .......#.$2.=.empty.tag?.....\]?
12480 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 61 67 20 65 6e 64 0d 0a 09 09 2f 78 0d 0a 09 09 55 ............#.tag.end..../x....U
124a0 4e 43 4c 4f 53 45 44 5f 54 41 47 5f 53 43 41 4e 20 3d 20 2f 20 5c 5b 20 2f 78 0d 0a 0d 0a 09 09 NCLOSED_TAG_SCAN.=./.\[./x......
124c0 43 4c 41 53 53 49 43 5f 54 41 47 5f 53 43 41 4e 20 3d 20 2f 20 5b 61 2d 7a 5d 2a 20 2f 69 78 0d CLASSIC_TAG_SCAN.=./.[a-z]*./ix.
124e0 0a 0d 0a 09 09 53 45 50 41 52 41 54 4f 52 5f 54 41 47 5f 53 43 41 4e 20 3d 20 2f 20 5c 2a 2a 20 .....SEPARATOR_TAG_SCAN.=./.\**.
12500 2f 78 0d 0a 0d 0a 09 09 46 4f 52 4d 41 54 5f 54 41 47 5f 53 43 41 4e 20 3d 20 2f 20 2d 2d 20 2d /x......FORMAT_TAG_SCAN.=./.--.-
12520 2a 20 2f 78 0d 0a 0d 0a 09 09 51 55 4f 54 45 44 5f 53 43 41 4e 20 3d 20 2f 0d 0a 09 09 09 28 20 *./x......QUOTED_SCAN.=./.....(.
12540 20 20 20 20 20 20 20 20 20 20 20 23 20 24 31 20 3d 20 71 75 6f 74 65 64 20 74 65 78 74 0d 0a 09 ...........#.$1.=.quoted.text...
12560 09 09 09 5b 5e 22 5c 5c 5d 2a 20 20 20 20 23 20 6e 6f 72 6d 61 6c 2a 0d 0a 09 09 09 09 28 3f 3a ...[^"\\]*....#.normal*......(?:
12580 20 20 20 20 20 20 20 20 23 20 28 0d 0a 09 09 09 09 09 5c 5c 2e 20 20 20 20 20 20 23 20 09 73 70 ........#.(.......\\.......#..sp
125a0 65 63 69 61 6c 0d 0a 09 09 09 09 09 5b 5e 22 5c 5c 5d 2a 20 20 23 20 09 6e 6f 72 6d 61 6c 2a 0d ecial.......[^"\\]*..#..normal*.
125c0 0a 09 09 09 09 29 2a 20 20 20 20 20 20 20 20 20 23 20 29 2a 0d 0a 09 09 09 29 0d 0a 09 09 09 22 .....)*.........#.)*.....)....."
125e0 3f 20 20 20 20 20 20 20 20 20 20 20 23 20 65 6e 64 20 71 75 6f 74 65 20 22 0d 0a 09 09 2f 6d 78 ?...........#.end.quote."..../mx
12600 0d 0a 0d 0a 09 09 45 4e 54 49 54 59 5f 53 43 41 4e 20 3d 20 2f 0d 0a 09 09 09 28 20 5b 5e 3b 5c ......ENTITY_SCAN.=./.....(.[^;\
12620 5d 5d 2b 20 29 20 20 23 20 24 31 20 3d 20 65 6e 74 69 74 79 20 63 6f 64 65 0d 0a 09 09 09 3b 3f ]]+.)..#.$1.=.entity.code.....;?
12640 20 20 20 20 20 20 20 20 20 20 20 23 20 6f 70 74 69 6f 6e 61 6c 20 65 6e 64 69 6e 67 20 73 65 6d ...........#.optional.ending.sem
12660 69 63 6f 6c 6f 6e 0d 0a 09 09 2f 69 78 0d 0a 0d 0a 09 09 53 4d 49 4c 45 59 5f 53 43 41 4e 20 3d icolon..../ix......SMILEY_SCAN.=
12680 20 53 6d 69 6c 65 79 73 3a 3a 53 4d 49 4c 45 59 5f 50 41 54 54 45 52 4e 0d 0a 0d 0a 09 09 23 20 .Smileys::SMILEY_PATTERN......#.
126a0 74 68 69 73 20 69 73 20 74 68 65 20 6d 61 69 6e 20 70 61 72 73 65 72 20 6c 6f 6f 70 20 74 68 61 this.is.the.main.parser.loop.tha
126c0 74 20 73 65 70 61 72 61 74 65 73 0d 0a 09 09 23 20 20 20 74 65 78 74 20 2d 20 65 76 65 72 79 74 t.separates....#...text.-.everyt
126e0 68 69 6e 67 20 75 6e 74 69 6c 20 22 5b 22 0d 0a 09 09 23 20 66 72 6f 6d 0d 0a 09 09 23 20 20 20 hing.until."["....#.from....#...
12700 74 61 67 73 20 2d 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 22 5b 22 2c 20 65 6e 64 69 6e 67 tags.-.starting.with."[",.ending
12720 20 77 69 74 68 20 22 5d 22 0d 0a 09 09 64 65 66 20 70 61 72 73 65 5f 74 6f 6b 65 6e 0d 0a 09 09 .with."]"....def.parse_token....
12740 09 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 53 49 4d 50 4c 45 5f 54 45 58 54 5f 53 43 .if.@scanner.scan(SIMPLE_TEXT_SC
12760 41 4e 29 0d 0a 09 09 09 09 61 64 64 5f 74 65 78 74 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 AN)......add_text.....else......
12780 68 61 6e 64 6c 65 5f 74 61 67 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 64 handle_tag.....end....end......d
127a0 65 66 20 68 61 6e 64 6c 65 5f 74 61 67 0d 0a 09 09 09 74 61 67 5f 73 74 61 72 74 20 3d 20 40 73 ef.handle_tag.....tag_start.=.@s
127c0 63 61 6e 6e 65 72 2e 70 6f 73 0d 0a 0d 0a 09 09 09 75 6e 6c 65 73 73 20 40 73 63 61 6e 6e 65 72 canner.pos.......unless.@scanner
127e0 2e 73 63 61 6e 20 54 41 47 5f 42 45 47 49 4e 5f 53 43 41 4e 0d 0a 09 09 09 09 67 61 72 62 61 67 .scan.TAG_BEGIN_SCAN......garbag
12800 65 5f 6f 75 74 20 74 61 67 5f 73 74 61 72 74 0d 0a 09 09 09 09 72 65 74 75 72 6e 0d 0a 09 09 09 e_out.tag_start......return.....
12820 65 6e 64 0d 0a 0d 0a 09 09 09 63 6c 6f 73 69 6e 67 2c 20 69 64 20 3d 20 40 73 63 61 6e 6e 65 72 end.......closing,.id.=.@scanner
12840 5b 31 5d 2c 20 40 73 63 61 6e 6e 65 72 5b 32 5d 0d 0a 09 09 09 23 64 65 62 75 67 20 27 68 61 6e [1],.@scanner[2].....#debug.'han
12860 64 6c 65 5f 74 61 67 28 25 70 29 27 20 25 20 40 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 0d dle_tag(%p)'.%.@scanner.matched.
12880 0a 0d 0a 09 09 09 68 61 6e 64 6c 65 64 20 3d 0d 0a 09 09 09 09 63 61 73 65 20 69 64 0d 0a 0d 0a ......handled.=......case.id....
128a0 09 09 09 09 09 77 68 65 6e 20 2f 5b 61 2d 7a 5d 2f 69 0d 0a 09 09 09 09 09 09 69 66 20 40 73 63 .....when./[a-z]/i........if.@sc
128c0 61 6e 6e 65 72 2e 73 63 61 6e 28 43 4c 41 53 53 49 43 5f 54 41 47 5f 53 43 41 4e 29 0d 0a 09 09 anner.scan(CLASSIC_TAG_SCAN)....
128e0 09 09 09 09 09 69 66 20 68 61 6e 64 6c 65 5f 63 6c 61 73 73 69 63 5f 74 61 67 28 69 64 20 2b 20 .....if.handle_classic_tag(id.+.
12900 40 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 2c 20 63 6c 6f 73 69 6e 67 29 0d 0a 09 09 09 09 @scanner.matched,.closing)......
12920 09 09 09 09 61 6c 72 65 61 64 79 5f 63 6c 6f 73 65 64 20 3d 20 74 72 75 65 0d 0a 09 09 09 09 09 ....already_closed.=.true.......
12940 09 09 65 6e 64 0d 0a 09 09 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 09 09 77 68 65 6e 20 27 2a ..end........end.........when.'*
12960 27 0d 0a 09 09 09 09 09 09 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 53 45 50 41 52 41 '........if.@scanner.scan(SEPARA
12980 54 4f 52 5f 54 41 47 5f 53 43 41 4e 29 0d 0a 09 09 09 09 09 09 09 68 61 6e 64 6c 65 5f 61 73 74 TOR_TAG_SCAN).........handle_ast
129a0 65 72 69 73 6b 20 74 61 67 5f 73 74 61 72 74 2c 20 69 64 20 2b 20 40 73 63 61 6e 6e 65 72 2e 6d erisk.tag_start,.id.+.@scanner.m
129c0 61 74 63 68 65 64 0d 0a 09 09 09 09 09 09 09 74 72 75 65 0d 0a 09 09 09 09 09 09 65 6e 64 0d 0a atched.........true........end..
129e0 0d 0a 09 09 09 09 09 77 68 65 6e 20 27 2d 27 0d 0a 09 09 09 09 09 09 69 66 20 40 73 63 61 6e 6e .......when.'-'........if.@scann
12a00 65 72 2e 73 63 61 6e 28 46 4f 52 4d 41 54 5f 54 41 47 5f 53 43 41 4e 29 0d 0a 09 09 09 09 09 09 er.scan(FORMAT_TAG_SCAN)........
12a20 09 23 66 6f 72 6d 61 74 20 3d 20 69 64 20 2b 20 40 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 .#format.=.id.+.@scanner.matched
12a40 0d 0a 09 09 09 09 09 09 09 40 65 6e 63 6f 64 65 72 2e 61 64 64 5f 68 74 6d 6c 20 22 5c 6e 3c 68 .........@encoder.add_html."\n<h
12a60 72 3e 5c 6e 22 0d 0a 09 09 09 09 09 09 09 74 72 75 65 0d 0a 09 09 09 09 09 09 65 6e 64 0d 0a 0d r>\n".........true........end...
12a80 0a 09 09 09 09 09 77 68 65 6e 20 27 22 27 0d 0a 09 09 09 09 09 09 69 66 20 40 73 63 61 6e 6e 65 ......when.'"'........if.@scanne
12aa0 72 2e 73 63 61 6e 28 51 55 4f 54 45 44 5f 53 43 41 4e 29 0d 0a 09 09 09 09 09 09 09 40 65 6e 63 r.scan(QUOTED_SCAN).........@enc
12ac0 6f 64 65 72 2e 61 64 64 5f 74 65 78 74 20 75 6e 65 73 63 61 70 65 28 40 73 63 61 6e 6e 65 72 5b oder.add_text.unescape(@scanner[
12ae0 31 5d 29 0d 0a 09 09 09 09 09 09 09 74 72 75 65 0d 0a 09 09 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 1]).........true........end.....
12b00 09 09 09 09 77 68 65 6e 20 27 26 27 0d 0a 09 09 09 09 09 09 69 66 20 40 73 63 61 6e 6e 65 72 2e ....when.'&'........if.@scanner.
12b20 73 63 61 6e 28 45 4e 54 49 54 59 5f 53 43 41 4e 29 0d 0a 09 09 09 09 09 09 09 40 65 6e 63 6f 64 scan(ENTITY_SCAN).........@encod
12b40 65 72 2e 61 64 64 5f 65 6e 74 69 74 79 20 40 73 63 61 6e 6e 65 72 5b 31 5d 0d 0a 09 09 09 09 09 er.add_entity.@scanner[1].......
12b60 09 09 74 72 75 65 0d 0a 09 09 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 09 09 77 68 65 6e 20 53 ..true........end.........when.S
12b80 6d 69 6c 65 79 73 3a 3a 53 4d 49 4c 45 59 5f 53 54 41 52 54 5f 43 48 41 52 53 45 54 0d 0a 09 09 mileys::SMILEY_START_CHARSET....
12ba0 09 09 09 09 40 73 63 61 6e 6e 65 72 2e 70 6f 73 20 3d 20 40 73 63 61 6e 6e 65 72 2e 70 6f 73 20 ....@scanner.pos.=.@scanner.pos.
12bc0 2d 20 31 20 20 23 20 28 75 6e 67 65 74 63 68 29 0d 0a 09 09 09 09 09 09 69 66 20 40 73 63 61 6e -.1..#.(ungetch)........if.@scan
12be0 6e 65 72 2e 73 63 61 6e 28 53 4d 49 4c 45 59 5f 53 43 41 4e 29 0d 0a 09 09 09 09 09 09 09 40 65 ner.scan(SMILEY_SCAN).........@e
12c00 6e 63 6f 64 65 72 2e 61 64 64 5f 68 74 6d 6c 20 53 6d 69 6c 65 79 73 2e 73 6d 69 6c 65 79 5f 74 ncoder.add_html.Smileys.smiley_t
12c20 6f 5f 69 6d 61 67 65 28 40 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 29 0d 0a 09 09 09 09 09 o_image(@scanner.matched).......
12c40 09 09 74 72 75 65 0d 0a 09 09 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 09 65 6e 64 20 23 20 63 ..true........end........end.#.c
12c60 61 73 65 0d 0a 0d 0a 09 09 09 72 65 74 75 72 6e 20 67 61 72 62 61 67 65 5f 6f 75 74 28 74 61 67 ase.......return.garbage_out(tag
12c80 5f 73 74 61 72 74 29 20 75 6e 6c 65 73 73 20 68 61 6e 64 6c 65 64 0d 0a 0d 0a 09 09 09 40 73 63 _start).unless.handled.......@sc
12ca0 61 6e 6e 65 72 2e 73 63 61 6e 28 54 41 47 5f 45 4e 44 5f 53 43 41 4e 29 20 75 6e 6c 65 73 73 20 anner.scan(TAG_END_SCAN).unless.
12cc0 61 6c 72 65 61 64 79 5f 63 6c 6f 73 65 64 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 41 54 54 52 49 already_closed....end......ATTRI
12ce0 42 55 54 45 53 5f 53 43 41 4e 20 3d 20 2f 0d 0a 09 09 09 28 0d 0a 09 09 09 09 5b 5e 5c 5d 22 5c BUTES_SCAN.=./.....(......[^\]"\
12d00 5c 5d 2a 0d 0a 09 09 09 09 28 3f 3a 0d 0a 09 09 09 09 09 28 3f 3a 0d 0a 09 09 09 09 09 09 5c 5c \]*......(?:.......(?:........\\
12d20 2e 0d 0a 09 09 09 09 09 7c 0d 0a 09 09 09 09 09 09 22 0d 0a 09 09 09 09 09 09 5b 5e 22 5c 5c 5d ........|........"........[^"\\]
12d40 2a 0d 0a 09 09 09 09 09 09 28 3f 3a 0d 0a 09 09 09 09 09 09 09 5c 5c 2e 0d 0a 09 09 09 09 09 09 *........(?:.........\\.........
12d60 09 5b 5e 22 5c 5c 5d 2a 0d 0a 09 09 09 09 09 09 29 2a 0d 0a 09 09 09 09 09 09 22 3f 0d 0a 09 09 .[^"\\]*........)*........"?....
12d80 09 09 09 29 0d 0a 09 09 09 09 09 5b 5e 5c 5d 22 5c 5c 5d 2a 0d 0a 09 09 09 09 29 2a 0d 0a 09 09 ...).......[^\]"\\]*......)*....
12da0 09 29 0d 0a 09 09 09 5c 5d 3f 0d 0a 09 09 2f 78 0d 0a 0d 0a 09 09 64 65 66 20 68 61 6e 64 6c 65 .).....\]?..../x......def.handle
12dc0 5f 63 6c 61 73 73 69 63 5f 74 61 67 20 6e 61 6d 65 2c 20 63 6c 6f 73 69 6e 67 0d 0a 09 09 09 64 _classic_tag.name,.closing.....d
12de0 65 62 75 67 20 27 54 41 47 3a 20 27 20 2b 20 28 63 6c 6f 73 69 6e 67 20 3f 20 27 2f 27 20 3a 20 ebug.'TAG:.'.+.(closing.?.'/'.:.
12e00 27 27 29 20 2b 20 6e 61 6d 65 0d 0a 09 09 09 23 20 66 6c 61 74 74 65 6e 0d 0a 09 09 09 6e 61 6d '').+.name.....#.flatten.....nam
12e20 65 2e 64 6f 77 6e 63 61 73 65 21 0d 0a 09 09 09 74 61 67 5f 63 6c 61 73 73 20 3d 20 54 41 47 5f e.downcase!.....tag_class.=.TAG_
12e40 4c 49 53 54 5b 6e 61 6d 65 5d 0d 0a 09 09 09 72 65 74 75 72 6e 20 75 6e 6c 65 73 73 20 74 61 67 LIST[name].....return.unless.tag
12e60 5f 63 6c 61 73 73 0d 0a 0d 0a 09 09 09 23 64 65 62 75 67 28 28 6f 70 65 6e 69 6e 67 20 3f 20 27 _class.......#debug((opening.?.'
12e80 4f 50 45 4e 20 27 20 3a 20 27 43 4c 4f 53 45 20 27 29 20 2b 20 74 61 67 5f 63 6c 61 73 73 2e 6e OPEN.'.:.'CLOSE.').+.tag_class.n
12ea0 61 6d 65 29 0d 0a 0d 0a 09 09 09 23 20 63 72 65 61 74 65 20 61 6e 20 61 74 74 72 69 62 75 74 65 ame).......#.create.an.attribute
12ec0 20 6f 62 6a 65 63 74 20 74 6f 20 68 61 6e 64 6c 65 20 69 74 0d 0a 09 09 09 40 73 63 61 6e 6e 65 .object.to.handle.it.....@scanne
12ee0 72 2e 73 63 61 6e 28 41 54 54 52 49 42 55 54 45 53 5f 53 43 41 4e 29 0d 0a 09 09 09 23 64 65 62 r.scan(ATTRIBUTES_SCAN).....#deb
12f00 75 67 20 6e 61 6d 65 20 2b 20 27 3a 27 20 2b 20 40 73 63 61 6e 6e 65 72 5b 31 5d 0d 0a 09 09 09 ug.name.+.':'.+.@scanner[1].....
12f20 61 74 74 72 20 3d 20 41 74 74 72 69 62 75 74 65 2e 63 72 65 61 74 65 20 40 73 63 61 6e 6e 65 72 attr.=.Attribute.create.@scanner
12f40 5b 31 5d 0d 0a 09 09 09 23 64 65 62 75 67 20 27 41 54 54 52 49 42 55 54 45 53 20 25 70 20 27 20 [1].....#debug.'ATTRIBUTES.%p.'.
12f60 25 20 61 74 74 72 20 23 75 6e 6c 65 73 73 20 61 74 74 72 2e 65 6d 70 74 79 3f 0d 0a 0d 0a 09 09 %.attr.#unless.attr.empty?......
12f80 09 23 64 65 62 75 67 20 27 63 6c 6f 73 69 6e 67 3a 20 25 70 3b 20 6e 61 6d 65 3d 25 73 2c 20 61 .#debug.'closing:.%p;.name=%s,.a
12fa0 74 74 72 3d 25 70 27 20 25 20 5b 63 6c 6f 73 69 6e 67 2c 20 6e 61 6d 65 2c 20 61 74 74 72 5d 0d ttr=%p'.%.[closing,.name,.attr].
12fc0 0a 0d 0a 09 09 09 23 20 4f 50 45 4e 0d 0a 09 09 09 69 66 20 6e 6f 74 20 63 6c 6f 73 69 6e 67 20 ......#.OPEN.....if.not.closing.
12fe0 61 6e 64 20 74 61 67 20 3d 20 40 74 61 67 73 74 61 63 6b 2e 74 72 79 5f 6f 70 65 6e 5f 63 6c 61 and.tag.=.@tagstack.try_open_cla
13000 73 73 28 74 61 67 5f 63 6c 61 73 73 2c 20 61 74 74 72 29 0d 0a 09 09 09 09 23 64 65 62 75 67 20 ss(tag_class,.attr)......#debug.
13020 27 6f 70 65 6e 69 6e 67 27 0d 0a 09 09 09 09 74 61 67 2e 64 6f 5f 6f 70 65 6e 20 40 73 63 61 6e 'opening'......tag.do_open.@scan
13040 6e 65 72 0d 0a 09 09 09 09 23 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 62 ner......#.this.should.be.done.b
13060 79 20 74 68 65 20 74 61 67 20 69 74 73 65 6c 66 2e 0d 0a 09 09 09 09 69 66 20 61 74 74 72 2e 65 y.the.tag.itself.......if.attr.e
13080 6d 70 74 79 5f 74 61 67 3f 0d 0a 09 09 09 09 09 74 61 67 2e 68 61 6e 64 6c 65 5f 65 6d 70 74 79 mpty_tag?.......tag.handle_empty
130a0 0d 0a 09 09 09 09 09 40 74 61 67 73 74 61 63 6b 2e 63 6c 6f 73 65 5f 74 61 67 0d 0a 09 09 09 09 .......@tagstack.close_tag......
130c0 65 6c 73 69 66 20 74 61 67 2e 73 70 65 63 69 61 6c 5f 63 6f 6e 74 65 6e 74 3f 0d 0a 09 09 09 09 elsif.tag.special_content?......
130e0 09 68 61 6e 64 6c 65 5f 73 70 65 63 69 61 6c 5f 63 6f 6e 74 65 6e 74 28 74 61 67 29 0d 0a 09 09 .handle_special_content(tag)....
13100 09 09 09 40 74 61 67 73 74 61 63 6b 2e 63 6c 6f 73 65 5f 74 61 67 0d 0a 09 09 09 09 09 23 20 20 ...@tagstack.close_tag.......#..
13120 20 20 20 20 20 20 23 20 69 67 6e 6f 72 65 20 61 73 74 65 72 69 73 6b 73 20 64 69 72 65 63 74 6c ......#.ignore.asterisks.directl
13140 79 20 61 66 74 65 72 20 74 68 65 20 6f 70 65 6e 69 6e 67 3b 20 74 68 65 73 65 20 61 72 65 20 70 y.after.the.opening;.these.are.p
13160 68 70 42 42 43 6f 64 65 0d 0a 09 09 09 09 09 23 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 74 61 hpBBCode.......#........elsif.ta
13180 67 2e 72 65 73 70 6f 6e 64 5f 74 6f 3f 20 3a 61 73 74 65 72 69 73 6b 0d 0a 09 09 09 09 09 23 20 g.respond_to?.:asterisk.......#.
131a0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 27 53 4b 49 50 20 41 53 54 45 52 49 53 4b 53 3a 20 .........debug.'SKIP.ASTERISKS:.
131c0 27 20 69 66 20 40 73 63 61 6e 6e 65 72 2e 73 6b 69 70 28 41 53 54 45 52 49 53 4b 5f 54 41 47 53 '.if.@scanner.skip(ASTERISK_TAGS
131e0 5f 53 43 41 4e 29 0d 0a 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 23 20 43 4c 4f 53 45 0d 0a 09 _SCAN)......end.......#.CLOSE...
13200 09 09 65 6c 73 69 66 20 40 74 61 67 73 74 61 63 6b 2e 74 72 79 5f 63 6c 6f 73 65 5f 63 6c 61 73 ..elsif.@tagstack.try_close_clas
13220 73 28 74 61 67 5f 63 6c 61 73 73 29 0d 0a 09 09 09 09 23 64 65 62 75 67 20 27 63 6c 6f 73 69 6e s(tag_class)......#debug.'closin
13240 67 27 0d 0a 09 09 09 09 23 20 47 41 52 42 41 47 45 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 g'......#.GARBAGE.....else......
13260 72 65 74 75 72 6e 0d 0a 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 74 72 75 65 0d 0a 09 09 65 6e 64 return.....end.......true....end
13280 0d 0a 0d 0a 09 09 64 65 66 20 68 61 6e 64 6c 65 5f 61 73 74 65 72 69 73 6b 20 74 61 67 5f 73 74 ......def.handle_asterisk.tag_st
132a0 61 72 74 2c 20 73 74 61 72 73 0d 0a 09 09 09 23 64 65 62 75 67 20 27 41 53 54 45 52 49 53 4b 3a art,.stars.....#debug.'ASTERISK:
132c0 20 27 20 2b 20 73 74 61 72 73 2e 74 6f 5f 73 0d 0a 09 09 09 23 20 72 75 6c 65 20 66 6f 72 20 61 .'.+.stars.to_s.....#.rule.for.a
132e0 73 74 65 72 69 73 6b 20 74 61 67 73 3a 20 74 68 65 79 20 62 65 6c 6f 6e 67 20 74 6f 20 74 68 65 sterisk.tags:.they.belong.to.the
13300 20 6c 61 73 74 20 74 61 67 0d 0a 09 09 09 23 20 74 68 61 74 20 68 61 6e 64 6c 65 73 20 74 68 65 .last.tag.....#.that.handles.the
13320 6d 2e 20 74 61 67 73 20 6f 70 65 6e 65 64 20 61 66 74 65 72 20 74 68 69 73 20 74 61 67 20 61 72 m..tags.opened.after.this.tag.ar
13340 65 20 63 6c 6f 73 65 64 2e 0d 0a 09 09 09 23 20 69 66 20 6e 6f 20 6f 70 65 6e 20 74 61 67 20 75 e.closed......#.if.no.open.tag.u
13360 73 65 73 20 74 68 65 6d 2c 20 61 6c 6c 20 61 72 65 20 63 6c 6f 73 65 64 2e 0d 0a 09 09 09 74 61 ses.them,.all.are.closed......ta
13380 67 20 3d 20 40 74 61 67 73 74 61 63 6b 2e 63 6c 6f 73 65 5f 61 6c 6c 5f 75 6e 74 69 6c 20 7b 20 g.=.@tagstack.close_all_until.{.
133a0 7c 74 61 67 7c 20 74 61 67 2e 72 65 73 70 6f 6e 64 5f 74 6f 3f 20 3a 61 73 74 65 72 69 73 6b 20 |tag|.tag.respond_to?.:asterisk.
133c0 7d 0d 0a 09 09 09 75 6e 6c 65 73 73 20 74 61 67 20 61 6e 64 20 74 61 67 2e 61 73 74 65 72 69 73 }.....unless.tag.and.tag.asteris
133e0 6b 20 73 74 61 72 73 2c 20 40 73 63 61 6e 6e 65 72 0d 0a 09 09 09 09 67 61 72 62 61 67 65 5f 6f k.stars,.@scanner......garbage_o
13400 75 74 20 74 61 67 5f 73 74 61 72 74 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 ut.tag_start.....end....end.....
13420 09 64 65 66 20 68 61 6e 64 6c 65 5f 73 70 65 63 69 61 6c 5f 63 6f 6e 74 65 6e 74 20 74 61 67 0d .def.handle_special_content.tag.
13440 0a 09 09 09 73 63 61 6e 6e 65 64 20 3d 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 5f 75 6e 74 69 ....scanned.=.@scanner.scan_unti
13460 6c 28 74 61 67 2e 63 6c 6f 73 69 6e 67 5f 74 61 67 29 0d 0a 09 09 09 69 66 20 73 63 61 6e 6e 65 l(tag.closing_tag).....if.scanne
13480 64 0d 0a 09 09 09 09 73 63 61 6e 6e 65 64 2e 73 6c 69 63 65 21 28 2d 28 40 73 63 61 6e 6e 65 72 d......scanned.slice!(-(@scanner
134a0 2e 6d 61 74 63 68 65 64 2e 73 69 7a 65 29 2e 2e 2d 31 29 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 .matched.size)..-1).....else....
134c0 09 09 73 63 61 6e 6e 65 64 20 3d 20 40 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 2e 2a 2f 6d 29 ..scanned.=.@scanner.scan(/.*/m)
134e0 2e 74 6f 5f 73 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 09 23 64 65 62 75 67 20 27 53 50 45 43 49 41 .to_s.....end.....#debug.'SPECIA
13500 4c 20 43 4f 4e 54 45 4e 54 3a 20 27 20 2b 20 73 63 61 6e 6e 65 64 0d 0a 09 09 09 74 61 67 2e 68 L.CONTENT:.'.+.scanned.....tag.h
13520 61 6e 64 6c 65 5f 63 6f 6e 74 65 6e 74 28 73 63 61 6e 6e 65 64 29 0d 0a 09 09 65 6e 64 0d 0a 0d andle_content(scanned)....end...
13540 0a 09 09 64 65 66 20 75 6e 65 73 63 61 70 65 20 74 65 78 74 0d 0a 09 09 09 23 20 69 6e 70 75 74 ...def.unescape.text.....#.input
13560 3a 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 71 75 6f 74 65 64 20 73 74 72 :.correctly.formatted.quoted.str
13580 69 6e 67 20 28 77 69 74 68 6f 75 74 20 74 68 65 20 71 75 6f 74 65 73 29 0d 0a 09 09 09 74 65 78 ing.(without.the.quotes).....tex
135a0 74 2e 67 73 75 62 28 2f 5c 5c 28 3f 3a 28 5b 22 5c 5c 5d 29 7c 2e 29 2f 29 20 7b 20 24 31 20 6f t.gsub(/\\(?:(["\\])|.)/).{.$1.o
135c0 72 20 24 26 20 7d 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 0d 0a 09 09 23 20 4d 41 47 49 43 20 46 45 41 r.$&.}....end........#.MAGIC.FEA
135e0 55 54 55 52 45 53 0d 0a 0d 0a 09 09 55 52 4c 5f 50 41 54 54 45 52 4e 20 3d 20 2f 28 3f 3a 28 3f UTURES......URL_PATTERN.=./(?:(?
13600 3a 77 77 77 7c 66 74 70 29 5c 2e 7c 28 3f 3e 5c 77 7b 33 2c 7d 29 3a 5c 2f 5c 2f 29 5c 53 2b 2f :www|ftp)\.|(?>\w{3,}):\/\/)\S+/
13620 0d 0a 09 09 45 4d 41 49 4c 5f 50 41 54 54 45 52 4e 20 3d 20 2f 28 3f 3e 5b 5c 77 5c 2d 5f 2e 5d ....EMAIL_PATTERN.=./(?>[\w\-_.]
13640 2b 29 40 5b 5c 77 5c 2d 5c 2e 5d 2b 5c 2e 5c 77 2b 2f 0d 0a 0d 0a 09 09 48 41 53 5f 4d 41 47 49 +)@[\w\-\.]+\.\w+/......HAS_MAGI
13660 43 20 3d 20 2f 5b 26 40 23 7b 53 6d 69 6c 65 79 73 3a 3a 53 4d 49 4c 45 59 5f 53 54 41 52 54 5f C.=./[&@#{Smileys::SMILEY_START_
13680 43 48 41 52 53 7d 5d 7c 28 3f 69 3a 77 77 77 7c 66 74 70 29 2f 0d 0a 0d 0a 09 09 4d 41 47 49 43 CHARS}]|(?i:www|ftp)/......MAGIC
136a0 5f 50 41 54 54 45 52 4e 20 3d 20 52 65 67 65 78 70 2e 6e 65 77 28 27 28 5c 57 7c 5e 29 28 25 73 _PATTERN.=.Regexp.new('(\W|^)(%s
136c0 29 27 20 25 0d 0a 09 09 09 5b 53 6d 69 6c 65 79 73 3a 3a 4d 41 47 49 43 5f 53 4d 49 4c 45 59 5f )'.%.....[Smileys::MAGIC_SMILEY_
136e0 50 41 54 54 45 52 4e 2c 20 55 52 4c 5f 50 41 54 54 45 52 4e 2c 20 45 4d 41 49 4c 5f 50 41 54 54 PATTERN,.URL_PATTERN,.EMAIL_PATT
13700 45 52 4e 5d 2e 6d 61 70 20 7b 20 7c 70 61 74 74 65 72 6e 7c 0d 0a 09 09 09 09 70 61 74 74 65 72 ERN].map.{.|pattern|......patter
13720 6e 2e 74 6f 5f 73 0d 0a 09 09 09 7d 2e 6a 6f 69 6e 28 27 7c 27 29 20 29 0d 0a 0d 0a 09 09 49 53 n.to_s.....}.join('|').)......IS
13740 5f 53 4d 49 4c 45 59 5f 50 41 54 54 45 52 4e 20 3d 20 52 65 67 65 78 70 2e 6e 65 77 28 27 5e 25 _SMILEY_PATTERN.=.Regexp.new('^%
13760 73 27 20 25 20 53 6d 69 6c 65 79 73 3a 3a 53 4d 49 4c 45 59 5f 53 54 41 52 54 5f 43 48 41 52 53 s'.%.Smileys::SMILEY_START_CHARS
13780 45 54 2e 74 6f 5f 73 20 29 0d 0a 09 09 49 53 5f 55 52 4c 5f 50 41 54 54 45 52 4e 20 3d 20 2f 5e ET.to_s.)....IS_URL_PATTERN.=./^
137a0 28 3f 3a 28 3f 69 3a 77 77 77 7c 66 74 70 29 5c 2e 7c 28 3f 3e 5c 77 2b 29 3a 5c 2f 5c 2f 29 2f (?:(?i:www|ftp)\.|(?>\w+):\/\/)/
137c0 0d 0a 09 09 55 52 4c 5f 53 54 41 52 54 53 5f 57 49 54 48 5f 50 52 4f 54 4f 43 4f 4c 20 3d 20 2f ....URL_STARTS_WITH_PROTOCOL.=./
137e0 5e 5c 77 2b 3a 5c 2f 5c 2f 2f 0d 0a 09 09 49 53 5f 45 4d 41 49 4c 5f 50 41 54 54 45 52 4e 20 3d ^\w+:\/\//....IS_EMAIL_PATTERN.=
13800 20 2f 5e 5b 5c 77 5c 2d 5f 2e 5d 2b 40 2f 0d 0a 0d 0a 09 09 64 65 66 20 74 6f 5f 6d 61 67 69 63 ./^[\w\-_.]+@/......def.to_magic
13820 20 74 65 78 74 0d 0a 09 09 09 23 20 20 20 20 20 20 64 65 62 75 67 20 4d 41 47 49 43 5f 50 41 54 .text.....#......debug.MAGIC_PAT
13840 54 45 52 4e 2e 74 6f 5f 73 0d 0a 09 09 09 74 65 78 74 2e 67 73 75 62 21 28 4d 41 47 49 43 5f 50 TERN.to_s.....text.gsub!(MAGIC_P
13860 41 54 54 45 52 4e 29 20 7b 0d 0a 09 09 09 09 6d 61 67 69 63 20 3d 20 24 32 0d 0a 09 09 09 09 24 ATTERN).{......magic.=.$2......$
13880 31 20 2b 20 63 61 73 65 20 6d 61 67 69 63 0d 0a 09 09 09 09 09 77 68 65 6e 20 49 53 5f 53 4d 49 1.+.case.magic.......when.IS_SMI
138a0 4c 45 59 5f 50 41 54 54 45 52 4e 0d 0a 09 09 09 09 09 09 53 6d 69 6c 65 79 73 2e 73 6d 69 6c 65 LEY_PATTERN........Smileys.smile
138c0 79 5f 74 6f 5f 69 6d 67 20 6d 61 67 69 63 0d 0a 09 09 09 09 09 77 68 65 6e 20 49 53 5f 55 52 4c y_to_img.magic.......when.IS_URL
138e0 5f 50 41 54 54 45 52 4e 0d 0a 09 09 09 09 09 09 6c 61 73 74 20 3d 20 6d 61 67 69 63 2e 73 6c 69 _PATTERN........last.=.magic.sli
13900 63 65 5f 70 75 6e 63 74 61 74 69 6f 6e 21 20 20 23 20 6e 6f 20 70 75 6e 63 74 61 74 69 6f 6e 20 ce_punctation!..#.no.punctation.
13920 69 6e 20 6d 79 20 55 52 4c 0d 0a 09 09 09 09 09 09 68 72 65 66 20 3d 20 6d 61 67 69 63 0d 0a 09 in.my.URL........href.=.magic...
13940 09 09 09 09 09 68 72 65 66 2e 69 6e 73 65 72 74 28 30 2c 20 27 68 74 74 70 3a 2f 2f 27 29 20 75 .....href.insert(0,.'http://').u
13960 6e 6c 65 73 73 20 6d 61 67 69 63 20 3d 7e 20 55 52 4c 5f 53 54 41 52 54 53 5f 57 49 54 48 5f 50 nless.magic.=~.URL_STARTS_WITH_P
13980 52 4f 54 4f 43 4f 4c 0d 0a 09 09 09 09 09 09 27 3c 61 20 68 72 65 66 3d 22 27 20 2b 20 68 72 65 ROTOCOL........'<a.href="'.+.hre
139a0 66 20 2b 20 27 22 3e 27 20 2b 20 6d 61 67 69 63 20 2b 20 27 3c 2f 61 3e 27 20 2b 20 6c 61 73 74 f.+.'">'.+.magic.+.'</a>'.+.last
139c0 0d 0a 09 09 09 09 09 77 68 65 6e 20 49 53 5f 45 4d 41 49 4c 5f 50 41 54 54 45 52 4e 0d 0a 09 09 .......when.IS_EMAIL_PATTERN....
139e0 09 09 09 09 6c 61 73 74 20 3d 20 6d 61 67 69 63 2e 73 6c 69 63 65 5f 70 75 6e 63 74 61 74 69 6f ....last.=.magic.slice_punctatio
13a00 6e 21 0d 0a 09 09 09 09 09 09 27 3c 61 20 68 72 65 66 3d 22 6d 61 69 6c 74 6f 3a 27 20 2b 20 6d n!........'<a.href="mailto:'.+.m
13a20 61 67 69 63 20 2b 20 27 22 3e 27 20 2b 20 6d 61 67 69 63 20 2b 20 27 3c 2f 61 3e 27 20 2b 20 6c agic.+.'">'.+.magic.+.'</a>'.+.l
13a40 61 73 74 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 72 61 69 73 65 20 27 7b 7b 7b 27 20 ast......else.......raise.'{{{'.
13a60 2b 20 6d 61 67 69 63 20 2b 20 27 7d 7d 7d 27 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 7d 0d 0a +.magic.+.'}}}'......end.....}..
13a80 09 09 09 74 65 78 74 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 23 20 68 61 6e 64 6c 65 73 20 73 6d ...text....end......#.handles.sm
13aa0 69 6c 65 79 73 20 61 6e 64 20 75 72 6c 73 0d 0a 09 09 64 65 66 20 70 61 72 73 65 5f 6d 61 67 69 ileys.and.urls....def.parse_magi
13ac0 63 20 68 74 6d 6c 0d 0a 09 09 09 72 65 74 75 72 6e 20 68 74 6d 6c 20 75 6e 6c 65 73 73 20 40 64 c.html.....return.html.unless.@d
13ae0 6f 5f 6d 61 67 69 63 0d 0a 09 09 09 73 63 61 6e 6e 65 72 20 3d 20 53 74 72 69 6e 67 53 63 61 6e o_magic.....scanner.=.StringScan
13b00 6e 65 72 2e 6e 65 77 20 68 74 6d 6c 0d 0a 09 09 09 6f 75 74 20 3d 20 27 27 0d 0a 09 09 09 77 68 ner.new.html.....out.=.''.....wh
13b20 69 6c 65 20 73 63 61 6e 6e 65 72 2e 72 65 73 74 3f 0d 0a 09 09 09 09 69 66 20 73 63 61 6e 6e 65 ile.scanner.rest?......if.scanne
13b40 72 2e 73 63 61 6e 28 2f 20 3c 20 28 3f 3a 20 61 5c 73 20 2e 2a 3f 20 3c 5c 2f 61 3e 20 7c 20 70 r.scan(/.<.(?:.a\s..*?.<\/a>.|.p
13b60 72 65 5c 57 20 2e 2a 3f 20 3c 5c 2f 70 72 65 3e 20 7c 20 5b 5e 3e 5d 2a 20 3e 20 29 20 2f 6d 78 re\W..*?.<\/pre>.|.[^>]*.>.)./mx
13b80 29 0d 0a 09 09 09 09 09 6f 75 74 20 3c 3c 20 73 63 61 6e 6e 65 72 2e 6d 61 74 63 68 65 64 0d 0a ).......out.<<.scanner.matched..
13ba0 09 09 09 09 65 6c 73 69 66 20 73 63 61 6e 6e 65 72 2e 73 63 61 6e 28 2f 20 5b 5e 3c 5d 2b 20 2f ....elsif.scanner.scan(/.[^<]+./
13bc0 78 29 0d 0a 09 09 09 09 09 6f 75 74 20 3c 3c 20 74 6f 5f 6d 61 67 69 63 28 73 63 61 6e 6e 65 72 x).......out.<<.to_magic(scanner
13be0 2e 6d 61 74 63 68 65 64 29 0d 0a 0d 0a 09 09 09 09 23 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6e .matched)........#.this.should.n
13c00 65 76 65 72 20 68 61 70 70 65 6e 0d 0a 09 09 09 09 65 6c 73 69 66 20 73 63 61 6e 6e 65 72 2e 73 ever.happen......elsif.scanner.s
13c20 63 61 6e 28 2f 2e 2f 6d 29 0d 0a 09 09 09 09 09 72 61 69 73 65 20 27 45 52 52 4f 52 3a 20 65 6c can(/./m).......raise.'ERROR:.el
13c40 73 65 20 63 61 73 65 20 72 65 61 63 68 65 64 27 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 65 6e se.case.reached'......end.....en
13c60 64 0d 0a 09 09 09 6f 75 74 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 20 20 23 20 50 61 72 73 65 72 d.....out....end...end..#.Parser
13c80 0d 0a 65 6e 64 0d 0a 0d 0a 63 6c 61 73 73 20 53 74 72 69 6e 67 0d 0a 09 64 65 66 20 73 6c 69 63 ..end....class.String...def.slic
13ca0 65 5f 70 75 6e 63 74 61 74 69 6f 6e 21 0d 0a 09 09 73 6c 69 63 65 21 28 2f 5b 2e 3a 2c 21 5c 3f e_punctation!....slice!(/[.:,!\?
13cc0 5d 2b 24 2f 29 2e 74 6f 5f 73 20 20 23 20 72 65 74 75 72 6e 20 27 27 20 69 6e 73 74 65 61 64 20 ]+$/).to_s..#.return.''.instead.
13ce0 6f 66 20 6e 69 6c 0d 0a 09 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 0d 0a 23 20 3d 20 47 72 61 6d of.nil...end..end....#..#.=.Gram
13d00 6d 61 72 0d 0a 23 0d 0a 23 20 41 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 63 mar..#..#.An.implementation.of.c
13d20 6f 6d 6d 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 20 6f 6e 20 67 72 61 6d 6d 61 72 73 2e 0d 0a 23 ommon.algorithms.on.grammars...#
13d40 0d 0a 23 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 68 69 6e 6f 62 75 2c 20 61 20 76 ..#.This.is.used.by.Shinobu,.a.v
13d60 69 73 75 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 6f 6c 20 66 6f 72 20 65 64 75 63 61 74 69 6e 67 20 isualization.tool.for.educating.
13d80 63 6f 6d 70 69 6c 65 72 2d 62 75 69 6c 64 69 6e 67 2e 0d 0a 23 0d 0a 23 20 54 68 61 6e 6b 73 20 compiler-building...#..#.Thanks.
13da0 74 6f 20 41 6e 64 72 65 61 73 20 4b 75 6e 65 72 74 20 66 6f 72 20 68 69 73 20 77 6f 6e 64 65 72 to.Andreas.Kunert.for.his.wonder
13dc0 66 75 6c 20 4c 52 28 6b 29 20 50 61 6d 70 68 6c 65 74 20 28 47 65 72 6d 61 6e 2c 20 73 65 65 20 ful.LR(k).Pamphlet.(German,.see.
13de0 68 74 74 70 3a 2f 2f 77 77 77 2e 69 6e 66 6f 72 6d 61 74 69 6b 2e 68 75 2d 62 65 72 6c 69 6e 2e http://www.informatik.hu-berlin.
13e00 64 65 2f 7e 6b 75 6e 65 72 74 2f 70 61 70 65 72 73 2f 6c 72 2d 61 6e 61 6c 79 73 65 29 2c 20 61 de/~kunert/papers/lr-analyse),.a
13e20 6e 64 20 41 68 6f 2f 53 65 74 68 69 2f 55 6c 6c 6d 61 6e 20 66 6f 72 20 74 68 65 69 72 20 44 72 nd.Aho/Sethi/Ullman.for.their.Dr
13e40 61 67 6f 6e 20 42 6f 6f 6b 2e 0d 0a 23 0d 0a 23 20 48 6f 6d 65 70 61 67 65 3a 3a 20 20 68 74 74 agon.Book...#..#.Homepage::..htt
13e60 70 3a 2f 2f 73 68 69 6e 6f 62 75 2e 63 59 63 6e 75 73 2e 64 65 20 28 6e 6f 74 20 65 78 69 73 74 p://shinobu.cYcnus.de.(not.exist
13e80 69 6e 67 20 79 65 74 29 0d 0a 23 20 41 75 74 68 6f 72 3a 3a 20 20 20 20 6d 75 72 70 68 79 20 28 ing.yet)..#.Author::....murphy.(
13ea0 4b 6f 72 6e 65 6c 69 75 73 20 4b 61 6c 6e 62 61 63 68 29 0d 0a 23 20 43 6f 70 79 72 69 67 68 74 Kornelius.Kalnbach)..#.Copyright
13ec0 3a 3a 20 28 63 63 29 20 32 30 30 35 20 63 59 63 6e 75 73 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 3a ::.(cc).2005.cYcnus..#.License::
13ee0 20 20 20 47 50 4c 0d 0a 23 20 56 65 72 73 69 6f 6e 3a 3a 20 30 2e 32 2e 30 20 28 32 30 30 35 2d ...GPL..#.Version::.0.2.0.(2005-
13f00 30 33 2d 32 37 29 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 73 65 74 5f 68 61 73 68 27 0d 0a 72 65 03-27)....require.'set_hash'..re
13f20 71 75 69 72 65 20 27 63 74 79 70 65 27 0d 0a 72 65 71 75 69 72 65 20 27 74 6f 6f 6c 73 27 0d 0a quire.'ctype'..require.'tools'..
13f40 72 65 71 75 69 72 65 20 27 72 75 6c 65 73 27 0d 0a 72 65 71 75 69 72 65 20 27 74 72 61 63 65 27 require.'rules'..require.'trace'
13f60 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 66 69 72 73 74 27 0d 0a 72 65 71 75 69 72 65 20 27 66 6f ....require.'first'..require.'fo
13f80 6c 6c 6f 77 27 0d 0a 0d 0a 23 20 3d 20 47 72 61 6d 6d 61 72 0d 0a 23 0d 0a 23 20 3d 3d 20 53 79 llow'....#.=.Grammar..#..#.==.Sy
13fa0 6e 74 61 78 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 52 75 6c 65 73 0d 0a 23 0d 0a 23 20 45 61 63 68 20 ntax..#..#.===.Rules..#..#.Each.
13fc0 6c 69 6e 65 20 69 73 20 61 20 72 75 6c 65 2e 0d 0a 23 20 54 68 65 20 73 79 6e 74 61 78 20 69 73 line.is.a.rule...#.The.syntax.is
13fe0 0d 0a 23 0d 0a 23 20 09 6c 65 66 74 20 2d 20 72 69 67 68 74 0d 0a 23 0d 0a 23 20 77 68 65 72 65 ..#..#..left.-.right..#..#.where
14000 20 2b 6c 65 66 74 2b 20 61 6e 64 20 2b 72 69 67 68 74 2b 20 63 61 6e 20 62 65 20 75 70 70 65 72 .+left+.and.+right+.can.be.upper
14020 63 61 73 65 20 61 6e 64 20 6c 6f 77 65 72 63 61 73 65 20 6c 65 74 74 65 72 73 2c 0d 0a 23 20 61 case.and.lowercase.letters,..#.a
14040 6e 64 20 3c 63 6f 64 65 3e 2d 3c 2f 63 6f 64 65 3e 20 63 61 6e 20 62 65 20 61 6e 79 20 63 6f 6d nd.<code>-</code>.can.be.any.com
14060 62 69 6e 61 74 69 6f 6e 20 6f 66 20 3c 2c 20 3e 2c 20 2d 20 6f 72 20 77 68 69 74 65 73 70 61 63 bination.of.<,.>,.-.or.whitespac
14080 65 2e 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 53 79 6d 62 6f 6c 73 0d 0a 23 0d 0a 23 20 55 70 70 65 72 e...#..#.===.Symbols..#..#.Upper
140a0 63 61 73 65 20 6c 65 74 74 65 72 73 20 73 74 61 6e 64 20 66 6f 72 20 6d 65 74 61 20 73 79 6d 62 case.letters.stand.for.meta.symb
140c0 6f 6c 73 2c 20 6c 6f 77 65 72 63 61 73 65 20 66 6f 72 20 74 65 72 6d 69 6e 61 6c 73 2e 0d 0a 23 ols,.lowercase.for.terminals...#
140e0 0d 0a 23 20 59 6f 75 20 63 61 6e 20 6d 61 6b 65 20 65 70 73 69 6c 6f 6e 2d 64 65 72 69 76 61 74 ..#.You.can.make.epsilon-derivat
14100 69 6f 6e 73 20 62 79 20 6c 65 61 76 69 6e 67 20 3c 63 6f 64 65 3e 3c 72 69 67 68 74 3e 3c 2f 63 ions.by.leaving.<code><right></c
14120 6f 64 65 3e 20 65 6d 70 74 79 2e 0d 0a 23 0d 0a 23 20 3d 3d 3d 20 45 78 61 6d 70 6c 65 0d 0a 23 ode>.empty...#..#.===.Example..#
14140 20 09 53 20 2d 20 41 63 0d 0a 23 20 09 41 20 2d 20 53 63 0d 0a 23 20 09 41 20 2d 20 62 0d 0a 23 ..S.-.Ac..#..A.-.Sc..#..A.-.b..#
14160 20 09 41 20 2d 0d 0a 63 6c 61 73 73 20 47 72 61 6d 6d 61 72 0d 0a 0d 0a 09 61 74 74 72 5f 72 65 ..A.-..class.Grammar.....attr_re
14180 61 64 65 72 20 3a 74 72 61 63 65 72 0d 0a 09 23 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 47 ader.:tracer...#.Creates.a.new.G
141a0 72 61 6d 6d 61 72 2e 0d 0a 09 23 20 49 66 20 24 74 72 61 63 65 20 69 73 20 74 72 75 65 2c 20 74 rammar....#.If.$trace.is.true,.t
141c0 68 65 20 61 6c 67 6f 72 69 74 68 6d 73 20 65 78 70 6c 61 69 6e 20 28 74 65 78 74 75 61 6c 29 20 he.algorithms.explain.(textual).
141e0 77 68 61 74 20 74 68 65 79 20 64 6f 20 74 6f 20 24 73 74 64 6f 75 74 2e 0d 0a 09 64 65 66 20 69 what.they.do.to.$stdout....def.i
14200 6e 69 74 69 61 6c 69 7a 65 20 64 61 74 61 2c 20 74 72 61 63 65 72 20 3d 20 54 72 61 63 65 72 2e nitialize.data,.tracer.=.Tracer.
14220 6e 65 77 0d 0a 09 09 40 74 72 61 63 65 72 20 3d 20 74 72 61 63 65 72 0d 0a 09 09 40 72 75 6c 65 new....@tracer.=.tracer....@rule
14240 73 20 3d 20 52 75 6c 65 73 2e 6e 65 77 0d 0a 09 09 40 74 65 72 6d 69 6e 61 6c 73 2c 20 40 6d 65 s.=.Rules.new....@terminals,.@me
14260 74 61 5f 73 79 6d 62 6f 6c 73 20 3d 20 53 6f 72 74 65 64 53 65 74 2e 6e 65 77 2c 20 41 72 72 61 ta_symbols.=.SortedSet.new,.Arra
14280 79 2e 6e 65 77 0d 0a 09 09 40 73 74 61 72 74 5f 73 79 6d 62 6f 6c 20 3d 20 6e 69 6c 0d 0a 09 09 y.new....@start_symbol.=.nil....
142a0 61 64 64 5f 72 75 6c 65 73 20 64 61 74 61 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 61 74 74 72 5f 72 65 add_rules.data...end.....attr_re
142c0 61 64 65 72 20 3a 6d 65 74 61 5f 73 79 6d 62 6f 6c 73 2c 20 3a 74 65 72 6d 69 6e 61 6c 73 2c 20 ader.:meta_symbols,.:terminals,.
142e0 3a 72 75 6c 65 73 2c 20 3a 73 74 61 72 74 5f 73 79 6d 62 6f 6c 0d 0a 0d 0a 09 61 6c 69 61 73 5f :rules,.:start_symbol.....alias_
14300 6d 65 74 68 6f 64 20 3a 73 69 67 6d 61 2c 20 3a 74 65 72 6d 69 6e 61 6c 73 0d 0a 09 61 6c 69 61 method.:sigma,.:terminals...alia
14320 73 5f 6d 65 74 68 6f 64 20 3a 61 6c 70 68 61 62 65 74 2c 20 3a 74 65 72 6d 69 6e 61 6c 73 0d 0a s_method.:alphabet,.:terminals..
14340 09 61 6c 69 61 73 5f 6d 65 74 68 6f 64 20 3a 76 61 72 69 61 62 6c 65 73 2c 20 3a 6d 65 74 61 5f .alias_method.:variables,.:meta_
14360 73 79 6d 62 6f 6c 73 0d 0a 09 61 6c 69 61 73 5f 6d 65 74 68 6f 64 20 3a 6e 6f 6e 74 65 72 6d 69 symbols...alias_method.:nontermi
14380 6e 61 6c 73 2c 20 3a 6d 65 74 61 5f 73 79 6d 62 6f 6c 73 0d 0a 0d 0a 09 23 20 41 20 73 74 72 69 nals,.:meta_symbols.....#.A.stri
143a0 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 67 72 61 6d 6d 61 72 ng.representation.of.the.grammar
143c0 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 09 64 65 66 20 69 6e 73 70 65 63 74 20 70 72 .for.debugging....def.inspect.pr
143e0 6f 64 75 63 74 69 6f 6e 73 5f 74 6f 6f 20 3d 20 66 61 6c 73 65 0d 0a 09 09 27 47 72 61 6d 6d 61 oductions_too.=.false....'Gramma
14400 72 28 6d 65 74 61 20 73 79 6d 62 6f 6c 73 3a 20 25 73 3b 20 61 6c 70 68 61 62 65 74 3a 20 25 73 r(meta.symbols:.%s;.alphabet:.%s
14420 3b 20 70 72 6f 64 75 63 74 69 6f 6e 73 3a 20 5b 25 73 5d 3b 20 73 74 61 72 74 20 73 79 6d 62 6f ;.productions:.[%s];.start.symbo
14440 6c 3a 20 25 73 29 27 20 25 0d 0a 09 09 09 5b 0d 0a 09 09 09 09 6d 65 74 61 5f 73 79 6d 62 6f 6c l:.%s)'.%.....[......meta_symbol
14460 73 2e 6a 6f 69 6e 28 27 2c 20 27 29 2c 0d 0a 09 09 09 09 74 65 72 6d 69 6e 61 6c 73 2e 6a 6f 69 s.join(',.'),......terminals.joi
14480 6e 28 27 2c 20 27 29 2c 0d 0a 09 09 09 09 69 66 20 70 72 6f 64 75 63 74 69 6f 6e 73 5f 74 6f 6f n(',.'),......if.productions_too
144a0 0d 0a 09 09 09 09 09 40 72 75 6c 65 73 2e 69 6e 73 70 65 63 74 0d 0a 09 09 09 09 65 6c 73 65 0d .......@rules.inspect......else.
144c0 0a 09 09 09 09 09 40 72 75 6c 65 73 2e 73 69 7a 65 0d 0a 09 09 09 09 65 6e 64 2c 0d 0a 09 09 09 ......@rules.size......end,.....
144e0 09 73 74 61 72 74 5f 73 79 6d 62 6f 6c 0d 0a 09 09 09 5d 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 .start_symbol.....]...end.....#.
14500 41 64 64 20 72 75 6c 65 73 20 74 6f 20 74 68 65 20 67 72 61 6d 6d 61 72 2e 20 2b 72 75 6c 65 73 Add.rules.to.the.grammar..+rules
14520 2b 20 73 68 6f 75 6c 64 20 62 65 20 61 20 53 74 72 69 6e 67 20 6f 72 20 72 65 73 70 6f 6e 64 20 +.should.be.a.String.or.respond.
14540 74 6f 20 2b 73 63 61 6e 2b 20 69 6e 20 61 20 73 69 6d 69 6c 61 72 20 77 61 79 2e 0d 0a 09 23 0d to.+scan+.in.a.similar.way....#.
14560 0a 09 23 20 53 79 6e 74 61 78 3a 20 73 65 65 20 47 72 61 6d 6d 61 72 2e 0d 0a 09 64 65 66 20 61 ..#.Syntax:.see.Grammar....def.a
14580 64 64 5f 72 75 6c 65 73 20 67 72 61 6d 6d 61 72 0d 0a 09 09 40 72 75 6c 65 73 20 3d 20 52 75 6c dd_rules.grammar....@rules.=.Rul
145a0 65 73 2e 70 61 72 73 65 20 67 72 61 6d 6d 61 72 20 64 6f 20 7c 72 75 6c 65 7c 0d 0a 09 09 09 40 es.parse.grammar.do.|rule|.....@
145c0 73 74 61 72 74 5f 73 79 6d 62 6f 6c 20 7c 7c 3d 20 72 75 6c 65 2e 6c 65 66 74 0d 0a 09 09 09 40 start_symbol.||=.rule.left.....@
145e0 6d 65 74 61 5f 73 79 6d 62 6f 6c 73 20 3c 3c 20 72 75 6c 65 2e 6c 65 66 74 0d 0a 09 09 09 40 74 meta_symbols.<<.rule.left.....@t
14600 65 72 6d 69 6e 61 6c 73 2e 6d 65 72 67 65 20 72 75 6c 65 2e 72 69 67 68 74 2e 73 70 6c 69 74 28 erminals.merge.rule.right.split(
14620 27 27 29 2e 73 65 6c 65 63 74 20 7b 20 7c 73 7c 20 74 65 72 6d 69 6e 61 6c 3f 20 73 20 7d 0d 0a '').select.{.|s|.terminal?.s.}..
14640 09 09 65 6e 64 0d 0a 09 09 40 6d 65 74 61 5f 73 79 6d 62 6f 6c 73 2e 75 6e 69 71 21 0d 0a 09 09 ..end....@meta_symbols.uniq!....
14660 75 70 64 61 74 65 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 52 65 74 75 72 6e 73 20 61 20 68 61 73 update...end.....#.Returns.a.has
14680 68 20 61 63 74 69 6e 67 20 61 73 20 46 49 52 53 54 20 6f 70 65 72 61 74 6f 72 2c 20 73 6f 20 74 h.acting.as.FIRST.operator,.so.t
146a0 68 61 74 0d 0a 09 23 20 3c 63 6f 64 65 3e 66 69 72 73 74 5b 22 41 42 43 22 5d 3c 2f 63 6f 64 65 hat...#.<code>first["ABC"]</code
146c0 3e 20 69 73 20 46 49 52 53 54 28 41 42 43 29 2e 0d 0a 09 23 20 53 65 65 20 68 74 74 70 3a 2f 2f >.is.FIRST(ABC)....#.See.http://
146e0 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4c 4c 5f 70 61 72 73 65 72 20 en.wikipedia.org/wiki/LL_parser.
14700 22 43 6f 6e 73 74 72 75 63 74 69 6e 67 20 61 6e 20 4c 4c 28 31 29 20 70 61 72 73 69 6e 67 20 74 "Constructing.an.LL(1).parsing.t
14720 61 62 6c 65 22 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0d 0a 09 64 65 66 20 66 69 72 73 74 0d 0a able".for.details....def.first..
14740 09 09 66 69 72 73 74 5f 6f 70 65 72 61 74 6f 72 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 52 65 74 ..first_operator...end.....#.Ret
14760 75 72 6e 73 20 61 20 68 61 73 68 20 61 63 74 69 6e 67 20 61 73 20 46 4f 4c 4c 4f 57 20 6f 70 65 urns.a.hash.acting.as.FOLLOW.ope
14780 72 61 74 6f 72 2c 20 73 6f 20 74 68 61 74 0d 0a 09 23 20 3c 63 6f 64 65 3e 66 69 72 73 74 5b 22 rator,.so.that...#.<code>first["
147a0 41 22 5d 3c 2f 63 6f 64 65 3e 20 69 73 20 46 4f 4c 4c 4f 57 28 41 29 2e 0d 0a 09 23 20 53 65 65 A"]</code>.is.FOLLOW(A)....#.See
147c0 20 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4c 4c .http://en.wikipedia.org/wiki/LL
147e0 5f 70 61 72 73 65 72 20 22 43 6f 6e 73 74 72 75 63 74 69 6e 67 20 61 6e 20 4c 4c 28 31 29 20 70 _parser."Constructing.an.LL(1).p
14800 61 72 73 69 6e 67 20 74 61 62 6c 65 22 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0d 0a 09 64 65 66 arsing.table".for.details....def
14820 20 66 6f 6c 6c 6f 77 0d 0a 09 09 66 6f 6c 6c 6f 77 5f 6f 70 65 72 61 74 6f 72 0d 0a 09 65 6e 64 .follow....follow_operator...end
14840 0d 0a 0d 0a 09 4c 4c 45 72 72 6f 72 20 3d 20 43 6c 61 73 73 2e 6e 65 77 28 45 78 63 65 70 74 69 .....LLError.=.Class.new(Excepti
14860 6f 6e 29 0d 0a 09 4c 4c 45 72 72 6f 72 54 79 70 65 31 20 3d 20 43 6c 61 73 73 2e 6e 65 77 28 4c on)...LLErrorType1.=.Class.new(L
14880 4c 45 72 72 6f 72 29 0d 0a 09 4c 4c 45 72 72 6f 72 54 79 70 65 32 20 3d 20 43 6c 61 73 73 2e 6e LError)...LLErrorType2.=.Class.n
148a0 65 77 28 4c 4c 45 72 72 6f 72 29 0d 0a 0d 0a 09 23 20 54 65 73 74 73 20 69 66 20 74 68 65 20 67 ew(LLError).....#.Tests.if.the.g
148c0 72 61 6d 6d 61 72 20 69 73 20 4c 4c 28 31 29 2e 0d 0a 09 64 65 66 20 6c 6c 31 3f 0d 0a 09 09 62 rammar.is.LL(1)....def.ll1?....b
148e0 65 67 69 6e 0d 0a 09 09 09 66 6f 72 20 6d 65 74 61 20 69 6e 20 40 6d 65 74 61 5f 73 79 6d 62 6f egin.....for.meta.in.@meta_symbo
14900 6c 73 0d 0a 09 09 09 09 66 69 72 73 74 5f 73 65 74 73 20 3d 20 40 72 75 6c 65 73 5b 6d 65 74 61 ls......first_sets.=.@rules[meta
14920 5d 2e 6d 61 70 20 7b 20 7c 61 6c 70 68 61 7c 20 66 69 72 73 74 5b 61 6c 70 68 61 5d 20 7d 0d 0a ].map.{.|alpha|.first[alpha].}..
14940 09 09 09 09 66 69 72 73 74 5f 73 65 74 73 2e 69 6e 6a 65 63 74 28 53 65 74 5b 5d 29 20 64 6f 20 ....first_sets.inject(Set[]).do.
14960 7c 61 6c 72 65 61 64 79 5f 75 73 65 64 2c 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f 73 65 74 |already_used,.another_first_set
14980 7c 0d 0a 09 09 09 09 09 75 6e 6c 65 73 73 20 61 6c 72 65 61 64 79 5f 75 73 65 64 2e 64 69 73 6a |.......unless.already_used.disj
149a0 6f 69 6e 74 3f 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f 73 65 74 0d 0a 09 09 09 09 09 09 72 oint?.another_first_set........r
149c0 61 69 73 65 20 4c 4c 45 72 72 6f 72 54 79 70 65 31 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 09 09 09 aise.LLErrorType1.......end.....
149e0 09 09 61 6c 72 65 61 64 79 5f 75 73 65 64 2e 6d 65 72 67 65 20 61 6e 6f 74 68 65 72 5f 66 69 72 ..already_used.merge.another_fir
14a00 73 74 5f 73 65 74 0d 0a 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 09 69 66 20 66 69 72 73 74 5b st_set......end........if.first[
14a20 6d 65 74 61 5d 2e 69 6e 63 6c 75 64 65 3f 20 45 50 53 49 4c 4f 4e 20 61 6e 64 20 6e 6f 74 20 66 meta].include?.EPSILON.and.not.f
14a40 69 72 73 74 5b 6d 65 74 61 5d 2e 64 69 73 6a 6f 69 6e 74 3f 20 66 6f 6c 6c 6f 77 5b 6d 65 74 61 irst[meta].disjoint?.follow[meta
14a60 5d 0d 0a 09 09 09 09 09 72 61 69 73 65 20 4c 4c 45 72 72 6f 72 54 79 70 65 32 0d 0a 09 09 09 09 ].......raise.LLErrorType2......
14a80 65 6e 64 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 72 65 73 63 75 65 20 4c 4c 45 72 72 6f 72 0d 0a 09 end.....end....rescue.LLError...
14aa0 09 09 66 61 6c 73 65 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 09 74 72 75 65 0d 0a 09 09 65 6e 64 0d ..false....else.....true....end.
14ac0 0a 09 65 6e 64 0d 0a 0d 0a 70 72 69 76 61 74 65 0d 0a 0d 0a 09 64 65 66 20 66 69 72 73 74 5f 6f ..end....private.....def.first_o
14ae0 70 65 72 61 74 6f 72 0d 0a 09 09 40 66 69 72 73 74 20 7c 7c 3d 20 46 69 72 73 74 4f 70 65 72 61 perator....@first.||=.FirstOpera
14b00 74 6f 72 2e 6e 65 77 20 73 65 6c 66 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 66 6f 6c 6c 6f tor.new.self...end.....def.follo
14b20 77 5f 6f 70 65 72 61 74 6f 72 0d 0a 09 09 40 66 6f 6c 6c 6f 77 20 7c 7c 3d 20 46 6f 6c 6c 6f 77 w_operator....@follow.||=.Follow
14b40 4f 70 65 72 61 74 6f 72 2e 6e 65 77 20 73 65 6c 66 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 Operator.new.self...end.....def.
14b60 75 70 64 61 74 65 0d 0a 09 09 40 66 69 72 73 74 20 3d 20 40 66 6f 6c 6c 6f 77 20 3d 20 6e 69 6c update....@first.=.@follow.=.nil
14b80 0d 0a 09 65 6e 64 0d 0a 0d 0a 65 6e 64 0d 0a 0d 0a 69 66 20 24 30 20 3d 3d 20 5f 5f 46 49 4c 45 ...end....end....if.$0.==.__FILE
14ba0 5f 5f 0d 0a 20 20 65 76 61 6c 20 44 41 54 41 2e 72 65 61 64 2c 20 6e 69 6c 2c 20 24 30 2c 20 5f __....eval.DATA.read,.nil,.$0,._
14bc0 5f 4c 49 4e 45 5f 5f 2b 34 0d 0a 65 6e 64 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 74 65 73 74 2f _LINE__+4..end....require.'test/
14be0 75 6e 69 74 27 0d 0a 0d 0a 63 6c 61 73 73 20 54 65 73 74 43 61 73 65 47 72 61 6d 6d 61 72 20 3c unit'....class.TestCaseGrammar.<
14c00 20 54 65 73 74 3a 3a 55 6e 69 74 3a 3a 54 65 73 74 43 61 73 65 0d 0a 0d 0a 09 69 6e 63 6c 75 64 .Test::Unit::TestCase.....includ
14c20 65 20 47 72 61 6d 6d 61 72 3a 3a 53 79 6d 62 6f 6c 73 0d 0a 0d 0a 09 64 65 66 20 66 69 66 6f 20 e.Grammar::Symbols.....def.fifo.
14c40 73 0d 0a 09 09 53 65 74 5b 2a 73 2e 73 70 6c 69 74 28 27 27 29 5d 0d 0a 09 65 6e 64 0d 0a 0d 0a s....Set[*s.split('')]...end....
14c60 09 64 65 66 20 74 65 73 74 5f 66 69 66 6f 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 20 53 .def.test_fifo....assert_equal.S
14c80 65 74 5b 5d 2c 20 66 69 66 6f 28 27 27 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 20 53 et[],.fifo('')....assert_equal.S
14ca0 65 74 5b 45 50 53 49 4c 4f 4e 2c 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 2c 20 27 78 27 2c 20 27 et[EPSILON,.END_OF_INPUT,.'x',.'
14cc0 59 27 5d 2c 20 66 69 66 6f 28 27 3f 78 59 24 27 29 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 54 45 53 54 Y'],.fifo('?xY$')...end.....TEST
14ce0 5f 47 52 41 4d 4d 41 52 5f 31 20 3d 20 3c 3c 2d 45 4f 47 0d 0a 53 20 2d 20 41 42 43 44 0d 0a 41 _GRAMMAR_1.=.<<-EOG..S.-.ABCD..A
14d00 20 2d 20 61 0d 0a 41 20 2d 0d 0a 42 20 2d 20 62 0d 0a 42 20 2d 0d 0a 43 20 2d 20 63 0d 0a 43 20 .-.a..A.-..B.-.b..B.-..C.-.c..C.
14d20 2d 0d 0a 44 20 2d 20 53 0d 0a 44 20 2d 0d 0a 09 45 4f 47 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 -..D.-.S..D.-...EOG.....def.test
14d40 5f 73 79 6d 62 6f 6c 73 0d 0a 09 09 61 73 73 65 72 74 20 45 50 53 49 4c 4f 4e 0d 0a 09 09 61 73 _symbols....assert.EPSILON....as
14d60 73 65 72 74 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 sert.END_OF_INPUT...end.....def.
14d80 74 65 73 74 5f 66 69 72 73 74 5f 31 0d 0a 09 09 67 20 3d 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 test_first_1....g.=.Grammar.new.
14da0 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 31 0d 0a 0d 0a 09 09 66 20 3d 20 6e 69 6c 0d 0a 09 09 61 TEST_GRAMMAR_1......f.=.nil....a
14dc0 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 66 20 3d 20 67 2e 66 69 72 ssert_nothing_raised.{.f.=.g.fir
14de0 73 74 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 45 50 st.}....assert_equal(Set['a',.EP
14e00 53 49 4c 4f 4e 5d 2c 20 66 5b 27 41 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 SILON],.f['A'])....assert_equal(
14e20 53 65 74 5b 27 62 27 2c 20 45 50 53 49 4c 4f 4e 5d 2c 20 66 5b 27 42 27 5d 29 0d 0a 09 09 61 73 Set['b',.EPSILON],.f['B'])....as
14e40 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 63 27 2c 20 45 50 53 49 4c 4f 4e 5d 2c 20 66 5b sert_equal(Set['c',.EPSILON],.f[
14e60 27 43 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 'C'])....assert_equal(Set['a',.'
14e80 62 27 2c 20 27 63 27 2c 20 45 50 53 49 4c 4f 4e 5d 2c 20 66 5b 27 44 27 5d 29 0d 0a 09 09 61 73 b',.'c',.EPSILON],.f['D'])....as
14ea0 73 65 72 74 5f 65 71 75 61 6c 28 66 5b 27 44 27 5d 2c 20 66 5b 27 53 27 5d 29 0d 0a 09 65 6e 64 sert_equal(f['D'],.f['S'])...end
14ec0 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 5f 66 6f 6c 6c 6f 77 5f 31 0d 0a 09 09 67 20 3d 20 47 72 .....def.test_follow_1....g.=.Gr
14ee0 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 31 0d 0a 0d 0a 09 09 66 20 ammar.new.TEST_GRAMMAR_1......f.
14f00 3d 20 6e 69 6c 0d 0a 09 09 61 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b =.nil....assert_nothing_raised.{
14f20 20 66 20 3d 20 67 2e 66 6f 6c 6c 6f 77 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 .f.=.g.follow.}....assert_equal(
14f40 53 65 74 5b 27 61 27 2c 20 27 62 27 2c 20 27 63 27 2c 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d Set['a',.'b',.'c',.END_OF_INPUT]
14f60 2c 20 66 5b 27 41 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 ,.f['A'])....assert_equal(Set['a
14f80 27 2c 20 27 62 27 2c 20 27 63 27 2c 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d 2c 20 66 5b 27 42 ',.'b',.'c',.END_OF_INPUT],.f['B
14fa0 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 62 27 '])....assert_equal(Set['a',.'b'
14fc0 2c 20 27 63 27 2c 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d 2c 20 66 5b 27 43 27 5d 29 0d 0a 09 ,.'c',.END_OF_INPUT],.f['C'])...
14fe0 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d 2c .assert_equal(Set[END_OF_INPUT],
15000 20 66 5b 27 44 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 45 4e 44 .f['D'])....assert_equal(Set[END
15020 5f 4f 46 5f 49 4e 50 55 54 5d 2c 20 66 5b 27 53 27 5d 29 0d 0a 09 65 6e 64 0d 0a 0d 0a 0d 0a 09 _OF_INPUT],.f['S'])...end.......
15040 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 32 20 3d 20 3c 3c 2d 45 4f 47 0d 0a 53 20 2d 20 45 64 0d TEST_GRAMMAR_2.=.<<-EOG..S.-.Ed.
15060 0a 45 20 2d 20 45 70 54 0d 0a 45 20 2d 20 45 6d 54 0d 0a 45 20 2d 20 54 0d 0a 54 20 2d 20 54 75 .E.-.EpT..E.-.EmT..E.-.T..T.-.Tu
15080 46 0d 0a 54 20 2d 20 54 64 46 0d 0a 54 20 2d 20 46 0d 0a 46 20 2d 20 69 0d 0a 46 20 2d 20 6e 0d F..T.-.TdF..T.-.F..F.-.i..F.-.n.
150a0 0a 46 20 2d 20 61 45 7a 0d 0a 09 45 4f 47 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 5f 66 69 72 73 .F.-.aEz...EOG.....def.test_firs
150c0 74 5f 32 0d 0a 09 09 67 20 3d 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 54 5f 47 52 41 4d t_2....g.=.Grammar.new.TEST_GRAM
150e0 4d 41 52 5f 32 0d 0a 0d 0a 09 09 66 20 3d 20 6e 69 6c 0d 0a 09 09 61 73 73 65 72 74 5f 6e 6f 74 MAR_2......f.=.nil....assert_not
15100 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 66 20 3d 20 67 2e 66 69 72 73 74 20 7d 0d 0a 09 09 61 hing_raised.{.f.=.g.first.}....a
15120 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 6e 27 2c 20 27 69 27 5d 2c 20 ssert_equal(Set['a',.'n',.'i'],.
15140 66 5b 27 45 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c f['E'])....assert_equal(Set['a',
15160 20 27 6e 27 2c 20 27 69 27 5d 2c 20 66 5b 27 46 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 .'n',.'i'],.f['F'])....assert_eq
15180 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 6e 27 2c 20 27 69 27 5d 2c 20 66 5b 27 54 27 5d 29 0d ual(Set['a',.'n',.'i'],.f['T']).
151a0 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 6e 27 2c 20 27 69 ...assert_equal(Set['a',.'n',.'i
151c0 27 5d 2c 20 66 5b 27 53 27 5d 29 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 5f 66 '],.f['S'])...end.....def.test_f
151e0 6f 6c 6c 6f 77 5f 32 0d 0a 09 09 67 20 3d 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 54 5f ollow_2....g.=.Grammar.new.TEST_
15200 47 52 41 4d 4d 41 52 5f 32 0d 0a 0d 0a 09 09 66 20 3d 20 6e 69 6c 0d 0a 09 09 61 73 73 65 72 74 GRAMMAR_2......f.=.nil....assert
15220 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 66 20 3d 20 67 2e 66 6f 6c 6c 6f 77 20 7d _nothing_raised.{.f.=.g.follow.}
15240 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 6d 27 2c 20 27 64 27 2c 20 27 ....assert_equal(Set['m',.'d',.'
15260 7a 27 2c 20 27 70 27 5d 2c 20 66 5b 27 45 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 z',.'p'],.f['E'])....assert_equa
15280 6c 28 53 65 74 5b 27 6d 27 2c 20 27 64 27 2c 20 27 7a 27 2c 20 27 70 27 2c 20 27 75 27 5d 2c 20 l(Set['m',.'d',.'z',.'p',.'u'],.
152a0 66 5b 27 46 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 6d 27 2c f['F'])....assert_equal(Set['m',
152c0 20 27 64 27 2c 20 27 7a 27 2c 20 27 70 27 2c 20 27 75 27 5d 2c 20 66 5b 27 54 27 5d 29 0d 0a 09 .'d',.'z',.'p',.'u'],.f['T'])...
152e0 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d 2c .assert_equal(Set[END_OF_INPUT],
15300 20 66 5b 27 53 27 5d 29 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 4c 4c 45 72 72 6f 72 20 3d 20 47 72 61 .f['S'])...end.....LLError.=.Gra
15320 6d 6d 61 72 3a 3a 4c 4c 45 72 72 6f 72 0d 0a 0d 0a 09 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 33 mmar::LLError.....TEST_GRAMMAR_3
15340 20 3d 20 3c 3c 2d 45 4f 47 0d 0a 45 20 2d 20 54 44 0d 0a 44 20 2d 20 70 54 44 0d 0a 44 20 2d 0d .=.<<-EOG..E.-.TD..D.-.pTD..D.-.
15360 0a 54 20 2d 20 46 53 0d 0a 53 20 2d 20 75 46 53 0d 0a 53 20 2d 0d 0a 53 20 2d 20 70 0d 0a 46 20 .T.-.FS..S.-.uFS..S.-..S.-.p..F.
15380 2d 20 61 45 7a 0d 0a 46 20 2d 20 69 0d 0a 09 45 4f 47 0d 0a 0d 0a 09 4e 6f 45 72 72 6f 72 20 3d -.aEz..F.-.i...EOG.....NoError.=
153a0 20 43 6c 61 73 73 2e 6e 65 77 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 0d 0a 09 64 65 66 20 74 65 .Class.new(Exception).....def.te
153c0 73 74 5f 66 69 72 73 74 5f 33 0d 0a 09 09 67 20 3d 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 54 45 st_first_3....g.=.Grammar.new.TE
153e0 53 54 5f 47 52 41 4d 4d 41 52 5f 33 0d 0a 0d 0a 09 09 23 20 47 72 61 6d 6d 61 72 20 33 20 69 73 ST_GRAMMAR_3......#.Grammar.3.is
15400 20 4c 4c 28 31 29 2c 20 73 6f 20 61 6c 6c 20 66 69 72 73 74 2d 73 65 74 73 20 6d 75 73 74 20 62 .LL(1),.so.all.first-sets.must.b
15420 65 20 64 69 73 6a 6f 69 6e 74 2e 0d 0a 09 09 66 20 3d 20 6e 69 6c 0d 0a 09 09 61 73 73 65 72 74 e.disjoint.....f.=.nil....assert
15440 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 66 20 3d 20 67 2e 66 69 72 73 74 20 7d 0d _nothing_raised.{.f.=.g.first.}.
15460 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 69 27 5d 2c 20 66 ...assert_equal(Set['a',.'i'],.f
15480 5b 27 45 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 45 50 53 49 4c ['E'])....assert_equal(Set[EPSIL
154a0 4f 4e 2c 20 27 70 27 5d 2c 20 66 5b 27 44 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 ON,.'p'],.f['D'])....assert_equa
154c0 6c 28 53 65 74 5b 27 61 27 2c 20 27 69 27 5d 2c 20 66 5b 27 46 27 5d 29 0d 0a 09 09 61 73 73 65 l(Set['a',.'i'],.f['F'])....asse
154e0 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 69 27 5d 2c 20 66 5b 27 54 27 5d 29 0d rt_equal(Set['a',.'i'],.f['T']).
15500 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 45 50 53 49 4c 4f 4e 2c 20 27 75 27 ...assert_equal(Set[EPSILON,.'u'
15520 2c 20 27 70 27 5d 2c 20 66 5b 27 53 27 5d 29 0d 0a 09 09 66 6f 72 20 6d 20 69 6e 20 67 2e 6d 65 ,.'p'],.f['S'])....for.m.in.g.me
15540 74 61 5f 73 79 6d 62 6f 6c 73 0d 0a 09 09 09 72 20 3d 20 67 2e 72 75 6c 65 73 5b 6d 5d 0d 0a 09 ta_symbols.....r.=.g.rules[m]...
15560 09 09 66 69 72 73 74 73 20 3d 20 72 2e 6d 61 70 20 7b 20 7c 78 7c 20 66 5b 78 5d 20 7d 2e 74 6f ..firsts.=.r.map.{.|x|.f[x].}.to
15580 5f 73 65 74 0d 0a 09 09 09 61 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 64 _set.....assert_nothing_raised.d
155a0 6f 0d 0a 09 09 09 09 66 69 72 73 74 73 2e 69 6e 6a 65 63 74 28 53 65 74 2e 6e 65 77 29 20 64 6f o......firsts.inject(Set.new).do
155c0 20 7c 61 6c 72 65 61 64 79 5f 75 73 65 64 2c 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f 73 65 .|already_used,.another_first_se
155e0 74 7c 0d 0a 09 09 09 09 09 72 61 69 73 65 20 4c 4c 45 72 72 6f 72 2c 20 27 6e 6f 74 20 64 69 73 t|.......raise.LLError,.'not.dis
15600 6a 6f 69 6e 74 21 27 20 75 6e 6c 65 73 73 20 61 6c 72 65 61 64 79 5f 75 73 65 64 2e 64 69 73 6a joint!'.unless.already_used.disj
15620 6f 69 6e 74 3f 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f 73 65 74 0d 0a 09 09 09 09 09 61 6c oint?.another_first_set.......al
15640 72 65 61 64 79 5f 75 73 65 64 2e 6d 65 72 67 65 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f 73 ready_used.merge.another_first_s
15660 65 74 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 et......end.....end....end...end
15680 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 5f 66 6f 6c 6c 6f 77 5f 33 0d 0a 09 09 67 20 3d 20 47 72 .....def.test_follow_3....g.=.Gr
156a0 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 33 0d 0a 0d 0a 09 09 23 20 ammar.new.TEST_GRAMMAR_3......#.
156c0 47 72 61 6d 6d 61 72 20 33 20 69 73 20 6e 6f 74 20 4c 4c 28 31 29 2c 20 62 65 63 61 75 73 65 20 Grammar.3.is.not.LL(1),.because.
156e0 65 70 73 69 6c 6f 6e 20 69 73 20 69 6e 20 46 49 52 53 54 28 53 29 2c 0d 0a 09 09 23 20 62 75 74 epsilon.is.in.FIRST(S),....#.but
15700 20 46 49 52 53 54 28 53 29 20 61 6e 64 20 46 4f 4c 4c 4f 57 28 53 29 20 61 72 65 20 6e 6f 74 20 .FIRST(S).and.FOLLOW(S).are.not.
15720 64 69 73 6a 6f 69 6e 74 2e 0d 0a 09 09 66 20 3d 20 6e 69 6c 0d 0a 09 09 61 73 73 65 72 74 5f 6e disjoint.....f.=.nil....assert_n
15740 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 66 20 3d 20 67 2e 66 6f 6c 6c 6f 77 20 7d 0d 0a othing_raised.{.f.=.g.follow.}..
15760 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 7a 27 2c 20 45 4e 44 5f 4f 46 5f 49 ..assert_equal(Set['z',.END_OF_I
15780 4e 50 55 54 5d 2c 20 66 5b 27 45 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 NPUT],.f['E'])....assert_equal(S
157a0 65 74 5b 27 7a 27 2c 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d 2c 20 66 5b 27 44 27 5d 29 0d 0a et['z',.END_OF_INPUT],.f['D'])..
157c0 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 7a 27 2c 20 27 70 27 2c 20 27 75 27 ..assert_equal(Set['z',.'p',.'u'
157e0 2c 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d 2c 20 66 5b 27 46 27 5d 29 0d 0a 09 09 61 73 73 65 ,.END_OF_INPUT],.f['F'])....asse
15800 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 70 27 2c 20 27 7a 27 2c 20 45 4e 44 5f 4f 46 5f 49 4e rt_equal(Set['p',.'z',.END_OF_IN
15820 50 55 54 5d 2c 20 66 5b 27 54 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 PUT],.f['T'])....assert_equal(Se
15840 74 5b 27 70 27 2c 20 27 7a 27 2c 20 45 4e 44 5f 4f 46 5f 49 4e 50 55 54 5d 2c 20 66 5b 27 53 27 t['p',.'z',.END_OF_INPUT],.f['S'
15860 5d 29 0d 0a 09 09 66 6f 72 20 6d 20 69 6e 20 67 2e 6d 65 74 61 5f 73 79 6d 62 6f 6c 73 0d 0a 09 ])....for.m.in.g.meta_symbols...
15880 09 09 66 69 72 73 74 5f 6d 20 3d 20 67 2e 66 69 72 73 74 5b 6d 5d 0d 0a 09 09 09 6e 65 78 74 20 ..first_m.=.g.first[m].....next.
158a0 75 6e 6c 65 73 73 20 66 69 72 73 74 5f 6d 2e 69 6e 63 6c 75 64 65 3f 20 45 50 53 49 4c 4f 4e 0d unless.first_m.include?.EPSILON.
158c0 0a 09 09 09 61 73 73 65 72 74 5f 72 61 69 73 65 28 6d 20 3d 3d 20 27 53 27 20 3f 20 4c 4c 45 72 ....assert_raise(m.==.'S'.?.LLEr
158e0 72 6f 72 20 3a 20 4e 6f 45 72 72 6f 72 29 20 64 6f 0d 0a 09 09 09 09 69 66 20 66 69 72 73 74 5f ror.:.NoError).do......if.first_
15900 6d 2e 64 69 73 6a 6f 69 6e 74 3f 20 66 5b 6d 5d 0d 0a 09 09 09 09 09 72 61 69 73 65 20 4e 6f 45 m.disjoint?.f[m].......raise.NoE
15920 72 72 6f 72 20 20 23 20 74 68 69 73 20 69 73 20 66 75 6e 20 3a 44 0d 0a 09 09 09 09 65 6c 73 65 rror..#.this.is.fun.:D......else
15940 0d 0a 09 09 09 09 09 72 61 69 73 65 20 4c 4c 45 72 72 6f 72 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 .......raise.LLError......end...
15960 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 54 45 53 54 5f 47 52 41 4d ..end....end...end.....TEST_GRAM
15980 4d 41 52 5f 33 62 20 3d 20 3c 3c 2d 45 4f 47 0d 0a 45 20 2d 20 54 44 0d 0a 44 20 2d 20 70 54 44 MAR_3b.=.<<-EOG..E.-.TD..D.-.pTD
159a0 0d 0a 44 20 2d 20 50 54 44 0d 0a 44 20 2d 0d 0a 54 20 2d 20 46 53 0d 0a 53 20 2d 20 75 46 53 0d ..D.-.PTD..D.-..T.-.FS..S.-.uFS.
159c0 0a 53 20 2d 0d 0a 46 20 2d 20 61 45 7a 0d 0a 46 20 2d 20 69 0d 0a 50 20 2d 20 70 0d 0a 09 45 4f .S.-..F.-.aEz..F.-.i..P.-.p...EO
159e0 47 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 5f 66 69 72 73 74 5f 33 62 0d 0a 09 09 67 20 3d 20 47 G.....def.test_first_3b....g.=.G
15a00 72 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 33 62 0d 0a 0d 0a 09 09 rammar.new.TEST_GRAMMAR_3b......
15a20 23 20 47 72 61 6d 6d 61 72 20 33 62 20 69 73 20 4e 4f 54 20 4c 4c 28 31 29 2c 20 73 69 6e 63 65 #.Grammar.3b.is.NOT.LL(1),.since
15a40 20 6e 6f 74 20 61 6c 6c 20 66 69 72 73 74 2d 73 65 74 73 20 61 72 65 20 64 69 73 6a 6f 69 6e 74 .not.all.first-sets.are.disjoint
15a60 2e 0d 0a 09 09 66 20 3d 20 6e 69 6c 0d 0a 09 09 61 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 .....f.=.nil....assert_nothing_r
15a80 61 69 73 65 64 20 7b 20 66 20 3d 20 67 2e 66 69 72 73 74 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f aised.{.f.=.g.first.}....assert_
15aa0 65 71 75 61 6c 28 53 65 74 5b 27 61 27 2c 20 27 69 27 5d 2c 20 66 5b 27 45 27 5d 29 0d 0a 09 09 equal(Set['a',.'i'],.f['E'])....
15ac0 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 45 50 53 49 4c 4f 4e 2c 20 27 70 27 5d 2c 20 assert_equal(Set[EPSILON,.'p'],.
15ae0 66 5b 27 44 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 70 27 5d f['D'])....assert_equal(Set['p']
15b00 2c 20 66 5b 27 50 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 53 65 74 5b 27 61 ,.f['P'])....assert_equal(Set['a
15b20 27 2c 20 27 69 27 5d 2c 20 66 5b 27 46 27 5d 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c ',.'i'],.f['F'])....assert_equal
15b40 28 53 65 74 5b 27 61 27 2c 20 27 69 27 5d 2c 20 66 5b 27 54 27 5d 29 0d 0a 09 09 61 73 73 65 72 (Set['a',.'i'],.f['T'])....asser
15b60 74 5f 65 71 75 61 6c 28 53 65 74 5b 45 50 53 49 4c 4f 4e 2c 20 27 75 27 5d 2c 20 66 5b 27 53 27 t_equal(Set[EPSILON,.'u'],.f['S'
15b80 5d 29 0d 0a 09 09 66 6f 72 20 6d 20 69 6e 20 67 2e 6d 65 74 61 5f 73 79 6d 62 6f 6c 73 0d 0a 09 ])....for.m.in.g.meta_symbols...
15ba0 09 09 72 20 3d 20 67 2e 72 75 6c 65 73 5b 6d 5d 0d 0a 09 09 09 66 69 72 73 74 73 20 3d 20 72 2e ..r.=.g.rules[m].....firsts.=.r.
15bc0 6d 61 70 20 7b 20 7c 78 7c 20 66 5b 78 5d 20 7d 0d 0a 09 09 09 61 73 73 65 72 74 5f 72 61 69 73 map.{.|x|.f[x].}.....assert_rais
15be0 65 28 6d 20 3d 3d 20 27 44 27 20 3f 20 4c 4c 45 72 72 6f 72 20 3a 20 4e 6f 45 72 72 6f 72 29 20 e(m.==.'D'.?.LLError.:.NoError).
15c00 64 6f 0d 0a 09 09 09 09 66 69 72 73 74 73 2e 69 6e 6a 65 63 74 28 53 65 74 2e 6e 65 77 29 20 64 do......firsts.inject(Set.new).d
15c20 6f 20 7c 61 6c 72 65 61 64 79 5f 75 73 65 64 2c 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f 73 o.|already_used,.another_first_s
15c40 65 74 7c 0d 0a 09 09 09 09 09 72 61 69 73 65 20 4c 4c 45 72 72 6f 72 2c 20 27 6e 6f 74 20 64 69 et|.......raise.LLError,.'not.di
15c60 73 6a 6f 69 6e 74 21 27 20 75 6e 6c 65 73 73 20 61 6c 72 65 61 64 79 5f 75 73 65 64 2e 64 69 73 sjoint!'.unless.already_used.dis
15c80 6a 6f 69 6e 74 3f 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f 73 65 74 0d 0a 09 09 09 09 09 61 joint?.another_first_set.......a
15ca0 6c 72 65 61 64 79 5f 75 73 65 64 2e 6d 65 72 67 65 20 61 6e 6f 74 68 65 72 5f 66 69 72 73 74 5f lready_used.merge.another_first_
15cc0 73 65 74 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 72 61 69 73 65 20 4e 6f 45 72 72 6f 72 0d set......end......raise.NoError.
15ce0 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 74 65 73 ....end....end...end.....def.tes
15d00 74 5f 66 6f 6c 6c 6f 77 5f 33 62 0d 0a 09 09 67 20 3d 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 54 t_follow_3b....g.=.Grammar.new.T
15d20 45 53 54 5f 47 52 41 4d 4d 41 52 5f 33 62 0d 0a 0d 0a 09 09 23 20 41 6c 74 68 6f 75 67 68 20 47 EST_GRAMMAR_3b......#.Although.G
15d40 72 61 6d 6d 61 72 20 33 62 20 69 73 20 4e 4f 54 20 4c 4c 28 31 29 2c 20 74 68 65 20 46 4f 4c 4c rammar.3b.is.NOT.LL(1),.the.FOLL
15d60 4f 57 2d 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 73 61 74 69 73 66 69 65 64 2e 0d 0a 09 09 66 20 OW-condition.is.satisfied.....f.
15d80 3d 20 6e 69 6c 0d 0a 09 09 61 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b =.nil....assert_nothing_raised.{
15da0 20 66 20 3d 20 67 2e 66 6f 6c 6c 6f 77 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 .f.=.g.follow.}....assert_equal(
15dc0 66 69 66 6f 28 27 7a 24 27 29 2c 20 66 5b 27 45 27 5d 2c 20 27 45 27 29 0d 0a 09 09 61 73 73 65 fifo('z$'),.f['E'],.'E')....asse
15de0 72 74 5f 65 71 75 61 6c 28 66 69 66 6f 28 27 7a 24 27 29 2c 20 66 5b 27 44 27 5d 2c 20 27 44 27 rt_equal(fifo('z$'),.f['D'],.'D'
15e00 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 66 69 66 6f 28 27 61 69 27 29 2c 20 66 5b )....assert_equal(fifo('ai'),.f[
15e20 27 50 27 5d 2c 20 27 50 27 29 0d 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 66 69 66 6f 28 'P'],.'P')....assert_equal(fifo(
15e40 27 7a 24 70 75 27 29 2c 20 66 5b 27 46 27 5d 2c 20 27 46 27 29 0d 0a 09 09 61 73 73 65 72 74 5f 'z$pu'),.f['F'],.'F')....assert_
15e60 65 71 75 61 6c 28 66 69 66 6f 28 27 7a 24 70 27 29 2c 20 66 5b 27 54 27 5d 2c 20 27 54 27 29 0d equal(fifo('z$p'),.f['T'],.'T').
15e80 0a 09 09 61 73 73 65 72 74 5f 65 71 75 61 6c 28 66 69 66 6f 28 27 7a 24 70 27 29 2c 20 66 5b 27 ...assert_equal(fifo('z$p'),.f['
15ea0 53 27 5d 2c 20 27 53 27 29 0d 0a 09 09 66 6f 72 20 6d 20 69 6e 20 67 2e 6d 65 74 61 5f 73 79 6d S'],.'S')....for.m.in.g.meta_sym
15ec0 62 6f 6c 73 0d 0a 09 09 09 66 69 72 73 74 5f 6d 20 3d 20 67 2e 66 69 72 73 74 5b 6d 5d 0d 0a 09 bols.....first_m.=.g.first[m]...
15ee0 09 09 6e 65 78 74 20 75 6e 6c 65 73 73 20 66 69 72 73 74 5f 6d 2e 69 6e 63 6c 75 64 65 3f 20 45 ..next.unless.first_m.include?.E
15f00 50 53 49 4c 4f 4e 0d 0a 09 09 09 61 73 73 65 72 74 5f 72 61 69 73 65 28 4e 6f 45 72 72 6f 72 29 PSILON.....assert_raise(NoError)
15f20 20 64 6f 0d 0a 09 09 09 09 69 66 20 66 69 72 73 74 5f 6d 2e 64 69 73 6a 6f 69 6e 74 3f 20 66 5b .do......if.first_m.disjoint?.f[
15f40 6d 5d 0d 0a 09 09 09 09 09 72 61 69 73 65 20 4e 6f 45 72 72 6f 72 20 20 23 20 74 68 69 73 20 69 m].......raise.NoError..#.this.i
15f60 73 20 66 75 6e 20 3a 44 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 72 61 69 73 65 20 4c s.fun.:D......else.......raise.L
15f80 4c 45 72 72 6f 72 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a LError......end.....end....end..
15fa0 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 5f 6c 6c 31 3f 0d 0a 09 09 61 73 73 65 72 74 .end.....def.test_ll1?....assert
15fc0 5f 65 71 75 61 6c 20 66 61 6c 73 65 2c 20 47 72 61 6d 6d 61 72 2e 6e 65 77 28 54 45 53 54 5f 47 _equal.false,.Grammar.new(TEST_G
15fe0 52 41 4d 4d 41 52 5f 33 29 2e 6c 6c 31 3f 2c 20 27 47 72 61 6d 6d 61 72 20 33 27 0d 0a 09 09 61 RAMMAR_3).ll1?,.'Grammar.3'....a
16000 73 73 65 72 74 5f 65 71 75 61 6c 20 66 61 6c 73 65 2c 20 47 72 61 6d 6d 61 72 2e 6e 65 77 28 54 ssert_equal.false,.Grammar.new(T
16020 45 53 54 5f 47 52 41 4d 4d 41 52 5f 33 62 29 2e 6c 6c 31 3f 2c 20 27 47 72 61 6d 6d 61 72 20 33 EST_GRAMMAR_3b).ll1?,.'Grammar.3
16040 62 27 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 74 65 73 74 5f 6e 65 77 0d 0a 09 09 61 73 73 b'...end.....def.test_new....ass
16060 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 47 72 61 6d 6d 61 72 2e 6e 65 77 ert_nothing_raised.{.Grammar.new
16080 20 27 27 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b .''.}....assert_nothing_raised.{
160a0 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 31 20 7d 0d 0a 09 .Grammar.new.TEST_GRAMMAR_1.}...
160c0 09 61 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 47 72 61 6d 6d 61 72 .assert_nothing_raised.{.Grammar
160e0 2e 6e 65 77 20 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 32 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f .new.TEST_GRAMMAR_2.}....assert_
16100 6e 6f 74 68 69 6e 67 5f 72 61 69 73 65 64 20 7b 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 nothing_raised.{.Grammar.new.TES
16120 54 5f 47 52 41 4d 4d 41 52 5f 33 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f 6e 6f 74 68 69 6e 67 5f T_GRAMMAR_3.}....assert_nothing_
16140 72 61 69 73 65 64 20 7b 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 54 45 53 54 5f 47 52 41 4d 4d 41 raised.{.Grammar.new.TEST_GRAMMA
16160 52 5f 31 20 2b 20 54 45 53 54 5f 47 52 41 4d 4d 41 52 5f 32 20 2b 20 54 45 53 54 5f 47 52 41 4d R_1.+.TEST_GRAMMAR_2.+.TEST_GRAM
16180 4d 41 52 5f 33 20 7d 0d 0a 09 09 61 73 73 65 72 74 5f 72 61 69 73 65 28 41 72 67 75 6d 65 6e 74 MAR_3.}....assert_raise(Argument
161a0 45 72 72 6f 72 29 20 7b 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 27 53 20 2d 20 3f 27 20 7d 0d 0a Error).{.Grammar.new.'S.-.?'.}..
161c0 09 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 76 69 6d 3a 66 6f 6c 64 6d 65 74 68 6f 64 3d 73 79 .end..end....#.vim:foldmethod=sy
161e0 6e 74 61 78 0d 0a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 72 75 62 79 0d 0a 0d 0a 72 ntax....#!/usr/bin/env.ruby....r
16200 65 71 75 69 72 65 20 27 66 6f 78 31 32 27 0d 0a 0d 0a 69 6e 63 6c 75 64 65 20 46 6f 78 0d 0a 0d equire.'fox12'....include.Fox...
16220 0a 63 6c 61 73 73 20 57 69 6e 64 6f 77 20 3c 20 46 58 4d 61 69 6e 57 69 6e 64 6f 77 0d 0a 09 64 .class.Window.<.FXMainWindow...d
16240 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 61 70 70 29 0d 0a 09 09 73 75 70 65 72 28 61 70 70 2c ef.initialize(app)....super(app,
16260 20 61 70 70 2e 61 70 70 4e 61 6d 65 20 2b 20 22 3a 20 46 69 72 73 74 20 53 65 74 20 43 61 6c 63 .app.appName.+.":.First.Set.Calc
16280 75 6c 61 74 69 6f 6e 22 2c 20 6e 69 6c 2c 20 6e 69 6c 2c 20 44 45 43 4f 52 5f 41 4c 4c 2c 20 30 ulation",.nil,.nil,.DECOR_ALL,.0
162a0 2c 20 30 2c 20 38 30 30 2c 20 36 30 30 2c 20 30 2c 20 30 29 0d 0a 0d 0a 09 09 23 20 7b 7b 7b 20 ,.0,.800,.600,.0,.0)......#.{{{.
162c0 6d 65 6e 75 62 61 72 0d 0a 09 09 6d 65 6e 75 62 61 72 20 3d 20 46 58 4d 65 6e 75 42 61 72 2e 6e menubar....menubar.=.FXMenuBar.n
162e0 65 77 28 73 65 6c 66 2c 20 4c 41 59 4f 55 54 5f 53 49 44 45 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f ew(self,.LAYOUT_SIDE_TOP|LAYOUT_
16300 46 49 4c 4c 5f 58 29 0d 0a 0d 0a 09 09 66 69 6c 65 6d 65 6e 75 20 3d 20 46 58 4d 65 6e 75 50 61 FILL_X)......filemenu.=.FXMenuPa
16320 6e 65 2e 6e 65 77 28 73 65 6c 66 29 0d 0a 0d 0a 09 09 46 58 4d 65 6e 75 43 6f 6d 6d 61 6e 64 2e ne.new(self)......FXMenuCommand.
16340 6e 65 77 28 66 69 6c 65 6d 65 6e 75 2c 20 22 26 53 74 61 72 74 5c 74 43 74 6c 2d 53 5c 74 53 74 new(filemenu,."&Start\tCtl-S\tSt
16360 61 72 74 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 22 2c 20 6e 69 6c 2c 20 67 65 74 41 art.the.application.",.nil,.getA
16380 70 70 28 29 29 2e 63 6f 6e 6e 65 63 74 28 53 45 4c 5f 43 4f 4d 4d 41 4e 44 2c 20 6d 65 74 68 6f pp()).connect(SEL_COMMAND,.metho
163a0 64 28 3a 73 74 61 72 74 29 29 0d 0a 09 09 46 58 4d 65 6e 75 43 6f 6d 6d 61 6e 64 2e 6e 65 77 28 d(:start))....FXMenuCommand.new(
163c0 66 69 6c 65 6d 65 6e 75 2c 20 22 26 51 75 69 74 5c 74 41 6c 74 2d 46 34 5c 74 51 75 69 74 20 74 filemenu,."&Quit\tAlt-F4\tQuit.t
163e0 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 22 2c 20 6e 69 6c 2c 20 67 65 74 41 70 70 28 29 2c he.application.",.nil,.getApp(),
16400 20 46 58 41 70 70 3a 3a 49 44 5f 51 55 49 54 29 0d 0a 09 09 46 58 4d 65 6e 75 54 69 74 6c 65 2e .FXApp::ID_QUIT)....FXMenuTitle.
16420 6e 65 77 28 6d 65 6e 75 62 61 72 2c 20 22 26 46 69 6c 65 22 2c 20 6e 69 6c 2c 20 66 69 6c 65 6d new(menubar,."&File",.nil,.filem
16440 65 6e 75 29 0d 0a 09 09 23 20 7d 7d 7d 20 6d 65 6e 75 62 61 72 0d 0a 0d 0a 09 09 23 20 7b 7b 7b enu)....#.}}}.menubar......#.{{{
16460 20 73 74 61 74 75 73 62 61 72 0d 0a 09 09 40 73 74 61 74 75 73 62 61 72 20 3d 20 46 58 53 74 61 .statusbar....@statusbar.=.FXSta
16480 74 75 73 42 61 72 2e 6e 65 77 28 73 65 6c 66 2c 20 4c 41 59 4f 55 54 5f 53 49 44 45 5f 42 4f 54 tusBar.new(self,.LAYOUT_SIDE_BOT
164a0 54 4f 4d 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 7c 53 54 41 54 55 53 42 41 52 5f 57 49 54 48 TOM|LAYOUT_FILL_X|STATUSBAR_WITH
164c0 5f 44 52 41 47 43 4f 52 4e 45 52 29 0d 0a 09 09 23 20 7d 7d 7d 20 73 74 61 74 75 73 62 61 72 0d _DRAGCORNER)....#.}}}.statusbar.
164e0 0a 0d 0a 09 09 23 20 7b 7b 7b 20 77 69 6e 64 6f 77 20 63 6f 6e 74 65 6e 74 0d 0a 09 09 68 6f 72 .....#.{{{.window.content....hor
16500 69 7a 6f 6e 74 61 6c 73 70 6c 69 74 74 20 3d 20 46 58 53 70 6c 69 74 74 65 72 2e 6e 65 77 28 73 izontalsplitt.=.FXSplitter.new(s
16520 65 6c 66 2c 20 53 50 4c 49 54 54 45 52 5f 56 45 52 54 49 43 41 4c 7c 4c 41 59 4f 55 54 5f 53 49 elf,.SPLITTER_VERTICAL|LAYOUT_SI
16540 44 45 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 29 0d 0a 0d 0a 0d 0a 09 09 40 70 72 6f 64 DE_TOP|LAYOUT_FILL)........@prod
16560 75 63 74 69 6f 6e 73 20 3d 20 46 58 4c 69 73 74 2e 6e 65 77 28 68 6f 72 69 7a 6f 6e 74 61 6c 73 uctions.=.FXList.new(horizontals
16580 70 6c 69 74 74 2c 20 6e 69 6c 2c 20 30 2c 20 4c 41 59 4f 55 54 5f 53 49 44 45 5f 54 4f 50 7c 4c plitt,.nil,.0,.LAYOUT_SIDE_TOP|L
165a0 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 46 49 58 5f 48 45 49 47 48 54 7c 4c AYOUT_FILL_X|LAYOUT_FIX_HEIGHT|L
165c0 49 53 54 5f 53 49 4e 47 4c 45 53 45 4c 45 43 54 29 0d 0a 09 09 40 70 72 6f 64 75 63 74 69 6f 6e IST_SINGLESELECT)....@production
165e0 73 2e 68 65 69 67 68 74 20 3d 20 31 30 30 0d 0a 0d 0a 09 09 40 72 65 73 75 6c 74 20 3d 20 46 58 s.height.=.100......@result.=.FX
16600 54 61 62 6c 65 2e 6e 65 77 28 68 6f 72 69 7a 6f 6e 74 61 6c 73 70 6c 69 74 74 2c 20 6e 69 6c 2c Table.new(horizontalsplitt,.nil,
16620 20 30 2c 20 4c 41 59 4f 55 54 5f 46 49 4c 4c 29 0d 0a 09 09 40 72 65 73 75 6c 74 2e 68 65 69 67 .0,.LAYOUT_FILL)....@result.heig
16640 68 74 20 3d 20 32 30 30 0d 0a 09 09 40 72 65 73 75 6c 74 2e 73 65 74 54 61 62 6c 65 53 69 7a 65 ht.=.200....@result.setTableSize
16660 28 32 2c 20 32 2c 20 66 61 6c 73 65 29 0d 0a 09 09 40 72 65 73 75 6c 74 2e 72 6f 77 48 65 61 64 (2,.2,.false)....@result.rowHead
16680 65 72 57 69 64 74 68 20 3d 20 30 0d 0a 0d 0a 09 09 68 65 61 64 65 72 20 3d 20 40 72 65 73 75 6c erWidth.=.0......header.=.@resul
166a0 74 2e 63 6f 6c 75 6d 6e 48 65 61 64 65 72 0d 0a 09 09 68 65 61 64 65 72 2e 73 65 74 49 74 65 6d t.columnHeader....header.setItem
166c0 54 65 78 74 20 30 2c 20 27 58 27 0d 0a 09 09 68 65 61 64 65 72 2e 73 65 74 49 74 65 6d 54 65 78 Text.0,.'X'....header.setItemTex
166e0 74 20 31 2c 20 27 46 49 52 53 54 28 58 29 27 0d 0a 09 09 66 6f 72 20 69 74 65 6d 20 69 6e 20 68 t.1,.'FIRST(X)'....for.item.in.h
16700 65 61 64 65 72 0d 0a 09 09 09 69 74 65 6d 2e 6a 75 73 74 69 66 69 63 61 74 69 6f 6e 20 3d 20 46 eader.....item.justification.=.F
16720 58 48 65 61 64 65 72 49 74 65 6d 3a 3a 43 45 4e 54 45 52 5f 58 0d 0a 09 09 65 6e 64 0d 0a 0d 0a XHeaderItem::CENTER_X....end....
16740 09 09 40 64 65 62 75 67 20 3d 20 46 58 54 65 78 74 2e 6e 65 77 28 68 6f 72 69 7a 6f 6e 74 61 6c ..@debug.=.FXText.new(horizontal
16760 73 70 6c 69 74 74 2c 20 6e 69 6c 2c 20 30 2c 20 4c 41 59 4f 55 54 5f 53 49 44 45 5f 42 4f 54 54 splitt,.nil,.0,.LAYOUT_SIDE_BOTT
16780 4f 4d 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 46 49 58 5f 48 45 49 47 OM|LAYOUT_FILL_X|LAYOUT_FIX_HEIG
167a0 48 54 29 0d 0a 09 09 40 64 65 62 75 67 2e 68 65 69 67 68 74 20 3d 20 32 30 30 0d 0a 0d 0a 09 09 HT)....@debug.height.=.200......
167c0 23 20 7d 7d 7d 20 77 69 6e 64 6f 77 20 63 6f 6e 74 65 6e 74 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 #.}}}.window.content...end.....d
167e0 65 66 20 6c 6f 61 64 5f 67 72 61 6d 6d 61 72 20 67 72 61 6d 6d 61 72 0d 0a 09 09 40 74 72 61 63 ef.load_grammar.grammar....@trac
16800 65 72 20 3d 20 46 69 72 73 74 54 72 61 63 65 72 2e 6e 65 77 28 73 65 6c 66 29 0d 0a 09 09 40 67 er.=.FirstTracer.new(self)....@g
16820 72 61 6d 6d 61 72 20 3d 20 47 72 61 6d 6d 61 72 2e 6e 65 77 20 67 72 61 6d 6d 61 72 2c 20 40 74 rammar.=.Grammar.new.grammar,.@t
16840 72 61 63 65 72 0d 0a 09 09 40 72 75 6c 65 73 5f 69 6e 64 65 78 65 73 20 3d 20 48 61 73 68 2e 6e racer....@rules_indexes.=.Hash.n
16860 65 77 0d 0a 09 09 40 67 72 61 6d 6d 61 72 2e 72 75 6c 65 73 2e 65 61 63 68 5f 77 69 74 68 5f 69 ew....@grammar.rules.each_with_i
16880 6e 64 65 78 20 64 6f 20 7c 72 75 6c 65 2c 20 69 7c 0d 0a 09 09 09 40 70 72 6f 64 75 63 74 69 6f ndex.do.|rule,.i|.....@productio
168a0 6e 73 2e 61 70 70 65 6e 64 49 74 65 6d 20 72 75 6c 65 2e 69 6e 73 70 65 63 74 0d 0a 09 09 09 40 ns.appendItem.rule.inspect.....@
168c0 72 75 6c 65 73 5f 69 6e 64 65 78 65 73 5b 72 75 6c 65 5d 20 3d 20 69 0d 0a 09 09 65 6e 64 0d 0a rules_indexes[rule].=.i....end..
168e0 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 63 72 65 61 74 65 0d 0a 09 09 73 75 70 65 72 0d 0a 09 09 .end.....def.create....super....
16900 73 68 6f 77 28 50 4c 41 43 45 4d 45 4e 54 5f 53 43 52 45 45 4e 29 0d 0a 09 65 6e 64 0d 0a 0d 0a show(PLACEMENT_SCREEN)...end....
16920 09 64 65 66 20 72 75 6c 65 20 72 75 6c 65 0d 0a 09 09 40 70 72 6f 64 75 63 74 69 6f 6e 73 2e 73 .def.rule.rule....@productions.s
16940 65 6c 65 63 74 49 74 65 6d 20 40 72 75 6c 65 73 5f 69 6e 64 65 78 65 73 5b 72 75 6c 65 5d 0d 0a electItem.@rules_indexes[rule]..
16960 09 09 73 6c 65 65 70 20 30 2e 31 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 69 74 65 72 61 74 ..sleep.0.1...end.....def.iterat
16980 65 20 69 0d 0a 09 09 73 65 74 54 69 74 6c 65 20 69 2e 74 6f 5f 73 0d 0a 09 09 73 6c 65 65 70 20 e.i....setTitle.i.to_s....sleep.
169a0 30 2e 31 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 6d 69 73 73 69 6e 67 20 77 68 61 74 0d 0a 0.1...end.....def.missing.what..
169c0 09 09 40 64 65 62 75 67 2e 61 70 70 65 6e 64 54 65 78 74 20 77 68 61 74 20 2b 20 22 5c 6e 22 0d ..@debug.appendText.what.+."\n".
169e0 0a 09 09 73 6c 65 65 70 20 30 2e 31 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 73 74 61 72 74 ...sleep.0.1...end.....def.start
16a00 20 73 65 6e 64 65 72 2c 20 73 65 6c 2c 20 70 6f 69 6e 74 65 72 0d 0a 09 09 54 68 72 65 61 64 2e .sender,.sel,.pointer....Thread.
16a20 6e 65 77 20 64 6f 0d 0a 09 09 09 62 65 67 69 6e 0d 0a 09 09 09 09 40 67 72 61 6d 6d 61 72 2e 66 new.do.....begin......@grammar.f
16a40 69 72 73 74 0d 0a 09 09 09 72 65 73 63 75 65 20 3d 3e 20 62 6f 6f 6d 0d 0a 09 09 09 09 40 64 65 irst.....rescue.=>.boom......@de
16a60 62 75 67 2e 61 70 70 65 6e 64 54 65 78 74 20 5b 62 6f 6f 6d 2e 74 6f 5f 73 2c 20 2a 62 6f 6f 6d bug.appendText.[boom.to_s,.*boom
16a80 2e 62 61 63 6b 74 72 61 63 65 5d 2e 6a 6f 69 6e 28 22 5c 6e 22 29 0d 0a 09 09 09 65 6e 64 0d 0a .backtrace].join("\n").....end..
16aa0 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 65 6e 64 0d 0a 0d 0a 24 3a 20 3c 3c 20 27 67 72 61 ..end...end....end....$:.<<.'gra
16ac0 6d 6d 61 72 27 0d 0a 72 65 71 75 69 72 65 20 27 67 72 61 6d 6d 61 72 27 0d 0a 0d 0a 72 65 71 75 mmar'..require.'grammar'....requ
16ae0 69 72 65 20 27 66 69 72 73 74 5f 74 72 61 63 65 72 27 0d 0a 0d 0a 61 70 70 20 3d 20 46 58 41 70 ire.'first_tracer'....app.=.FXAp
16b00 70 2e 6e 65 77 28 22 53 68 69 6e 6f 62 75 22 2c 20 22 63 59 63 6e 75 73 22 29 0d 0a 0d 0a 23 20 p.new("Shinobu",."cYcnus")....#.
16b20 66 65 6e 73 74 65 72 20 65 72 7a 65 75 67 65 6e 0d 0a 77 69 6e 64 6f 77 20 3d 20 57 69 6e 64 6f fenster.erzeugen..window.=.Windo
16b40 77 2e 6e 65 77 20 61 70 70 0d 0a 0d 0a 75 6e 6c 65 73 73 20 41 52 47 56 2e 65 6d 70 74 79 3f 0d w.new.app....unless.ARGV.empty?.
16b60 0a 09 67 72 61 6d 6d 61 72 20 3d 20 46 69 6c 65 2e 72 65 61 64 28 41 52 47 56 2e 66 69 72 73 74 ..grammar.=.File.read(ARGV.first
16b80 29 0d 0a 65 6c 73 65 0d 0a 09 67 72 61 6d 6d 61 72 20 3d 20 3c 3c 2d 45 4f 47 31 0d 0a 5a 20 2d )..else...grammar.=.<<-EOG1..Z.-
16ba0 2d 3e 20 53 0d 0a 53 20 2d 2d 3e 20 53 62 0d 0a 53 20 2d 2d 3e 20 62 41 61 0d 0a 41 20 2d 2d 3e ->.S..S.-->.Sb..S.-->.bAa..A.-->
16bc0 20 61 53 63 0d 0a 41 20 2d 2d 3e 20 61 0d 0a 41 20 2d 2d 3e 20 61 53 62 0d 0a 09 45 4f 47 31 0d .aSc..A.-->.a..A.-->.aSb...EOG1.
16be0 0a 65 6e 64 0d 0a 0d 0a 77 69 6e 64 6f 77 2e 6c 6f 61 64 5f 67 72 61 6d 6d 61 72 20 67 72 61 6d .end....window.load_grammar.gram
16c00 6d 61 72 0d 0a 0d 0a 61 70 70 2e 63 72 65 61 74 65 0d 0a 61 70 70 2e 72 75 6e 0d 0a 0d 0a 72 65 mar....app.create..app.run....re
16c20 71 75 69 72 65 20 27 65 72 62 27 0d 0a 72 65 71 75 69 72 65 20 27 66 74 6f 6f 6c 73 27 0d 0a 72 quire.'erb'..require.'ftools'..r
16c40 65 71 75 69 72 65 20 27 79 61 6d 6c 27 0d 0a 72 65 71 75 69 72 65 20 27 72 65 64 63 6c 6f 74 68 equire.'yaml'..require.'redcloth
16c60 27 0d 0a 0d 0a 6d 6f 64 75 6c 65 20 57 68 79 54 68 65 4c 75 63 6b 79 53 74 69 66 66 0d 0a 09 63 '....module.WhyTheLuckyStiff...c
16c80 6c 61 73 73 20 42 6f 6f 6b 0d 0a 09 09 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 61 75 74 68 lass.Book....attr_accessor.:auth
16ca0 6f 72 2c 20 3a 74 69 74 6c 65 2c 20 3a 74 65 72 6d 73 2c 20 3a 69 6d 61 67 65 2c 20 3a 74 65 61 or,.:title,.:terms,.:image,.:tea
16cc0 73 65 72 2c 0d 0a 09 09 09 3a 63 68 61 70 74 65 72 73 2c 20 3a 65 78 70 61 6e 73 69 6f 6e 5f 70 ser,.....:chapters,.:expansion_p
16ce0 61 6b 73 2c 20 3a 65 6e 63 6f 64 69 6e 67 2c 20 3a 63 72 65 64 69 74 73 0d 0a 09 09 64 65 66 20 aks,.:encoding,.:credits....def.
16d00 5b 5d 20 78 0d 0a 09 09 09 40 6c 61 6e 67 2e 66 65 74 63 68 28 78 29 20 64 6f 0d 0a 09 09 09 09 [].x.....@lang.fetch(x).do......
16d20 77 61 72 6e 20 77 61 72 6e 69 6e 67 20 3d 20 22 5b 6e 6f 74 20 74 72 61 6e 73 6c 61 74 65 64 3a warn.warning.=."[not.translated:
16d40 20 27 23 7b 78 7d 27 21 5d 22 0d 0a 09 09 09 09 77 61 72 6e 69 6e 67 0d 0a 09 09 09 65 6e 64 0d .'#{x}'!]"......warning.....end.
16d60 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 42 6f 6f 6b 3a 3a 6c 6f 61 64 28 ...end...end.....def.Book::load(
16d80 20 66 69 6c 65 5f 6e 61 6d 65 20 29 0d 0a 09 09 59 41 4d 4c 3a 3a 6c 6f 61 64 28 20 46 69 6c 65 .file_name.)....YAML::load(.File
16da0 2e 6f 70 65 6e 28 20 66 69 6c 65 5f 6e 61 6d 65 20 29 20 29 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 63 .open(.file_name.).)...end.....c
16dc0 6c 61 73 73 20 53 65 63 74 69 6f 6e 0d 0a 09 09 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 69 lass.Section....attr_accessor.:i
16de0 6e 64 65 78 2c 20 3a 68 65 61 64 65 72 2c 20 3a 63 6f 6e 74 65 6e 74 0d 0a 09 09 64 65 66 20 69 ndex,.:header,.:content....def.i
16e00 6e 69 74 69 61 6c 69 7a 65 28 20 69 2c 20 68 2c 20 63 20 29 0d 0a 09 09 09 40 69 6e 64 65 78 2c nitialize(.i,.h,.c.).....@index,
16e20 20 40 68 65 61 64 65 72 2c 20 40 63 6f 6e 74 65 6e 74 20 3d 20 69 2c 20 68 2c 20 52 65 64 43 6c .@header,.@content.=.i,.h,.RedCl
16e40 6f 74 68 3a 3a 6e 65 77 28 20 63 2e 74 6f 5f 73 20 29 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d oth::new(.c.to_s.)....end...end.
16e60 0a 0d 0a 09 63 6c 61 73 73 20 53 69 64 65 62 61 72 0d 0a 09 09 61 74 74 72 5f 61 63 63 65 73 73 ....class.Sidebar....attr_access
16e80 6f 72 20 3a 74 69 74 6c 65 2c 20 3a 63 6f 6e 74 65 6e 74 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 59 41 or.:title,.:content...end.....YA
16ea0 4d 4c 3a 3a 61 64 64 5f 64 6f 6d 61 69 6e 5f 74 79 70 65 28 20 27 77 68 79 74 68 65 6c 75 63 6b ML::add_domain_type(.'whytheluck
16ec0 79 73 74 69 66 66 2e 6e 65 74 2c 32 30 30 33 27 2c 20 27 73 69 64 65 62 61 72 27 20 29 20 64 6f ystiff.net,2003',.'sidebar'.).do
16ee0 20 7c 74 61 67 75 72 69 2c 20 76 61 6c 7c 0d 0a 09 09 59 41 4d 4c 3a 3a 6f 62 6a 65 63 74 5f 6d .|taguri,.val|....YAML::object_m
16f00 61 6b 65 72 28 20 53 69 64 65 62 61 72 2c 20 27 74 69 74 6c 65 27 20 3d 3e 20 76 61 6c 2e 6b 65 aker(.Sidebar,.'title'.=>.val.ke
16f20 79 73 2e 66 69 72 73 74 2c 20 27 63 6f 6e 74 65 6e 74 27 20 3d 3e 20 52 65 64 43 6c 6f 74 68 3a ys.first,.'content'.=>.RedCloth:
16f40 3a 6e 65 77 28 20 76 61 6c 2e 76 61 6c 75 65 73 2e 66 69 72 73 74 20 29 20 29 0d 0a 09 65 6e 64 :new(.val.values.first.).)...end
16f60 0d 0a 09 63 6c 61 73 73 20 43 68 61 70 74 65 72 0d 0a 09 09 61 74 74 72 5f 61 63 63 65 73 73 6f ...class.Chapter....attr_accesso
16f80 72 20 3a 69 6e 64 65 78 2c 20 3a 74 69 74 6c 65 2c 20 3a 73 65 63 74 69 6f 6e 73 0d 0a 09 09 64 r.:index,.:title,.:sections....d
16fa0 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 20 69 2c 20 74 2c 20 73 65 63 74 73 20 29 0d 0a 09 09 ef.initialize(.i,.t,.sects.)....
16fc0 09 40 69 6e 64 65 78 20 3d 20 69 0d 0a 09 09 09 40 74 69 74 6c 65 20 3d 20 74 0d 0a 09 09 09 69 .@index.=.i.....@title.=.t.....i
16fe0 20 3d 20 30 0d 0a 09 09 09 40 73 65 63 74 69 6f 6e 73 20 3d 20 73 65 63 74 73 2e 63 6f 6c 6c 65 .=.0.....@sections.=.sects.colle
17000 63 74 20 64 6f 20 7c 73 7c 0d 0a 09 09 09 09 69 66 20 73 2e 72 65 73 70 6f 6e 64 5f 74 6f 3f 28 ct.do.|s|......if.s.respond_to?(
17020 20 3a 6b 65 79 73 20 29 0d 0a 09 09 09 09 09 69 20 2b 3d 20 31 0d 0a 09 09 09 09 09 53 65 63 74 .:keys.).......i.+=.1.......Sect
17040 69 6f 6e 2e 6e 65 77 28 20 69 2c 20 73 2e 6b 65 79 73 2e 66 69 72 73 74 2c 20 73 2e 76 61 6c 75 ion.new(.i,.s.keys.first,.s.valu
17060 65 73 2e 66 69 72 73 74 20 29 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 73 0d 0a 09 09 es.first.)......else.......s....
17080 09 09 65 6e 64 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 59 ..end.....end....end...end.....Y
170a0 41 4d 4c 3a 3a 61 64 64 5f 64 6f 6d 61 69 6e 5f 74 79 70 65 28 20 27 77 68 79 74 68 65 6c 75 63 AML::add_domain_type(.'whytheluc
170c0 6b 79 73 74 69 66 66 2e 6e 65 74 2c 32 30 30 33 27 2c 20 27 62 6f 6f 6b 27 20 29 20 64 6f 20 7c kystiff.net,2003',.'book'.).do.|
170e0 74 61 67 75 72 69 2c 20 76 61 6c 7c 0d 0a 09 09 5b 27 63 68 61 70 74 65 72 73 27 2c 20 27 65 78 taguri,.val|....['chapters',.'ex
17100 70 61 6e 73 69 6f 6e 5f 70 61 6b 73 27 5d 2e 65 61 63 68 20 64 6f 20 7c 63 68 61 70 74 79 70 65 pansion_paks'].each.do.|chaptype
17120 7c 0d 0a 09 09 09 69 20 3d 20 30 0d 0a 09 09 09 76 61 6c 5b 63 68 61 70 74 79 70 65 5d 2e 63 6f |.....i.=.0.....val[chaptype].co
17140 6c 6c 65 63 74 21 20 64 6f 20 7c 63 7c 0d 0a 09 09 09 09 69 20 2b 3d 20 31 0d 0a 09 09 09 09 43 llect!.do.|c|......i.+=.1......C
17160 68 61 70 74 65 72 3a 3a 6e 65 77 28 20 69 2c 20 63 2e 6b 65 79 73 2e 66 69 72 73 74 2c 20 63 2e hapter::new(.i,.c.keys.first,.c.
17180 76 61 6c 75 65 73 2e 66 69 72 73 74 20 29 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 values.first.).....end....end...
171a0 09 76 61 6c 5b 27 74 65 61 73 65 72 27 5d 2e 63 6f 6c 6c 65 63 74 21 20 64 6f 20 7c 74 7c 0d 0a .val['teaser'].collect!.do.|t|..
171c0 09 09 09 53 65 63 74 69 6f 6e 3a 3a 6e 65 77 28 20 31 2c 20 74 2e 6b 65 79 73 2e 66 69 72 73 74 ...Section::new(.1,.t.keys.first
171e0 2c 20 74 2e 76 61 6c 75 65 73 2e 66 69 72 73 74 20 29 0d 0a 09 09 65 6e 64 0d 0a 09 09 76 61 6c ,.t.values.first.)....end....val
17200 5b 27 74 65 72 6d 73 27 5d 20 3d 20 52 65 64 43 6c 6f 74 68 3a 3a 6e 65 77 28 20 76 61 6c 5b 27 ['terms'].=.RedCloth::new(.val['
17220 74 65 72 6d 73 27 5d 20 29 0d 0a 09 09 59 41 4d 4c 3a 3a 6f 62 6a 65 63 74 5f 6d 61 6b 65 72 28 terms'].)....YAML::object_maker(
17240 20 42 6f 6f 6b 2c 20 76 61 6c 20 29 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 63 6c 61 73 73 20 49 6d 61 .Book,.val.)...end.....class.Ima
17260 67 65 0d 0a 09 09 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 66 69 6c 65 5f 6e 61 6d 65 0d 0a ge....attr_accessor.:file_name..
17280 09 65 6e 64 0d 0a 0d 0a 09 59 41 4d 4c 3a 3a 61 64 64 5f 64 6f 6d 61 69 6e 5f 74 79 70 65 28 20 .end.....YAML::add_domain_type(.
172a0 27 77 68 79 74 68 65 6c 75 63 6b 79 73 74 69 66 66 2e 6e 65 74 2c 32 30 30 33 27 2c 20 27 69 6d 'whytheluckystiff.net,2003',.'im
172c0 67 27 20 29 20 64 6f 20 7c 74 61 67 75 72 69 2c 20 76 61 6c 7c 0d 0a 09 09 59 41 4d 4c 3a 3a 6f g'.).do.|taguri,.val|....YAML::o
172e0 62 6a 65 63 74 5f 6d 61 6b 65 72 28 20 49 6d 61 67 65 2c 20 27 66 69 6c 65 5f 6e 61 6d 65 27 20 bject_maker(.Image,.'file_name'.
17300 3d 3e 20 22 69 2f 22 20 2b 20 76 61 6c 20 29 0d 0a 09 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 0d =>."i/".+.val.)...end..end....#.
17320 0a 23 20 43 6f 6e 76 65 72 74 20 74 68 65 20 62 6f 6f 6b 20 74 6f 20 48 54 4d 4c 0d 0a 23 0d 0a .#.Convert.the.book.to.HTML..#..
17340 69 66 20 5f 5f 46 49 4c 45 5f 5f 20 3d 3d 20 24 30 0d 0a 09 75 6e 6c 65 73 73 20 41 52 47 56 5b if.__FILE__.==.$0...unless.ARGV[
17360 30 5d 0d 0a 09 09 70 75 74 73 20 22 55 73 61 67 65 3a 20 23 7b 24 30 7d 20 5b 2f 70 61 74 68 2f 0]....puts."Usage:.#{$0}.[/path/
17380 74 6f 2f 73 61 76 65 2f 68 74 6d 6c 5d 22 0d 0a 09 09 65 78 69 74 0d 0a 09 65 6e 64 0d 0a 0d 0a to/save/html]"....exit...end....
173a0 09 73 69 74 65 5f 70 61 74 68 20 3d 20 41 52 47 56 5b 30 5d 0d 0a 09 62 6f 6f 6b 20 3d 20 57 68 .site_path.=.ARGV[0]...book.=.Wh
173c0 79 54 68 65 4c 75 63 6b 79 53 74 69 66 66 3a 3a 42 6f 6f 6b 3a 3a 6c 6f 61 64 28 20 27 70 6f 69 yTheLuckyStiff::Book::load(.'poi
173e0 67 6e 61 6e 74 2e 79 6d 6c 27 20 29 0d 0a 09 63 68 61 70 74 65 72 20 3d 20 6e 69 6c 0d 0a 0d 0a gnant.yml'.)...chapter.=.nil....
17400 09 23 20 57 72 69 74 65 20 69 6e 64 65 78 20 70 61 67 65 0d 0a 09 69 6e 64 65 78 5f 74 70 6c 20 .#.Write.index.page...index_tpl.
17420 3d 20 45 52 42 3a 3a 6e 65 77 28 20 46 69 6c 65 2e 6f 70 65 6e 28 20 27 69 6e 64 65 78 2e 65 72 =.ERB::new(.File.open(.'index.er
17440 62 27 20 29 2e 72 65 61 64 20 29 0d 0a 09 46 69 6c 65 2e 6f 70 65 6e 28 20 46 69 6c 65 2e 6a 6f b'.).read.)...File.open(.File.jo
17460 69 6e 28 20 73 69 74 65 5f 70 61 74 68 2c 20 27 69 6e 64 65 78 2e 68 74 6d 6c 27 20 29 2c 20 27 in(.site_path,.'index.html'.),.'
17480 77 27 20 29 20 64 6f 20 7c 6f 75 74 7c 0d 0a 09 09 6f 75 74 20 3c 3c 20 69 6e 64 65 78 5f 74 70 w'.).do.|out|....out.<<.index_tp
174a0 6c 2e 72 65 73 75 6c 74 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 62 6f 6f 6b 2e 63 68 61 70 74 65 72 73 l.result...end.....book.chapters
174c0 20 3d 20 62 6f 6f 6b 2e 63 68 61 70 74 65 72 73 5b 30 2c 33 5d 20 69 66 20 41 52 47 56 2e 69 6e .=.book.chapters[0,3].if.ARGV.in
174e0 63 6c 75 64 65 3f 20 27 2d 66 61 73 74 27 0d 0a 0d 0a 09 23 20 57 72 69 74 65 20 63 68 61 70 74 clude?.'-fast'.....#.Write.chapt
17500 65 72 20 70 61 67 65 73 0d 0a 09 63 68 61 70 74 65 72 5f 74 70 6c 20 3d 20 45 52 42 3a 3a 6e 65 er.pages...chapter_tpl.=.ERB::ne
17520 77 28 20 46 69 6c 65 2e 6f 70 65 6e 28 20 27 63 68 61 70 74 65 72 2e 65 72 62 27 20 29 2e 72 65 w(.File.open(.'chapter.erb'.).re
17540 61 64 20 29 0d 0a 09 62 6f 6f 6b 2e 63 68 61 70 74 65 72 73 2e 65 61 63 68 20 64 6f 20 7c 63 68 ad.)...book.chapters.each.do.|ch
17560 61 70 74 65 72 7c 0d 0a 09 09 46 69 6c 65 2e 6f 70 65 6e 28 20 46 69 6c 65 2e 6a 6f 69 6e 28 20 apter|....File.open(.File.join(.
17580 73 69 74 65 5f 70 61 74 68 2c 20 22 63 68 61 70 74 65 72 2d 23 7b 20 63 68 61 70 74 65 72 2e 69 site_path,."chapter-#{.chapter.i
175a0 6e 64 65 78 20 7d 2e 68 74 6d 6c 22 20 29 2c 20 27 77 27 20 29 20 64 6f 20 7c 6f 75 74 7c 0d 0a ndex.}.html".),.'w'.).do.|out|..
175c0 09 09 09 6f 75 74 20 3c 3c 20 63 68 61 70 74 65 72 5f 74 70 6c 2e 72 65 73 75 6c 74 0d 0a 09 09 ...out.<<.chapter_tpl.result....
175e0 65 6e 64 0d 0a 09 65 6e 64 0d 0a 09 65 78 69 74 20 69 66 20 41 52 47 56 2e 69 6e 63 6c 75 64 65 end...end...exit.if.ARGV.include
17600 3f 20 27 2d 66 61 73 74 27 0d 0a 0d 0a 09 23 20 57 72 69 74 65 20 65 78 70 61 6e 73 69 6f 6e 20 ?.'-fast'.....#.Write.expansion.
17620 70 61 6b 20 70 61 67 65 73 0d 0a 09 65 78 70 61 6b 5f 74 70 6c 20 3d 20 45 52 42 3a 3a 6e 65 77 pak.pages...expak_tpl.=.ERB::new
17640 28 20 46 69 6c 65 2e 6f 70 65 6e 28 20 27 65 78 70 61 6e 73 69 6f 6e 2d 70 61 6b 2e 65 72 62 27 (.File.open(.'expansion-pak.erb'
17660 20 29 2e 72 65 61 64 20 29 0d 0a 09 62 6f 6f 6b 2e 65 78 70 61 6e 73 69 6f 6e 5f 70 61 6b 73 2e .).read.)...book.expansion_paks.
17680 65 61 63 68 20 64 6f 20 7c 70 61 6b 7c 0d 0a 09 09 46 69 6c 65 2e 6f 70 65 6e 28 20 46 69 6c 65 each.do.|pak|....File.open(.File
176a0 2e 6a 6f 69 6e 28 20 73 69 74 65 5f 70 61 74 68 2c 20 22 65 78 70 61 6e 73 69 6f 6e 2d 70 61 6b .join(.site_path,."expansion-pak
176c0 2d 23 7b 20 70 61 6b 2e 69 6e 64 65 78 20 7d 2e 68 74 6d 6c 22 20 29 2c 20 27 77 27 20 29 20 64 -#{.pak.index.}.html".),.'w'.).d
176e0 6f 20 7c 6f 75 74 7c 0d 0a 09 09 09 6f 75 74 20 3c 3c 20 65 78 70 61 6b 5f 74 70 6c 2e 72 65 73 o.|out|.....out.<<.expak_tpl.res
17700 75 6c 74 28 20 62 69 6e 64 69 6e 67 20 29 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 ult(.binding.)....end...end.....
17720 23 20 57 72 69 74 65 20 70 72 69 6e 74 61 62 6c 65 20 76 65 72 73 69 6f 6e 0d 0a 09 70 72 69 6e #.Write.printable.version...prin
17740 74 5f 74 70 6c 20 3d 20 45 52 42 3a 3a 6e 65 77 28 20 46 69 6c 65 2e 6f 70 65 6e 28 20 27 70 72 t_tpl.=.ERB::new(.File.open(.'pr
17760 69 6e 74 2e 65 72 62 27 20 29 2e 72 65 61 64 20 29 0d 0a 09 46 69 6c 65 2e 6f 70 65 6e 28 20 46 int.erb'.).read.)...File.open(.F
17780 69 6c 65 2e 6a 6f 69 6e 28 20 73 69 74 65 5f 70 61 74 68 2c 20 22 70 72 69 6e 74 2e 68 74 6d 6c ile.join(.site_path,."print.html
177a0 22 20 29 2c 20 27 77 27 20 29 20 64 6f 20 7c 6f 75 74 7c 0d 0a 09 09 6f 75 74 20 3c 3c 20 70 72 ".),.'w'.).do.|out|....out.<<.pr
177c0 69 6e 74 5f 74 70 6c 2e 72 65 73 75 6c 74 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 20 43 6f 70 79 20 int_tpl.result...end.....#.Copy.
177e0 63 73 73 20 2b 20 69 6d 61 67 65 73 20 69 6e 74 6f 20 73 69 74 65 0d 0a 09 63 6f 70 79 5f 6c 69 css.+.images.into.site...copy_li
17800 73 74 20 3d 20 5b 22 67 75 69 64 65 2e 63 73 73 22 5d 20 2b 0d 0a 09 09 44 69 72 5b 22 69 2f 2a st.=.["guide.css"].+....Dir["i/*
17820 22 5d 2e 66 69 6e 64 5f 61 6c 6c 20 7b 20 7c 69 6d 61 67 65 7c 20 69 6d 61 67 65 20 3d 7e 20 2f "].find_all.{.|image|.image.=~./
17840 5c 2e 28 67 69 66 7c 6a 70 67 7c 70 6e 67 29 24 2f 20 7d 0d 0a 0d 0a 09 46 69 6c 65 2e 6d 61 6b \.(gif|jpg|png)$/.}.....File.mak
17860 65 64 69 72 73 28 20 46 69 6c 65 2e 6a 6f 69 6e 28 20 73 69 74 65 5f 70 61 74 68 2c 20 22 69 22 edirs(.File.join(.site_path,."i"
17880 20 29 20 29 0d 0a 09 63 6f 70 79 5f 6c 69 73 74 2e 65 61 63 68 20 64 6f 20 7c 63 6f 70 79 5f 66 .).)...copy_list.each.do.|copy_f
178a0 69 6c 65 7c 0d 0a 09 09 46 69 6c 65 2e 63 6f 70 79 28 20 63 6f 70 79 5f 66 69 6c 65 2c 20 46 69 ile|....File.copy(.copy_file,.Fi
178c0 6c 65 2e 6a 6f 69 6e 28 20 73 69 74 65 5f 70 61 74 68 2c 20 63 6f 70 79 5f 66 69 6c 65 20 29 20 le.join(.site_path,.copy_file.).
178e0 29 0d 0a 09 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 72 )...end..end....#!/usr/bin/env.r
17900 75 62 79 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 66 6f 78 27 0d 0a 62 65 67 69 6e 0d 0a 20 20 72 uby....require.'fox'..begin....r
17920 65 71 75 69 72 65 20 27 6f 70 65 6e 67 6c 27 0d 0a 72 65 73 63 75 65 20 4c 6f 61 64 45 72 72 6f equire.'opengl'..rescue.LoadErro
17940 72 0d 0a 20 20 72 65 71 75 69 72 65 20 27 66 6f 78 2f 6d 69 73 73 69 6e 67 64 65 70 27 0d 0a 20 r....require.'fox/missingdep'...
17960 20 4d 53 47 20 3d 20 3c 3c 45 4f 4d 0d 0a 20 20 53 6f 72 72 79 2c 20 74 68 69 73 20 65 78 61 6d .MSG.=.<<EOM....Sorry,.this.exam
17980 70 6c 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 4f 70 65 6e 47 4c 20 65 78 74 65 6e 73 ple.depends.on.the.OpenGL.extens
179a0 69 6f 6e 2e 20 50 6c 65 61 73 65 0d 0a 20 20 63 68 65 63 6b 20 74 68 65 20 52 75 62 79 20 41 70 ion..Please....check.the.Ruby.Ap
179c0 70 6c 69 63 61 74 69 6f 6e 20 41 72 63 68 69 76 65 73 20 66 6f 72 20 61 6e 20 61 70 70 72 6f 70 plication.Archives.for.an.approp
179e0 72 69 61 74 65 0d 0a 20 20 64 6f 77 6e 6c 6f 61 64 20 73 69 74 65 2e 0d 0a 45 4f 4d 0d 0a 20 20 riate....download.site...EOM....
17a00 6d 69 73 73 69 6e 67 44 65 70 65 6e 64 65 6e 63 79 28 4d 53 47 29 0d 0a 65 6e 64 0d 0a 0d 0a 0d missingDependency(MSG)..end.....
17a20 0a 69 6e 63 6c 75 64 65 20 46 6f 78 0d 0a 69 6e 63 6c 75 64 65 20 4d 61 74 68 0d 0a 0d 0a 44 65 .include.Fox..include.Math....De
17a40 67 32 52 61 64 20 3d 20 4d 61 74 68 3a 3a 50 49 20 2f 20 31 38 30 0d 0a 0d 0a 44 5f 4d 41 58 20 g2Rad.=.Math::PI./.180....D_MAX.
17a60 3d 20 36 0d 0a 53 51 55 41 52 45 5f 53 49 5a 45 20 3d 20 32 2e 30 20 2f 20 44 5f 4d 41 58 0d 0a =.6..SQUARE_SIZE.=.2.0./.D_MAX..
17a80 53 51 55 41 52 45 5f 44 49 53 54 41 4e 43 45 20 3d 20 34 2e 30 20 2f 20 44 5f 4d 41 58 0d 0a 41 SQUARE_DISTANCE.=.4.0./.D_MAX..A
17aa0 4d 50 4c 49 54 55 44 45 20 3d 20 53 51 55 41 52 45 5f 53 49 5a 45 0d 0a 4c 41 4d 42 44 41 20 3d MPLITUDE.=.SQUARE_SIZE..LAMBDA.=
17ac0 20 44 5f 4d 41 58 2e 74 6f 5f 66 20 2f 20 32 0d 0a 0d 0a 63 6c 61 73 73 20 47 4c 54 65 73 74 57 .D_MAX.to_f./.2....class.GLTestW
17ae0 69 6e 64 6f 77 20 3c 20 46 58 4d 61 69 6e 57 69 6e 64 6f 77 0d 0a 0d 0a 20 20 23 20 48 6f 77 20 indow.<.FXMainWindow......#.How.
17b00 6f 66 74 65 6e 20 6f 75 72 20 74 69 6d 65 72 20 77 69 6c 6c 20 66 69 72 65 20 28 69 6e 20 6d 69 often.our.timer.will.fire.(in.mi
17b20 6c 6c 69 73 65 63 6f 6e 64 73 29 0d 0a 20 20 54 49 4d 45 52 5f 49 4e 54 45 52 56 41 4c 20 3d 20 lliseconds)....TIMER_INTERVAL.=.
17b40 35 30 30 0d 0a 0d 0a 20 20 23 20 52 6f 74 61 74 65 20 74 68 65 20 62 6f 78 65 73 20 77 68 65 6e 500......#.Rotate.the.boxes.when
17b60 20 61 20 74 69 6d 65 72 20 6d 65 73 73 61 67 65 20 69 73 20 72 65 63 65 69 76 65 64 0d 0a 20 20 .a.timer.message.is.received....
17b80 64 65 66 20 6f 6e 54 69 6d 65 6f 75 74 28 73 65 6e 64 65 72 2c 20 73 65 6c 2c 20 70 74 72 29 0d def.onTimeout(sender,.sel,.ptr).
17ba0 0a 20 20 20 20 40 61 6e 67 6c 65 20 2b 3d 20 31 30 2e 30 0d 0a 23 20 20 20 20 40 73 69 7a 65 20 .....@angle.+=.10.0..#....@size.
17bc0 3d 20 30 2e 35 20 2b 20 30 2e 32 20 2a 20 4d 61 74 68 2e 63 6f 73 28 44 65 67 32 52 61 64 20 2a =.0.5.+.0.2.*.Math.cos(Deg2Rad.*
17be0 20 40 61 6e 67 6c 65 29 0d 0a 20 20 20 20 64 72 61 77 53 63 65 6e 65 28 29 0d 0a 20 20 20 20 40 .@angle)......drawScene()......@
17c00 74 69 6d 65 72 20 3d 20 67 65 74 41 70 70 28 29 2e 61 64 64 54 69 6d 65 6f 75 74 28 54 49 4d 45 timer.=.getApp().addTimeout(TIME
17c20 52 5f 49 4e 54 45 52 56 41 4c 2c 20 6d 65 74 68 6f 64 28 3a 6f 6e 54 69 6d 65 6f 75 74 29 29 0d R_INTERVAL,.method(:onTimeout)).
17c40 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 52 6f 74 61 74 65 20 74 68 65 20 62 6f 78 65 73 20 77 ...end......#.Rotate.the.boxes.w
17c60 68 65 6e 20 61 20 63 68 6f 72 65 20 6d 65 73 73 61 67 65 20 69 73 20 72 65 63 65 69 76 65 64 0d hen.a.chore.message.is.received.
17c80 0a 20 20 64 65 66 20 6f 6e 43 68 6f 72 65 28 73 65 6e 64 65 72 2c 20 73 65 6c 2c 20 70 74 72 29 ...def.onChore(sender,.sel,.ptr)
17ca0 0d 0a 20 20 20 20 40 61 6e 67 6c 65 20 2b 3d 20 31 30 2e 30 0d 0a 23 20 20 20 20 40 61 6e 67 6c ......@angle.+=.10.0..#....@angl
17cc0 65 20 25 3d 20 33 36 30 2e 30 0d 0a 23 20 20 20 20 40 73 69 7a 65 20 3d 20 30 2e 35 20 2b 20 30 e.%=.360.0..#....@size.=.0.5.+.0
17ce0 2e 32 20 2a 20 4d 61 74 68 2e 63 6f 73 28 44 65 67 32 52 61 64 20 2a 20 40 61 6e 67 6c 65 29 0d .2.*.Math.cos(Deg2Rad.*.@angle).
17d00 0a 20 20 20 20 64 72 61 77 53 63 65 6e 65 28 29 0d 0a 20 20 20 20 40 63 68 6f 72 65 20 3d 20 67 .....drawScene()......@chore.=.g
17d20 65 74 41 70 70 28 29 2e 61 64 64 43 68 6f 72 65 28 6d 65 74 68 6f 64 28 3a 6f 6e 43 68 6f 72 65 etApp().addChore(method(:onChore
17d40 29 29 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 44 72 61 77 20 74 68 65 20 47 4c 20 73 63 65 ))....end......#.Draw.the.GL.sce
17d60 6e 65 0d 0a 20 20 64 65 66 20 64 72 61 77 53 63 65 6e 65 0d 0a 20 20 20 20 6c 69 67 68 74 50 6f ne....def.drawScene......lightPo
17d80 73 69 74 69 6f 6e 20 3d 20 5b 31 35 2e 30 2c 20 31 30 2e 30 2c 20 35 2e 30 2c 20 31 2e 30 5d 0d sition.=.[15.0,.10.0,.5.0,.1.0].
17da0 0a 20 20 20 20 6c 69 67 68 74 41 6d 62 69 65 6e 74 20 20 3d 20 5b 20 30 2e 31 2c 20 20 30 2e 31 .....lightAmbient..=.[.0.1,..0.1
17dc0 2c 20 30 2e 31 2c 20 31 2e 30 5d 0d 0a 20 20 20 20 6c 69 67 68 74 44 69 66 66 75 73 65 20 20 3d ,.0.1,.1.0]......lightDiffuse..=
17de0 20 5b 20 30 2e 39 2c 20 20 30 2e 39 2c 20 30 2e 39 2c 20 31 2e 30 5d 0d 0a 20 20 20 20 72 65 64 .[.0.9,..0.9,.0.9,.1.0]......red
17e00 4d 61 74 65 72 69 61 6c 20 20 20 3d 20 5b 20 30 2e 30 2c 20 20 30 2e 30 2c 20 31 2e 30 2c 20 31 Material...=.[.0.0,..0.0,.1.0,.1
17e20 2e 30 5d 0d 0a 20 20 20 20 62 6c 75 65 4d 61 74 65 72 69 61 6c 20 20 3d 20 5b 20 30 2e 30 2c 20 .0]......blueMaterial..=.[.0.0,.
17e40 20 31 2e 30 2c 20 30 2e 30 2c 20 31 2e 30 5d 0d 0a 0d 0a 20 20 20 20 77 69 64 74 68 20 3d 20 40 .1.0,.0.0,.1.0]........width.=.@
17e60 67 6c 63 61 6e 76 61 73 2e 77 69 64 74 68 2e 74 6f 5f 66 0d 0a 20 20 20 20 68 65 69 67 68 74 20 glcanvas.width.to_f......height.
17e80 3d 20 40 67 6c 63 61 6e 76 61 73 2e 68 65 69 67 68 74 2e 74 6f 5f 66 0d 0a 20 20 20 20 61 73 70 =.@glcanvas.height.to_f......asp
17ea0 65 63 74 20 3d 20 77 69 64 74 68 2f 68 65 69 67 68 74 0d 0a 0d 0a 20 20 20 20 23 20 4d 61 6b 65 ect.=.width/height........#.Make
17ec0 20 63 6f 6e 74 65 78 74 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 40 67 6c 63 61 6e 76 61 73 2e .context.current......@glcanvas.
17ee0 6d 61 6b 65 43 75 72 72 65 6e 74 28 29 0d 0a 0d 0a 20 20 20 20 47 4c 2e 56 69 65 77 70 6f 72 74 makeCurrent()........GL.Viewport
17f00 28 30 2c 20 30 2c 20 40 67 6c 63 61 6e 76 61 73 2e 77 69 64 74 68 2c 20 40 67 6c 63 61 6e 76 61 (0,.0,.@glcanvas.width,.@glcanva
17f20 73 2e 68 65 69 67 68 74 29 0d 0a 0d 0a 20 20 20 20 47 4c 2e 43 6c 65 61 72 43 6f 6c 6f 72 28 31 s.height)........GL.ClearColor(1
17f40 2e 30 2f 32 35 36 2c 20 30 2e 30 2c 20 35 2e 30 2f 32 35 36 2c 20 31 2e 30 29 0d 0a 20 20 20 20 .0/256,.0.0,.5.0/256,.1.0)......
17f60 47 4c 2e 43 6c 65 61 72 28 47 4c 3a 3a 43 4f 4c 4f 52 5f 42 55 46 46 45 52 5f 42 49 54 7c 47 4c GL.Clear(GL::COLOR_BUFFER_BIT|GL
17f80 3a 3a 44 45 50 54 48 5f 42 55 46 46 45 52 5f 42 49 54 29 0d 0a 20 20 20 20 47 4c 2e 45 6e 61 62 ::DEPTH_BUFFER_BIT)......GL.Enab
17fa0 6c 65 28 47 4c 3a 3a 44 45 50 54 48 5f 54 45 53 54 29 0d 0a 0d 0a 20 20 20 20 47 4c 2e 44 69 73 le(GL::DEPTH_TEST)........GL.Dis
17fc0 61 62 6c 65 28 47 4c 3a 3a 44 49 54 48 45 52 29 0d 0a 0d 0a 20 20 20 20 47 4c 2e 4d 61 74 72 69 able(GL::DITHER)........GL.Matri
17fe0 78 4d 6f 64 65 28 47 4c 3a 3a 50 52 4f 4a 45 43 54 49 4f 4e 29 0d 0a 20 20 20 20 47 4c 2e 4c 6f xMode(GL::PROJECTION)......GL.Lo
18000 61 64 49 64 65 6e 74 69 74 79 28 29 0d 0a 20 20 20 20 47 4c 55 2e 50 65 72 73 70 65 63 74 69 76 adIdentity()......GLU.Perspectiv
18020 65 28 33 30 2e 30 2c 20 61 73 70 65 63 74 2c 20 31 2e 30 2c 20 31 30 30 2e 30 29 0d 0a 0d 0a 20 e(30.0,.aspect,.1.0,.100.0).....
18040 20 20 20 47 4c 2e 4d 61 74 72 69 78 4d 6f 64 65 28 47 4c 3a 3a 4d 4f 44 45 4c 56 49 45 57 29 0d ...GL.MatrixMode(GL::MODELVIEW).
18060 0a 20 20 20 20 47 4c 2e 4c 6f 61 64 49 64 65 6e 74 69 74 79 28 29 0d 0a 20 20 20 20 47 4c 55 2e .....GL.LoadIdentity()......GLU.
18080 4c 6f 6f 6b 41 74 28 35 2e 30 2c 20 31 30 2e 30 2c 20 31 35 2e 30 2c 20 30 2e 30 2c 20 30 2e 30 LookAt(5.0,.10.0,.15.0,.0.0,.0.0
180a0 2c 20 30 2e 30 2c 20 30 2e 30 2c 20 31 2e 30 2c 20 30 2e 30 29 0d 0a 0d 0a 20 20 20 20 47 4c 2e ,.0.0,.0.0,.1.0,.0.0)........GL.
180c0 53 68 61 64 65 4d 6f 64 65 6c 28 47 4c 3a 3a 53 4d 4f 4f 54 48 29 0d 0a 20 20 20 20 47 4c 2e 4c ShadeModel(GL::SMOOTH)......GL.L
180e0 69 67 68 74 28 47 4c 3a 3a 4c 49 47 48 54 30 2c 20 47 4c 3a 3a 50 4f 53 49 54 49 4f 4e 2c 20 6c ight(GL::LIGHT0,.GL::POSITION,.l
18100 69 67 68 74 50 6f 73 69 74 69 6f 6e 29 0d 0a 20 20 20 20 47 4c 2e 4c 69 67 68 74 28 47 4c 3a 3a ightPosition)......GL.Light(GL::
18120 4c 49 47 48 54 30 2c 20 47 4c 3a 3a 41 4d 42 49 45 4e 54 2c 20 6c 69 67 68 74 41 6d 62 69 65 6e LIGHT0,.GL::AMBIENT,.lightAmbien
18140 74 29 0d 0a 20 20 20 20 47 4c 2e 4c 69 67 68 74 28 47 4c 3a 3a 4c 49 47 48 54 30 2c 20 47 4c 3a t)......GL.Light(GL::LIGHT0,.GL:
18160 3a 44 49 46 46 55 53 45 2c 20 6c 69 67 68 74 44 69 66 66 75 73 65 29 0d 0a 20 20 20 20 47 4c 2e :DIFFUSE,.lightDiffuse)......GL.
18180 45 6e 61 62 6c 65 28 47 4c 3a 3a 4c 49 47 48 54 30 29 0d 0a 20 20 20 20 47 4c 2e 45 6e 61 62 6c Enable(GL::LIGHT0)......GL.Enabl
181a0 65 28 47 4c 3a 3a 4c 49 47 48 54 49 4e 47 29 0d 0a 0d 0a 20 20 20 20 47 4c 2e 52 6f 74 61 74 65 e(GL::LIGHTING)........GL.Rotate
181c0 64 28 30 2e 31 2a 40 61 6e 67 6c 65 2c 20 30 2e 30 2c 20 31 2e 30 2c 20 30 2e 30 29 0d 0a 20 20 d(0.1*@angle,.0.0,.1.0,.0.0)....
181e0 20 20 66 6f 72 20 78 20 69 6e 20 2d 44 5f 4d 41 58 2e 2e 44 5f 4d 41 58 0d 0a 20 20 20 20 20 20 ..for.x.in.-D_MAX..D_MAX........
18200 66 6f 72 20 79 20 69 6e 20 2d 44 5f 4d 41 58 2e 2e 44 5f 4d 41 58 0d 0a 20 20 20 20 20 20 20 20 for.y.in.-D_MAX..D_MAX..........
18220 68 31 20 3d 20 28 78 20 2b 20 79 20 2d 20 32 29 2e 61 62 73 0d 0a 20 20 20 20 20 20 20 20 68 32 h1.=.(x.+.y.-.2).abs..........h2
18240 20 3d 20 28 79 20 2d 20 78 20 2b 20 31 29 2e 61 62 73 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 50 .=.(y.-.x.+.1).abs..........GL.P
18260 75 73 68 4d 61 74 72 69 78 0d 0a 20 20 20 20 20 20 20 20 63 20 3d 20 5b 31 2c 20 30 2c 20 30 2c ushMatrix..........c.=.[1,.0,.0,
18280 20 31 5d 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 4d 61 74 65 72 69 61 6c 28 47 4c 3a 3a 46 52 4f .1]..........GL.Material(GL::FRO
182a0 4e 54 2c 20 47 4c 3a 3a 41 4d 42 49 45 4e 54 2c 20 63 29 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e NT,.GL::AMBIENT,.c)..........GL.
182c0 4d 61 74 65 72 69 61 6c 28 47 4c 3a 3a 46 52 4f 4e 54 2c 20 47 4c 3a 3a 44 49 46 46 55 53 45 2c Material(GL::FRONT,.GL::DIFFUSE,
182e0 20 63 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 54 72 61 6e 73 6c 61 74 65 64 28 0d 0a 20 .c)............GL.Translated(...
18300 20 20 20 20 20 20 20 20 20 79 20 2a 20 53 51 55 41 52 45 5f 44 49 53 54 41 4e 43 45 2c 0d 0a 20 .........y.*.SQUARE_DISTANCE,...
18320 20 20 20 20 20 20 20 20 20 41 4d 50 4c 49 54 55 44 45 20 2a 20 68 31 2c 0d 0a 20 20 20 20 20 20 .........AMPLITUDE.*.h1,........
18340 20 20 20 20 78 20 2a 20 53 51 55 41 52 45 5f 44 49 53 54 41 4e 43 45 0d 0a 20 20 20 20 20 20 20 ....x.*.SQUARE_DISTANCE.........
18360 20 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 42 65 67 69 6e 28 47 4c 3a 3a 54 52 49 41 4e .)............GL.Begin(GL::TRIAN
18380 47 4c 45 5f 53 54 52 49 50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 4e 6f 72 6d 61 6c 28 GLE_STRIP)............GL.Normal(
183a0 31 2e 30 2c 20 30 2e 30 2c 20 30 2e 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 1.0,.0.0,.0.0)............GL.Ver
183c0 74 65 78 28 2d 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 tex(-SQUARE_SIZE,.+SQUARE_SIZE,.
183e0 2d 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 -SQUARE_SIZE)............GL.Vert
18400 65 78 28 2d 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b ex(-SQUARE_SIZE,.+SQUARE_SIZE,.+
18420 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 65 SQUARE_SIZE)............GL.Verte
18440 78 28 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2d 53 x(+SQUARE_SIZE,.+SQUARE_SIZE,.-S
18460 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 65 78 QUARE_SIZE)............GL.Vertex
18480 28 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 (+SQUARE_SIZE,.+SQUARE_SIZE,.+SQ
184a0 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 45 6e 64 0d 0a 0d 0a 20 20 UARE_SIZE)..........GL.End......
184c0 20 20 20 20 20 20 47 4c 2e 50 6f 70 4d 61 74 72 69 78 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 4c ......GL.PopMatrix............GL
184e0 2e 50 75 73 68 4d 61 74 72 69 78 0d 0a 20 20 20 20 20 20 20 20 63 20 3d 20 5b 30 2c 20 30 2c 20 .PushMatrix..........c.=.[0,.0,.
18500 31 2c 20 31 5d 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 4d 61 74 65 72 69 61 6c 28 47 4c 3a 3a 46 1,.1]..........GL.Material(GL::F
18520 52 4f 4e 54 2c 20 47 4c 3a 3a 41 4d 42 49 45 4e 54 2c 20 63 29 0d 0a 20 20 20 20 20 20 20 20 47 RONT,.GL::AMBIENT,.c)..........G
18540 4c 2e 4d 61 74 65 72 69 61 6c 28 47 4c 3a 3a 46 52 4f 4e 54 2c 20 47 4c 3a 3a 44 49 46 46 55 53 L.Material(GL::FRONT,.GL::DIFFUS
18560 45 2c 20 63 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 54 72 61 6e 73 6c 61 74 65 64 28 0d E,.c)............GL.Translated(.
18580 0a 20 20 20 20 20 20 20 20 20 20 79 20 2a 20 53 51 55 41 52 45 5f 44 49 53 54 41 4e 43 45 2c 0d ...........y.*.SQUARE_DISTANCE,.
185a0 0a 20 20 20 20 20 20 20 20 20 20 41 4d 50 4c 49 54 55 44 45 20 2a 20 68 32 2c 0d 0a 20 20 20 20 ...........AMPLITUDE.*.h2,......
185c0 20 20 20 20 20 20 78 20 2a 20 53 51 55 41 52 45 5f 44 49 53 54 41 4e 43 45 0d 0a 20 20 20 20 20 ......x.*.SQUARE_DISTANCE.......
185e0 20 20 20 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 42 65 67 69 6e 28 47 4c 3a 3a 54 52 49 ...)............GL.Begin(GL::TRI
18600 41 4e 47 4c 45 5f 53 54 52 49 50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 4e 6f 72 6d 61 ANGLE_STRIP)............GL.Norma
18620 6c 28 31 2e 30 2c 20 30 2e 30 2c 20 30 2e 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 l(1.0,.0.0,.0.0)............GL.V
18640 65 72 74 65 78 28 2d 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 ertex(-SQUARE_SIZE,.+SQUARE_SIZE
18660 2c 20 2d 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 ,.-SQUARE_SIZE)............GL.Ve
18680 72 74 65 78 28 2d 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c rtex(-SQUARE_SIZE,.+SQUARE_SIZE,
186a0 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 .+SQUARE_SIZE)............GL.Ver
186c0 74 65 78 28 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 tex(+SQUARE_SIZE,.+SQUARE_SIZE,.
186e0 2d 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 -SQUARE_SIZE)............GL.Vert
18700 65 78 28 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b ex(+SQUARE_SIZE,.+SQUARE_SIZE,.+
18720 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 45 6e 64 0d 0a 0d 0a SQUARE_SIZE)..........GL.End....
18740 20 20 20 20 20 20 20 20 47 4c 2e 50 6f 70 4d 61 74 72 69 78 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ........GL.PopMatrix............
18760 47 4c 2e 50 75 73 68 4d 61 74 72 69 78 0d 0a 20 20 20 20 20 20 20 20 63 20 3d 20 5b 30 2e 30 20 GL.PushMatrix..........c.=.[0.0.
18780 2b 20 28 78 2f 31 30 2e 30 29 2c 20 30 2e 30 20 2b 20 28 79 2f 31 30 2e 30 29 2c 20 30 2c 20 31 +.(x/10.0),.0.0.+.(y/10.0),.0,.1
187a0 5d 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 4d 61 74 65 72 69 61 6c 28 47 4c 3a 3a 46 52 4f 4e 54 ]..........GL.Material(GL::FRONT
187c0 2c 20 47 4c 3a 3a 41 4d 42 49 45 4e 54 2c 20 63 29 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 4d 61 ,.GL::AMBIENT,.c)..........GL.Ma
187e0 74 65 72 69 61 6c 28 47 4c 3a 3a 46 52 4f 4e 54 2c 20 47 4c 3a 3a 44 49 46 46 55 53 45 2c 20 63 terial(GL::FRONT,.GL::DIFFUSE,.c
18800 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 54 72 61 6e 73 6c 61 74 65 64 28 0d 0a 20 20 20 )............GL.Translated(.....
18820 20 20 20 20 20 20 20 79 20 2a 20 53 51 55 41 52 45 5f 44 49 53 54 41 4e 43 45 2c 0d 0a 20 20 20 .......y.*.SQUARE_DISTANCE,.....
18840 20 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 78 20 2a 20 53 51 55 41 52 45 5f .......0,............x.*.SQUARE_
18860 44 49 53 54 41 4e 43 45 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 DISTANCE..........)............G
18880 4c 2e 42 65 67 69 6e 28 47 4c 3a 3a 54 52 49 41 4e 47 4c 45 5f 53 54 52 49 50 29 0d 0a 20 20 20 L.Begin(GL::TRIANGLE_STRIP).....
188a0 20 20 20 20 20 20 20 47 4c 2e 4e 6f 72 6d 61 6c 28 31 2e 30 2c 20 30 2e 30 2c 20 30 2e 30 29 0d .......GL.Normal(1.0,.0.0,.0.0).
188c0 0a 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 65 78 28 2d 53 51 55 41 52 45 5f 53 49 5a ...........GL.Vertex(-SQUARE_SIZ
188e0 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2d 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a E,.+SQUARE_SIZE,.-SQUARE_SIZE)..
18900 20 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 65 78 28 2d 53 51 55 41 52 45 5f 53 49 5a 45 ..........GL.Vertex(-SQUARE_SIZE
18920 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 ,.+SQUARE_SIZE,.+SQUARE_SIZE)...
18940 20 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 65 78 28 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c .........GL.Vertex(+SQUARE_SIZE,
18960 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2d 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 .+SQUARE_SIZE,.-SQUARE_SIZE)....
18980 20 20 20 20 20 20 20 20 47 4c 2e 56 65 72 74 65 78 28 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 ........GL.Vertex(+SQUARE_SIZE,.
189a0 2b 53 51 55 41 52 45 5f 53 49 5a 45 2c 20 2b 53 51 55 41 52 45 5f 53 49 5a 45 29 0d 0a 20 20 20 +SQUARE_SIZE,.+SQUARE_SIZE).....
189c0 20 20 20 20 20 47 4c 2e 45 6e 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 50 6f 70 4d 61 74 .....GL.End............GL.PopMat
189e0 72 69 78 0d 0a 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 rix........end......end........#
18a00 20 53 77 61 70 20 69 66 20 69 74 20 69 73 20 64 6f 75 62 6c 65 2d 62 75 66 66 65 72 65 64 0d 0a .Swap.if.it.is.double-buffered..
18a20 20 20 20 20 69 66 20 40 67 6c 76 69 73 75 61 6c 2e 69 73 44 6f 75 62 6c 65 42 75 66 66 65 72 0d ....if.@glvisual.isDoubleBuffer.
18a40 0a 20 20 20 20 20 20 40 67 6c 63 61 6e 76 61 73 2e 73 77 61 70 42 75 66 66 65 72 73 0d 0a 20 20 .......@glcanvas.swapBuffers....
18a60 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 4d 61 6b 65 20 63 6f 6e 74 65 78 74 20 6e 6f 6e 2d ..end........#.Make.context.non-
18a80 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 40 67 6c 63 61 6e 76 61 73 2e 6d 61 6b 65 4e 6f 6e 43 75 current......@glcanvas.makeNonCu
18aa0 72 72 65 6e 74 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 rrent....end......def.initialize
18ac0 28 61 70 70 29 0d 0a 20 20 20 20 23 20 49 6e 76 6f 6b 65 20 74 68 65 20 62 61 73 65 20 63 6c 61 (app)......#.Invoke.the.base.cla
18ae0 73 73 20 69 6e 69 74 69 61 6c 69 7a 65 72 0d 0a 20 20 20 20 73 75 70 65 72 28 61 70 70 2c 20 22 ss.initializer......super(app,."
18b00 4f 70 65 6e 47 4c 20 54 65 73 74 20 41 70 70 6c 69 63 61 74 69 6f 6e 22 2c 20 6e 69 6c 2c 20 6e OpenGL.Test.Application",.nil,.n
18b20 69 6c 2c 20 44 45 43 4f 52 5f 41 4c 4c 2c 20 30 2c 20 30 2c 20 31 30 32 34 2c 20 37 36 38 29 0d il,.DECOR_ALL,.0,.0,.1024,.768).
18b40 0a 0d 0a 20 20 20 20 23 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6d 61 69 6e 20 77 69 6e 64 .......#.Construct.the.main.wind
18b60 6f 77 20 65 6c 65 6d 65 6e 74 73 0d 0a 20 20 20 20 66 72 61 6d 65 20 3d 20 46 58 48 6f 72 69 7a ow.elements......frame.=.FXHoriz
18b80 6f 6e 74 61 6c 46 72 61 6d 65 2e 6e 65 77 28 73 65 6c 66 2c 20 4c 41 59 4f 55 54 5f 53 49 44 45 ontalFrame.new(self,.LAYOUT_SIDE
18ba0 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 59 _TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y
18bc0 29 0d 0a 20 20 20 20 66 72 61 6d 65 2e 70 61 64 4c 65 66 74 2c 20 66 72 61 6d 65 2e 70 61 64 52 )......frame.padLeft,.frame.padR
18be0 69 67 68 74 20 3d 20 30 2c 20 30 0d 0a 20 20 20 20 66 72 61 6d 65 2e 70 61 64 54 6f 70 2c 20 66 ight.=.0,.0......frame.padTop,.f
18c00 72 61 6d 65 2e 70 61 64 42 6f 74 74 6f 6d 20 3d 20 30 2c 20 30 0d 0a 0d 0a 20 20 20 20 23 20 4c rame.padBottom.=.0,.0........#.L
18c20 65 66 74 20 70 61 6e 65 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 67 6c 63 61 6e 76 61 73 eft.pane.to.contain.the.glcanvas
18c40 0d 0a 20 20 20 20 67 6c 63 61 6e 76 61 73 46 72 61 6d 65 20 3d 20 46 58 56 65 72 74 69 63 61 6c ......glcanvasFrame.=.FXVertical
18c60 46 72 61 6d 65 2e 6e 65 77 28 66 72 61 6d 65 2c 0d 0a 20 20 20 20 20 20 4c 41 59 4f 55 54 5f 46 Frame.new(frame,........LAYOUT_F
18c80 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 59 7c 4c 41 59 4f 55 54 5f 54 4f 50 7c 4c ILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|L
18ca0 41 59 4f 55 54 5f 4c 45 46 54 29 0d 0a 20 20 20 20 67 6c 63 61 6e 76 61 73 46 72 61 6d 65 2e 70 AYOUT_LEFT)......glcanvasFrame.p
18cc0 61 64 4c 65 66 74 2c 20 67 6c 63 61 6e 76 61 73 46 72 61 6d 65 2e 70 61 64 52 69 67 68 74 20 3d adLeft,.glcanvasFrame.padRight.=
18ce0 20 31 30 2c 20 31 30 0d 0a 20 20 20 20 67 6c 63 61 6e 76 61 73 46 72 61 6d 65 2e 70 61 64 54 6f .10,.10......glcanvasFrame.padTo
18d00 70 2c 20 67 6c 63 61 6e 76 61 73 46 72 61 6d 65 2e 70 61 64 42 6f 74 74 6f 6d 20 3d 20 31 30 2c p,.glcanvasFrame.padBottom.=.10,
18d20 20 31 30 0d 0a 0d 0a 20 20 20 20 23 20 4c 61 62 65 6c 20 61 62 6f 76 65 20 74 68 65 20 67 6c 63 .10........#.Label.above.the.glc
18d40 61 6e 76 61 73 0d 0a 20 20 20 20 46 58 4c 61 62 65 6c 2e 6e 65 77 28 67 6c 63 61 6e 76 61 73 46 anvas......FXLabel.new(glcanvasF
18d60 72 61 6d 65 2c 20 22 4f 70 65 6e 47 4c 20 43 61 6e 76 61 73 20 46 72 61 6d 65 22 2c 20 6e 69 6c rame,."OpenGL.Canvas.Frame",.nil
18d80 2c 0d 0a 20 20 20 20 20 20 4a 55 53 54 49 46 59 5f 43 45 4e 54 45 52 5f 58 7c 4c 41 59 4f 55 54 ,........JUSTIFY_CENTER_X|LAYOUT
18da0 5f 46 49 4c 4c 5f 58 29 0d 0a 0d 0a 20 20 20 20 23 20 48 6f 72 69 7a 6f 6e 74 61 6c 20 64 69 76 _FILL_X)........#.Horizontal.div
18dc0 69 64 65 72 20 6c 69 6e 65 0d 0a 20 20 20 20 46 58 48 6f 72 69 7a 6f 6e 74 61 6c 53 65 70 61 72 ider.line......FXHorizontalSepar
18de0 61 74 6f 72 2e 6e 65 77 28 67 6c 63 61 6e 76 61 73 46 72 61 6d 65 2c 20 53 45 50 41 52 41 54 4f ator.new(glcanvasFrame,.SEPARATO
18e00 52 5f 47 52 4f 4f 56 45 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 29 0d 0a 0d 0a 20 20 20 20 23 R_GROOVE|LAYOUT_FILL_X)........#
18e20 20 44 72 61 77 69 6e 67 20 67 6c 63 61 6e 76 61 73 0d 0a 20 20 20 20 67 6c 70 61 6e 65 6c 20 3d .Drawing.glcanvas......glpanel.=
18e40 20 46 58 56 65 72 74 69 63 61 6c 46 72 61 6d 65 2e 6e 65 77 28 67 6c 63 61 6e 76 61 73 46 72 61 .FXVerticalFrame.new(glcanvasFra
18e60 6d 65 2c 20 28 46 52 41 4d 45 5f 53 55 4e 4b 45 4e 7c 46 52 41 4d 45 5f 54 48 49 43 4b 7c 0d 0a me,.(FRAME_SUNKEN|FRAME_THICK|..
18e80 20 20 20 20 20 20 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f ......LAYOUT_FILL_X|LAYOUT_FILL_
18ea0 59 7c 4c 41 59 4f 55 54 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 4c 45 46 54 29 29 0d 0a 20 20 20 20 Y|LAYOUT_TOP|LAYOUT_LEFT))......
18ec0 67 6c 70 61 6e 65 6c 2e 70 61 64 4c 65 66 74 2c 20 67 6c 70 61 6e 65 6c 2e 70 61 64 52 69 67 68 glpanel.padLeft,.glpanel.padRigh
18ee0 74 20 3d 20 30 2c 20 30 0d 0a 20 20 20 20 67 6c 70 61 6e 65 6c 2e 70 61 64 54 6f 70 2c 20 67 6c t.=.0,.0......glpanel.padTop,.gl
18f00 70 61 6e 65 6c 2e 70 61 64 42 6f 74 74 6f 6d 20 3d 20 30 2c 20 30 0d 0a 0d 0a 20 20 20 20 23 20 panel.padBottom.=.0,.0........#.
18f20 41 20 76 69 73 75 61 6c 20 74 6f 20 64 72 61 77 20 4f 70 65 6e 47 4c 0d 0a 20 20 20 20 40 67 6c A.visual.to.draw.OpenGL......@gl
18f40 76 69 73 75 61 6c 20 3d 20 46 58 47 4c 56 69 73 75 61 6c 2e 6e 65 77 28 67 65 74 41 70 70 28 29 visual.=.FXGLVisual.new(getApp()
18f60 2c 20 56 49 53 55 41 4c 5f 44 4f 55 42 4c 45 42 55 46 46 45 52 29 0d 0a 0d 0a 20 20 20 20 23 20 ,.VISUAL_DOUBLEBUFFER)........#.
18f80 44 72 61 77 69 6e 67 20 67 6c 63 61 6e 76 61 73 0d 0a 20 20 20 20 40 67 6c 63 61 6e 76 61 73 20 Drawing.glcanvas......@glcanvas.
18fa0 3d 20 46 58 47 4c 43 61 6e 76 61 73 2e 6e 65 77 28 67 6c 70 61 6e 65 6c 2c 20 40 67 6c 76 69 73 =.FXGLCanvas.new(glpanel,.@glvis
18fc0 75 61 6c 2c 20 6e 69 6c 2c 20 30 2c 0d 0a 20 20 20 20 20 20 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f ual,.nil,.0,........LAYOUT_FILL_
18fe0 58 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 59 7c 4c 41 59 4f 55 54 5f 54 4f 50 7c 4c 41 59 4f 55 X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOU
19000 54 5f 4c 45 46 54 29 0d 0a 20 20 20 20 40 67 6c 63 61 6e 76 61 73 2e 63 6f 6e 6e 65 63 74 28 53 T_LEFT)......@glcanvas.connect(S
19020 45 4c 5f 50 41 49 4e 54 29 20 7b 0d 0a 20 20 20 20 20 20 64 72 61 77 53 63 65 6e 65 0d 0a 20 20 EL_PAINT).{........drawScene....
19040 20 20 7d 0d 0a 20 20 20 20 40 67 6c 63 61 6e 76 61 73 2e 63 6f 6e 6e 65 63 74 28 53 45 4c 5f 43 ..}......@glcanvas.connect(SEL_C
19060 4f 4e 46 49 47 55 52 45 29 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 40 67 6c 63 61 6e 76 61 73 2e ONFIGURE).{........if.@glcanvas.
19080 6d 61 6b 65 43 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 47 4c 2e 56 69 65 77 70 6f 72 74 makeCurrent..........GL.Viewport
190a0 28 30 2c 20 30 2c 20 40 67 6c 63 61 6e 76 61 73 2e 77 69 64 74 68 2c 20 40 67 6c 63 61 6e 76 61 (0,.0,.@glcanvas.width,.@glcanva
190c0 73 2e 68 65 69 67 68 74 29 0d 0a 20 20 20 20 20 20 20 20 40 67 6c 63 61 6e 76 61 73 2e 6d 61 6b s.height)..........@glcanvas.mak
190e0 65 4e 6f 6e 43 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0d eNonCurrent........end......}...
19100 0a 20 20 20 20 23 20 52 69 67 68 74 20 70 61 6e 65 20 66 6f 72 20 74 68 65 20 62 75 74 74 6f 6e .....#.Right.pane.for.the.button
19120 73 0d 0a 20 20 20 20 62 75 74 74 6f 6e 46 72 61 6d 65 20 3d 20 46 58 56 65 72 74 69 63 61 6c 46 s......buttonFrame.=.FXVerticalF
19140 72 61 6d 65 2e 6e 65 77 28 66 72 61 6d 65 2c 20 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 59 7c 4c 41 rame.new(frame,.LAYOUT_FILL_Y|LA
19160 59 4f 55 54 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 4c 45 46 54 29 0d 0a 20 20 20 20 62 75 74 74 6f YOUT_TOP|LAYOUT_LEFT)......butto
19180 6e 46 72 61 6d 65 2e 70 61 64 4c 65 66 74 2c 20 62 75 74 74 6f 6e 46 72 61 6d 65 2e 70 61 64 52 nFrame.padLeft,.buttonFrame.padR
191a0 69 67 68 74 20 3d 20 31 30 2c 20 31 30 0d 0a 20 20 20 20 62 75 74 74 6f 6e 46 72 61 6d 65 2e 70 ight.=.10,.10......buttonFrame.p
191c0 61 64 54 6f 70 2c 20 62 75 74 74 6f 6e 46 72 61 6d 65 2e 70 61 64 42 6f 74 74 6f 6d 20 3d 20 31 adTop,.buttonFrame.padBottom.=.1
191e0 30 2c 20 31 30 0d 0a 0d 0a 20 20 20 20 23 20 4c 61 62 65 6c 20 61 62 6f 76 65 20 74 68 65 20 62 0,.10........#.Label.above.the.b
19200 75 74 74 6f 6e 73 0d 0a 20 20 20 20 46 58 4c 61 62 65 6c 2e 6e 65 77 28 62 75 74 74 6f 6e 46 72 uttons......FXLabel.new(buttonFr
19220 61 6d 65 2c 20 22 42 75 74 74 6f 6e 20 46 72 61 6d 65 22 2c 20 6e 69 6c 2c 0d 0a 20 20 20 20 20 ame,."Button.Frame",.nil,.......
19240 20 4a 55 53 54 49 46 59 5f 43 45 4e 54 45 52 5f 58 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 29 .JUSTIFY_CENTER_X|LAYOUT_FILL_X)
19260 0d 0a 0d 0a 20 20 20 20 23 20 48 6f 72 69 7a 6f 6e 74 61 6c 20 64 69 76 69 64 65 72 20 6c 69 6e ........#.Horizontal.divider.lin
19280 65 0d 0a 20 20 20 20 46 58 48 6f 72 69 7a 6f 6e 74 61 6c 53 65 70 61 72 61 74 6f 72 2e 6e 65 77 e......FXHorizontalSeparator.new
192a0 28 62 75 74 74 6f 6e 46 72 61 6d 65 2c 20 53 45 50 41 52 41 54 4f 52 5f 52 49 44 47 45 7c 4c 41 (buttonFrame,.SEPARATOR_RIDGE|LA
192c0 59 4f 55 54 5f 46 49 4c 4c 5f 58 29 0d 0a 0d 0a 20 20 20 20 23 20 53 70 69 6e 20 61 63 63 6f 72 YOUT_FILL_X)........#.Spin.accor
192e0 64 69 6e 67 20 74 6f 20 74 69 6d 65 72 0d 0a 20 20 20 20 73 70 69 6e 54 69 6d 65 72 42 74 6e 20 ding.to.timer......spinTimerBtn.
19300 3d 20 46 58 42 75 74 74 6f 6e 2e 6e 65 77 28 62 75 74 74 6f 6e 46 72 61 6d 65 2c 0d 0a 20 20 20 =.FXButton.new(buttonFrame,.....
19320 20 20 20 22 53 70 69 6e 20 26 54 69 6d 65 72 5c 74 53 70 69 6e 20 75 73 69 6e 67 20 69 6e 74 65 ..."Spin.&Timer\tSpin.using.inte
19340 72 76 61 6c 20 74 69 6d 65 72 73 5c 6e 4e 6f 74 65 20 74 68 65 20 61 70 70 0d 0a 20 20 20 20 20 rval.timers\nNote.the.app.......
19360 20 62 6c 6f 63 6b 73 20 75 6e 74 69 6c 20 74 68 65 20 69 6e 74 65 72 61 6c 20 68 61 73 20 65 6c .blocks.until.the.interal.has.el
19380 61 70 73 65 64 2e 2e 2e 22 2c 20 6e 69 6c 2c 0d 0a 20 20 20 20 20 20 6e 69 6c 2c 20 30 2c 20 46 apsed...",.nil,........nil,.0,.F
193a0 52 41 4d 45 5f 54 48 49 43 4b 7c 46 52 41 4d 45 5f 52 41 49 53 45 44 7c 4c 41 59 4f 55 54 5f 46 RAME_THICK|FRAME_RAISED|LAYOUT_F
193c0 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 4c 45 46 54 29 0d 0a 20 ILL_X|LAYOUT_TOP|LAYOUT_LEFT)...
193e0 20 20 20 73 70 69 6e 54 69 6d 65 72 42 74 6e 2e 70 61 64 4c 65 66 74 2c 20 73 70 69 6e 54 69 6d ...spinTimerBtn.padLeft,.spinTim
19400 65 72 42 74 6e 2e 70 61 64 52 69 67 68 74 20 3d 20 31 30 2c 20 31 30 0d 0a 20 20 20 20 73 70 69 erBtn.padRight.=.10,.10......spi
19420 6e 54 69 6d 65 72 42 74 6e 2e 70 61 64 54 6f 70 2c 20 73 70 69 6e 54 69 6d 65 72 42 74 6e 2e 70 nTimerBtn.padTop,.spinTimerBtn.p
19440 61 64 42 6f 74 74 6f 6d 20 3d 20 35 2c 20 35 0d 0a 20 20 20 20 73 70 69 6e 54 69 6d 65 72 42 74 adBottom.=.5,.5......spinTimerBt
19460 6e 2e 63 6f 6e 6e 65 63 74 28 53 45 4c 5f 43 4f 4d 4d 41 4e 44 29 20 7b 0d 0a 20 20 20 20 20 20 n.connect(SEL_COMMAND).{........
19480 40 73 70 69 6e 6e 69 6e 67 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 20 20 40 74 69 6d 65 72 20 3d @spinning.=.true........@timer.=
194a0 20 67 65 74 41 70 70 28 29 2e 61 64 64 54 69 6d 65 6f 75 74 28 54 49 4d 45 52 5f 49 4e 54 45 52 .getApp().addTimeout(TIMER_INTER
194c0 56 41 4c 2c 20 6d 65 74 68 6f 64 28 3a 6f 6e 54 69 6d 65 6f 75 74 29 29 0d 0a 20 20 20 20 7d 0d VAL,.method(:onTimeout))......}.
194e0 0a 20 20 20 20 73 70 69 6e 54 69 6d 65 72 42 74 6e 2e 63 6f 6e 6e 65 63 74 28 53 45 4c 5f 55 50 .....spinTimerBtn.connect(SEL_UP
19500 44 41 54 45 29 20 7b 20 7c 73 65 6e 64 65 72 2c 20 73 65 6c 2c 20 70 74 72 7c 0d 0a 20 20 20 20 DATE).{.|sender,.sel,.ptr|......
19520 20 20 40 73 70 69 6e 6e 69 6e 67 20 3f 20 73 65 6e 64 65 72 2e 64 69 73 61 62 6c 65 20 3a 20 73 ..@spinning.?.sender.disable.:.s
19540 65 6e 64 65 72 2e 65 6e 61 62 6c 65 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 20 53 70 69 ender.enable......}........#.Spi
19560 6e 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 63 68 6f 72 65 0d 0a 20 20 20 20 73 70 69 6e 43 68 n.according.to.chore......spinCh
19580 6f 72 65 42 74 6e 20 3d 20 46 58 42 75 74 74 6f 6e 2e 6e 65 77 28 62 75 74 74 6f 6e 46 72 61 6d oreBtn.=.FXButton.new(buttonFram
195a0 65 2c 0d 0a 20 20 20 20 20 20 22 53 70 69 6e 20 26 43 68 6f 72 65 5c 74 53 70 69 6e 20 61 73 20 e,........"Spin.&Chore\tSpin.as.
195c0 66 61 73 74 20 61 73 20 70 6f 73 73 69 62 6c 65 20 75 73 69 6e 67 20 63 68 6f 72 65 73 5c 6e 4e fast.as.possible.using.chores\nN
195e0 6f 74 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 0d 0a 20 20 20 20 20 20 61 70 70 20 69 ote.even.though.the........app.i
19600 73 20 76 65 72 79 20 72 65 73 70 6f 6e 73 69 76 65 2c 20 69 74 20 6e 65 76 65 72 20 62 6c 6f 63 s.very.responsive,.it.never.bloc
19620 6b 73 3b 5c 6e 74 68 65 72 65 20 69 73 20 61 6c 77 61 79 73 20 73 6f 6d 65 74 68 69 6e 67 20 74 ks;\nthere.is.always.something.t
19640 6f 0d 0a 20 20 20 20 20 20 64 6f 2e 2e 2e 22 2c 20 6e 69 6c 2c 0d 0a 20 20 20 20 20 20 6e 69 6c o........do...",.nil,........nil
19660 2c 20 30 2c 20 46 52 41 4d 45 5f 54 48 49 43 4b 7c 46 52 41 4d 45 5f 52 41 49 53 45 44 7c 4c 41 ,.0,.FRAME_THICK|FRAME_RAISED|LA
19680 59 4f 55 54 5f 46 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 4c 45 YOUT_FILL_X|LAYOUT_TOP|LAYOUT_LE
196a0 46 54 29 0d 0a 20 20 20 20 73 70 69 6e 43 68 6f 72 65 42 74 6e 2e 70 61 64 4c 65 66 74 2c 20 73 FT)......spinChoreBtn.padLeft,.s
196c0 70 69 6e 43 68 6f 72 65 42 74 6e 2e 70 61 64 52 69 67 68 74 20 3d 20 31 30 2c 20 31 30 0d 0a 20 pinChoreBtn.padRight.=.10,.10...
196e0 20 20 20 73 70 69 6e 43 68 6f 72 65 42 74 6e 2e 70 61 64 54 6f 70 2c 20 73 70 69 6e 43 68 6f 72 ...spinChoreBtn.padTop,.spinChor
19700 65 42 74 6e 2e 70 61 64 42 6f 74 74 6f 6d 20 3d 20 35 2c 20 35 0d 0a 20 20 20 20 73 70 69 6e 43 eBtn.padBottom.=.5,.5......spinC
19720 68 6f 72 65 42 74 6e 2e 63 6f 6e 6e 65 63 74 28 53 45 4c 5f 43 4f 4d 4d 41 4e 44 29 20 7b 0d 0a horeBtn.connect(SEL_COMMAND).{..
19740 20 20 20 20 20 20 40 73 70 69 6e 6e 69 6e 67 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 20 20 40 63 ......@spinning.=.true........@c
19760 68 6f 72 65 20 3d 20 67 65 74 41 70 70 28 29 2e 61 64 64 43 68 6f 72 65 28 6d 65 74 68 6f 64 28 hore.=.getApp().addChore(method(
19780 3a 6f 6e 43 68 6f 72 65 29 29 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 73 70 69 6e 43 68 6f 72 65 :onChore))......}......spinChore
197a0 42 74 6e 2e 63 6f 6e 6e 65 63 74 28 53 45 4c 5f 55 50 44 41 54 45 29 20 7b 20 7c 73 65 6e 64 65 Btn.connect(SEL_UPDATE).{.|sende
197c0 72 2c 20 73 65 6c 2c 20 70 74 72 7c 0d 0a 20 20 20 20 20 20 40 73 70 69 6e 6e 69 6e 67 20 3f 20 r,.sel,.ptr|........@spinning.?.
197e0 73 65 6e 64 65 72 2e 64 69 73 61 62 6c 65 20 3a 20 73 65 6e 64 65 72 2e 65 6e 61 62 6c 65 0d 0a sender.disable.:.sender.enable..
19800 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 20 53 74 6f 70 20 73 70 69 6e 6e 69 6e 67 0d 0a 20 20 ....}........#.Stop.spinning....
19820 20 20 73 74 6f 70 42 74 6e 20 3d 20 46 58 42 75 74 74 6f 6e 2e 6e 65 77 28 62 75 74 74 6f 6e 46 ..stopBtn.=.FXButton.new(buttonF
19840 72 61 6d 65 2c 0d 0a 20 20 20 20 20 20 22 26 53 74 6f 70 20 53 70 69 6e 5c 74 53 74 6f 70 20 74 rame,........"&Stop.Spin\tStop.t
19860 68 69 73 20 6d 61 64 20 73 70 69 6e 6e 69 6e 67 2c 20 49 27 6d 20 67 65 74 74 69 6e 67 20 64 69 his.mad.spinning,.I'm.getting.di
19880 7a 7a 79 22 2c 20 6e 69 6c 2c 0d 0a 20 20 20 20 20 20 6e 69 6c 2c 20 30 2c 20 46 52 41 4d 45 5f zzy",.nil,........nil,.0,.FRAME_
198a0 54 48 49 43 4b 7c 46 52 41 4d 45 5f 52 41 49 53 45 44 7c 4c 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 THICK|FRAME_RAISED|LAYOUT_FILL_X
198c0 7c 4c 41 59 4f 55 54 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 4c 45 46 54 29 0d 0a 20 20 20 20 73 74 |LAYOUT_TOP|LAYOUT_LEFT)......st
198e0 6f 70 42 74 6e 2e 70 61 64 4c 65 66 74 2c 20 73 74 6f 70 42 74 6e 2e 70 61 64 52 69 67 68 74 20 opBtn.padLeft,.stopBtn.padRight.
19900 3d 20 31 30 2c 20 31 30 0d 0a 20 20 20 20 73 74 6f 70 42 74 6e 2e 70 61 64 54 6f 70 2c 20 73 74 =.10,.10......stopBtn.padTop,.st
19920 6f 70 42 74 6e 2e 70 61 64 42 6f 74 74 6f 6d 20 3d 20 35 2c 20 35 0d 0a 20 20 20 20 73 74 6f 70 opBtn.padBottom.=.5,.5......stop
19940 42 74 6e 2e 63 6f 6e 6e 65 63 74 28 53 45 4c 5f 43 4f 4d 4d 41 4e 44 29 20 7b 0d 0a 20 20 20 20 Btn.connect(SEL_COMMAND).{......
19960 20 20 40 73 70 69 6e 6e 69 6e 67 20 3d 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 69 66 20 40 74 ..@spinning.=.false........if.@t
19980 69 6d 65 72 0d 0a 20 20 20 20 20 20 20 20 67 65 74 41 70 70 28 29 2e 72 65 6d 6f 76 65 54 69 6d imer..........getApp().removeTim
199a0 65 6f 75 74 28 40 74 69 6d 65 72 29 0d 0a 20 20 20 20 20 20 20 20 40 74 69 6d 65 72 20 3d 20 6e eout(@timer)..........@timer.=.n
199c0 69 6c 0d 0a 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 69 66 20 40 63 68 6f 72 65 0d 0a il........end........if.@chore..
199e0 20 20 20 20 20 20 20 20 67 65 74 41 70 70 28 29 2e 72 65 6d 6f 76 65 43 68 6f 72 65 28 40 63 68 ........getApp().removeChore(@ch
19a00 6f 72 65 29 0d 0a 20 20 20 20 20 20 20 20 40 63 68 6f 72 65 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 ore)..........@chore.=.nil......
19a20 20 20 65 6e 64 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 73 74 6f 70 42 74 6e 2e 63 6f 6e 6e 65 63 ..end......}......stopBtn.connec
19a40 74 28 53 45 4c 5f 55 50 44 41 54 45 29 20 7b 20 7c 73 65 6e 64 65 72 2c 20 73 65 6c 2c 20 70 74 t(SEL_UPDATE).{.|sender,.sel,.pt
19a60 72 7c 0d 0a 20 20 20 20 20 20 40 73 70 69 6e 6e 69 6e 67 20 3f 20 73 65 6e 64 65 72 2e 65 6e 61 r|........@spinning.?.sender.ena
19a80 62 6c 65 20 3a 20 73 65 6e 64 65 72 2e 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 ble.:.sender.disable......}.....
19aa0 20 20 20 23 20 45 78 69 74 20 62 75 74 74 6f 6e 0d 0a 20 20 20 20 65 78 69 74 42 74 6e 20 3d 20 ...#.Exit.button......exitBtn.=.
19ac0 46 58 42 75 74 74 6f 6e 2e 6e 65 77 28 62 75 74 74 6f 6e 46 72 61 6d 65 2c 20 22 26 45 78 69 74 FXButton.new(buttonFrame,."&Exit
19ae0 5c 74 45 78 69 74 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 22 2c 20 6e 69 6c 2c 0d 0a 20 \tExit.the.application",.nil,...
19b00 20 20 20 20 20 67 65 74 41 70 70 28 29 2c 20 46 58 41 70 70 3a 3a 49 44 5f 51 55 49 54 2c 0d 0a .....getApp(),.FXApp::ID_QUIT,..
19b20 20 20 20 20 20 20 46 52 41 4d 45 5f 54 48 49 43 4b 7c 46 52 41 4d 45 5f 52 41 49 53 45 44 7c 4c ......FRAME_THICK|FRAME_RAISED|L
19b40 41 59 4f 55 54 5f 46 49 4c 4c 5f 58 7c 4c 41 59 4f 55 54 5f 54 4f 50 7c 4c 41 59 4f 55 54 5f 4c AYOUT_FILL_X|LAYOUT_TOP|LAYOUT_L
19b60 45 46 54 29 0d 0a 20 20 20 20 65 78 69 74 42 74 6e 2e 70 61 64 4c 65 66 74 2c 20 65 78 69 74 42 EFT)......exitBtn.padLeft,.exitB
19b80 74 6e 2e 70 61 64 52 69 67 68 74 20 3d 20 31 30 2c 20 31 30 0d 0a 20 20 20 20 65 78 69 74 42 74 tn.padRight.=.10,.10......exitBt
19ba0 6e 2e 70 61 64 54 6f 70 2c 20 65 78 69 74 42 74 6e 2e 70 61 64 42 6f 74 74 6f 6d 20 3d 20 35 2c n.padTop,.exitBtn.padBottom.=.5,
19bc0 20 35 0d 0a 0d 0a 20 20 20 20 23 20 4d 61 6b 65 20 61 20 74 6f 6f 6c 74 69 70 0d 0a 20 20 20 20 .5........#.Make.a.tooltip......
19be0 46 58 54 6f 6f 6c 74 69 70 2e 6e 65 77 28 67 65 74 41 70 70 28 29 29 0d 0a 0d 0a 20 20 20 20 23 FXTooltip.new(getApp())........#
19c00 20 49 6e 69 74 69 61 6c 69 7a 65 20 70 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 73 0d 0a 20 .Initialize.private.variables...
19c20 20 20 20 40 73 70 69 6e 6e 69 6e 67 20 3d 20 66 61 6c 73 65 0d 0a 20 20 20 20 40 63 68 6f 72 65 ...@spinning.=.false......@chore
19c40 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 40 74 69 6d 65 72 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 40 61 .=.nil......@timer.=.nil......@a
19c60 6e 67 6c 65 20 3d 20 30 2e 30 0d 0a 20 20 20 20 40 73 69 7a 65 20 3d 20 30 2e 35 0d 0a 20 20 65 ngle.=.0.0......@size.=.0.5....e
19c80 6e 64 0d 0a 0d 0a 20 20 23 20 43 72 65 61 74 65 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 0d nd......#.Create.and.initialize.
19ca0 0a 20 20 64 65 66 20 63 72 65 61 74 65 0d 0a 20 20 20 20 73 75 70 65 72 0d 0a 20 20 20 20 73 68 ...def.create......super......sh
19cc0 6f 77 28 50 4c 41 43 45 4d 45 4e 54 5f 53 43 52 45 45 4e 29 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 ow(PLACEMENT_SCREEN)....end..end
19ce0 0d 0a 0d 0a 69 66 20 5f 5f 46 49 4c 45 5f 5f 20 3d 3d 20 24 30 0d 0a 20 20 23 20 43 6f 6e 73 74 ....if.__FILE__.==.$0....#.Const
19d00 72 75 63 74 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 61 70 70 6c 69 63 61 74 ruct.the.application....applicat
19d20 69 6f 6e 20 3d 20 46 58 41 70 70 2e 6e 65 77 28 22 47 4c 54 65 73 74 22 2c 20 22 46 6f 78 54 65 ion.=.FXApp.new("GLTest",."FoxTe
19d40 73 74 22 29 0d 0a 0d 0a 20 20 23 20 54 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63 st")......#.To.ensure.that.the.c
19d60 68 6f 72 65 73 2d 62 61 73 65 64 20 73 70 69 6e 20 77 69 6c 6c 20 72 75 6e 20 61 73 20 66 61 73 hores-based.spin.will.run.as.fas
19d80 74 20 61 73 20 70 6f 73 73 69 62 6c 65 2c 0d 0a 20 20 23 20 77 65 20 63 61 6e 20 64 69 73 61 62 t.as.possible,....#.we.can.disab
19da0 6c 65 20 74 68 65 20 63 68 6f 72 65 20 69 6e 20 46 58 52 75 62 79 27 73 20 65 76 65 6e 74 20 6c le.the.chore.in.FXRuby's.event.l
19dc0 6f 6f 70 20 74 68 61 74 20 74 72 69 65 73 20 74 6f 20 73 63 68 65 64 75 6c 65 0d 0a 20 20 23 20 oop.that.tries.to.schedule....#.
19de0 6f 74 68 65 72 20 74 68 72 65 61 64 73 2e 20 54 68 69 73 20 69 73 20 4f 4b 20 66 6f 72 20 74 68 other.threads..This.is.OK.for.th
19e00 69 73 20 70 72 6f 67 72 61 6d 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 6e 27 74 20 is.program.because.there.aren't.
19e20 61 6e 79 0d 0a 20 20 23 20 6f 74 68 65 72 20 52 75 62 79 20 74 68 72 65 61 64 73 20 72 75 6e 6e any....#.other.Ruby.threads.runn
19e40 69 6e 67 2e 0d 0a 0d 0a 20 20 23 61 70 70 6c 69 63 61 74 69 6f 6e 2e 64 69 73 61 62 6c 65 54 68 ing.......#application.disableTh
19e60 72 65 61 64 73 0d 0a 0d 0a 20 20 23 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6d 61 69 6e 20 reads......#.Construct.the.main.
19e80 77 69 6e 64 6f 77 0d 0a 20 20 47 4c 54 65 73 74 57 69 6e 64 6f 77 2e 6e 65 77 28 61 70 70 6c 69 window....GLTestWindow.new(appli
19ea0 63 61 74 69 6f 6e 29 0d 0a 0d 0a 20 20 23 20 43 72 65 61 74 65 20 74 68 65 20 61 70 70 27 73 20 cation)......#.Create.the.app's.
19ec0 77 69 6e 64 6f 77 73 0d 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 63 72 65 61 74 65 0d 0a 0d windows....application.create...
19ee0 0a 20 20 23 20 52 75 6e 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 61 70 70 6c ...#.Run.the.application....appl
19f00 69 63 61 74 69 6f 6e 2e 72 75 6e 0d 0a 65 6e 64 0d 0a 0d 0a 63 6c 61 73 73 20 46 61 63 65 6c 65 ication.run..end....class.Facele
19f20 74 0d 0a 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 63 6f 6c 6f 72 0d 0a 20 20 64 65 66 t....attr_accessor.:color....def
19f40 20 69 6e 69 74 69 61 6c 69 7a 65 28 63 6f 6c 6f 72 29 0d 0a 20 20 20 20 40 63 6f 6c 6f 72 20 3d .initialize(color)......@color.=
19f60 20 63 6f 6c 6f 72 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 74 6f 5f 73 0d 0a 20 20 20 .color....end......def.to_s.....
19f80 20 40 63 6f 6c 6f 72 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 63 6c 61 73 73 20 45 64 67 .@color....end..end....class.Edg
19fa0 65 0d 0a 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 66 61 63 65 6c 65 74 73 2c 20 3a 63 e....attr_accessor.:facelets,.:c
19fc0 6f 6c 6f 72 73 0d 0a 0d 0a 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 66 61 63 65 6c 65 olors......def.initialize(facele
19fe0 74 73 29 0d 0a 20 20 20 20 40 66 61 63 65 6c 65 74 73 20 3d 20 66 61 63 65 6c 65 74 73 0d 0a 20 ts)......@facelets.=.facelets...
1a000 20 20 20 40 63 6f 6c 6f 72 73 20 3d 20 40 66 61 63 65 6c 65 74 73 2e 6d 61 70 20 7b 20 7c 66 6c ...@colors.=.@facelets.map.{.|fl
1a020 7c 20 66 6c 2e 63 6f 6c 6f 72 20 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 61 70 70 |.fl.color.}....end......def.app
1a040 6c 79 28 65 64 67 65 29 0d 0a 20 20 20 20 40 66 61 63 65 6c 65 74 73 2e 65 61 63 68 5f 77 69 74 ly(edge)......@facelets.each_wit
1a060 68 5f 69 6e 64 65 78 20 7b 20 7c 66 6c 2c 20 69 7c 0d 0a 20 20 20 20 20 20 66 6c 2e 63 6f 6c 6f h_index.{.|fl,.i|........fl.colo
1a080 72 20 3d 20 65 64 67 65 2e 63 6f 6c 6f 72 73 5b 69 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 65 6e 64 r.=.edge.colors[i]......}....end
1a0a0 0d 0a 0d 0a 20 20 64 65 66 20 69 6e 73 70 65 63 74 0d 0a 20 20 20 20 22 5c 6e 25 73 20 25 73 5c ......def.inspect......"\n%s.%s\
1a0c0 6e 25 73 20 25 73 20 25 73 22 20 25 20 66 61 63 65 6c 65 74 73 0d 0a 20 20 65 6e 64 0d 0a 65 6e n%s.%s.%s".%.facelets....end..en
1a0e0 64 0d 0a 0d 0a 63 6c 61 73 73 20 53 69 64 65 0d 0a 20 20 61 74 74 72 5f 72 65 61 64 65 72 20 3a d....class.Side....attr_reader.:
1a100 6e 75 6d 2c 20 3a 66 61 63 65 6c 65 74 73 0d 0a 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 num,.:facelets....attr_accessor.
1a120 3a 73 69 64 65 73 0d 0a 0d 0a 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 6e 75 6d 29 0d :sides......def.initialize(num).
1a140 0a 20 20 20 20 40 6e 75 6d 20 3d 20 6e 75 6d 0d 0a 20 20 20 20 40 73 69 64 65 73 20 3d 20 5b 5d .....@num.=.num......@sides.=.[]
1a160 0d 0a 20 20 20 20 40 66 61 63 65 6c 65 74 73 20 3d 20 5b 5d 0d 0a 20 20 20 20 40 66 6c 5f 62 79 ......@facelets.=.[]......@fl_by
1a180 5f 73 69 64 65 20 3d 20 7b 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 23 20 66 61 63 65 6c 65 74 _side.=.{}....end......#.facelet
1a1a0 73 20 26 20 73 69 64 65 73 0d 0a 20 20 23 20 20 20 20 20 30 0d 0a 20 20 23 20 20 20 30 20 31 20 s.&.sides....#.....0....#...0.1.
1a1c0 32 0d 0a 20 20 23 20 33 20 33 20 34 20 35 20 31 0d 0a 20 20 23 20 20 20 36 20 37 20 38 0d 0a 20 2....#.3.3.4.5.1....#...6.7.8...
1a1e0 20 23 20 20 20 20 20 32 0d 0a 0d 0a 20 20 64 65 66 20 66 61 63 65 6c 65 74 73 3d 28 66 61 63 65 .#.....2......def.facelets=(face
1a200 6c 65 74 73 29 0d 0a 20 20 20 20 40 66 61 63 65 6c 65 74 73 20 3d 20 66 61 63 65 6c 65 74 73 2e lets)......@facelets.=.facelets.
1a220 6d 61 70 20 7b 20 7c 63 7c 20 46 61 63 65 6c 65 74 2e 6e 65 77 28 63 29 20 7d 0d 0a 20 20 20 20 map.{.|c|.Facelet.new(c).}......
1a240 69 6e 69 74 5f 66 61 63 65 6c 65 74 20 30 2c 20 33 2c 30 0d 0a 20 20 20 20 69 6e 69 74 5f 66 61 init_facelet.0,.3,0......init_fa
1a260 63 65 6c 65 74 20 31 2c 20 30 0d 0a 20 20 20 20 69 6e 69 74 5f 66 61 63 65 6c 65 74 20 32 2c 20 celet.1,.0......init_facelet.2,.
1a280 30 2c 31 0d 0a 20 20 20 20 69 6e 69 74 5f 66 61 63 65 6c 65 74 20 33 2c 20 33 0d 0a 20 20 20 20 0,1......init_facelet.3,.3......
1a2a0 69 6e 69 74 5f 66 61 63 65 6c 65 74 20 35 2c 20 31 0d 0a 20 20 20 20 69 6e 69 74 5f 66 61 63 65 init_facelet.5,.1......init_face
1a2c0 6c 65 74 20 36 2c 20 32 2c 33 0d 0a 20 20 20 20 69 6e 69 74 5f 66 61 63 65 6c 65 74 20 37 2c 20 let.6,.2,3......init_facelet.7,.
1a2e0 32 0d 0a 20 20 20 20 69 6e 69 74 5f 66 61 63 65 6c 65 74 20 38 2c 20 31 2c 32 0d 0a 20 20 65 6e 2......init_facelet.8,.1,2....en
1a300 64 0d 0a 0d 0a 20 20 64 65 66 20 3c 3d 3e 28 73 69 64 65 29 0d 0a 20 20 20 20 73 65 6c 66 2e 6e d......def.<=>(side)......self.n
1a320 75 6d 20 3c 3d 3e 20 73 69 64 65 2e 6e 75 6d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 um.<=>.side.num....end......def.
1a340 69 6e 69 74 5f 66 61 63 65 6c 65 74 28 70 6f 73 2c 20 2a 73 69 64 65 5f 6e 75 6d 73 29 0d 0a 20 init_facelet(pos,.*side_nums)...
1a360 20 20 20 73 69 64 65 73 20 3d 20 73 69 64 65 5f 6e 75 6d 73 2e 6d 61 70 20 7b 20 7c 6e 75 6d 7c ...sides.=.side_nums.map.{.|num|
1a380 20 40 73 69 64 65 73 5b 6e 75 6d 5d 20 7d 2e 73 6f 72 74 0d 0a 20 20 20 20 40 66 6c 5f 62 79 5f .@sides[num].}.sort......@fl_by_
1a3a0 73 69 64 65 5b 73 69 64 65 73 5d 20 3d 20 70 6f 73 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 side[sides].=.pos....end......de
1a3c0 66 20 5b 5d 3d 28 63 6f 6c 6f 72 2c 20 2a 73 69 64 65 73 29 0d 0a 20 20 20 20 40 66 61 63 65 6c f.[]=(color,.*sides)......@facel
1a3e0 65 74 73 5b 40 66 6c 5f 62 79 5f 73 69 64 65 5b 73 69 64 65 73 2e 73 6f 72 74 5d 5d 2e 63 6f 6c ets[@fl_by_side[sides.sort]].col
1a400 6f 72 20 3d 20 63 6f 6c 6f 72 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 76 61 6c 75 65 or.=.color....end......def.value
1a420 73 5f 61 74 28 2a 73 69 64 65 73 29 0d 0a 20 20 20 20 73 69 64 65 73 2e 6d 61 70 20 7b 20 7c 73 s_at(*sides)......sides.map.{.|s
1a440 69 64 65 73 7c 20 40 66 61 63 65 6c 65 74 73 5b 40 66 6c 5f 62 79 5f 73 69 64 65 5b 73 69 64 65 ides|.@facelets[@fl_by_side[side
1a460 73 2e 73 6f 72 74 5d 5d 20 7d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 69 6e 73 70 65 s.sort]].}....end......def.inspe
1a480 63 74 28 72 61 6e 67 65 3d 6e 69 6c 29 0d 0a 20 20 20 20 69 66 20 72 61 6e 67 65 0d 0a 20 20 20 ct(range=nil)......if.range.....
1a4a0 20 20 20 40 66 61 63 65 6c 65 74 73 2e 76 61 6c 75 65 73 5f 61 74 28 2a 28 72 61 6e 67 65 2e 74 ...@facelets.values_at(*(range.t
1a4c0 6f 5f 61 29 29 2e 6a 6f 69 6e 28 27 20 27 29 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 o_a)).join('.')......else.......
1a4e0 20 3c 3c 2d 45 4f 53 2e 67 73 75 62 28 2f 5c 64 2f 29 20 7b 20 7c 6e 75 6d 7c 20 40 66 61 63 65 .<<-EOS.gsub(/\d/).{.|num|.@face
1a500 6c 65 74 73 5b 6e 75 6d 2e 74 6f 5f 69 5d 20 7d 2e 67 73 75 62 28 2f 5b 41 42 43 44 5d 2f 29 20 lets[num.to_i].}.gsub(/[ABCD]/).
1a520 7b 20 7c 73 69 64 65 7c 20 40 73 69 64 65 73 5b 73 69 64 65 5b 30 5d 2d 3f 41 5d 2e 6e 75 6d 2e {.|side|.@sides[side[0]-?A].num.
1a540 74 6f 5f 73 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 41 0d 0a 20 20 20 20 20 20 20 20 20 30 to_s.}.............A...........0
1a560 20 31 20 32 0d 0a 20 20 20 20 20 20 20 44 20 33 20 34 20 35 20 42 0d 0a 20 20 20 20 20 20 20 20 .1.2.........D.3.4.5.B..........
1a580 20 36 20 37 20 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 43 0d 0a 20 20 20 20 20 20 45 4f 53 0d .6.7.8.............C........EOS.
1a5a0 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 67 65 74 5f 65 64 67 .....end....end......def.get_edg
1a5c0 65 28 73 69 64 65 29 0d 0a 20 20 20 20 74 72 69 6f 20 3d 20 28 2d 31 2e 2e 31 29 2e 6d 61 70 20 e(side)......trio.=.(-1..1).map.
1a5e0 7b 20 7c 78 7c 20 28 73 69 64 65 20 2b 20 78 29 20 25 20 34 20 7d 0d 0a 20 20 20 20 70 72 65 76 {.|x|.(side.+.x).%.4.}......prev
1a600 5f 73 69 64 65 2c 20 74 68 69 73 5f 73 69 64 65 2c 20 6e 65 78 74 5f 73 69 64 65 20 3d 20 40 73 _side,.this_side,.next_side.=.@s
1a620 69 64 65 73 2e 76 61 6c 75 65 73 5f 61 74 28 2a 74 72 69 6f 29 0d 0a 20 20 20 20 65 20 3d 20 45 ides.values_at(*trio)......e.=.E
1a640 64 67 65 2e 6e 65 77 28 0d 0a 20 20 20 20 20 20 73 65 6c 66 20 20 20 20 20 2e 76 61 6c 75 65 73 dge.new(........self......values
1a660 5f 61 74 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 74 68 69 73 5f 73 69 _at(....................[this_si
1a680 64 65 5d 2c 20 5b 74 68 69 73 5f 73 69 64 65 2c 20 6e 65 78 74 5f 73 69 64 65 5d 20 29 20 2b 0d de],.[this_side,.next_side].).+.
1a6a0 0a 20 20 20 20 20 20 74 68 69 73 5f 73 69 64 65 2e 76 61 6c 75 65 73 5f 61 74 28 20 5b 73 65 6c .......this_side.values_at(.[sel
1a6c0 66 2c 20 70 72 65 76 5f 73 69 64 65 5d 2c 20 5b 73 65 6c 66 20 20 20 20 20 5d 2c 20 5b 73 65 6c f,.prev_side],.[self.....],.[sel
1a6e0 66 2c 20 20 20 20 20 20 6e 65 78 74 5f 73 69 64 65 5d 20 29 0d 0a 20 20 20 20 29 0d 0a 20 20 20 f,......next_side].)......).....
1a700 20 23 70 75 74 73 20 27 45 64 67 65 20 63 72 65 61 74 65 64 20 66 6f 72 20 73 69 64 65 20 25 64 .#puts.'Edge.created.for.side.%d
1a720 3a 20 27 20 25 20 73 69 64 65 20 2b 20 65 2e 69 6e 73 70 65 63 74 0d 0a 20 20 20 20 65 0d 0a 20 :.'.%.side.+.e.inspect......e...
1a740 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 74 75 72 6e 28 64 69 72 29 0d 0a 20 20 20 20 23 70 20 .end......def.turn(dir)......#p.
1a760 27 74 75 72 6e 20 73 69 64 65 20 25 64 20 69 6e 20 25 64 27 20 25 20 5b 6e 75 6d 2c 20 64 69 72 'turn.side.%d.in.%d'.%.[num,.dir
1a780 5d 0d 0a 20 20 20 20 65 64 67 65 73 20 3d 20 28 30 2e 2e 33 29 2e 6d 61 70 20 7b 20 7c 6e 7c 20 ]......edges.=.(0..3).map.{.|n|.
1a7a0 67 65 74 5f 65 64 67 65 20 6e 20 7d 0d 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 30 2e 2e 33 0d get_edge.n.}......for.i.in.0..3.
1a7c0 0a 20 20 20 20 20 20 65 64 67 65 73 5b 69 5d 2e 61 70 70 6c 79 20 65 64 67 65 73 5b 28 69 2d 64 .......edges[i].apply.edges[(i-d
1a7e0 69 72 29 20 25 20 34 5d 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d ir).%.4]......end....end..end...
1a800 0a 63 6c 61 73 73 20 43 75 62 65 0d 0a 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 .class.Cube....def.initialize...
1a820 20 20 20 40 73 69 64 65 73 20 3d 20 5b 5d 0d 0a 20 20 20 20 25 77 28 6c 65 66 74 20 66 72 6f 6e ...@sides.=.[]......%w(left.fron
1a840 74 20 72 69 67 68 74 20 62 61 63 6b 20 74 6f 70 20 62 6f 74 74 6f 6d 29 2e 65 61 63 68 5f 77 69 t.right.back.top.bottom).each_wi
1a860 74 68 5f 69 6e 64 65 78 20 7b 20 7c 73 69 64 65 2c 20 69 7c 0d 0a 20 20 20 20 20 20 65 76 61 6c th_index.{.|side,.i|........eval
1a880 28 22 40 73 69 64 65 73 5b 23 7b 69 7d 5d 20 3d 20 40 23 7b 73 69 64 65 7d 20 3d 20 53 69 64 65 ("@sides[#{i}].=.@#{side}.=.Side
1a8a0 2e 6e 65 77 28 23 7b 69 7d 29 22 29 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 40 6c 65 66 74 2e 73 .new(#{i})")......}......@left.s
1a8c0 69 64 65 73 20 3d 20 5b 40 74 6f 70 2c 20 40 66 72 6f 6e 74 2c 20 40 62 6f 74 74 6f 6d 2c 20 40 ides.=.[@top,.@front,.@bottom,.@
1a8e0 62 61 63 6b 5d 0d 0a 20 20 20 20 40 66 72 6f 6e 74 2e 73 69 64 65 73 20 3d 20 5b 40 74 6f 70 2c back]......@front.sides.=.[@top,
1a900 20 40 72 69 67 68 74 2c 20 40 62 6f 74 74 6f 6d 2c 20 40 6c 65 66 74 5d 0d 0a 20 20 20 20 40 72 .@right,.@bottom,.@left]......@r
1a920 69 67 68 74 2e 73 69 64 65 73 20 3d 20 5b 40 74 6f 70 2c 20 40 62 61 63 6b 2c 20 40 62 6f 74 74 ight.sides.=.[@top,.@back,.@bott
1a940 6f 6d 2c 20 40 66 72 6f 6e 74 5d 0d 0a 20 20 20 20 40 62 61 63 6b 2e 73 69 64 65 73 20 3d 20 5b om,.@front]......@back.sides.=.[
1a960 40 74 6f 70 2c 20 40 6c 65 66 74 2c 20 40 62 6f 74 74 6f 6d 2c 20 40 72 69 67 68 74 5d 0d 0a 20 @top,.@left,.@bottom,.@right]...
1a980 20 20 20 40 74 6f 70 2e 73 69 64 65 73 20 3d 20 5b 40 62 61 63 6b 2c 20 40 72 69 67 68 74 2c 20 ...@top.sides.=.[@back,.@right,.
1a9a0 40 66 72 6f 6e 74 2c 20 40 6c 65 66 74 5d 0d 0a 20 20 20 20 40 62 6f 74 74 6f 6d 2e 73 69 64 65 @front,.@left]......@bottom.side
1a9c0 73 20 3d 20 5b 40 66 72 6f 6e 74 2c 20 40 72 69 67 68 74 2c 20 40 62 61 63 6b 2c 20 40 6c 65 66 s.=.[@front,.@right,.@back,.@lef
1a9e0 74 5d 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 72 65 61 64 5f 66 61 63 65 6c 65 74 73 t]....end......def.read_facelets
1aa00 28 66 73 29 0d 0a 20 20 20 20 70 61 74 74 65 72 6e 20 3d 20 52 65 67 65 78 70 2e 6e 65 77 28 3c (fs)......pattern.=.Regexp.new(<
1aa20 3c 2d 45 4f 50 2e 67 73 75 62 28 2f 5c 77 2f 2c 20 27 5c 77 27 29 2e 67 73 75 62 28 2f 5c 73 2b <-EOP.gsub(/\w/,.'\w').gsub(/\s+
1aa40 2f 2c 20 27 5c 73 2a 27 29 29 0d 0a 20 20 20 20 20 20 20 20 28 77 20 77 20 77 29 0d 0a 20 20 20 /,.'\s*'))..........(w.w.w).....
1aa60 20 20 20 20 20 28 77 20 77 20 77 29 0d 0a 20 20 20 20 20 20 20 20 28 77 20 77 20 77 29 0d 0a 28 .....(w.w.w)..........(w.w.w)..(
1aa80 72 20 72 20 72 29 20 28 67 20 67 20 67 29 20 28 62 20 62 20 62 29 20 28 6f 20 6f 20 6f 29 0d 0a r.r.r).(g.g.g).(b.b.b).(o.o.o)..
1aaa0 28 72 20 72 20 72 29 20 28 67 20 67 20 67 29 20 28 62 20 62 20 62 29 20 28 6f 20 6f 20 6f 29 0d (r.r.r).(g.g.g).(b.b.b).(o.o.o).
1aac0 0a 28 72 20 72 20 72 29 20 28 67 20 67 20 67 29 20 28 62 20 62 20 62 29 20 28 6f 20 6f 20 6f 29 .(r.r.r).(g.g.g).(b.b.b).(o.o.o)
1aae0 0d 0a 20 20 20 20 20 20 20 20 28 79 20 79 20 79 29 0d 0a 20 20 20 20 20 20 20 20 28 79 20 79 20 ..........(y.y.y)..........(y.y.
1ab00 79 29 0d 0a 20 20 20 20 20 20 20 20 28 79 20 79 20 79 29 0d 0a 20 20 20 20 45 4f 50 0d 0a 20 20 y)..........(y.y.y)......EOP....
1ab20 20 20 6d 64 20 3d 20 70 61 74 74 65 72 6e 2e 6d 61 74 63 68 28 66 73 29 2e 74 6f 5f 61 0d 0a 0d ..md.=.pattern.match(fs).to_a...
1ab40 0a 20 20 20 20 40 74 6f 70 2e 66 61 63 65 6c 65 74 73 20 3d 20 70 61 72 73 65 5f 66 61 63 65 6c .....@top.facelets.=.parse_facel
1ab60 65 74 73 28 6d 64 2e 76 61 6c 75 65 73 5f 61 74 28 31 2c 32 2c 33 29 29 0d 0a 20 20 20 20 40 6c ets(md.values_at(1,2,3))......@l
1ab80 65 66 74 2e 66 61 63 65 6c 65 74 73 20 3d 20 70 61 72 73 65 5f 66 61 63 65 6c 65 74 73 28 6d 64 eft.facelets.=.parse_facelets(md
1aba0 2e 76 61 6c 75 65 73 5f 61 74 28 34 2c 38 2c 31 32 29 29 0d 0a 20 20 20 20 40 66 72 6f 6e 74 2e .values_at(4,8,12))......@front.
1abc0 66 61 63 65 6c 65 74 73 20 3d 20 70 61 72 73 65 5f 66 61 63 65 6c 65 74 73 28 6d 64 2e 76 61 6c facelets.=.parse_facelets(md.val
1abe0 75 65 73 5f 61 74 28 35 2c 39 2c 31 33 29 29 0d 0a 20 20 20 20 40 72 69 67 68 74 2e 66 61 63 65 ues_at(5,9,13))......@right.face
1ac00 6c 65 74 73 20 3d 20 70 61 72 73 65 5f 66 61 63 65 6c 65 74 73 28 6d 64 2e 76 61 6c 75 65 73 5f lets.=.parse_facelets(md.values_
1ac20 61 74 28 36 2c 31 30 2c 31 34 29 29 0d 0a 20 20 20 20 40 62 61 63 6b 2e 66 61 63 65 6c 65 74 73 at(6,10,14))......@back.facelets
1ac40 20 3d 20 70 61 72 73 65 5f 66 61 63 65 6c 65 74 73 28 6d 64 2e 76 61 6c 75 65 73 5f 61 74 28 37 .=.parse_facelets(md.values_at(7
1ac60 2c 31 31 2c 31 35 29 29 0d 0a 20 20 20 20 40 62 6f 74 74 6f 6d 2e 66 61 63 65 6c 65 74 73 20 3d ,11,15))......@bottom.facelets.=
1ac80 20 70 61 72 73 65 5f 66 61 63 65 6c 65 74 73 28 6d 64 2e 76 61 6c 75 65 73 5f 61 74 28 31 36 2c .parse_facelets(md.values_at(16,
1aca0 31 37 2c 31 38 29 29 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 74 75 72 6e 28 73 69 64 17,18))....end......def.turn(sid
1acc0 65 2c 20 64 69 72 29 0d 0a 20 20 20 20 23 70 20 27 74 75 72 6e 20 25 64 20 69 6e 20 25 64 27 20 e,.dir)......#p.'turn.%d.in.%d'.
1ace0 25 20 5b 73 69 64 65 2c 20 64 69 72 5d 0d 0a 20 20 20 20 40 73 69 64 65 73 5b 73 69 64 65 5d 2e %.[side,.dir]......@sides[side].
1ad00 74 75 72 6e 28 64 69 72 29 0d 0a 20 20 20 20 23 70 75 74 73 20 69 6e 73 70 65 63 74 0d 0a 20 20 turn(dir)......#puts.inspect....
1ad20 65 6e 64 0d 0a 0d 0a 20 20 64 65 66 20 69 6e 73 70 65 63 74 0d 0a 20 20 20 20 3c 3c 2d 45 4f 46 end......def.inspect......<<-EOF
1ad40 2e 67 73 75 62 28 2f 28 5c 64 29 3a 28 5c 64 29 2d 28 5c 64 29 2f 29 20 7b 20 40 73 69 64 65 73 .gsub(/(\d):(\d)-(\d)/).{.@sides
1ad60 5b 24 31 2e 74 6f 5f 69 5d 2e 69 6e 73 70 65 63 74 28 52 61 6e 67 65 2e 6e 65 77 28 24 32 2e 74 [$1.to_i].inspect(Range.new($2.t
1ad80 6f 5f 69 2c 20 24 33 2e 74 6f 5f 69 29 29 20 7d 0d 0a 20 20 20 20 20 20 34 3a 30 2d 32 0d 0a 20 o_i,.$3.to_i)).}........4:0-2...
1ada0 20 20 20 20 20 34 3a 33 2d 35 0d 0a 20 20 20 20 20 20 34 3a 36 2d 38 0d 0a 30 3a 30 2d 32 20 31 .....4:3-5........4:6-8..0:0-2.1
1adc0 3a 30 2d 32 20 32 3a 30 2d 32 20 33 3a 30 2d 32 0d 0a 30 3a 33 2d 35 20 31 3a 33 2d 35 20 32 3a :0-2.2:0-2.3:0-2..0:3-5.1:3-5.2:
1ade0 33 2d 35 20 33 3a 33 2d 35 0d 0a 30 3a 36 2d 38 20 31 3a 36 2d 38 20 32 3a 36 2d 38 20 33 3a 36 3-5.3:3-5..0:6-8.1:6-8.2:6-8.3:6
1ae00 2d 38 0d 0a 20 20 20 20 20 20 35 3a 30 2d 32 0d 0a 20 20 20 20 20 20 35 3a 33 2d 35 0d 0a 20 20 -8........5:0-2........5:3-5....
1ae20 20 20 20 20 35 3a 36 2d 38 0d 0a 20 20 20 20 45 4f 46 0d 0a 20 20 65 6e 64 0d 0a 0d 0a 70 72 69 ....5:6-8......EOF....end....pri
1ae40 76 61 74 65 0d 0a 20 20 64 65 66 20 70 61 72 73 65 5f 66 61 63 65 6c 65 74 73 28 72 6f 77 73 29 vate....def.parse_facelets(rows)
1ae60 0d 0a 20 20 20 20 72 6f 77 73 2e 6a 6f 69 6e 2e 64 65 6c 65 74 65 28 27 20 27 29 2e 73 70 6c 69 ......rows.join.delete('.').spli
1ae80 74 28 2f 2f 29 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 24 73 74 64 69 6e 20 3d 20 44 t(//)....end..end....#$stdin.=.D
1aea0 41 54 41 0d 0a 0d 0a 67 65 74 73 2e 74 6f 5f 69 2e 74 69 6d 65 73 20 64 6f 20 7c 69 7c 0d 0a 20 ATA....gets.to_i.times.do.|i|...
1aec0 20 70 75 74 73 20 22 53 63 65 6e 61 72 69 6f 20 23 23 7b 69 2b 31 7d 3a 22 0d 0a 20 20 66 73 20 .puts."Scenario.##{i+1}:"....fs.
1aee0 3d 20 27 27 0d 0a 20 20 39 2e 74 69 6d 65 73 20 7b 20 66 73 20 3c 3c 20 67 65 74 73 20 7d 0d 0a =.''....9.times.{.fs.<<.gets.}..
1af00 20 20 63 75 62 65 20 3d 20 43 75 62 65 2e 6e 65 77 0d 0a 20 20 63 75 62 65 2e 72 65 61 64 5f 66 ..cube.=.Cube.new....cube.read_f
1af20 61 63 65 6c 65 74 73 20 66 73 0d 0a 20 20 67 65 74 73 2e 74 6f 5f 69 2e 74 69 6d 65 73 20 64 6f acelets.fs....gets.to_i.times.do
1af40 20 7c 74 7c 0d 0a 20 20 20 20 73 69 64 65 2c 20 64 69 72 20 3d 20 67 65 74 73 2e 73 70 6c 69 74 .|t|......side,.dir.=.gets.split
1af60 2e 6d 61 70 20 7b 7c 73 7c 20 73 2e 74 6f 5f 69 7d 0d 0a 20 20 20 20 63 75 62 65 2e 74 75 72 6e .map.{|s|.s.to_i}......cube.turn
1af80 28 73 69 64 65 2c 20 64 69 72 29 0d 0a 20 20 65 6e 64 0d 0a 20 20 70 75 74 73 20 63 75 62 65 2e (side,.dir)....end....puts.cube.
1afa0 69 6e 73 70 65 63 74 0d 0a 20 20 70 75 74 73 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 32 30 30 34 20 62 inspect....puts..end....#.2004.b
1afc0 79 20 6d 75 72 70 68 79 20 3c 6b 6f 72 6e 79 40 63 59 63 6e 75 73 2e 64 65 3e 0d 0a 23 20 47 50 y.murphy.<korny@cYcnus.de>..#.GP
1afe0 4c 0d 0a 63 6c 61 73 73 20 53 63 65 6e 61 72 69 6f 0d 0a 09 63 6c 61 73 73 20 54 69 6d 65 50 6f L..class.Scenario...class.TimePo
1b000 69 6e 74 0d 0a 09 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 64 61 74 61 0d 0a 09 09 64 65 66 20 int....attr_reader.:data....def.
1b020 69 6e 69 74 69 61 6c 69 7a 65 20 2a 64 61 74 61 0d 0a 09 09 09 40 64 61 74 61 20 3d 20 64 61 74 initialize.*data.....@data.=.dat
1b040 61 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 64 65 66 20 5b 5d 20 69 0d 0a 09 09 09 40 64 61 74 61 a....end......def.[].i.....@data
1b060 5b 69 5d 20 6f 72 20 30 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 69 6e 63 6c 75 64 65 20 43 6f 6d [i].or.0....end......include.Com
1b080 70 61 72 61 62 6c 65 0d 0a 09 09 64 65 66 20 3c 3d 3e 20 74 70 0d 0a 09 09 09 72 20 3d 20 30 0d parable....def.<=>.tp.....r.=.0.
1b0a0 0a 09 09 09 5b 40 64 61 74 61 2e 73 69 7a 65 2c 20 74 70 2e 64 61 74 61 2e 73 69 7a 65 5d 2e 6d ....[@data.size,.tp.data.size].m
1b0c0 61 78 2e 74 69 6d 65 73 20 64 6f 20 7c 69 7c 0d 0a 09 09 09 09 72 20 3d 20 73 65 6c 66 5b 69 5d ax.times.do.|i|......r.=.self[i]
1b0e0 20 3c 3d 3e 20 74 70 5b 69 5d 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 72 20 69 66 20 72 2e 6e 6f .<=>.tp[i]......return.r.if.r.no
1b100 6e 7a 65 72 6f 3f 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 09 30 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 nzero?.....end.....0....end.....
1b120 09 64 65 66 20 2d 20 74 70 0d 0a 09 09 09 72 20 3d 20 5b 5d 0d 0a 09 09 09 5b 40 64 61 74 61 2e .def.-.tp.....r.=.[].....[@data.
1b140 73 69 7a 65 2c 20 74 70 2e 64 61 74 61 2e 73 69 7a 65 5d 2e 6d 61 78 2e 74 69 6d 65 73 20 64 6f size,.tp.data.size].max.times.do
1b160 20 7c 69 7c 0d 0a 09 09 09 09 72 20 3c 3c 20 73 65 6c 66 5b 69 5d 20 2d 20 74 70 5b 69 5d 0d 0a .|i|......r.<<.self[i].-.tp[i]..
1b180 09 09 09 65 6e 64 0d 0a 09 09 09 72 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 64 65 66 20 69 6e 73 ...end.....r....end......def.ins
1b1a0 70 65 63 74 0d 0a 09 09 09 23 20 30 31 2f 30 31 2f 31 38 30 30 20 30 30 3a 30 30 3a 30 30 0d 0a pect.....#.01/01/1800.00:00:00..
1b1c0 09 09 09 27 25 30 32 64 2f 25 30 32 64 2f 25 30 34 64 20 25 30 32 64 3a 25 30 32 64 3a 25 30 32 ...'%02d/%02d/%04d.%02d:%02d:%02
1b1e0 64 27 20 25 20 40 64 61 74 61 2e 76 61 6c 75 65 73 5f 61 74 28 31 2c 20 32 2c 20 30 2c 20 33 2c d'.%.@data.values_at(1,.2,.0,.3,
1b200 20 34 2c 20 35 29 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 4f 4e 45 5f 48 4f 55 52 .4,.5)....end...end.....ONE_HOUR
1b220 20 3d 20 54 69 6d 65 50 6f 69 6e 74 2e 6e 65 77 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 30 2c 20 .=.TimePoint.new.0,.0,.0,.1,.0,.
1b240 30 0d 0a 0d 0a 09 41 50 50 4f 49 4e 54 4d 45 4e 54 5f 50 41 54 54 45 52 4e 20 3d 20 2f 0d 0a 09 0.....APPOINTMENT_PATTERN.=./...
1b260 09 28 20 5c 64 7b 34 7d 20 29 20 5c 73 20 28 20 5c 64 7b 32 7d 20 29 20 5c 73 20 28 20 5c 64 7b .(.\d{4}.).\s.(.\d{2}.).\s.(.\d{
1b280 32 7d 20 29 20 5c 73 20 28 20 5c 64 7b 32 7d 20 29 20 5c 73 20 28 20 5c 64 7b 32 7d 20 29 20 5c 2}.).\s.(.\d{2}.).\s.(.\d{2}.).\
1b2a0 73 20 28 20 5c 64 7b 32 7d 20 29 20 5c 73 0d 0a 09 09 28 20 5c 64 7b 34 7d 20 29 20 5c 73 20 28 s.(.\d{2}.).\s....(.\d{4}.).\s.(
1b2c0 20 5c 64 7b 32 7d 20 29 20 5c 73 20 28 20 5c 64 7b 32 7d 20 29 20 5c 73 20 28 20 5c 64 7b 32 7d .\d{2}.).\s.(.\d{2}.).\s.(.\d{2}
1b2e0 20 29 20 5c 73 20 28 20 5c 64 7b 32 7d 20 29 20 5c 73 20 28 20 5c 64 7b 32 7d 20 29 0d 0a 09 2f .).\s.(.\d{2}.).\s.(.\d{2}.).../
1b300 78 0d 0a 0d 0a 09 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 20 69 6f 0d 0a 09 09 40 74 65 61 6d x.....def.initialize.io....@team
1b320 5f 73 69 7a 65 20 3d 20 69 6f 2e 67 65 74 73 2e 74 6f 5f 69 0d 0a 09 09 40 64 61 74 61 20 3d 20 _size.=.io.gets.to_i....@data.=.
1b340 5b 20 5b 54 69 6d 65 50 6f 69 6e 74 2e 6e 65 77 28 31 38 30 30 2c 20 30 31 2c 20 30 31 2c 20 30 [.[TimePoint.new(1800,.01,.01,.0
1b360 30 2c 20 30 30 2c 20 30 30 29 2c 20 40 74 65 61 6d 5f 73 69 7a 65 5d 20 5d 0d 0a 09 09 40 74 65 0,.00,.00),.@team_size].]....@te
1b380 61 6d 5f 73 69 7a 65 2e 74 69 6d 65 73 20 64 6f 20 20 23 20 65 61 63 68 20 74 65 61 6d 20 6d 65 am_size.times.do..#.each.team.me
1b3a0 6d 62 65 72 0d 0a 09 09 09 69 6f 2e 67 65 74 73 2e 74 6f 5f 69 2e 74 69 6d 65 73 20 64 6f 20 20 mber.....io.gets.to_i.times.do..
1b3c0 23 20 65 61 63 68 20 61 70 70 6f 69 6e 74 6d 65 6e 74 0d 0a 09 09 09 09 6d 20 3d 20 41 50 50 4f #.each.appointment......m.=.APPO
1b3e0 49 4e 54 4d 45 4e 54 5f 50 41 54 54 45 52 4e 2e 6d 61 74 63 68 20 69 6f 2e 67 65 74 73 0d 0a 09 INTMENT_PATTERN.match.io.gets...
1b400 09 09 09 40 64 61 74 61 20 3c 3c 20 5b 54 69 6d 65 50 6f 69 6e 74 2e 6e 65 77 28 2a 6d 2e 63 61 ...@data.<<.[TimePoint.new(*m.ca
1b420 70 74 75 72 65 73 5b 30 2c 36 5d 2e 6d 61 70 20 7b 20 7c 78 7c 20 78 2e 74 6f 5f 69 20 7d 29 2c ptures[0,6].map.{.|x|.x.to_i.}),
1b440 20 2d 31 5d 0d 0a 09 09 09 09 40 64 61 74 61 20 3c 3c 20 5b 54 69 6d 65 50 6f 69 6e 74 2e 6e 65 .-1]......@data.<<.[TimePoint.ne
1b460 77 28 2a 6d 2e 63 61 70 74 75 72 65 73 5b 36 2c 36 5d 2e 6d 61 70 20 7b 20 7c 78 7c 20 78 2e 74 w(*m.captures[6,6].map.{.|x|.x.t
1b480 6f 5f 69 20 7d 29 2c 20 2b 31 5d 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 09 40 64 o_i.}),.+1].....end....end....@d
1b4a0 61 74 61 20 3c 3c 20 5b 54 69 6d 65 50 6f 69 6e 74 2e 6e 65 77 28 32 32 30 30 2c 20 30 31 2c 20 ata.<<.[TimePoint.new(2200,.01,.
1b4c0 30 31 2c 20 30 30 2c 20 30 30 2c 20 30 30 29 2c 20 2d 40 74 65 61 6d 5f 73 69 7a 65 5d 0d 0a 09 01,.00,.00,.00),.-@team_size]...
1b4e0 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 70 72 69 6e 74 5f 74 69 6d 65 5f 70 6c 61 6e 0d 0a 09 09 6e end.....def.print_time_plan....n
1b500 20 3d 20 30 0d 0a 09 09 61 70 70 6f 69 6e 74 6d 65 6e 74 20 3d 20 6e 69 6c 0d 0a 09 09 6e 6f 5f .=.0....appointment.=.nil....no_
1b520 61 70 70 6f 69 6e 74 6d 65 6e 74 20 3d 20 74 72 75 65 0d 0a 09 09 40 64 61 74 61 2e 73 6f 72 74 appointment.=.true....@data.sort
1b540 5f 62 79 20 7b 20 7c 78 7c 20 78 5b 30 5d 20 7d 2e 65 61 63 68 20 64 6f 20 7c 78 7c 0d 0a 09 09 _by.{.|x|.x[0].}.each.do.|x|....
1b560 09 74 70 2c 20 61 63 74 69 6f 6e 20 3d 20 2a 78 0d 0a 09 09 09 6e 20 2b 3d 20 61 63 74 69 6f 6e .tp,.action.=.*x.....n.+=.action
1b580 0d 0a 09 09 09 23 20 61 74 20 61 6e 79 20 74 69 6d 65 20 64 75 72 69 6e 67 20 74 68 65 20 6d 65 .....#.at.any.time.during.the.me
1b5a0 65 74 69 6e 67 2c 20 61 74 20 6c 65 61 73 74 20 74 77 6f 20 74 65 61 6d 20 6d 65 6d 62 65 72 73 eting,.at.least.two.team.members
1b5c0 20 6e 65 65 64 20 74 6f 20 62 65 20 74 68 65 72 65 0d 0a 09 09 09 23 20 61 6e 64 20 61 74 20 6d .need.to.be.there.....#.and.at.m
1b5e0 6f 73 74 20 6f 6e 65 20 74 65 61 6d 20 6d 65 6d 62 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 ost.one.team.member.is.allowed.t
1b600 6f 20 62 65 20 61 62 73 65 6e 74 0d 0a 09 09 09 69 66 20 6e 20 3e 3d 20 32 20 61 6e 64 20 28 40 o.be.absent.....if.n.>=.2.and.(@
1b620 74 65 61 6d 5f 73 69 7a 65 20 2d 20 6e 29 20 3c 3d 20 31 0d 0a 09 09 09 09 61 70 70 6f 69 6e 74 team_size.-.n).<=.1......appoint
1b640 6d 65 6e 74 20 7c 7c 3d 20 74 70 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 69 66 20 61 70 70 ment.||=.tp.....else......if.app
1b660 6f 69 6e 74 6d 65 6e 74 0d 0a 09 09 09 09 09 23 20 74 68 65 20 6d 65 65 74 69 6e 67 20 73 68 6f ointment.......#.the.meeting.sho
1b680 75 6c 64 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 68 6f 75 72 20 69 6e 20 6c 65 6e 67 uld.be.at.least.one.hour.in.leng
1b6a0 74 68 0d 0a 09 09 09 09 09 69 66 20 54 69 6d 65 50 6f 69 6e 74 2e 6e 65 77 28 2a 28 74 70 20 2d th.......if.TimePoint.new(*(tp.-
1b6c0 20 61 70 70 6f 69 6e 74 6d 65 6e 74 29 29 20 3e 3d 20 4f 4e 45 5f 48 4f 55 52 0d 0a 09 09 09 09 .appointment)).>=.ONE_HOUR......
1b6e0 09 09 70 75 74 73 20 27 61 70 70 6f 69 6e 74 6d 65 6e 74 20 70 6f 73 73 69 62 6c 65 20 66 72 6f ..puts.'appointment.possible.fro
1b700 6d 20 25 70 20 74 6f 20 25 70 27 20 25 20 5b 61 70 70 6f 69 6e 74 6d 65 6e 74 2c 20 74 70 5d 0d m.%p.to.%p'.%.[appointment,.tp].
1b720 0a 09 09 09 09 09 09 6e 6f 5f 61 70 70 6f 69 6e 74 6d 65 6e 74 20 3d 20 66 61 6c 73 65 0d 0a 09 .......no_appointment.=.false...
1b740 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 09 61 70 70 6f 69 6e 74 6d 65 6e 74 20 3d 20 66 61 6c 73 ....end.......appointment.=.fals
1b760 65 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 0d 0a 09 09 70 75 74 e......end.....end....end....put
1b780 73 20 27 6e 6f 20 61 70 70 6f 69 6e 74 6d 65 6e 74 20 70 6f 73 73 69 62 6c 65 27 20 69 66 20 6e s.'no.appointment.possible'.if.n
1b7a0 6f 5f 61 70 70 6f 69 6e 74 6d 65 6e 74 0d 0a 09 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 72 65 o_appointment...end..end....#.re
1b7c0 61 64 20 74 68 65 20 64 61 74 61 0d 0a 44 41 54 41 2e 67 65 74 73 2e 74 6f 5f 69 2e 74 69 6d 65 ad.the.data..DATA.gets.to_i.time
1b7e0 73 20 64 6f 20 7c 73 69 7c 20 23 20 65 61 63 68 20 73 63 65 6e 61 72 69 6f 0d 0a 09 70 75 74 73 s.do.|si|.#.each.scenario...puts
1b800 20 27 53 63 65 6e 61 72 69 6f 20 23 25 64 3a 27 20 25 20 28 73 69 20 2b 20 31 29 0d 0a 09 73 63 .'Scenario.#%d:'.%.(si.+.1)...sc
1b820 20 3d 20 53 63 65 6e 61 72 69 6f 2e 6e 65 77 20 44 41 54 41 0d 0a 09 73 63 2e 70 72 69 6e 74 5f .=.Scenario.new.DATA...sc.print_
1b840 74 69 6d 65 5f 70 6c 61 6e 0d 0a 09 70 75 74 73 0d 0a 65 6e 64 0d 0a 0d 0a 23 5f 5f 45 4e 44 5f time_plan...puts..end....#__END_
1b860 5f 0d 0a 32 0d 0a 33 0d 0a 33 0d 0a 32 30 30 32 20 30 36 20 32 38 20 31 35 20 30 30 20 30 30 20 _..2..3..3..2002.06.28.15.00.00.
1b880 32 30 30 32 20 30 36 20 32 38 20 31 38 20 30 30 20 30 30 20 54 55 44 20 43 6f 6e 74 65 73 74 20 2002.06.28.18.00.00.TUD.Contest.
1b8a0 50 72 61 63 74 69 63 65 20 53 65 73 73 69 6f 6e 0d 0a 32 30 30 32 20 30 36 20 32 39 20 31 30 20 Practice.Session..2002.06.29.10.
1b8c0 30 30 20 30 30 20 32 30 30 32 20 30 36 20 32 39 20 31 35 20 30 30 20 30 30 20 54 55 44 20 43 6f 00.00.2002.06.29.15.00.00.TUD.Co
1b8e0 6e 74 65 73 74 0d 0a 32 30 30 32 20 31 31 20 31 35 20 31 35 20 30 30 20 30 30 20 32 30 30 32 20 ntest..2002.11.15.15.00.00.2002.
1b900 31 31 20 31 37 20 32 33 20 30 30 20 30 30 20 4e 57 45 52 43 20 44 65 6c 66 74 0d 0a 34 0d 0a 32 11.17.23.00.00.NWERC.Delft..4..2
1b920 30 30 32 20 30 36 20 32 35 20 31 33 20 33 30 20 30 30 20 32 30 30 32 20 30 36 20 32 35 20 31 35 002.06.25.13.30.00.2002.06.25.15
1b940 20 33 30 20 30 30 20 46 49 46 41 20 57 6f 72 6c 64 20 43 75 70 20 53 65 6d 69 66 69 6e 61 6c 20 .30.00.FIFA.World.Cup.Semifinal.
1b960 49 0d 0a 32 30 30 32 20 30 36 20 32 36 20 31 33 20 33 30 20 30 30 20 32 30 30 32 20 30 36 20 32 I..2002.06.26.13.30.00.2002.06.2
1b980 36 20 31 35 20 33 30 20 30 30 20 46 49 46 41 20 57 6f 72 6c 64 20 43 75 70 20 53 65 6d 69 66 69 6.15.30.00.FIFA.World.Cup.Semifi
1b9a0 6e 61 6c 20 49 49 0d 0a 32 30 30 32 20 30 36 20 32 39 20 31 33 20 30 30 20 30 30 20 32 30 30 32 nal.II..2002.06.29.13.00.00.2002
1b9c0 20 30 36 20 32 39 20 31 35 20 30 30 20 30 30 20 46 49 46 41 20 57 6f 72 6c 64 20 43 75 70 20 54 .06.29.15.00.00.FIFA.World.Cup.T
1b9e0 68 69 72 64 20 50 6c 61 63 65 0d 0a 32 30 30 32 20 30 36 20 33 30 20 31 33 20 30 30 20 30 30 20 hird.Place..2002.06.30.13.00.00.
1ba00 32 30 30 32 20 30 36 20 33 30 20 31 35 20 30 30 20 30 30 20 46 49 46 41 20 57 6f 72 6c 64 20 43 2002.06.30.15.00.00.FIFA.World.C
1ba20 75 70 20 46 69 6e 61 6c 0d 0a 31 0d 0a 32 30 30 32 20 30 36 20 30 31 20 30 30 20 30 30 20 30 30 up.Final..1..2002.06.01.00.00.00
1ba40 20 32 30 30 32 20 30 36 20 32 39 20 31 38 20 30 30 20 30 30 20 50 72 65 70 61 72 61 74 69 6f 6e .2002.06.29.18.00.00.Preparation
1ba60 20 6f 66 20 50 72 6f 62 6c 65 6d 20 53 65 74 0d 0a 32 0d 0a 31 0d 0a 31 38 30 30 20 30 31 20 30 .of.Problem.Set..2..1..1800.01.0
1ba80 31 20 30 30 20 30 30 20 30 30 20 32 32 30 30 20 30 31 20 30 31 20 30 30 20 30 30 20 30 30 20 53 1.00.00.00.2200.01.01.00.00.00.S
1baa0 6f 6c 76 69 6e 67 20 50 72 6f 62 6c 65 6d 20 38 0d 0a 30 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 olving.Problem.8..0....require.'
1bac0 74 6f 6b 65 6e 5f 63 6f 6e 73 74 73 27 0d 0a 72 65 71 75 69 72 65 20 27 73 79 6d 62 6f 6c 27 0d token_consts'..require.'symbol'.
1bae0 0a 72 65 71 75 69 72 65 20 27 63 74 79 70 65 27 0d 0a 72 65 71 75 69 72 65 20 27 65 72 72 6f 72 .require.'ctype'..require.'error
1bb00 27 0d 0a 0d 0a 63 6c 61 73 73 20 46 69 78 6e 75 6d 0d 0a 09 23 20 54 72 65 61 74 20 63 68 61 72 '....class.Fixnum...#.Treat.char
1bb20 20 61 73 20 61 20 64 69 67 69 74 20 61 6e 64 20 72 65 74 75 72 6e 20 69 74 27 73 20 76 61 6c 75 .as.a.digit.and.return.it's.valu
1bb40 65 20 61 73 20 46 69 78 6e 75 6d 2e 0d 0a 09 23 20 52 65 74 75 72 6e 73 20 6e 6f 6e 73 65 6e 73 e.as.Fixnum....#.Returns.nonsens
1bb60 65 20 66 6f 72 20 6e 6f 6e 2d 64 69 67 69 74 73 2e 0d 0a 09 23 20 45 78 61 6d 70 6c 65 73 3a 0d e.for.non-digits....#.Examples:.
1bb80 0a 09 23 20 3c 63 6f 64 65 3e 0d 0a 09 23 20 52 55 42 59 5f 56 45 52 53 49 4f 4e 5b 30 5d 2e 64 ..#.<code>...#.RUBY_VERSION[0].d
1bba0 69 67 69 74 20 3d 3d 20 27 31 2e 38 2e 32 27 5b 30 5d 2e 64 69 67 69 74 20 3d 3d 20 31 0d 0a 09 igit.==.'1.8.2'[0].digit.==.1...
1bbc0 23 20 3c 2f 63 6f 64 65 3e 0d 0a 09 23 0d 0a 09 23 20 3c 63 6f 64 65 3e 0d 0a 09 23 20 3f 36 2e #.</code>...#...#.<code>...#.?6.
1bbe0 64 69 67 69 74 20 3d 3d 20 36 0d 0a 09 23 20 3c 2f 63 6f 64 65 3e 0d 0a 09 23 0d 0a 09 23 20 3c digit.==.6...#.</code>...#...#.<
1bc00 63 6f 64 65 3e 0d 0a 09 23 20 3f 41 2e 64 69 67 69 74 20 3d 3d 20 31 37 0d 0a 09 23 20 3c 2f 63 code>...#.?A.digit.==.17...#.</c
1bc20 6f 64 65 3e 0d 0a 09 64 65 66 20 64 69 67 69 74 0d 0a 09 09 73 65 6c 66 20 2d 20 3f 30 0d 0a 09 ode>...def.digit....self.-.?0...
1bc40 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 23 0d 0a 23 20 53 74 65 6c 6c 74 20 65 69 6e 65 6e 20 65 end..end....##..#.Stellt.einen.e
1bc60 69 6e 66 61 63 68 65 6e 20 53 63 61 6e 6e 65 72 20 66 fc 72 20 64 69 65 20 6c 65 78 69 6b 61 6c infachen.Scanner.f.r.die.lexikal
1bc80 69 73 63 68 65 20 41 6e 61 6c 79 73 65 20 64 65 72 20 53 70 72 61 63 68 65 20 50 61 73 2d 30 20 ische.Analyse.der.Sprache.Pas-0.
1bca0 64 61 72 2e 0d 0a 23 0d 0a 23 20 40 61 75 74 68 6f 72 20 41 6e 64 72 65 61 73 20 4b 75 6e 65 72 dar...#..#.@author.Andreas.Kuner
1bcc0 74 0d 0a 23 20 52 75 62 79 20 70 6f 72 74 20 62 79 20 6d 75 72 70 68 79 0d 0a 63 6c 61 73 73 20 t..#.Ruby.port.by.murphy..class.
1bce0 53 63 61 6e 6e 65 72 0d 0a 0d 0a 09 69 6e 63 6c 75 64 65 20 54 6f 6b 65 6e 43 6f 6e 73 74 73 0d Scanner.....include.TokenConsts.
1bd00 0a 0d 0a 09 61 74 74 72 5f 72 65 61 64 65 72 20 3a 6c 69 6e 65 2c 20 3a 70 6f 73 0d 0a 0d 0a 09 ....attr_reader.:line,.:pos.....
1bd20 23 20 54 6f 20 61 6c 6c 6f 77 20 53 63 61 6e 6e 65 72 2e 6e 65 77 20 77 69 74 68 6f 75 74 20 70 #.To.allow.Scanner.new.without.p
1bd40 61 72 61 6d 65 74 65 72 73 2e 0d 0a 09 44 55 4d 4d 59 5f 49 4e 50 55 54 20 3d 20 27 64 75 6d 6d arameters....DUMMY_INPUT.=.'dumm
1bd60 79 20 66 69 6c 65 27 0d 0a 09 64 65 66 20 44 55 4d 4d 59 5f 49 4e 50 55 54 2e 67 65 74 63 0d 0a y.file'...def.DUMMY_INPUT.getc..
1bd80 09 09 6e 69 6c 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 23 0d 0a 09 23 20 45 72 7a 65 75 67 74 20 65 ..nil...end.....##...#.Erzeugt.e
1bda0 69 6e 65 6e 20 53 63 61 6e 6e 65 72 2c 20 64 65 72 20 61 6c 73 20 45 69 6e 67 61 62 65 20 64 61 inen.Scanner,.der.als.Eingabe.da
1bdc0 73 20 fc 62 65 72 67 65 62 65 6e 65 20 49 4f 20 62 65 6e 75 74 7a 74 2e 0d 0a 09 64 65 66 20 69 s..bergebene.IO.benutzt....def.i
1bde0 6e 69 74 69 61 6c 69 7a 65 20 69 6e 70 75 74 20 3d 20 44 55 4d 4d 59 5f 49 4e 50 55 54 0d 0a 09 nitialize.input.=.DUMMY_INPUT...
1be00 09 40 6c 69 6e 65 20 3d 20 31 0d 0a 09 09 40 70 6f 73 20 3d 20 30 0d 0a 0d 0a 09 09 62 65 67 69 .@line.=.1....@pos.=.0......begi
1be20 6e 0d 0a 09 09 09 40 69 6e 70 75 74 20 3d 20 69 6e 70 75 74 0d 0a 09 09 09 40 6e 65 78 74 5f 63 n.....@input.=.input.....@next_c
1be40 68 61 72 20 3d 20 40 69 6e 70 75 74 2e 67 65 74 63 0d 0a 09 09 72 65 73 63 75 65 20 49 4f 45 72 har.=.@input.getc....rescue.IOEr
1be60 72 6f 72 20 20 23 20 54 4f 44 4f 20 73 68 6f 77 20 74 68 65 20 72 65 61 73 6f 6e 21 0d 0a 09 09 ror..#.TODO.show.the.reason!....
1be80 09 45 72 72 6f 72 2e 69 6f 45 72 72 6f 72 0d 0a 09 09 09 72 61 69 73 65 0d 0a 09 09 65 6e 64 0d .Error.ioError.....raise....end.
1bea0 0a 09 65 6e 64 0d 0a 0d 0a 09 23 23 0d 0a 09 23 20 4c 69 65 73 74 20 64 61 73 20 6e 00 63 68 73 ..end.....##...#.Liest.das.n.chs
1bec0 74 65 20 5a 65 69 63 68 65 6e 20 76 6f 6e 20 64 65 72 20 45 69 6e 67 61 62 65 2e 0d 0a 09 64 65 te.Zeichen.von.der.Eingabe....de
1bee0 66 20 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 62 65 67 69 6e 0d 0a 09 09 09 40 70 f.read_next_char....begin.....@p
1bf00 6f 73 20 2b 3d 20 31 0d 0a 09 09 09 40 63 75 72 72 65 6e 74 5f 63 68 61 72 20 3d 20 40 6e 65 78 os.+=.1.....@current_char.=.@nex
1bf20 74 5f 63 68 61 72 0d 0a 09 09 09 40 6e 65 78 74 5f 63 68 61 72 20 3d 20 40 69 6e 70 75 74 2e 67 t_char.....@next_char.=.@input.g
1bf40 65 74 63 0d 0a 09 09 72 65 73 63 75 65 20 49 4f 45 72 72 6f 72 0d 0a 09 09 09 45 72 72 6f 72 2e etc....rescue.IOError.....Error.
1bf60 69 6f 45 72 72 6f 72 0d 0a 09 09 09 72 61 69 73 65 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a ioError.....raise....end...end..
1bf80 0d 0a 09 23 23 0d 0a 09 23 20 53 75 63 68 74 20 64 61 73 20 6e e4 63 68 73 74 65 20 53 79 6d 62 ...##...#.Sucht.das.n.chste.Symb
1bfa0 6f 6c 2c 20 69 64 65 6e 74 69 66 69 7a 69 65 72 74 20 65 73 2c 20 69 6e 73 74 61 6e 74 69 69 65 ol,.identifiziert.es,.instantiie
1bfc0 72 74 20 65 69 6e 20 65 6e 74 73 70 72 65 63 68 65 6e 64 65 73 0d 0a 09 23 20 50 61 73 63 61 6c rt.ein.entsprechendes...#.Pascal
1bfe0 53 79 6d 62 6f 6c 2d 4f 62 6a 65 6b 74 20 75 6e 64 20 67 69 62 74 20 65 73 20 7a 75 72 fc 63 6b Symbol-Objekt.und.gibt.es.zur.ck
1c000 2e 0d 0a 09 23 20 40 73 65 65 20 53 79 6d 62 6f 6c 0d 0a 09 23 20 40 72 65 74 75 72 6e 20 64 61 ....#.@see.Symbol...#.@return.da
1c020 73 20 67 65 66 75 6e 64 65 6e 65 20 53 79 6d 62 6f 6c 20 61 6c 73 20 50 61 73 63 61 6c 53 79 6d s.gefundene.Symbol.als.PascalSym
1c040 62 6f 6c 2d 4f 62 6a 65 6b 74 0d 0a 09 64 65 66 20 67 65 74 5f 73 79 6d 62 6f 6c 0d 0a 09 09 63 bol-Objekt...def.get_symbol....c
1c060 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 6e 69 6c 0d 0a 09 09 75 6e 74 69 6c 20 63 75 72 urrent_symbol.=.nil....until.cur
1c080 72 65 6e 74 5f 73 79 6d 62 6f 6c 0d 0a 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a rent_symbol.....read_next_char..
1c0a0 0d 0a 09 09 09 69 66 20 40 63 75 72 72 65 6e 74 5f 63 68 61 72 2e 61 6c 70 68 61 3f 0d 0a 09 09 .....if.@current_char.alpha?....
1c0c0 09 09 69 64 65 6e 74 69 66 69 65 72 20 3d 20 40 63 75 72 72 65 6e 74 5f 63 68 61 72 2e 63 68 72 ..identifier.=.@current_char.chr
1c0e0 0d 0a 09 09 09 09 77 68 69 6c 65 20 40 6e 65 78 74 5f 63 68 61 72 2e 61 6c 70 68 61 3f 20 6f 72 ......while.@next_char.alpha?.or
1c100 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 67 69 74 3f 0d 0a 09 09 09 09 09 69 64 65 6e 74 69 66 .@next_char.digit?.......identif
1c120 69 65 72 20 3c 3c 20 40 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 09 09 09 72 65 61 64 5f 6e 65 78 ier.<<.@next_char.......read_nex
1c140 74 5f 63 68 61 72 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 09 63 75 72 72 65 6e 74 5f 73 79 6d t_char......end......current_sym
1c160 62 6f 6c 20 3d 20 68 61 6e 64 6c 65 5f 69 64 65 6e 74 69 66 69 65 72 28 69 64 65 6e 74 69 66 69 bol.=.handle_identifier(identifi
1c180 65 72 2e 75 70 63 61 73 65 29 0d 0a 09 09 09 65 6c 73 69 66 20 40 63 75 72 72 65 6e 74 5f 63 68 er.upcase).....elsif.@current_ch
1c1a0 61 72 2e 64 69 67 69 74 3f 0d 0a 09 09 09 09 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 ar.digit?......current_symbol.=.
1c1c0 6e 75 6d 62 65 72 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 63 61 73 65 20 40 63 75 72 72 65 number.....else......case.@curre
1c1e0 6e 74 5f 63 68 61 72 0d 0a 09 09 09 09 77 68 65 6e 20 3f 5c 73 0d 0a 09 09 09 09 09 23 20 69 67 nt_char......when.?\s.......#.ig
1c200 6e 6f 72 65 0d 0a 09 09 09 09 77 68 65 6e 20 3f 5c 6e 0d 0a 09 09 09 09 09 6e 65 77 5f 6c 69 6e nore......when.?\n.......new_lin
1c220 65 0d 0a 09 09 09 09 77 68 65 6e 20 6e 69 6c 0d 0a 09 09 09 09 09 63 75 72 72 65 6e 74 5f 73 79 e......when.nil.......current_sy
1c240 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 45 4f 50 0d 0a 09 09 09 mbol.=.PascalSymbol.new.EOP.....
1c260 09 77 68 65 6e 20 3f 7b 0d 0a 09 09 09 09 09 63 6f 6d 6d 65 6e 74 0d 0a 0d 0a 09 09 09 09 77 68 .when.?{.......comment........wh
1c280 65 6e 20 3f 3a 0d 0a 09 09 09 09 09 69 66 20 40 6e 65 78 74 5f 63 68 61 72 20 3d 3d 20 3f 3d 0d en.?:.......if.@next_char.==.?=.
1c2a0 0a 09 09 09 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 09 09 09 09 63 75 72 .......read_next_char........cur
1c2c0 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 42 rent_symbol.=.PascalSymbol.new.B
1c2e0 45 43 4f 4d 45 53 0d 0a 09 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 09 63 75 72 72 65 6e 74 ECOMES.......else........current
1c300 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 43 4f 4c 4f 4e _symbol.=.PascalSymbol.new.COLON
1c320 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 09 77 68 65 6e 20 3f 3c 0d 0a 09 09 09 09 09 .......end........when.?<.......
1c340 69 66 20 28 40 6e 65 78 74 5f 63 68 61 72 20 3d 3d 20 3f 3d 29 0d 0a 09 09 09 09 09 09 72 65 61 if.(@next_char.==.?=)........rea
1c360 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 09 09 09 09 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f d_next_char........current_symbo
1c380 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 4c 45 51 53 59 0d 0a 09 09 09 09 l.=.PascalSymbol.new.LEQSY......
1c3a0 09 65 6c 73 69 66 20 28 40 6e 65 78 74 5f 63 68 61 72 20 3d 3d 20 3f 3e 29 0d 0a 09 09 09 09 09 .elsif.(@next_char.==.?>).......
1c3c0 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 09 09 09 09 63 75 72 72 65 6e 74 5f 73 .read_next_char........current_s
1c3e0 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 4e 45 51 53 59 0d 0a ymbol.=.PascalSymbol.new.NEQSY..
1c400 09 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 09 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 .....else........current_symbol.
1c420 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 4c 53 53 53 59 0d 0a 09 09 09 09 09 65 =.PascalSymbol.new.LSSSY.......e
1c440 6e 64 0d 0a 0d 0a 09 09 09 09 77 68 65 6e 20 3f 3e 0d 0a 09 09 09 09 09 69 66 20 28 40 6e 65 78 nd........when.?>.......if.(@nex
1c460 74 5f 63 68 61 72 20 3d 3d 20 3f 3d 29 0d 0a 09 09 09 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 t_char.==.?=)........read_next_c
1c480 68 61 72 0d 0a 09 09 09 09 09 09 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 har........current_symbol.=.Pasc
1c4a0 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 47 45 51 53 59 0d 0a 09 09 09 09 09 65 6c 73 65 0d 0a 09 alSymbol.new.GEQSY.......else...
1c4c0 09 09 09 09 09 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 .....current_symbol.=.PascalSymb
1c4e0 6f 6c 2e 6e 65 77 20 47 52 54 53 59 0d 0a 09 09 09 09 09 65 6e 64 0d 0a 0d 0a 09 09 09 09 77 68 ol.new.GRTSY.......end........wh
1c500 65 6e 20 3f 2e 20 74 68 65 6e 20 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 en.?..then.current_symbol.=.Pasc
1c520 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 50 45 52 49 4f 44 0d 0a 09 09 09 09 77 68 65 6e 20 3f 28 alSymbol.new.PERIOD......when.?(
1c540 20 74 68 65 6e 20 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d .then.current_symbol.=.PascalSym
1c560 62 6f 6c 2e 6e 65 77 20 4c 50 41 52 45 4e 54 0d 0a 09 09 09 09 77 68 65 6e 20 3f 2c 20 74 68 65 bol.new.LPARENT......when.?,.the
1c580 6e 20 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e n.current_symbol.=.PascalSymbol.
1c5a0 6e 65 77 20 43 4f 4d 4d 41 0d 0a 09 09 09 09 77 68 65 6e 20 3f 2a 20 74 68 65 6e 20 63 75 72 72 new.COMMA......when.?*.then.curr
1c5c0 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 54 49 ent_symbol.=.PascalSymbol.new.TI
1c5e0 4d 45 53 0d 0a 09 09 09 09 77 68 65 6e 20 3f 2f 20 74 68 65 6e 20 63 75 72 72 65 6e 74 5f 73 79 MES......when.?/.then.current_sy
1c600 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 53 4c 41 53 48 0d 0a 09 mbol.=.PascalSymbol.new.SLASH...
1c620 09 09 09 77 68 65 6e 20 3f 2b 20 74 68 65 6e 20 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d ...when.?+.then.current_symbol.=
1c640 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 50 4c 55 53 0d 0a 09 09 09 09 77 68 65 6e .PascalSymbol.new.PLUS......when
1c660 20 3f 2d 20 74 68 65 6e 20 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c .?-.then.current_symbol.=.Pascal
1c680 53 79 6d 62 6f 6c 2e 6e 65 77 20 4d 49 4e 55 53 0d 0a 09 09 09 09 77 68 65 6e 20 3f 3d 20 74 68 Symbol.new.MINUS......when.?=.th
1c6a0 65 6e 20 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c en.current_symbol.=.PascalSymbol
1c6c0 2e 6e 65 77 20 45 51 4c 53 59 0d 0a 09 09 09 09 77 68 65 6e 20 3f 29 20 74 68 65 6e 20 63 75 72 .new.EQLSY......when.?).then.cur
1c6e0 72 65 6e 74 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 52 rent_symbol.=.PascalSymbol.new.R
1c700 50 41 52 45 4e 54 0d 0a 09 09 09 09 77 68 65 6e 20 3f 3b 20 74 68 65 6e 20 63 75 72 72 65 6e 74 PARENT......when.?;.then.current
1c720 5f 73 79 6d 62 6f 6c 20 3d 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 53 45 4d 49 43 _symbol.=.PascalSymbol.new.SEMIC
1c740 4f 4c 4f 4e 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 45 72 72 6f 72 2e 65 72 72 6f 72 OLON......else.......Error.error
1c760 28 31 30 30 2c 20 40 6c 69 6e 65 2c 20 40 70 6f 73 29 20 69 66 20 40 63 75 72 72 65 6e 74 5f 63 (100,.@line,.@pos).if.@current_c
1c780 68 61 72 20 3e 20 3f 5c 73 0d 0a 09 09 09 09 65 6e 64 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e har.>.?\s......end.....end....en
1c7a0 64 0d 0a 09 09 63 75 72 72 65 6e 74 5f 73 79 6d 62 6f 6c 0d 0a 09 65 6e 64 0d 0a 0d 0a 70 72 69 d....current_symbol...end....pri
1c7c0 76 61 74 65 0d 0a 09 23 23 0d 0a 09 23 20 56 65 72 73 75 63 68 74 2c 20 69 6e 20 64 65 6d 20 67 vate...##...#.Versucht,.in.dem.g
1c7e0 65 67 65 62 65 6e 65 6e 20 53 74 72 69 6e 67 20 65 69 6e 20 53 63 68 6c fc 73 73 65 6c 77 6f 72 egebenen.String.ein.Schl.sselwor
1c800 74 20 7a 75 20 65 72 6b 65 6e 6e 65 6e 2e 0d 0a 09 23 20 53 6f 6c 6c 74 65 20 64 61 62 65 69 20 t.zu.erkennen....#.Sollte.dabei.
1c820 65 69 6e 20 4b 65 79 77 6f 72 64 20 67 65 66 75 6e 64 65 6e 20 77 65 72 64 65 6e 2c 20 73 6f 20 ein.Keyword.gefunden.werden,.so.
1c840 67 69 62 74 20 65 72 20 65 69 6e 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2d 4f 62 6a 65 6b 74 20 gibt.er.ein.PascalSymbol-Objekt.
1c860 7a 75 72 fc 63 6b 2c 20 64 61 73 0d 0a 09 23 20 64 61 73 20 65 6e 74 73 70 72 65 63 68 65 6e 64 zur.ck,.das...#.das.entsprechend
1c880 65 20 4b 65 79 77 6f 72 64 20 72 65 70 72 e4 73 65 6e 74 69 65 72 74 2e 20 41 6e 73 6f 6e 73 74 e.Keyword.repr.sentiert..Ansonst
1c8a0 65 6e 20 62 65 73 74 65 68 74 20 64 69 65 20 52 fc 63 6b 67 61 62 65 20 61 75 73 0d 0a 09 23 20 en.besteht.die.R.ckgabe.aus...#.
1c8c0 65 69 6e 65 6d 20 53 79 6d 62 6f 6c 49 64 65 6e 74 2d 4f 62 6a 65 6b 74 20 28 61 62 67 65 6c 65 einem.SymbolIdent-Objekt.(abgele
1c8e0 69 74 65 74 20 76 6f 6e 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 29 2c 20 64 61 73 20 64 65 6e 20 itet.von.PascalSymbol),.das.den.
1c900 53 74 72 69 6e 67 20 31 3a 31 20 65 6e 74 68 e4 6c 74 0d 0a 09 23 20 40 73 65 65 20 73 79 6d 62 String.1:1.enth.lt...#.@see.symb
1c920 6f 6c 0d 0a 09 23 20 40 72 65 74 75 72 6e 20 66 61 6c 6c 73 20 4b 65 79 77 6f 72 64 20 67 65 66 ol...#.@return.falls.Keyword.gef
1c940 75 6e 64 65 6e 2c 20 7a 75 67 65 68 f6 72 69 67 65 73 20 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2c unden,.zugeh.riges.PascalSymbol,
1c960 20 73 6f 6e 73 74 20 53 79 6d 62 6f 6c 49 64 65 6e 74 0d 0a 09 64 65 66 20 68 61 6e 64 6c 65 5f .sonst.SymbolIdent...def.handle_
1c980 69 64 65 6e 74 69 66 69 65 72 20 69 64 65 6e 74 69 66 69 65 72 0d 0a 09 09 69 66 20 73 79 6d 20 identifier.identifier....if.sym.
1c9a0 3d 20 4b 45 59 57 4f 52 44 5f 53 59 4d 42 4f 4c 53 5b 69 64 65 6e 74 69 66 69 65 72 5d 0d 0a 09 =.KEYWORD_SYMBOLS[identifier]...
1c9c0 09 09 50 61 73 63 61 6c 53 79 6d 62 6f 6c 2e 6e 65 77 20 73 79 6d 0d 0a 09 09 65 6c 73 65 0d 0a ..PascalSymbol.new.sym....else..
1c9e0 09 09 09 53 79 6d 62 6f 6c 49 64 65 6e 74 2e 6e 65 77 20 69 64 65 6e 74 69 66 69 65 72 0d 0a 09 ...SymbolIdent.new.identifier...
1ca00 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 4d 41 58 49 4e 54 20 3d 20 32 2a 2a 33 31 20 2d 20 .end...end.....MAXINT.=.2**31.-.
1ca20 31 0d 0a 09 4d 41 58 49 4e 54 5f 44 49 56 5f 31 30 20 20 3d 20 4d 41 58 49 4e 54 20 2f 20 31 30 1...MAXINT_DIV_10..=.MAXINT./.10
1ca40 0d 0a 09 4d 41 58 49 4e 54 5f 4d 4f 44 5f 31 30 20 20 3d 20 4d 41 58 49 4e 54 20 25 20 31 30 0d ...MAXINT_MOD_10..=.MAXINT.%.10.
1ca60 0a 09 23 23 0d 0a 09 23 20 56 65 72 73 75 63 68 74 2c 20 61 75 73 20 64 65 6d 20 67 65 67 65 62 ..##...#.Versucht,.aus.dem.gegeb
1ca80 65 6e 65 6e 20 5a 65 69 63 68 65 6e 20 75 6e 64 20 64 65 6e 20 66 6f 6c 67 65 6e 64 65 6e 20 65 enen.Zeichen.und.den.folgenden.e
1caa0 69 6e 65 20 5a 61 68 6c 20 7a 75 73 61 6d 6d 65 6e 7a 75 73 65 74 7a 65 6e 2e 0d 0a 09 23 20 44 ine.Zahl.zusammenzusetzen....#.D
1cac0 61 62 65 69 20 77 69 72 64 20 64 65 72 20 72 65 6c 61 74 69 76 20 69 6e 74 75 69 74 69 76 65 20 abei.wird.der.relativ.intuitive.
1cae0 41 6c 67 6f 72 69 74 68 6d 75 73 20 62 65 6e 75 74 7a 74 2c 20 64 69 65 20 65 6e 64 67 fc 6c 74 Algorithmus.benutzt,.die.endg.lt
1cb00 69 67 65 20 5a 61 68 6c 20 62 65 69 0d 0a 09 23 20 6a 65 64 65 72 20 77 65 69 74 65 72 65 6e 20 ige.Zahl.bei...#.jeder.weiteren.
1cb20 5a 69 66 66 65 72 20 6d 69 74 20 31 30 20 7a 75 20 6d 75 6c 74 69 70 6c 69 7a 69 65 72 65 6e 20 Ziffer.mit.10.zu.multiplizieren.
1cb40 75 6e 64 20 64 69 65 73 65 20 64 61 6e 6e 20 6d 69 74 20 64 65 72 20 5a 69 66 66 65 72 20 7a 75 und.diese.dann.mit.der.Ziffer.zu
1cb60 0d 0a 09 23 20 61 64 64 69 65 72 65 6e 2e 20 53 6f 6e 64 65 72 66 e4 6c 6c 65 20 62 65 73 74 65 ...#.addieren..Sonderf.lle.beste
1cb80 68 65 6e 20 64 61 6e 6e 20 6e 75 72 20 6e 6f 63 68 20 69 6e 20 64 65 72 20 42 65 68 61 6e 64 6c hen.dann.nur.noch.in.der.Behandl
1cba0 75 6e 67 20 76 6f 6e 20 72 65 65 6c 6c 65 6e 20 5a 61 68 6c 65 6e 2e 0d 0a 09 23 20 3c 42 52 3e ung.von.reellen.Zahlen....#.<BR>
1cbc0 0d 0a 09 23 20 54 72 65 74 65 6e 20 64 61 62 65 69 20 6b 65 69 6e 20 50 75 6e 6b 74 20 6f 64 65 ...#.Treten.dabei.kein.Punkt.ode
1cbe0 72 20 65 69 6e 20 45 20 61 75 66 2c 20 73 6f 20 67 69 62 74 20 64 69 65 73 65 20 4d 65 74 68 6f r.ein.E.auf,.so.gibt.diese.Metho
1cc00 64 65 20 65 69 6e 20 53 79 6d 62 6f 6c 49 6e 74 43 6f 6e 2d 4f 62 6a 65 6b 74 0d 0a 09 23 20 7a de.ein.SymbolIntCon-Objekt...#.z
1cc20 75 72 fc 63 6b 2c 20 61 6e 73 6f 6e 73 74 65 6e 20 28 72 65 65 6c 6c 65 20 5a 61 68 6c 29 20 65 ur.ck,.ansonsten.(reelle.Zahl).e
1cc40 69 6e 20 53 79 6d 62 6f 6c 52 65 61 6c 43 6f 6e 2d 4f 62 6a 65 6b 74 2e 20 42 65 69 64 65 20 53 in.SymbolRealCon-Objekt..Beide.S
1cc60 79 6d 62 6f 6c 65 20 65 6e 74 68 61 6c 74 65 6e 0d 0a 09 23 20 6a 65 77 65 69 6c 73 20 64 69 65 ymbole.enthalten...#.jeweils.die
1cc80 20 5a 61 68 6c 77 65 72 74 65 2e 0d 0a 09 23 20 3c 42 52 3e 0d 0a 09 23 20 41 6e 6d 65 72 6b 75 .Zahlwerte....#.<BR>...#.Anmerku
1cca0 6e 67 3a 20 44 69 65 73 65 20 46 75 6e 6b 74 69 6f 6e 20 69 73 74 20 6d 69 74 20 48 69 6c 66 65 ng:.Diese.Funktion.ist.mit.Hilfe
1ccc0 20 64 65 72 20 4a 61 76 61 2f 52 75 62 79 2d 41 50 49 20 64 65 75 74 6c 69 63 68 20 6c 65 69 63 .der.Java/Ruby-API.deutlich.leic
1cce0 68 74 65 72 20 7a 75 20 72 65 61 6c 69 73 69 65 72 65 6e 2e 0d 0a 09 23 20 53 69 65 20 77 75 72 hter.zu.realisieren....#.Sie.wur
1cd00 64 65 20 64 65 6e 6e 6f 63 68 20 73 6f 20 69 6d 70 6c 65 6d 65 6e 74 69 65 72 74 2c 20 75 6d 20 de.dennoch.so.implementiert,.um.
1cd20 64 65 6e 20 41 6c 67 6f 72 69 74 68 6d 75 73 20 7a 75 20 64 65 6d 6f 6e 73 74 72 69 65 72 65 6e den.Algorithmus.zu.demonstrieren
1cd40 0d 0a 09 23 20 40 73 65 65 20 73 79 6d 62 6f 6c 0d 0a 09 23 20 40 72 65 74 75 72 6e 20 53 79 6d ...#.@see.symbol...#.@return.Sym
1cd60 62 6f 6c 49 6e 74 63 6f 6e 2d 20 6f 64 65 72 20 53 79 6d 62 6f 6c 52 65 61 6c 63 6f 6e 2d 4f 62 bolIntcon-.oder.SymbolRealcon-Ob
1cd80 6a 65 6b 74 2c 20 64 61 73 20 64 65 6e 20 5a 61 68 6c 77 65 72 74 20 65 6e 74 68 e4 6c 74 0d 0a jekt,.das.den.Zahlwert.enth.lt..
1cda0 09 64 65 66 20 6e 75 6d 62 65 72 0d 0a 09 09 69 73 5f 69 6e 74 65 67 65 72 20 3d 20 74 72 75 65 .def.number....is_integer.=.true
1cdc0 0d 0a 09 09 69 6e 74 65 67 65 72 5f 74 6f 6f 5f 6c 6f 6e 67 20 3d 20 66 61 6c 73 65 0d 0a 09 09 ....integer_too_long.=.false....
1cde0 65 78 70 6f 6e 65 6e 74 20 3d 20 30 0d 0a 09 09 65 78 70 5f 63 6f 75 6e 74 65 72 20 3d 20 2d 31 exponent.=.0....exp_counter.=.-1
1ce00 0d 0a 09 09 65 78 70 5f 73 69 67 6e 20 3d 20 31 0d 0a 0d 0a 09 09 69 6e 74 65 67 65 72 5f 6d 61 ....exp_sign.=.1......integer_ma
1ce20 6e 74 69 73 73 65 20 3d 20 40 63 75 72 72 65 6e 74 5f 63 68 61 72 2e 64 69 67 69 74 0d 0a 0d 0a ntisse.=.@current_char.digit....
1ce40 09 09 77 68 69 6c 65 20 28 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 67 69 74 3f 20 61 6e 64 20 69 ..while.(@next_char.digit?.and.i
1ce60 6e 74 65 67 65 72 5f 6d 61 6e 74 69 73 73 65 20 3c 20 4d 41 58 49 4e 54 5f 44 49 56 5f 31 30 29 nteger_mantisse.<.MAXINT_DIV_10)
1ce80 20 6f 72 0d 0a 09 09 20 28 69 6e 74 65 67 65 72 5f 6d 61 6e 74 69 73 73 65 20 3d 3d 20 4d 41 58 .or.....(integer_mantisse.==.MAX
1cea0 49 4e 54 5f 44 49 56 5f 31 30 20 61 6e 64 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 67 69 74 20 INT_DIV_10.and.@next_char.digit.
1cec0 3c 3d 20 4d 41 58 49 4e 54 5f 4d 4f 44 5f 31 30 29 0d 0a 09 09 09 69 6e 74 65 67 65 72 5f 6d 61 <=.MAXINT_MOD_10).....integer_ma
1cee0 6e 74 69 73 73 65 20 2a 3d 20 31 30 0d 0a 09 09 09 69 6e 74 65 67 65 72 5f 6d 61 6e 74 69 73 73 ntisse.*=.10.....integer_mantiss
1cf00 65 20 2b 3d 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 67 69 74 0d 0a 09 09 09 72 65 61 64 5f 6e e.+=.@next_char.digit.....read_n
1cf20 65 78 74 5f 63 68 61 72 0d 0a 09 09 65 6e 64 0d 0a 0d 0a 09 09 72 65 61 6c 5f 6d 61 6e 74 69 73 ext_char....end......real_mantis
1cf40 73 65 20 3d 20 69 6e 74 65 67 65 72 5f 6d 61 6e 74 69 73 73 65 0d 0a 0d 0a 09 09 77 68 69 6c 65 se.=.integer_mantisse......while
1cf60 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 67 69 74 3f 0d 0a 09 09 09 69 6e 74 65 67 65 72 5f 74 .@next_char.digit?.....integer_t
1cf80 6f 6f 5f 6c 6f 6e 67 20 3d 20 74 72 75 65 0d 0a 09 09 09 72 65 61 6c 5f 6d 61 6e 74 69 73 73 65 oo_long.=.true.....real_mantisse
1cfa0 20 2a 3d 20 31 30 0d 0a 09 09 09 72 65 61 6c 5f 6d 61 6e 74 69 73 73 65 20 2b 3d 20 40 6e 65 78 .*=.10.....real_mantisse.+=.@nex
1cfc0 74 5f 63 68 61 72 2e 64 69 67 69 74 0d 0a 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d t_char.digit.....read_next_char.
1cfe0 0a 09 09 65 6e 64 0d 0a 09 09 69 66 20 40 6e 65 78 74 5f 63 68 61 72 20 3d 3d 20 3f 2e 0d 0a 09 ...end....if.@next_char.==.?....
1d000 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 09 69 73 5f 69 6e 74 65 67 65 72 20 ..read_next_char.....is_integer.
1d020 3d 20 66 61 6c 73 65 0d 0a 09 09 09 75 6e 6c 65 73 73 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 =.false.....unless.@next_char.di
1d040 67 69 74 3f 0d 0a 09 09 09 09 45 72 72 6f 72 2e 65 72 72 6f 72 20 31 30 31 2c 20 40 6c 69 6e 65 git?......Error.error.101,.@line
1d060 2c 20 40 70 6f 73 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 09 77 68 69 6c 65 20 40 6e 65 78 74 5f 63 ,.@pos.....end.....while.@next_c
1d080 68 61 72 2e 64 69 67 69 74 3f 0d 0a 09 09 09 09 72 65 61 6c 5f 6d 61 6e 74 69 73 73 65 20 2b 3d har.digit?......real_mantisse.+=
1d0a0 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 67 69 74 20 2a 20 28 31 30 20 2a 2a 20 65 78 70 5f 63 .@next_char.digit.*.(10.**.exp_c
1d0c0 6f 75 6e 74 65 72 29 0d 0a 09 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 09 ounter)......read_next_char.....
1d0e0 09 65 78 70 5f 63 6f 75 6e 74 65 72 20 2d 3d 20 31 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 65 6e 64 .exp_counter.-=.1.....end....end
1d100 0d 0a 09 09 69 66 20 40 6e 65 78 74 5f 63 68 61 72 20 3d 3d 20 3f 45 0d 0a 09 09 09 69 73 5f 69 ....if.@next_char.==.?E.....is_i
1d120 6e 74 65 67 65 72 20 3d 20 66 61 6c 73 65 0d 0a 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 nteger.=.false.....read_next_cha
1d140 72 0d 0a 09 09 09 69 66 20 40 6e 65 78 74 5f 63 68 61 72 20 3d 3d 20 3f 2d 0d 0a 09 09 09 09 65 r.....if.@next_char.==.?-......e
1d160 78 70 5f 73 69 67 6e 20 3d 20 2d 31 0d 0a 09 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 xp_sign.=.-1......read_next_char
1d180 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 09 75 6e 6c 65 73 73 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 .....end.....unless.@next_char.d
1d1a0 69 67 69 74 3f 0d 0a 09 09 09 09 45 72 72 6f 72 2e 65 72 72 6f 72 20 31 30 31 2c 20 40 6c 69 6e igit?......Error.error.101,.@lin
1d1c0 65 2c 20 40 70 6f 73 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 09 77 68 69 6c 65 20 40 6e 65 78 74 5f e,.@pos.....end.....while.@next_
1d1e0 63 68 61 72 2e 64 69 67 69 74 3f 0d 0a 09 09 09 09 65 78 70 6f 6e 65 6e 74 20 2a 3d 20 31 30 0d char.digit?......exponent.*=.10.
1d200 0a 09 09 09 09 65 78 70 6f 6e 65 6e 74 20 2b 3d 20 40 6e 65 78 74 5f 63 68 61 72 2e 64 69 67 69 .....exponent.+=.@next_char.digi
1d220 74 0d 0a 09 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 72 0d 0a 09 09 09 65 6e 64 0d 0a 09 t......read_next_char.....end...
1d240 09 65 6e 64 0d 0a 0d 0a 09 09 69 66 20 69 73 5f 69 6e 74 65 67 65 72 0d 0a 09 09 09 69 66 20 69 .end......if.is_integer.....if.i
1d260 6e 74 65 67 65 72 5f 74 6f 6f 5f 6c 6f 6e 67 0d 0a 09 09 09 09 45 72 72 6f 72 2e 65 72 72 6f 72 nteger_too_long......Error.error
1d280 20 31 30 32 2c 20 40 6c 69 6e 65 2c 20 40 70 6f 73 0d 0a 09 09 09 65 6e 64 0d 0a 09 09 09 53 79 .102,.@line,.@pos.....end.....Sy
1d2a0 6d 62 6f 6c 49 6e 74 63 6f 6e 2e 6e 65 77 20 69 6e 74 65 67 65 72 5f 6d 61 6e 74 69 73 73 65 0d mbolIntcon.new.integer_mantisse.
1d2c0 0a 09 09 65 6c 73 65 0d 0a 09 09 09 53 79 6d 62 6f 6c 52 65 61 6c 63 6f 6e 2e 6e 65 77 20 72 65 ...else.....SymbolRealcon.new.re
1d2e0 61 6c 5f 6d 61 6e 74 69 73 73 65 20 2a 20 28 31 30 20 2a 2a 20 28 65 78 70 5f 73 69 67 6e 20 2a al_mantisse.*.(10.**.(exp_sign.*
1d300 20 65 78 70 6f 6e 65 6e 74 29 29 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 23 23 0d .exponent))....end...end.....##.
1d320 0a 09 23 20 53 6f 72 67 74 20 66 fc 72 20 65 69 6e 20 dc 62 65 72 6c 65 73 65 6e 20 76 6f 6e 20 ..#.Sorgt.f.r.ein..berlesen.von.
1d340 4b 6f 6d 6d 65 6e 74 61 72 65 6e 2e 0d 0a 09 23 20 45 73 20 77 65 72 64 65 6e 20 65 69 6e 66 61 Kommentaren....#.Es.werden.einfa
1d360 63 68 20 61 6c 6c 65 20 5a 65 69 63 68 65 6e 20 62 69 73 20 7a 75 20 65 69 6e 65 72 20 73 63 68 ch.alle.Zeichen.bis.zu.einer.sch
1d380 6c 69 65 df 65 6e 64 65 6e 20 4b 6c 61 6d 6d 65 72 20 65 69 6e 67 65 6c 65 73 65 6e 0d 0a 09 23 lie.enden.Klammer.eingelesen...#
1d3a0 20 75 6e 64 20 76 65 72 77 6f 72 66 65 6e 2e 0d 0a 09 64 65 66 20 63 6f 6d 6d 65 6e 74 0d 0a 09 .und.verworfen....def.comment...
1d3c0 09 77 68 69 6c 65 20 40 63 75 72 72 65 6e 74 5f 63 68 61 72 20 21 3d 20 3f 7d 0d 0a 09 09 09 66 .while.@current_char.!=.?}.....f
1d3e0 6f 72 62 69 64 5f 65 6f 70 0d 0a 09 09 09 6e 65 77 5f 6c 69 6e 65 20 69 66 20 40 63 75 72 72 65 orbid_eop.....new_line.if.@curre
1d400 6e 74 5f 63 68 61 72 20 3d 3d 20 3f 5c 6e 0d 0a 09 09 09 72 65 61 64 5f 6e 65 78 74 5f 63 68 61 nt_char.==.?\n.....read_next_cha
1d420 72 0d 0a 09 09 65 6e 64 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 6e 65 77 5f 6c 69 6e 65 0d r....end...end.....def.new_line.
1d440 0a 09 09 40 6c 69 6e 65 20 2b 3d 20 31 0d 0a 09 09 40 70 6f 73 20 3d 20 30 0d 0a 09 65 6e 64 0d ...@line.+=.1....@pos.=.0...end.
1d460 0a 0d 0a 09 64 65 66 20 66 6f 72 62 69 64 5f 65 6f 70 0d 0a 09 09 69 66 20 65 6f 70 3f 0d 0a 09 ....def.forbid_eop....if.eop?...
1d480 09 09 45 72 72 6f 72 2e 65 72 72 6f 72 20 31 30 33 2c 20 40 6c 69 6e 65 2c 20 40 70 6f 73 0d 0a ..Error.error.103,.@line,.@pos..
1d4a0 09 09 65 6e 64 0d 0a 09 09 65 78 69 74 0d 0a 09 65 6e 64 0d 0a 0d 0a 09 64 65 66 20 65 6f 70 3f ..end....exit...end.....def.eop?
1d4c0 0d 0a 09 09 40 63 75 72 72 65 6e 74 5f 63 68 61 72 2e 6e 69 6c 3f 0d 0a 09 65 6e 64 0d 0a 65 6e ....@current_char.nil?...end..en
1d4e0 64 0d 0a 0d 0a 23 23 0d 0a 23 20 4c e4 df 74 20 65 69 6e 20 54 65 73 74 70 72 6f 67 72 61 6d 6d d....##..#.L..t.ein.Testprogramm
1d500 20 61 62 6c 61 75 66 65 6e 2e 0d 0a 23 20 44 69 65 73 65 73 20 65 72 7a 65 75 67 74 20 73 69 63 .ablaufen...#.Dieses.erzeugt.sic
1d520 68 20 65 69 6e 20 53 63 61 6e 6e 65 72 2d 4f 62 6a 65 6b 74 20 75 6e 64 20 72 75 66 74 20 61 6e h.ein.Scanner-Objekt.und.ruft.an
1d540 20 64 69 65 73 65 6d 20 6b 6f 6e 74 69 6e 75 69 65 72 6c 69 63 68 20 62 69 73 20 7a 75 6d 20 44 .diesem.kontinuierlich.bis.zum.D
1d560 61 74 65 69 65 6e 64 65 0d 0a 23 20 67 65 74 5f 73 79 6d 62 6f 6c 20 61 75 66 2e 0d 0a 69 66 20 ateiende..#.get_symbol.auf...if.
1d580 24 30 20 3d 3d 20 5f 5f 46 49 4c 45 5f 5f 0d 0a 09 73 63 61 6e 20 3d 20 53 63 61 6e 6e 65 72 2e $0.==.__FILE__...scan.=.Scanner.
1d5a0 6e 65 77 28 46 69 6c 65 2e 6e 65 77 28 41 52 47 56 5b 30 5d 20 7c 7c 20 27 74 65 73 74 2e 70 61 new(File.new(ARGV[0].||.'test.pa
1d5c0 73 27 29 29 0d 0a 09 6c 6f 6f 70 20 64 6f 0d 0a 09 09 63 20 3d 20 73 63 61 6e 2e 67 65 74 5f 73 s'))...loop.do....c.=.scan.get_s
1d5e0 79 6d 62 6f 6c 0d 0a 09 09 70 75 74 73 20 63 0d 0a 09 09 62 72 65 61 6b 20 69 66 20 63 2e 74 79 ymbol....puts.c....break.if.c.ty
1d600 70 20 3d 3d 20 54 6f 6b 65 6e 43 6f 6e 73 74 73 3a 3a 45 4f 50 0d 0a 09 65 6e 64 0d 0a 65 6e 64 p.==.TokenConsts::EOP...end..end
1d620 0d 0a 23 20 2d 2a 2d 20 72 75 62 79 20 2d 2a 2d 0d 0a 0d 0a 23 20 4c 6f 63 61 6c 20 76 61 72 69 ..#.-*-.ruby.-*-....#.Local.vari
1d640 61 62 6c 65 73 3a 0d 0a 23 20 20 69 6e 64 65 6e 74 2d 74 61 62 73 2d 6d 6f 64 65 3a 20 6e 69 6c ables:..#..indent-tabs-mode:.nil
1d660 0d 0a 23 20 20 72 75 62 79 2d 69 6e 64 65 6e 74 2d 6c 65 76 65 6c 3a 20 34 0d 0a 23 20 45 6e 64 ..#..ruby-indent-level:.4..#.End
1d680 3a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 4e 41 4d 45 0d 0a 23 20 40 40 53 4b 49 50 40 :....#.@@PLEAC@@_NAME..#.@@SKIP@
1d6a0 40 20 52 75 62 79 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 57 45 42 0d 0a 23 20 40 40 53 @.Ruby....#.@@PLEAC@@_WEB..#.@@S
1d6c0 4b 49 50 40 40 20 68 74 74 70 3a 2f 2f 77 77 77 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 0d 0a KIP@@.http://www.ruby-lang.org..
1d6e0 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 30 0d 0a 73 74 72 69 6e 67 20 3d 20 27 5c ....#.@@PLEAC@@_1.0..string.=.'\
1d700 6e 27 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 77 6f 20 63 68 61 n'.....................#.two.cha
1d720 72 61 63 74 65 72 73 2c 20 5c 20 61 6e 64 20 61 6e 20 6e 0d 0a 73 74 72 69 6e 67 20 3d 20 27 4a racters,.\.and.an.n..string.=.'J
1d740 6f 6e 20 5c 27 4d 61 64 64 6f 67 5c 27 20 4f 72 77 61 6e 74 27 20 20 23 20 6c 69 74 65 72 61 6c on.\'Maddog\'.Orwant'..#.literal
1d760 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 0d 0a 0d 0a 73 74 72 69 6e 67 20 3d 20 22 5c 6e 22 20 .single.quotes....string.=."\n".
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 20 22 6e 65 77 6c 69 6e 65 ....................#.a."newline
1d7a0 22 20 63 68 61 72 61 63 74 65 72 0d 0a 73 74 72 69 6e 67 20 3d 20 22 4a 6f 6e 20 5c 22 4d 61 64 ".character..string.=."Jon.\"Mad
1d7c0 64 6f 67 5c 22 20 4f 72 77 61 6e 74 22 20 20 23 20 6c 69 74 65 72 61 6c 20 64 6f 75 62 6c 65 20 dog\".Orwant"..#.literal.double.
1d7e0 71 75 6f 74 65 73 0d 0a 0d 0a 73 74 72 69 6e 67 20 3d 20 25 71 2f 4a 6f 6e 20 27 4d 61 64 64 6f quotes....string.=.%q/Jon.'Maddo
1d800 67 27 20 4f 72 77 61 6e 74 2f 20 20 23 20 6c 69 74 65 72 61 6c 20 73 69 6e 67 6c 65 20 71 75 6f g'.Orwant/..#.literal.single.quo
1d820 74 65 73 0d 0a 0d 0a 73 74 72 69 6e 67 20 3d 20 25 71 5b 4a 6f 6e 20 27 4d 61 64 64 6f 67 27 20 tes....string.=.%q[Jon.'Maddog'.
1d840 4f 72 77 61 6e 74 5d 20 20 23 20 6c 69 74 65 72 61 6c 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 Orwant]..#.literal.single.quotes
1d860 0d 0a 73 74 72 69 6e 67 20 3d 20 25 71 7b 4a 6f 6e 20 27 4d 61 64 64 6f 67 27 20 4f 72 77 61 6e ..string.=.%q{Jon.'Maddog'.Orwan
1d880 74 7d 20 20 23 20 6c 69 74 65 72 61 6c 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 0d 0a 73 74 72 t}..#.literal.single.quotes..str
1d8a0 69 6e 67 20 3d 20 25 71 28 4a 6f 6e 20 27 4d 61 64 64 6f 67 27 20 4f 72 77 61 6e 74 29 20 20 23 ing.=.%q(Jon.'Maddog'.Orwant)..#
1d8c0 20 6c 69 74 65 72 61 6c 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 0d 0a 73 74 72 69 6e 67 20 3d .literal.single.quotes..string.=
1d8e0 20 25 71 3c 4a 6f 6e 20 27 4d 61 64 64 6f 67 27 20 4f 72 77 61 6e 74 3e 20 20 23 20 6c 69 74 65 .%q<Jon.'Maddog'.Orwant>..#.lite
1d900 72 61 6c 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 0d 0a 0d 0a 61 20 3d 20 3c 3c 22 45 4f 46 22 ral.single.quotes....a.=.<<"EOF"
1d920 0d 0a 54 68 69 73 20 69 73 20 61 20 6d 75 6c 74 69 6c 69 6e 65 20 68 65 72 65 20 64 6f 63 75 6d ..This.is.a.multiline.here.docum
1d940 65 6e 74 0d 0a 74 65 72 6d 69 6e 61 74 65 64 20 62 79 20 45 4f 46 20 6f 6e 20 61 20 6c 69 6e 65 ent..terminated.by.EOF.on.a.line
1d960 20 62 79 20 69 74 73 65 6c 66 0d 0a 45 4f 46 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 .by.itself..EOF......#.@@PLEAC@@
1d980 5f 31 2e 31 0d 0a 76 61 6c 75 65 20 3d 20 73 74 72 69 6e 67 5b 6f 66 66 73 65 74 2c 63 6f 75 6e _1.1..value.=.string[offset,coun
1d9a0 74 5d 0d 0a 76 61 6c 75 65 20 3d 20 73 74 72 69 6e 67 5b 6f 66 66 73 65 74 2e 2e 2d 31 5d 0d 0a t]..value.=.string[offset..-1]..
1d9c0 0d 0a 73 74 72 69 6e 67 5b 6f 66 66 73 65 74 2c 63 6f 75 6e 74 5d 20 3d 20 6e 65 77 73 74 72 69 ..string[offset,count].=.newstri
1d9e0 6e 67 0d 0a 73 74 72 69 6e 67 5b 6f 66 66 73 65 74 2e 2e 2d 31 5d 20 20 20 3d 20 6e 65 77 74 61 ng..string[offset..-1]...=.newta
1da00 69 6c 0d 0a 0d 0a 23 20 69 6e 20 52 75 62 79 20 77 65 20 63 61 6e 20 61 6c 73 6f 20 73 70 65 63 il....#.in.Ruby.we.can.also.spec
1da20 69 66 79 20 69 6e 74 65 72 76 61 6c 73 20 62 79 20 74 68 65 69 72 20 74 77 6f 20 6f 66 66 73 65 ify.intervals.by.their.two.offse
1da40 74 73 0d 0a 76 61 6c 75 65 20 3d 20 73 74 72 69 6e 67 5b 6f 66 66 73 65 74 2e 2e 6f 66 66 73 32 ts..value.=.string[offset..offs2
1da60 5d 0d 0a 73 74 72 69 6e 67 5b 6f 66 66 73 65 74 2e 2e 6f 66 66 73 32 5d 20 3d 20 6e 65 77 73 74 ]..string[offset..offs2].=.newst
1da80 72 69 6e 67 0d 0a 0d 0a 6c 65 61 64 69 6e 67 2c 20 73 31 2c 20 73 32 2c 20 74 72 61 69 6c 69 6e ring....leading,.s1,.s2,.trailin
1daa0 67 20 3d 20 64 61 74 61 2e 75 6e 70 61 63 6b 28 22 41 35 20 78 33 20 41 38 20 41 38 20 41 2a 22 g.=.data.unpack("A5.x3.A8.A8.A*"
1dac0 29 0d 0a 0d 0a 66 69 76 65 72 73 20 3d 20 73 74 72 69 6e 67 2e 75 6e 70 61 63 6b 28 22 41 35 22 )....fivers.=.string.unpack("A5"
1dae0 20 2a 20 28 73 74 72 69 6e 67 2e 6c 65 6e 67 74 68 2f 35 29 29 0d 0a 0d 0a 63 68 61 72 73 20 3d .*.(string.length/5))....chars.=
1db00 20 73 74 72 69 6e 67 2e 75 6e 70 61 63 6b 28 22 41 31 22 20 2a 20 73 74 72 69 6e 67 2e 6c 65 6e .string.unpack("A1".*.string.len
1db20 67 74 68 29 0d 0a 0d 0a 73 74 72 69 6e 67 20 3d 20 22 54 68 69 73 20 69 73 20 77 68 61 74 20 79 gth)....string.=."This.is.what.y
1db40 6f 75 20 68 61 76 65 22 0d 0a 23 20 20 20 20 20 20 20 20 2b 30 31 32 33 34 35 36 37 38 39 30 31 ou.have"..#........+012345678901
1db60 32 33 34 35 36 37 38 39 30 20 20 49 6e 64 65 78 69 6e 67 20 66 6f 72 77 61 72 64 73 20 20 28 6c 234567890..Indexing.forwards..(l
1db80 65 66 74 20 74 6f 20 72 69 67 68 74 29 0d 0a 23 20 20 20 20 20 20 20 20 20 31 30 39 38 37 36 35 eft.to.right)..#.........1098765
1dba0 34 33 32 31 30 39 38 37 36 35 34 33 32 31 2d 20 49 6e 64 65 78 69 6e 67 20 62 61 63 6b 77 61 72 43210987654321-.Indexing.backwar
1dbc0 64 73 20 28 72 69 67 68 74 20 74 6f 20 6c 65 66 74 29 0d 0a 23 20 20 20 20 20 20 20 20 20 20 6e ds.(right.to.left)..#..........n
1dbe0 6f 74 65 20 74 68 61 74 20 30 20 6d 65 61 6e 73 20 31 30 20 6f 72 20 32 30 2c 20 65 74 63 2e 20 ote.that.0.means.10.or.20,.etc..
1dc00 61 62 6f 76 65 0d 0a 0d 0a 66 69 72 73 74 20 20 3d 20 73 74 72 69 6e 67 5b 30 2c 20 31 5d 20 20 above....first..=.string[0,.1]..
1dc20 20 20 20 20 20 23 20 22 54 22 0d 0a 73 74 61 72 74 20 20 3d 20 73 74 72 69 6e 67 5b 35 2c 20 32 .....#."T"..start..=.string[5,.2
1dc40 5d 20 20 20 20 20 20 20 23 20 22 69 73 22 0d 0a 72 65 73 74 20 20 20 3d 20 73 74 72 69 6e 67 5b ].......#."is"..rest...=.string[
1dc60 31 33 2e 2e 2d 31 5d 20 20 20 20 20 23 20 22 79 6f 75 20 68 61 76 65 22 0d 0a 6c 61 73 74 20 20 13..-1].....#."you.have"..last..
1dc80 20 3d 20 73 74 72 69 6e 67 5b 2d 31 2c 20 31 5d 20 20 20 20 20 20 23 20 22 65 22 0d 0a 65 6e 64 .=.string[-1,.1]......#."e"..end
1dca0 5f 20 20 20 3d 20 73 74 72 69 6e 67 5b 2d 34 2e 2e 2d 31 5d 20 20 20 20 20 23 20 22 68 61 76 65 _...=.string[-4..-1].....#."have
1dcc0 22 0d 0a 70 69 65 63 65 20 20 3d 20 73 74 72 69 6e 67 5b 2d 38 2c 20 33 5d 20 20 20 20 20 20 23 "..piece..=.string[-8,.3]......#
1dce0 20 22 79 6f 75 22 0d 0a 0d 0a 73 74 72 69 6e 67 5b 35 2c 20 32 5d 20 3d 20 22 77 61 73 6e 27 74 ."you"....string[5,.2].=."wasn't
1dd00 22 20 20 20 20 20 23 20 63 68 61 6e 67 65 20 22 69 73 22 20 74 6f 20 22 77 61 73 6e 27 74 22 0d ".....#.change."is".to."wasn't".
1dd20 0a 73 74 72 69 6e 67 5b 2d 31 32 2e 2e 2d 31 5d 20 3d 20 22 6f 6e 64 72 6f 75 73 22 20 23 20 22 .string[-12..-1].=."ondrous".#."
1dd40 54 68 69 73 20 77 61 73 6e 27 74 20 77 6f 6e 64 72 6f 75 73 22 0d 0a 73 74 72 69 6e 67 5b 30 2c This.wasn't.wondrous"..string[0,
1dd60 20 31 5d 20 3d 20 22 22 20 20 20 20 20 20 20 20 20 20 20 23 20 64 65 6c 65 74 65 20 66 69 72 73 .1].=.""...........#.delete.firs
1dd80 74 20 63 68 61 72 61 63 74 65 72 0d 0a 73 74 72 69 6e 67 5b 2d 31 30 2e 2e 2d 31 5d 20 20 3d 20 t.character..string[-10..-1]..=.
1dda0 22 22 20 20 20 20 20 20 20 23 20 64 65 6c 65 74 65 20 6c 61 73 74 20 31 30 20 63 68 61 72 61 63 "".......#.delete.last.10.charac
1ddc0 74 65 72 73 0d 0a 0d 0a 69 66 20 73 74 72 69 6e 67 5b 2d 31 30 2e 2e 2d 31 5d 20 3d 7e 20 2f 70 ters....if.string[-10..-1].=~./p
1dde0 61 74 74 65 72 6e 2f 0d 0a 20 20 20 20 70 75 74 73 20 22 50 61 74 74 65 72 6e 20 6d 61 74 63 68 attern/......puts."Pattern.match
1de00 65 73 20 69 6e 20 6c 61 73 74 20 31 30 20 63 68 61 72 61 63 74 65 72 73 22 0d 0a 65 6e 64 0d 0a es.in.last.10.characters"..end..
1de20 0d 0a 73 74 72 69 6e 67 5b 30 2c 20 35 5d 2e 67 73 75 62 21 28 2f 69 73 2f 2c 20 27 61 74 27 29 ..string[0,.5].gsub!(/is/,.'at')
1de40 0d 0a 0d 0a 61 20 3d 20 22 6d 61 6b 65 20 61 20 68 61 74 22 0d 0a 61 5b 30 2c 20 31 5d 2c 20 61 ....a.=."make.a.hat"..a[0,.1],.a
1de60 5b 2d 31 2c 20 31 5d 20 3d 20 61 5b 2d 31 2c 20 31 5d 2c 20 61 5b 30 2c 20 31 5d 0d 0a 0d 0a 61 [-1,.1].=.a[-1,.1],.a[0,.1]....a
1de80 20 3d 20 22 54 6f 20 62 65 20 6f 72 20 6e 6f 74 20 74 6f 20 62 65 22 0d 0a 62 20 3d 20 61 2e 75 .=."To.be.or.not.to.be"..b.=.a.u
1dea0 6e 70 61 63 6b 28 22 78 36 20 41 36 22 29 0d 0a 0d 0a 62 2c 20 63 20 3d 20 61 2e 75 6e 70 61 63 npack("x6.A6")....b,.c.=.a.unpac
1dec0 6b 28 22 78 36 20 41 32 20 58 35 20 41 32 22 29 0d 0a 70 75 74 73 20 22 23 7b 62 7d 5c 6e 23 7b k("x6.A2.X5.A2")..puts."#{b}\n#{
1dee0 63 7d 5c 6e 22 0d 0a 0d 0a 64 65 66 20 63 75 74 32 66 6d 74 28 2a 61 72 67 73 29 0d 0a 20 20 20 c}\n"....def.cut2fmt(*args).....
1df00 20 74 65 6d 70 6c 61 74 65 20 3d 20 27 27 0d 0a 20 20 20 20 6c 61 73 74 70 6f 73 20 20 3d 20 31 .template.=.''......lastpos..=.1
1df20 0d 0a 20 20 20 20 66 6f 72 20 70 6c 61 63 65 20 69 6e 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 ......for.place.in.args.........
1df40 20 74 65 6d 70 6c 61 74 65 20 2b 3d 20 22 41 22 20 2b 20 28 70 6c 61 63 65 20 2d 20 6c 61 73 74 .template.+=."A".+.(place.-.last
1df60 70 6f 73 29 2e 74 6f 5f 73 20 2b 20 22 20 22 0d 0a 20 20 20 20 20 20 20 20 6c 61 73 74 70 6f 73 pos).to_s.+."."..........lastpos
1df80 20 20 20 3d 20 70 6c 61 63 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 74 65 6d 70 6c 61 74 ...=.place......end......templat
1dfa0 65 20 2b 3d 20 22 41 2a 22 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 74 65 6d 70 6c 61 74 65 0d 0a e.+=."A*"......return.template..
1dfc0 65 6e 64 0d 0a 0d 0a 66 6d 74 20 3d 20 63 75 74 32 66 6d 74 28 38 2c 20 31 34 2c 20 32 30 2c 20 end....fmt.=.cut2fmt(8,.14,.20,.
1dfe0 32 36 2c 20 33 30 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 32 0d 0a 23 20 26,.30)......#.@@PLEAC@@_1.2..#.
1e000 63 61 72 65 66 75 6c 21 20 22 62 20 69 73 20 74 72 75 65 22 20 64 6f 65 73 6e 27 74 20 6d 65 61 careful!."b.is.true".doesn't.mea
1e020 6e 20 22 62 20 21 3d 20 30 22 20 28 30 20 69 73 20 74 72 75 65 20 69 6e 20 52 75 62 79 29 0d 0a n."b.!=.0".(0.is.true.in.Ruby)..
1e040 23 20 74 68 75 73 20 6e 6f 20 70 72 6f 62 6c 65 6d 20 6f 66 20 22 64 65 66 69 6e 65 64 22 20 6c #.thus.no.problem.of."defined".l
1e060 61 74 65 72 20 73 69 6e 63 65 20 6f 6e 6c 79 20 6e 69 6c 20 69 73 20 66 61 6c 73 65 0d 0a 23 20 ater.since.only.nil.is.false..#.
1e080 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 73 20 74 6f 20 60 63 27 20 69 66 20 60 62 27 the.following.sets.to.`c'.if.`b'
1e0a0 20 69 73 20 6e 69 6c 20 6f 72 20 66 61 6c 73 65 0d 0a 61 20 3d 20 62 20 7c 7c 20 63 0d 0a 0d 0a .is.nil.or.false..a.=.b.||.c....
1e0c0 23 20 69 66 20 79 6f 75 20 6e 65 65 64 20 50 65 72 6c 27 73 20 62 65 68 61 76 69 6f 75 72 20 28 #.if.you.need.Perl's.behaviour.(
1e0e0 73 65 74 74 69 6e 67 20 74 6f 20 60 63 27 20 69 66 20 60 62 27 20 69 73 20 30 29 20 74 68 65 20 setting.to.`c'.if.`b'.is.0).the.
1e100 6d 6f 73 74 0d 0a 23 20 65 66 66 65 63 74 69 76 65 20 77 61 79 20 69 73 20 74 6f 20 75 73 65 20 most..#.effective.way.is.to.use.
1e120 4e 75 6d 65 72 69 63 23 6e 6f 6e 7a 65 72 6f 3f 20 28 74 68 61 6e 6b 73 20 74 6f 20 44 61 76 65 Numeric#nonzero?.(thanks.to.Dave
1e140 20 54 68 6f 6d 61 73 21 29 0d 0a 61 20 3d 20 62 2e 6e 6f 6e 7a 65 72 6f 3f 20 7c 7c 20 63 0d 0a .Thomas!)..a.=.b.nonzero?.||.c..
1e160 0d 0a 23 20 79 6f 75 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77 61 6e 74 20 74 6f 20 75 73 65 20 64 ..#.you.will.still.want.to.use.d
1e180 65 66 69 6e 65 64 3f 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 74 65 73 74 0d 0a 23 20 66 6f 72 20 efined?.in.order.to.test..#.for.
1e1a0 73 63 6f 70 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 61 20 67 69 76 65 6e 20 6f 62 6a 65 63 scope.existence.of.a.given.objec
1e1c0 74 0d 0a 61 20 3d 20 64 65 66 69 6e 65 64 3f 28 62 29 20 3f 20 62 20 3a 20 63 0d 0a 0d 0a 64 69 t..a.=.defined?(b).?.b.:.c....di
1e1e0 72 20 3d 20 41 52 47 56 2e 73 68 69 66 74 20 7c 7c 20 22 2f 74 6d 70 22 0d 0a 0d 0a 0d 0a 23 20 r.=.ARGV.shift.||."/tmp"......#.
1e200 40 40 50 4c 45 41 43 40 40 5f 31 2e 33 0d 0a 76 31 2c 20 76 32 20 3d 20 76 32 2c 20 76 31 0d 0a @@PLEAC@@_1.3..v1,.v2.=.v2,.v1..
1e220 0d 0a 61 6c 70 68 61 2c 20 62 65 74 61 2c 20 70 72 6f 64 75 63 74 69 6f 6e 20 3d 20 25 77 28 4a ..alpha,.beta,.production.=.%w(J
1e240 61 6e 75 61 72 79 20 4d 61 72 63 68 20 41 75 67 75 73 74 29 0d 0a 61 6c 70 68 61 2c 20 62 65 74 anuary.March.August)..alpha,.bet
1e260 61 2c 20 70 72 6f 64 75 63 74 69 6f 6e 20 3d 20 62 65 74 61 2c 20 70 72 6f 64 75 63 74 69 6f 6e a,.production.=.beta,.production
1e280 2c 20 61 6c 70 68 61 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 34 0d 0a 6e 75 ,.alpha......#.@@PLEAC@@_1.4..nu
1e2a0 6d 20 3d 20 63 68 61 72 5b 30 5d 0d 0a 63 68 61 72 20 3d 20 6e 75 6d 2e 63 68 72 0d 0a 0d 0a 23 m.=.char[0]..char.=.num.chr....#
1e2c0 20 52 75 62 79 20 61 6c 73 6f 20 73 75 70 70 6f 72 74 73 20 68 61 76 69 6e 67 20 61 20 63 68 61 .Ruby.also.supports.having.a.cha
1e2e0 72 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 63 6f 6e 73 74 61 6e 74 0d 0a 6e 75 6d 20 3d r.from.character.constant..num.=
1e300 20 3f 72 0d 0a 0d 0a 63 68 61 72 20 3d 20 73 70 72 69 6e 74 66 28 22 25 63 22 2c 20 6e 75 6d 29 .?r....char.=.sprintf("%c",.num)
1e320 0d 0a 70 72 69 6e 74 66 28 22 4e 75 6d 62 65 72 20 25 64 20 69 73 20 63 68 61 72 61 63 74 65 72 ..printf("Number.%d.is.character
1e340 20 25 63 5c 6e 22 2c 20 6e 75 6d 2c 20 6e 75 6d 29 0d 0a 0d 0a 61 73 63 69 69 20 3d 20 73 74 72 .%c\n",.num,.num)....ascii.=.str
1e360 69 6e 67 2e 75 6e 70 61 63 6b 28 22 43 2a 22 29 0d 0a 73 74 72 69 6e 67 20 3d 20 61 73 63 69 69 ing.unpack("C*")..string.=.ascii
1e380 2e 70 61 63 6b 28 22 43 2a 22 29 0d 0a 0d 0a 68 61 6c 20 3d 20 22 48 41 4c 22 0d 0a 61 73 63 69 .pack("C*")....hal.=."HAL"..asci
1e3a0 69 20 3d 20 68 61 6c 2e 75 6e 70 61 63 6b 28 22 43 2a 22 29 0d 0a 23 20 57 65 20 63 61 6e 27 74 i.=.hal.unpack("C*")..#.We.can't
1e3c0 20 75 73 65 20 41 72 72 61 79 23 65 61 63 68 20 73 69 6e 63 65 20 77 65 20 63 61 6e 27 74 20 6d .use.Array#each.since.we.can't.m
1e3e0 75 74 61 74 65 20 61 20 46 69 78 6e 75 6d 0d 0a 61 73 63 69 69 2e 63 6f 6c 6c 65 63 74 21 20 7b utate.a.Fixnum..ascii.collect!.{
1e400 20 7c 69 7c 0d 0a 20 20 20 20 69 20 2b 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .|i|......i.+.1.................
1e420 20 20 20 20 20 20 20 20 23 20 61 64 64 20 6f 6e 65 20 74 6f 20 65 61 63 68 20 41 53 43 49 49 20 ........#.add.one.to.each.ASCII.
1e440 76 61 6c 75 65 0d 0a 7d 0d 0a 69 62 6d 20 3d 20 61 73 63 69 69 2e 70 61 63 6b 28 22 43 2a 22 29 value..}..ibm.=.ascii.pack("C*")
1e460 0d 0a 70 75 74 73 20 69 62 6d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 35 0d ..puts.ibm......#.@@PLEAC@@_1.5.
1e480 0a 61 72 72 61 79 20 3d 20 73 74 72 69 6e 67 2e 73 70 6c 69 74 28 27 27 29 0d 0a 0d 0a 61 72 72 .array.=.string.split('')....arr
1e4a0 61 79 20 3d 20 73 74 72 69 6e 67 2e 75 6e 70 61 63 6b 28 22 43 2a 22 29 0d 0a 0d 0a 73 74 72 69 ay.=.string.unpack("C*")....stri
1e4c0 6e 67 2e 73 63 61 6e 28 2f 2e 2f 29 20 7b 20 7c 62 7c 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d ng.scan(/./).{.|b|......#.do.som
1e4e0 65 74 68 69 6e 67 20 77 69 74 68 20 62 0d 0a 7d 0d 0a 0d 0a 73 74 72 69 6e 67 20 3d 20 22 61 6e ething.with.b..}....string.=."an
1e500 20 61 70 70 6c 65 20 61 20 64 61 79 22 0d 0a 70 72 69 6e 74 20 22 75 6e 69 71 75 65 20 63 68 61 .apple.a.day"..print."unique.cha
1e520 72 73 20 61 72 65 3a 20 22 2c 20 73 74 72 69 6e 67 2e 73 70 6c 69 74 28 27 27 29 2e 75 6e 69 71 rs.are:.",.string.split('').uniq
1e540 2e 73 6f 72 74 2c 20 22 5c 6e 22 0d 0a 0d 0a 73 75 6d 20 3d 20 30 0d 0a 66 6f 72 20 61 73 63 76 .sort,."\n"....sum.=.0..for.ascv
1e560 61 6c 20 69 6e 20 73 74 72 69 6e 67 2e 75 6e 70 61 63 6b 28 22 43 2a 22 29 20 23 20 6f 72 20 75 al.in.string.unpack("C*").#.or.u
1e580 73 65 20 41 72 72 61 79 23 65 61 63 68 20 66 6f 72 20 61 20 70 75 72 65 20 4f 4f 20 73 74 79 6c se.Array#each.for.a.pure.OO.styl
1e5a0 65 20 3a 29 0d 0a 20 20 20 20 73 75 6d 20 2b 3d 20 61 73 63 76 61 6c 0d 0a 65 6e 64 0d 0a 70 75 e.:)......sum.+=.ascval..end..pu
1e5c0 74 73 20 22 73 75 6d 20 69 73 20 23 7b 73 75 6d 20 26 20 30 78 66 66 66 66 66 66 66 66 7d 22 20 ts."sum.is.#{sum.&.0xffffffff}".
1e5e0 23 20 73 69 6e 63 65 20 52 75 62 79 20 77 69 6c 6c 20 67 6f 20 42 69 67 6e 75 6d 20 69 66 20 6e #.since.Ruby.will.go.Bignum.if.n
1e600 65 63 65 73 73 61 72 79 0d 0a 0d 0a 23 20 40 40 49 4e 43 4c 55 44 45 40 40 20 69 6e 63 6c 75 64 ecessary....#.@@INCLUDE@@.includ
1e620 65 2f 72 75 62 79 2f 73 6c 6f 77 63 61 74 2e 72 62 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 e/ruby/slowcat.rb......#.@@PLEAC
1e640 40 40 5f 31 2e 36 0d 0a 72 65 76 62 79 74 65 73 20 3d 20 73 74 72 69 6e 67 2e 72 65 76 65 72 73 @@_1.6..revbytes.=.string.revers
1e660 65 0d 0a 0d 0a 72 65 76 77 6f 72 64 73 20 3d 20 73 74 72 69 6e 67 2e 73 70 6c 69 74 28 22 20 22 e....revwords.=.string.split("."
1e680 29 2e 72 65 76 65 72 73 65 2e 6a 6f 69 6e 28 22 20 22 29 0d 0a 0d 0a 72 65 76 77 6f 72 64 73 20 ).reverse.join(".")....revwords.
1e6a0 3d 20 73 74 72 69 6e 67 2e 73 70 6c 69 74 28 2f 28 5c 73 2b 29 2f 29 2e 72 65 76 65 72 73 65 2e =.string.split(/(\s+)/).reverse.
1e6c0 6a 6f 69 6e 0d 0a 0d 0a 23 20 75 73 69 6e 67 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 49 4f join....#.using.the.fact.that.IO
1e6e0 20 69 73 20 45 6e 75 6d 65 72 61 62 6c 65 2c 20 79 6f 75 20 63 61 6e 20 64 69 72 65 63 74 6c 79 .is.Enumerable,.you.can.directly
1e700 20 22 73 65 6c 65 63 74 22 20 69 74 0d 0a 6c 6f 6e 67 5f 70 61 6c 69 6e 64 72 6f 6d 65 73 20 3d ."select".it..long_palindromes.=
1e720 20 46 69 6c 65 2e 6f 70 65 6e 28 22 2f 75 73 72 2f 73 68 61 72 65 2f 64 69 63 74 2f 77 6f 72 64 .File.open("/usr/share/dict/word
1e740 73 22 29 2e 0d 0a 20 20 20 20 73 65 6c 65 63 74 20 7b 20 7c 77 7c 20 77 2e 63 68 6f 6d 70 21 3b s").......select.{.|w|.w.chomp!;
1e760 20 77 2e 72 65 76 65 72 73 65 20 3d 3d 20 77 20 26 26 20 77 2e 6c 65 6e 67 74 68 20 3e 20 35 20 .w.reverse.==.w.&&.w.length.>.5.
1e780 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 37 0d 0a 77 68 69 6c 65 20 73 74 }......#.@@PLEAC@@_1.7..while.st
1e7a0 72 69 6e 67 2e 73 75 62 21 28 22 5c 74 2b 22 29 20 7b 20 27 20 27 20 2a 20 28 24 26 2e 6c 65 6e ring.sub!("\t+").{.'.'.*.($&.len
1e7c0 67 74 68 20 2a 20 38 20 2d 20 24 60 2e 6c 65 6e 67 74 68 20 25 20 38 29 20 7d 0d 0a 65 6e 64 0d gth.*.8.-.$`.length.%.8).}..end.
1e7e0 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 38 0d 0a 27 59 6f 75 20 6f 77 65 20 23 .....#.@@PLEAC@@_1.8..'You.owe.#
1e800 7b 64 65 62 74 7d 20 74 6f 20 6d 65 27 2e 67 73 75 62 28 2f 5c 23 7b 28 5c 77 2b 29 7d 2f 29 20 {debt}.to.me'.gsub(/\#{(\w+)}/).
1e820 7b 20 65 76 61 6c 28 24 31 29 20 7d 0d 0a 0d 0a 72 6f 77 73 2c 20 63 6f 6c 73 20 3d 20 32 34 2c {.eval($1).}....rows,.cols.=.24,
1e840 20 38 30 0d 0a 74 65 78 74 20 3d 20 25 71 28 49 20 61 6d 20 23 7b 72 6f 77 73 7d 20 68 69 67 68 .80..text.=.%q(I.am.#{rows}.high
1e860 20 61 6e 64 20 23 7b 63 6f 6c 73 7d 20 6c 6f 6e 67 29 0d 0a 74 65 78 74 2e 67 73 75 62 21 28 2f .and.#{cols}.long)..text.gsub!(/
1e880 5c 23 7b 28 5c 77 2b 29 7d 2f 29 20 7b 20 65 76 61 6c 28 22 23 7b 24 31 7d 22 29 20 7d 0d 0a 70 \#{(\w+)}/).{.eval("#{$1}").}..p
1e8a0 75 74 73 20 74 65 78 74 0d 0a 0d 0a 27 49 20 61 6d 20 31 37 20 79 65 61 72 73 20 6f 6c 64 27 2e uts.text....'I.am.17.years.old'.
1e8c0 67 73 75 62 28 2f 5c 64 2b 2f 29 20 7b 20 32 20 2a 20 24 26 2e 74 6f 5f 69 20 7d 0d 0a 0d 0a 0d gsub(/\d+/).{.2.*.$&.to_i.}.....
1e8e0 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 39 0d 0a 65 20 3d 20 22 62 6f 20 70 65 65 70 22 2e .#.@@PLEAC@@_1.9..e.=."bo.peep".
1e900 75 70 63 61 73 65 0d 0a 65 2e 64 6f 77 6e 63 61 73 65 21 0d 0a 65 2e 63 61 70 69 74 61 6c 69 7a upcase..e.downcase!..e.capitaliz
1e920 65 21 0d 0a 0d 0a 22 74 68 49 53 20 69 73 20 61 20 6c 6f 4e 47 20 6c 69 4e 45 22 2e 67 73 75 62 e!...."thIS.is.a.loNG.liNE".gsub
1e940 21 28 2f 5c 77 2b 2f 29 20 7b 20 24 26 2e 63 61 70 69 74 61 6c 69 7a 65 20 7d 0d 0a 0d 0a 0d 0a !(/\w+/).{.$&.capitalize.}......
1e960 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 31 30 0d 0a 22 49 20 68 61 76 65 20 23 7b 6e 2b 31 7d #.@@PLEAC@@_1.10.."I.have.#{n+1}
1e980 20 67 75 61 6e 61 63 6f 73 2e 22 0d 0a 70 72 69 6e 74 20 22 49 20 68 61 76 65 20 22 2c 20 6e 2b .guanacos."..print."I.have.",.n+
1e9a0 31 2c 20 22 20 67 75 61 6e 61 63 6f 73 2e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 1,.".guanacos."......#.@@PLEAC@@
1e9c0 5f 31 2e 31 31 0d 0a 76 61 72 20 3d 20 3c 3c 27 45 4f 46 27 2e 67 73 75 62 28 2f 5e 5c 73 2b 2f _1.11..var.=.<<'EOF'.gsub(/^\s+/
1e9e0 2c 20 27 27 29 0d 0a 20 20 20 20 79 6f 75 72 20 74 65 78 74 0d 0a 20 20 20 20 67 6f 65 73 20 68 ,.'')......your.text......goes.h
1ea00 65 72 65 0d 0a 45 4f 46 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 31 32 0d 0a ere..EOF......#.@@PLEAC@@_1.12..
1ea20 73 74 72 69 6e 67 20 3d 20 22 46 6f 6c 64 69 6e 67 20 61 6e 64 20 73 70 6c 69 63 69 6e 67 20 69 string.=."Folding.and.splicing.i
1ea40 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 61 6e 20 65 64 69 74 6f 72 2c 5c 6e 22 2b 0d 0a 20 20 s.the.work.of.an.editor,\n"+....
1ea60 20 20 22 6e 6f 74 20 61 20 6d 65 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 73 69 6c 69 .."not.a.mere.collection.of.sili
1ea80 63 6f 6e 5c 6e 22 2b 0d 0a 20 20 20 20 22 61 6e 64 5c 6e 22 2b 0d 0a 20 20 20 20 22 6d 6f 62 69 con\n"+......"and\n"+......"mobi
1eaa0 6c 65 20 65 6c 65 63 74 72 6f 6e 73 21 22 0d 0a 0d 0a 64 65 66 20 77 72 61 70 28 73 74 72 2c 20 le.electrons!"....def.wrap(str,.
1eac0 6d 61 78 5f 73 69 7a 65 29 0d 0a 20 20 20 20 61 6c 6c 20 3d 20 5b 5d 0d 0a 20 20 20 20 6c 69 6e max_size)......all.=.[]......lin
1eae0 65 20 3d 20 27 27 0d 0a 20 20 20 20 66 6f 72 20 6c 20 69 6e 20 73 74 72 2e 73 70 6c 69 74 0d 0a e.=.''......for.l.in.str.split..
1eb00 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 6e 65 2b 6c 29 2e 6c 65 6e 67 74 68 20 3e 3d 20 6d 61 ........if.(line+l).length.>=.ma
1eb20 78 5f 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 6c 2e 70 75 73 68 28 6c 69 6e x_size..............all.push(lin
1eb40 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65 20 3d 20 27 27 0d 0a 20 20 20 20 20 e)..............line.=.''.......
1eb60 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 6c 69 6e 65 20 2b 3d 20 6c 69 6e 65 20 3d 3d 20 ...end..........line.+=.line.==.
1eb80 27 27 20 3f 20 6c 20 3a 20 27 20 27 20 2b 20 6c 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 61 ''.?.l.:.'.'.+.l......end......a
1eba0 6c 6c 2e 70 75 73 68 28 6c 69 6e 65 29 2e 6a 6f 69 6e 28 22 5c 6e 22 29 0d 0a 65 6e 64 0d 0a 0d ll.push(line).join("\n")..end...
1ebc0 0a 70 72 69 6e 74 20 77 72 61 70 28 73 74 72 69 6e 67 2c 20 32 30 29 0d 0a 23 3d 3e 20 46 6f 6c .print.wrap(string,.20)..#=>.Fol
1ebe0 64 69 6e 67 20 61 6e 64 0d 0a 23 3d 3e 20 73 70 6c 69 63 69 6e 67 20 69 73 20 74 68 65 0d 0a 23 ding.and..#=>.splicing.is.the..#
1ec00 3d 3e 20 77 6f 72 6b 20 6f 66 20 61 6e 20 65 64 69 74 6f 72 2c 0d 0a 23 3d 3e 20 6e 6f 74 20 61 =>.work.of.an.editor,..#=>.not.a
1ec20 20 6d 65 72 65 0d 0a 23 3d 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 0d 0a 23 3d 3e 20 73 69 .mere..#=>.collection.of..#=>.si
1ec40 6c 69 63 6f 6e 20 61 6e 64 20 6d 6f 62 69 6c 65 0d 0a 23 3d 3e 20 65 6c 65 63 74 72 6f 6e 73 21 licon.and.mobile..#=>.electrons!
1ec60 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 31 33 0d 0a 73 74 72 69 6e 67 20 3d ......#.@@PLEAC@@_1.13..string.=
1ec80 20 25 71 28 4d 6f 6d 20 73 61 69 64 2c 20 22 44 6f 6e 27 74 20 64 6f 20 74 68 61 74 2e 22 29 0d .%q(Mom.said,."Don't.do.that.").
1eca0 0a 73 74 72 69 6e 67 2e 67 73 75 62 28 2f 5b 27 22 5d 2f 29 20 7b 20 27 5c 5c 27 2b 24 26 20 7d .string.gsub(/['"]/).{.'\\'+$&.}
1ecc0 0d 0a 73 74 72 69 6e 67 2e 67 73 75 62 28 2f 5b 27 22 5d 2f 2c 20 27 5c 26 5c 26 27 29 0d 0a 73 ..string.gsub(/['"]/,.'\&\&')..s
1ece0 74 72 69 6e 67 2e 67 73 75 62 28 2f 5b 5e 41 2d 5a 5d 2f 29 20 7b 20 27 5c 5c 27 2b 24 26 20 7d tring.gsub(/[^A-Z]/).{.'\\'+$&.}
1ed00 0d 0a 22 69 73 20 61 20 74 65 73 74 21 22 2e 67 73 75 62 28 2f 5c 57 2f 29 20 7b 20 27 5c 5c 27 .."is.a.test!".gsub(/\W/).{.'\\'
1ed20 2b 24 26 20 7d 20 20 23 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 20 71 75 6f 74 65 6d +$&.}..#.no.function.like.quotem
1ed40 65 74 61 3f 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 31 34 0d 0a 73 74 72 69 eta?......#.@@PLEAC@@_1.14..stri
1ed60 6e 67 2e 73 74 72 69 70 21 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 31 35 0d ng.strip!......#.@@PLEAC@@_1.15.
1ed80 0a 64 65 66 20 70 61 72 73 65 5f 63 73 76 28 74 65 78 74 29 0d 0a 20 20 20 20 6e 65 77 20 3d 20 .def.parse_csv(text)......new.=.
1eda0 74 65 78 74 2e 73 63 61 6e 28 2f 22 28 5b 5e 5c 22 5c 5c 5d 2a 28 3f 3a 5c 5c 2e 5b 5e 5c 22 5c text.scan(/"([^\"\\]*(?:\\.[^\"\
1edc0 5c 5d 2a 29 2a 29 22 2c 3f 7c 28 5b 5e 2c 5d 2b 29 2c 3f 7c 2c 2f 29 0d 0a 20 20 20 20 6e 65 77 \]*)*)",?|([^,]+),?|,/)......new
1ede0 20 3c 3c 20 6e 69 6c 20 69 66 20 74 65 78 74 5b 2d 31 5d 20 3d 3d 20 3f 2c 0d 0a 20 20 20 20 6e .<<.nil.if.text[-1].==.?,......n
1ee00 65 77 2e 66 6c 61 74 74 65 6e 2e 63 6f 6d 70 61 63 74 0d 0a 65 6e 64 0d 0a 0d 0a 6c 69 6e 65 20 ew.flatten.compact..end....line.
1ee20 3d 20 25 71 3c 58 59 5a 5a 59 2c 22 22 2c 22 4f 27 52 65 69 6c 6c 79 2c 20 49 6e 63 22 2c 22 57 =.%q<XYZZY,"","O'Reilly,.Inc","W
1ee40 61 6c 6c 2c 20 4c 61 72 72 79 22 2c 22 61 20 5c 22 67 6c 75 67 5c 22 20 62 69 74 2c 22 2c 35 2c all,.Larry","a.\"glug\".bit,",5,
1ee60 22 45 72 72 6f 72 2c 20 43 6f 72 65 20 44 75 6d 70 65 64 22 3e 0d 0a 66 69 65 6c 64 73 20 3d 20 "Error,.Core.Dumped">..fields.=.
1ee80 70 61 72 73 65 5f 63 73 76 28 6c 69 6e 65 29 0d 0a 66 69 65 6c 64 73 2e 65 61 63 68 5f 77 69 74 parse_csv(line)..fields.each_wit
1eea0 68 5f 69 6e 64 65 78 20 7b 20 7c 76 2c 69 7c 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 23 7b 69 7d h_index.{.|v,i|......print."#{i}
1eec0 20 3a 20 23 7b 76 7d 5c 6e 22 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f .:.#{v}\n";..}......#.@@PLEAC@@_
1eee0 31 2e 31 36 0d 0a 23 20 55 73 65 20 74 68 65 20 73 6f 75 6e 64 65 78 2e 72 62 20 4c 69 62 72 61 1.16..#.Use.the.soundex.rb.Libra
1ef00 72 79 20 66 72 6f 6d 20 4d 69 63 68 61 65 6c 20 4e 65 75 6d 61 6e 6e 2e 0d 0a 23 20 68 74 74 70 ry.from.Michael.Neumann...#.http
1ef20 3a 2f 2f 77 77 77 2e 73 2d 64 69 72 65 6b 74 6e 65 74 2e 64 65 2f 68 6f 6d 65 70 61 67 65 73 2f ://www.s-direktnet.de/homepages/
1ef40 6e 65 75 6d 61 6e 6e 2f 72 62 5f 70 72 67 73 2f 53 6f 75 6e 64 65 78 2e 72 62 0d 0a 72 65 71 75 neumann/rb_prgs/Soundex.rb..requ
1ef60 69 72 65 20 27 53 6f 75 6e 64 65 78 27 0d 0a 0d 0a 63 6f 64 65 20 3d 20 54 65 78 74 3a 3a 53 6f ire.'Soundex'....code.=.Text::So
1ef80 75 6e 64 65 78 2e 73 6f 75 6e 64 65 78 28 73 74 72 69 6e 67 29 0d 0a 63 6f 64 65 73 20 3d 20 54 undex.soundex(string)..codes.=.T
1efa0 65 78 74 3a 3a 53 6f 75 6e 64 65 78 2e 73 6f 75 6e 64 65 78 28 61 72 72 61 79 29 0d 0a 0d 0a 23 ext::Soundex.soundex(array)....#
1efc0 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 67 65 74 70 77 .substitution.function.for.getpw
1efe0 65 6e 74 28 29 3a 0d 0a 23 20 72 65 74 75 72 6e 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 75 73 ent():..#.returns.an.array.of.us
1f000 65 72 20 65 6e 74 72 69 65 73 2c 0d 0a 23 20 65 61 63 68 20 65 6e 74 72 79 20 63 6f 6e 74 61 69 er.entries,..#.each.entry.contai
1f020 6e 73 20 74 68 65 20 75 73 65 72 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 66 75 6c 6c 20 6e 61 6d ns.the.username.and.the.full.nam
1f040 65 0d 0a 64 65 66 20 6c 6f 67 69 6e 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 72 65 73 75 6c 74 20 3d e..def.login_names......result.=
1f060 20 5b 5d 0d 0a 20 20 20 20 46 69 6c 65 2e 6f 70 65 6e 28 22 2f 65 74 63 2f 70 61 73 73 77 64 22 .[]......File.open("/etc/passwd"
1f080 29 20 7b 20 7c 66 69 6c 65 7c 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 2e 65 61 63 68 5f 6c 69 ).{.|file|..........file.each_li
1f0a0 6e 65 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 74 20 69 66 ne.{.|line|..............next.if
1f0c0 20 6c 69 6e 65 2e 6d 61 74 63 68 28 2f 5e 23 2f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 .line.match(/^#/)..............c
1f0e0 6f 6c 73 20 3d 20 6c 69 6e 65 2e 73 70 6c 69 74 28 22 3a 22 29 0d 0a 20 20 20 20 20 20 20 20 20 ols.=.line.split(":")...........
1f100 20 20 20 72 65 73 75 6c 74 2e 70 75 73 68 28 5b 63 6f 6c 73 5b 30 5d 2c 20 63 6f 6c 73 5b 34 5d ...result.push([cols[0],.cols[4]
1f120 5d 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 72 65 73 75 6c 74 ])..........}......}......result
1f140 0d 0a 65 6e 64 0d 0a 0d 0a 70 75 74 73 20 22 4c 6f 6f 6b 75 70 20 75 73 65 72 3a 20 22 0d 0a 75 ..end....puts."Lookup.user:."..u
1f160 73 65 72 20 3d 20 53 54 44 49 4e 2e 67 65 74 73 0d 0a 75 73 65 72 2e 63 68 6f 6d 70 21 0d 0a 65 ser.=.STDIN.gets..user.chomp!..e
1f180 78 69 74 20 75 6e 6c 65 73 73 20 75 73 65 72 0d 0a 6e 61 6d 65 5f 63 6f 64 65 20 3d 20 54 65 78 xit.unless.user..name_code.=.Tex
1f1a0 74 3a 3a 53 6f 75 6e 64 65 78 2e 73 6f 75 6e 64 65 78 28 75 73 65 72 29 0d 0a 0d 0a 73 70 6c 69 t::Soundex.soundex(user)....spli
1f1c0 74 74 65 72 20 3d 20 52 65 67 65 78 70 2e 6e 65 77 28 27 28 5c 77 2b 29 5b 5e 2c 5d 2a 5c 62 28 tter.=.Regexp.new('(\w+)[^,]*\b(
1f1e0 5c 77 2b 29 27 29 0d 0a 66 6f 72 20 75 73 65 72 6e 61 6d 65 2c 20 66 75 6c 6c 6e 61 6d 65 20 69 \w+)')..for.username,.fullname.i
1f200 6e 20 6c 6f 67 69 6e 5f 6e 61 6d 65 73 20 64 6f 0d 0a 20 20 20 20 66 69 72 73 74 6e 61 6d 65 2c n.login_names.do......firstname,
1f220 20 6c 61 73 74 6e 61 6d 65 20 3d 20 73 70 6c 69 74 74 65 72 2e 6d 61 74 63 68 28 66 75 6c 6c 6e .lastname.=.splitter.match(fulln
1f240 61 6d 65 29 5b 31 2c 32 5d 0d 0a 20 20 20 20 69 66 20 6e 61 6d 65 5f 63 6f 64 65 20 3d 3d 20 54 ame)[1,2]......if.name_code.==.T
1f260 65 78 74 3a 3a 53 6f 75 6e 64 65 78 2e 73 6f 75 6e 64 65 78 28 75 73 65 72 6e 61 6d 65 29 0d 0a ext::Soundex.soundex(username)..
1f280 20 20 20 20 20 20 20 20 7c 7c 20 6e 61 6d 65 5f 63 6f 64 65 20 3d 3d 20 54 65 78 74 3a 3a 53 6f ........||.name_code.==.Text::So
1f2a0 75 6e 64 65 78 2e 73 6f 75 6e 64 65 78 28 66 69 72 73 74 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 undex.soundex(firstname)........
1f2c0 20 20 7c 7c 20 6e 61 6d 65 5f 63 6f 64 65 20 3d 3d 20 54 65 78 74 3a 3a 53 6f 75 6e 64 65 78 2e ..||.name_code.==.Text::Soundex.
1f2e0 73 6f 75 6e 64 65 78 28 6c 61 73 74 6e 61 6d 65 29 0d 0a 20 20 20 20 74 68 65 6e 0d 0a 20 20 20 soundex(lastname)......then.....
1f300 20 20 20 20 20 70 75 74 73 20 22 23 7b 75 73 65 72 6e 61 6d 65 7d 3a 20 23 7b 66 69 72 73 74 6e .....puts."#{username}:.#{firstn
1f320 61 6d 65 7d 20 23 7b 6c 61 73 74 6e 61 6d 65 7d 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d ame}.#{lastname}"......end..end.
1f340 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 31 37 0d 0a 23 20 40 40 49 4e 43 4c 55 .....#.@@PLEAC@@_1.17..#.@@INCLU
1f360 44 45 40 40 20 69 6e 63 6c 75 64 65 2f 72 75 62 79 2f 66 69 78 73 74 79 6c 65 2e 72 62 0d 0a 0d DE@@.include/ruby/fixstyle.rb...
1f380 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 2e 31 38 0d 0a 23 20 40 40 49 4e 43 4c 55 44 45 ...#.@@PLEAC@@_1.18..#.@@INCLUDE
1f3a0 40 40 20 69 6e 63 6c 75 64 65 2f 72 75 62 79 2f 70 73 67 72 65 70 2e 72 62 0d 0a 0d 0a 0d 0a 23 @@.include/ruby/psgrep.rb......#
1f3c0 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 31 0d 0a 23 20 4d 61 74 7a 20 74 65 6c 6c 73 20 74 68 61 .@@PLEAC@@_2.1..#.Matz.tells.tha
1f3e0 74 20 79 6f 75 20 63 61 6e 20 75 73 65 20 49 6e 74 65 67 65 72 28 29 20 66 6f 72 20 73 74 72 69 t.you.can.use.Integer().for.stri
1f400 63 74 20 63 68 65 63 6b 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0d 0a 49 6e 74 65 67 65 72 28 ct.checked.conversion...Integer(
1f420 22 61 62 63 22 29 0d 0a 23 3d 3e 20 60 49 6e 74 65 67 65 72 27 3a 20 69 6e 76 61 6c 69 64 20 76 "abc")..#=>.`Integer':.invalid.v
1f440 61 6c 75 65 20 66 6f 72 20 49 6e 74 65 67 65 72 3a 20 22 61 62 63 22 20 28 41 72 67 75 6d 65 6e alue.for.Integer:."abc".(Argumen
1f460 74 45 72 72 6f 72 29 0d 0a 49 6e 74 65 67 65 72 28 22 35 36 37 22 29 0d 0a 23 3d 3e 20 35 36 37 tError)..Integer("567")..#=>.567
1f480 0d 0a 0d 0a 23 20 59 6f 75 20 6d 61 79 20 75 73 65 20 46 6c 6f 61 74 28 29 20 66 6f 72 20 66 6c ....#.You.may.use.Float().for.fl
1f4a0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 74 75 66 66 0d 0a 49 6e 74 65 67 65 72 28 22 35 36 2e oating.point.stuff..Integer("56.
1f4c0 37 22 29 0d 0a 23 3d 3e 20 60 49 6e 74 65 67 65 72 27 3a 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 7")..#=>.`Integer':.invalid.valu
1f4e0 65 20 66 6f 72 20 49 6e 74 65 67 65 72 3a 20 22 35 36 2e 37 22 20 28 41 72 67 75 6d 65 6e 74 45 e.for.Integer:."56.7".(ArgumentE
1f500 72 72 6f 72 29 0d 0a 46 6c 6f 61 74 28 22 35 36 2e 37 22 29 0d 0a 23 3d 3e 20 35 36 2e 37 0d 0a rror)..Float("56.7")..#=>.56.7..
1f520 0d 0a 23 20 59 6f 75 20 6d 61 79 20 61 6c 73 6f 20 75 73 65 20 61 20 72 65 67 65 78 70 20 66 6f ..#.You.may.also.use.a.regexp.fo
1f540 72 20 74 68 61 74 0d 0a 69 66 20 73 74 72 69 6e 67 20 3d 7e 20 2f 5e 5b 2b 2d 5d 3f 5c 64 2b 24 r.that..if.string.=~./^[+-]?\d+$
1f560 2f 0d 0a 20 20 20 20 70 20 27 69 73 20 61 6e 20 69 6e 74 65 67 65 72 27 0d 0a 65 6c 73 65 0d 0a /......p.'is.an.integer'..else..
1f580 20 20 20 20 70 20 27 69 73 20 6e 6f 74 27 0d 0a 65 6e 64 0d 0a 0d 0a 69 66 20 73 74 72 69 6e 67 ....p.'is.not'..end....if.string
1f5a0 20 3d 7e 20 2f 5e 2d 3f 28 3f 3a 5c 64 2b 28 3f 3a 5c 2e 5c 64 2a 29 3f 7c 5c 2e 5c 64 2b 29 24 .=~./^-?(?:\d+(?:\.\d*)?|\.\d+)$
1f5c0 2f 0d 0a 20 20 20 20 70 20 27 69 73 20 61 20 64 65 63 69 6d 61 6c 20 6e 75 6d 62 65 72 27 0d 0a /......p.'is.a.decimal.number'..
1f5e0 65 6c 73 65 0d 0a 20 20 20 20 70 20 27 69 73 20 6e 6f 74 27 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 else......p.'is.not'..end......#
1f600 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 32 0d 0a 23 20 65 71 75 61 6c 28 6e 75 6d 31 2c 20 6e 75 .@@PLEAC@@_2.2..#.equal(num1,.nu
1f620 6d 32 2c 20 61 63 63 75 72 61 63 79 29 20 3a 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 m2,.accuracy).:.returns.true.if.
1f640 6e 75 6d 31 20 61 6e 64 20 6e 75 6d 32 20 61 72 65 0d 0a 23 20 20 20 65 71 75 61 6c 20 74 6f 20 num1.and.num2.are..#...equal.to.
1f660 61 63 63 75 72 61 63 79 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 63 69 6d 61 6c 20 70 6c 61 63 65 accuracy.number.of.decimal.place
1f680 73 0d 0a 64 65 66 20 65 71 75 61 6c 28 69 2c 20 6a 2c 20 61 29 0d 0a 20 20 20 20 73 70 72 69 6e s..def.equal(i,.j,.a)......sprin
1f6a0 74 66 28 22 25 2e 23 7b 61 7d 67 22 2c 20 69 29 20 3d 3d 20 73 70 72 69 6e 74 66 28 22 25 2e 23 tf("%.#{a}g",.i).==.sprintf("%.#
1f6c0 7b 61 7d 67 22 2c 20 6a 29 0d 0a 65 6e 64 0d 0a 0d 0a 77 61 67 65 20 3d 20 35 33 36 20 20 20 20 {a}g",.j)..end....wage.=.536....
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 24 35 2e 33 36 2f 68 6f 75 72 ....................#.$5.36/hour
1f700 0d 0a 77 65 65 6b 20 3d 20 34 30 20 2a 20 77 61 67 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..week.=.40.*.wage..............
1f720 20 20 20 20 23 20 24 32 31 34 2e 34 30 0d 0a 70 72 69 6e 74 66 28 22 4f 6e 65 20 77 65 65 6b 27 ....#.$214.40..printf("One.week'
1f740 73 20 77 61 67 65 20 69 73 3a 20 5c 24 25 2e 32 66 5c 6e 22 2c 20 77 65 65 6b 2f 31 30 30 2e 30 s.wage.is:.\$%.2f\n",.week/100.0
1f760 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 33 0d 0a 6e 75 6d 2e 72 6f 75 6e )......#.@@PLEAC@@_2.3..num.roun
1f780 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 72 6f 75 6e d.........................#.roun
1f7a0 64 73 20 74 6f 20 69 6e 74 65 67 65 72 0d 0a 0d 0a 61 20 3d 20 30 2e 32 35 35 0d 0a 62 20 3d 20 ds.to.integer....a.=.0.255..b.=.
1f7c0 73 70 72 69 6e 74 66 28 22 25 2e 32 66 22 2c 20 61 29 0d 0a 70 72 69 6e 74 20 20 22 55 6e 72 6f sprintf("%.2f",.a)..print.."Unro
1f7e0 75 6e 64 65 64 3a 20 23 7b 61 7d 5c 6e 52 6f 75 6e 64 65 64 3a 20 23 7b 62 7d 5c 6e 22 0d 0a 70 unded:.#{a}\nRounded:.#{b}\n"..p
1f800 72 69 6e 74 66 20 22 55 6e 72 6f 75 6e 64 65 64 3a 20 23 7b 61 7d 5c 6e 52 6f 75 6e 64 65 64 3a rintf."Unrounded:.#{a}\nRounded:
1f820 20 25 2e 32 66 5c 6e 22 2c 20 61 0d 0a 0d 0a 70 72 69 6e 74 20 22 6e 75 6d 62 65 72 5c 74 69 6e .%.2f\n",.a....print."number\tin
1f840 74 5c 74 66 6c 6f 6f 72 5c 74 63 65 69 6c 5c 6e 22 0d 0a 61 20 3d 20 5b 20 33 2e 33 20 2c 20 33 t\tfloor\tceil\n"..a.=.[.3.3.,.3
1f860 2e 35 20 2c 20 33 2e 37 2c 20 2d 33 2e 33 20 5d 0d 0a 66 6f 72 20 6e 20 69 6e 20 61 0d 0a 20 20 .5.,.3.7,.-3.3.]..for.n.in.a....
1f880 20 20 70 72 69 6e 74 66 28 22 25 20 2e 31 66 5c 74 25 20 2e 31 66 5c 74 25 20 2e 31 66 5c 74 25 ..printf("%..1f\t%..1f\t%..1f\t%
1f8a0 20 2e 31 66 5c 6e 22 2c 20 20 23 20 61 74 20 6c 65 61 73 74 20 49 20 64 6f 6e 27 74 20 66 61 6b ..1f\n",..#.at.least.I.don't.fak
1f8c0 65 20 6d 79 20 6f 75 74 70 75 74 20 3a 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 6e 2c 20 6e 2e e.my.output.:).............n,.n.
1f8e0 74 6f 5f 69 2c 20 6e 2e 66 6c 6f 6f 72 2c 20 6e 2e 63 65 69 6c 29 0d 0a 65 6e 64 0d 0a 0d 0a 0d to_i,.n.floor,.n.ceil)..end.....
1f900 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 34 0d 0a 64 65 66 20 64 65 63 32 62 69 6e 28 6e 29 .#.@@PLEAC@@_2.4..def.dec2bin(n)
1f920 0d 0a 20 20 20 20 5b 6e 5d 2e 70 61 63 6b 28 22 4e 22 29 2e 75 6e 70 61 63 6b 28 22 42 33 32 22 ......[n].pack("N").unpack("B32"
1f940 29 5b 30 5d 2e 73 75 62 28 2f 5e 30 2b 28 3f 3d 5c 64 29 2f 2c 20 27 27 29 0d 0a 65 6e 64 0d 0a )[0].sub(/^0+(?=\d)/,.'')..end..
1f960 0d 0a 64 65 66 20 62 69 6e 32 64 65 63 28 6e 29 0d 0a 20 20 20 20 5b 28 22 30 22 2a 33 32 2b 6e ..def.bin2dec(n)......[("0"*32+n
1f980 2e 74 6f 5f 73 29 5b 2d 33 32 2e 2e 2d 31 5d 5d 2e 70 61 63 6b 28 22 42 33 32 22 29 2e 75 6e 70 .to_s)[-32..-1]].pack("B32").unp
1f9a0 61 63 6b 28 22 4e 22 29 5b 30 5d 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 ack("N")[0]..end......#.@@PLEAC@
1f9c0 40 5f 32 2e 35 0d 0a 66 6f 72 20 69 20 69 6e 20 78 20 2e 2e 20 79 0d 0a 20 20 20 20 23 20 69 20 @_2.5..for.i.in.x....y......#.i.
1f9e0 69 73 20 73 65 74 20 74 6f 20 65 76 65 72 79 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 78 20 74 is.set.to.every.integer.from.x.t
1fa00 6f 20 79 2c 20 69 6e 63 6c 75 73 69 76 65 0d 0a 65 6e 64 0d 0a 0d 0a 78 2e 73 74 65 70 28 79 2c o.y,.inclusive..end....x.step(y,
1fa20 37 29 20 7b 20 7c 69 7c 0d 0a 20 20 20 20 23 20 69 20 69 73 20 73 65 74 20 74 6f 20 65 76 65 72 7).{.|i|......#.i.is.set.to.ever
1fa40 79 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 78 20 74 6f 20 79 2c 20 73 74 65 70 73 69 7a 65 20 y.integer.from.x.to.y,.stepsize.
1fa60 3d 20 37 0d 0a 7d 0d 0a 0d 0a 70 72 69 6e 74 20 22 49 6e 66 61 6e 63 79 20 69 73 3a 20 22 0d 0a =.7..}....print."Infancy.is:."..
1fa80 28 30 2e 2e 32 29 2e 65 61 63 68 20 7b 20 7c 69 7c 0d 0a 20 20 20 20 70 72 69 6e 74 20 69 2c 20 (0..2).each.{.|i|......print.i,.
1faa0 22 20 22 0d 0a 7d 0d 0a 70 72 69 6e 74 20 22 5c 6e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 "."..}..print."\n"......#.@@PLEA
1fac0 43 40 40 5f 32 2e 36 0d 0a 23 20 57 65 20 63 61 6e 20 61 64 64 20 63 6f 6e 76 65 72 73 69 6f 6e C@@_2.6..#.We.can.add.conversion
1fae0 20 6d 65 74 68 6f 64 73 20 74 6f 20 74 68 65 20 49 6e 74 65 67 65 72 20 63 6c 61 73 73 2c 0d 0a .methods.to.the.Integer.class,..
1fb00 23 20 74 68 69 73 20 6d 61 6b 65 73 20 61 20 72 6f 6d 61 6e 20 6e 75 6d 62 65 72 20 6a 75 73 74 #.this.makes.a.roman.number.just
1fb20 20 61 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 6e 6f 72 6d 61 6c 20 6e 75 6d .a.representation.for.normal.num
1fb40 62 65 72 73 2e 0d 0a 63 6c 61 73 73 20 49 6e 74 65 67 65 72 0d 0a 0d 0a 20 20 20 20 40 40 72 6f bers...class.Integer........@@ro
1fb60 6d 61 6e 6c 69 73 74 20 3d 20 5b 5b 22 4d 22 2c 20 31 30 30 30 5d 2c 0d 0a 20 20 20 20 20 20 20 manlist.=.[["M",.1000],.........
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 43 4d 22 2c 20 39 30 30 5d 2c 0d 0a 20 20 20 20 20 20 ............["CM",.900],........
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 44 22 2c 20 20 35 30 30 5d 2c 0d 0a 20 20 20 20 20 .............["D",..500],.......
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 43 44 22 2c 20 34 30 30 5d 2c 0d 0a 20 20 20 20 ..............["CD",.400],......
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 43 22 2c 20 20 31 30 30 5d 2c 0d 0a 20 20 20 ...............["C",..100],.....
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 58 43 22 2c 20 20 39 30 5d 2c 0d 0a 20 20 ................["XC",..90],....
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 4c 22 2c 20 20 20 35 30 5d 2c 0d 0a 20 .................["L",...50],...
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 58 4c 22 2c 20 20 34 30 5d 2c 0d 0a ..................["XL",..40],..
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 58 22 2c 20 20 20 31 30 5d 2c 0d ...................["X",...10],.
1fc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 49 58 22 2c 20 20 20 39 5d 2c ....................["IX",...9],
1fca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 56 22 2c 20 20 20 20 35 5d .....................["V",....5]
1fcc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 49 56 22 2c 20 20 20 34 ,.....................["IV",...4
1fce0 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 22 49 22 2c 20 20 20 20 ],.....................["I",....
1fd00 31 5d 5d 0d 0a 0d 0a 20 20 20 20 64 65 66 20 74 6f 5f 72 6f 6d 61 6e 0d 0a 20 20 20 20 20 20 20 1]]........def.to_roman.........
1fd20 20 72 65 6d 61 69 6e 73 20 3d 20 73 65 6c 66 0d 0a 20 20 20 20 20 20 20 20 72 6f 6d 61 6e 20 3d .remains.=.self..........roman.=
1fd40 20 22 22 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 73 79 6d 2c 20 6e 75 6d 20 69 6e 20 40 40 72 .""..........for.sym,.num.in.@@r
1fd60 6f 6d 61 6e 6c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 72 65 6d 61 omanlist..............while.rema
1fd80 69 6e 73 20 3e 3d 20 6e 75 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 61 ins.>=.num..................rema
1fda0 69 6e 73 20 2d 3d 20 6e 75 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6d 61 ins.-=.num..................roma
1fdc0 6e 20 3c 3c 20 73 79 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 n.<<.sym..............end.......
1fde0 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 72 6f 6d 61 6e 0d 0a 20 20 20 20 65 6e 64 0d 0a ...end..........roman......end..
1fe00 0d 0a 20 20 20 20 64 65 66 20 49 6e 74 65 67 65 72 2e 66 72 6f 6d 5f 72 6f 6d 61 6e 28 72 6f 6d ......def.Integer.from_roman(rom
1fe20 61 6e 29 0d 0a 20 20 20 20 20 20 20 20 75 73 74 72 20 3d 20 72 6f 6d 61 6e 2e 75 70 63 61 73 65 an)..........ustr.=.roman.upcase
1fe40 0d 0a 20 20 20 20 20 20 20 20 73 75 6d 20 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 65 ..........sum.=.0..........for.e
1fe60 6e 74 72 79 20 69 6e 20 40 40 72 6f 6d 61 6e 6c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ntry.in.@@romanlist.............
1fe80 20 73 79 6d 2c 20 6e 75 6d 20 3d 20 65 6e 74 72 79 5b 30 5d 2c 20 65 6e 74 72 79 5b 31 5d 0d 0a .sym,.num.=.entry[0],.entry[1]..
1fea0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 73 79 6d 20 3d 3d 20 75 73 74 72 5b 30 2c ............while.sym.==.ustr[0,
1fec0 20 73 79 6d 2e 6c 65 6e 67 74 68 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 .sym.length]..................su
1fee0 6d 20 2b 3d 20 6e 75 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 74 72 2e 73 m.+=.num..................ustr.s
1ff00 6c 69 63 65 21 28 30 2c 20 73 79 6d 2e 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 lice!(0,.sym.length)............
1ff20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 73 75 6d 0d ..end..........end..........sum.
1ff40 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 72 6f 6d 61 6e 5f 66 69 66 74 65 .....end....end......roman_fifte
1ff60 65 6e 20 3d 20 31 35 2e 74 6f 5f 72 6f 6d 61 6e 0d 0a 70 75 74 73 20 22 52 6f 6d 61 6e 20 66 6f en.=.15.to_roman..puts."Roman.fo
1ff80 72 20 66 69 66 74 65 65 6e 20 69 73 20 23 7b 72 6f 6d 61 6e 5f 66 69 66 74 65 65 6e 7d 22 0d 0a r.fifteen.is.#{roman_fifteen}"..
1ffa0 69 20 3d 20 49 6e 74 65 67 65 72 2e 66 72 6f 6d 5f 72 6f 6d 61 6e 28 72 6f 6d 61 6e 5f 66 69 66 i.=.Integer.from_roman(roman_fif
1ffc0 74 65 65 6e 29 0d 0a 70 75 74 73 20 22 43 6f 6e 76 65 72 74 65 64 20 62 61 63 6b 2c 20 23 7b 72 teen)..puts."Converted.back,.#{r
1ffe0 6f 6d 61 6e 5f 66 69 66 74 65 65 6e 7d 20 69 73 20 23 7b 69 7d 22 0d 0a 0d 0a 23 20 63 68 65 63 oman_fifteen}.is.#{i}"....#.chec
20000 6b 0d 0a 66 6f 72 20 69 20 69 6e 20 28 31 2e 2e 33 39 30 30 29 0d 0a 20 20 20 20 72 20 3d 20 69 k..for.i.in.(1..3900)......r.=.i
20020 2e 74 6f 5f 72 6f 6d 61 6e 0d 0a 20 20 20 20 6a 20 3d 20 49 6e 74 65 67 65 72 2e 66 72 6f 6d 5f .to_roman......j.=.Integer.from_
20040 72 6f 6d 61 6e 28 72 29 0d 0a 20 20 20 20 69 66 20 69 20 21 3d 20 6a 0d 0a 20 20 20 20 20 20 20 roman(r)......if.i.!=.j.........
20060 20 70 75 74 73 20 22 65 72 72 6f 72 3a 20 23 7b 69 7d 20 3a 20 23 7b 72 7d 20 2d 20 23 7b 6a 7d .puts."error:.#{i}.:.#{r}.-.#{j}
20080 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 "......end..end......#.@@PLEAC@@
200a0 5f 32 2e 37 0d 0a 72 61 6e 64 6f 6d 20 3d 20 72 61 6e 64 28 79 2d 78 2b 31 29 2b 78 0d 0a 0d 0a _2.7..random.=.rand(y-x+1)+x....
200c0 63 68 61 72 73 20 3d 20 5b 22 41 22 2e 2e 22 5a 22 2c 22 61 22 2e 2e 22 7a 22 2c 22 30 22 2e 2e chars.=.["A".."Z","a".."z","0"..
200e0 22 39 22 5d 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 72 7c 20 72 2e 74 6f 5f 61 20 7d 2e 6a 6f 69 6e "9"].collect.{.|r|.r.to_a.}.join
20100 20 2b 20 25 71 28 21 40 24 25 5e 26 2a 29 0d 0a 70 61 73 73 77 6f 72 64 20 3d 20 28 31 2e 2e 38 .+.%q(!@$%^&*)..password.=.(1..8
20120 29 2e 63 6f 6c 6c 65 63 74 20 7b 20 63 68 61 72 73 5b 72 61 6e 64 28 63 68 61 72 73 2e 73 69 7a ).collect.{.chars[rand(chars.siz
20140 65 29 5d 20 7d 2e 70 61 63 6b 28 22 43 2a 22 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 e)].}.pack("C*")......#.@@PLEAC@
20160 40 5f 32 2e 38 0d 0a 73 72 61 6e 64 20 20 20 20 20 20 20 20 23 20 75 73 65 73 20 61 20 63 6f 6d @_2.8..srand........#.uses.a.com
20180 62 69 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 69 6d 65 2c 20 74 68 65 20 70 72 6f 63 65 73 bination.of.the.time,.the.proces
201a0 73 20 69 64 2c 20 61 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 0d 0a 73 72 61 s.id,.and.a.sequence.number..sra
201c0 6e 64 28 76 61 6c 29 20 20 20 23 20 66 6f 72 20 72 65 70 65 61 74 61 62 6c 65 20 62 65 68 61 76 nd(val)...#.for.repeatable.behav
201e0 69 6f 75 72 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 39 0d 0a 23 20 66 72 6f iour......#.@@PLEAC@@_2.9..#.fro
20200 6d 20 74 68 65 20 72 61 6e 64 6f 6d 72 20 6c 69 62 3a 0d 0a 23 20 68 74 74 70 3a 2f 2f 72 61 61 m.the.randomr.lib:..#.http://raa
20220 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 2f 70 72 6f 6a 65 63 74 2f 72 61 6e 64 6f 6d 72 2f 0d .ruby-lang.org/project/randomr/.
20240 0a 2d 2d 2d 2d 3e 20 68 74 74 70 3a 2f 2f 72 61 61 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 2f .---->.http://raa.ruby-lang.org/
20260 70 72 6f 6a 65 63 74 2f 72 61 6e 64 6f 6d 72 2f 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 72 61 6e project/randomr/....require.'ran
20280 64 6f 6d 2f 6d 65 72 73 65 6e 6e 65 5f 74 77 69 73 74 65 72 27 0d 0a 6d 65 72 73 20 3d 20 52 61 dom/mersenne_twister'..mers.=.Ra
202a0 6e 64 6f 6d 3a 3a 4d 65 72 73 65 6e 6e 65 54 77 69 73 74 65 72 2e 6e 65 77 20 31 32 33 34 35 36 ndom::MersenneTwister.new.123456
202c0 37 38 39 0d 0a 70 75 74 73 20 6d 65 72 73 2e 72 61 6e 64 28 30 29 20 20 20 20 23 20 30 2e 35 35 789..puts.mers.rand(0)....#.0.55
202e0 30 33 32 31 39 33 32 35 34 34 35 34 31 0d 0a 70 75 74 73 20 6d 65 72 73 2e 72 61 6e 64 28 31 30 0321932544541..puts.mers.rand(10
20300 29 20 20 20 23 20 32 0d 0a 0d 0a 23 20 75 73 69 6e 67 20 6f 6e 6c 69 6e 65 20 73 6f 75 72 63 65 )...#.2....#.using.online.source
20320 73 20 6f 66 20 72 61 6e 64 6f 6d 20 64 61 74 61 20 76 69 61 20 74 68 65 20 72 65 61 6c 72 61 6e s.of.random.data.via.the.realran
20340 64 20 70 61 63 6b 61 67 65 3a 0d 0a 23 20 68 74 74 70 3a 2f 2f 72 61 61 2e 72 75 62 79 2d 6c 61 d.package:..#.http://raa.ruby-la
20360 6e 67 2e 6f 72 67 2f 70 72 6f 6a 65 63 74 2f 72 65 61 6c 72 61 6e 64 2f 0d 0a 23 20 2a 2a 4e 6f ng.org/project/realrand/..#.**No
20380 74 65 2a 2a 0d 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 6e 6c 69 6e 65 20 73 65 72 te**..#.The.following.online.ser
203a0 76 69 63 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 70 61 63 6b 61 67 65 3a 0d vices.are.used.in.this.package:.
203c0 0a 23 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 72 61 6e 64 6f 6d 2e 6f 72 67 20 2d 20 73 6f 75 .#...http://www.random.org.-.sou
203e0 72 63 65 3a 20 61 74 6d 6f 73 70 68 65 72 69 63 20 6e 6f 69 73 65 0d 0a 23 20 20 20 68 74 74 70 rce:.atmospheric.noise..#...http
20400 3a 2f 2f 77 77 77 2e 66 6f 75 72 6d 69 6c 61 62 2e 63 68 2f 68 6f 74 62 69 74 73 20 2d 20 73 6f ://www.fourmilab.ch/hotbits.-.so
20420 75 72 63 65 3a 20 72 61 64 69 6f 61 63 74 69 76 65 20 64 65 63 61 79 20 74 69 6d 69 6e 67 73 0d urce:.radioactive.decay.timings.
20440 0a 23 20 20 20 68 74 74 70 3a 2f 2f 72 61 6e 64 6f 6d 2e 68 64 2e 6f 72 67 20 2d 20 73 6f 75 72 .#...http://random.hd.org.-.sour
20460 63 65 3a 20 65 6e 74 72 6f 70 79 20 66 72 6f 6d 20 6c 6f 63 61 6c 20 61 6e 64 20 6e 65 74 77 6f ce:.entropy.from.local.and.netwo
20480 72 6b 20 6e 6f 69 73 65 0d 0a 23 20 50 6c 65 61 73 65 20 76 69 73 69 74 20 74 68 65 20 73 69 74 rk.noise..#.Please.visit.the.sit
204a0 65 73 20 61 6e 64 20 72 65 73 70 65 63 74 20 74 68 65 20 72 75 6c 65 73 20 6f 66 20 65 61 63 68 es.and.respect.the.rules.of.each
204c0 20 73 65 72 76 69 63 65 2e 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 72 61 6e 64 6f 6d 2f 6f 6e 6c .service.....require.'random/onl
204e0 69 6e 65 27 0d 0a 0d 0a 67 65 6e 65 72 61 74 6f 72 31 20 3d 20 52 61 6e 64 6f 6d 3a 3a 52 61 6e ine'....generator1.=.Random::Ran
20500 64 6f 6d 4f 72 67 2e 6e 65 77 0d 0a 70 75 74 73 20 67 65 6e 65 72 61 74 6f 72 31 2e 72 61 6e 64 domOrg.new..puts.generator1.rand
20520 62 79 74 65 28 35 29 2e 6a 6f 69 6e 28 22 2c 22 29 0d 0a 70 75 74 73 20 67 65 6e 65 72 61 74 6f byte(5).join(",")..puts.generato
20540 72 31 2e 72 61 6e 64 6e 75 6d 28 31 30 2c 20 31 2c 20 36 29 2e 6a 6f 69 6e 28 22 2c 22 29 20 20 r1.randnum(10,.1,.6).join(",")..
20560 23 20 52 6f 6c 6c 20 64 69 63 65 20 31 30 20 74 69 6d 65 73 2e 0d 0a 0d 0a 67 65 6e 65 72 61 74 #.Roll.dice.10.times.....generat
20580 6f 72 32 20 3d 20 52 61 6e 64 6f 6d 3a 3a 46 6f 75 72 6d 69 4c 61 62 2e 6e 65 77 0d 0a 70 75 74 or2.=.Random::FourmiLab.new..put
205a0 73 20 67 65 6e 65 72 61 74 6f 72 32 2e 72 61 6e 64 62 79 74 65 28 35 29 2e 6a 6f 69 6e 28 22 2c s.generator2.randbyte(5).join(",
205c0 22 29 0d 0a 23 20 72 61 6e 64 6e 75 6d 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0d ")..#.randnum.is.not.supported..
205e0 0a 0d 0a 67 65 6e 65 72 61 74 6f 72 33 20 3d 20 52 61 6e 64 6f 6d 3a 3a 45 6e 74 72 6f 70 79 50 ...generator3.=.Random::EntropyP
20600 6f 6f 6c 2e 6e 65 77 0d 0a 70 75 74 73 20 67 65 6e 65 72 61 74 6f 72 33 2e 72 61 6e 64 62 79 74 ool.new..puts.generator3.randbyt
20620 65 28 35 29 2e 6a 6f 69 6e 28 22 2c 22 29 0d 0a 23 20 72 61 6e 64 6e 75 6d 20 69 73 20 6e 6f 74 e(5).join(",")..#.randnum.is.not
20640 20 73 75 70 70 6f 72 74 65 64 2e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 31 .supported.......#.@@PLEAC@@_2.1
20660 30 0d 0a 64 65 66 20 67 61 75 73 73 69 61 6e 5f 72 61 6e 64 0d 0a 20 20 20 20 62 65 67 69 6e 0d 0..def.gaussian_rand......begin.
20680 0a 20 20 20 20 20 20 20 20 75 31 20 3d 20 32 20 2a 20 72 61 6e 64 28 29 20 2d 20 31 0d 0a 20 20 .........u1.=.2.*.rand().-.1....
206a0 20 20 20 20 20 20 75 32 20 3d 20 32 20 2a 20 72 61 6e 64 28 29 20 2d 20 31 0d 0a 20 20 20 20 20 ......u2.=.2.*.rand().-.1.......
206c0 20 20 20 77 20 3d 20 75 31 2a 75 31 20 2b 20 75 32 2a 75 32 0d 0a 20 20 20 20 65 6e 64 20 77 68 ...w.=.u1*u1.+.u2*u2......end.wh
206e0 69 6c 65 20 28 77 20 3e 3d 20 31 29 0d 0a 20 20 20 20 77 20 3d 20 4d 61 74 68 2e 73 71 72 74 28 ile.(w.>=.1)......w.=.Math.sqrt(
20700 28 2d 32 2a 4d 61 74 68 2e 6c 6f 67 28 77 29 29 2f 77 29 0d 0a 20 20 20 20 5b 20 75 32 2a 77 2c (-2*Math.log(w))/w)......[.u2*w,
20720 20 75 31 2a 77 20 5d 0d 0a 65 6e 64 0d 0a 0d 0a 6d 65 61 6e 20 3d 20 32 35 0d 0a 73 64 65 76 20 .u1*w.]..end....mean.=.25..sdev.
20740 3d 20 32 0d 0a 73 61 6c 61 72 79 20 3d 20 67 61 75 73 73 69 61 6e 5f 72 61 6e 64 5b 30 5d 20 2a =.2..salary.=.gaussian_rand[0].*
20760 20 73 64 65 76 20 2b 20 6d 65 61 6e 0d 0a 70 72 69 6e 74 66 28 22 59 6f 75 20 68 61 76 65 20 62 .sdev.+.mean..printf("You.have.b
20780 65 65 6e 20 68 69 72 65 64 20 61 74 20 5c 24 25 2e 32 66 5c 6e 22 2c 20 73 61 6c 61 72 79 29 0d een.hired.at.\$%.2f\n",.salary).
207a0 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 31 31 0d 0a 64 65 66 20 64 65 67 32 72 .....#.@@PLEAC@@_2.11..def.deg2r
207c0 61 64 28 64 29 0d 0a 20 20 20 20 28 64 2f 31 38 30 2e 30 29 2a 4d 61 74 68 3a 3a 50 49 0d 0a 65 ad(d)......(d/180.0)*Math::PI..e
207e0 6e 64 0d 0a 0d 0a 64 65 66 20 72 61 64 32 64 65 67 28 72 29 0d 0a 20 20 20 20 28 72 2f 4d 61 74 nd....def.rad2deg(r)......(r/Mat
20800 68 3a 3a 50 49 29 2a 31 38 30 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 h::PI)*180..end......#.@@PLEAC@@
20820 5f 32 2e 31 32 0d 0a 73 69 6e 5f 76 61 6c 20 3d 20 4d 61 74 68 2e 73 69 6e 28 61 6e 67 6c 65 29 _2.12..sin_val.=.Math.sin(angle)
20840 0d 0a 63 6f 73 5f 76 61 6c 20 3d 20 4d 61 74 68 2e 63 6f 73 28 61 6e 67 6c 65 29 0d 0a 74 61 6e ..cos_val.=.Math.cos(angle)..tan
20860 5f 76 61 6c 20 3d 20 4d 61 74 68 2e 74 61 6e 28 61 6e 67 6c 65 29 0d 0a 0d 0a 23 20 41 46 41 49 _val.=.Math.tan(angle)....#.AFAI
20880 4b 20 52 75 62 79 27 73 20 4d 61 74 68 20 6d 6f 64 75 6c 65 20 64 6f 65 73 6e 27 74 20 70 72 6f K.Ruby's.Math.module.doesn't.pro
208a0 76 69 64 65 20 61 63 6f 73 2f 61 73 69 6e 0d 0a 23 20 57 68 69 6c 65 20 77 65 27 72 65 20 61 74 vide.acos/asin..#.While.we're.at
208c0 20 69 74 2c 20 6c 65 74 27 73 20 61 6c 73 6f 20 64 65 66 69 6e 65 20 6d 69 73 73 69 6e 67 20 68 .it,.let's.also.define.missing.h
208e0 79 70 65 72 62 6f 6c 69 63 20 66 75 6e 63 74 69 6f 6e 73 0d 0a 6d 6f 64 75 6c 65 20 4d 61 74 68 yperbolic.functions..module.Math
20900 0d 0a 20 20 20 20 64 65 66 20 4d 61 74 68 2e 61 73 69 6e 28 78 29 0d 0a 20 20 20 20 20 20 20 20 ......def.Math.asin(x)..........
20920 61 74 61 6e 32 28 78 2c 20 73 71 72 74 28 31 20 2d 20 78 2a 2a 32 29 29 0d 0a 20 20 20 20 65 6e atan2(x,.sqrt(1.-.x**2))......en
20940 64 0d 0a 20 20 20 20 64 65 66 20 4d 61 74 68 2e 61 63 6f 73 28 78 29 0d 0a 20 20 20 20 20 20 20 d......def.Math.acos(x).........
20960 20 61 74 61 6e 32 28 73 71 72 74 28 31 20 2d 20 78 2a 2a 32 29 2c 20 78 29 0d 0a 20 20 20 20 65 .atan2(sqrt(1.-.x**2),.x)......e
20980 6e 64 0d 0a 20 20 20 20 64 65 66 20 4d 61 74 68 2e 61 74 61 6e 28 78 29 0d 0a 20 20 20 20 20 20 nd......def.Math.atan(x)........
209a0 20 20 61 74 61 6e 32 28 78 2c 20 31 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 ..atan2(x,.1)......end......def.
209c0 4d 61 74 68 2e 73 69 6e 68 28 78 29 0d 0a 20 20 20 20 20 20 20 20 28 65 78 70 28 78 29 20 2d 20 Math.sinh(x)..........(exp(x).-.
209e0 65 78 70 28 2d 78 29 29 20 2f 20 32 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 4d exp(-x))./.2......end......def.M
20a00 61 74 68 2e 63 6f 73 68 28 78 29 0d 0a 20 20 20 20 20 20 20 20 28 65 78 70 28 78 29 20 2b 20 65 ath.cosh(x)..........(exp(x).+.e
20a20 78 70 28 2d 78 29 29 20 2f 20 32 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 4d 61 xp(-x))./.2......end......def.Ma
20a40 74 68 2e 74 61 6e 68 28 78 29 0d 0a 20 20 20 20 20 20 20 20 73 69 6e 68 28 78 29 20 2f 20 63 6f th.tanh(x)..........sinh(x)./.co
20a60 73 68 28 78 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 68 65 20 73 75 70 sh(x)......end..end....#.The.sup
20a80 70 6f 72 74 20 66 6f 72 20 43 6f 6d 70 6c 65 78 20 6e 75 6d 62 65 72 73 20 69 73 20 6e 6f 74 20 port.for.Complex.numbers.is.not.
20aa0 62 75 69 6c 74 2d 69 6e 0d 0a 79 20 3d 20 4d 61 74 68 2e 61 63 6f 73 28 33 2e 37 29 0d 0a 23 3d built-in..y.=.Math.acos(3.7)..#=
20ac0 3e 20 69 6e 20 60 73 71 72 74 27 3a 20 73 71 75 61 72 65 20 72 6f 6f 74 20 66 6f 72 20 6e 65 67 >.in.`sqrt':.square.root.for.neg
20ae0 61 74 69 76 65 20 6e 75 6d 62 65 72 20 28 41 72 67 75 6d 65 6e 74 45 72 72 6f 72 29 0d 0a 0d 0a ative.number.(ArgumentError)....
20b00 23 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 #.There.is.an.implementation.of.
20b20 43 6f 6d 70 6c 65 78 20 6e 75 6d 62 65 72 73 20 69 6e 20 27 63 6f 6d 70 6c 65 78 2e 72 62 27 20 Complex.numbers.in.'complex.rb'.
20b40 69 6e 20 63 75 72 72 65 6e 74 0d 0a 23 20 52 75 62 79 20 64 69 73 74 72 6f 2c 20 62 75 74 20 69 in.current..#.Ruby.distro,.but.i
20b60 74 20 64 6f 65 73 6e 27 74 20 73 75 70 70 6f 72 74 20 61 74 61 6e 32 20 77 69 74 68 20 63 6f 6d t.doesn't.support.atan2.with.com
20b80 70 6c 65 78 20 61 72 67 73 2c 20 73 6f 20 69 74 20 64 6f 65 73 6e 27 74 0d 0a 23 20 73 6f 6c 76 plex.args,.so.it.doesn't..#.solv
20ba0 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 2e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 e.this.problem.......#.@@PLEAC@@
20bc0 5f 32 2e 31 33 0d 0a 6c 6f 67 5f 65 20 3d 20 4d 61 74 68 2e 6c 6f 67 28 76 61 6c 29 0d 0a 6c 6f _2.13..log_e.=.Math.log(val)..lo
20be0 67 5f 31 30 20 3d 20 4d 61 74 68 2e 6c 6f 67 31 30 28 76 61 6c 29 0d 0a 0d 0a 64 65 66 20 6c 6f g_10.=.Math.log10(val)....def.lo
20c00 67 5f 62 61 73 65 28 62 61 73 65 2c 20 76 61 6c 29 0d 0a 20 20 20 20 4d 61 74 68 2e 6c 6f 67 28 g_base(base,.val)......Math.log(
20c20 76 61 6c 29 2f 4d 61 74 68 2e 6c 6f 67 28 62 61 73 65 29 0d 0a 65 6e 64 0d 0a 0d 0a 61 6e 73 77 val)/Math.log(base)..end....answ
20c40 65 72 20 3d 20 6c 6f 67 5f 62 61 73 65 28 31 30 2c 20 31 30 5f 30 30 30 29 0d 0a 70 75 74 73 20 er.=.log_base(10,.10_000)..puts.
20c60 22 6c 6f 67 31 30 28 31 30 2c 30 30 30 29 20 3d 20 23 7b 61 6e 73 77 65 72 7d 22 0d 0a 0d 0a 0d "log10(10,000).=.#{answer}".....
20c80 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 31 34 0d 0a 72 65 71 75 69 72 65 20 27 6d 61 74 72 .#.@@PLEAC@@_2.14..require.'matr
20ca0 69 78 2e 72 62 27 0d 0a 0d 0a 61 20 3d 20 4d 61 74 72 69 78 5b 5b 33 2c 20 32 2c 20 33 5d 2c 20 ix.rb'....a.=.Matrix[[3,.2,.3],.
20cc0 5b 35 2c 20 39 2c 20 38 5d 5d 0d 0a 62 20 3d 20 4d 61 74 72 69 78 5b 5b 34 2c 20 37 5d 2c 20 5b [5,.9,.8]]..b.=.Matrix[[4,.7],.[
20ce0 39 2c 20 33 5d 2c 20 5b 38 2c 20 31 5d 5d 0d 0a 63 20 3d 20 61 20 2a 20 62 0d 0a 0d 0a 61 2e 72 9,.3],.[8,.1]]..c.=.a.*.b....a.r
20d00 6f 77 5f 73 69 7a 65 0d 0a 61 2e 63 6f 6c 75 6d 6e 5f 73 69 7a 65 0d 0a 0d 0a 63 2e 64 65 74 0d ow_size..a.column_size....c.det.
20d20 0a 61 2e 74 72 61 6e 73 70 6f 73 65 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e .a.transpose......#.@@PLEAC@@_2.
20d40 31 35 0d 0a 72 65 71 75 69 72 65 20 27 63 6f 6d 70 6c 65 78 2e 72 62 27 0d 0a 72 65 71 75 69 72 15..require.'complex.rb'..requir
20d60 65 20 27 72 61 74 69 6f 6e 61 6c 2e 72 62 27 0d 0a 0d 0a 61 20 3d 20 43 6f 6d 70 6c 65 78 28 33 e.'rational.rb'....a.=.Complex(3
20d80 2c 20 35 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 33 20 2b 20 35 69 0d 0a 62 20 3d 20 ,.5)..............#.3.+.5i..b.=.
20da0 43 6f 6d 70 6c 65 78 28 32 2c 20 2d 32 29 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 32 20 2d Complex(2,.-2).............#.2.-
20dc0 20 32 69 0d 0a 70 75 74 73 20 22 63 20 3d 20 23 7b 61 2a 62 7d 22 0d 0a 0d 0a 63 20 3d 20 61 20 .2i..puts."c.=.#{a*b}"....c.=.a.
20de0 2a 20 62 0d 0a 64 20 3d 20 33 20 2b 20 34 2a 43 6f 6d 70 6c 65 78 3a 3a 49 0d 0a 0d 0a 70 72 69 *.b..d.=.3.+.4*Complex::I....pri
20e00 6e 74 66 20 22 73 71 72 74 28 23 7b 64 7d 29 20 3d 20 25 73 5c 6e 22 2c 20 4d 61 74 68 2e 73 71 ntf."sqrt(#{d}).=.%s\n",.Math.sq
20e20 72 74 28 64 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 31 36 0d 0a 6e 75 6d rt(d)......#.@@PLEAC@@_2.16..num
20e40 62 65 72 20 3d 20 68 65 78 61 64 65 63 69 6d 61 6c 2e 68 65 78 0d 0a 6e 75 6d 62 65 72 20 3d 20 ber.=.hexadecimal.hex..number.=.
20e60 6f 63 74 61 6c 2e 6f 63 74 0d 0a 0d 0a 70 72 69 6e 74 20 22 47 69 6d 6d 65 20 61 20 6e 75 6d 62 octal.oct....print."Gimme.a.numb
20e80 65 72 20 69 6e 20 64 65 63 69 6d 61 6c 2c 20 6f 63 74 61 6c 2c 20 6f 72 20 68 65 78 3a 20 22 0d er.in.decimal,.octal,.or.hex:.".
20ea0 0a 6e 75 6d 20 3d 20 67 65 74 73 2e 63 68 6f 6d 70 0d 0a 65 78 69 74 20 75 6e 6c 65 73 73 20 64 .num.=.gets.chomp..exit.unless.d
20ec0 65 66 69 6e 65 64 3f 28 6e 75 6d 29 0d 0a 6e 75 6d 20 3d 20 6e 75 6d 2e 6f 63 74 20 69 66 20 6e efined?(num)..num.=.num.oct.if.n
20ee0 75 6d 20 3d 7e 20 2f 5e 30 2f 20 20 23 20 64 6f 65 73 20 62 6f 74 68 20 6f 63 74 20 61 6e 64 20 um.=~./^0/..#.does.both.oct.and.
20f00 68 65 78 0d 0a 70 72 69 6e 74 66 20 22 25 64 20 25 78 20 25 6f 5c 6e 22 2c 20 6e 75 6d 2c 20 6e hex..printf."%d.%x.%o\n",.num,.n
20f20 75 6d 2c 20 6e 75 6d 0d 0a 0d 0a 70 72 69 6e 74 20 22 45 6e 74 65 72 20 66 69 6c 65 20 70 65 72 um,.num....print."Enter.file.per
20f40 6d 69 73 73 69 6f 6e 20 69 6e 20 6f 63 74 61 6c 3a 20 22 0d 0a 70 65 72 6d 69 73 73 69 6f 6e 73 mission.in.octal:."..permissions
20f60 20 3d 20 67 65 74 73 2e 63 68 6f 6d 70 0d 0a 72 61 69 73 65 20 22 45 78 69 74 69 6e 67 20 2e 2e .=.gets.chomp..raise."Exiting...
20f80 2e 5c 6e 22 20 75 6e 6c 65 73 73 20 64 65 66 69 6e 65 64 3f 28 70 65 72 6d 69 73 73 69 6f 6e 73 .\n".unless.defined?(permissions
20fa0 29 0d 0a 70 75 74 73 20 22 54 68 65 20 64 65 63 69 6d 61 6c 20 76 61 6c 75 65 20 69 73 20 23 7b )..puts."The.decimal.value.is.#{
20fc0 70 65 72 6d 69 73 73 69 6f 6e 73 2e 6f 63 74 7d 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 permissions.oct}"......#.@@PLEAC
20fe0 40 40 5f 32 2e 31 37 0d 0a 64 65 66 20 63 6f 6d 6d 69 66 79 28 6e 29 0d 0a 20 20 20 20 6e 2e 74 @@_2.17..def.commify(n)......n.t
21000 6f 5f 73 20 3d 7e 20 2f 28 5b 5e 5c 2e 5d 2a 29 28 5c 2e 2e 2a 29 3f 2f 0d 0a 20 20 20 20 69 6e o_s.=~./([^\.]*)(\..*)?/......in
21020 74 2c 20 64 65 63 20 3d 20 24 31 2e 72 65 76 65 72 73 65 2c 20 24 32 20 3f 20 24 32 20 3a 20 22 t,.dec.=.$1.reverse,.$2.?.$2.:."
21040 22 0d 0a 20 20 20 20 77 68 69 6c 65 20 69 6e 74 2e 67 73 75 62 21 28 2f 28 2c 7c 5c 2e 7c 5e 29 "......while.int.gsub!(/(,|\.|^)
21060 28 5c 64 7b 33 7d 29 28 5c 64 29 2f 2c 20 27 5c 31 5c 32 2c 5c 33 27 29 0d 0a 20 20 20 20 65 6e (\d{3})(\d)/,.'\1\2,\3')......en
21080 64 0d 0a 20 20 20 20 69 6e 74 2e 72 65 76 65 72 73 65 20 2b 20 64 65 63 0d 0a 65 6e 64 0d 0a 0d d......int.reverse.+.dec..end...
210a0 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 31 38 0d 0a 70 72 69 6e 74 66 20 22 49 74 20 ...#.@@PLEAC@@_2.18..printf."It.
210c0 74 6f 6f 6b 20 25 64 20 68 6f 75 72 25 73 5c 6e 22 2c 20 74 69 6d 65 2c 20 74 69 6d 65 20 3d 3d took.%d.hour%s\n",.time,.time.==
210e0 20 31 20 3f 20 22 22 20 3a 20 22 73 22 0d 0a 0d 0a 23 20 64 75 6e 6e 6f 20 69 66 20 61 6e 20 65 .1.?."".:."s"....#.dunno.if.an.e
21100 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 4c 69 6e 67 75 61 3a 3a 45 4e 3a 3a 49 6e 66 6c 65 63 74 quivalent.to.Lingua::EN::Inflect
21120 20 65 78 69 73 74 73 2e 2e 2e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 2e 31 39 .exists.........#.@@PLEAC@@_2.19
21140 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#-----------------------------
21160 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 0d 0a 23 20 62 69 67 66 61 63 74 20 2d 20 63 ..#!/usr/bin/ruby..#.bigfact.-.c
21180 61 6c 63 75 6c 61 74 69 6e 67 20 70 72 69 6d 65 20 66 61 63 74 6f 72 73 0d 0a 64 65 66 20 66 61 alculating.prime.factors..def.fa
211a0 63 74 6f 72 69 7a 65 28 6f 72 69 67 29 0d 0a 20 20 20 20 66 61 63 74 6f 72 73 20 3d 20 7b 7d 0d ctorize(orig)......factors.=.{}.
211c0 0a 20 20 20 20 66 61 63 74 6f 72 73 2e 64 65 66 61 75 6c 74 20 3d 20 30 20 20 20 20 20 23 20 72 .....factors.default.=.0.....#.r
211e0 65 74 75 72 6e 20 30 20 69 6e 73 74 65 61 64 20 6e 69 6c 20 69 66 20 6b 65 79 20 6e 6f 74 20 66 eturn.0.instead.nil.if.key.not.f
21200 6f 75 6e 64 20 69 6e 20 68 61 73 68 0d 0a 20 20 20 20 6e 20 3d 20 6f 72 69 67 0d 0a 20 20 20 20 ound.in.hash......n.=.orig......
21220 69 20 3d 20 32 0d 0a 20 20 20 20 73 71 69 20 3d 20 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 i.=.2......sqi.=.4..............
21240 20 20 20 23 20 73 71 75 61 72 65 20 6f 66 20 69 0d 0a 20 20 20 20 77 68 69 6c 65 20 73 71 69 20 ...#.square.of.i......while.sqi.
21260 3c 3d 20 6e 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 6e 2e 6d 6f 64 75 6c 6f 28 <=.n.do..........while.n.modulo(
21280 69 29 20 3d 3d 20 30 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 2f 3d 20 69 0d 0a i).==.0.do..............n./=.i..
212a0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 63 74 6f 72 73 5b 69 5d 20 2b 3d 20 31 0d 0a 20 20 20 ............factors[i].+=.1.....
212c0 20 20 20 20 20 20 20 20 20 23 20 70 75 74 73 20 22 46 6f 75 6e 64 20 66 61 63 74 6f 72 20 23 7b .........#.puts."Found.factor.#{
212e0 69 7d 22 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 77 65 20 74 i}"..........end..........#.we.t
21300 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 6f 66 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 28 ake.advantage.of.the.fact.that.(
21320 69 20 2b 31 29 2a 2a 32 20 3d 20 69 2a 2a 32 20 2b 20 32 2a 69 20 2b 31 0d 0a 20 20 20 20 20 20 i.+1)**2.=.i**2.+.2*i.+1........
21340 20 20 73 71 69 20 2b 3d 20 32 20 2a 20 69 20 2b 20 31 0d 0a 20 20 20 20 20 20 20 20 69 20 2b 3d ..sqi.+=.2.*.i.+.1..........i.+=
21360 20 31 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 69 66 20 28 6e 20 21 3d 20 31 29 20 26 .1......end........if.(n.!=.1).&
21380 26 20 28 6e 20 21 3d 20 6f 72 69 67 29 0d 0a 20 20 20 20 20 20 20 20 66 61 63 74 6f 72 73 5b 6e &.(n.!=.orig)..........factors[n
213a0 5d 20 2b 3d 20 31 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 66 61 63 74 6f 72 73 0d 0a 65 6e ].+=.1......end......factors..en
213c0 64 0d 0a 0d 0a 64 65 66 20 70 72 69 6e 74 66 61 63 74 6f 72 68 61 73 68 28 6f 72 69 67 2c 20 66 d....def.printfactorhash(orig,.f
213e0 61 63 74 6f 72 63 6f 75 6e 74 29 0d 0a 20 20 20 20 70 72 69 6e 74 20 66 6f 72 6d 61 74 28 22 25 actorcount)......print.format("%
21400 2d 31 30 64 20 22 2c 20 6f 72 69 67 29 0d 0a 20 20 20 20 69 66 20 66 61 63 74 6f 72 63 6f 75 6e -10d.",.orig)......if.factorcoun
21420 74 2e 6c 65 6e 67 74 68 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 50 52 t.length.==.0..........print."PR
21440 49 4d 45 22 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 73 6f 72 74 73 20 IME"......else..........#.sorts.
21460 61 66 74 65 72 20 6e 75 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 74 68 65 20 68 61 73 68 20 6b after.number,.because.the.hash.k
21480 65 79 73 20 61 72 65 20 6e 75 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 66 61 63 74 6f 72 63 eys.are.numbers..........factorc
214a0 6f 75 6e 74 2e 73 6f 72 74 2e 65 61 63 68 20 7b 20 7c 66 61 63 74 6f 72 2c 65 78 70 6f 6e 65 6e ount.sort.each.{.|factor,exponen
214c0 74 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 66 61 63 74 6f 72 0d 0a 20 20 t|..............print.factor....
214e0 20 20 20 20 20 20 20 20 20 20 69 66 20 65 78 70 6f 6e 65 6e 74 20 3e 20 31 0d 0a 20 20 20 20 20 ..........if.exponent.>.1.......
21500 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 2a 2a 22 2c 20 65 78 70 6f 6e 65 6e 74 0d ...........print."**",.exponent.
21520 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .............end..............pr
21540 69 6e 74 20 22 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 int."."..........}......end.....
21560 20 70 75 74 73 0d 0a 65 6e 64 0d 0a 0d 0a 66 6f 72 20 61 72 67 20 69 6e 20 41 52 47 56 0d 0a 20 .puts..end....for.arg.in.ARGV...
21580 20 20 20 6e 20 3d 20 61 72 67 2e 74 6f 5f 69 0d 0a 20 20 20 20 6d 66 61 63 74 6f 72 73 20 3d 20 ...n.=.arg.to_i......mfactors.=.
215a0 66 61 63 74 6f 72 69 7a 65 28 6e 29 0d 0a 20 20 20 20 70 72 69 6e 74 66 61 63 74 6f 72 68 61 73 factorize(n)......printfactorhas
215c0 68 28 6e 2c 20 6d 66 61 63 74 6f 72 73 29 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d h(n,.mfactors)..end..#----------
215e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 -------------------......#.@@PLE
21600 41 43 40 40 5f 33 2e 30 0d 0a 70 75 74 73 20 54 69 6d 65 2e 6e 6f 77 0d 0a 0d 0a 70 72 69 6e 74 AC@@_3.0..puts.Time.now....print
21620 20 22 54 6f 64 61 79 20 69 73 20 64 61 79 20 22 2c 20 54 69 6d 65 2e 6e 6f 77 2e 79 64 61 79 2c ."Today.is.day.",.Time.now.yday,
21640 20 22 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 5c 6e 22 0d 0a 70 72 69 6e .".of.the.current.year.\n"..prin
21660 74 20 22 54 6f 64 61 79 20 69 73 20 64 61 79 20 22 2c 20 54 69 6d 65 2e 6e 6f 77 2e 64 61 79 2c t."Today.is.day.",.Time.now.day,
21680 20 22 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 5c 6e 22 0d 0a 0d 0a 0d .".of.the.current.month.\n".....
216a0 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 33 2e 31 0d 0a 64 61 79 2c 20 6d 6f 6e 74 68 2c 20 79 65 .#.@@PLEAC@@_3.1..day,.month,.ye
216c0 61 72 20 3d 20 54 69 6d 65 2e 6e 6f 77 2e 64 61 79 2c 20 54 69 6d 65 2e 6e 6f 77 2e 6d 6f 6e 74 ar.=.Time.now.day,.Time.now.mont
216e0 68 2c 20 54 69 6d 65 2e 6e 6f 77 2e 79 65 61 72 0d 0a 23 20 6f 72 0d 0a 64 61 79 2c 20 6d 6f 6e h,.Time.now.year..#.or..day,.mon
21700 74 68 2c 20 79 65 61 72 20 3d 20 54 69 6d 65 2e 6e 6f 77 2e 74 6f 5f 61 5b 33 2e 2e 35 5d 0d 0a th,.year.=.Time.now.to_a[3..5]..
21720 0d 0a 74 6c 20 3d 20 54 69 6d 65 2e 6e 6f 77 2e 6c 6f 63 61 6c 74 69 6d 65 0d 0a 70 72 69 6e 74 ..tl.=.Time.now.localtime..print
21740 66 28 22 54 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 20 69 73 20 25 30 34 64 20 25 30 32 64 f("The.current.date.is.%04d.%02d
21760 20 25 30 32 64 5c 6e 22 2c 20 74 6c 2e 79 65 61 72 2c 20 74 6c 2e 6d 6f 6e 74 68 2c 20 74 6c 2e .%02d\n",.tl.year,.tl.month,.tl.
21780 64 61 79 29 0d 0a 0d 0a 54 69 6d 65 2e 6e 6f 77 2e 6c 6f 63 61 6c 74 69 6d 65 2e 73 74 72 66 74 day)....Time.now.localtime.strft
217a0 69 6d 65 28 22 25 59 2d 25 6d 2d 25 64 22 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 ime("%Y-%m-%d")......#.@@PLEAC@@
217c0 5f 33 2e 32 0d 0a 54 69 6d 65 2e 6c 6f 63 61 6c 28 79 65 61 72 2c 20 6d 6f 6e 74 68 2c 20 64 61 _3.2..Time.local(year,.month,.da
217e0 79 2c 20 68 6f 75 72 2c 20 6d 69 6e 75 74 65 2c 20 73 65 63 6f 6e 64 29 2e 74 76 5f 73 65 63 0d y,.hour,.minute,.second).tv_sec.
21800 0a 54 69 6d 65 2e 67 6d 28 79 65 61 72 2c 20 6d 6f 6e 74 68 2c 20 64 61 79 2c 20 68 6f 75 72 2c .Time.gm(year,.month,.day,.hour,
21820 20 6d 69 6e 75 74 65 2c 20 73 65 63 6f 6e 64 29 2e 74 76 5f 73 65 63 0d 0a 0d 0a 0d 0a 23 20 40 .minute,.second).tv_sec......#.@
21840 40 50 4c 45 41 43 40 40 5f 33 2e 33 0d 0a 73 65 63 2c 20 6d 69 6e 2c 20 68 6f 75 72 2c 20 64 61 @PLEAC@@_3.3..sec,.min,.hour,.da
21860 79 2c 20 6d 6f 6e 74 68 2c 20 79 65 61 72 2c 20 77 64 61 79 2c 20 79 64 61 79 2c 20 69 73 64 73 y,.month,.year,.wday,.yday,.isds
21880 74 2c 20 7a 6f 6e 65 20 3d 20 54 69 6d 65 2e 61 74 28 65 70 6f 63 68 5f 73 65 63 73 29 2e 74 6f t,.zone.=.Time.at(epoch_secs).to
218a0 5f 61 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 33 2e 34 0d 0a 77 68 65 6e 5f 20 3d _a......#.@@PLEAC@@_3.4..when_.=
218c0 20 6e 6f 77 20 2b 20 64 69 66 66 65 72 65 6e 63 65 20 20 20 20 20 20 20 20 20 23 20 6e 6f 77 20 .now.+.difference.........#.now.
218e0 2d 3e 20 54 69 6d 65 20 3b 20 64 69 66 66 65 72 65 6e 63 65 20 2d 3e 20 4e 75 6d 65 72 69 63 20 ->.Time.;.difference.->.Numeric.
21900 28 64 65 6c 74 61 20 69 6e 20 73 65 63 6f 6e 64 73 29 0d 0a 74 68 65 6e 5f 20 3d 20 6e 6f 77 20 (delta.in.seconds)..then_.=.now.
21920 2d 20 64 69 66 66 65 72 65 6e 63 65 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 33 2e -.difference......#.@@PLEAC@@_3.
21940 35 0d 0a 62 72 65 65 20 3d 20 33 36 31 35 33 35 37 32 35 0d 0a 6e 61 74 20 20 3d 20 20 39 36 32 5..bree.=.361535725..nat..=..962
21960 30 31 39 35 30 0d 0a 0d 0a 64 69 66 66 65 72 65 6e 63 65 20 3d 20 62 72 65 65 20 2d 20 6e 61 74 01950....difference.=.bree.-.nat
21980 0d 0a 70 75 74 73 20 22 54 68 65 72 65 20 77 65 72 65 20 23 7b 64 69 66 66 65 72 65 6e 63 65 7d ..puts."There.were.#{difference}
219a0 20 73 65 63 6f 6e 64 73 20 62 65 74 77 65 65 6e 20 4e 61 74 20 61 6e 64 20 42 72 65 65 22 0d 0a .seconds.between.Nat.and.Bree"..
219c0 0d 0a 73 65 63 6f 6e 64 73 20 20 20 20 3d 20 20 64 69 66 66 65 72 65 6e 63 65 20 25 20 36 30 0d ..seconds....=..difference.%.60.
219e0 0a 64 69 66 66 65 72 65 6e 63 65 20 3d 20 28 64 69 66 66 65 72 65 6e 63 65 20 2d 20 73 65 63 6f .difference.=.(difference.-.seco
21a00 6e 64 73 29 20 2f 20 36 30 0d 0a 6d 69 6e 75 74 65 73 20 20 20 20 3d 20 20 64 69 66 66 65 72 65 nds)./.60..minutes....=..differe
21a20 6e 63 65 20 25 20 36 30 0d 0a 64 69 66 66 65 72 65 6e 63 65 20 3d 20 28 64 69 66 66 65 72 65 6e nce.%.60..difference.=.(differen
21a40 63 65 20 2d 20 6d 69 6e 75 74 65 73 29 20 2f 20 36 30 0d 0a 68 6f 75 72 73 20 20 20 20 20 20 3d ce.-.minutes)./.60..hours......=
21a60 20 20 64 69 66 66 65 72 65 6e 63 65 20 25 20 32 34 0d 0a 64 69 66 66 65 72 65 6e 63 65 20 3d 20 ..difference.%.24..difference.=.
21a80 28 64 69 66 66 65 72 65 6e 63 65 20 2d 20 68 6f 75 72 73 29 20 20 20 2f 20 32 34 0d 0a 64 61 79 (difference.-.hours).../.24..day
21aa0 73 20 20 20 20 20 20 20 3d 20 20 64 69 66 66 65 72 65 6e 63 65 20 25 20 37 0d 0a 77 65 65 6b 73 s.......=..difference.%.7..weeks
21ac0 20 20 20 20 20 20 3d 20 28 64 69 66 66 65 72 65 6e 63 65 20 2d 20 64 61 79 73 29 20 20 20 20 2f ......=.(difference.-.days)..../
21ae0 20 20 37 0d 0a 0d 0a 70 75 74 73 20 22 28 23 7b 77 65 65 6b 73 7d 20 77 65 65 6b 73 2c 20 23 7b ..7....puts."(#{weeks}.weeks,.#{
21b00 64 61 79 73 7d 20 64 61 79 73 2c 20 23 7b 68 6f 75 72 73 7d 3a 23 7b 6d 69 6e 75 74 65 73 7d 3a days}.days,.#{hours}:#{minutes}:
21b20 23 7b 73 65 63 6f 6e 64 73 7d 29 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 33 2e #{seconds})"......#.@@PLEAC@@_3.
21b40 36 0d 0a 6d 6f 6e 74 68 64 61 79 2c 20 77 65 65 6b 64 61 79 2c 20 79 65 61 72 64 61 79 20 3d 20 6..monthday,.weekday,.yearday.=.
21b60 64 61 74 65 2e 6d 64 61 79 2c 20 64 61 74 65 2e 77 64 61 79 2c 20 64 61 74 65 2e 79 64 61 79 0d date.mday,.date.wday,.date.yday.
21b80 0a 0d 0a 23 20 41 46 41 49 4b 20 74 68 65 20 77 65 65 6b 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f ...#.AFAIK.the.week.number.is.no
21ba0 74 20 6a 75 73 74 20 61 20 64 69 76 69 73 69 6f 6e 20 73 69 6e 63 65 20 77 65 65 6b 20 62 6f 75 t.just.a.division.since.week.bou
21bc0 6e 64 61 72 69 65 73 20 61 72 65 20 6f 6e 20 73 75 6e 64 61 79 73 0d 0a 77 65 65 6b 6e 75 6d 20 ndaries.are.on.sundays..weeknum.
21be0 3d 20 64 2e 73 74 72 66 74 69 6d 65 28 22 25 55 22 29 2e 74 6f 5f 69 20 2b 20 31 0d 0a 0d 0a 79 =.d.strftime("%U").to_i.+.1....y
21c00 65 61 72 20 20 3d 20 31 39 38 31 0d 0a 6d 6f 6e 74 68 20 3d 20 22 6a 75 6e 22 20 20 20 20 20 20 ear..=.1981..month.=."jun"......
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6f 72 20 60 36 27 20 69 66 20 79 6f 75 20 77 ...............#.or.`6'.if.you.w
21c40 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 61 20 62 72 6f 6b 65 6e 20 6c 61 6e 67 75 61 67 65 ant.to.emulate.a.broken.language
21c60 0d 0a 64 61 79 20 20 20 3d 20 31 36 0d 0a 74 20 3d 20 54 69 6d 65 2e 6d 6b 74 69 6d 65 28 79 65 ..day...=.16..t.=.Time.mktime(ye
21c80 61 72 2c 20 6d 6f 6e 74 68 2c 20 64 61 79 29 0d 0a 70 72 69 6e 74 20 22 23 7b 6d 6f 6e 74 68 7d ar,.month,.day)..print."#{month}
21ca0 2f 23 7b 64 61 79 7d 2f 23 7b 79 65 61 72 7d 20 77 61 73 20 61 20 22 2c 20 74 2e 73 74 72 66 74 /#{day}/#{year}.was.a.",.t.strft
21cc0 69 6d 65 28 22 25 41 22 29 2c 20 22 5c 6e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 ime("%A"),."\n"......#.@@PLEAC@@
21ce0 5f 33 2e 37 0d 0a 79 79 79 79 2c 20 6d 6d 2c 20 64 64 20 3d 20 24 31 2c 20 24 32 2c 20 24 33 20 _3.7..yyyy,.mm,.dd.=.$1,.$2,.$3.
21d00 69 66 20 22 31 39 39 38 2d 30 36 2d 32 35 22 20 3d 7e 20 2f 28 5c 64 2b 29 2d 28 5c 64 2b 29 2d if."1998-06-25".=~./(\d+)-(\d+)-
21d20 28 5c 64 2b 29 2f 0d 0a 0d 0a 65 70 6f 63 68 5f 73 65 63 6f 6e 64 73 20 3d 20 54 69 6d 65 2e 6d (\d+)/....epoch_seconds.=.Time.m
21d40 6b 74 69 6d 65 28 79 79 79 79 2c 20 6d 6d 2c 20 64 64 29 2e 74 76 5f 73 65 63 0d 0a 0d 0a 23 20 ktime(yyyy,.mm,.dd).tv_sec....#.
21d60 64 75 6e 6e 6f 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 44 61 74 65 3a 3a 4d 61 6e dunno.an.equivalent.to.Date::Man
21d80 69 70 23 50 61 72 73 65 44 61 74 65 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 33 2e ip#ParseDate......#.@@PLEAC@@_3.
21da0 38 0d 0a 73 74 72 69 6e 67 20 3d 20 54 69 6d 65 2e 61 74 28 65 70 6f 63 68 5f 73 65 63 73 29 0d 8..string.=.Time.at(epoch_secs).
21dc0 0a 54 69 6d 65 2e 61 74 28 31 32 33 34 35 36 37 38 39 30 29 2e 67 6d 74 69 6d 65 20 20 20 20 20 .Time.at(1234567890).gmtime.....
21de0 20 20 20 23 20 67 69 76 65 73 3a 20 46 72 69 20 46 65 62 20 31 33 20 32 33 3a 33 31 3a 33 30 20 ...#.gives:.Fri.Feb.13.23:31:30.
21e00 55 54 43 20 32 30 30 39 0d 0a 0d 0a 74 69 6d 65 20 3d 20 54 69 6d 65 2e 6d 6b 74 69 6d 65 28 31 UTC.2009....time.=.Time.mktime(1
21e20 39 37 33 2c 20 22 6a 61 6e 22 2c 20 31 38 2c 20 33 2c 20 34 35 2c 20 35 30 29 0d 0a 70 72 69 6e 973,."jan",.18,.3,.45,.50)..prin
21e40 74 20 22 49 6e 20 6c 6f 63 61 6c 74 69 6d 65 20 69 74 20 67 69 76 65 73 3a 20 22 2c 20 74 69 6d t."In.localtime.it.gives:.",.tim
21e60 65 2e 6c 6f 63 61 6c 74 69 6d 65 2c 20 22 5c 6e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 e.localtime,."\n"......#.@@PLEAC
21e80 40 40 5f 33 2e 39 0d 0a 23 20 52 75 62 79 20 70 72 6f 76 69 64 65 73 20 6d 69 63 72 6f 2d 73 65 @@_3.9..#.Ruby.provides.micro-se
21ea0 63 6f 6e 64 73 20 69 6e 20 54 69 6d 65 20 6f 62 6a 65 63 74 0d 0a 54 69 6d 65 2e 6e 6f 77 2e 75 conds.in.Time.object..Time.now.u
21ec0 73 65 63 0d 0a 0d 0a 23 20 52 75 62 79 20 67 69 76 65 73 20 74 68 65 20 73 65 63 6f 6e 64 73 20 sec....#.Ruby.gives.the.seconds.
21ee0 69 6e 20 66 6c 6f 61 74 69 6e 67 20 66 6f 72 6d 61 74 20 77 68 65 6e 20 73 75 62 73 74 72 61 63 in.floating.format.when.substrac
21f00 74 69 6e 67 20 74 77 6f 20 54 69 6d 65 20 6f 62 6a 65 63 74 73 0d 0a 62 65 66 6f 72 65 20 3d 20 ting.two.Time.objects..before.=.
21f20 54 69 6d 65 2e 6e 6f 77 0d 0a 6c 69 6e 65 20 3d 20 67 65 74 73 0d 0a 65 6c 61 70 73 65 64 20 3d Time.now..line.=.gets..elapsed.=
21f40 20 54 69 6d 65 2e 6e 6f 77 20 2d 20 62 65 66 6f 72 65 0d 0a 70 75 74 73 20 22 59 6f 75 20 74 6f .Time.now.-.before..puts."You.to
21f60 6f 6b 20 23 7b 65 6c 61 70 73 65 64 7d 20 73 65 63 6f 6e 64 73 2e 22 0d 0a 0d 0a 23 20 4f 6e 20 ok.#{elapsed}.seconds."....#.On.
21f80 6d 79 20 43 65 6c 65 72 6f 6e 2d 34 30 30 20 77 69 74 68 20 4c 69 6e 75 78 2d 32 2e 32 2e 31 39 my.Celeron-400.with.Linux-2.2.19
21fa0 2d 31 34 6d 64 6b 2c 20 61 76 65 72 61 67 65 20 66 6f 72 20 74 68 72 65 65 20 65 78 65 63 73 20 -14mdk,.average.for.three.execs.
21fc0 61 72 65 3a 0d 0a 23 20 20 20 54 68 69 73 20 52 75 62 79 20 76 65 72 73 69 6f 6e 3a 20 20 20 20 are:..#...This.Ruby.version:....
21fe0 20 20 20 61 76 65 72 61 67 65 20 30 2e 30 30 33 32 31 20 73 65 63 0d 0a 23 20 20 20 43 6f 6f 6b ...average.0.00321.sec..#...Cook
22000 62 6f 6f 6b 27 73 20 50 65 72 6c 20 76 65 72 73 69 6f 6e 3a 20 61 76 65 72 61 67 65 20 30 2e 30 book's.Perl.version:.average.0.0
22020 30 39 38 31 20 73 65 63 0d 0a 73 69 7a 65 20 3d 20 35 30 30 0d 0a 6e 75 6d 62 65 72 5f 6f 66 5f 0981.sec..size.=.500..number_of_
22040 74 69 6d 65 73 20 3d 20 31 30 30 0d 0a 74 6f 74 61 6c 5f 74 69 6d 65 20 3d 20 30 0d 0a 6e 75 6d times.=.100..total_time.=.0..num
22060 62 65 72 5f 6f 66 5f 74 69 6d 65 73 2e 74 69 6d 65 73 20 7b 0d 0a 20 20 20 20 23 20 70 6f 70 75 ber_of_times.times.{......#.popu
22080 6c 61 74 65 20 61 72 72 61 79 0d 0a 20 20 20 20 61 72 72 61 79 20 3d 20 5b 5d 0d 0a 20 20 20 20 late.array......array.=.[]......
220a0 73 69 7a 65 2e 74 69 6d 65 73 20 7b 20 61 72 72 61 79 20 3c 3c 20 72 61 6e 64 20 7d 0d 0a 20 20 size.times.{.array.<<.rand.}....
220c0 20 20 23 20 73 6f 72 74 20 69 74 0d 0a 20 20 20 20 62 65 67 69 6e 5f 20 3d 20 54 69 6d 65 2e 6e ..#.sort.it......begin_.=.Time.n
220e0 6f 77 0d 0a 20 20 20 20 61 72 72 61 79 2e 73 6f 72 74 21 0d 0a 20 20 20 20 74 69 6d 65 20 3d 20 ow......array.sort!......time.=.
22100 54 69 6d 65 2e 6e 6f 77 20 2d 20 62 65 67 69 6e 5f 0d 0a 20 20 20 20 74 6f 74 61 6c 5f 74 69 6d Time.now.-.begin_......total_tim
22120 65 20 2b 3d 20 74 69 6d 65 0d 0a 7d 0d 0a 70 72 69 6e 74 66 20 22 4f 6e 20 61 76 65 72 61 67 65 e.+=.time..}..printf."On.average
22140 2c 20 73 6f 72 74 69 6e 67 20 25 64 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 73 20 74 61 6b 65 ,.sorting.%d.random.numbers.take
22160 73 20 25 2e 35 66 20 73 65 63 6f 6e 64 73 5c 6e 22 2c 0d 0a 20 20 20 20 73 69 7a 65 2c 20 28 74 s.%.5f.seconds\n",......size,.(t
22180 6f 74 61 6c 5f 74 69 6d 65 2f 46 6c 6f 61 74 28 6e 75 6d 62 65 72 5f 6f 66 5f 74 69 6d 65 73 29 otal_time/Float(number_of_times)
221a0 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 33 2e 31 30 0d 0a 73 6c 65 65 70 28 30 )......#.@@PLEAC@@_3.10..sleep(0
221c0 2e 30 30 35 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 52 75 62 .005)......................#.Rub
221e0 79 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 6e 6f 74 20 61 73 20 62 72 6f 6b 65 6e 20 61 73 y.is.definitely.not.as.broken.as
22200 20 50 65 72 6c 20 3a 29 0d 0a 23 20 28 6d 61 79 20 62 65 20 69 6e 74 65 72 72 75 70 74 65 64 20 .Perl.:)..#.(may.be.interrupted.
22220 62 79 20 73 65 6e 64 69 6e 67 20 74 68 65 20 70 72 6f 63 65 73 73 20 61 20 53 49 47 41 4c 52 4d by.sending.the.process.a.SIGALRM
22240 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 33 2e 31 31 0d 0a 23 21 2f 75 73 72 2f )......#.@@PLEAC@@_3.11..#!/usr/
22260 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 68 6f 70 64 65 6c 74 61 20 2d 20 66 65 65 64 20 6d bin/ruby.-w..#.hopdelta.-.feed.m
22280 61 69 6c 20 68 65 61 64 65 72 2c 20 70 72 6f 64 75 63 65 20 6c 69 6e 65 73 0d 0a 23 20 20 20 20 ail.header,.produce.lines..#....
222a0 20 20 20 20 20 20 20 20 73 68 6f 77 69 6e 67 20 64 65 6c 61 79 20 61 74 20 65 61 63 68 20 68 6f ........showing.delay.at.each.ho
222c0 70 2e 0d 0a 72 65 71 75 69 72 65 20 27 74 69 6d 65 27 0d 0a 63 6c 61 73 73 20 4d 61 69 6c 48 6f p...require.'time'..class.MailHo
222e0 70 44 65 6c 74 61 0d 0a 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 6d 61 69 pDelta........def.initialize(mai
22300 6c 29 0d 0a 20 20 20 20 20 20 20 20 40 68 65 61 64 20 3d 20 6d 61 69 6c 2e 67 73 75 62 28 2f 5c l)..........@head.=.mail.gsub(/\
22320 6e 5c 73 2b 2f 2c 27 20 27 29 0d 0a 20 20 20 20 20 20 20 20 40 74 6f 70 6c 69 6e 65 20 3d 20 25 n\s+/,'.')..........@topline.=.%
22340 77 2d 53 65 6e 64 65 72 20 52 65 63 69 70 69 65 6e 74 20 54 69 6d 65 20 44 65 6c 74 61 2d 0d 0a w-Sender.Recipient.Time.Delta-..
22360 20 20 20 20 20 20 20 20 40 73 74 61 72 74 5f 66 72 6f 6d 20 3d 20 6d 61 69 6c 2e 6d 61 74 63 68 ........@start_from.=.mail.match
22380 28 2f 5e 46 72 6f 6d 2e 2a 5c 40 28 5b 5e 5c 73 3e 5d 2a 29 2f 29 5b 31 5d 0d 0a 20 20 20 20 20 (/^From.*\@([^\s>]*)/)[1].......
223a0 20 20 20 40 64 61 74 65 20 3d 20 54 69 6d 65 2e 70 61 72 73 65 28 6d 61 69 6c 2e 6d 61 74 63 68 ...@date.=.Time.parse(mail.match
223c0 28 2f 5e 44 61 74 65 3a 5c 73 2b 28 2e 2a 29 2f 29 5b 31 5d 29 0d 0a 20 20 20 20 65 6e 64 0d 0a (/^Date:\s+(.*)/)[1])......end..
223e0 0d 0a 20 20 20 20 64 65 66 20 6f 75 74 28 6c 69 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 20 22 25 ......def.out(line)..........."%
22400 2d 32 30 2e 32 30 73 20 25 2d 32 30 2e 32 30 73 20 25 2d 32 30 2e 32 30 73 20 20 25 73 22 20 25 -20.20s.%-20.20s.%-20.20s..%s".%
22420 20 6c 69 6e 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 68 6f 70 5f 64 61 .line......end........def.hop_da
22440 74 65 28 64 61 79 29 0d 0a 20 20 20 20 20 20 20 20 64 61 79 2e 73 74 72 66 74 69 6d 65 28 22 25 te(day)..........day.strftime("%
22460 49 3a 25 4d 3a 25 53 20 25 59 2f 25 6d 2f 25 64 22 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 I:%M:%S.%Y/%m/%d")......end.....
22480 20 20 20 64 65 66 20 70 75 74 73 5f 68 6f 70 73 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 6f ...def.puts_hops..........puts.o
224a0 75 74 28 40 74 6f 70 6c 69 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 6f 75 74 28 5b ut(@topline)..........puts.out([
224c0 27 53 74 61 72 74 27 2c 20 40 73 74 61 72 74 5f 66 72 6f 6d 2c 20 68 6f 70 5f 64 61 74 65 28 40 'Start',.@start_from,.hop_date(@
224e0 64 61 74 65 29 2c 27 27 5d 29 0d 0a 20 20 20 20 20 20 20 20 40 68 65 61 64 2e 73 70 6c 69 74 28 date),''])..........@head.split(
22500 2f 5c 6e 2f 29 2e 72 65 76 65 72 73 65 2e 67 72 65 70 28 2f 5e 52 65 63 65 69 76 65 64 3a 2f 29 /\n/).reverse.grep(/^Received:/)
22520 2e 65 61 63 68 20 64 6f 20 7c 68 6f 70 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 6f 70 2e .each.do.|hop|..............hop.
22540 67 73 75 62 21 28 2f 5c 62 6f 6e 20 28 2e 2a 3f 29 20 28 69 64 2e 2a 29 2f 2c 27 3b 20 5c 31 27 gsub!(/\bon.(.*?).(id.*)/,';.\1'
22560 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 63 65 20 3d 20 68 6f 70 2e 6d 61 74 63 )..............whence.=.hop.matc
22580 68 28 2f 3b 5c 73 2b 28 2e 2a 29 24 2f 29 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 h(/;\s+(.*)$/)[1]..............u
225a0 6e 6c 65 73 73 20 77 68 65 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 61 nless.whence..................wa
225c0 72 6e 20 22 42 61 64 20 72 65 63 65 69 76 65 64 20 6c 69 6e 65 3a 20 23 7b 68 6f 70 7d 22 0d 0a rn."Bad.received.line:.#{hop}"..
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20 ................next............
22600 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 72 6f 6d 20 3d 20 24 2b 20 69 66 20 ..end..............from.=.$+.if.
22620 68 6f 70 20 3d 7e 20 2f 66 72 6f 6d 5c 73 2b 28 5c 53 2b 29 7c 5c 28 28 2e 2a 3f 29 5c 29 2f 0d hop.=~./from\s+(\S+)|\((.*?)\)/.
22640 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 20 20 20 3d 20 24 31 20 69 66 20 68 6f 70 20 3d 7e .............by...=.$1.if.hop.=~
22660 20 2f 62 79 5c 73 2b 28 5c 53 2b 5c 2e 5c 53 2b 29 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ./by\s+(\S+\.\S+)/..............
22680 6e 65 78 74 20 75 6e 6c 65 73 73 20 6e 6f 77 20 3d 20 54 69 6d 65 2e 70 61 72 73 65 28 77 68 65 next.unless.now.=.Time.parse(whe
226a0 6e 63 65 29 2e 6c 6f 63 61 6c 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 6c 74 nce).localtime..............delt
226c0 61 20 3d 20 6e 6f 77 20 2d 20 40 64 61 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 74 a.=.now.-.@date..............put
226e0 73 20 6f 75 74 28 5b 66 72 6f 6d 2c 20 62 79 2c 20 68 6f 70 5f 64 61 74 65 28 6e 6f 77 29 2c 20 s.out([from,.by,.hop_date(now),.
22700 68 6f 70 5f 74 69 6d 65 28 64 65 6c 74 61 29 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 hop_time(delta)])..............@
22720 64 61 74 65 20 3d 20 6e 6f 77 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 date.=.now..........end......end
22740 0d 0a 0d 0a 20 20 20 20 64 65 66 20 68 6f 70 5f 74 69 6d 65 28 73 65 63 73 29 0d 0a 20 20 20 20 ........def.hop_time(secs)......
22760 20 20 20 20 73 69 67 6e 20 3d 20 73 65 63 73 20 3c 20 30 20 3f 20 2d 31 20 3a 20 31 0d 0a 20 20 ....sign.=.secs.<.0.?.-1.:.1....
22780 20 20 20 20 20 20 64 61 79 73 2c 20 73 65 63 73 20 3d 20 73 65 63 73 2e 61 62 73 2e 64 69 76 6d ......days,.secs.=.secs.abs.divm
227a0 6f 64 28 36 30 20 2a 20 36 30 20 2a 20 32 34 29 0d 0a 20 20 20 20 20 20 20 20 68 6f 75 72 73 2c od(60.*.60.*.24)..........hours,
227c0 73 65 63 73 20 3d 20 73 65 63 73 2e 61 62 73 2e 64 69 76 6d 6f 64 28 36 30 20 2a 20 36 30 29 0d secs.=.secs.abs.divmod(60.*.60).
227e0 0a 20 20 20 20 20 20 20 20 6d 69 6e 73 2c 20 73 65 63 73 20 3d 20 73 65 63 73 2e 61 62 73 2e 64 .........mins,.secs.=.secs.abs.d
22800 69 76 6d 6f 64 28 36 30 29 0d 0a 20 20 20 20 20 20 20 20 72 74 6e 20 3d 20 20 22 25 33 64 73 22 ivmod(60)..........rtn.=.."%3ds"
22820 20 25 20 5b 73 65 63 73 20 20 2a 20 73 69 67 6e 5d 0d 0a 20 20 20 20 20 20 20 20 72 74 6e 20 3c .%.[secs..*.sign]..........rtn.<
22840 3c 20 22 25 33 64 6d 22 20 25 20 5b 6d 69 6e 73 20 20 2a 20 73 69 67 6e 5d 20 69 66 20 6d 69 6e <."%3dm".%.[mins..*.sign].if.min
22860 73 20 20 21 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 72 74 6e 20 3c 3c 20 22 25 33 64 68 22 20 25 s..!=.0..........rtn.<<."%3dh".%
22880 20 5b 68 6f 75 72 73 20 2a 20 73 69 67 6e 5d 20 69 66 20 68 6f 75 72 73 20 21 3d 20 30 0d 0a 20 .[hours.*.sign].if.hours.!=.0...
228a0 20 20 20 20 20 20 20 72 74 6e 20 3c 3c 20 22 25 33 64 64 22 20 25 20 5b 64 61 79 73 20 20 2a 20 .......rtn.<<."%3dd".%.[days..*.
228c0 73 69 67 6e 5d 20 69 66 20 64 61 79 73 20 20 21 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 72 74 6e sign].if.days..!=.0..........rtn
228e0 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 24 2f 20 3d 20 22 22 0d 0a 6d 61 69 6c 20 ......end..end....$/.=.""..mail.
22900 3d 20 4d 61 69 6c 48 6f 70 44 65 6c 74 61 2e 6e 65 77 28 41 52 47 46 2e 67 65 74 73 29 2e 70 75 =.MailHopDelta.new(ARGF.gets).pu
22920 74 73 5f 68 6f 70 73 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 30 0d 0a 73 69 ts_hops......#.@@PLEAC@@_4.0..si
22940 6e 67 6c 65 5f 6c 65 76 65 6c 20 3d 20 5b 20 22 74 68 69 73 22 2c 20 22 74 68 61 74 22 2c 20 22 ngle_level.=.[."this",."that",."
22960 74 68 65 22 2c 20 22 6f 74 68 65 72 22 20 5d 0d 0a 0d 0a 23 20 52 75 62 79 20 64 69 72 65 63 74 the",."other".]....#.Ruby.direct
22980 6c 79 20 73 75 70 70 6f 72 74 73 20 6e 65 73 74 65 64 20 61 72 72 61 79 73 0d 0a 64 6f 75 62 6c ly.supports.nested.arrays..doubl
229a0 65 5f 6c 65 76 65 6c 20 3d 20 5b 20 22 74 68 69 73 22 2c 20 22 74 68 61 74 22 2c 20 5b 20 22 74 e_level.=.[."this",."that",.[."t
229c0 68 65 22 2c 20 22 6f 74 68 65 72 22 20 5d 20 5d 0d 0a 73 74 69 6c 6c 5f 73 69 6e 67 6c 65 5f 6c he",."other".].]..still_single_l
229e0 65 76 65 6c 20 3d 20 5b 20 22 74 68 69 73 22 2c 20 22 74 68 61 74 22 2c 20 5b 20 22 74 68 65 22 evel.=.[."this",."that",.[."the"
22a00 2c 20 22 6f 74 68 65 72 22 20 5d 20 5d 2e 66 6c 61 74 74 65 6e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 ,."other".].].flatten......#.@@P
22a20 4c 45 41 43 40 40 5f 34 2e 31 0d 0a 61 20 3d 20 5b 20 22 71 75 69 63 6b 22 2c 20 22 62 72 6f 77 LEAC@@_4.1..a.=.[."quick",."brow
22a40 6e 22 2c 20 22 66 6f 78 22 20 5d 0d 0a 61 20 3d 20 25 77 28 57 68 79 20 61 72 65 20 79 6f 75 20 n",."fox".]..a.=.%w(Why.are.you.
22a60 74 65 61 73 69 6e 67 20 6d 65 3f 29 0d 0a 0d 0a 6c 69 6e 65 73 20 3d 20 3c 3c 22 45 4e 44 5f 4f teasing.me?)....lines.=.<<"END_O
22a80 46 5f 48 45 52 45 5f 44 4f 43 22 2e 67 73 75 62 28 2f 5e 5c 73 2a 28 2e 2b 29 2f 2c 20 27 5c 31 F_HERE_DOC".gsub(/^\s*(.+)/,.'\1
22aa0 27 29 0d 0a 20 20 20 20 54 68 65 20 62 6f 79 20 73 74 6f 6f 64 20 6f 6e 20 74 68 65 20 62 75 72 ')......The.boy.stood.on.the.bur
22ac0 6e 69 6e 67 20 64 65 63 6b 2c 0d 0a 20 20 20 20 49 74 20 77 61 73 20 61 73 20 68 6f 74 20 61 73 ning.deck,......It.was.as.hot.as
22ae0 20 67 6c 61 73 73 2e 0d 0a 45 4e 44 5f 4f 46 5f 48 45 52 45 5f 44 4f 43 0d 0a 0d 0a 62 69 67 61 .glass...END_OF_HERE_DOC....biga
22b00 72 72 61 79 20 3d 20 49 4f 2e 72 65 61 64 6c 69 6e 65 73 28 22 6d 79 64 61 74 61 66 69 6c 65 22 rray.=.IO.readlines("mydatafile"
22b20 29 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 6c 7c 20 6c 2e 63 68 6f 6d 70 20 7d 0d 0a 0d 0a 6e 61 6d ).collect.{.|l|.l.chomp.}....nam
22b40 65 20 3d 20 22 47 61 6e 64 61 6c 66 22 0d 0a 62 61 6e 6e 65 72 20 3d 20 25 51 28 53 70 65 61 6b e.=."Gandalf"..banner.=.%Q(Speak
22b60 2c 20 23 7b 6e 61 6d 65 7d 2c 20 61 6e 64 20 77 65 6c 63 6f 6d 65 21 29 0d 0a 0d 0a 68 6f 73 74 ,.#{name},.and.welcome!)....host
22b80 5f 69 6e 66 6f 20 20 3d 20 60 68 6f 73 74 20 23 7b 68 69 73 5f 68 6f 73 74 7d 60 0d 0a 0d 0a 25 _info..=.`host.#{his_host}`....%
22ba0 78 28 70 73 20 23 7b 24 24 7d 29 0d 0a 0d 0a 62 61 6e 6e 65 72 20 3d 20 27 43 6f 73 74 73 20 6f x(ps.#{$$})....banner.=.'Costs.o
22bc0 6e 6c 79 20 24 34 2e 39 35 27 2e 73 70 6c 69 74 28 27 20 27 29 0d 0a 0d 0a 72 61 78 20 3d 20 25 nly.$4.95'.split('.')....rax.=.%
22be0 77 21 20 28 20 29 20 3c 20 3e 20 7b 20 7d 20 5b 20 5d 20 21 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c w!.(.).<.>.{.}.[.].!......#.@@PL
22c00 45 41 43 40 40 5f 34 2e 32 0d 0a 64 65 66 20 63 6f 6d 6d 69 66 79 5f 73 65 72 69 65 73 28 61 29 EAC@@_4.2..def.commify_series(a)
22c20 0d 0a 20 20 20 20 61 2e 73 69 7a 65 20 3d 3d 20 30 20 3f 20 27 27 20 3a 0d 0a 20 20 20 20 20 20 ......a.size.==.0.?.''.:........
22c40 20 20 61 2e 73 69 7a 65 20 3d 3d 20 31 20 3f 20 61 5b 30 5d 20 3a 0d 0a 20 20 20 20 20 20 20 20 ..a.size.==.1.?.a[0].:..........
22c60 61 2e 73 69 7a 65 20 3d 3d 20 32 20 3f 20 61 2e 6a 6f 69 6e 28 27 20 61 6e 64 20 27 29 20 3a 0d a.size.==.2.?.a.join('.and.').:.
22c80 0a 20 20 20 20 20 20 20 20 61 5b 30 2e 2e 2d 32 5d 2e 6a 6f 69 6e 28 27 2c 20 27 29 20 2b 20 27 .........a[0..-2].join(',.').+.'
22ca0 2c 20 61 6e 64 20 27 20 2b 20 61 5b 2d 31 5d 0d 0a 65 6e 64 0d 0a 0d 0a 61 72 72 61 79 20 3d 20 ,.and.'.+.a[-1]..end....array.=.
22cc0 5b 20 22 72 65 64 22 2c 20 22 79 65 6c 6c 6f 77 22 2c 20 22 67 72 65 65 6e 22 20 5d 0d 0a 0d 0a [."red",."yellow",."green".]....
22ce0 70 72 69 6e 74 20 22 49 20 68 61 76 65 20 22 2c 20 61 72 72 61 79 2c 20 22 20 6d 61 72 62 6c 65 print."I.have.",.array,.".marble
22d00 73 5c 6e 22 0d 0a 23 20 2d 3e 20 49 20 68 61 76 65 20 72 65 64 79 65 6c 6c 6f 77 67 72 65 65 6e s\n"..#.->.I.have.redyellowgreen
22d20 20 6d 61 72 62 6c 65 73 0d 0a 0d 0a 23 20 42 75 74 20 75 6e 6c 69 6b 65 20 50 65 72 6c 3a 0d 0a .marbles....#.But.unlike.Perl:..
22d40 70 72 69 6e 74 20 22 49 20 68 61 76 65 20 23 7b 61 72 72 61 79 7d 20 6d 61 72 62 6c 65 73 5c 6e print."I.have.#{array}.marbles\n
22d60 22 0d 0a 23 20 2d 3e 20 49 20 68 61 76 65 20 72 65 64 79 65 6c 6c 6f 77 67 72 65 65 6e 20 6d 61 "..#.->.I.have.redyellowgreen.ma
22d80 72 62 6c 65 73 0d 0a 23 20 53 6f 2c 20 6e 65 65 64 73 3a 0d 0a 70 72 69 6e 74 20 22 49 20 68 61 rbles..#.So,.needs:..print."I.ha
22da0 76 65 20 23 7b 61 72 72 61 79 2e 6a 6f 69 6e 28 27 20 27 29 7d 20 6d 61 72 62 6c 65 73 5c 6e 22 ve.#{array.join('.')}.marbles\n"
22dc0 0d 0a 23 20 2d 3e 20 49 20 68 61 76 65 20 72 65 64 20 79 65 6c 6c 6f 77 20 67 72 65 65 6e 20 6d ..#.->.I.have.red.yellow.green.m
22de0 61 72 62 6c 65 73 0d 0a 0d 0a 64 65 66 20 63 6f 6d 6d 69 66 79 5f 73 65 72 69 65 73 28 61 29 0d arbles....def.commify_series(a).
22e00 0a 20 20 20 20 73 65 70 63 68 61 72 20 3d 20 61 2e 73 65 6c 65 63 74 20 7b 20 7c 70 7c 20 70 20 .....sepchar.=.a.select.{.|p|.p.
22e20 3d 7e 20 2f 2c 2f 20 7d 20 21 3d 20 5b 5d 20 3f 20 27 3b 20 27 20 3a 20 27 2c 20 27 0d 0a 20 20 =~./,/.}.!=.[].?.';.'.:.',.'....
22e40 20 20 61 2e 73 69 7a 65 20 3d 3d 20 30 20 3f 20 27 27 20 3a 0d 0a 20 20 20 20 20 20 20 20 61 2e ..a.size.==.0.?.''.:..........a.
22e60 73 69 7a 65 20 3d 3d 20 31 20 3f 20 61 5b 30 5d 20 3a 0d 0a 20 20 20 20 20 20 20 20 61 2e 73 69 size.==.1.?.a[0].:..........a.si
22e80 7a 65 20 3d 3d 20 32 20 3f 20 61 2e 6a 6f 69 6e 28 27 20 61 6e 64 20 27 29 20 3a 0d 0a 20 20 20 ze.==.2.?.a.join('.and.').:.....
22ea0 20 20 20 20 20 61 5b 30 2e 2e 2d 32 5d 2e 6a 6f 69 6e 28 73 65 70 63 68 61 72 29 20 2b 20 73 65 .....a[0..-2].join(sepchar).+.se
22ec0 70 63 68 61 72 20 2b 20 27 61 6e 64 20 27 20 2b 20 61 5b 2d 31 5d 0d 0a 65 6e 64 0d 0a 0d 0a 0d pchar.+.'and.'.+.a[-1]..end.....
22ee0 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 33 0d 0a 23 20 20 20 28 6e 6f 74 65 3a 20 41 46 41 .#.@@PLEAC@@_4.3..#...(note:.AFA
22f00 49 4b 20 52 75 62 79 20 64 6f 65 73 6e 27 74 20 61 6c 6c 6f 77 20 67 6f 72 79 20 63 68 61 6e 67 IK.Ruby.doesn't.allow.gory.chang
22f20 65 20 6f 66 20 41 72 72 61 79 20 6c 65 6e 67 74 68 29 0d 0a 23 20 67 72 6f 77 20 74 68 65 20 61 e.of.Array.length)..#.grow.the.a
22f40 72 72 61 79 20 62 79 20 61 73 73 69 67 6e 69 6e 67 20 6e 69 6c 20 74 6f 20 70 61 73 74 20 74 68 rray.by.assigning.nil.to.past.th
22f60 65 20 65 6e 64 20 6f 66 20 61 72 72 61 79 0d 0a 61 72 79 5b 6e 65 77 5f 73 69 7a 65 2d 31 5d 20 e.end.of.array..ary[new_size-1].
22f80 3d 20 6e 69 6c 0d 0a 23 20 73 68 72 69 6e 6b 20 74 68 65 20 61 72 72 61 79 20 62 79 20 73 6c 69 =.nil..#.shrink.the.array.by.sli
22fa0 63 69 6e 67 20 69 74 20 64 6f 77 6e 0d 0a 61 72 79 2e 73 6c 69 63 65 21 28 6e 65 77 5f 73 69 7a cing.it.down..ary.slice!(new_siz
22fc0 65 2e 2e 2d 31 29 0d 0a 23 20 69 6e 69 74 20 74 68 65 20 61 72 72 61 79 20 77 69 74 68 20 67 69 e..-1)..#.init.the.array.with.gi
22fe0 76 65 6e 20 73 69 7a 65 0d 0a 41 72 72 61 79 2e 6e 65 77 28 6e 75 6d 62 65 72 5f 6f 66 5f 65 6c ven.size..Array.new(number_of_el
23000 65 6d 73 29 0d 0a 23 20 61 73 73 69 67 6e 20 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20 70 61 73 ems)..#.assign.to.an.element.pas
23020 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 6e 64 20 65 6e 6c 61 72 67 65 73 20 74 68 65 20 t.the.original.end.enlarges.the.
23040 61 72 72 61 79 0d 0a 61 72 79 5b 69 6e 64 65 78 5f 6e 65 77 5f 6c 61 73 74 5f 65 6c 65 6d 5d 20 array..ary[index_new_last_elem].
23060 3d 20 76 61 6c 75 65 0d 0a 0d 0a 64 65 66 20 77 68 61 74 5f 61 62 6f 75 74 5f 74 68 61 74 5f 61 =.value....def.what_about_that_a
23080 72 72 61 79 28 61 29 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 54 68 65 20 61 72 72 61 79 20 6e 6f rray(a)......print."The.array.no
230a0 77 20 68 61 73 20 22 2c 20 61 2e 73 69 7a 65 2c 20 22 20 65 6c 65 6d 65 6e 74 73 2e 5c 6e 22 0d w.has.",.a.size,.".elements.\n".
230c0 0a 20 20 20 20 23 20 49 6e 64 65 78 20 6f 66 20 6c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 73 20 .....#.Index.of.last.element.is.
230e0 6e 6f 74 20 72 65 61 6c 6c 79 20 69 6e 74 65 72 65 73 74 69 6e 67 20 69 6e 20 52 75 62 79 0d 0a not.really.interesting.in.Ruby..
23100 20 20 20 20 70 72 69 6e 74 20 22 45 6c 65 6d 65 6e 74 20 23 33 20 69 73 20 60 23 7b 61 5b 33 5d ....print."Element.#3.is.`#{a[3]
23120 7d 27 2e 5c 6e 22 0d 0a 65 6e 64 0d 0a 70 65 6f 70 6c 65 20 3d 20 25 77 28 43 72 6f 73 62 79 20 }'.\n"..end..people.=.%w(Crosby.
23140 53 74 69 6c 6c 73 20 4e 61 73 68 20 59 6f 75 6e 67 29 0d 0a 77 68 61 74 5f 61 62 6f 75 74 5f 74 Stills.Nash.Young)..what_about_t
23160 68 61 74 5f 61 72 72 61 79 28 70 65 6f 70 6c 65 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 hat_array(people)......#.@@PLEAC
23180 40 40 5f 34 2e 34 0d 0a 23 20 4f 4f 20 73 74 79 6c 65 0d 0a 62 61 64 5f 75 73 65 72 73 2e 65 61 @@_4.4..#.OO.style..bad_users.ea
231a0 63 68 20 7b 20 7c 75 73 65 72 7c 0d 0a 20 20 20 20 63 6f 6d 70 6c 61 69 6e 28 75 73 65 72 29 0d ch.{.|user|......complain(user).
231c0 0a 7d 0d 0a 23 20 6f 72 2c 20 66 75 6e 63 74 69 6f 6e 61 6c 20 73 74 79 6c 65 0d 0a 66 6f 72 20 .}..#.or,.functional.style..for.
231e0 75 73 65 72 20 69 6e 20 62 61 64 5f 75 73 65 72 73 0d 0a 20 20 20 20 63 6f 6d 70 6c 61 69 6e 28 user.in.bad_users......complain(
23200 75 73 65 72 29 0d 0a 65 6e 64 0d 0a 0d 0a 66 6f 72 20 76 61 72 20 69 6e 20 45 4e 56 2e 6b 65 79 user)..end....for.var.in.ENV.key
23220 73 2e 73 6f 72 74 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 76 61 72 7d 3d 23 7b 45 4e 56 5b 76 s.sort......puts."#{var}=#{ENV[v
23240 61 72 5d 7d 22 0d 0a 65 6e 64 0d 0a 0d 0a 66 6f 72 20 75 73 65 72 20 69 6e 20 61 6c 6c 5f 75 73 ar]}"..end....for.user.in.all_us
23260 65 72 73 0d 0a 20 20 20 20 64 69 73 6b 5f 73 70 61 63 65 20 3d 20 67 65 74 5f 75 73 61 67 65 28 ers......disk_space.=.get_usage(
23280 75 73 65 72 29 0d 0a 20 20 20 20 69 66 20 28 64 69 73 6b 5f 73 70 61 63 65 20 3e 20 4d 41 58 5f user)......if.(disk_space.>.MAX_
232a0 51 55 4f 54 41 29 0d 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 6c 61 69 6e 28 75 73 65 72 29 0d 0a QUOTA)..........complain(user)..
232c0 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 66 6f 72 20 6c 20 69 6e 20 49 4f 2e 70 6f 70 65 ....end..end....for.l.in.IO.pope
232e0 6e 28 22 77 68 6f 22 29 2e 72 65 61 64 6c 69 6e 65 73 0d 0a 20 20 20 20 70 72 69 6e 74 20 6c 20 n("who").readlines......print.l.
23300 69 66 20 6c 20 3d 7e 20 2f 5e 67 63 2f 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 77 65 20 63 61 6e 20 6d if.l.=~./^gc/..end....#.we.can.m
23320 69 6d 69 63 20 74 68 65 20 6f 62 66 75 73 63 61 74 65 64 20 50 65 72 6c 20 77 61 79 0d 0a 77 68 imic.the.obfuscated.Perl.way..wh
23340 69 6c 65 20 66 68 2e 67 65 74 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 24 5f 20 69 ile.fh.gets...............#.$_.i
23360 73 20 73 65 74 20 74 6f 20 74 68 65 20 6c 69 6e 65 20 6a 75 73 74 20 72 65 61 64 0d 0a 20 20 20 s.set.to.the.line.just.read.....
23380 20 63 68 6f 6d 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 24 5f 20 68 61 .chomp...................#.$_.ha
233a0 73 20 61 20 74 72 61 69 6c 69 6e 67 20 5c 6e 20 72 65 6d 6f 76 65 64 2c 20 69 66 20 69 74 20 68 s.a.trailing.\n.removed,.if.it.h
233c0 61 64 20 6f 6e 65 0d 0a 20 20 20 20 73 70 6c 69 74 2e 65 61 63 68 20 7b 20 7c 77 7c 20 20 20 20 ad.one......split.each.{.|w|....
233e0 20 20 20 20 23 20 24 5f 20 69 73 20 73 70 6c 69 74 20 6f 6e 20 77 68 69 74 65 73 70 61 63 65 0d ....#.$_.is.split.on.whitespace.
23400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 62 .............................#.b
23420 75 74 20 24 5f 20 69 73 20 6e 6f 74 20 73 65 74 20 74 6f 20 65 61 63 68 20 63 68 75 6e 6b 20 61 ut.$_.is.not.set.to.each.chunk.a
23440 73 20 69 6e 20 50 65 72 6c 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 77 2e 72 65 76 65 72 s.in.Perl..........print.w.rever
23460 73 65 0d 0a 20 20 20 20 7d 0d 0a 65 6e 64 0d 0a 23 20 2e 2e 2e 6f 72 20 75 73 65 20 61 20 63 6c se......}..end..#....or.use.a.cl
23480 65 61 6e 65 72 20 77 61 79 0d 0a 66 6f 72 20 6c 20 69 6e 20 66 68 2e 72 65 61 64 6c 69 6e 65 73 eaner.way..for.l.in.fh.readlines
234a0 0d 0a 20 20 20 20 6c 2e 63 68 6f 6d 70 2e 73 70 6c 69 74 2e 65 61 63 68 20 7b 20 7c 77 7c 20 70 ......l.chomp.split.each.{.|w|.p
234c0 72 69 6e 74 20 77 2e 72 65 76 65 72 73 65 20 7d 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 73 61 6d 65 20 rint.w.reverse.}..end....#.same.
234e0 64 72 61 77 62 61 63 6b 20 61 73 20 69 6e 20 70 72 6f 62 6c 65 6d 20 31 2e 34 2c 20 77 65 20 63 drawback.as.in.problem.1.4,.we.c
23500 61 6e 27 74 20 6d 75 74 61 74 65 20 61 20 4e 75 6d 65 72 69 63 2e 2e 2e 0d 0a 61 72 72 61 79 2e an't.mutate.a.Numeric.....array.
23520 63 6f 6c 6c 65 63 74 21 20 7b 20 7c 76 7c 20 76 20 2d 20 31 20 7d 0d 0a 0d 0a 61 20 3d 20 5b 20 collect!.{.|v|.v.-.1.}....a.=.[.
23540 2e 35 2c 20 33 20 5d 3b 20 62 20 3d 20 5b 20 30 2c 20 31 20 5d 0d 0a 66 6f 72 20 61 72 79 20 69 .5,.3.];.b.=.[.0,.1.]..for.ary.i
23560 6e 20 5b 20 61 2c 20 62 20 5d 0d 0a 20 20 20 20 61 72 79 2e 63 6f 6c 6c 65 63 74 21 20 7b 20 7c n.[.a,.b.]......ary.collect!.{.|
23580 76 7c 20 76 20 2a 20 37 20 7d 0d 0a 65 6e 64 0d 0a 70 75 74 73 20 22 23 7b 61 2e 6a 6f 69 6e 28 v|.v.*.7.}..end..puts."#{a.join(
235a0 27 20 27 29 7d 20 23 7b 62 2e 6a 6f 69 6e 28 27 20 27 29 7d 22 0d 0a 0d 0a 23 20 77 65 20 63 61 '.')}.#{b.join('.')}"....#.we.ca
235c0 6e 20 6d 75 74 61 74 65 20 53 74 72 69 6e 67 73 2c 20 63 6f 6f 6c 3b 20 77 65 20 6e 65 65 64 20 n.mutate.Strings,.cool;.we.need.
235e0 61 20 74 72 69 63 6b 20 66 6f 72 20 74 68 65 20 73 63 61 6c 61 72 0d 0a 66 6f 72 20 61 72 79 20 a.trick.for.the.scalar..for.ary.
23600 69 6e 20 5b 20 5b 20 73 63 61 6c 61 72 20 5d 2c 20 61 72 72 61 79 2c 20 68 61 73 68 2e 76 61 6c in.[.[.scalar.],.array,.hash.val
23620 75 65 73 20 5d 0d 0a 20 20 20 20 61 72 79 2e 65 61 63 68 20 7b 20 7c 76 7c 20 76 2e 73 74 72 69 ues.]......ary.each.{.|v|.v.stri
23640 70 21 20 7d 20 20 20 20 20 23 20 53 74 72 69 6e 67 23 73 74 72 69 70 20 72 75 6c 65 73 20 3a 29 p!.}.....#.String#strip.rules.:)
23660 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 35 0d 0a 23 20 6e 6f ..end......#.@@PLEAC@@_4.5..#.no
23680 74 20 72 65 6c 65 76 61 6e 74 20 69 6e 20 52 75 62 79 20 73 69 6e 63 65 20 77 65 20 68 61 76 65 t.relevant.in.Ruby.since.we.have
236a0 20 61 6c 77 61 79 73 20 72 65 66 65 72 65 6e 63 65 73 0d 0a 66 6f 72 20 69 74 65 6d 20 69 6e 20 .always.references..for.item.in.
236c0 61 72 72 61 79 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 68 20 77 69 74 68 20 array......#.do.somethingh.with.
236e0 69 74 65 6d 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 36 0d 0a item..end......#.@@PLEAC@@_4.6..
23700 75 6e 69 71 75 65 20 3d 20 6c 69 73 74 2e 75 6e 69 71 0d 0a 0d 0a 23 20 67 65 6e 65 72 61 74 65 unique.=.list.uniq....#.generate
23720 20 61 20 6c 69 73 74 20 6f 66 20 75 73 65 72 73 20 6c 6f 67 67 65 64 20 69 6e 2c 20 72 65 6d 6f .a.list.of.users.logged.in,.remo
23740 76 69 6e 67 20 64 75 70 6c 69 63 61 74 65 73 0d 0a 75 73 65 72 73 20 3d 20 60 77 68 6f 60 2e 63 ving.duplicates..users.=.`who`.c
23760 6f 6c 6c 65 63 74 20 7b 20 7c 6c 7c 20 6c 20 3d 7e 20 2f 28 5c 77 2b 29 2f 3b 20 24 31 20 7d 2e ollect.{.|l|.l.=~./(\w+)/;.$1.}.
23780 73 6f 72 74 2e 75 6e 69 71 0d 0a 70 75 74 73 28 22 75 73 65 72 73 20 6c 6f 67 67 65 64 20 69 6e sort.uniq..puts("users.logged.in
237a0 3a 20 23 7b 63 6f 6d 6d 69 66 79 5f 73 65 72 69 65 73 28 75 73 65 72 73 29 7d 22 29 20 20 23 20 :.#{commify_series(users)}")..#.
237c0 73 65 65 20 34 2e 32 20 66 6f 72 20 63 6f 6d 6d 69 66 79 5f 73 65 72 69 65 73 0d 0a 0d 0a 0d 0a see.4.2.for.commify_series......
237e0 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 37 0d 0a 61 20 2d 20 62 0d 0a 23 20 5b 20 31 2c 20 31 #.@@PLEAC@@_4.7..a.-.b..#.[.1,.1
23800 2c 20 32 2c 20 32 2c 20 33 2c 20 33 2c 20 33 2c 20 34 2c 20 35 20 5d 20 2d 20 5b 20 31 2c 20 32 ,.2,.2,.3,.3,.3,.4,.5.].-.[.1,.2
23820 2c 20 34 20 5d 20 20 2d 3e 20 20 5b 33 2c 20 35 5d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 ,.4.]..->..[3,.5]......#.@@PLEAC
23840 40 40 5f 34 2e 38 0d 0a 75 6e 69 6f 6e 20 3d 20 61 20 7c 20 62 0d 0a 69 6e 74 65 72 73 65 63 74 @@_4.8..union.=.a.|.b..intersect
23860 69 6f 6e 20 3d 20 61 20 26 20 62 0d 0a 64 69 66 66 65 72 65 6e 63 65 20 3d 20 61 20 2d 20 62 0d ion.=.a.&.b..difference.=.a.-.b.
23880 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 39 0d 0a 61 72 72 61 79 31 2e 63 6f 6e .....#.@@PLEAC@@_4.9..array1.con
238a0 63 61 74 28 61 72 72 61 79 32 29 0d 0a 23 20 69 66 20 79 6f 75 20 77 69 6c 6c 20 61 73 73 69 67 cat(array2)..#.if.you.will.assig
238c0 6e 20 74 6f 20 61 6e 6f 74 68 65 72 20 6f 62 6a 65 63 74 2c 20 62 65 74 74 65 72 20 75 73 65 3a n.to.another.object,.better.use:
238e0 0d 0a 6e 65 77 5f 61 72 79 20 3d 20 61 72 72 61 79 31 20 2b 20 61 72 72 61 79 32 0d 0a 0d 0a 6d ..new_ary.=.array1.+.array2....m
23900 65 6d 62 65 72 73 20 3d 20 5b 20 22 54 69 6d 65 22 2c 20 22 46 6c 69 65 73 22 20 5d 0d 0a 69 6e embers.=.[."Time",."Flies".]..in
23920 69 74 69 61 74 65 73 20 3d 20 20 5b 20 22 41 6e 22 2c 20 22 41 72 72 6f 77 22 20 5d 0d 0a 6d 65 itiates.=..[."An",."Arrow".]..me
23940 6d 62 65 72 73 20 2b 3d 20 69 6e 69 74 69 61 74 65 73 0d 0a 0d 0a 6d 65 6d 62 65 72 73 20 3d 20 mbers.+=.initiates....members.=.
23960 5b 20 22 54 69 6d 65 22 2c 20 22 46 6c 69 65 73 22 20 5d 0d 0a 69 6e 69 74 69 61 74 65 73 20 3d [."Time",."Flies".]..initiates.=
23980 20 5b 20 22 41 6e 22 2c 20 22 41 72 72 6f 77 22 20 5d 0d 0a 6d 65 6d 62 65 72 73 5b 32 2c 30 5d .[."An",."Arrow".]..members[2,0]
239a0 20 3d 20 5b 20 22 4c 69 6b 65 22 2c 20 69 6e 69 74 69 61 74 65 73 20 5d 2e 66 6c 61 74 74 65 6e .=.[."Like",.initiates.].flatten
239c0 0d 0a 0d 0a 6d 65 6d 62 65 72 73 5b 30 5d 20 3d 20 22 46 72 75 69 74 22 0d 0a 6d 65 6d 62 65 72 ....members[0].=."Fruit"..member
239e0 73 5b 33 2c 32 5d 20 3d 20 22 41 22 2c 20 22 42 61 6e 61 6e 61 22 0d 0a 0d 0a 0d 0a 23 20 40 40 s[3,2].=."A",."Banana"......#.@@
23a00 50 4c 45 41 43 40 40 5f 34 2e 31 30 0d 0a 72 65 76 65 72 73 65 64 20 3d 20 61 72 79 2e 72 65 76 PLEAC@@_4.10..reversed.=.ary.rev
23a20 65 72 73 65 0d 0a 0d 0a 61 72 79 2e 72 65 76 65 72 73 65 5f 65 61 63 68 20 7b 20 7c 65 7c 0d 0a erse....ary.reverse_each.{.|e|..
23a40 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 65 0d 0a 7d 0d 0a 0d 0a ....#.do.something.with.e..}....
23a60 64 65 73 63 65 6e 64 69 6e 67 20 3d 20 61 72 79 2e 73 6f 72 74 2e 72 65 76 65 72 73 65 0d 0a 64 descending.=.ary.sort.reverse..d
23a80 65 73 63 65 6e 64 69 6e 67 20 3d 20 61 72 79 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 62 20 3c escending.=.ary.sort.{.|a,b|.b.<
23aa0 3d 3e 20 61 20 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 31 31 0d 0a 23 20 =>.a.}......#.@@PLEAC@@_4.11..#.
23ac0 72 65 6d 6f 76 65 20 6e 20 65 6c 65 6d 65 6e 74 73 20 66 72 6f 6d 20 66 72 6f 6e 74 20 6f 66 20 remove.n.elements.from.front.of.
23ae0 61 72 79 20 28 73 68 69 66 74 20 6e 29 0d 0a 66 72 6f 6e 74 20 3d 20 61 72 79 2e 73 6c 69 63 65 ary.(shift.n)..front.=.ary.slice
23b00 21 28 30 2c 20 6e 29 0d 0a 0d 0a 23 20 72 65 6d 6f 76 65 20 6e 20 65 6c 65 6d 65 6e 74 73 20 66 !(0,.n)....#.remove.n.elements.f
23b20 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 61 72 79 20 28 70 6f 70 20 6e 29 0d 0a 65 6e 64 5f rom.the.end.of.ary.(pop.n)..end_
23b40 20 3d 20 61 72 79 2e 73 6c 69 63 65 21 28 2d 6e 20 2e 2e 20 2d 31 29 0d 0a 0d 0a 23 20 6c 65 74 .=.ary.slice!(-n....-1)....#.let
23b60 27 73 20 65 78 74 65 6e 64 20 74 68 65 20 41 72 72 61 79 20 63 6c 61 73 73 2c 20 74 6f 20 6d 61 's.extend.the.Array.class,.to.ma
23b80 6b 65 20 74 68 61 74 20 75 73 65 66 75 6c 0d 0a 63 6c 61 73 73 20 41 72 72 61 79 0d 0a 20 20 20 ke.that.useful..class.Array.....
23ba0 20 64 65 66 20 73 68 69 66 74 32 28 29 0d 0a 20 20 20 20 20 20 20 20 73 6c 69 63 65 21 28 30 20 .def.shift2()..........slice!(0.
23bc0 2e 2e 20 31 29 20 20 20 20 20 23 20 6d 6f 72 65 20 73 79 6d 65 74 72 69 63 20 77 69 74 68 20 70 ...1).....#.more.symetric.with.p
23be0 6f 70 32 2e 2e 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 70 6f 70 32 28 29 0d op2.........end......def.pop2().
23c00 0a 20 20 20 20 20 20 20 20 73 6c 69 63 65 21 28 2d 32 20 2e 2e 20 2d 31 29 0d 0a 20 20 20 20 65 .........slice!(-2....-1)......e
23c20 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 66 72 69 65 6e 64 73 20 3d 20 25 77 28 50 65 74 65 72 20 50 61 nd..end....friends.=.%w(Peter.Pa
23c40 75 6c 20 4d 61 72 79 20 4a 69 6d 20 54 69 6d 29 0d 0a 74 68 69 73 2c 20 74 68 61 74 20 3d 20 66 ul.Mary.Jim.Tim)..this,.that.=.f
23c60 72 69 65 6e 64 73 2e 73 68 69 66 74 32 0d 0a 0d 0a 62 65 76 65 72 61 67 65 73 20 3d 20 25 77 28 riends.shift2....beverages.=.%w(
23c80 44 65 77 20 4a 6f 6c 74 20 43 6f 6c 61 20 53 70 72 69 74 65 20 46 72 65 73 63 61 29 0d 0a 70 61 Dew.Jolt.Cola.Sprite.Fresca)..pa
23ca0 69 72 20 3d 20 62 65 76 65 72 61 67 65 73 2e 70 6f 70 32 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 ir.=.beverages.pop2......#.@@PLE
23cc0 41 43 40 40 5f 34 2e 31 32 0d 0a 23 20 75 73 65 20 45 6e 75 6d 65 72 61 62 6c 65 23 64 65 74 65 AC@@_4.12..#.use.Enumerable#dete
23ce0 63 74 20 28 6f 72 20 74 68 65 20 73 79 6e 6f 6e 79 6d 20 45 6e 75 6d 65 72 61 62 6c 65 23 66 69 ct.(or.the.synonym.Enumerable#fi
23d00 6e 64 29 0d 0a 68 69 67 68 65 73 74 5f 65 6e 67 20 3d 20 65 6d 70 6c 6f 79 65 65 73 2e 64 65 74 nd)..highest_eng.=.employees.det
23d20 65 63 74 20 7b 20 7c 65 6d 70 7c 20 65 6d 70 2e 63 61 74 65 67 6f 72 79 20 3d 3d 20 27 65 6e 67 ect.{.|emp|.emp.category.==.'eng
23d40 69 6e 65 65 72 27 20 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 31 33 0d 0a ineer'.}......#.@@PLEAC@@_4.13..
23d60 23 20 75 73 65 20 45 6e 75 6d 65 72 61 62 6c 65 23 73 65 6c 65 63 74 20 28 6f 72 20 74 68 65 20 #.use.Enumerable#select.(or.the.
23d80 73 79 6e 6f 6e 79 6d 20 45 6e 75 6d 65 72 61 62 6c 65 23 66 69 6e 64 5f 61 6c 6c 29 0d 0a 62 69 synonym.Enumerable#find_all)..bi
23da0 67 73 20 3d 20 6e 75 6d 73 2e 73 65 6c 65 63 74 20 7b 20 7c 69 7c 20 69 20 3e 20 31 5f 30 30 30 gs.=.nums.select.{.|i|.i.>.1_000
23dc0 5f 30 30 30 20 7d 0d 0a 70 69 67 73 20 3d 20 75 73 65 72 73 2e 6b 65 79 73 2e 73 65 6c 65 63 74 _000.}..pigs.=.users.keys.select
23de0 20 7b 20 7c 6b 7c 20 75 73 65 72 73 5b 6b 5d 20 3e 20 31 65 37 20 7d 0d 0a 0d 0a 6d 61 74 63 68 .{.|k|.users[k].>.1e7.}....match
23e00 69 6e 67 20 3d 20 60 77 68 6f 60 2e 73 65 6c 65 63 74 20 7b 20 7c 75 7c 20 75 20 3d 7e 20 2f 5e ing.=.`who`.select.{.|u|.u.=~./^
23e20 67 6e 61 74 20 2f 20 7d 0d 0a 0d 0a 65 6e 67 69 6e 65 65 72 73 20 3d 20 65 6d 70 6c 6f 79 65 65 gnat./.}....engineers.=.employee
23e40 73 2e 73 65 6c 65 63 74 20 7b 20 7c 65 7c 20 65 2e 70 6f 73 69 74 69 6f 6e 20 3d 3d 20 27 45 6e s.select.{.|e|.e.position.==.'En
23e60 67 69 6e 65 65 72 27 20 7d 0d 0a 0d 0a 73 65 63 6f 6e 64 61 72 79 5f 61 73 73 69 73 74 61 6e 63 gineer'.}....secondary_assistanc
23e80 65 20 3d 20 61 70 70 6c 69 63 61 6e 74 73 2e 73 65 6c 65 63 74 20 7b 20 7c 61 7c 0d 0a 20 20 20 e.=.applicants.select.{.|a|.....
23ea0 20 61 2e 69 6e 63 6f 6d 65 20 3e 3d 20 32 36 5f 30 30 30 20 26 26 20 61 2e 69 6e 63 6f 6d 65 20 .a.income.>=.26_000.&&.a.income.
23ec0 3c 20 33 30 5f 30 30 30 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 31 <.30_000..}......#.@@PLEAC@@_4.1
23ee0 34 0d 0a 23 20 6e 6f 72 6d 61 6c 6c 79 20 79 6f 75 20 77 6f 75 6c 64 20 68 61 76 65 20 61 6e 20 4..#.normally.you.would.have.an.
23f00 61 72 72 61 79 20 6f 66 20 4e 75 6d 65 72 69 63 20 28 46 6c 6f 61 74 20 6f 72 0d 0a 23 20 46 69 array.of.Numeric.(Float.or..#.Fi
23f20 78 6e 75 6d 20 6f 72 20 42 69 67 6e 75 6d 29 2c 20 73 6f 20 79 6f 75 20 77 6f 75 6c 64 20 75 73 xnum.or.Bignum),.so.you.would.us
23f40 65 3a 0d 0a 73 6f 72 74 65 64 20 3d 20 75 6e 73 6f 72 74 65 64 2e 73 6f 72 74 0d 0a 23 20 69 66 e:..sorted.=.unsorted.sort..#.if
23f60 20 79 6f 75 20 68 61 76 65 20 73 74 72 69 6e 67 73 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 49 .you.have.strings.representing.I
23f80 6e 74 65 67 65 72 73 20 6f 72 20 46 6c 6f 61 74 73 0d 0a 23 20 79 6f 75 20 6d 61 79 20 73 70 65 ntegers.or.Floats..#.you.may.spe
23fa0 63 69 66 79 20 61 6e 6f 74 68 65 72 20 73 6f 72 74 20 6d 65 74 68 6f 64 3a 0d 0a 73 6f 72 74 65 cify.another.sort.method:..sorte
23fc0 64 20 3d 20 75 6e 73 6f 72 74 65 64 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 61 2e 74 6f 5f 66 d.=.unsorted.sort.{.|a,b|.a.to_f
23fe0 20 3c 3d 3e 20 62 2e 74 6f 5f 66 20 7d 0d 0a 0d 0a 23 20 6c 65 74 27 73 20 75 73 65 20 74 68 65 .<=>.b.to_f.}....#.let's.use.the
24000 20 6c 69 73 74 20 6f 66 20 6d 79 20 6f 77 6e 20 50 49 44 27 73 0d 0a 60 70 73 20 75 78 60 2e 73 .list.of.my.own.PID's..`ps.ux`.s
24020 70 6c 69 74 28 22 5c 6e 22 29 5b 31 2e 2e 2d 31 5d 2e 0d 0a 20 20 20 20 73 65 6c 65 63 74 20 7b plit("\n")[1..-1].......select.{
24040 20 7c 69 7c 20 69 20 3d 7e 20 2f 5e 23 7b 45 4e 56 5b 27 55 53 45 52 27 5d 7d 2f 20 7d 2e 0d 0a .|i|.i.=~./^#{ENV['USER']}/.}...
24060 20 20 20 20 63 6f 6c 6c 65 63 74 20 7b 20 7c 69 7c 20 69 2e 73 70 6c 69 74 5b 31 5d 20 7d 2e 0d ....collect.{.|i|.i.split[1].}..
24080 0a 20 20 20 20 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 61 2e 74 6f 5f 69 20 3c 3d 3e 20 62 2e 74 .....sort.{.|a,b|.a.to_i.<=>.b.t
240a0 6f 5f 69 20 7d 2e 65 61 63 68 20 7b 20 7c 69 7c 20 70 75 74 73 20 69 20 7d 0d 0a 70 75 74 73 20 o_i.}.each.{.|i|.puts.i.}..puts.
240c0 22 53 65 6c 65 63 74 20 61 20 70 72 6f 63 65 73 73 20 49 44 20 74 6f 20 6b 69 6c 6c 3a 22 0d 0a "Select.a.process.ID.to.kill:"..
240e0 70 69 64 20 3d 20 67 65 74 73 2e 63 68 6f 6d 70 0d 0a 72 61 69 73 65 20 22 45 78 69 74 69 6e 67 pid.=.gets.chomp..raise."Exiting
24100 20 2e 2e 2e 20 5c 6e 22 20 75 6e 6c 65 73 73 20 70 69 64 20 26 26 20 70 69 64 20 3d 7e 20 2f 5e .....\n".unless.pid.&&.pid.=~./^
24120 5c 64 2b 24 2f 0d 0a 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 27 54 45 52 4d 27 2c 20 70 69 64 2e \d+$/..Process.kill('TERM',.pid.
24140 74 6f 5f 69 29 0d 0a 73 6c 65 65 70 20 32 0d 0a 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 27 4b 49 to_i)..sleep.2..Process.kill('KI
24160 4c 4c 27 2c 20 70 69 64 2e 74 6f 5f 69 29 0d 0a 0d 0a 64 65 73 63 65 6e 64 69 6e 67 20 3d 20 75 LL',.pid.to_i)....descending.=.u
24180 6e 73 6f 72 74 65 64 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 62 2e 74 6f 5f 66 20 3c 3d 3e 20 nsorted.sort.{.|a,b|.b.to_f.<=>.
241a0 61 2e 74 6f 5f 66 20 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 31 35 0d 0a a.to_f.}......#.@@PLEAC@@_4.15..
241c0 6f 72 64 65 72 65 64 20 3d 20 75 6e 6f 72 64 65 72 65 64 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c ordered.=.unordered.sort.{.|a,b|
241e0 20 63 6f 6d 70 61 72 65 28 61 2c 62 29 20 7d 0d 0a 0d 0a 70 72 65 63 6f 6d 70 75 74 65 64 20 3d .compare(a,b).}....precomputed.=
24200 20 75 6e 6f 72 64 65 72 65 64 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 65 7c 20 5b 63 6f 6d 70 75 74 .unordered.collect.{.|e|.[comput
24220 65 2c 20 65 5d 20 7d 0d 0a 6f 72 64 65 72 65 64 5f 70 72 65 63 6f 6d 70 75 74 65 64 20 3d 20 70 e,.e].}..ordered_precomputed.=.p
24240 72 65 63 6f 6d 70 75 74 65 64 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 61 5b 30 5d 20 3c 3d 3e recomputed.sort.{.|a,b|.a[0].<=>
24260 20 62 5b 30 5d 20 7d 0d 0a 6f 72 64 65 72 65 64 20 3d 20 6f 72 64 65 72 65 64 5f 70 72 65 63 6f .b[0].}..ordered.=.ordered_preco
24280 6d 70 75 74 65 64 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 65 7c 20 65 5b 31 5d 20 7d 0d 0a 0d 0a 6f mputed.collect.{.|e|.e[1].}....o
242a0 72 64 65 72 65 64 20 3d 20 75 6e 6f 72 64 65 72 65 64 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 65 7c rdered.=.unordered.collect.{.|e|
242c0 20 5b 63 6f 6d 70 75 74 65 2c 20 65 5d 20 7d 2e 0d 0a 20 20 20 20 73 6f 72 74 20 7b 20 7c 61 2c .[compute,.e].}.......sort.{.|a,
242e0 62 7c 20 61 5b 30 5d 20 3c 3d 3e 20 62 5b 30 5d 20 7d 2e 0d 0a 20 20 20 20 63 6f 6c 6c 65 63 74 b|.a[0].<=>.b[0].}.......collect
24300 20 7b 20 7c 65 7c 20 65 5b 31 5d 20 7d 0d 0a 0d 0a 66 6f 72 20 65 6d 70 6c 6f 79 65 65 20 69 6e .{.|e|.e[1].}....for.employee.in
24320 20 65 6d 70 6c 6f 79 65 65 73 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 61 2e 6e 61 6d 65 20 3c .employees.sort.{.|a,b|.a.name.<
24340 3d 3e 20 62 2e 6e 61 6d 65 20 7d 0d 0a 20 20 20 20 70 72 69 6e 74 20 65 6d 70 6c 6f 79 65 65 2e =>.b.name.}......print.employee.
24360 6e 61 6d 65 2c 20 22 20 65 61 72 6e 73 20 5c 24 20 22 2c 20 65 6d 70 6c 6f 79 65 65 2e 73 61 6c name,.".earns.\$.",.employee.sal
24380 61 72 79 2c 20 22 5c 6e 22 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 42 65 77 61 72 65 21 20 60 30 27 20 ary,."\n"..end....#.Beware!.`0'.
243a0 69 73 20 74 72 75 65 20 69 6e 20 52 75 62 79 2e 0d 0a 23 20 46 6f 72 20 63 68 61 69 6e 69 6e 67 is.true.in.Ruby...#.For.chaining
243c0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2c 20 79 6f 75 20 6d 61 79 20 75 73 65 20 4e 75 6d 65 72 69 .comparisons,.you.may.use.Numeri
243e0 63 23 6e 6f 6e 7a 65 72 6f 3f 2c 20 77 68 69 63 68 0d 0a 23 20 72 65 74 75 72 6e 73 20 6e 75 6d c#nonzero?,.which..#.returns.num
24400 20 69 66 20 6e 75 6d 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6e 69 6c 20 6f 74 68 65 72 77 69 .if.num.is.not.zero,.nil.otherwi
24420 73 65 0d 0a 73 6f 72 74 65 64 20 3d 20 65 6d 70 6c 6f 79 65 65 73 2e 73 6f 72 74 20 7b 20 7c 61 se..sorted.=.employees.sort.{.|a
24440 2c 62 7c 20 28 61 2e 6e 61 6d 65 20 3c 3d 3e 20 62 2e 6e 61 6d 65 29 2e 6e 6f 6e 7a 65 72 6f 3f ,b|.(a.name.<=>.b.name).nonzero?
24460 20 7c 7c 20 62 2e 61 67 65 20 3c 3d 3e 20 61 2e 61 67 65 20 7d 0d 0a 0d 0a 75 73 65 72 73 20 3d .||.b.age.<=>.a.age.}....users.=
24480 20 5b 5d 0d 0a 23 20 67 65 74 70 77 65 6e 74 20 69 73 20 6e 6f 74 20 77 72 61 70 70 65 64 20 69 .[]..#.getpwent.is.not.wrapped.i
244a0 6e 20 52 75 62 79 2e 2e 2e 20 6c 65 74 27 73 20 66 61 6c 6c 62 61 63 6b 0d 0a 49 4f 2e 72 65 61 n.Ruby....let's.fallback..IO.rea
244c0 64 6c 69 6e 65 73 28 27 2f 65 74 63 2f 70 61 73 73 77 64 27 29 2e 65 61 63 68 20 7b 20 7c 75 7c dlines('/etc/passwd').each.{.|u|
244e0 20 75 73 65 72 73 20 3c 3c 20 75 2e 73 70 6c 69 74 28 27 3a 27 29 20 7d 0d 0a 75 73 65 72 73 2e .users.<<.u.split(':').}..users.
24500 73 6f 72 74 21 20 7b 20 7c 61 2c 62 7c 20 61 5b 30 5d 20 3c 3d 3e 20 62 5b 30 5d 20 7d 0d 0a 66 sort!.{.|a,b|.a[0].<=>.b[0].}..f
24520 6f 72 20 75 73 65 72 20 69 6e 20 75 73 65 72 73 0d 0a 20 20 20 20 70 75 74 73 20 75 73 65 72 5b or.user.in.users......puts.user[
24540 30 5d 0d 0a 65 6e 64 0d 0a 0d 0a 73 6f 72 74 65 64 20 3d 20 6e 61 6d 65 73 2e 73 6f 72 74 20 7b 0]..end....sorted.=.names.sort.{
24560 20 7c 61 2c 62 7c 20 61 5b 31 2c 20 31 5d 20 3c 3d 3e 20 62 5b 31 2c 20 31 5d 20 7d 0d 0a 73 6f .|a,b|.a[1,.1].<=>.b[1,.1].}..so
24580 72 74 65 64 20 3d 20 73 74 72 69 6e 67 73 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 61 2e 6c 65 rted.=.strings.sort.{.|a,b|.a.le
245a0 6e 67 74 68 20 3c 3d 3e 20 62 2e 6c 65 6e 67 74 68 20 7d 0d 0a 0d 0a 23 20 6c 65 74 27 73 20 73 ngth.<=>.b.length.}....#.let's.s
245c0 68 6f 77 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6d 70 61 63 74 20 76 65 72 73 69 6f 6e 0d 0a 6f 72 how.only.the.compact.version..or
245e0 64 65 72 65 64 20 3d 20 73 74 72 69 6e 67 73 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 65 7c 20 5b 65 dered.=.strings.collect.{.|e|.[e
24600 2e 6c 65 6e 67 74 68 2c 20 65 5d 20 7d 2e 0d 0a 20 20 20 20 73 6f 72 74 20 7b 20 7c 61 2c 62 7c .length,.e].}.......sort.{.|a,b|
24620 20 61 5b 30 5d 20 3c 3d 3e 20 62 5b 30 5d 20 7d 2e 0d 0a 20 20 20 20 63 6f 6c 6c 65 63 74 20 7b .a[0].<=>.b[0].}.......collect.{
24640 20 7c 65 7c 20 65 5b 31 5d 20 7d 0d 0a 0d 0a 6f 72 64 65 72 65 64 20 3d 20 73 74 72 69 6e 67 73 .|e|.e[1].}....ordered.=.strings
24660 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 65 7c 20 5b 2f 5c 64 2b 2f 2e 6d 61 74 63 68 28 65 29 5b 30 .collect.{.|e|.[/\d+/.match(e)[0
24680 5d 2e 74 6f 5f 69 2c 20 65 5d 20 7d 2e 0d 0a 20 20 20 20 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 ].to_i,.e].}.......sort.{.|a,b|.
246a0 61 5b 30 5d 20 3c 3d 3e 20 62 5b 30 5d 20 7d 2e 0d 0a 20 20 20 20 63 6f 6c 6c 65 63 74 20 7b 20 a[0].<=>.b[0].}.......collect.{.
246c0 7c 65 7c 20 65 5b 31 5d 20 7d 0d 0a 0d 0a 70 72 69 6e 74 20 60 63 61 74 20 2f 65 74 63 2f 70 61 |e|.e[1].}....print.`cat./etc/pa
246e0 73 73 77 64 60 2e 63 6f 6c 6c 65 63 74 20 7b 20 7c 65 7c 20 5b 65 2c 20 65 2e 73 70 6c 69 74 28 sswd`.collect.{.|e|.[e,.e.split(
24700 27 3a 27 29 2e 69 6e 64 65 78 65 73 28 33 2c 32 2c 30 29 5d 2e 66 6c 61 74 74 65 6e 20 7d 2e 0d ':').indexes(3,2,0)].flatten.}..
24720 0a 20 20 20 20 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 28 61 5b 31 5d 20 3c 3d 3e 20 62 5b 31 5d .....sort.{.|a,b|.(a[1].<=>.b[1]
24740 29 2e 6e 6f 6e 7a 65 72 6f 3f 20 7c 7c 20 28 61 5b 32 5d 20 3c 3d 3e 20 62 5b 32 5d 29 2e 6e 6f ).nonzero?.||.(a[2].<=>.b[2]).no
24760 6e 7a 65 72 6f 3f 20 7c 7c 20 61 5b 33 5d 20 3c 3d 3e 20 62 5b 33 5d 20 7d 2e 0d 0a 20 20 20 20 nzero?.||.a[3].<=>.b[3].}.......
24780 63 6f 6c 6c 65 63 74 20 7b 20 7c 65 7c 20 65 5b 30 5d 20 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c collect.{.|e|.e[0].}......#.@@PL
247a0 45 41 43 40 40 5f 34 2e 31 36 0d 0a 63 69 72 63 75 6c 61 72 2e 75 6e 73 68 69 66 74 28 63 69 72 EAC@@_4.16..circular.unshift(cir
247c0 63 75 6c 61 72 2e 70 6f 70 29 20 20 20 20 20 20 20 20 23 20 74 68 65 20 6c 61 73 74 20 73 68 61 cular.pop)........#.the.last.sha
247e0 6c 6c 20 62 65 20 66 69 72 73 74 0d 0a 63 69 72 63 75 6c 61 72 2e 70 75 73 68 28 63 69 72 63 75 ll.be.first..circular.push(circu
24800 6c 61 72 2e 73 68 69 66 74 29 20 20 20 20 20 20 20 20 20 23 20 61 6e 64 20 76 69 63 65 20 76 65 lar.shift).........#.and.vice.ve
24820 72 73 61 0d 0a 0d 0a 64 65 66 20 67 72 61 62 5f 61 6e 64 5f 72 6f 74 61 74 65 28 6c 29 0d 0a 20 rsa....def.grab_and_rotate(l)...
24840 20 20 20 6c 2e 70 75 73 68 28 72 65 74 20 3d 20 6c 2e 73 68 69 66 74 29 0d 0a 20 20 20 20 72 65 ...l.push(ret.=.l.shift)......re
24860 74 0d 0a 65 6e 64 0d 0a 0d 0a 70 72 6f 63 65 73 73 65 73 20 3d 20 5b 31 2c 20 32 2c 20 33 2c 20 t..end....processes.=.[1,.2,.3,.
24880 34 2c 20 35 5d 0d 0a 77 68 69 6c 65 20 28 31 29 0d 0a 20 20 20 20 70 72 6f 63 65 73 73 20 3d 20 4,.5]..while.(1)......process.=.
248a0 67 72 61 62 5f 61 6e 64 5f 72 6f 74 61 74 65 28 70 72 6f 63 65 73 73 65 73 29 0d 0a 20 20 20 20 grab_and_rotate(processes)......
248c0 70 75 74 73 20 22 48 61 6e 64 6c 69 6e 67 20 70 72 6f 63 65 73 73 20 23 7b 70 72 6f 63 65 73 73 puts."Handling.process.#{process
248e0 7d 22 0d 0a 20 20 20 20 73 6c 65 65 70 20 31 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c }"......sleep.1..end......#.@@PL
24900 45 41 43 40 40 5f 34 2e 31 37 0d 0a 64 65 66 20 66 69 73 68 65 72 5f 79 61 74 65 73 5f 73 68 75 EAC@@_4.17..def.fisher_yates_shu
24920 66 66 6c 65 28 61 29 0d 0a 20 20 20 20 28 61 2e 73 69 7a 65 2d 31 29 2e 64 6f 77 6e 74 6f 28 31 ffle(a)......(a.size-1).downto(1
24940 29 20 7b 20 7c 69 7c 0d 0a 20 20 20 20 20 20 20 20 6a 20 3d 20 72 61 6e 64 28 69 2b 31 29 0d 0a ).{.|i|..........j.=.rand(i+1)..
24960 20 20 20 20 20 20 20 20 61 5b 69 5d 2c 20 61 5b 6a 5d 20 3d 20 61 5b 6a 5d 2c 20 61 5b 69 5d 20 ........a[i],.a[j].=.a[j],.a[i].
24980 69 66 20 69 20 21 3d 20 6a 0d 0a 20 20 20 20 7d 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 6e 61 69 if.i.!=.j......}..end....def.nai
249a0 76 65 5f 73 68 75 66 66 6c 65 28 61 29 0d 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 30 2e 2e 2e ve_shuffle(a)......for.i.in.0...
249c0 61 2e 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 6a 20 3d 20 72 61 6e 64 28 61 2e 73 69 7a 65 29 a.size..........j.=.rand(a.size)
249e0 0d 0a 20 20 20 20 20 20 20 20 61 5b 69 5d 2c 20 61 5b 6a 5d 20 3d 20 61 5b 6a 5d 2c 20 61 5b 69 ..........a[i],.a[j].=.a[j],.a[i
24a00 5d 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 ]......end..end......#.@@PLEAC@@
24a20 5f 34 2e 31 38 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 72 75 62 79 0d 0a 23 20 65 78 _4.18..#!/usr/bin/env.ruby..#.ex
24a40 61 6d 70 6c 65 20 34 2d 32 20 77 6f 72 64 73 0d 0a 23 20 77 6f 72 64 73 20 2d 20 67 61 74 68 65 ample.4-2.words..#.words.-.gathe
24a60 72 20 6c 69 6e 65 73 2c 20 70 72 65 73 65 6e 74 20 69 6e 20 63 6f 6c 75 6d 73 0d 0a 0d 0a 23 20 r.lines,.present.in.colums....#.
24a80 63 6c 61 73 73 20 74 6f 20 65 6e 63 61 70 73 75 6c 61 74 65 20 74 68 65 20 77 6f 72 64 20 66 6f class.to.encapsulate.the.word.fo
24aa0 72 6d 61 74 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 69 6e 70 75 74 0d 0a 63 6c 61 73 73 20 57 rmatting.from.the.input..class.W
24ac0 6f 72 64 46 6f 72 6d 61 74 74 65 72 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 ordFormatter......def.initialize
24ae0 28 63 6f 6c 73 29 0d 0a 20 20 20 20 20 20 20 20 40 63 6f 6c 73 20 3d 20 63 6f 6c 73 0d 0a 20 20 (cols)..........@cols.=.cols....
24b00 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 68 65 6c 70 65 72 20 74 6f 20 72 65 74 75 72 6e 20 ..end........#.helper.to.return.
24b20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 77 6f 72 64 20 69 the.length.of.the.longest.word.i
24b40 6e 20 74 68 65 20 77 6f 72 64 6c 69 73 74 0d 0a 20 20 20 20 64 65 66 20 6d 61 78 6c 65 6e 28 77 n.the.wordlist......def.maxlen(w
24b60 6f 72 64 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 6d 61 78 20 3d 20 31 0d 0a 20 20 20 20 20 ordlist)..........max.=.1.......
24b80 20 20 20 66 6f 72 20 77 6f 72 64 20 69 6e 20 77 6f 72 64 6c 69 73 74 0d 0a 20 20 20 20 20 20 20 ...for.word.in.wordlist.........
24ba0 20 20 20 20 20 69 66 20 77 6f 72 64 2e 6c 65 6e 67 74 68 20 3e 20 6d 61 78 0d 0a 20 20 20 20 20 .....if.word.length.>.max.......
24bc0 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 20 3d 20 77 6f 72 64 2e 6c 65 6e 67 74 68 0d 0a 20 20 ...........max.=.word.length....
24be0 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 ..........end..........end......
24c00 20 20 20 20 6d 61 78 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 70 72 6f 63 65 73 ....max......end........#.proces
24c20 73 20 74 68 65 20 77 6f 72 64 6c 69 73 74 20 61 6e 64 20 70 72 69 6e 74 20 69 74 20 66 6f 72 6d s.the.wordlist.and.print.it.form
24c40 6d 61 74 65 64 20 69 6e 74 6f 20 63 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 64 65 66 20 6f 75 74 70 mated.into.columns......def.outp
24c60 75 74 28 77 6f 72 64 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 6e 20 3d 20 6d ut(wordlist)..........collen.=.m
24c80 61 78 6c 65 6e 28 77 6f 72 64 6c 69 73 74 29 20 2b 20 31 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c axlen(wordlist).+.1..........col
24ca0 75 6d 6e 73 20 3d 20 40 63 6f 6c 73 20 2f 20 63 6f 6c 6c 65 6e 0d 0a 20 20 20 20 20 20 20 20 63 umns.=.@cols./.collen..........c
24cc0 6f 6c 75 6d 6e 73 20 3d 20 31 20 69 66 20 63 6f 6c 75 6d 6e 73 20 3d 3d 20 30 0d 0a 20 20 20 20 olumns.=.1.if.columns.==.0......
24ce0 20 20 20 20 72 6f 77 73 20 3d 20 28 77 6f 72 64 6c 69 73 74 2e 6c 65 6e 67 74 68 20 2b 20 63 6f ....rows.=.(wordlist.length.+.co
24d00 6c 75 6d 6e 73 20 2d 20 31 29 20 2f 20 63 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 lumns.-.1)./.columns..........#.
24d20 6e 6f 77 20 70 72 6f 63 65 73 73 20 65 61 63 68 20 69 74 65 6d 2c 20 70 69 63 6b 69 6e 67 20 6f now.process.each.item,.picking.o
24d40 75 74 20 70 72 6f 70 65 72 20 70 69 65 63 65 20 66 6f 72 20 74 68 69 73 20 70 6f 73 69 74 69 6f ut.proper.piece.for.this.positio
24d60 6e 0d 0a 20 20 20 20 20 20 20 20 30 2e 75 70 74 6f 28 72 6f 77 73 20 2a 20 63 6f 6c 75 6d 6e 73 n..........0.upto(rows.*.columns
24d80 20 2d 20 31 29 20 7b 20 7c 69 74 65 6d 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 61 72 67 .-.1).{.|item|..............targ
24da0 65 74 20 3d 20 28 69 74 65 6d 20 25 20 63 6f 6c 75 6d 6e 73 29 20 2a 20 72 6f 77 73 20 2b 20 28 et.=.(item.%.columns).*.rows.+.(
24dc0 69 74 65 6d 20 2f 20 63 6f 6c 75 6d 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6f 6c item./.columns)..............eol
24de0 20 3d 20 28 28 69 74 65 6d 2b 31 29 20 25 20 63 6f 6c 75 6d 6e 73 20 3d 3d 20 30 29 0d 0a 20 20 .=.((item+1).%.columns.==.0)....
24e00 20 20 20 20 20 20 20 20 20 20 70 69 65 63 65 20 3d 20 77 6f 72 64 6c 69 73 74 5b 74 61 72 67 65 ..........piece.=.wordlist[targe
24e20 74 5d 20 7c 7c 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 69 65 63 65 20 3d 20 70 69 t].||.""..............piece.=.pi
24e40 65 63 65 2e 6c 6a 75 73 74 28 63 6f 6c 6c 65 6e 29 20 75 6e 6c 65 73 73 20 65 6f 6c 0d 0a 20 20 ece.ljust(collen).unless.eol....
24e60 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 70 69 65 63 65 0d 0a 20 20 20 20 20 20 20 20 20 ..........print.piece...........
24e80 20 20 20 70 75 74 73 20 69 66 20 65 6f 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 ...puts.if.eol..........}.......
24ea0 20 20 20 23 20 6e 6f 20 6e 65 65 64 20 74 6f 20 66 69 6e 69 73 68 20 69 74 20 75 70 2c 20 62 65 ...#.no.need.to.finish.it.up,.be
24ec0 63 61 75 73 65 20 65 6f 6c 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 74 68 65 cause.eol.is.always.true.for.the
24ee0 20 6c 61 73 74 20 65 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 .last.element......end..end....#
24f00 20 67 65 74 20 6e 72 20 6f 66 20 63 68 61 72 73 20 74 68 61 74 20 66 69 74 20 69 6e 20 77 69 6e .get.nr.of.chars.that.fit.in.win
24f20 64 6f 77 20 6f 72 20 63 6f 6e 73 6f 6c 65 2c 20 73 65 65 20 50 4c 45 41 43 20 31 35 2e 34 0d 0a dow.or.console,.see.PLEAC.15.4..
24f40 23 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 2d 2d 20 6c 69 6e 75 78 20 6f 6e 6c 79 20 28 3f 29 #.not.portable.--.linux.only.(?)
24f60 0d 0a 64 65 66 20 67 65 74 57 69 6e 43 68 61 72 57 69 64 74 68 28 29 0d 0a 20 20 20 20 62 75 66 ..def.getWinCharWidth()......buf
24f80 20 3d 20 22 5c 30 22 20 2a 20 38 0d 0a 20 20 20 20 24 73 74 64 6f 75 74 2e 69 6f 63 74 6c 28 30 .=."\0".*.8......$stdout.ioctl(0
24fa0 78 35 34 31 33 2c 20 62 75 66 29 0d 0a 20 20 20 20 77 73 5f 72 6f 77 2c 20 77 73 5f 63 6f 6c 2c x5413,.buf)......ws_row,.ws_col,
24fc0 20 77 73 5f 78 70 69 78 65 6c 2c 20 77 73 5f 79 70 69 78 65 6c 20 3d 20 62 75 66 2e 75 6e 70 61 .ws_xpixel,.ws_ypixel.=.buf.unpa
24fe0 63 6b 28 22 24 34 22 29 0d 0a 20 20 20 20 77 73 5f 63 6f 6c 20 7c 7c 20 38 30 0d 0a 72 65 73 63 ck("$4")......ws_col.||.80..resc
25000 75 65 0d 0a 20 20 20 20 38 30 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 6d 61 69 6e 20 70 72 6f 67 72 61 ue......80..end....#.main.progra
25020 6d 0d 0a 63 6f 6c 73 20 3d 20 67 65 74 57 69 6e 43 68 61 72 57 69 64 74 68 28 29 0d 0a 66 6f 72 m..cols.=.getWinCharWidth()..for
25040 6d 61 74 74 65 72 20 3d 20 57 6f 72 64 46 6f 72 6d 61 74 74 65 72 2e 6e 65 77 28 63 6f 6c 73 29 matter.=.WordFormatter.new(cols)
25060 0d 0a 77 6f 72 64 73 20 3d 20 72 65 61 64 6c 69 6e 65 73 28 29 0d 0a 77 6f 72 64 73 2e 63 6f 6c ..words.=.readlines()..words.col
25080 6c 65 63 74 21 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 6c 69 6e 65 2e 63 68 6f 6d 70 0d 0a lect!.{.|line|......line.chomp..
250a0 7d 0d 0a 66 6f 72 6d 61 74 74 65 72 2e 6f 75 74 70 75 74 28 77 6f 72 64 73 29 0d 0a 0d 0a 0d 0a }..formatter.output(words)......
250c0 23 20 40 40 50 4c 45 41 43 40 40 5f 34 2e 31 39 0d 0a 23 20 49 6e 20 72 75 62 79 2c 20 46 69 78 #.@@PLEAC@@_4.19..#.In.ruby,.Fix
250e0 6e 75 6d 27 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65 num's.are.automatically.converte
25100 64 20 74 6f 20 42 69 67 6e 75 6d 27 73 20 77 68 65 6e 0d 0a 23 20 6e 65 65 64 65 64 2c 20 73 6f d.to.Bignum's.when..#.needed,.so
25120 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 66 6f 72 20 61 6e 20 65 78 74 72 61 20 6d .there.is.no.need.for.an.extra.m
25140 6f 64 75 6c 65 0d 0a 64 65 66 20 66 61 63 74 6f 72 69 61 6c 28 6e 29 0d 0a 20 20 20 20 73 20 3d odule..def.factorial(n)......s.=
25160 20 31 0d 0a 20 20 20 20 77 68 69 6c 65 20 6e 20 3e 20 30 0d 0a 20 20 20 20 20 20 20 20 73 20 2a .1......while.n.>.0..........s.*
25180 3d 20 6e 0d 0a 20 20 20 20 20 20 20 20 6e 20 2d 3d 20 31 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 =.n..........n.-=.1......end....
251a0 20 20 73 0d 0a 65 6e 64 0d 0a 0d 0a 70 75 74 73 20 66 61 63 74 6f 72 69 61 6c 28 35 30 30 29 0d ..s..end....puts.factorial(500).
251c0 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...#----------------------------
251e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 -----------------------------..#
25200 20 45 78 61 6d 70 6c 65 20 34 2d 33 2e 20 74 73 63 2d 70 65 72 6d 75 74 65 0d 0a 23 20 74 73 63 .Example.4-3..tsc-permute..#.tsc
25220 5f 70 65 72 6d 75 74 65 3a 20 70 65 72 6d 75 74 65 20 65 61 63 68 20 77 6f 72 64 20 6f 66 20 69 _permute:.permute.each.word.of.i
25240 6e 70 75 74 0d 0a 64 65 66 20 70 65 72 6d 75 74 65 28 69 74 65 6d 73 2c 20 70 65 72 6d 73 29 0d nput..def.permute(items,.perms).
25260 0a 20 20 20 20 75 6e 6c 65 73 73 20 69 74 65 6d 73 2e 6c 65 6e 67 74 68 20 3e 20 30 0d 0a 20 20 .....unless.items.length.>.0....
25280 20 20 20 20 20 20 70 75 74 73 20 70 65 72 6d 73 2e 6a 6f 69 6e 28 22 20 22 29 0d 0a 20 20 20 20 ......puts.perms.join(".")......
252a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 69 74 65 6d 73 0d 0a 20 20 else..........for.i.in.items....
252c0 20 20 20 20 20 20 20 20 20 20 6e 65 77 69 74 65 6d 73 20 3d 20 69 74 65 6d 73 2e 64 75 70 0d 0a ..........newitems.=.items.dup..
252e0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 70 65 72 6d 73 20 3d 20 70 65 72 6d 73 2e 64 75 70 ............newperms.=.perms.dup
25300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 70 65 72 6d 73 2e 75 6e 73 68 69 66 74 28 6e ..............newperms.unshift(n
25320 65 77 69 74 65 6d 73 2e 64 65 6c 65 74 65 28 69 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ewitems.delete(i))..............
25340 70 65 72 6d 75 74 65 28 6e 65 77 69 74 65 6d 73 2c 20 6e 65 77 70 65 72 6d 73 29 0d 0a 20 20 20 permute(newitems,.newperms).....
25360 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 23 20 49 6e 20 72 75 62 .....end......end..end..#.In.rub
25380 79 20 74 68 65 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 62 65 20 61 66 74 65 72 y.the.main.program.must.be.after
253a0 20 61 6c 6c 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 69 74 20 69 73 20 75 73 69 6e 67 0d 0a 70 65 .all.definitions.it.is.using..pe
253c0 72 6d 75 74 65 28 41 52 47 56 2c 20 5b 5d 29 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d rmute(ARGV,.[])....#------------
253e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
25400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 6d 6a 64 5f 70 65 72 6d 75 74 65 3a 20 70 65 -------------..#.mjd_permute:.pe
25420 72 6d 75 74 65 20 65 61 63 68 20 77 6f 72 64 20 6f 66 20 69 6e 70 75 74 0d 0a 0d 0a 64 65 66 20 rmute.each.word.of.input....def.
25440 66 61 63 74 6f 72 69 61 6c 28 6e 29 0d 0a 20 20 20 20 73 20 3d 20 31 0d 0a 20 20 20 20 77 68 69 factorial(n)......s.=.1......whi
25460 6c 65 20 6e 20 3e 20 30 0d 0a 20 20 20 20 20 20 20 20 73 20 2a 3d 20 6e 0d 0a 20 20 20 20 20 20 le.n.>.0..........s.*=.n........
25480 20 20 6e 20 2d 3d 20 31 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 73 0d 0a 65 6e 64 0d 0a 0d ..n.-=.1......end......s..end...
254a0 0a 23 20 77 65 20 75 73 65 20 61 20 63 6c 61 73 73 20 77 69 74 68 20 61 20 63 6c 61 73 73 20 76 .#.we.use.a.class.with.a.class.v
254c0 61 72 69 61 62 6c 65 20 73 74 6f 72 65 20 74 68 65 20 70 72 69 76 61 74 65 20 63 61 63 68 65 0d ariable.store.the.private.cache.
254e0 0a 23 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 66 61 63 74 6f 72 .#.for.the.results.of.the.factor
25500 69 61 6c 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 63 6c 61 73 73 20 46 61 63 74 6f 72 69 61 6c 0d 0a ial.function...class.Factorial..
25520 20 20 20 20 40 40 66 61 63 74 20 3d 20 5b 20 31 20 5d 0d 0a 20 20 20 20 64 65 66 20 46 61 63 74 ....@@fact.=.[.1.]......def.Fact
25540 6f 72 69 61 6c 2e 63 6f 6d 70 75 74 65 28 6e 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 40 40 66 orial.compute(n)..........if.@@f
25560 61 63 74 5b 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 40 66 61 63 74 5b 6e 5d 0d 0a 20 act[n]..............@@fact[n]...
25580 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 40 66 61 63 74 5b .......else..............@@fact[
255a0 6e 5d 20 3d 20 6e 20 2a 20 46 61 63 74 6f 72 69 61 6c 2e 63 6f 6d 70 75 74 65 28 6e 20 2d 20 31 n].=.n.*.Factorial.compute(n.-.1
255c0 29 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a )..........end......end..end....
255e0 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d #-------------------------------
25600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 45 78 --------------------------..#.Ex
25620 61 6d 70 6c 65 20 34 2d 34 2d 20 6d 6a 64 2d 70 65 72 6d 75 74 65 0d 0a 23 20 6e 32 70 61 74 28 ample.4-4-.mjd-permute..#.n2pat(
25640 6e 2c 20 6c 65 6e 29 3a 20 70 72 6f 64 75 63 65 20 74 68 65 20 4e 2d 74 68 20 70 61 74 74 65 72 n,.len):.produce.the.N-th.patter
25660 6e 20 6f 66 20 6c 65 6e 67 74 68 20 6c 65 6e 0d 0a 0d 0a 23 20 57 65 20 6d 75 73 74 20 75 73 65 n.of.length.len....#.We.must.use
25680 20 61 20 6c 6f 77 65 72 20 63 61 73 65 20 6c 65 74 74 65 72 20 61 73 20 70 61 72 61 6d 65 74 65 .a.lower.case.letter.as.paramete
256a0 72 20 4e 2c 20 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 0d 0a 23 20 68 61 6e 64 6c 65 64 20 r.N,.otherwise.it.is..#.handled.
256c0 61 73 20 63 6f 6e 73 74 61 6e 74 20 4c 65 6e 67 74 68 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 as.constant.Length.is.the.length
256e0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 0d 0a 23 20 61 72 72 61 79 2c 20 6e 6f 74 20 .of.the.resulting..#.array,.not.
25700 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 74 20 65 6c 65 6d 65 6e 74 20 28 6c the.index.of.the.last.element.(l
25720 65 6e 67 74 68 20 2d 31 29 20 6c 69 6b 65 20 69 6e 0d 0a 23 20 74 68 65 20 70 65 72 6c 20 65 78 ength.-1).like.in..#.the.perl.ex
25740 61 6d 70 6c 65 2e 0d 0a 64 65 66 20 6e 32 70 61 74 28 6e 2c 20 6c 65 6e 67 74 68 29 0d 0a 20 20 ample...def.n2pat(n,.length)....
25760 20 20 70 61 74 20 3d 20 5b 5d 0d 0a 20 20 20 20 69 20 3d 20 31 0d 0a 20 20 20 20 77 68 69 6c 65 ..pat.=.[]......i.=.1......while
25780 20 69 20 3c 3d 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 70 61 74 2e 70 75 73 68 28 6e .i.<=.length..........pat.push(n
257a0 20 25 20 69 29 0d 0a 20 20 20 20 20 20 20 20 6e 20 2f 3d 20 69 0d 0a 20 20 20 20 20 20 20 20 69 .%.i)..........n./=.i..........i
257c0 20 2b 3d 20 31 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 70 61 74 0d 0a 65 6e 64 0d 0a 0d 0a .+=.1......end......pat..end....
257e0 23 20 70 61 74 32 70 65 72 6d 28 70 61 74 29 3a 20 74 75 72 6e 20 70 61 74 74 65 72 6e 20 72 65 #.pat2perm(pat):.turn.pattern.re
25800 74 75 72 6e 65 64 20 62 79 20 6e 32 70 61 74 28 29 20 69 6e 74 6f 0d 0a 23 20 70 65 72 6d 75 74 turned.by.n2pat().into..#.permut
25820 61 74 69 6f 6e 20 6f 66 20 69 6e 74 65 67 65 72 73 2e 0d 0a 64 65 66 20 70 61 74 32 70 65 72 6d ation.of.integers...def.pat2perm
25840 28 70 61 74 29 0d 0a 20 20 20 20 73 6f 75 72 63 65 20 3d 20 28 30 20 2e 2e 20 70 61 74 2e 6c 65 (pat)......source.=.(0....pat.le
25860 6e 67 74 68 20 2d 20 31 29 2e 74 6f 5f 61 0d 0a 20 20 20 20 70 65 72 6d 20 3d 20 5b 5d 0d 0a 20 ngth.-.1).to_a......perm.=.[]...
25880 20 20 20 70 65 72 6d 2e 70 75 73 68 28 73 6f 75 72 63 65 2e 73 6c 69 63 65 21 28 70 61 74 2e 70 ...perm.push(source.slice!(pat.p
258a0 6f 70 29 29 20 77 68 69 6c 65 20 70 61 74 2e 6c 65 6e 67 74 68 20 3e 20 30 0d 0a 20 20 20 20 70 op)).while.pat.length.>.0......p
258c0 65 72 6d 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 6e 32 70 65 72 6d 28 6e 2c 20 6c 65 6e 29 0d 0a erm..end....def.n2perm(n,.len)..
258e0 20 20 20 20 70 61 74 32 70 65 72 6d 28 6e 32 70 61 74 28 6e 2c 6c 65 6e 29 29 0d 0a 65 6e 64 0d ....pat2perm(n2pat(n,len))..end.
25900 0a 0d 0a 23 20 49 6e 20 72 75 62 79 20 74 68 65 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 6d 75 ...#.In.ruby.the.main.program.mu
25920 73 74 20 62 65 20 61 66 74 65 72 20 61 6c 6c 20 64 65 66 69 6e 69 74 69 6f 6e 73 0d 0a 77 68 69 st.be.after.all.definitions..whi
25940 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 64 61 74 61 20 3d 20 73 70 6c 69 74 0d 0a 20 20 20 20 23 le.gets......data.=.split......#
25960 20 74 68 65 20 70 65 72 6c 20 73 6f 6c 75 74 69 6f 6e 20 68 61 73 20 75 73 65 64 20 24 23 64 61 .the.perl.solution.has.used.$#da
25980 74 61 2c 20 77 68 69 63 68 20 69 73 20 6c 65 6e 67 74 68 2d 31 0d 0a 20 20 20 20 6e 75 6d 5f 70 ta,.which.is.length-1......num_p
259a0 65 72 6d 75 74 61 74 69 6f 6e 73 20 3d 20 46 61 63 74 6f 72 69 61 6c 2e 63 6f 6d 70 75 74 65 28 ermutations.=.Factorial.compute(
259c0 64 61 74 61 2e 6c 65 6e 67 74 68 28 29 29 0d 0a 20 20 20 20 30 2e 75 70 74 6f 28 6e 75 6d 5f 70 data.length())......0.upto(num_p
259e0 65 72 6d 75 74 61 74 69 6f 6e 73 20 2d 20 31 29 20 64 6f 20 7c 69 7c 0d 0a 20 20 20 20 20 20 20 ermutations.-.1).do.|i|.........
25a00 20 23 20 69 6e 20 72 75 62 79 20 77 65 20 63 61 6e 20 6e 6f 74 20 75 73 65 20 61 6e 20 61 72 72 .#.in.ruby.we.can.not.use.an.arr
25a20 61 79 20 61 73 20 73 65 6c 65 63 74 6f 72 20 66 6f 72 20 61 6e 20 61 72 72 61 79 0d 0a 20 20 20 ay.as.selector.for.an.array.....
25a40 20 20 20 20 20 23 20 62 75 74 20 62 79 20 65 78 63 68 61 6e 67 69 6e 67 20 74 68 65 20 74 77 6f .....#.but.by.exchanging.the.two
25a60 20 61 72 72 61 79 73 2c 20 77 65 20 63 61 6e 20 75 73 65 20 74 68 65 20 63 6f 6c 6c 65 63 74 20 .arrays,.we.can.use.the.collect.
25a80 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 23 20 77 68 69 63 68 20 72 65 74 75 72 6e 73 20 method..........#.which.returns.
25aa0 61 6e 20 61 72 72 61 79 20 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6c 6c 20 an.array.with.the.result.of.all.
25ac0 62 6c 6f 63 6b 20 69 6e 76 6f 63 61 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 70 65 72 6d 75 block.invocations..........permu
25ae0 74 61 74 69 6f 6e 20 3d 20 6e 32 70 65 72 6d 28 69 2c 20 64 61 74 61 2e 6c 65 6e 67 74 68 29 2e tation.=.n2perm(i,.data.length).
25b00 63 6f 6c 6c 65 63 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 6a 7c 20 64 61 74 61 5b collect.{..............|j|.data[
25b20 6a 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 70 65 72 6d j]..........}..........puts.perm
25b40 75 74 61 74 69 6f 6e 2e 6a 6f 69 6e 28 22 20 22 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d utation.join(".")......end..end.
25b60 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 30 0d 0a 61 67 65 20 3d 20 7b 20 22 4e .....#.@@PLEAC@@_5.0..age.=.{."N
25b80 61 74 22 2c 20 20 20 32 34 2c 0d 0a 20 20 20 20 20 20 20 20 22 4a 75 6c 65 73 22 2c 20 32 35 2c at",...24,.........."Jules",.25,
25ba0 0d 0a 20 20 20 20 20 20 20 20 22 4a 6f 73 68 22 2c 20 20 31 37 20 20 7d 0d 0a 0d 0a 61 67 65 5b .........."Josh",..17..}....age[
25bc0 22 4e 61 74 22 5d 20 20 20 3d 20 32 34 0d 0a 61 67 65 5b 22 4a 75 6c 65 73 22 5d 20 3d 20 32 35 "Nat"]...=.24..age["Jules"].=.25
25be0 0d 0a 61 67 65 5b 22 4a 6f 73 68 22 5d 20 20 3d 20 31 37 0d 0a 0d 0a 66 6f 6f 64 5f 63 6f 6c 6f ..age["Josh"]..=.17....food_colo
25c00 72 20 3d 20 7b 0d 0a 20 20 20 20 22 41 70 70 6c 65 22 20 20 3d 3e 20 22 72 65 64 22 2c 0d 0a 20 r.=.{......"Apple"..=>."red",...
25c20 20 20 20 22 42 61 6e 61 6e 61 22 20 3d 3e 20 22 79 65 6c 6c 6f 77 22 2c 0d 0a 20 20 20 20 22 4c ..."Banana".=>."yellow",......"L
25c40 65 6d 6f 6e 22 20 20 3d 3e 20 22 79 65 6c 6c 6f 77 22 2c 0d 0a 20 20 20 20 22 43 61 72 72 6f 74 emon"..=>."yellow",......"Carrot
25c60 22 20 3d 3e 20 22 6f 72 61 6e 67 65 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d ".=>."orange"...............}...
25c80 0a 23 20 49 6e 20 52 75 62 79 2c 20 79 6f 75 20 63 61 6e 6e 6f 74 20 61 76 6f 69 64 20 74 68 65 .#.In.Ruby,.you.cannot.avoid.the
25ca0 20 64 6f 75 62 6c 65 20 6f 72 20 73 69 6d 70 6c 65 20 71 75 6f 74 69 6e 67 0d 0a 23 20 77 68 69 .double.or.simple.quoting..#.whi
25cc0 6c 65 20 6d 61 6e 69 70 75 6c 61 74 69 6e 20 68 61 73 68 65 73 0d 0a 0d 0a 0d 0a 23 20 40 40 50 le.manipulatin.hashes......#.@@P
25ce0 4c 45 41 43 40 40 5f 35 2e 31 0d 0a 68 61 73 68 5b 6b 65 79 5d 20 3d 20 76 61 6c 75 65 0d 0a 0d LEAC@@_5.1..hash[key].=.value...
25d00 0a 66 6f 6f 64 5f 63 6f 6c 6f 72 5b 22 52 61 73 70 62 65 72 72 79 22 5d 20 3d 20 22 70 69 6e 6b .food_color["Raspberry"].=."pink
25d20 22 0d 0a 70 75 74 73 20 22 4b 6e 6f 77 6e 20 66 6f 6f 64 73 3a 22 2c 20 66 6f 6f 64 5f 63 6f 6c "..puts."Known.foods:",.food_col
25d40 6f 72 2e 6b 65 79 73 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 32 0d 0a 23 20 or.keys......#.@@PLEAC@@_5.2..#.
25d60 64 6f 65 73 20 68 61 73 68 20 68 61 76 65 20 61 20 76 61 6c 75 65 20 66 6f 72 20 6b 65 79 20 3f does.hash.have.a.value.for.key.?
25d80 0d 0a 69 66 20 28 68 61 73 68 2e 68 61 73 5f 6b 65 79 3f 28 6b 65 79 29 29 0d 0a 20 20 20 20 23 ..if.(hash.has_key?(key))......#
25da0 20 69 74 20 65 78 69 73 74 73 0d 0a 65 6c 73 65 0d 0a 20 20 20 20 23 20 69 74 20 64 6f 65 73 6e .it.exists..else......#.it.doesn
25dc0 27 74 0d 0a 65 6e 64 0d 0a 0d 0a 5b 20 22 42 61 6e 61 6e 61 22 2c 20 22 4d 61 72 74 69 6e 69 22 't..end....[."Banana",."Martini"
25de0 20 5d 2e 65 61 63 68 20 7b 20 7c 6e 61 6d 65 7c 0d 0a 20 20 20 20 70 72 69 6e 74 20 6e 61 6d 65 .].each.{.|name|......print.name
25e00 2c 20 22 20 69 73 20 61 20 22 2c 20 66 6f 6f 64 5f 63 6f 6c 6f 72 2e 68 61 73 5f 6b 65 79 3f 28 ,.".is.a.",.food_color.has_key?(
25e20 6e 61 6d 65 29 20 3f 20 22 66 6f 6f 64 22 20 3a 20 22 64 72 69 6e 6b 22 2c 20 22 5c 6e 22 0d 0a name).?."food".:."drink",."\n"..
25e40 7d 0d 0a 0d 0a 61 67 65 20 3d 20 7b 7d 0d 0a 61 67 65 5b 27 54 6f 64 64 6c 65 72 27 5d 20 3d 20 }....age.=.{}..age['Toddler'].=.
25e60 33 0d 0a 61 67 65 5b 27 55 6e 62 6f 72 6e 27 5d 20 3d 20 30 0d 0a 61 67 65 5b 27 50 68 61 6e 74 3..age['Unborn'].=.0..age['Phant
25e80 61 73 6d 27 5d 20 3d 20 6e 69 6c 0d 0a 0d 0a 66 6f 72 20 74 68 69 6e 67 20 69 6e 20 5b 27 54 6f asm'].=.nil....for.thing.in.['To
25ea0 64 64 6c 65 72 27 2c 20 27 55 6e 62 6f 72 6e 27 2c 20 27 50 68 61 6e 74 61 73 6d 27 2c 20 27 52 ddler',.'Unborn',.'Phantasm',.'R
25ec0 65 6c 69 63 27 5d 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 23 7b 74 68 69 6e 67 7d 3a 20 22 0d 0a elic']......print."#{thing}:."..
25ee0 20 20 20 20 70 72 69 6e 74 20 22 48 61 73 2d 6b 65 79 20 22 20 69 66 20 61 67 65 2e 68 61 73 5f ....print."Has-key.".if.age.has_
25f00 6b 65 79 3f 28 74 68 69 6e 67 29 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 54 72 75 65 20 22 20 69 key?(thing)......print."True.".i
25f20 66 20 61 67 65 5b 74 68 69 6e 67 5d 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 4e 6f 6e 7a 65 72 6f f.age[thing]......print."Nonzero
25f40 20 22 20 69 66 20 61 67 65 5b 74 68 69 6e 67 5d 20 26 26 20 61 67 65 5b 74 68 69 6e 67 5d 2e 6e .".if.age[thing].&&.age[thing].n
25f60 6f 6e 7a 65 72 6f 3f 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 5c 6e 22 0d 0a 65 6e 64 0d 0a 0d 0a onzero?......print."\n"..end....
25f80 23 3d 3e 0d 0a 23 20 54 6f 64 64 6c 65 72 3a 20 48 61 73 2d 6b 65 79 20 54 72 75 65 20 4e 6f 6e #=>..#.Toddler:.Has-key.True.Non
25fa0 7a 65 72 6f 0d 0a 23 20 55 6e 62 6f 72 6e 3a 20 48 61 73 2d 6b 65 79 20 54 72 75 65 0d 0a 23 20 zero..#.Unborn:.Has-key.True..#.
25fc0 50 68 61 6e 74 61 73 6d 3a 20 48 61 73 2d 6b 65 79 0d 0a 23 20 52 65 6c 69 63 3a 0d 0a 0d 0a 23 Phantasm:.Has-key..#.Relic:....#
25fe0 20 59 6f 75 20 75 73 65 20 48 61 73 68 23 68 61 73 5f 6b 65 79 3f 20 77 68 65 6e 20 79 6f 75 20 .You.use.Hash#has_key?.when.you.
26000 75 73 65 20 50 65 72 6c 27 73 20 65 78 69 73 74 73 20 2d 3e 20 69 74 20 63 68 65 63 6b 73 0d 0a use.Perl's.exists.->.it.checks..
26020 23 20 66 6f 72 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 61 20 6b 65 79 20 69 6e 20 61 20 68 61 #.for.existence.of.a.key.in.a.ha
26040 73 68 2e 0d 0a 23 20 41 6c 6c 20 4e 75 6d 65 72 69 63 20 61 72 65 20 22 54 72 75 65 22 20 69 6e sh...#.All.Numeric.are."True".in
26060 20 72 75 62 79 2c 20 73 6f 20 74 68 65 20 74 65 73 74 20 64 6f 65 73 6e 27 74 20 68 61 76 65 20 .ruby,.so.the.test.doesn't.have.
26080 74 68 65 0d 0a 23 20 73 61 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 69 6e 20 50 65 72 6c the..#.same.semantics.as.in.Perl
260a0 3b 20 79 6f 75 20 77 6f 75 6c 64 20 75 73 65 20 4e 75 6d 65 72 69 63 23 6e 6f 6e 7a 65 72 6f 3f ;.you.would.use.Numeric#nonzero?
260c0 20 74 6f 0d 0a 23 20 61 63 68 69 65 76 65 20 74 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69 63 .to..#.achieve.the.same.semantic
260e0 73 20 28 66 61 6c 73 65 20 69 66 20 30 2c 20 74 72 75 65 20 6f 74 68 65 72 77 69 73 65 29 2e 0d s.(false.if.0,.true.otherwise)..
26100 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 33 0d 0a 66 6f 6f 64 5f 63 6f 6c 6f 72 .....#.@@PLEAC@@_5.3..food_color
26120 2e 64 65 6c 65 74 65 28 22 42 61 6e 61 6e 61 22 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 .delete("Banana")......#.@@PLEAC
26140 40 40 5f 35 2e 34 0d 0a 68 61 73 68 2e 65 61 63 68 20 7b 20 7c 6b 65 79 2c 20 76 61 6c 75 65 7c @@_5.4..hash.each.{.|key,.value|
26160 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 6b 65 79 20 61 6e ......#.do.something.with.key.an
26180 64 20 76 61 6c 75 65 0d 0a 7d 0d 0a 0d 0a 68 61 73 68 2e 65 61 63 68 5f 6b 65 79 20 7b 20 7c 6b d.value..}....hash.each_key.{.|k
261a0 65 79 7c 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 6b 65 79 ey|......#.do.something.with.key
261c0 0d 0a 7d 0d 0a 0d 0a 66 6f 6f 64 5f 63 6f 6c 6f 72 2e 65 61 63 68 20 7b 20 7c 66 6f 6f 64 2c 20 ..}....food_color.each.{.|food,.
261e0 63 6f 6c 6f 72 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 66 6f 6f 64 7d 20 69 73 20 23 7b 63 color|......puts."#{food}.is.#{c
26200 6f 6c 6f 72 7d 22 0d 0a 7d 0d 0a 0d 0a 66 6f 6f 64 5f 63 6f 6c 6f 72 2e 65 61 63 68 5f 6b 65 79 olor}"..}....food_color.each_key
26220 20 7b 20 7c 66 6f 6f 64 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 66 6f 6f 64 7d 20 69 73 20 .{.|food|......puts."#{food}.is.
26240 23 7b 66 6f 6f 64 5f 63 6f 6c 6f 72 5b 66 6f 6f 64 5d 7d 22 0d 0a 7d 0d 0a 0d 0a 23 20 49 4d 4f #{food_color[food]}"..}....#.IMO
26260 20 74 68 69 73 20 64 65 6d 6f 6e 73 74 72 61 74 65 73 20 74 68 61 74 20 4f 4f 20 73 74 79 6c 65 .this.demonstrates.that.OO.style
26280 20 69 73 20 62 79 20 66 61 72 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 0d 0a 66 6f 6f 64 5f 63 .is.by.far.more.readable..food_c
262a0 6f 6c 6f 72 2e 6b 65 79 73 2e 73 6f 72 74 2e 65 61 63 68 20 7b 20 7c 66 6f 6f 64 7c 0d 0a 20 20 olor.keys.sort.each.{.|food|....
262c0 20 20 70 75 74 73 20 22 23 7b 66 6f 6f 64 7d 20 69 73 20 23 7b 66 6f 6f 64 5f 63 6f 6c 6f 72 5b ..puts."#{food}.is.#{food_color[
262e0 66 6f 6f 64 5d 7d 2e 22 0d 0a 7d 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d food]}."..}....#----------------
26300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 0d 0a -------------..#!/usr/bin/ruby..
26320 23 20 63 6f 75 6e 74 66 72 6f 6d 20 2d 20 63 6f 75 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 #.countfrom.-.count.number.of.me
26340 73 73 61 67 65 73 20 66 72 6f 6d 20 65 61 63 68 20 73 65 6e 64 65 72 0d 0a 0d 0a 23 20 44 65 66 ssages.from.each.sender....#.Def
26360 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 30 0d 0a 66 72 6f 6d 20 3d 20 48 61 73 68 2e 6e 65 77 ault.value.is.0..from.=.Hash.new
26380 28 30 29 0d 0a 77 68 69 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 2f 5e 46 72 6f 6d 3a 20 28 2e 2a (0)..while.gets....../^From:.(.*
263a0 29 2f 20 61 6e 64 20 66 72 6f 6d 5b 24 31 5d 20 2b 3d 20 31 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 4d )/.and.from[$1].+=.1..end....#.M
263c0 6f 72 65 20 75 73 65 66 75 6c 20 74 6f 20 73 6f 72 74 20 62 79 20 6e 75 6d 62 65 72 20 6f 66 20 ore.useful.to.sort.by.number.of.
263e0 72 65 63 65 69 76 65 64 20 6d 61 69 6c 20 62 79 20 70 65 72 73 6f 6e 0d 0a 66 72 6f 6d 2e 73 6f received.mail.by.person..from.so
26400 72 74 20 7b 7c 61 2c 62 7c 20 62 5b 31 5d 3c 3d 3e 61 5b 31 5d 7d 2e 65 61 63 68 20 7b 20 7c 76 rt.{|a,b|.b[1]<=>a[1]}.each.{.|v
26420 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 76 5b 31 5d 7d 3a 20 23 7b 76 5b 30 5d 7d 22 0d 0a |......puts."#{v[1]}:.#{v[0]}"..
26440 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d }..#----------------------------
26460 2d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 35 0d 0a 23 20 59 6f 75 20 6d 61 -......#.@@PLEAC@@_5.5..#.You.ma
26480 79 20 75 73 65 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 27 69 6e 73 70 65 63 74 27 20 6d 65 74 y.use.the.built-in.'inspect'.met
264a0 68 6f 64 20 74 68 69 73 20 77 61 79 3a 0d 0a 70 20 68 61 73 68 0d 0a 0d 0a 23 20 4f 72 20 64 6f hod.this.way:..p.hash....#.Or.do
264c0 20 69 74 20 74 68 65 20 43 6f 6f 6b 62 6f 6f 6b 20 77 61 79 3a 0d 0a 68 61 73 68 2e 65 61 63 68 .it.the.Cookbook.way:..hash.each
264e0 20 7b 20 7c 6b 2c 76 7c 20 70 75 74 73 20 22 23 7b 6b 7d 20 3d 3e 20 23 7b 76 7d 22 20 7d 0d 0a .{.|k,v|.puts."#{k}.=>.#{v}".}..
26500 0d 0a 23 20 53 6f 72 74 65 64 20 62 79 20 6b 65 79 73 0d 0a 68 61 73 68 2e 73 6f 72 74 2e 65 61 ..#.Sorted.by.keys..hash.sort.ea
26520 63 68 20 7b 20 7c 65 7c 20 70 75 74 73 20 22 23 7b 65 5b 30 5d 7d 20 3d 3e 20 23 7b 65 5b 31 5d ch.{.|e|.puts."#{e[0]}.=>.#{e[1]
26540 7d 22 20 7d 0d 0a 23 20 53 6f 72 74 65 64 20 62 79 20 76 61 6c 75 65 73 0d 0a 68 61 73 68 2e 73 }".}..#.Sorted.by.values..hash.s
26560 6f 72 74 7b 7c 61 2c 62 7c 20 61 5b 31 5d 3c 3d 3e 62 5b 31 5d 7d 2e 65 61 63 68 20 7b 20 7c 65 ort{|a,b|.a[1]<=>b[1]}.each.{.|e
26580 7c 20 70 75 74 73 20 22 23 7b 65 5b 30 5d 7d 20 3d 3e 20 23 7b 65 5b 31 5d 7d 22 20 7d 0d 0a 0d |.puts."#{e[0]}.=>.#{e[1]}".}...
265a0 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 37 0d 0a 74 74 79 73 20 3d 20 48 61 73 68 2e ...#.@@PLEAC@@_5.7..ttys.=.Hash.
265c0 6e 65 77 0d 0a 66 6f 72 20 69 20 69 6e 20 60 77 68 6f 60 0d 0a 20 20 20 20 75 73 65 72 2c 20 74 new..for.i.in.`who`......user,.t
265e0 74 79 20 3d 20 69 2e 73 70 6c 69 74 0d 0a 20 20 20 20 28 74 74 79 73 5b 75 73 65 72 5d 20 7c 7c ty.=.i.split......(ttys[user].||
26600 3d 20 5b 5d 29 20 3c 3c 20 74 74 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 65 65 =.[]).<<.tty...............#.see
26620 20 70 72 6f 62 6c 65 6d 73 5f 72 75 62 79 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 73 0d 0a 65 .problems_ruby.for.more.infos..e
26640 6e 64 0d 0a 74 74 79 73 2e 6b 65 79 73 2e 73 6f 72 74 2e 65 61 63 68 20 7b 20 7c 6b 7c 0d 0a 20 nd..ttys.keys.sort.each.{.|k|...
26660 20 20 20 70 75 74 73 20 22 23 7b 6b 7d 3a 20 23 7b 63 6f 6d 6d 69 66 79 5f 73 65 72 69 65 73 28 ...puts."#{k}:.#{commify_series(
26680 74 74 79 73 5b 6b 5d 29 7d 22 20 20 23 20 66 72 6f 6d 20 34 2e 32 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 ttys[k])}"..#.from.4.2..}......#
266a0 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 38 0d 0a 73 75 72 6e 61 6d 65 20 3d 20 7b 20 22 4d 69 63 .@@PLEAC@@_5.8..surname.=.{."Mic
266c0 6b 65 79 22 20 3d 3e 20 22 4d 61 6e 74 6c 65 22 2c 20 22 42 61 62 65 22 20 3d 3e 20 22 52 75 74 key".=>."Mantle",."Babe".=>."Rut
266e0 68 22 20 7d 0d 0a 70 75 74 73 20 73 75 72 6e 61 6d 65 2e 69 6e 64 65 78 28 22 4d 61 6e 74 6c 65 h".}..puts.surname.index("Mantle
26700 22 29 0d 0a 0d 0a 23 20 49 66 20 79 6f 75 20 72 65 61 6c 6c 79 20 6e 65 65 64 65 64 20 74 6f 20 ")....#.If.you.really.needed.to.
26720 27 69 6e 76 65 72 74 27 20 74 68 65 20 77 68 6f 6c 65 20 68 61 73 68 2c 20 75 73 65 20 48 61 73 'invert'.the.whole.hash,.use.Has
26740 68 23 69 6e 76 65 72 74 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d h#invert....#-------------------
26760 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a ----------..#!/usr/bin/ruby.-w..
26780 23 20 66 6f 6f 64 66 69 6e 64 20 2d 20 66 69 6e 64 20 6d 61 74 63 68 20 66 6f 72 20 66 6f 6f 64 #.foodfind.-.find.match.for.food
267a0 20 6f 72 20 63 6f 6c 6f 72 0d 0a 0d 0a 67 69 76 65 6e 20 3d 20 41 52 47 56 2e 73 68 69 66 74 20 .or.color....given.=.ARGV.shift.
267c0 6f 72 20 72 61 69 73 65 20 22 75 73 61 67 65 3a 20 66 6f 6f 64 66 69 6e 64 20 66 6f 6f 64 5f 6f or.raise."usage:.foodfind.food_o
267e0 72 5f 63 6f 6c 6f 72 22 0d 0a 0d 0a 63 6f 6c 6f 72 20 3d 20 7b 0d 0a 20 20 20 20 22 41 70 70 6c r_color"....color.=.{......"Appl
26800 65 22 20 20 3d 3e 20 22 72 65 64 22 2c 0d 0a 20 20 20 20 22 42 61 6e 61 6e 61 22 20 3d 3e 20 22 e"..=>."red",......"Banana".=>."
26820 79 65 6c 6c 6f 77 22 2c 0d 0a 20 20 20 20 22 4c 65 6d 6f 6e 22 20 20 3d 3e 20 22 79 65 6c 6c 6f yellow",......"Lemon"..=>."yello
26840 77 22 2c 0d 0a 20 20 20 20 22 43 61 72 72 6f 74 22 20 3d 3e 20 22 6f 72 61 6e 67 65 22 2c 0d 0a w",......"Carrot".=>."orange",..
26860 7d 0d 0a 0d 0a 69 66 20 28 63 6f 6c 6f 72 2e 68 61 73 5f 6b 65 79 3f 28 67 69 76 65 6e 29 29 0d }....if.(color.has_key?(given)).
26880 0a 20 20 20 20 70 75 74 73 20 22 23 7b 67 69 76 65 6e 7d 20 69 73 20 61 20 66 6f 6f 64 20 77 69 .....puts."#{given}.is.a.food.wi
268a0 74 68 20 63 6f 6c 6f 72 20 23 7b 63 6f 6c 6f 72 5b 67 69 76 65 6e 5d 7d 2e 22 0d 0a 65 6e 64 0d th.color.#{color[given]}."..end.
268c0 0a 69 66 20 28 63 6f 6c 6f 72 2e 68 61 73 5f 76 61 6c 75 65 3f 28 67 69 76 65 6e 29 29 0d 0a 20 .if.(color.has_value?(given))...
268e0 20 20 20 70 75 74 73 20 22 23 7b 63 6f 6c 6f 72 2e 69 6e 64 65 78 28 67 69 76 65 6e 29 7d 20 69 ...puts."#{color.index(given)}.i
26900 73 20 61 20 66 6f 6f 64 20 77 69 74 68 20 63 6f 6c 6f 72 20 23 7b 67 69 76 65 6e 7d 2e 22 0d 0a s.a.food.with.color.#{given}."..
26920 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d end..#--------------------------
26940 2d 2d 2d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 39 0d 0a 23 20 53 6f 72 74 ---......#.@@PLEAC@@_5.9..#.Sort
26960 65 64 20 62 79 20 6b 65 79 73 20 28 48 61 73 68 23 73 6f 72 74 20 67 69 76 65 73 20 61 6e 20 41 ed.by.keys.(Hash#sort.gives.an.A
26980 72 72 61 79 20 6f 66 20 70 61 69 72 73 20 6d 61 64 65 20 6f 66 20 65 61 63 68 20 6b 65 79 2c 76 rray.of.pairs.made.of.each.key,v
269a0 61 6c 75 65 29 0d 0a 66 6f 6f 64 5f 63 6f 6c 6f 72 2e 73 6f 72 74 2e 65 61 63 68 20 7b 20 7c 66 alue)..food_color.sort.each.{.|f
269c0 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 66 5b 30 5d 7d 20 69 73 20 23 7b 66 5b 31 5d 7d 2e |......puts."#{f[0]}.is.#{f[1]}.
269e0 22 0d 0a 7d 0d 0a 0d 0a 23 20 53 6f 72 74 65 64 20 62 79 20 76 61 6c 75 65 73 0d 0a 66 6f 6f 64 "..}....#.Sorted.by.values..food
26a00 5f 63 6f 6c 6f 72 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 61 5b 31 5d 20 3c 3d 3e 20 62 5b 31 _color.sort.{.|a,b|.a[1].<=>.b[1
26a20 5d 20 7d 2e 65 61 63 68 20 7b 20 7c 66 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 66 5b 30 5d ].}.each.{.|f|......puts."#{f[0]
26a40 7d 20 69 73 20 23 7b 66 5b 31 5d 7d 2e 22 0d 0a 7d 0d 0a 0d 0a 23 20 53 6f 72 74 65 64 20 62 79 }.is.#{f[1]}."..}....#.Sorted.by
26a60 20 6c 65 6e 67 74 68 20 6f 66 20 76 61 6c 75 65 73 0d 0a 66 6f 6f 64 5f 63 6f 6c 6f 72 2e 73 6f .length.of.values..food_color.so
26a80 72 74 20 7b 20 7c 61 2c 62 7c 20 61 5b 31 5d 2e 6c 65 6e 67 74 68 20 3c 3d 3e 20 62 5b 31 5d 2e rt.{.|a,b|.a[1].length.<=>.b[1].
26aa0 6c 65 6e 67 74 68 20 7d 2e 65 61 63 68 20 7b 20 7c 66 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 23 length.}.each.{.|f|......puts."#
26ac0 7b 66 5b 30 5d 7d 20 69 73 20 23 7b 66 5b 31 5d 7d 2e 22 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 {f[0]}.is.#{f[1]}."..}......#.@@
26ae0 50 4c 45 41 43 40 40 5f 35 2e 31 30 0d 0a 6d 65 72 67 65 64 20 3d 20 61 2e 63 6c 6f 6e 65 2e 75 PLEAC@@_5.10..merged.=.a.clone.u
26b00 70 64 61 74 65 28 62 29 20 20 20 20 20 20 20 20 23 20 62 65 63 61 75 73 65 20 48 61 73 68 23 75 pdate(b)........#.because.Hash#u
26b20 70 64 61 74 65 20 63 68 61 6e 67 65 73 20 6f 62 6a 65 63 74 20 69 6e 20 70 6c 61 63 65 0d 0a 0d pdate.changes.object.in.place...
26b40 0a 64 72 69 6e 6b 5f 63 6f 6c 6f 72 20 3d 20 7b 20 22 47 61 6c 6c 69 61 6e 6f 22 20 20 3d 3e 20 .drink_color.=.{."Galliano"..=>.
26b60 22 79 65 6c 6c 6f 77 22 2c 20 22 4d 61 69 20 54 61 69 22 20 3d 3e 20 22 62 6c 75 65 22 20 7d 0d "yellow",."Mai.Tai".=>."blue".}.
26b80 0a 69 6e 67 65 73 74 65 64 5f 63 6f 6c 6f 72 20 3d 20 64 72 69 6e 6b 5f 63 6f 6c 6f 72 2e 63 6c .ingested_color.=.drink_color.cl
26ba0 6f 6e 65 2e 75 70 64 61 74 65 28 66 6f 6f 64 5f 63 6f 6c 6f 72 29 0d 0a 0d 0a 73 75 62 73 74 61 one.update(food_color)....substa
26bc0 6e 63 65 5f 63 6f 6c 6f 72 20 3d 20 7b 7d 0d 0a 66 6f 72 20 69 20 69 6e 20 5b 20 66 6f 6f 64 5f nce_color.=.{}..for.i.in.[.food_
26be0 63 6f 6c 6f 72 2c 20 64 72 69 6e 6b 5f 63 6f 6c 6f 72 20 5d 0d 0a 20 20 20 20 69 2e 65 61 63 68 color,.drink_color.]......i.each
26c00 5f 6b 65 79 20 7b 20 7c 6b 7c 0d 0a 20 20 20 20 20 20 20 20 69 66 20 73 75 62 73 74 61 6e 63 65 _key.{.|k|..........if.substance
26c20 5f 63 6f 6c 6f 72 2e 68 61 73 5f 6b 65 79 3f 28 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 _color.has_key?(k)..............
26c40 70 75 74 73 20 22 57 61 72 6e 69 6e 67 3a 20 23 7b 6b 7d 20 73 65 65 6e 20 74 77 69 63 65 2e 20 puts."Warning:.#{k}.seen.twice..
26c60 20 55 73 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69 74 69 6f 6e 2e 22 0d 0a 20 .Using.the.first.definition."...
26c80 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 74 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 ...........next..........end....
26ca0 20 20 20 20 20 20 73 75 62 73 74 61 6e 63 65 5f 63 6f 6c 6f 72 5b 6b 5d 20 3d 20 31 0d 0a 20 20 ......substance_color[k].=.1....
26cc0 20 20 7d 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 31 31 0d 0a ..}..end......#.@@PLEAC@@_5.11..
26ce0 63 6f 6d 6d 6f 6e 20 3d 20 68 61 73 68 31 2e 6b 65 79 73 20 26 20 68 61 73 68 32 2e 6b 65 79 73 common.=.hash1.keys.&.hash2.keys
26d00 0d 0a 0d 0a 74 68 69 73 5f 6e 6f 74 5f 74 68 61 74 20 3d 20 68 61 73 68 31 2e 6b 65 79 73 20 2d ....this_not_that.=.hash1.keys.-
26d20 20 68 61 73 68 32 2e 6b 65 79 73 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 31 .hash2.keys......#.@@PLEAC@@_5.1
26d40 32 0d 0a 23 20 6e 6f 20 70 72 6f 62 6c 65 6d 20 68 65 72 65 2c 20 52 75 62 79 20 68 61 6e 64 6c 2..#.no.problem.here,.Ruby.handl
26d60 65 73 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 6f 62 6a 65 63 74 20 66 6f 72 20 6b 65 79 2d 69 6e es.any.kind.of.object.for.key-in
26d80 67 0d 0a 23 20 28 69 74 20 74 61 6b 65 73 20 4f 62 6a 65 63 74 23 68 61 73 68 2c 20 77 68 69 63 g..#.(it.takes.Object#hash,.whic
26da0 68 20 64 65 66 61 75 6c 74 73 20 74 6f 20 4f 62 6a 65 63 74 23 69 64 29 0d 0a 0d 0a 0d 0a 23 20 h.defaults.to.Object#id)......#.
26dc0 40 40 50 4c 45 41 43 40 40 5f 35 2e 31 33 0d 0a 23 20 41 46 41 49 4b 2c 20 6e 6f 74 20 70 6f 73 @@PLEAC@@_5.13..#.AFAIK,.not.pos
26de0 73 69 62 6c 65 20 69 6e 20 52 75 62 79 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 sible.in.Ruby......#.@@PLEAC@@_5
26e00 2e 31 34 0d 0a 23 20 42 65 20 63 61 72 65 66 75 6c 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 .14..#.Be.careful,.the.following
26e20 20 69 73 20 70 6f 73 73 69 62 6c 65 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 46 69 78 6e 75 6d .is.possible.only.because.Fixnum
26e40 20 6f 62 6a 65 63 74 73 20 61 72 65 0d 0a 23 20 73 70 65 63 69 61 6c 20 28 64 6f 63 75 6d 65 6e .objects.are..#.special.(documen
26e60 74 61 74 69 6f 6e 20 73 61 79 73 3a 20 74 68 65 72 65 20 69 73 20 65 66 66 65 63 74 69 76 65 6c tation.says:.there.is.effectivel
26e80 79 20 6f 6e 6c 79 20 6f 6e 65 20 46 69 78 6e 75 6d 20 6f 62 6a 65 63 74 0d 0a 23 20 69 6e 73 74 y.only.one.Fixnum.object..#.inst
26ea0 61 6e 63 65 20 66 6f 72 20 61 6e 79 20 67 69 76 65 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 ance.for.any.given.integer.value
26ec0 29 2e 0d 0a 63 6f 75 6e 74 20 3d 20 48 61 73 68 2e 6e 65 77 28 30 29 0d 0a 61 72 72 61 79 2e 65 )...count.=.Hash.new(0)..array.e
26ee0 61 63 68 20 7b 20 7c 65 7c 0d 0a 20 20 20 20 63 6f 75 6e 74 5b 65 5d 20 2b 3d 20 31 0d 0a 7d 0d ach.{.|e|......count[e].+=.1..}.
26f00 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 31 35 0d 0a 66 61 74 68 65 72 20 3d 20 .....#.@@PLEAC@@_5.15..father.=.
26f20 7b 0d 0a 20 20 20 20 22 43 61 69 6e 22 20 20 20 20 20 20 2c 20 22 41 64 61 6d 22 2c 0d 0a 20 20 {......"Cain"......,."Adam",....
26f40 20 20 22 41 62 65 6c 22 20 20 20 20 20 20 2c 20 22 41 64 61 6d 22 2c 0d 0a 20 20 20 20 22 53 65 .."Abel"......,."Adam",......"Se
26f60 74 68 22 20 20 20 20 20 20 2c 20 22 41 64 61 6d 22 2c 0d 0a 20 20 20 20 22 45 6e 6f 63 68 22 20 th"......,."Adam",......"Enoch".
26f80 20 20 20 20 2c 20 22 43 61 69 6e 22 2c 0d 0a 20 20 20 20 22 49 72 61 64 22 20 20 20 20 20 20 2c ....,."Cain",......"Irad"......,
26fa0 20 22 45 6e 6f 63 68 22 2c 0d 0a 20 20 20 20 22 4d 65 68 75 6a 61 65 6c 22 20 20 2c 20 22 49 72 ."Enoch",......"Mehujael"..,."Ir
26fc0 61 64 22 2c 0d 0a 20 20 20 20 22 4d 65 74 68 75 73 61 65 6c 22 20 2c 20 22 4d 65 68 75 6a 61 65 ad",......"Methusael".,."Mehujae
26fe0 6c 22 2c 0d 0a 20 20 20 20 22 4c 61 6d 65 63 68 22 20 20 20 20 2c 20 22 4d 65 74 68 75 73 61 65 l",......"Lamech"....,."Methusae
27000 6c 22 2c 0d 0a 20 20 20 20 22 4a 61 62 61 6c 22 20 20 20 20 20 2c 20 22 4c 61 6d 65 63 68 22 2c l",......"Jabal".....,."Lamech",
27020 0d 0a 20 20 20 20 22 4a 75 62 61 6c 22 20 20 20 20 20 2c 20 22 4c 61 6d 65 63 68 22 2c 0d 0a 20 ......"Jubal".....,."Lamech",...
27040 20 20 20 22 54 75 62 61 6c 63 61 69 6e 22 20 2c 20 22 4c 61 6d 65 63 68 22 2c 0d 0a 20 20 20 20 ..."Tubalcain".,."Lamech",......
27060 22 45 6e 6f 73 22 20 20 20 20 20 20 2c 20 22 53 65 74 68 22 2c 0d 0a 7d 0d 0a 0d 0a 77 68 69 6c "Enos"......,."Seth",..}....whil
27080 65 20 67 65 74 73 0d 0a 20 20 20 20 63 68 6f 6d 70 0d 0a 20 20 20 20 62 65 67 69 6e 0d 0a 20 20 e.gets......chomp......begin....
270a0 20 20 20 20 20 20 70 72 69 6e 74 20 24 5f 2c 20 22 20 22 0d 0a 20 20 20 20 65 6e 64 20 77 68 69 ......print.$_,."."......end.whi
270c0 6c 65 20 24 5f 20 3d 20 66 61 74 68 65 72 5b 24 5f 5d 0d 0a 20 20 20 20 70 75 74 73 0d 0a 65 6e le.$_.=.father[$_]......puts..en
270e0 64 0d 0a 0d 0a 63 68 69 6c 64 72 65 6e 20 3d 20 7b 7d 0d 0a 66 61 74 68 65 72 2e 65 61 63 68 20 d....children.=.{}..father.each.
27100 7b 20 7c 6b 2c 76 7c 0d 0a 20 20 20 20 28 63 68 69 6c 64 72 65 6e 5b 76 5d 20 7c 7c 3d 20 5b 5d {.|k,v|......(children[v].||=.[]
27120 29 20 3c 3c 20 6b 0d 0a 7d 0d 0a 77 68 69 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 63 68 6f 6d 70 ).<<.k..}..while.gets......chomp
27140 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 24 5f 7d 20 62 65 67 61 74 20 23 7b 28 63 68 69 6c 64 ......puts."#{$_}.begat.#{(child
27160 72 65 6e 5b 24 5f 5d 20 7c 7c 20 5b 27 4e 6f 62 6f 64 79 27 5d 29 2e 6a 6f 69 6e 28 27 2c 20 27 ren[$_].||.['Nobody']).join(',.'
27180 29 7d 2e 5c 6e 22 0d 0a 65 6e 64 0d 0a 0d 0a 69 6e 63 6c 75 64 65 73 20 3d 20 7b 7d 0d 0a 66 69 )}.\n"..end....includes.=.{}..fi
271a0 6c 65 73 2e 65 61 63 68 20 7b 20 7c 66 7c 0d 0a 20 20 20 20 62 65 67 69 6e 0d 0a 20 20 20 20 20 les.each.{.|f|......begin.......
271c0 20 20 20 66 6f 72 20 6c 20 69 6e 20 49 4f 2e 72 65 61 64 6c 69 6e 65 73 28 66 29 0d 0a 20 20 20 ...for.l.in.IO.readlines(f).....
271e0 20 20 20 20 20 20 20 20 20 6e 65 78 74 20 75 6e 6c 65 73 73 20 6c 20 3d 7e 20 2f 5e 5c 73 2a 23 .........next.unless.l.=~./^\s*#
27200 5c 73 2a 69 6e 63 6c 75 64 65 5c 73 2a 3c 28 5b 5e 3e 5d 2b 29 3e 2f 0d 0a 20 20 20 20 20 20 20 \s*include\s*<([^>]+)>/.........
27220 20 20 20 20 20 28 69 6e 63 6c 75 64 65 73 5b 24 31 5d 20 7c 7c 3d 20 5b 5d 29 20 3c 3c 20 66 0d .....(includes[$1].||=.[]).<<.f.
27240 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 72 65 73 63 75 65 20 53 79 73 74 65 6d 43 .........end......rescue.SystemC
27260 61 6c 6c 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 73 20 22 allError..........$stderr.puts."
27280 23 24 21 20 28 73 6b 69 70 70 69 6e 67 29 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 7d 0d 0a 0d 0a 69 #$!.(skipping)"......end..}....i
272a0 6e 63 6c 75 64 65 5f 66 72 65 65 20 3d 20 69 6e 63 6c 75 64 65 73 2e 76 61 6c 75 65 73 2e 66 6c nclude_free.=.includes.values.fl
272c0 61 74 74 65 6e 2e 75 6e 69 71 20 2d 20 69 6e 63 6c 75 64 65 73 2e 6b 65 79 73 0d 0a 0d 0a 0d 0a atten.uniq.-.includes.keys......
272e0 23 20 40 40 50 4c 45 41 43 40 40 5f 35 2e 31 36 0d 0a 23 20 64 75 74 72 65 65 20 2d 20 70 72 69 #.@@PLEAC@@_5.16..#.dutree.-.pri
27300 6e 74 20 73 6f 72 74 65 64 20 69 6e 74 65 6e 74 65 64 20 72 65 6e 64 69 74 69 6f 6e 20 6f 66 20 nt.sorted.intented.rendition.of.
27320 64 75 20 6f 75 74 70 75 74 0d 0a 23 25 20 64 75 74 72 65 65 0d 0a 23 25 20 64 75 74 72 65 65 20 du.output..#%.dutree..#%.dutree.
27340 2f 75 73 72 0d 0a 23 25 20 64 75 74 72 65 65 20 2d 61 0d 0a 23 25 20 64 75 74 72 65 65 20 2d 61 /usr..#%.dutree.-a..#%.dutree.-a
27360 20 2f 62 69 6e 0d 0a 0d 0a 23 20 54 68 65 20 44 75 4e 6f 64 65 20 63 6c 61 73 73 20 63 6f 6c 6c ./bin....#.The.DuNode.class.coll
27380 65 63 74 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 64 69 72 ects.all.information.about.a.dir
273a0 65 63 74 6f 72 79 2c 0d 0a 23 20 61 6e 64 20 70 72 6f 76 69 64 65 73 20 73 6f 6d 65 20 63 6f 6e ectory,..#.and.provides.some.con
273c0 76 65 6e 69 65 6e 63 65 20 6d 65 74 68 6f 64 73 0d 0a 63 6c 61 73 73 20 44 75 4e 6f 64 65 0d 0a venience.methods..class.DuNode..
273e0 0d 0a 20 20 20 20 61 74 74 72 5f 72 65 61 64 65 72 20 3a 6e 61 6d 65 0d 0a 20 20 20 20 61 74 74 ......attr_reader.:name......att
27400 72 5f 61 63 63 65 73 73 6f 72 20 3a 73 69 7a 65 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 r_accessor.:size......attr_acces
27420 73 6f 72 20 3a 6b 69 64 73 0d 0a 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 sor.:kids........def.initialize(
27440 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 40 6e 61 6d 65 20 3d 20 6e 61 6d 65 0d 0a 20 20 20 name)..........@name.=.name.....
27460 20 20 20 20 20 40 6b 69 64 73 20 3d 20 5b 5d 0d 0a 20 20 20 20 20 20 20 20 40 73 69 7a 65 20 3d .....@kids.=.[]..........@size.=
27480 20 30 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 73 75 70 70 6f 72 74 20 66 6f 72 .0......end........#.support.for
274a0 20 73 6f 72 74 69 6e 67 20 6e 6f 64 65 73 20 77 69 74 68 20 73 69 64 65 0d 0a 20 20 20 20 64 65 .sorting.nodes.with.side......de
274c0 66 20 73 69 7a 65 5f 63 6f 6d 70 61 72 65 28 6e 6f 64 65 32 29 0d 0a 20 20 20 20 20 20 20 20 40 f.size_compare(node2)..........@
274e0 73 69 7a 65 20 3c 3d 3e 20 6e 6f 64 65 32 2e 73 69 7a 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a size.<=>.node2.size......end....
27500 20 20 20 20 64 65 66 20 62 61 73 65 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 40 6e 61 6d 65 2e ....def.basename..........@name.
27520 73 75 62 28 2f 2e 2a 5c 2f 2f 2c 20 22 22 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 sub(/.*\//,."")......end........
27540 23 72 65 74 75 72 6e 73 20 73 75 62 73 74 72 69 6e 67 20 62 65 66 6f 72 65 20 6c 61 73 74 20 22 #returns.substring.before.last."
27560 2f 22 2c 20 6e 69 6c 20 69 66 20 6e 6f 74 20 74 68 65 72 65 0d 0a 20 20 20 20 64 65 66 20 70 61 /",.nil.if.not.there......def.pa
27580 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 70 20 3d 20 40 6e 61 6d 65 2e 73 75 62 28 2f 5c 2f 5b rent..........p.=.@name.sub(/\/[
275a0 5e 5c 2f 5d 2b 24 2f 2c 22 22 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 70 20 3d 3d 20 40 6e 61 ^\/]+$/,"")..........if.p.==.@na
275c0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 me..............nil..........els
275e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 e..............p..........end...
27600 20 20 20 65 6e 64 0d 0a 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 68 65 20 44 75 54 72 65 65 20 64 6f ...end....end....#.The.DuTree.do
27620 65 73 20 74 68 65 20 61 63 64 74 75 61 6c 20 77 6f 72 6b 20 6f 66 0d 0a 23 20 67 65 74 74 69 6e es.the.acdtual.work.of..#.gettin
27640 67 20 74 68 65 20 69 6e 70 75 74 2c 20 70 61 72 73 69 6e 67 20 69 74 2c 20 62 75 69 6c 67 69 6e g.the.input,.parsing.it,.builgin
27660 67 20 75 70 20 61 20 74 72 65 65 0d 0a 23 20 61 6e 64 20 66 6f 72 6d 61 74 20 69 74 20 66 6f 72 g.up.a.tree..#.and.format.it.for
27680 20 6f 75 74 70 75 74 0d 0a 63 6c 61 73 73 20 44 75 74 72 65 65 0d 0a 0d 0a 20 20 20 20 61 74 74 .output..class.Dutree........att
276a0 72 5f 72 65 61 64 65 72 20 3a 74 6f 70 64 69 72 0d 0a 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 r_reader.:topdir........def.init
276c0 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 40 6e 6f 64 65 73 20 3d 20 48 61 73 68 2e 6e 65 ialize..........@nodes.=.Hash.ne
276e0 77 0d 0a 20 20 20 20 20 20 20 20 40 64 69 72 73 69 7a 65 73 20 3d 20 48 61 73 68 2e 6e 65 77 28 w..........@dirsizes.=.Hash.new(
27700 30 29 0d 0a 20 20 20 20 20 20 20 20 40 6b 69 64 73 20 3d 20 48 61 73 68 2e 6e 65 77 28 5b 5d 29 0)..........@kids.=.Hash.new([])
27720 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 67 65 74 20 61 20 6e 6f 64 65 20 62 79 ......end........#.get.a.node.by
27740 20 6e 61 6d 65 2c 20 63 72 65 61 74 65 20 69 74 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 .name,.create.it.if.it.does.not.
27760 65 78 69 73 74 20 79 65 74 0d 0a 20 20 20 20 64 65 66 20 67 65 74 5f 63 72 65 61 74 65 5f 6e 6f exist.yet......def.get_create_no
27780 64 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 40 6e 6f 64 65 73 2e 68 61 73 5f de(name)..........if.@nodes.has_
277a0 6b 65 79 3f 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 6e 6f 64 65 73 5b 6e key?(name)..............@nodes[n
277c0 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ame]..........else..............
277e0 6e 6f 64 65 20 3d 20 44 75 4e 6f 64 65 2e 6e 65 77 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 node.=.DuNode.new(name).........
27800 20 20 20 20 20 40 6e 6f 64 65 73 5b 6e 61 6d 65 5d 20 3d 20 6e 6f 64 65 0d 0a 20 20 20 20 20 20 .....@nodes[name].=.node........
27820 20 20 20 20 20 20 6e 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 ......node..........end......end
27840 0d 0a 0d 0a 20 20 20 20 23 20 72 75 6e 20 64 75 2c 20 72 65 61 64 20 69 6e 20 69 6e 70 75 74 2c ........#.run.du,.read.in.input,
27860 20 73 61 76 65 20 73 69 7a 65 73 20 61 6e 64 20 6b 69 64 73 0d 0a 20 20 20 20 23 20 73 74 6f 72 .save.sizes.and.kids......#.stor
27880 65 73 20 6c 61 73 74 20 64 69 72 65 63 74 6f 72 79 20 72 65 61 64 20 69 6e 20 69 6e 73 74 61 6e es.last.directory.read.in.instan
278a0 63 65 20 76 61 72 69 61 62 6c 65 20 74 6f 70 64 69 72 0d 0a 20 20 20 20 64 65 66 20 69 6e 70 75 ce.variable.topdir......def.inpu
278c0 74 28 61 72 67 75 6d 65 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 22 0d t(arguments)..........name.=."".
278e0 0a 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 22 64 75 20 22 20 2b 20 61 72 67 75 6d 65 6e 74 73 .........cmd.=."du.".+.arguments
27900 2e 6a 6f 69 6e 28 22 20 22 29 0d 0a 20 20 20 20 20 20 20 20 49 4f 2e 70 6f 70 65 6e 28 63 6d 64 .join(".")..........IO.popen(cmd
27920 29 20 7b 20 7c 70 69 70 65 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 69 70 65 2e 65 61 63 ).{.|pipe|..............pipe.eac
27940 68 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 h.{.|line|..................size
27960 2c 20 6e 61 6d 65 20 3d 20 6c 69 6e 65 2e 63 68 6f 6d 70 2e 73 70 6c 69 74 28 2f 5c 73 2b 2f 2c ,.name.=.line.chomp.split(/\s+/,
27980 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 20 3d 20 67 65 74 5f .2)..................node.=.get_
279a0 63 72 65 61 74 65 5f 6e 6f 64 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 create_node(name)...............
279c0 20 20 20 6e 6f 64 65 2e 73 69 7a 65 20 3d 20 73 69 7a 65 2e 74 6f 5f 69 0d 0a 20 20 20 20 20 20 ...node.size.=.size.to_i........
279e0 20 20 20 20 20 20 20 20 20 20 40 6e 6f 64 65 73 5b 6e 61 6d 65 5d 20 3d 20 6e 6f 64 65 0d 0a 20 ..........@nodes[name].=.node...
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 3d 20 6e 6f 64 65 2e 70 61 72 ...............parent.=.node.par
27a20 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 70 61 72 65 6e 74 0d 0a ent..................if.parent..
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 5f 63 72 65 61 74 65 5f 6e ....................get_create_n
27a60 6f 64 65 28 70 61 72 65 6e 74 29 2e 6b 69 64 73 2e 70 75 73 68 28 6e 6f 64 65 29 0d 0a 20 20 20 ode(parent).kids.push(node).....
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .............end..............}.
27aa0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 40 74 6f 70 64 69 72 20 3d 20 40 6e .........}..........@topdir.=.@n
27ac0 6f 64 65 73 5b 6e 61 6d 65 5d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 66 69 67 odes[name]......end........#.fig
27ae0 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 69 73 20 74 61 6b 65 6e 20 69 6e 20 65 61 63 ure.out.how.much.is.taken.in.eac
27b00 68 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 23 20 74 68 61 74 20 69 73 6e 27 74 20 73 74 h.directory......#.that.isn't.st
27b20 6f 72 65 64 20 69 6e 20 74 68 65 20 73 75 62 64 69 72 65 63 74 6f 72 69 65 73 2e 20 41 64 64 20 ored.in.the.subdirectories..Add.
27b40 61 20 6e 65 77 0d 0a 20 20 20 20 23 20 66 61 6b 65 20 6b 69 64 20 63 61 6c 6c 65 64 20 22 2e 22 a.new......#.fake.kid.called."."
27b60 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 61 74 20 6d 75 63 68 2e 0d 0a 20 20 20 20 64 65 66 20 .containing.that.much.......def.
27b80 67 65 74 5f 64 6f 74 73 28 6e 6f 64 65 29 0d 0a 20 20 20 20 20 20 20 20 63 75 72 73 69 7a 65 20 get_dots(node)..........cursize.
27ba0 3d 20 6e 6f 64 65 2e 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6b 69 64 20 69 6e 20 =.node.size..........for.kid.in.
27bc0 6e 6f 64 65 2e 6b 69 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 73 69 7a 65 20 2d node.kids..............cursize.-
27be0 3d 20 20 6b 69 64 2e 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 5f 64 6f 74 =..kid.size..............get_dot
27c00 73 28 6b 69 64 29 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 69 66 20 s(kid)..........end..........if.
27c20 6e 6f 64 65 2e 73 69 7a 65 20 21 3d 20 63 75 72 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 node.size.!=.cursize............
27c40 20 20 6e 65 77 6e 6f 64 65 20 3d 20 67 65 74 5f 63 72 65 61 74 65 5f 6e 6f 64 65 28 6e 6f 64 65 ..newnode.=.get_create_node(node
27c60 2e 6e 61 6d 65 20 2b 20 22 2f 2e 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 6e 6f .name.+."/.")..............newno
27c80 64 65 2e 73 69 7a 65 20 3d 20 63 75 72 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e de.size.=.cursize..............n
27ca0 6f 64 65 2e 6b 69 64 73 2e 70 75 73 68 28 6e 65 77 6e 6f 64 65 29 0d 0a 20 20 20 20 20 20 20 20 ode.kids.push(newnode)..........
27cc0 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 72 65 63 75 72 73 69 76 65 6c end......end........#.recursivel
27ce0 79 20 6f 75 74 70 75 74 20 65 76 65 72 79 74 68 69 6e 67 0d 0a 20 20 20 20 23 20 70 61 73 73 69 y.output.everything......#.passi
27d00 6e 67 20 70 61 64 64 69 6e 67 20 61 6e 64 20 6e 75 6d 62 65 72 20 77 69 64 74 68 20 61 73 20 77 ng.padding.and.number.width.as.w
27d20 65 6c 6c 0d 0a 20 20 20 20 23 20 6f 6e 20 72 65 63 75 72 73 69 76 65 20 63 61 6c 6c 73 0d 0a 20 ell......#.on.recursive.calls...
27d40 20 20 20 64 65 66 20 6f 75 74 70 75 74 28 6e 6f 64 65 2c 20 70 72 65 66 69 78 3d 22 22 2c 20 77 ...def.output(node,.prefix="",.w
27d60 69 64 74 68 3d 30 29 0d 0a 20 20 20 20 20 20 20 20 6c 69 6e 65 20 3d 20 73 70 72 69 6e 74 66 28 idth=0)..........line.=.sprintf(
27d80 22 25 23 7b 77 69 64 74 68 7d 64 20 25 73 22 2c 20 6e 6f 64 65 2e 73 69 7a 65 2c 20 6e 6f 64 65 "%#{width}d.%s",.node.size,.node
27da0 2e 62 61 73 65 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 28 70 72 65 66 69 78 20 .basename)..........puts(prefix.
27dc0 2b 20 6c 69 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 2b 3d 20 6c 69 6e 65 2e +.line)..........prefix.+=.line.
27de0 73 75 62 28 2f 5c 64 20 2f 2c 20 22 7c 20 22 29 0d 0a 20 20 20 20 20 20 20 20 70 72 65 66 69 78 sub(/\d./,."|.")..........prefix
27e00 2e 67 73 75 62 21 28 2f 5b 5e 7c 5d 2f 2c 20 22 20 22 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 .gsub!(/[^|]/,.".")..........if.
27e20 6e 6f 64 65 2e 6b 69 64 73 2e 6c 65 6e 67 74 68 20 3e 20 30 20 20 20 20 20 23 20 6e 6f 74 20 61 node.kids.length.>.0.....#.not.a
27e40 20 62 61 63 68 65 6c 6f 72 20 6e 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 64 73 .bachelor.node..............kids
27e60 20 3d 20 6e 6f 64 65 2e 6b 69 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 64 73 2e 73 .=.node.kids..............kids.s
27e80 6f 72 74 21 20 7b 20 7c 61 2c 62 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2e ort!.{.|a,b|..................b.
27ea0 73 69 7a 65 5f 63 6f 6d 70 61 72 65 28 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a size_compare(a)..............}..
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 6b 69 64 73 5b 30 5d 2e 73 69 7a 65 ............width.=.kids[0].size
27ee0 2e 74 6f 5f 73 2e 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6b 69 .to_s.length..............for.ki
27f00 64 20 69 6e 20 6b 69 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 d.in.kids..................outpu
27f20 74 28 6b 69 64 2c 20 70 72 65 66 69 78 2c 20 77 69 64 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 t(kid,.prefix,.width)...........
27f40 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a ...end..........end......end....
27f60 65 6e 64 0d 0a 0d 0a 74 72 65 65 20 3d 20 44 75 74 72 65 65 2e 6e 65 77 0d 0a 74 72 65 65 2e 69 end....tree.=.Dutree.new..tree.i
27f80 6e 70 75 74 28 41 52 47 56 29 0d 0a 74 72 65 65 2e 67 65 74 5f 64 6f 74 73 28 74 72 65 65 2e 74 nput(ARGV)..tree.get_dots(tree.t
27fa0 6f 70 64 69 72 29 0d 0a 74 72 65 65 2e 6f 75 74 70 75 74 28 74 72 65 65 2e 74 6f 70 64 69 72 29 opdir)..tree.output(tree.topdir)
27fc0 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 30 0d 0a 23 20 54 68 65 20 76 65 72 ......#.@@PLEAC@@_6.0..#.The.ver
27fe0 62 6f 73 65 20 76 65 72 73 69 6f 6e 20 61 72 65 20 6d 61 74 63 68 2c 20 73 75 62 2c 20 67 73 75 bose.version.are.match,.sub,.gsu
28000 62 2c 20 73 75 62 21 20 61 6e 64 20 67 73 75 62 21 3b 0d 0a 23 20 70 61 74 74 65 72 6e 20 6e 65 b,.sub!.and.gsub!;..#.pattern.ne
28020 65 64 73 20 74 6f 20 62 65 20 61 20 52 65 67 65 78 70 20 6f 62 6a 65 63 74 3b 20 69 74 20 79 69 eds.to.be.a.Regexp.object;.it.yi
28040 65 6c 64 73 20 61 20 4d 61 74 63 68 44 61 74 61 0d 0a 23 20 6f 62 6a 65 63 74 2e 0d 0a 70 61 74 elds.a.MatchData..#.object...pat
28060 74 65 72 6e 2e 6d 61 74 63 68 28 73 74 72 69 6e 67 29 0d 0a 73 74 72 69 6e 67 2e 73 75 62 28 70 tern.match(string)..string.sub(p
28080 61 74 74 65 72 6e 2c 20 72 65 70 6c 61 63 65 6d 65 6e 74 29 0d 0a 73 74 72 69 6e 67 2e 67 73 75 attern,.replacement)..string.gsu
280a0 62 28 70 61 74 74 65 72 6e 2c 20 72 65 70 6c 61 63 65 6d 65 6e 74 29 0d 0a 23 20 41 73 20 75 73 b(pattern,.replacement)..#.As.us
280c0 75 61 6c 20 69 6e 20 52 75 62 79 2c 20 73 75 62 21 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 ual.in.Ruby,.sub!.does.the.same.
280e0 61 73 20 73 75 62 20 62 75 74 20 61 6c 73 6f 20 6d 6f 64 69 66 69 65 73 0d 0a 23 20 74 68 65 20 as.sub.but.also.modifies..#.the.
28100 6f 62 6a 65 63 74 2c 20 74 68 65 20 73 61 6d 65 20 66 6f 72 20 67 73 75 62 21 2f 67 73 75 62 2e object,.the.same.for.gsub!/gsub.
28120 0d 0a 0d 0a 23 20 53 75 67 61 72 65 64 20 73 79 6e 74 61 78 20 79 69 65 6c 64 73 20 74 68 65 20 ....#.Sugared.syntax.yields.the.
28140 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 61 74 63 68 20 28 6f 72 20 6e 69 6c 20 69 66 position.of.the.match.(or.nil.if
28160 20 6e 6f 0d 0a 23 20 6d 61 74 63 68 29 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 6f 62 6a .no..#.match)..Note.that.the.obj
28180 65 63 74 20 61 74 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 ect.at.the.right.of.the.operator
281a0 20 6e 65 65 64 73 0d 0a 23 20 6e 6f 74 20 74 6f 20 62 65 20 61 20 52 65 67 65 78 70 20 6f 62 6a .needs..#.not.to.be.a.Regexp.obj
281c0 65 63 74 20 28 69 74 20 63 61 6e 20 62 65 20 61 20 53 74 72 69 6e 67 29 2e 20 54 68 65 20 22 64 ect.(it.can.be.a.String)..The."d
281e0 6f 6e 74 0d 0a 23 20 6d 61 74 63 68 22 20 6f 70 65 72 61 74 6f 72 20 79 69 65 6c 64 73 20 74 72 ont..#.match".operator.yields.tr
28200 75 65 20 6f 72 20 66 61 6c 73 65 2e 0d 0a 6d 65 61 64 6f 77 20 3d 7e 20 2f 73 68 65 65 70 2f 20 ue.or.false...meadow.=~./sheep/.
28220 20 20 23 20 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 61 74 63 68 2c 20 6e 69 6c 20 69 ..#.position.of.the.match,.nil.i
28240 66 20 6e 6f 20 6d 61 74 63 68 0d 0a 6d 65 61 64 6f 77 20 21 7e 20 2f 73 68 65 65 70 2f 20 20 20 f.no.match..meadow.!~./sheep/...
28260 23 20 74 72 75 65 20 69 66 20 64 6f 65 73 6e 27 74 20 6d 61 74 63 68 2c 20 66 61 6c 73 65 20 69 #.true.if.doesn't.match,.false.i
28280 66 20 69 74 20 64 6f 65 73 0d 0a 23 20 54 68 65 72 65 20 69 73 20 6e 6f 20 73 75 67 61 72 65 64 f.it.does..#.There.is.no.sugared
282a0 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e 0d 0a 0d .version.for.the.substitution...
282c0 0a 6d 65 61 64 6f 77 20 3d 7e 20 2f 5c 62 6f 76 69 6e 65 73 3f 5c 62 2f 69 20 61 6e 64 20 70 72 .meadow.=~./\bovines?\b/i.and.pr
282e0 69 6e 74 20 22 48 65 72 65 20 62 65 20 73 68 65 65 70 21 22 0d 0a 0d 0a 73 74 72 69 6e 67 20 3d int."Here.be.sheep!"....string.=
28300 20 22 67 6f 6f 64 20 66 6f 6f 64 22 0d 0a 73 74 72 69 6e 67 2e 73 75 62 21 28 2f 6f 2a 2f 2c 20 ."good.food"..string.sub!(/o*/,.
28320 27 65 27 29 0d 0a 0d 0a 23 20 25 20 65 63 68 6f 20 61 62 61 62 61 63 61 63 61 20 7c 20 72 75 62 'e')....#.%.echo.ababacaca.|.rub
28340 79 20 2d 6e 65 20 27 70 75 74 73 20 24 26 20 69 66 20 2f 28 61 7c 62 61 7c 62 29 2b 28 61 7c 61 y.-ne.'puts.$&.if./(a|ba|b)+(a|a
28360 63 29 2b 2f 27 0d 0a 23 20 61 62 61 62 61 0d 0a 0d 0a 23 20 54 68 65 20 22 67 6c 6f 62 61 6c 22 c)+/'..#.ababa....#.The."global"
28380 20 28 6f 72 20 22 6d 75 6c 74 69 70 6c 65 22 29 20 6d 61 74 63 68 20 69 73 20 68 61 6e 64 6c 65 .(or."multiple").match.is.handle
283a0 64 20 62 79 20 53 74 72 69 6e 67 23 73 63 61 6e 0d 0a 73 63 61 6e 20 28 2f 28 5c 64 2b 29 2f 29 d.by.String#scan..scan.(/(\d+)/)
283c0 20 7b 0d 0a 20 20 20 20 70 75 74 73 20 22 46 6f 75 6e 64 20 6e 75 6d 62 65 72 20 23 7b 24 31 7d .{......puts."Found.number.#{$1}
283e0 22 0d 0a 7d 0d 0a 0d 0a 23 20 53 74 72 69 6e 67 23 73 63 61 6e 20 79 69 65 6c 64 73 20 61 6e 20 "..}....#.String#scan.yields.an.
28400 41 72 72 61 79 20 69 66 20 6e 6f 74 20 75 73 65 64 20 77 69 74 68 20 61 20 62 6c 6f 63 6b 0d 0a Array.if.not.used.with.a.block..
28420 6e 75 6d 62 65 72 73 20 3d 20 73 63 61 6e 28 2f 5c 64 2b 2f 29 0d 0a 0d 0a 64 69 67 69 74 73 20 numbers.=.scan(/\d+/)....digits.
28440 3d 20 22 31 32 33 34 35 36 37 38 39 22 0d 0a 6e 6f 6e 6c 61 70 20 3d 20 64 69 67 69 74 73 2e 73 =."123456789"..nonlap.=.digits.s
28460 63 61 6e 28 2f 28 5c 64 5c 64 5c 64 29 2f 29 0d 0a 79 65 73 6c 61 70 20 3d 20 64 69 67 69 74 73 can(/(\d\d\d)/)..yeslap.=.digits
28480 2e 73 63 61 6e 28 2f 28 3f 3d 28 5c 64 5c 64 5c 64 29 29 2f 29 0d 0a 70 75 74 73 20 22 4e 6f 6e .scan(/(?=(\d\d\d))/)..puts."Non
284a0 2d 6f 76 65 72 6c 61 70 70 69 6e 67 3a 20 20 23 7b 6e 6f 6e 6c 61 70 2e 6a 6f 69 6e 28 27 20 27 -overlapping:..#{nonlap.join('.'
284c0 29 7d 22 0d 0a 70 75 74 73 20 22 4f 76 65 72 6c 61 70 70 69 6e 67 3a 20 20 20 20 20 20 23 7b 79 )}"..puts."Overlapping:......#{y
284e0 65 73 6c 61 70 2e 6a 6f 69 6e 28 27 20 27 29 7d 22 3b 0d 0a 23 20 4e 6f 6e 2d 6f 76 65 72 6c 61 eslap.join('.')}";..#.Non-overla
28500 70 70 69 6e 67 3a 20 20 31 32 33 20 34 35 36 20 37 38 39 0d 0a 23 20 4f 76 65 72 6c 61 70 70 69 pping:..123.456.789..#.Overlappi
28520 6e 67 3a 20 20 20 20 20 20 31 32 33 20 32 33 34 20 33 34 35 20 34 35 36 20 35 36 37 20 36 37 38 ng:......123.234.345.456.567.678
28540 20 37 38 39 0d 0a 0d 0a 73 74 72 69 6e 67 20 3d 20 22 41 6e 64 20 6c 69 74 74 6c 65 20 6c 61 6d .789....string.=."And.little.lam
28560 62 73 20 65 61 74 20 69 76 79 22 0d 0a 73 74 72 69 6e 67 20 3d 7e 20 2f 6c 5b 5e 73 5d 2a 73 2f bs.eat.ivy"..string.=~./l[^s]*s/
28580 0d 0a 70 75 74 73 20 22 28 23 24 60 29 20 28 23 24 26 29 20 28 23 24 27 29 22 0d 0a 23 20 28 41 ..puts."(#$`).(#$&).(#$')"..#.(A
285a0 6e 64 20 29 20 28 6c 69 74 74 6c 65 20 6c 61 6d 62 73 29 20 28 20 65 61 74 20 69 76 79 29 0d 0a nd.).(little.lambs).(.eat.ivy)..
285c0 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 31 0d 0a 23 20 52 75 62 79 20 64 6f 65 73 ....#.@@PLEAC@@_6.1..#.Ruby.does
285e0 6e 27 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 70 72 6f 62 6c 65 6d 3a 0d 0a 64 73 74 20 n't.have.the.same.problem:..dst.
28600 3d 20 73 72 63 2e 73 75 62 28 27 74 68 69 73 27 2c 20 27 74 68 61 74 27 29 0d 0a 0d 0a 70 72 6f =.src.sub('this',.'that')....pro
28620 67 6e 61 6d 65 20 3d 20 24 30 2e 73 75 62 28 27 5e 2e 2a 2f 27 2c 20 27 27 29 0d 0a 0d 0a 62 69 gname.=.$0.sub('^.*/',.'')....bi
28640 6e 64 69 72 73 20 3d 20 25 77 28 2f 75 73 72 2f 62 69 6e 20 2f 62 69 6e 20 2f 75 73 72 2f 6c 6f ndirs.=.%w(/usr/bin./bin./usr/lo
28660 63 61 6c 2f 62 69 6e 29 0d 0a 6c 69 62 64 69 72 73 20 3d 20 62 69 6e 64 69 72 73 2e 6d 61 70 20 cal/bin)..libdirs.=.bindirs.map.
28680 7b 20 7c 6c 7c 20 6c 2e 73 75 62 28 27 62 69 6e 27 2c 20 27 6c 69 62 27 29 20 7d 0d 0a 0d 0a 0d {.|l|.l.sub('bin',.'lib').}.....
286a0 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 33 0d 0a 2f 5c 53 2b 2f 20 20 20 20 20 20 20 20 20 .#.@@PLEAC@@_6.3../\S+/.........
286c0 20 20 20 20 20 20 23 20 61 73 20 6d 61 6e 79 20 6e 6f 6e 2d 77 68 69 74 65 73 70 61 63 65 20 62 ......#.as.many.non-whitespace.b
286e0 79 74 65 73 20 61 73 20 70 6f 73 73 69 62 6c 65 0d 0a 2f 5b 41 2d 5a 61 2d 7a 27 2d 5d 2b 2f 20 ytes.as.possible../[A-Za-z'-]+/.
28700 20 20 20 20 20 20 23 20 61 73 20 6d 61 6e 79 20 6c 65 74 74 65 72 73 2c 20 61 70 6f 73 74 72 6f ......#.as.many.letters,.apostro
28720 70 68 65 73 2c 20 61 6e 64 20 68 79 70 68 65 6e 73 0d 0a 0d 0a 2f 5c 62 28 5b 41 2d 5a 61 2d 7a phes,.and.hyphens..../\b([A-Za-z
28740 5d 2b 29 5c 62 2f 20 20 20 23 20 75 73 75 61 6c 6c 79 20 62 65 73 74 0d 0a 2f 5c 73 28 5b 41 2d ]+)\b/...#.usually.best../\s([A-
28760 5a 61 2d 7a 5d 2b 29 5c 73 2f 20 20 20 23 20 66 61 69 6c 73 20 61 74 20 65 6e 64 73 20 6f 72 20 Za-z]+)\s/...#.fails.at.ends.or.
28780 77 2f 20 70 75 6e 63 74 75 61 74 69 6f 6e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f w/.punctuation......#.@@PLEAC@@_
287a0 36 2e 34 0d 0a 72 65 71 75 69 72 65 20 27 73 6f 63 6b 65 74 27 0d 0a 73 74 72 20 3d 20 27 77 77 6.4..require.'socket'..str.=.'ww
287c0 77 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 20 61 6e 64 20 77 77 77 2e 72 75 62 79 67 61 72 64 w.ruby-lang.org.and.www.rubygard
287e0 65 6e 2e 6f 72 67 27 0d 0a 72 65 20 3d 20 2f 0d 0a 20 20 20 20 20 20 28 20 20 20 20 20 20 20 20 en.org'..re.=./........(........
28800 20 20 20 20 20 20 20 23 20 63 61 70 74 75 72 65 20 74 68 65 20 68 6f 73 74 6e 61 6d 65 20 69 6e .......#.capture.the.hostname.in
28820 20 24 31 0d 0a 20 20 20 20 20 20 20 20 28 3f 3a 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65 .$1..........(?:...........#.the
28840 73 65 20 70 61 72 65 6e 73 20 66 6f 72 20 67 72 6f 75 70 69 6e 67 20 6f 6e 6c 79 0d 0a 20 20 20 se.parens.for.grouping.only.....
28860 20 20 20 20 20 20 20 28 3f 21 20 5b 2d 5f 5d 20 29 20 20 23 20 6c 6f 6f 6b 61 68 65 61 64 20 66 .......(?!.[-_].)..#.lookahead.f
28880 6f 72 20 6e 65 69 74 68 65 72 20 75 6e 64 65 72 73 63 6f 72 65 20 6e 6f 72 20 64 61 73 68 0d 0a or.neither.underscore.nor.dash..
288a0 20 20 20 20 20 20 20 20 20 20 5b 5c 77 2d 5d 20 2b 20 20 20 20 20 23 20 68 6f 73 74 6e 61 6d 65 ..........[\w-].+.....#.hostname
288c0 20 63 6f 6d 70 6f 6e 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 5c 2e 20 20 20 20 20 20 20 20 .component............\.........
288e0 20 20 23 20 61 6e 64 20 74 68 65 20 64 6f 6d 61 69 6e 20 64 6f 74 0d 0a 20 20 20 20 20 20 20 20 ..#.and.the.domain.dot..........
28900 29 20 2b 20 20 20 20 20 20 20 20 20 20 20 23 20 6e 6f 77 20 72 65 70 65 61 74 20 74 68 61 74 20 ).+...........#.now.repeat.that.
28920 77 68 6f 6c 65 20 74 68 69 6e 67 20 61 20 62 75 6e 63 68 20 6f 66 20 74 69 6d 65 73 0d 0a 20 20 whole.thing.a.bunch.of.times....
28940 20 20 20 20 20 20 5b 41 2d 5a 61 2d 7a 5d 20 20 20 20 20 20 23 20 6e 65 78 74 20 6d 75 73 74 20 ......[A-Za-z]......#.next.must.
28960 62 65 20 61 20 6c 65 74 74 65 72 0d 0a 20 20 20 20 20 20 20 20 5b 5c 77 2d 5d 20 2b 20 20 20 20 be.a.letter..........[\w-].+....
28980 20 20 20 23 20 6e 6f 77 20 74 72 61 69 6c 69 6e 67 20 64 6f 6d 61 69 6e 20 70 61 72 74 0d 0a 20 ...#.now.trailing.domain.part...
289a0 20 20 20 20 20 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 65 6e 64 20 6f 66 20 24 31 .....)...............#.end.of.$1
289c0 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20 20 2f 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .capture......./x...............
289e0 23 20 2f 78 20 66 6f 72 20 6e 69 63 65 20 66 6f 72 6d 61 74 74 69 6e 67 0d 0a 0d 0a 73 74 72 2e #./x.for.nice.formatting....str.
28a00 67 73 75 62 21 20 72 65 20 64 6f 20 20 20 20 20 20 20 23 20 70 61 73 73 20 61 20 62 6c 6f 63 6b gsub!.re.do.......#.pass.a.block
28a20 20 74 6f 20 65 78 65 63 75 74 65 20 72 65 70 6c 61 63 65 6d 65 6e 74 0d 0a 20 20 20 20 68 6f 73 .to.execute.replacement......hos
28a40 74 20 3d 20 54 43 50 73 6f 63 6b 65 74 2e 67 65 74 68 6f 73 74 62 79 6e 61 6d 65 28 24 31 29 0d t.=.TCPsocket.gethostbyname($1).
28a60 0a 20 20 20 20 22 23 7b 24 31 7d 20 5b 23 7b 68 6f 73 74 5b 33 5d 7d 5d 22 0d 0a 65 6e 64 0d 0a ....."#{$1}.[#{host[3]}]"..end..
28a80 0d 0a 70 75 74 73 20 73 74 72 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..puts.str..#-------------------
28aa0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 74 6f 20 6d 61 74 63 68 20 77 68 69 74 65 73 70 61 63 ----------..#.to.match.whitespac
28ac0 65 20 6f 72 20 23 2d 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 61 6e 20 65 78 74 65 6e 64 65 64 e.or.#-characters.in.an.extended
28ae0 20 72 65 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 65 73 63 61 70 65 0d 0a 23 20 74 68 65 6d 2e 0d .re.you.need.to.escape..#.them..
28b00 0a 0d 0a 66 6f 6f 20 3d 20 34 32 0d 0a 73 74 72 20 3d 20 27 62 6c 61 68 20 23 66 6f 6f 23 20 62 ...foo.=.42..str.=.'blah.#foo#.b
28b20 6c 61 68 27 0d 0a 73 74 72 2e 67 73 75 62 21 20 25 72 2f 20 20 20 20 20 20 20 23 20 72 65 70 6c lah'..str.gsub!.%r/.......#.repl
28b40 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 23 20 20 20 20 23 20 20 20 61 20 70 ace................\#....#...a.p
28b60 6f 75 6e 64 20 73 69 67 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 5c 77 2b 29 20 23 ound.sign................(\w+).#
28b80 20 20 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ...the.variable.name............
28ba0 20 20 20 20 5c 23 20 20 20 20 23 20 20 20 61 6e 6f 74 68 65 72 20 70 6f 75 6e 64 20 73 69 67 6e ....\#....#...another.pound.sign
28bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 78 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ............/x.do...............
28be0 20 65 76 61 6c 20 24 31 20 20 20 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 74 68 65 20 76 61 .eval.$1...........#.with.the.va
28c00 6c 75 65 20 6f 66 20 61 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 lue.of.a.local.variable.........
28c20 20 20 20 65 6e 64 0d 0a 70 75 74 73 20 73 74 72 20 20 23 20 3d 3e 20 62 6c 61 68 20 34 32 20 62 ...end..puts.str..#.=>.blah.42.b
28c40 6c 61 68 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 35 0d 0a 23 20 54 68 65 20 lah......#.@@PLEAC@@_6.5..#.The.
28c60 27 67 27 20 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 20 69 6e 20 52 75 'g'.modifier.doesn't.exist.in.Ru
28c80 62 79 2c 20 61 20 72 65 67 65 78 70 20 63 61 6e 27 74 20 62 65 20 75 73 65 64 0d 0a 23 20 64 69 by,.a.regexp.can't.be.used..#.di
28ca0 72 65 63 74 6c 79 20 69 6e 20 61 20 77 68 69 6c 65 20 6c 6f 6f 70 3b 20 69 6e 73 74 65 61 64 2c rectly.in.a.while.loop;.instead,
28cc0 20 75 73 65 20 53 74 72 69 6e 67 23 73 63 61 6e 20 7b 20 7c 6d 61 74 63 68 7c 20 2e 2e 20 7d 0d .use.String#scan.{.|match|....}.
28ce0 0a 66 69 73 68 20 3d 20 27 4f 6e 65 20 66 69 73 68 20 74 77 6f 20 66 69 73 68 20 72 65 64 20 66 .fish.=.'One.fish.two.fish.red.f
28d00 69 73 68 20 62 6c 75 65 20 66 69 73 68 27 0d 0a 57 41 4e 54 20 3d 20 33 0d 0a 63 6f 75 6e 74 20 ish.blue.fish'..WANT.=.3..count.
28d20 3d 20 30 0d 0a 66 69 73 68 2e 73 63 61 6e 28 2f 28 5c 77 2b 29 5c 73 2b 66 69 73 68 5c 62 2f 69 =.0..fish.scan(/(\w+)\s+fish\b/i
28d40 29 20 7b 0d 0a 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 2b 3d 20 31 29 20 3d 3d 20 57 41 4e 54 ).{......if.(count.+=.1).==.WANT
28d60 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22 54 68 65 20 74 68 69 72 64 20 66 69 73 68 20 69 ..........puts."The.third.fish.i
28d80 73 20 61 20 23 7b 24 31 7d 20 6f 6e 65 2e 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 7d 0d 0a 0d 0a 69 s.a.#{$1}.one."......end..}....i
28da0 66 20 66 69 73 68 20 3d 7e 20 2f 28 3f 3a 5c 77 2b 5c 73 2b 66 69 73 68 5c 73 2b 29 7b 32 7d 28 f.fish.=~./(?:\w+\s+fish\s+){2}(
28dc0 5c 77 2b 29 5c 73 2b 66 69 73 68 2f 69 0d 0a 20 20 20 20 70 75 74 73 20 22 54 68 65 20 74 68 69 \w+)\s+fish/i......puts."The.thi
28de0 72 64 20 66 69 73 68 20 69 73 20 61 20 23 7b 24 31 7d 20 6f 6e 65 2e 22 0d 0a 65 6e 64 0d 0a 0d rd.fish.is.a.#{$1}.one."..end...
28e00 0a 70 6f 6e 64 20 3d 20 27 4f 6e 65 20 66 69 73 68 20 74 77 6f 20 66 69 73 68 20 72 65 64 20 66 .pond.=.'One.fish.two.fish.red.f
28e20 69 73 68 20 62 6c 75 65 20 66 69 73 68 27 0d 0a 23 20 53 74 72 69 6e 67 23 73 63 61 6e 20 77 69 ish.blue.fish'..#.String#scan.wi
28e40 74 68 6f 75 74 20 61 20 62 6c 6f 63 6b 20 67 69 76 65 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 thout.a.block.gives.an.array.of.
28e60 6d 61 74 63 68 65 73 2c 20 65 61 63 68 20 6d 61 74 63 68 0d 0a 23 20 62 65 69 6e 67 20 61 6e 20 matches,.each.match..#.being.an.
28e80 61 72 72 61 79 20 6f 66 20 61 6c 6c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 67 72 6f 75 70 array.of.all.the.specified.group
28ea0 73 0d 0a 63 6f 6c 6f 72 73 20 3d 20 70 6f 6e 64 2e 73 63 61 6e 28 2f 28 5c 77 2b 29 5c 73 2b 66 s..colors.=.pond.scan(/(\w+)\s+f
28ec0 69 73 68 5c 62 2f 69 29 2e 66 6c 61 74 74 65 6e 20 20 23 20 67 65 74 20 61 6c 6c 20 6d 61 74 63 ish\b/i).flatten..#.get.all.matc
28ee0 68 65 73 0d 0a 63 6f 6c 6f 72 20 20 3d 20 63 6f 6c 6f 72 73 5b 32 5d 20 20 20 20 20 20 20 20 20 hes..color..=.colors[2].........
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65 6e 20 74 68 65 20 6f 6e 65 20 .................#.then.the.one.
28f20 77 65 20 77 61 6e 74 0d 0a 23 20 6f 72 20 77 69 74 68 6f 75 74 20 61 20 74 65 6d 70 6f 72 61 72 we.want..#.or.without.a.temporar
28f40 79 20 61 72 72 61 79 0d 0a 63 6f 6c 6f 72 20 3d 20 70 6f 6e 64 2e 73 63 61 6e 28 2f 28 5c 77 2b y.array..color.=.pond.scan(/(\w+
28f60 29 5c 73 2b 66 69 73 68 5c 62 2f 69 29 2e 66 6c 61 74 74 65 6e 5b 32 5d 20 20 23 20 6a 75 73 74 )\s+fish\b/i).flatten[2]..#.just
28f80 20 67 72 61 62 20 65 6c 65 6d 65 6e 74 20 33 0d 0a 70 75 74 73 20 22 54 68 65 20 74 68 69 72 64 .grab.element.3..puts."The.third
28fa0 20 66 69 73 68 20 69 6e 20 74 68 65 20 70 6f 6e 64 20 69 73 20 23 7b 63 6f 6c 6f 72 7d 2e 22 0d .fish.in.the.pond.is.#{color}.".
28fc0 0a 0d 0a 63 6f 75 6e 74 20 3d 20 30 0d 0a 66 69 73 68 65 73 20 3d 20 27 4f 6e 65 20 66 69 73 68 ...count.=.0..fishes.=.'One.fish
28fe0 20 74 77 6f 20 66 69 73 68 20 72 65 64 20 66 69 73 68 20 62 6c 75 65 20 66 69 73 68 27 0d 0a 65 .two.fish.red.fish.blue.fish'..e
29000 76 65 6e 73 20 3d 20 66 69 73 68 65 73 2e 73 63 61 6e 28 2f 28 5c 77 2b 29 5c 73 2b 66 69 73 68 vens.=.fishes.scan(/(\w+)\s+fish
29020 5c 62 2f 69 29 2e 73 65 6c 65 63 74 20 7b 20 28 63 6f 75 6e 74 2b 3d 31 29 20 25 20 32 20 3d 3d \b/i).select.{.(count+=1).%.2.==
29040 20 30 20 7d 0d 0a 70 72 69 6e 74 20 22 45 76 65 6e 20 6e 75 6d 62 65 72 65 64 20 66 69 73 68 20 .0.}..print."Even.numbered.fish.
29060 61 72 65 20 23 7b 65 76 65 6e 73 2e 6a 6f 69 6e 28 27 20 27 29 7d 2e 22 0d 0a 0d 0a 63 6f 75 6e are.#{evens.join('.')}."....coun
29080 74 20 3d 20 30 0d 0a 66 69 73 68 65 73 2e 67 73 75 62 28 2f 0d 0a 20 20 20 5c 62 20 20 20 20 20 t.=.0..fishes.gsub(/.....\b.....
290a0 20 20 20 20 20 20 20 20 20 20 23 20 6d 61 6b 65 73 20 6e 65 78 74 20 5c 77 20 6d 6f 72 65 20 65 ..........#.makes.next.\w.more.e
290c0 66 66 69 63 69 65 6e 74 0d 0a 20 20 20 28 20 5c 77 2b 20 29 20 20 20 20 20 20 20 20 20 20 23 20 fficient.....(.\w+.)..........#.
290e0 74 68 69 73 20 69 73 20 77 68 61 74 20 77 65 5c 27 6c 6c 20 62 65 20 63 68 61 6e 67 69 6e 67 0d this.is.what.we\'ll.be.changing.
29100 0a 20 20 20 28 0d 0a 20 20 20 20 20 5c 73 2b 20 66 69 73 68 20 5c 62 0d 0a 20 20 20 29 0d 0a 20 ....(.......\s+.fish.\b.....)...
29120 20 20 20 20 20 20 20 20 20 20 20 2f 78 29 20 7b 0d 0a 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 .........../x).{......if.(count.
29140 2b 3d 20 31 29 20 3d 3d 20 34 0d 0a 20 20 20 20 20 20 20 20 27 73 75 73 68 69 27 20 2b 20 24 32 +=.1).==.4..........'sushi'.+.$2
29160 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 24 31 20 2b 20 24 32 0d 0a 20 20 20 ......else..........$1.+.$2.....
29180 20 65 6e 64 0d 0a 7d 0d 0a 0d 0a 70 6f 6e 64 20 3d 20 27 4f 6e 65 20 66 69 73 68 20 74 77 6f 20 .end..}....pond.=.'One.fish.two.
291a0 66 69 73 68 20 72 65 64 20 66 69 73 68 20 62 6c 75 65 20 66 69 73 68 20 73 77 69 6d 20 68 65 72 fish.red.fish.blue.fish.swim.her
291c0 65 2e 27 0d 0a 70 75 74 73 20 22 4c 61 73 74 20 66 69 73 68 20 69 73 20 23 7b 70 6f 6e 64 2e 73 e.'..puts."Last.fish.is.#{pond.s
291e0 63 61 6e 28 2f 5c 62 28 5c 77 2b 29 5c 73 2b 66 69 73 68 5c 62 2f 69 29 2e 66 6c 61 74 74 65 6e can(/\b(\w+)\s+fish\b/i).flatten
29200 5b 2d 31 5d 7d 22 0d 0a 0d 0a 2f 0d 0a 20 20 20 20 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 [-1]}"..../......A..............
29220 20 23 20 66 69 6e 64 20 73 6f 6d 65 20 70 61 74 74 65 72 6e 20 41 0d 0a 20 20 20 20 28 3f 21 20 .#.find.some.pattern.A......(?!.
29240 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6d 75 73 74 6e 5c 27 74 20 62 65 20 61 62 6c 65 20 74 ............#.mustn\'t.be.able.t
29260 6f 20 66 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 2e 2a 20 20 20 20 20 20 20 20 20 20 23 20 73 6f o.find...........*..........#.so
29280 6d 65 74 68 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 41 20 20 20 20 20 20 20 20 20 20 20 23 20 61 mething..........A...........#.a
292a0 6e 64 20 41 0d 0a 20 20 20 20 29 0d 0a 20 20 20 20 24 20 20 20 20 20 20 20 20 20 20 20 20 20 20 nd.A......)......$..............
292c0 20 23 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 .#.through.the.end.of.the.string
292e0 0d 0a 2f 78 0d 0a 0d 0a 23 20 54 68 65 20 22 73 22 20 70 65 72 6c 20 6d 6f 64 69 66 69 65 72 20 ../x....#.The."s".perl.modifier.
29300 69 73 20 22 6d 22 20 69 6e 20 52 75 62 79 20 28 6e 6f 74 20 76 65 72 79 20 6e 69 63 65 20 73 69 is."m".in.Ruby.(not.very.nice.si
29320 6e 63 65 20 74 68 65 72 65 20 69 73 0d 0a 23 20 61 6c 73 6f 20 61 6e 20 22 6d 22 20 69 6e 20 70 nce.there.is..#.also.an."m".in.p
29340 65 72 6c 2e 2e 29 0d 0a 70 6f 6e 64 20 3d 20 22 4f 6e 65 20 66 69 73 68 20 74 77 6f 20 66 69 73 erl..)..pond.=."One.fish.two.fis
29360 68 20 72 65 64 20 66 69 73 68 20 62 6c 75 65 20 66 69 73 68 20 73 77 69 6d 20 68 65 72 65 2e 22 h.red.fish.blue.fish.swim.here."
29380 0d 0a 69 66 20 28 70 6f 6e 64 20 3d 7e 20 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..if.(pond.=~./.................
293a0 20 20 20 20 20 5c 62 20 20 28 20 20 5c 77 2b 29 20 5c 73 2b 20 66 69 73 68 20 5c 62 0d 0a 20 20 .....\b..(..\w+).\s+.fish.\b....
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3f 21 20 2e 2a 20 5c 62 20 66 69 73 68 20 5c 62 20 ..............(?!..*.\b.fish.\b.
293e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 6d 69 78 29 0d 0a 20 20 20 20 70 75 74 73 20 22 )............../mix)......puts."
29400 4c 61 73 74 20 66 69 73 68 20 69 73 20 23 7b 24 31 7d 2e 22 0d 0a 65 6c 73 65 0d 0a 20 20 20 20 Last.fish.is.#{$1}."..else......
29420 70 75 74 73 20 22 46 61 69 6c 65 64 21 22 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 puts."Failed!"..end......#.@@PLE
29440 41 43 40 40 5f 36 2e 36 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d AC@@_6.6..#---------------------
29460 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 --------..#!/usr/bin/ruby.-w..#.
29480 6b 69 6c 6c 74 61 67 73 20 2d 20 76 65 72 79 20 62 61 64 20 68 74 6d 6c 20 6b 69 6c 6c 65 72 0d killtags.-.very.bad.html.killer.
294a0 0a 24 2f 20 3d 20 6e 69 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .$/.=.nil;......................
294c0 20 20 20 20 20 20 20 20 23 20 65 61 63 68 20 72 65 61 64 20 69 73 20 77 68 6f 6c 65 20 66 69 6c ........#.each.read.is.whole.fil
294e0 65 0d 0a 77 68 69 6c 65 20 66 69 6c 65 20 3d 20 67 65 74 73 28 29 20 64 6f 0d 0a 20 20 20 20 66 e..while.file.=.gets().do......f
29500 69 6c 65 2e 67 73 75 62 21 28 2f 3c 2e 2a 3f 3e 2f 6d 2c 27 27 29 3b 20 20 20 20 20 20 20 20 20 ile.gsub!(/<.*?>/m,'');.........
29520 20 20 23 20 73 74 72 69 70 20 74 61 67 73 20 28 74 65 72 72 69 62 6c 79 29 0d 0a 20 20 20 20 70 ..#.strip.tags.(terribly)......p
29540 75 74 73 20 66 69 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 uts.file........................
29560 20 20 23 20 70 72 69 6e 74 20 66 69 6c 65 20 74 6f 20 53 54 44 4f 55 54 0d 0a 65 6e 64 0d 0a 23 ..#.print.file.to.STDOUT..end..#
29580 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 -----------------------------..#
295a0 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 68 65 61 64 65 72 66 79 20 2d 20 63 !/usr/bin/ruby.-w..#headerfy.-.c
295c0 68 61 6e 67 65 20 63 65 72 74 61 69 6e 20 63 68 61 70 74 65 72 20 68 65 61 64 65 72 73 20 74 6f hange.certain.chapter.headers.to
295e0 20 68 74 6d 6c 0d 0a 24 2f 20 3d 20 27 27 0d 0a 77 68 69 6c 65 20 66 69 6c 65 20 3d 20 67 65 74 .html..$/.=.''..while.file.=.get
29600 73 28 29 20 64 6f 0d 0a 20 20 20 20 70 61 74 74 65 72 6e 20 3d 20 2f 0d 0a 20 20 20 20 20 20 20 s().do......pattern.=./.........
29620 20 20 20 20 20 20 20 20 20 20 20 5c 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...........\A...................
29640 23 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.start.of.record...............
29660 20 20 20 20 20 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 63 61 70 74 .....(....................#.capt
29680 75 72 65 20 69 6e 20 24 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ure.in.$1.......................
296a0 20 43 68 61 70 74 65 72 20 20 20 20 20 20 20 20 20 20 23 20 74 65 78 74 20 73 74 72 69 6e 67 0d .Chapter..........#.text.string.
296c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 73 2b 20 20 20 20 20 20 .......................\s+......
296e0 20 20 20 20 20 20 20 20 23 20 6d 61 6e 64 61 74 6f 72 79 20 77 68 69 74 65 73 70 61 63 65 0d 0a ........#.mandatory.whitespace..
29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 64 2b 20 20 20 20 20 20 20 ......................\d+.......
29720 20 20 20 20 20 20 20 23 20 64 65 63 69 6d 61 6c 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 .......#.decimal.number.........
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 73 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...............\s*..............
29760 23 20 6f 70 74 69 6f 6e 61 6c 20 77 68 69 74 65 73 70 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 #.optional.whitespace...........
29780 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .............:................#.
297a0 61 20 72 65 61 6c 20 63 6f 6c 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a.real.colon....................
297c0 20 20 20 20 2e 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 79 74 68 69 6e 67 20 ......*..............#.anything.
297e0 6e 6f 74 20 61 20 6e 65 77 6c 69 6e 65 20 74 69 6c 6c 20 65 6e 64 20 6f 66 20 6c 69 6e 65 0d 0a not.a.newline.till.end.of.line..
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ..................).............
29820 20 20 20 20 2f 78 0d 0a 20 20 20 20 70 75 74 73 20 66 69 6c 65 2e 67 73 75 62 28 70 61 74 74 65 ..../x......puts.file.gsub(patte
29840 72 6e 2c 27 3c 48 31 3e 5c 31 3c 2f 48 31 3e 27 29 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d rn,'<H1>\1</H1>')..end..#-------
29860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 25 20 72 75 62 79 20 ----------------------..#%.ruby.
29880 2d 30 30 70 65 20 22 67 73 75 62 21 28 2f 5c 41 28 43 68 61 70 74 65 72 5c 73 2b 5c 64 2b 5c 73 -00pe."gsub!(/\A(Chapter\s+\d+\s
298a0 2a 3a 2e 2a 29 2f 2c 27 3c 48 31 3e 5c 31 3c 2f 48 31 3e 27 29 22 20 64 61 74 61 66 69 6c 65 0d *:.*)/,'<H1>\1</H1>')".datafile.
298c0 0a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d ...#!/usr/bin/ruby.-w..#--------
298e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 66 6f 72 20 66 69 6c 65 20 ---------------------..for.file.
29900 69 6e 20 41 52 47 56 0d 0a 20 20 20 20 66 69 6c 65 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 41 52 in.ARGV......file.=.File.open(AR
29920 47 56 2e 73 68 69 66 74 29 0d 0a 20 20 20 20 77 68 69 6c 65 20 66 69 6c 65 2e 67 65 74 73 28 27 GV.shift)......while.file.gets('
29940 27 29 20 64 6f 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 65 61 63 68 20 72 65 61 64 20 69 73 ').do.............#.each.read.is
29960 20 61 20 70 61 72 61 67 72 61 70 68 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 63 68 75 .a.paragraph..........print."chu
29980 6e 6b 20 23 7b 24 2e 7d 20 69 6e 20 24 41 52 47 56 20 68 61 73 20 3c 3c 23 7b 24 31 7d 3e 3e 5c nk.#{$.}.in.$ARGV.has.<<#{$1}>>\
299a0 6e 22 20 77 68 69 6c 65 20 2f 5e 53 54 41 52 54 28 2e 2a 3f 29 5e 45 4e 44 2f 6d 0d 0a 20 20 20 n".while./^START(.*?)^END/m.....
299c0 20 65 6e 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .end............................
299e0 20 20 20 20 23 20 2f 6d 20 61 63 74 69 76 61 74 65 73 20 74 68 65 20 6d 75 6c 74 69 6c 69 6e 65 ....#./m.activates.the.multiline
29a00 20 6d 6f 64 65 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .mode..end..#-------------------
29a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 37 0d 0a 23 ----------....#.@@PLEAC@@_6.7..#
29a40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 24 -----------------------------..$
29a60 2f 20 3d 20 6e 69 6c 3b 0d 0a 66 69 6c 65 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 22 64 61 74 61 /.=.nil;..file.=.File.open("data
29a80 66 69 6c 65 22 29 0d 0a 63 68 75 6e 6b 73 20 3d 20 66 69 6c 65 2e 67 65 74 73 2e 73 70 6c 69 74 file")..chunks.=.file.gets.split
29aa0 28 2f 70 61 74 74 65 72 6e 2f 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d (/pattern/)..#------------------
29ac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 2e 43 68 2c 20 2e 53 65 20 61 6e 64 20 2e 53 73 20 -----------..#..Ch,..Se.and..Ss.
29ae0 64 69 76 69 64 65 20 63 68 75 6e 6b 73 20 6f 66 20 53 54 44 49 4e 0d 0a 63 68 75 6e 6b 73 20 3d divide.chunks.of.STDIN..chunks.=
29b00 20 67 65 74 73 28 6e 69 6c 29 2e 73 70 6c 69 74 28 2f 5e 5c 2e 28 43 68 7c 53 65 7c 53 73 29 24 .gets(nil).split(/^\.(Ch|Se|Ss)$
29b20 2f 29 0d 0a 70 72 69 6e 74 20 22 49 20 72 65 61 64 20 23 7b 63 68 75 6e 6b 73 2e 73 69 7a 65 7d /)..print."I.read.#{chunks.size}
29b40 20 63 68 75 6e 6b 73 2e 5c 6e 22 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .chunks.\n"..#------------------
29b60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 38 -----------......#.@@PLEAC@@_6.8
29b80 0d 0a 77 68 69 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 69 66 20 7e 2f 42 45 47 49 4e 2f 20 2e 2e ..while.gets......if.~/BEGIN/...
29ba0 20 7e 2f 45 4e 44 2f 0d 0a 20 20 20 20 20 20 20 20 23 20 6c 69 6e 65 20 66 61 6c 6c 73 20 62 65 .~/END/..........#.line.falls.be
29bc0 74 77 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 45 4e 44 20 69 6e 63 6c 75 73 69 76 65 0d 0a 20 tween.BEGIN.and.END.inclusive...
29be0 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 77 68 69 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 69 ...end..end....while.gets......i
29c00 66 20 28 24 2e 20 3d 3d 20 66 69 72 73 74 6e 75 6d 29 20 2e 2e 20 28 24 2e 20 3d 3d 20 6c 61 73 f.($..==.firstnum)....($..==.las
29c20 74 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 23 20 6f 70 65 72 61 74 65 20 62 65 74 77 65 65 6e tnum)..........#.operate.between
29c40 20 66 69 72 73 74 6e 75 6d 20 61 6e 64 20 6c 61 73 74 6e 75 6d 20 6c 69 6e 65 20 6e 75 6d 62 65 .firstnum.and.lastnum.line.numbe
29c60 72 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 69 6e 20 72 75 62 79 20 76 65 72 r......end..end....#.in.ruby.ver
29c80 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20 31 2e 38 2c 20 74 68 65 20 61 62 6f 76 65 20 74 77 sions.prior.to.1.8,.the.above.tw
29ca0 6f 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 0d 0a 23 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 o.conditional..#.expressions.cou
29cc0 6c 64 20 62 65 20 73 68 6f 72 74 65 6e 65 64 20 74 6f 3a 0d 0a 23 20 20 20 20 20 69 66 20 2f 42 ld.be.shortened.to:..#.....if./B
29ce0 45 47 49 4e 2f 20 2e 2e 20 2f 45 4e 44 2f 0d 0a 23 20 61 6e 64 0d 0a 23 20 20 20 20 20 69 66 20 EGIN/..../END/..#.and..#.....if.
29d00 66 69 72 73 74 6e 75 6d 20 2e 2e 20 6c 61 73 74 6e 75 6d 0d 0a 23 20 62 75 74 20 74 68 65 73 65 firstnum....lastnum..#.but.these
29d20 20 6e 6f 77 20 6f 6e 6c 79 20 77 6f 72 6b 20 74 68 69 73 20 77 61 79 20 66 72 6f 6d 20 74 68 65 .now.only.work.this.way.from.the
29d40 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .command.line....#--------------
29d60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 77 68 69 6c 65 20 67 65 74 73 0d 0a 20 ---------------....while.gets...
29d80 20 20 20 69 66 20 7e 2f 42 45 47 49 4e 2f 20 2e 2e 2e 20 7e 2f 45 4e 44 2f 0d 0a 20 20 20 20 20 ...if.~/BEGIN/.....~/END/.......
29da0 20 20 20 23 20 6c 69 6e 65 20 66 61 6c 6c 73 20 62 65 74 77 65 65 6e 20 42 45 47 49 4e 20 61 6e ...#.line.falls.between.BEGIN.an
29dc0 64 20 45 4e 44 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6c 69 6e 65 73 0d 0a 20 20 20 20 65 6e d.END.on.different.lines......en
29de0 64 0d 0a 65 6e 64 0d 0a 0d 0a 77 68 69 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 69 66 20 28 24 2e d..end....while.gets......if.($.
29e00 20 3d 3d 20 66 69 72 73 74 29 20 2e 2e 2e 20 28 24 2e 20 3d 3d 20 6c 61 73 74 29 0d 0a 20 20 20 .==.first).....($..==.last).....
29e20 20 20 20 20 20 23 20 6f 70 65 72 61 74 65 20 62 65 74 77 65 65 6e 20 66 69 72 73 74 20 61 6e 64 .....#.operate.between.first.and
29e40 20 6c 61 73 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6c .last.line.number.on.different.l
29e60 69 6e 65 73 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d ines......end..end....#---------
29e80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 63 6f 6d 6d 61 6e 64 2d --------------------..#.command-
29ea0 6c 69 6e 65 20 74 6f 20 70 72 69 6e 74 20 6c 69 6e 65 73 20 31 35 20 74 68 72 6f 75 67 68 20 31 line.to.print.lines.15.through.1
29ec0 37 20 69 6e 63 6c 75 73 69 76 65 20 28 73 65 65 20 62 65 6c 6f 77 29 0d 0a 72 75 62 79 20 2d 6e 7.inclusive.(see.below)..ruby.-n
29ee0 65 20 27 70 72 69 6e 74 20 69 66 20 31 35 20 2e 2e 20 31 37 27 20 64 61 74 61 66 69 6c 65 0d 0a e.'print.if.15....17'.datafile..
29f00 0d 0a 23 20 70 72 69 6e 74 20 6f 75 74 20 61 6c 6c 20 3c 58 4d 50 3e 20 2e 2e 20 3c 2f 58 4d 50 ..#.print.out.all.<XMP>....</XMP
29f20 3e 20 64 69 73 70 6c 61 79 73 20 66 72 6f 6d 20 48 54 4d 4c 20 64 6f 63 0d 0a 77 68 69 6c 65 20 >.displays.from.HTML.doc..while.
29f40 67 65 74 73 0d 0a 20 20 20 20 70 72 69 6e 74 20 69 66 20 7e 25 72 23 3c 58 4d 50 3e 23 69 20 2e gets......print.if.~%r#<XMP>#i..
29f60 2e 20 7e 25 72 23 3c 2f 58 4d 50 3e 23 69 3b 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 73 61 6d 65 2c 20 ..~%r#</XMP>#i;..end....#.same,.
29f80 62 75 74 20 61 73 20 73 68 65 6c 6c 20 63 6f 6d 6d 61 6e 64 0d 0a 23 20 72 75 62 79 20 2d 6e 65 but.as.shell.command..#.ruby.-ne
29fa0 20 27 70 72 69 6e 74 20 69 66 20 25 72 23 3c 58 4d 50 3e 23 69 20 2e 2e 20 25 72 23 3c 2f 58 4d .'print.if.%r#<XMP>#i....%r#</XM
29fc0 50 3e 23 69 27 20 64 6f 63 75 6d 65 6e 74 2e 68 74 6d 6c 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d P>#i'.document.html..#----------
29fe0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 72 75 62 79 20 2d 6e 65 20 -------------------..#.ruby.-ne.
2a000 27 42 45 47 49 4e 20 7b 20 24 74 6f 70 3d 33 3b 20 24 62 6f 74 74 6f 6d 3d 35 20 7d 3b 20 5c 0d 'BEGIN.{.$top=3;.$bottom=5.};.\.
2a020 0a 23 20 20 20 20 20 70 72 69 6e 74 20 69 66 20 24 74 6f 70 20 2e 2e 20 24 62 6f 74 74 6f 6d 27 .#.....print.if.$top....$bottom'
2a040 20 2f 65 74 63 2f 70 61 73 73 77 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 ./etc/passwd.................#..
2a060 46 41 49 4c 53 0d 0a 23 20 72 75 62 79 20 2d 6e 65 20 27 42 45 47 49 4e 20 7b 20 24 74 6f 70 3d FAILS..#.ruby.-ne.'BEGIN.{.$top=
2a080 33 3b 20 24 62 6f 74 74 6f 6d 3d 35 20 7d 3b 20 5c 0d 0a 23 20 20 20 20 20 70 72 69 6e 74 20 69 3;.$bottom=5.};.\..#.....print.i
2a0a0 66 20 24 2e 20 3d 3d 20 24 74 6f 70 20 2e 2e 20 24 2e 20 3d 3d 20 20 24 62 6f 74 74 6f 6d 27 20 f.$..==.$top....$..==..$bottom'.
2a0c0 2f 65 74 63 2f 70 61 73 73 77 64 20 20 20 20 23 20 77 6f 72 6b 73 0d 0a 23 20 72 75 62 79 20 2d /etc/passwd....#.works..#.ruby.-
2a0e0 6e 65 20 27 70 72 69 6e 74 20 69 66 20 33 20 2e 2e 20 35 27 20 2f 65 74 63 2f 70 61 73 73 77 64 ne.'print.if.3....5'./etc/passwd
2a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6c 73 6f 20 77 6f 72 6b 73 ....................#.also.works
2a120 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#-----------------------------
2a140 0d 0a 70 72 69 6e 74 20 69 66 20 7e 2f 62 65 67 69 6e 2f 20 2e 2e 20 7e 2f 65 6e 64 2f 3b 0d 0a ..print.if.~/begin/....~/end/;..
2a160 70 72 69 6e 74 20 69 66 20 7e 2f 62 65 67 69 6e 2f 20 2e 2e 2e 20 7e 2f 65 6e 64 2f 3b 0d 0a 23 print.if.~/begin/.....~/end/;..#
2a180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 77 -----------------------------..w
2a1a0 68 69 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 24 69 6e 5f 68 65 61 64 65 72 20 3d 20 24 2e 20 3d hile.gets......$in_header.=.$..=
2a1c0 3d 20 31 20 20 2e 2e 20 7e 2f 5e 24 2f 20 3f 20 74 72 75 65 20 3a 20 66 61 6c 73 65 0d 0a 20 20 =.1.....~/^$/.?.true.:.false....
2a1e0 20 20 24 69 6e 5f 62 6f 64 79 20 20 20 3d 20 7e 2f 5e 24 2f 20 2e 2e 20 41 52 47 46 2e 65 6f 66 ..$in_body...=.~/^$/....ARGF.eof
2a200 20 3f 20 74 72 75 65 20 3a 20 66 61 6c 73 65 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d .?.true.:.false..end..#---------
2a220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 65 65 6e 20 3d 20 7b 7d 0d --------------------..seen.=.{}.
2a240 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 6e 65 78 74 20 75 .ARGF.each.do.|line|......next.u
2a260 6e 6c 65 73 73 20 6c 69 6e 65 20 3d 7e 20 2f 5e 46 72 6f 6d 3a 3f 5c 73 2f 69 20 2e 2e 20 6c 69 nless.line.=~./^From:?\s/i....li
2a280 6e 65 20 3d 7e 20 2f 5e 24 2f 3b 0d 0a 20 20 20 20 6c 69 6e 65 2e 73 63 61 6e 28 25 72 2f 28 5b ne.=~./^$/;......line.scan(%r/([
2a2a0 5e 3c 3e 28 29 2c 3b 5c 73 5d 2b 5c 40 5b 5e 3c 3e 28 29 2c 3b 5c 73 5d 2b 29 2f 29 2e 65 61 63 ^<>(),;\s]+\@[^<>(),;\s]+)/).eac
2a2c0 68 20 64 6f 20 7c 61 64 64 72 7c 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 61 64 64 72 20 75 h.do.|addr|..........puts.addr.u
2a2e0 6e 6c 65 73 73 20 73 65 65 6e 5b 61 64 64 72 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 65 6e 5b 61 nless.seen[addr]..........seen[a
2a300 64 64 72 5d 20 7c 7c 3d 20 31 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 ddr].||=.1......end..end......#.
2a320 40 40 50 4c 45 41 43 40 40 5f 36 2e 39 0d 0a 64 65 66 20 67 6c 6f 62 32 70 61 74 28 67 6c 6f 62 @@PLEAC@@_6.9..def.glob2pat(glob
2a340 73 74 72 29 0d 0a 20 20 20 20 70 61 74 6d 61 70 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 27 2a str)......patmap.=.{..........'*
2a360 27 20 3d 3e 20 27 2e 2a 27 2c 0d 0a 20 20 20 20 20 20 20 20 27 3f 27 20 3d 3e 20 27 2e 27 2c 0d '.=>.'.*',..........'?'.=>.'.',.
2a380 0a 20 20 20 20 20 20 20 20 27 5b 27 20 3d 3e 20 27 5b 27 2c 0d 0a 20 20 20 20 20 20 20 20 27 5d .........'['.=>.'[',..........']
2a3a0 27 20 3d 3e 20 27 5d 27 2c 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 67 6c 6f 62 73 74 72 2e 67 73 '.=>.']',......}......globstr.gs
2a3c0 75 62 21 28 2f 28 2e 29 2f 29 20 7b 20 7c 63 7c 20 70 61 74 6d 61 70 5b 63 5d 20 7c 7c 20 52 65 ub!(/(.)/).{.|c|.patmap[c].||.Re
2a3e0 67 65 78 70 3a 3a 65 73 63 61 70 65 28 63 29 20 7d 0d 0a 20 20 20 20 27 5e 27 20 2b 20 67 6c 6f gexp::escape(c).}......'^'.+.glo
2a400 62 73 74 72 20 2b 20 27 24 27 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 bstr.+.'$'..end......#.@@PLEAC@@
2a420 5f 36 2e 31 30 0d 0a 23 20 61 76 6f 69 64 20 69 6e 74 65 72 70 6f 6c 61 74 69 6e 67 20 70 61 74 _6.10..#.avoid.interpolating.pat
2a440 74 65 72 6e 73 20 6c 69 6b 65 20 74 68 69 73 20 69 66 20 74 68 65 20 70 61 74 74 65 72 6e 0d 0a terns.like.this.if.the.pattern..
2a460 23 20 69 73 6e 27 74 20 67 6f 69 6e 67 20 74 6f 20 63 68 61 6e 67 65 3a 0d 0a 70 61 74 74 65 72 #.isn't.going.to.change:..patter
2a480 6e 20 3d 20 41 52 47 56 2e 73 68 69 66 74 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 n.=.ARGV.shift..ARGF.each.do.|li
2a4a0 6e 65 7c 0d 0a 20 20 20 20 70 72 69 6e 74 20 6c 69 6e 65 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f ne|......print.line.if.line.=~./
2a4c0 23 7b 70 61 74 74 65 72 6e 7d 2f 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 74 68 65 20 61 62 6f 76 65 20 #{pattern}/..end....#.the.above.
2a4e0 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 72 65 67 65 78 20 65 61 63 68 20 69 74 65 72 61 74 69 creates.a.new.regex.each.iterati
2a500 6f 6e 2e 20 49 6e 73 74 65 61 64 2c 0d 0a 23 20 75 73 65 20 74 68 65 20 2f 6f 20 6d 6f 64 69 66 on..Instead,..#.use.the./o.modif
2a520 69 65 72 20 73 6f 20 74 68 65 20 72 65 67 65 78 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 6f 6e 6c ier.so.the.regex.is.compiled.onl
2a540 79 20 6f 6e 63 65 0d 0a 0d 0a 70 61 74 74 65 72 6e 20 3d 20 41 52 47 56 2e 73 68 69 66 74 0d 0a y.once....pattern.=.ARGV.shift..
2a560 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 70 72 69 6e 74 20 6c ARGF.each.do.|line|......print.l
2a580 69 6e 65 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f 23 7b 70 61 74 74 65 72 6e 7d 2f 6f 0d 0a 65 6e ine.if.line.=~./#{pattern}/o..en
2a5a0 64 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d d....#--------------------------
2a5c0 2d 2d 2d 0d 0a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 0d 0a 23 20 70 6f 70 67 72 65 ---....#!/usr/bin/ruby..#.popgre
2a5e0 70 31 20 2d 20 67 72 65 70 20 66 6f 72 20 61 62 62 72 65 76 69 61 74 69 6f 6e 73 20 6f 66 20 70 p1.-.grep.for.abbreviations.of.p
2a600 6c 61 63 65 73 20 74 68 61 74 20 73 61 79 20 22 70 6f 70 22 0d 0a 23 20 76 65 72 73 69 6f 6e 20 laces.that.say."pop"..#.version.
2a620 31 3a 20 73 6c 6f 77 20 62 75 74 20 6f 62 76 69 6f 75 73 20 77 61 79 0d 0a 70 6f 70 73 74 61 74 1:.slow.but.obvious.way..popstat
2a640 65 73 20 3d 20 25 77 28 43 4f 20 4f 4e 20 4d 49 20 57 49 20 4d 4e 29 0d 0a 41 52 47 46 2e 65 61 es.=.%w(CO.ON.MI.WI.MN)..ARGF.ea
2a660 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 70 6f 70 73 74 61 74 65 73 2e 65 61 63 68 ch.do.|line|......popstates.each
2a680 20 64 6f 20 7c 73 74 61 74 65 7c 0d 0a 20 20 20 20 20 20 20 20 69 66 20 6c 69 6e 65 20 3d 7e 20 .do.|state|..........if.line.=~.
2a6a0 2f 5c 62 23 7b 73 74 61 74 65 7d 5c 62 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e /\b#{state}\b/..............prin
2a6c0 74 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 74 0d 0a 20 20 20 20 20 20 t.line..............last........
2a6e0 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d ..end......end..end....#--------
2a700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 ---------------------..#!/usr/bi
2a720 6e 2f 72 75 62 79 0d 0a 23 20 70 6f 70 67 72 65 70 32 20 2d 20 67 72 65 70 20 66 6f 72 20 61 62 n/ruby..#.popgrep2.-.grep.for.ab
2a740 62 72 65 76 69 61 74 69 6f 6e 73 20 6f 66 20 70 6c 61 63 65 73 20 74 68 61 74 20 73 61 79 20 22 breviations.of.places.that.say."
2a760 70 6f 70 22 0d 0a 23 20 76 65 72 73 69 6f 6e 20 32 3a 20 65 76 61 6c 20 73 74 72 69 6e 67 73 3b pop"..#.version.2:.eval.strings;
2a780 20 66 61 73 74 20 62 75 74 20 68 61 72 64 20 74 6f 20 71 75 6f 74 65 0d 0a 70 6f 70 73 74 61 74 .fast.but.hard.to.quote..popstat
2a7a0 65 73 20 3d 20 25 77 28 43 4f 20 4f 4e 20 4d 49 20 57 49 20 4d 4e 29 0d 0a 63 6f 64 65 20 3d 20 es.=.%w(CO.ON.MI.WI.MN)..code.=.
2a7c0 22 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 5c 6e 22 0d 0a 70 6f 70 73 74 61 74 "ARGF.each.do.|line|\n"..popstat
2a7e0 65 73 2e 65 61 63 68 20 64 6f 20 7c 73 74 61 74 65 7c 0d 0a 20 20 20 20 63 6f 64 65 20 2b 3d 20 es.each.do.|state|......code.+=.
2a800 22 5c 74 69 66 20 6c 69 6e 65 20 3d 7e 20 2f 5c 5c 62 23 7b 73 74 61 74 65 7d 5c 5c 62 2f 3b 20 "\tif.line.=~./\\b#{state}\\b/;.
2a820 70 72 69 6e 74 28 6c 69 6e 65 29 3b 20 6e 65 78 74 3b 20 65 6e 64 5c 6e 22 0d 0a 65 6e 64 0d 0a print(line);.next;.end\n"..end..
2a840 63 6f 64 65 20 2b 3d 20 22 65 6e 64 5c 6e 22 0d 0a 70 72 69 6e 74 20 22 43 4f 44 45 20 49 53 5c code.+=."end\n"..print."CODE.IS\
2a860 6e 2d 2d 2d 5c 6e 23 7b 63 6f 64 65 7d 5c 6e 2d 2d 2d 5c 6e 22 20 69 66 20 66 61 6c 73 65 20 23 n---\n#{code}\n---\n".if.false.#
2a880 20 74 75 72 6e 20 6f 6e 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 0d 0a 65 76 61 6c 20 63 6f 64 .turn.on.for.debugging..eval.cod
2a8a0 65 0d 0a 0d 0a 23 20 43 4f 44 45 20 49 53 0d 0a 23 20 2d 2d 2d 0d 0a 23 20 41 52 47 46 2e 65 61 e....#.CODE.IS..#.---..#.ARGF.ea
2a8c0 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 23 20 20 20 20 20 20 20 20 20 69 66 20 6c 69 6e 65 20 ch.do.|line|..#.........if.line.
2a8e0 3d 7e 20 2f 5c 62 43 4f 5c 62 2f 3b 20 70 72 69 6e 74 28 6c 69 6e 65 29 3b 20 6e 65 78 74 3b 20 =~./\bCO\b/;.print(line);.next;.
2a900 65 6e 64 0d 0a 23 20 20 20 20 20 20 20 20 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f 5c 62 4f 4e 5c end..#.........if.line.=~./\bON\
2a920 62 2f 3b 20 70 72 69 6e 74 28 6c 69 6e 65 29 3b 20 6e 65 78 74 3b 20 65 6e 64 0d 0a 23 20 20 20 b/;.print(line);.next;.end..#...
2a940 20 20 20 20 20 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f 5c 62 4d 49 5c 62 2f 3b 20 70 72 69 6e 74 ......if.line.=~./\bMI\b/;.print
2a960 28 6c 69 6e 65 29 3b 20 6e 65 78 74 3b 20 65 6e 64 0d 0a 23 20 20 20 20 20 20 20 20 20 69 66 20 (line);.next;.end..#.........if.
2a980 6c 69 6e 65 20 3d 7e 20 2f 5c 62 57 49 5c 62 2f 3b 20 70 72 69 6e 74 28 6c 69 6e 65 29 3b 20 6e line.=~./\bWI\b/;.print(line);.n
2a9a0 65 78 74 3b 20 65 6e 64 0d 0a 23 20 20 20 20 20 20 20 20 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f ext;.end..#.........if.line.=~./
2a9c0 5c 62 4d 4e 5c 62 2f 3b 20 70 72 69 6e 74 28 6c 69 6e 65 29 3b 20 6e 65 78 74 3b 20 65 6e 64 0d \bMN\b/;.print(line);.next;.end.
2a9e0 0a 23 20 65 6e 64 0d 0a 23 0d 0a 23 20 2d 2d 2d 0d 0a 0d 0a 23 23 20 61 6c 74 65 72 6e 61 74 69 .#.end..#..#.---....##.alternati
2aa00 76 65 6c 79 2c 20 74 68 65 20 73 61 6d 65 20 69 64 65 61 20 61 73 20 61 62 6f 76 65 20 62 75 74 vely,.the.same.idea.as.above.but
2aa20 20 63 6f 6d 70 69 6c 69 6e 67 0d 0a 23 23 20 74 6f 20 61 20 63 61 73 65 20 73 74 61 74 65 6d 65 .compiling..##.to.a.case.stateme
2aa40 6e 74 3a 20 28 6e 6f 74 20 69 6e 20 70 65 72 6c 63 6f 6f 6b 62 6f 6f 6b 29 0d 0a 23 21 2f 75 73 nt:.(not.in.perlcookbook)..#!/us
2aa60 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 70 6f 70 67 72 65 70 32 2e 35 20 2d 20 67 72 r/bin/ruby.-w..#.popgrep2.5.-.gr
2aa80 65 70 20 66 6f 72 20 61 62 62 72 65 76 69 61 74 69 6f 6e 73 20 6f 66 20 70 6c 61 63 65 73 20 74 ep.for.abbreviations.of.places.t
2aaa0 68 61 74 20 73 61 79 20 22 70 6f 70 22 0d 0a 23 20 76 65 72 73 69 6f 6e 20 32 2e 35 3a 20 65 76 hat.say."pop"..#.version.2.5:.ev
2aac0 61 6c 20 73 74 72 69 6e 67 73 3b 20 66 61 73 74 20 62 75 74 20 68 61 72 64 20 74 6f 20 71 75 6f al.strings;.fast.but.hard.to.quo
2aae0 74 65 0d 0a 70 6f 70 73 74 61 74 65 73 20 3d 20 25 77 28 43 4f 20 4f 4e 20 4d 49 20 57 49 20 4d te..popstates.=.%w(CO.ON.MI.WI.M
2ab00 4e 29 0d 0a 63 6f 64 65 20 3d 20 22 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 5c N)..code.=."ARGF.each.do.|line|\
2ab20 6e 20 20 20 20 63 61 73 65 20 6c 69 6e 65 5c 6e 22 0d 0a 70 6f 70 73 74 61 74 65 73 2e 65 61 63 n....case.line\n"..popstates.eac
2ab40 68 20 64 6f 20 7c 73 74 61 74 65 7c 0d 0a 20 20 20 20 63 6f 64 65 20 2b 3d 20 22 20 20 20 20 20 h.do.|state|......code.+=.".....
2ab60 20 20 20 77 68 65 6e 20 2f 5c 5c 62 23 7b 73 74 61 74 65 7d 5c 5c 62 2f 20 3a 20 70 72 69 6e 74 ...when./\\b#{state}\\b/.:.print
2ab80 20 6c 69 6e 65 5c 6e 22 0d 0a 65 6e 64 0d 0a 63 6f 64 65 20 2b 3d 20 22 20 20 20 20 65 6e 64 5c .line\n"..end..code.+=."....end\
2aba0 6e 65 6e 64 5c 6e 22 0d 0a 70 72 69 6e 74 20 22 43 4f 44 45 20 49 53 5c 6e 2d 2d 2d 5c 6e 23 7b nend\n"..print."CODE.IS\n---\n#{
2abc0 63 6f 64 65 7d 5c 6e 2d 2d 2d 5c 6e 22 20 69 66 20 66 61 6c 73 65 20 23 20 74 75 72 6e 20 6f 6e code}\n---\n".if.false.#.turn.on
2abe0 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 0d 0a 65 76 61 6c 20 63 6f 64 65 0d 0a 0d 0a 23 20 43 .for.debugging..eval.code....#.C
2ac00 4f 44 45 20 49 53 0d 0a 23 20 2d 2d 2d 0d 0a 23 20 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c ODE.IS..#.---..#.ARGF.each.do.|l
2ac20 69 6e 65 7c 0d 0a 23 20 20 20 20 20 63 61 73 65 20 6c 69 6e 65 0d 0a 23 20 20 20 20 20 20 20 20 ine|..#.....case.line..#........
2ac40 20 77 68 65 6e 20 2f 5c 62 43 4f 5c 62 2f 20 3a 20 70 72 69 6e 74 20 6c 69 6e 65 0d 0a 23 20 20 .when./\bCO\b/.:.print.line..#..
2ac60 20 20 20 20 20 20 20 77 68 65 6e 20 2f 5c 62 4f 4e 5c 62 2f 20 3a 20 70 72 69 6e 74 20 6c 69 6e .......when./\bON\b/.:.print.lin
2ac80 65 0d 0a 23 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 2f 5c 62 4d 49 5c 62 2f 20 3a 20 70 72 69 e..#.........when./\bMI\b/.:.pri
2aca0 6e 74 20 6c 69 6e 65 0d 0a 23 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 2f 5c 62 57 49 5c 62 2f nt.line..#.........when./\bWI\b/
2acc0 20 3a 20 70 72 69 6e 74 20 6c 69 6e 65 0d 0a 23 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 2f 5c .:.print.line..#.........when./\
2ace0 62 4d 4e 5c 62 2f 20 3a 20 70 72 69 6e 74 20 6c 69 6e 65 0d 0a 23 20 20 20 20 20 65 6e 64 0d 0a bMN\b/.:.print.line..#.....end..
2ad00 23 20 65 6e 64 0d 0a 23 0d 0a 23 20 2d 2d 2d 0d 0a 0d 0a 23 20 4e 6f 74 65 3a 20 28 61 62 6f 76 #.end..#..#.---....#.Note:.(abov
2ad20 65 29 20 52 75 62 79 20 31 2e 38 2b 20 61 6c 6c 6f 77 73 20 74 68 65 20 27 77 68 65 6e 20 45 58 e).Ruby.1.8+.allows.the.'when.EX
2ad40 50 20 3a 20 45 58 50 52 27 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 0d 0a 23 20 77 69 74 68 20 74 68 P.:.EXPR'.on.one.line..#.with.th
2ad60 65 20 63 6f 6c 6f 6e 20 73 65 70 61 72 61 74 6f 72 2e 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d e.colon.separator.....#---------
2ad80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e --------------------..#!/usr/bin
2ada0 2f 72 75 62 79 0d 0a 23 20 70 6f 70 67 72 65 70 33 20 2d 20 67 72 65 70 20 66 6f 72 20 61 62 62 /ruby..#.popgrep3.-.grep.for.abb
2adc0 72 65 76 69 61 74 69 6f 6e 73 20 6f 66 20 70 6c 61 63 65 73 20 74 68 61 74 20 73 61 79 20 22 70 reviations.of.places.that.say."p
2ade0 6f 70 22 0d 0a 23 20 76 65 72 73 69 6f 6e 33 3a 20 62 75 69 6c 64 20 61 20 6d 61 74 63 68 5f 61 op"..#.version3:.build.a.match_a
2ae00 6e 79 20 66 75 6e 63 74 69 6f 6e 0d 0a 70 6f 70 73 74 61 74 65 73 20 3d 20 25 77 28 43 4f 20 4f ny.function..popstates.=.%w(CO.O
2ae20 4e 20 4d 49 20 57 49 20 4d 4e 29 0d 0a 65 78 70 72 20 3d 20 70 6f 70 73 74 61 74 65 73 2e 6d 61 N.MI.WI.MN)..expr.=.popstates.ma
2ae40 70 7b 7c 65 7c 22 6c 69 6e 65 20 3d 7e 20 2f 5c 5c 62 23 7b 65 7d 5c 5c 62 2f 22 7d 2e 6a 6f 69 p{|e|"line.=~./\\b#{e}\\b/"}.joi
2ae60 6e 28 27 7c 7c 27 29 0d 0a 65 76 61 6c 20 22 64 65 66 20 6d 61 74 63 68 5f 61 6e 79 28 6c 69 6e n('||')..eval."def.match_any(lin
2ae80 65 29 3b 20 23 7b 65 78 70 72 7d 3b 65 6e 64 22 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c e);.#{expr};end"..ARGF.each.do.|
2aea0 6c 69 6e 65 7c 0d 0a 20 20 20 20 70 72 69 6e 74 20 6c 69 6e 65 20 69 66 20 6d 61 74 63 68 5f 61 line|......print.line.if.match_a
2aec0 6e 79 28 6c 69 6e 65 29 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ny(line)..end..#----------------
2aee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 23 23 20 20 62 75 69 6c 64 69 6e 67 20 61 20 -------------....##..building.a.
2af00 6d 61 74 63 68 5f 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 74 72 69 76 69 61 6c 0d match_all.function.is.a.trivial.
2af20 0a 23 23 20 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 26 26 20 66 6f 72 20 7c 7c 0d 0a .##..substitution.of.&&.for.||..
2af40 23 23 20 20 68 65 72 65 20 69 73 20 61 20 67 65 6e 65 72 61 6c 69 7a 65 64 20 65 78 61 6d 70 6c ##..here.is.a.generalized.exampl
2af60 65 3a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 23 20 67 72 65 70 61 e:..#!/usr/bin/ruby.-w..##.grepa
2af80 75 74 68 20 2d 20 70 72 69 6e 74 20 6c 69 6e 65 73 20 74 68 61 74 20 6d 65 6e 74 69 6f 6e 20 62 uth.-.print.lines.that.mention.b
2afa0 6f 74 68 20 66 6f 6f 20 61 6e 64 20 62 61 72 0d 0a 63 6c 61 73 73 20 4d 75 6c 74 69 4d 61 74 63 oth.foo.and.bar..class.MultiMatc
2afc0 68 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 2a 70 61 74 74 65 72 6e 73 29 h......def.initialize(*patterns)
2afe0 0d 0a 20 20 20 20 20 20 20 20 5f 61 6e 79 20 3d 20 62 75 69 6c 64 5f 6d 61 74 63 68 28 27 7c 7c .........._any.=.build_match('||
2b000 27 2c 70 61 74 74 65 72 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 5f 61 6c 6c 20 3d 20 62 75 69 6c ',patterns).........._all.=.buil
2b020 64 5f 6d 61 74 63 68 28 27 26 26 27 2c 70 61 74 74 65 72 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 d_match('&&',patterns)..........
2b040 65 76 61 6c 20 22 64 65 66 20 6d 61 74 63 68 5f 61 6e 79 28 6c 69 6e 65 29 3b 23 7b 5f 61 6e 79 eval."def.match_any(line);#{_any
2b060 7d 3b 65 6e 64 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 22 64 65 66 20 6d 61 74 63 };end\n"..........eval."def.matc
2b080 68 5f 61 6c 6c 28 6c 69 6e 65 29 3b 23 7b 5f 61 6c 6c 7d 3b 65 6e 64 5c 6e 22 0d 0a 20 20 20 20 h_all(line);#{_all};end\n"......
2b0a0 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 62 75 69 6c 64 5f 6d 61 74 63 68 28 73 79 6d 2c 61 ..end......def.build_match(sym,a
2b0c0 72 67 73 29 0d 0a 20 20 20 20 20 20 20 20 61 72 67 73 2e 6d 61 70 7b 7c 65 7c 22 6c 69 6e 65 20 rgs)..........args.map{|e|"line.
2b0e0 3d 7e 20 2f 23 7b 65 7d 2f 22 7d 2e 6a 6f 69 6e 28 73 79 6d 29 0d 0a 20 20 20 20 65 6e 64 0d 0a =~./#{e}/"}.join(sym)......end..
2b100 65 6e 64 0d 0a 0d 0a 6d 6d 20 3d 20 4d 75 6c 74 69 4d 61 74 63 68 2e 6e 65 77 28 27 66 6f 6f 27 end....mm.=.MultiMatch.new('foo'
2b120 2c 27 62 61 72 27 29 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 ,'bar')..ARGF.each.do.|line|....
2b140 20 20 70 72 69 6e 74 20 6c 69 6e 65 20 69 66 20 6d 6d 2e 6d 61 74 63 68 5f 61 6c 6c 28 6c 69 6e ..print.line.if.mm.match_all(lin
2b160 65 29 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d e)..end..#----------------------
2b180 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 0d 0a 23 20 70 6f -------....#!/usr/bin/ruby..#.po
2b1a0 70 67 72 65 70 34 20 2d 20 67 72 65 70 20 66 6f 72 20 61 62 62 72 65 76 69 61 74 69 6f 6e 73 20 pgrep4.-.grep.for.abbreviations.
2b1c0 6f 66 20 70 6c 61 63 65 73 20 74 68 61 74 20 73 61 79 20 22 70 6f 70 22 0d 0a 23 20 76 65 72 73 of.places.that.say."pop"..#.vers
2b1e0 69 6f 6e 34 3a 20 70 72 65 74 74 79 20 66 61 73 74 2c 20 62 75 74 20 73 69 6d 70 6c 65 3a 20 63 ion4:.pretty.fast,.but.simple:.c
2b200 6f 6d 70 69 6c 65 20 61 6c 6c 20 72 65 27 73 20 66 69 72 73 74 3a 0d 0a 70 6f 70 73 74 61 74 65 ompile.all.re's.first:..popstate
2b220 73 20 3d 20 25 77 28 43 4f 20 4f 4e 20 4d 49 20 57 49 20 4d 4e 29 0d 0a 70 6f 70 73 74 61 74 65 s.=.%w(CO.ON.MI.WI.MN)..popstate
2b240 73 20 3d 20 70 6f 70 73 74 61 74 65 73 2e 6d 61 70 7b 7c 72 65 7c 20 25 72 2f 5c 62 23 7b 72 65 s.=.popstates.map{|re|.%r/\b#{re
2b260 7d 5c 62 2f 7d 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 }\b/}..ARGF.each.do.|line|......
2b280 70 6f 70 73 74 61 74 65 73 2e 65 61 63 68 20 64 6f 20 7c 73 74 61 74 65 5f 72 65 7c 0d 0a 20 20 popstates.each.do.|state_re|....
2b2a0 20 20 20 20 20 20 69 66 20 6c 69 6e 65 20 3d 7e 20 73 74 61 74 65 5f 72 65 0d 0a 20 20 20 20 20 ......if.line.=~.state_re.......
2b2c0 20 20 20 20 20 20 20 70 72 69 6e 74 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 .......print.line..............b
2b2e0 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d reak..........end......end..end.
2b300 0a 0d 0a 23 23 20 73 70 65 65 64 73 20 74 72 69 61 6c 73 20 6f 6e 20 74 68 65 20 6a 61 72 67 6f ...##.speeds.trials.on.the.jargo
2b320 6e 20 66 69 6c 65 28 34 31 32 29 3a 20 32 36 30 30 36 20 6c 69 6e 65 73 2c 20 31 2e 33 4d 42 0d n.file(412):.26006.lines,.1.3MB.
2b340 0a 23 23 20 70 6f 70 67 72 65 70 31 20 20 20 3d 3e 20 37 2e 30 34 30 73 0d 0a 23 23 20 70 6f 70 .##.popgrep1...=>.7.040s..##.pop
2b360 67 72 65 70 32 20 20 20 3d 3e 20 30 2e 36 35 36 73 0d 0a 23 23 20 70 6f 70 67 72 65 70 32 2e 35 grep2...=>.0.656s..##.popgrep2.5
2b380 20 3d 3e 20 30 2e 36 33 33 73 0d 0a 23 23 20 70 6f 70 67 72 65 70 33 20 20 20 3d 3e 20 30 2e 36 .=>.0.633s..##.popgrep3...=>.0.6
2b3a0 37 35 73 0d 0a 23 23 20 70 6f 70 67 72 65 70 34 20 20 20 3d 3e 20 31 2e 30 32 37 73 0d 0a 0d 0a 75s..##.popgrep4...=>.1.027s....
2b3c0 23 20 75 6e 6c 65 73 73 20 73 70 65 65 64 20 69 73 20 63 72 69 74 69 63 69 61 6c 2c 20 74 68 65 #.unless.speed.is.criticial,.the
2b3e0 20 74 65 63 68 6e 69 71 75 65 20 69 6e 20 70 6f 70 67 72 65 70 34 20 69 73 20 61 0d 0a 23 20 72 .technique.in.popgrep4.is.a..#.r
2b400 65 61 73 6f 6e 61 62 6c 65 20 62 61 6c 61 6e 63 65 20 62 65 74 77 65 65 6e 20 73 70 65 65 64 20 easonable.balance.between.speed.
2b420 61 6e 64 20 6c 6f 67 69 63 61 6c 20 73 69 6d 70 6c 69 63 69 74 79 2e 0d 0a 0d 0a 0d 0a 23 20 40 and.logical.simplicity.......#.@
2b440 40 50 4c 45 41 43 40 40 5f 36 2e 31 31 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 70 72 69 6e 74 20 @PLEAC@@_6.11..begin......print.
2b460 22 50 61 74 74 65 72 6e 3f 20 22 0d 0a 20 20 20 20 70 61 74 20 3d 20 24 73 74 64 69 6e 2e 67 65 "Pattern?."......pat.=.$stdin.ge
2b480 74 73 2e 63 68 6f 6d 70 0d 0a 20 20 20 20 52 65 67 65 78 70 2e 6e 65 77 28 70 61 74 29 0d 0a 72 ts.chomp......Regexp.new(pat)..r
2b4a0 65 73 63 75 65 0d 0a 20 20 20 20 77 61 72 6e 20 22 49 6e 76 61 6c 69 64 20 50 61 74 74 65 72 6e escue......warn."Invalid.Pattern
2b4c0 22 0d 0a 20 20 20 20 72 65 74 72 79 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 "......retry..end......#.@@PLEAC
2b4e0 40 40 5f 36 2e 31 33 0d 0a 23 20 75 73 65 73 20 74 68 65 20 27 61 6d 61 74 63 68 27 20 65 78 74 @@_6.13..#.uses.the.'amatch'.ext
2b500 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e 3a 0d 0a 23 20 68 74 74 70 3a 2f 2f 72 61 61 2e 72 ension.found.on:..#.http://raa.r
2b520 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 2f 70 72 6f 6a 65 63 74 2f 61 6d 61 74 63 68 2f 0d 0a 72 65 uby-lang.org/project/amatch/..re
2b540 71 75 69 72 65 20 27 61 6d 61 74 63 68 27 0d 0a 6d 61 74 63 68 65 72 20 3d 20 41 6d 61 74 63 68 quire.'amatch'..matcher.=.Amatch
2b560 2e 6e 65 77 28 27 62 61 6c 61 73 74 27 29 0d 0a 23 24 72 65 6c 61 74 69 76 65 2c 20 24 64 69 73 .new('balast')..#$relative,.$dis
2b580 74 61 6e 63 65 20 3d 20 30 2c 20 31 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 27 2f 75 73 72 2f 73 68 tance.=.0,.1..File.open('/usr/sh
2b5a0 61 72 65 2f 64 69 63 74 2f 77 6f 72 64 73 27 29 2e 65 61 63 68 5f 6c 69 6e 65 20 64 6f 20 7c 6c are/dict/words').each_line.do.|l
2b5c0 69 6e 65 7c 0d 0a 20 20 20 20 70 72 69 6e 74 20 6c 69 6e 65 20 69 66 20 6d 61 74 63 68 65 72 2e ine|......print.line.if.matcher.
2b5e0 73 65 61 72 63 68 28 6c 69 6e 65 29 20 3c 3d 20 31 0d 0a 65 6e 64 0d 0a 5f 5f 45 4e 44 5f 5f 0d search(line).<=.1..end..__END__.
2b600 0a 23 43 4f 44 45 0d 0a 62 61 6c 6c 61 73 74 0d 0a 62 61 6c 6c 61 73 74 73 0d 0a 62 61 6c 75 73 .#CODE..ballast..ballasts..balus
2b620 74 72 61 64 65 0d 0a 62 61 6c 75 73 74 72 61 64 65 73 0d 0a 62 6c 61 73 74 0d 0a 62 6c 61 73 74 trade..balustrades..blast..blast
2b640 65 64 0d 0a 62 6c 61 73 74 65 72 0d 0a 62 6c 61 73 74 65 72 73 0d 0a 62 6c 61 73 74 69 6e 67 0d ed..blaster..blasters..blasting.
2b660 0a 62 6c 61 73 74 73 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 31 34 0d 0a 73 .blasts......#.@@PLEAC@@_6.14..s
2b680 74 72 2e 73 63 61 6e 28 2f 5c 47 28 5c 64 29 2f 29 2e 65 61 63 68 20 64 6f 20 7c 74 6f 6b 65 6e tr.scan(/\G(\d)/).each.do.|token
2b6a0 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 66 6f 75 6e 64 20 23 7b 74 6f 6b 65 6e 7d 22 0d 0a 65 6e |......puts."found.#{token}"..en
2b6c0 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d d..#----------------------------
2b6e0 2d 0d 0a 6e 20 3d 20 22 20 20 20 34 39 20 68 65 72 65 22 0d 0a 6e 2e 67 73 75 62 21 28 2f 5c 47 -..n.=."...49.here"..n.gsub!(/\G
2b700 20 2f 2c 27 30 27 29 0d 0a 70 75 74 73 20 6e 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ./,'0')..puts.n..#--------------
2b720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 20 3d 20 22 33 2c 34 2c 35 2c 39 2c ---------------..str.=."3,4,5,9,
2b740 31 32 30 22 0d 0a 73 74 72 2e 73 63 61 6e 28 2f 5c 47 2c 3f 28 5c 64 2b 29 2f 29 2e 65 61 63 68 120"..str.scan(/\G,?(\d+)/).each
2b760 20 64 6f 20 7c 6e 75 6d 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 46 6f 75 6e 64 20 6e 75 6d 62 65 .do.|num|......puts."Found.numbe
2b780 72 3a 20 23 7b 6e 75 6d 7d 22 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d r:.#{num}"..end..#--------------
2b7a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 52 75 62 79 20 64 6f 65 73 6e 27 74 20 ---------------..#.Ruby.doesn't.
2b7c0 68 61 76 65 20 74 68 65 20 53 74 72 69 6e 67 2e 70 6f 73 20 6f 72 20 61 20 2f 63 20 72 65 20 6d have.the.String.pos.or.a./c.re.m
2b7e0 6f 64 69 66 69 65 72 20 6c 69 6b 65 20 50 65 72 6c 0d 0a 23 20 42 75 74 20 69 74 20 64 6f 65 73 odifier.like.Perl..#.But.it.does
2b800 20 68 61 76 65 20 53 74 72 69 6e 67 53 63 61 6e 6e 65 72 20 69 6e 20 74 68 65 20 73 74 61 6e 64 .have.StringScanner.in.the.stand
2b820 61 72 64 20 6c 69 62 72 61 72 79 20 28 73 74 72 73 63 6e 29 0d 0a 23 20 77 68 69 63 68 20 61 6c ard.library.(strscn)..#.which.al
2b840 6c 6f 77 73 20 73 69 6d 69 6c 61 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 3a 0d 0a 0d 0a 72 lows.similar.functionality:....r
2b860 65 71 75 69 72 65 20 27 73 74 72 73 63 61 6e 27 0d 0a 74 65 78 74 20 3d 20 27 74 68 65 20 79 65 equire.'strscan'..text.=.'the.ye
2b880 61 72 20 31 37 35 32 20 6c 6f 73 74 20 31 30 20 64 61 79 73 20 6f 6e 20 74 68 65 20 33 72 64 20 ar.1752.lost.10.days.on.the.3rd.
2b8a0 6f 66 20 53 65 70 74 65 6d 62 65 72 27 0d 0a 73 63 20 3d 20 53 74 72 69 6e 67 53 63 61 6e 6e 65 of.September'..sc.=.StringScanne
2b8c0 72 2e 6e 65 77 28 74 65 78 74 29 0d 0a 77 68 69 6c 65 20 73 63 2e 73 63 61 6e 28 2f 2e 2a 3f 28 r.new(text)..while.sc.scan(/.*?(
2b8e0 5c 64 2b 29 2f 29 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 66 6f 75 6e 64 3a 20 23 7b 73 63 5b 31 \d+)/)......print."found:.#{sc[1
2b900 5d 7d 5c 6e 22 0d 0a 65 6e 64 0d 0a 69 66 20 73 63 2e 73 63 61 6e 28 2f 5c 53 2b 2f 29 0d 0a 20 ]}\n"..end..if.sc.scan(/\S+/)...
2b920 20 20 20 70 75 74 73 20 22 46 6f 75 6e 64 20 23 7b 73 63 5b 30 5d 7d 20 61 66 74 65 72 20 6c 61 ...puts."Found.#{sc[0]}.after.la
2b940 73 74 20 6e 75 6d 62 65 72 22 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d st.number"..end..#--------------
2b960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 61 73 73 75 6d 69 6e 67 20 63 6f 6e 74 ---------------..#.assuming.cont
2b980 69 6e 75 69 6e 67 20 66 72 6f 6d 20 61 62 6f 76 65 3a 0d 0a 70 75 74 73 20 22 54 68 65 20 70 6f inuing.from.above:..puts."The.po
2b9a0 73 69 74 69 6f 6e 20 69 6e 20 27 74 65 78 74 27 20 69 73 3a 20 23 7b 73 63 2e 70 6f 73 7d 22 0d sition.in.'text'.is:.#{sc.pos}".
2b9c0 0a 73 63 2e 70 6f 73 20 3d 20 33 30 0d 0a 70 75 74 73 20 22 54 68 65 20 70 6f 73 69 74 69 6f 6e .sc.pos.=.30..puts."The.position
2b9e0 20 69 6e 20 27 74 65 78 74 27 20 69 73 3a 20 23 7b 73 63 2e 70 6f 73 7d 22 0d 0a 0d 0a 0d 0a 23 .in.'text'.is:.#{sc.pos}"......#
2ba00 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 31 35 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .@@PLEAC@@_6.15..#--------------
2ba20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 67 72 65 65 64 79 20 70 61 74 74 65 72 ---------------..#.greedy.patter
2ba40 6e 0d 0a 73 74 72 2e 67 73 75 62 21 28 2f 3c 2e 2a 3e 2f 6d 2c 27 27 29 20 20 20 23 20 6e 6f 74 n..str.gsub!(/<.*>/m,'')...#.not
2ba60 20 67 6f 6f 64 0d 0a 0d 0a 23 20 6e 6f 6e 2d 67 72 65 65 64 79 20 28 6d 69 6e 69 6d 61 6c 29 20 .good....#.non-greedy.(minimal).
2ba80 70 61 74 74 65 72 6e 0d 0a 73 74 72 2e 67 73 75 62 21 28 2f 3c 2e 2a 3f 3e 2f 6d 2c 27 27 29 20 pattern..str.gsub!(/<.*?>/m,'').
2baa0 20 20 23 20 6e 6f 74 20 67 72 65 61 74 0d 0a 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#.not.great......#------------
2bac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 3c 62 3e 3c 69 3e 74 68 69 73 3c 2f -----------------..#<b><i>this</
2bae0 69 3e 20 61 6e 64 20 3c 69 3e 74 68 61 74 3c 2f 69 3e 20 61 72 65 20 69 6d 70 6f 72 74 61 6e 74 i>.and.<i>that</i>.are.important
2bb00 3c 2f 62 3e 20 4f 68 2c 20 3c 62 3e 3c 69 3e 6d 65 20 74 6f 6f 21 3c 2f 69 3e 3c 2f 62 3e 0d 0a </b>.Oh,.<b><i>me.too!</i></b>..
2bb20 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a #-----------------------------..
2bb40 25 72 7b 20 3c 62 3e 3c 69 3e 28 2e 2a 3f 29 3c 2f 69 3e 3c 2f 62 3e 20 7d 6d 78 0d 0a 23 2d 2d %r{.<b><i>(.*?)</i></b>.}mx..#--
2bb60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 2f ---------------------------..%r/
2bb80 42 45 47 49 4e 28 28 3f 3a 28 3f 21 42 45 47 49 4e 29 2e 29 2a 29 45 4e 44 2f 0d 0a 23 2d 2d 2d BEGIN((?:(?!BEGIN).)*)END/..#---
2bba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 7b 20 --------------------------..%r{.
2bbc0 3c 62 3e 3c 69 3e 28 20 20 28 3f 3a 20 28 3f 21 3c 2f 62 3e 7c 3c 2f 69 3e 29 2e 20 29 2a 20 20 <b><i>(..(?:.(?!</b>|</i>)..)*..
2bbe0 29 20 3c 2f 69 3e 3c 2f 62 3e 20 7d 6d 78 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ).</i></b>.}mx..#---------------
2bc00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 7b 20 3c 62 3e 3c 69 3e 28 20 20 28 3f 3a --------------..%r{.<b><i>(..(?:
2bc20 20 28 3f 21 3c 2f 5b 69 62 5d 3e 29 2e 20 29 2a 20 20 29 20 3c 2f 69 3e 3c 2f 62 3e 20 7d 6d 78 .(?!</[ib]>)..)*..).</i></b>.}mx
2bc40 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#-----------------------------
2bc60 0d 0a 25 72 7b 0d 0a 20 20 20 20 3c 62 3e 3c 69 3e 0d 0a 20 20 20 20 5b 5e 3c 5d 2a 20 20 23 20 ..%r{......<b><i>......[^<]*..#.
2bc80 73 74 75 66 66 20 6e 6f 74 20 70 6f 73 73 69 62 6c 79 20 62 61 64 2c 20 61 6e 64 20 6e 6f 74 20 stuff.not.possibly.bad,.and.not.
2bca0 70 6f 73 73 69 62 6c 79 20 74 68 65 20 65 6e 64 2e 0d 0a 20 20 20 20 28 3f 3a 0d 0a 20 23 20 61 possibly.the.end.......(?:...#.a
2bcc0 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 63 61 6e 20 68 61 76 65 20 27 3c 27 20 69 66 t.this.point,.we.can.have.'<'.if
2bce0 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 74 68 69 6e 67 20 62 61 64 0d 0a 20 20 20 20 .not.part.of.something.bad......
2bd00 20 28 3f 21 20 20 3c 2f 3f 5b 69 62 5d 3e 20 20 29 20 20 20 23 20 77 68 61 74 20 77 65 20 63 61 .(?!..</?[ib]>..)...#.what.we.ca
2bd20 6e 27 74 20 68 61 76 65 0d 0a 20 20 20 20 20 3c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n't.have.......<................
2bd40 20 20 23 20 6f 6b 61 79 2c 20 73 6f 20 6d 61 74 63 68 20 74 68 65 20 27 3c 27 0d 0a 20 20 20 20 ..#.okay,.so.match.the.'<'......
2bd60 20 5b 5e 3c 5d 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 64 20 63 6f 6e 74 69 6e .[^<]*..............#.and.contin
2bd80 75 65 20 77 69 74 68 20 6d 6f 72 65 20 73 61 66 65 20 73 74 75 66 66 0d 0a 20 20 20 20 29 20 2a ue.with.more.safe.stuff......).*
2bda0 0d 0a 20 20 20 20 3c 2f 69 3e 3c 2f 62 3e 0d 0a 20 7d 6d 78 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c ......</i></b>...}mx......#.@@PL
2bdc0 45 41 43 40 40 5f 36 2e 31 36 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d EAC@@_6.16..#-------------------
2bde0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 24 2f 20 3d 20 22 22 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 ----------..$/.=.""..ARGF.each.d
2be00 6f 20 7c 70 61 72 61 7c 0d 0a 20 20 20 20 70 61 72 61 2e 73 63 61 6e 20 25 72 2f 0d 0a 20 20 20 o.|para|......para.scan.%r/.....
2be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 62 20 20 20 20 20 23 20 73 74 61 72 74 20 61 74 ...............\b.....#.start.at
2be40 20 77 6f 72 64 20 62 6f 75 6e 64 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .word.boundary..................
2be60 20 20 28 5c 53 2b 29 20 20 23 20 66 69 6e 64 20 63 68 75 6e 6b 20 6f 66 20 6e 6f 6e 2d 77 68 69 ..(\S+)..#.find.chunk.of.non-whi
2be80 74 65 73 70 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 62 20 20 20 tespace....................\b...
2bea0 20 20 23 20 75 6e 74 69 6c 20 61 20 77 6f 72 64 20 62 6f 75 6e 64 61 72 79 0d 0a 20 20 20 20 20 ..#.until.a.word.boundary.......
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .............(..................
2bee0 20 20 20 20 5c 73 2b 20 20 23 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 77 68 69 74 65 73 70 61 63 ....\s+..#.followed.by.whitespac
2bf00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 31 20 20 20 23 20 61 6e e......................\1...#.an
2bf20 64 20 74 68 61 74 20 73 61 6d 65 20 63 68 75 6e 6b 20 61 67 61 69 6e 0d 0a 20 20 20 20 20 20 20 d.that.same.chunk.again.........
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 62 20 20 20 23 20 61 6e 64 20 61 20 77 6f 72 64 20 62 .............\b...#.and.a.word.b
2bf60 6f 75 6e 64 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2b 20 20 oundary....................).+..
2bf80 20 20 23 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 69 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 ..#.one.or.more.times...........
2bfa0 20 20 20 20 20 20 20 2f 78 69 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22 64 75 70 ......./xi.do..........puts."dup
2bfc0 20 77 6f 72 64 20 27 23 7b 24 31 7d 27 20 61 74 20 70 61 72 61 67 72 61 70 68 20 23 7b 24 2e 7d .word.'#{$1}'.at.paragraph.#{$.}
2bfe0 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d "......end..end..#--------------
2c000 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 61 73 74 72 20 3d 20 27 6e 6f 62 6f 64 79 27 ---------------..astr.=.'nobody'
2c020 0d 0a 62 73 74 72 20 3d 20 27 62 6f 64 79 73 6e 61 74 63 68 65 72 27 0d 0a 69 66 20 22 23 7b 61 ..bstr.=.'bodysnatcher'..if."#{a
2c040 73 74 72 7d 20 23 7b 62 73 74 72 7d 22 20 3d 7e 20 2f 5e 28 5c 77 2b 29 28 5c 77 2b 29 20 5c 32 str}.#{bstr}".=~./^(\w+)(\w+).\2
2c060 28 5c 77 2b 29 24 2f 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 23 7b 24 32 7d 20 6f 76 65 72 6c 61 (\w+)$/......print."#{$2}.overla
2c080 70 73 20 69 6e 20 23 7b 24 31 7d 2d 23 7b 24 32 7d 2d 23 7b 24 33 7d 22 0d 0a 65 6e 64 0d 0a 23 ps.in.#{$1}-#{$2}-#{$3}"..end..#
2c0a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 -----------------------------..#
2c0c0 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 70 72 69 6d 65 5f 70 61 74 74 65 !/usr/bin/ruby.-w..#.prime_patte
2c0e0 72 6e 20 2d 2d 20 66 69 6e 64 20 70 72 69 6d 65 20 66 61 63 74 6f 72 73 20 6f 66 20 61 72 67 75 rn.--.find.prime.factors.of.argu
2c100 6d 65 6e 74 20 75 73 69 6e 67 20 70 61 74 74 65 72 6e 73 0d 0a 41 52 47 56 20 3c 3c 20 31 38 30 ment.using.patterns..ARGV.<<.180
2c120 0d 0a 63 61 70 20 3d 20 27 6f 27 20 2a 20 41 52 47 56 2e 73 68 69 66 74 0d 0a 77 68 69 6c 65 20 ..cap.=.'o'.*.ARGV.shift..while.
2c140 63 61 70 20 3d 7e 20 2f 5e 28 6f 6f 2b 3f 29 5c 31 2b 24 2f 0d 0a 20 20 20 20 70 72 69 6e 74 20 cap.=~./^(oo+?)\1+$/......print.
2c160 24 31 2e 73 69 7a 65 2c 20 22 20 22 0d 0a 20 20 20 20 63 61 70 2e 67 73 75 62 21 28 2f 23 7b 24 $1.size,."."......cap.gsub!(/#{$
2c180 31 7d 2f 2c 27 6f 27 29 0d 0a 65 6e 64 0d 0a 70 75 74 73 20 63 61 70 2e 73 69 7a 65 0d 0a 23 2d 1}/,'o')..end..puts.cap.size..#-
2c1a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 64 ----------------------------..#d
2c1c0 69 6f 70 68 61 6e 74 69 6e 65 0d 0a 23 20 73 6f 6c 76 65 20 66 6f 72 20 31 32 78 20 2b 20 31 35 iophantine..#.solve.for.12x.+.15
2c1e0 79 20 2b 20 31 36 7a 20 3d 20 32 38 31 2c 20 6d 61 78 69 6d 69 7a 69 6e 67 20 78 0d 0a 69 66 20 y.+.16z.=.281,.maximizing.x..if.
2c200 28 27 6f 27 20 2a 20 32 38 31 29 2e 6d 61 74 63 68 28 2f 5e 28 6f 2a 29 5c 31 7b 31 31 7d 28 6f ('o'.*.281).match(/^(o*)\1{11}(o
2c220 2a 29 5c 32 7b 31 34 7d 28 6f 2a 29 5c 33 7b 31 35 7d 24 2f 29 0d 0a 20 20 20 20 78 2c 20 79 2c *)\2{14}(o*)\3{15}$/)......x,.y,
2c240 20 7a 20 3d 20 24 31 2e 73 69 7a 65 2c 20 24 32 2e 73 69 7a 65 2c 20 24 33 2e 73 69 7a 65 0d 0a .z.=.$1.size,.$2.size,.$3.size..
2c260 20 20 20 20 70 75 74 73 20 22 4f 6e 65 20 73 6f 6c 75 74 69 6f 6e 20 69 73 3a 20 78 3d 23 7b 78 ....puts."One.solution.is:.x=#{x
2c280 7d 3b 20 79 3d 23 7b 79 7d 3b 20 7a 3d 23 7b 7a 7d 22 0d 0a 65 6c 73 65 0d 0a 20 20 20 20 70 75 };.y=#{y};.z=#{z}"..else......pu
2c2a0 74 73 20 22 4e 6f 20 73 6f 6c 75 74 69 6f 6e 2e 22 0d 0a 65 6e 64 0d 0a 23 20 20 20 20 3d 3e 20 ts."No.solution."..end..#....=>.
2c2c0 4f 6e 65 20 73 6f 6c 75 74 69 6f 6e 20 69 73 3a 20 78 3d 31 37 3b 20 79 3d 33 3b 20 7a 3d 32 0d One.solution.is:.x=17;.y=3;.z=2.
2c2e0 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...#----------------------------
2c300 2d 0d 0a 23 20 75 73 69 6e 67 20 64 69 66 66 65 72 65 6e 74 20 71 75 61 6e 74 69 66 69 65 72 73 -..#.using.different.quantifiers
2c320 3a 0d 0a 28 27 6f 27 20 2a 20 32 38 31 29 2e 6d 61 74 63 68 28 2f 5e 28 6f 2b 29 5c 31 7b 31 31 :..('o'.*.281).match(/^(o+)\1{11
2c340 7d 28 6f 2b 29 5c 32 7b 31 34 7d 28 6f 2b 29 5c 33 7b 31 35 7d 24 2f 29 0d 0a 23 20 20 20 20 3d }(o+)\2{14}(o+)\3{15}$/)..#....=
2c360 3e 20 4f 6e 65 20 73 6f 6c 75 74 69 6f 6e 20 69 73 3a 20 78 3d 31 37 3b 20 79 3d 33 3b 20 7a 3d >.One.solution.is:.x=17;.y=3;.z=
2c380 32 0d 0a 0d 0a 28 27 6f 27 20 2a 20 32 38 31 29 2e 6d 61 74 63 68 28 2f 5e 28 6f 2a 3f 29 5c 31 2....('o'.*.281).match(/^(o*?)\1
2c3a0 7b 31 31 7d 28 6f 2a 29 5c 32 7b 31 34 7d 28 6f 2a 29 5c 33 7b 31 35 7d 24 2f 29 0d 0a 23 20 20 {11}(o*)\2{14}(o*)\3{15}$/)..#..
2c3c0 20 20 3d 3e 20 4f 6e 65 20 73 6f 6c 75 74 69 6f 6e 20 69 73 3a 20 78 3d 30 3b 20 79 3d 37 3b 20 ..=>.One.solution.is:.x=0;.y=7;.
2c3e0 7a 3d 31 31 0d 0a 0d 0a 28 27 6f 27 20 2a 20 32 38 31 29 2e 6d 61 74 63 68 28 2f 5e 28 6f 2b 3f z=11....('o'.*.281).match(/^(o+?
2c400 29 5c 31 7b 31 31 7d 28 6f 2a 29 5c 32 7b 31 34 7d 28 6f 2a 29 5c 33 7b 31 35 7d 24 2f 29 0d 0a )\1{11}(o*)\2{14}(o*)\3{15}$/)..
2c420 23 20 20 20 20 3d 3e 20 4f 6e 65 20 73 6f 6c 75 74 69 6f 6e 20 69 73 3a 20 78 3d 31 3b 20 79 3d #....=>.One.solution.is:.x=1;.y=
2c440 33 3b 20 7a 3d 31 34 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 31 37 0d 0a 23 3;.z=14......#.@@PLEAC@@_6.17..#
2c460 20 61 6c 70 68 61 20 4f 52 20 62 65 74 61 0d 0a 25 72 2f 61 6c 70 68 61 7c 62 65 74 61 2f 0d 0a .alpha.OR.beta..%r/alpha|beta/..
2c480 0d 0a 23 20 61 6c 70 68 61 20 41 4e 44 20 62 65 74 61 0d 0a 25 72 2f 28 3f 3d 2e 2a 61 6c 70 68 ..#.alpha.AND.beta..%r/(?=.*alph
2c4a0 61 29 28 3f 3d 2e 2a 62 65 74 61 29 2f 6d 0d 0a 0d 0a 23 20 61 6c 70 68 61 20 41 4e 44 20 62 65 a)(?=.*beta)/m....#.alpha.AND.be
2c4c0 74 61 2c 20 20 6e 6f 20 6f 76 65 72 6c 61 70 0d 0a 25 72 2f 61 6c 70 68 61 2e 2a 62 65 74 61 7c ta,..no.overlap..%r/alpha.*beta|
2c4e0 62 65 74 61 2e 2a 61 6c 70 68 61 2f 6d 0d 0a 0d 0a 23 20 4e 4f 54 20 62 65 74 61 0d 0a 25 72 2f beta.*alpha/m....#.NOT.beta..%r/
2c500 5e 28 3f 3a 28 3f 21 62 65 74 61 29 2e 29 2a 24 2f 6d 0d 0a 0d 0a 23 20 4e 4f 54 20 62 61 64 20 ^(?:(?!beta).)*$/m....#.NOT.bad.
2c520 42 55 54 20 67 6f 6f 64 0d 0a 25 72 2f 28 3f 3d 28 3f 3a 28 3f 21 42 41 44 29 2e 29 2a 24 29 47 BUT.good..%r/(?=(?:(?!BAD).)*$)G
2c540 4f 4f 44 2f 6d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d OOD/m..#------------------------
2c560 2d 2d 2d 2d 2d 0d 0a 0d 0a 69 66 20 21 28 73 74 72 69 6e 67 20 3d 7e 20 2f 70 61 74 74 65 72 6e -----....if.!(string.=~./pattern
2c580 2f 29 20 20 20 23 20 75 67 6c 79 0d 0a 20 20 20 20 73 6f 6d 65 74 68 69 6e 67 28 29 0d 0a 65 6e /)...#.ugly......something()..en
2c5a0 64 0d 0a 0d 0a 69 66 20 73 74 72 69 6e 67 20 21 7e 20 2f 70 61 74 74 65 72 6e 2f 20 20 20 23 20 d....if.string.!~./pattern/...#.
2c5c0 70 72 65 66 65 72 72 65 64 0d 0a 20 20 20 20 73 6f 6d 65 74 68 69 6e 67 28 29 0d 0a 65 6e 64 0d preferred......something()..end.
2c5e0 0a 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .....#--------------------------
2c600 2d 2d 2d 0d 0a 69 66 20 73 74 72 69 6e 67 20 3d 7e 20 2f 70 61 74 31 2f 20 20 26 26 20 73 74 72 ---..if.string.=~./pat1/..&&.str
2c620 69 6e 67 20 3d 7e 20 2f 70 61 74 32 2f 0d 0a 20 20 20 20 73 6f 6d 65 74 68 69 6e 67 28 29 0d 0a ing.=~./pat2/......something()..
2c640 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d end..#--------------------------
2c660 2d 2d 2d 0d 0a 69 66 20 73 74 72 69 6e 67 20 3d 7e 20 2f 70 61 74 31 2f 20 7c 7c 20 73 74 72 69 ---..if.string.=~./pat1/.||.stri
2c680 6e 67 20 3d 7e 20 2f 70 61 74 32 2f 0d 0a 20 20 20 20 73 6f 6d 65 74 68 69 6e 67 28 29 0d 0a 65 ng.=~./pat2/......something()..e
2c6a0 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nd..#---------------------------
2c6c0 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 6d 69 6e 69 67 72 --..#!/usr/bin/ruby.-w..#.minigr
2c6e0 65 70 20 2d 20 74 72 69 76 69 61 6c 20 67 72 65 70 0d 0a 70 61 74 20 3d 20 41 52 47 56 2e 73 68 ep.-.trivial.grep..pat.=.ARGV.sh
2c700 69 66 74 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 70 72 ift..ARGF.each.do.|line|......pr
2c720 69 6e 74 20 6c 69 6e 65 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f 23 7b 70 61 74 7d 2f 6f 0d 0a 65 int.line.if.line.=~./#{pat}/o..e
2c740 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nd..#---------------------------
2c760 2d 2d 0d 0a 20 22 6c 61 62 65 6c 6c 65 64 22 20 3d 7e 20 2f 5e 28 3f 3d 2e 2a 62 65 6c 6c 29 28 --..."labelled".=~./^(?=.*bell)(
2c780 3f 3d 2e 2a 6c 61 62 29 2f 6d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ?=.*lab)/m..#-------------------
2c7a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 24 73 74 72 69 6e 67 20 3d 7e 20 2f 62 65 6c 6c 2f 20 26 26 ----------..$string.=~./bell/.&&
2c7c0 20 24 73 74 72 69 6e 67 20 3d 7e 20 2f 6c 61 62 2f 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .$string.=~./lab/..#------------
2c7e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 24 6d 75 72 72 61 79 5f 68 69 6c 6c 20 -----------------..$murray_hill.
2c800 3d 20 22 62 6c 61 68 20 62 65 6c 6c 20 62 6c 61 68 20 22 0d 0a 69 66 20 24 6d 75 72 72 61 79 5f =."blah.bell.blah."..if.$murray_
2c820 68 69 6c 6c 20 3d 7e 20 25 72 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 hill.=~.%r{.....................
2c840 20 20 20 20 20 20 5e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 74 61 72 74 20 6f 66 20 ......^..............#.start.of.
2c860 73 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 string..........................
2c880 28 3f 3d 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 7a 65 72 6f 2d 77 69 64 74 68 20 6c 6f 6f (?=.............#.zero-width.loo
2c8a0 6b 61 68 65 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 kahead..........................
2c8c0 20 20 20 20 2e 2a 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 79 20 61 6d 6f 75 6e 74 20 6f 66 20 .....*..........#.any.amount.of.
2c8e0 69 6e 74 65 72 76 65 6e 69 6e 67 20 73 74 75 66 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 intervening.stuff...............
2c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 65 6c 6c 20 20 20 20 20 20 20 20 23 20 74 68 65 ...............bell........#.the
2c920 20 64 65 73 69 72 65 64 20 62 65 6c 6c 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 .desired.bell.string............
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 ..............)...............#.
2c960 72 65 77 69 6e 64 2c 20 73 69 6e 63 65 20 77 65 20 77 65 72 65 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 rewind,.since.we.were.only.looki
2c980 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3f 3d 20 ng..........................(?=.
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 64 20 64 6f 20 74 68 65 20 73 61 6d 65 20 74 68 ............#.and.do.the.same.th
2c9c0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ing.............................
2c9e0 20 2e 2a 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 79 20 61 6d 6f 75 6e 74 20 6f 66 20 69 6e 74 ..*..........#.any.amount.of.int
2ca00 65 72 76 65 6e 69 6e 67 20 73 74 75 66 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ervening.stuff..................
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 20 20 20 20 20 20 20 20 20 23 20 61 6e 64 20 74 68 ............lab.........#.and.th
2ca40 65 20 6c 61 62 20 70 61 72 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.lab.part......................
2ca60 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 6d 78 20 ....).......................}mx.
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 2f 6d 20 6d 65 61 6e 73 20 2e 20 63 61 6e 20 ...............#./m.means...can.
2caa0 6d 61 74 63 68 20 6e 65 77 6c 69 6e 65 0d 0a 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 4c 6f 6f 6b match.newline........print."Look
2cac0 73 20 6c 69 6b 65 20 42 65 6c 6c 20 4c 61 62 73 20 6d 69 67 68 74 20 62 65 20 69 6e 20 4d 75 72 s.like.Bell.Labs.might.be.in.Mur
2cae0 72 61 79 20 48 69 6c 6c 21 5c 6e 22 3b 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ray.Hill!\n";..end..#-----------
2cb00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 22 6c 61 62 65 6c 6c 65 64 22 20 3d ------------------.."labelled".=
2cb20 7e 20 2f 28 3f 3a 5e 2e 2a 62 65 6c 6c 2e 2a 6c 61 62 29 7c 28 3f 3a 5e 2e 2a 6c 61 62 2e 2a 62 ~./(?:^.*bell.*lab)|(?:^.*lab.*b
2cb40 65 6c 6c 29 2f 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ell)/..#------------------------
2cb60 2d 2d 2d 2d 2d 0d 0a 24 62 72 61 6e 64 20 3d 20 22 6c 61 62 65 6c 6c 65 64 22 3b 0d 0a 69 66 20 -----..$brand.=."labelled";..if.
2cb80 24 62 72 61 6e 64 20 3d 7e 20 25 72 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 $brand.=~.%r{..................(
2cba0 3f 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6e 6f 6e 2d 63 61 70 74 75 72 69 ?:.................#.non-capturi
2cbc0 6e 67 20 67 72 6f 75 70 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ng.grouper......................
2cbe0 5e 20 2e 2a 3f 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 79 20 61 6d 6f 75 6e 74 20 6f 66 20 ^..*?...........#.any.amount.of.
2cc00 73 74 75 66 66 20 61 74 20 74 68 65 20 66 72 6f 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 stuff.at.the.front..............
2cc20 20 20 20 20 20 20 20 20 20 20 62 65 6c 6c 20 20 20 20 20 20 20 20 20 20 23 20 6c 6f 6f 6b 20 66 ..........bell..........#.look.f
2cc40 6f 72 20 61 20 62 65 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 or.a.bell.......................
2cc60 20 2e 2a 3f 20 20 20 20 20 20 20 20 20 20 20 23 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 79 ..*?...........#.followed.by.any
2cc80 20 61 6d 6f 75 6e 74 20 6f 66 20 61 6e 79 74 68 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .amount.of.anything.............
2cca0 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 20 20 20 20 20 20 20 20 20 20 20 23 20 6c 6f 6f 6b 20 ...........lab...........#.look.
2ccc0 66 6f 72 20 61 20 6c 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 20 for.a.lab....................)..
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 65 6e 64 20 67 72 6f 75 70 65 72 0d 0a 20 20 ...............#.end.grouper....
2cd00 20 20 20 20 20 20 20 20 20 20 7c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..........|.....................
2cd20 20 20 23 20 6f 74 68 65 72 77 69 73 65 2c 20 74 72 79 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 ..#.otherwise,.try.the.other.dir
2cd40 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3f 3a 20 20 20 20 20 ection..................(?:.....
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6e 6f 6e 2d 63 61 70 74 75 72 69 6e 67 20 67 72 6f 75 ............#.non-capturing.grou
2cd80 70 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5e 20 2e 2a 3f 20 20 per......................^..*?..
2cda0 20 20 20 20 20 20 20 20 20 23 20 61 6e 79 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 75 66 66 20 61 .........#.any.amount.of.stuff.a
2cdc0 74 20 74 68 65 20 66 72 6f 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.the.front.....................
2cde0 20 20 20 6c 61 62 20 20 20 20 20 20 20 20 20 20 20 23 20 6c 6f 6f 6b 20 66 6f 72 20 61 20 6c 61 ...lab...........#.look.for.a.la
2ce00 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2a 3f 20 20 20 20 b.........................*?....
2ce20 20 20 20 20 20 20 20 23 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 79 20 61 6d 6f 75 6e 74 20 .......#.followed.by.any.amount.
2ce40 6f 66 20 61 6e 79 74 68 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 of.anything.....................
2ce60 20 20 20 62 65 6c 6c 20 20 20 20 20 20 20 20 20 20 23 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 ...bell..........#.followed.by.a
2ce80 20 62 65 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 20 20 20 20 20 .bell....................)......
2cea0 20 20 20 20 20 20 20 20 20 20 20 23 20 65 6e 64 20 67 72 6f 75 70 65 72 0d 0a 20 20 20 20 20 20 ...........#.end.grouper........
2cec0 20 20 20 20 20 20 7d 6d 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 ......}mx.....................#.
2cee0 2f 6d 20 6d 65 61 6e 73 20 2e 20 63 61 6e 20 6d 61 74 63 68 20 6e 65 77 6c 69 6e 65 0d 0a 20 20 /m.means...can.match.newline....
2cf00 20 20 70 72 69 6e 74 20 22 4f 75 72 20 62 72 61 6e 64 20 68 61 73 20 62 65 6c 6c 20 61 6e 64 20 ..print."Our.brand.has.bell.and.
2cf20 6c 61 62 20 73 65 70 61 72 61 74 65 2e 5c 6e 22 3b 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d lab.separate.\n";..end..#-------
2cf40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 24 6d 61 70 20 3d 7e 20 ----------------------..$map.=~.
2cf60 2f 5e 28 3f 3a 28 3f 21 77 61 6c 64 6f 29 2e 29 2a 24 2f 73 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d /^(?:(?!waldo).)*$/s..#---------
2cf80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 24 6d 61 70 20 3d 20 22 74 68 --------------------..$map.=."th
2cfa0 65 20 67 72 65 61 74 20 62 61 6c 64 6f 22 0d 0a 69 66 20 24 6d 61 70 20 3d 7e 20 25 72 7b 0d 0a e.great.baldo"..if.$map.=~.%r{..
2cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................^...............
2cfe0 20 20 20 20 23 20 73 74 61 72 74 20 6f 66 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 ....#.start.of.string...........
2d000 20 20 20 20 20 20 20 28 3f 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6e 6f 6e .......(?:.................#.non
2d020 2d 63 61 70 74 75 72 69 6e 67 20 67 72 6f 75 70 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 -capturing.grouper..............
2d040 20 20 20 20 20 20 20 20 28 3f 21 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6c 6f 6f 6b 20 61 ........(?!.............#.look.a
2d060 68 65 61 64 20 6e 65 67 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 head.negation...................
2d080 20 20 20 20 20 20 20 77 61 6c 64 6f 20 20 20 20 20 20 20 23 20 69 73 20 68 65 20 61 68 65 61 64 .......waldo.......#.is.he.ahead
2d0a0 20 6f 66 20 75 73 20 6e 6f 77 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .of.us.now?.....................
2d0c0 20 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69 73 20 73 6f 2c 20 74 68 65 20 6e 65 .)...............#.is.so,.the.ne
2d0e0 67 61 74 69 6f 6e 20 66 61 69 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 gation.failed...................
2d100 20 20 20 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 79 20 63 68 61 72 61 63 74 ...................#.any.charact
2d120 65 72 20 28 63 75 7a 7a 61 20 2f 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 er.(cuzza./s)..................)
2d140 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 72 65 70 65 61 74 20 74 68 61 74 .*.................#.repeat.that
2d160 20 67 72 6f 75 70 69 6e 67 20 30 20 6f 72 20 6d 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .grouping.0.or.more.............
2d180 20 20 20 20 20 24 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 72 6f 75 .....$...................#.throu
2d1a0 67 68 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 gh.the.end.of.the.string........
2d1c0 20 20 20 20 20 20 20 7d 6d 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .......}mx....................#.
2d1e0 2f 6d 20 6d 65 61 6e 73 20 2e 20 63 61 6e 20 6d 61 74 63 68 20 6e 65 77 6c 69 6e 65 0d 0a 20 20 /m.means...can.match.newline....
2d200 20 20 70 72 69 6e 74 20 22 54 68 65 72 65 27 73 20 6e 6f 20 77 61 6c 64 6f 20 68 65 72 65 21 5c ..print."There's.no.waldo.here!\
2d220 6e 22 3b 0d 0a 65 6e 64 0d 0a 3d 62 65 67 69 6e 0d 0a 20 37 3a 31 35 61 6d 20 20 75 70 20 32 30 n";..end..=begin...7:15am..up.20
2d240 36 20 64 61 79 73 2c 20 31 33 3a 33 30 2c 20 20 34 20 75 73 65 72 73 2c 20 20 6c 6f 61 64 20 61 6.days,.13:30,..4.users,..load.a
2d260 76 65 72 61 67 65 3a 20 31 2e 30 34 2c 20 31 2e 30 37 2c 20 31 2e 30 34 0d 0a 0d 0a 55 53 45 52 verage:.1.04,.1.07,.1.04....USER
2d280 20 20 20 20 20 54 54 59 20 20 20 20 20 20 46 52 4f 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .....TTY......FROM..............
2d2a0 4c 4f 47 49 4e 40 20 20 49 44 4c 45 20 20 20 4a 43 50 55 20 20 20 50 43 50 55 20 20 57 48 41 54 LOGIN@..IDLE...JCPU...PCPU..WHAT
2d2c0 0d 0a 0d 0a 74 63 68 72 69 73 74 20 20 74 74 79 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ....tchrist..tty1...............
2d2e0 20 20 20 20 20 20 20 20 35 3a 31 36 70 6d 20 33 36 64 61 79 73 20 32 34 3a 34 33 20 20 20 30 2e ........5:16pm.36days.24:43...0.
2d300 30 33 73 20 20 78 69 6e 69 74 0d 0a 0d 0a 74 63 68 72 69 73 74 20 20 74 74 79 32 20 20 20 20 20 03s..xinit....tchrist..tty2.....
2d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 35 3a 31 39 70 6d 20 20 36 64 61 79 73 20 ..................5:19pm..6days.
2d340 20 30 2e 34 33 73 20 20 30 2e 34 33 73 20 20 2d 74 63 73 68 0d 0a 0d 0a 74 63 68 72 69 73 74 20 .0.43s..0.43s..-tcsh....tchrist.
2d360 20 74 74 79 70 30 20 20 20 20 63 68 74 68 6f 6e 20 20 20 20 20 20 20 20 20 20 20 20 37 3a 35 38 .ttyp0....chthon............7:58
2d380 61 6d 20 20 33 64 61 79 73 20 32 33 2e 34 34 73 20 20 30 2e 34 34 73 20 20 2d 74 63 73 68 0d 0a am..3days.23.44s..0.44s..-tcsh..
2d3a0 0d 0a 67 6e 61 74 20 20 20 20 20 74 74 79 53 34 20 20 20 20 63 6f 70 72 6f 6c 69 74 68 20 20 20 ..gnat.....ttyS4....coprolith...
2d3c0 20 20 20 20 20 20 32 3a 30 31 70 6d 20 31 33 3a 33 36 6d 20 20 30 2e 33 30 73 20 20 30 2e 33 30 ......2:01pm.13:36m..0.30s..0.30
2d3e0 73 20 20 2d 74 63 73 68 0d 0a 3d 65 6e 64 0d 0a 23 25 20 77 20 7c 20 6d 69 6e 69 67 72 65 70 20 s..-tcsh..=end..#%.w.|.minigrep.
2d400 27 5e 28 3f 21 2e 2a 74 74 79 70 29 2e 2a 74 63 68 72 69 73 74 27 0d 0a 23 2d 2d 2d 2d 2d 2d 2d '^(?!.*ttyp).*tchrist'..#-------
2d420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 7b 0d 0a 20 20 20 ----------------------..%r{.....
2d440 20 5e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 63 68 6f .^.......................#.ancho
2d460 72 65 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 0d 0a 20 20 20 20 28 3f 21 20 20 20 20 20 20 20 red.to.the.start......(?!.......
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 7a 65 72 6f 2d 77 69 64 74 68 20 6c 6f 6f 6b 2d ..............#.zero-width.look-
2d4a0 61 68 65 61 64 20 61 73 73 65 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2e 2a 20 20 20 20 20 ahead.assertion...........*.....
2d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 79 20 61 6d 6f 75 6e 74 20 6f 66 20 61 6e 79 .............#.any.amount.of.any
2d4e0 74 68 69 6e 67 20 28 66 61 73 74 65 72 20 74 68 61 6e 20 2e 2a 3f 29 0d 0a 20 20 20 20 20 20 20 thing.(faster.than..*?).........
2d500 20 74 74 79 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65 20 73 74 72 69 6e .ttyp................#.the.strin
2d520 67 20 79 6f 75 20 64 6f 6e 27 74 20 77 61 6e 74 20 74 6f 20 66 69 6e 64 0d 0a 20 20 20 20 29 20 g.you.don't.want.to.find......).
2d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 65 6e 64 20 6c 6f 6f 6b ......................#.end.look
2d560 2d 61 68 65 61 64 20 6e 65 67 61 74 69 6f 6e 3b 20 72 65 77 69 6e 64 20 74 6f 20 73 74 61 72 74 -ahead.negation;.rewind.to.start
2d580 0d 0a 20 20 20 20 2e 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .......*......................#.
2d5a0 61 6e 79 20 61 6d 6f 75 6e 74 20 6f 66 20 61 6e 79 74 68 69 6e 67 20 28 66 61 73 74 65 72 20 74 any.amount.of.anything.(faster.t
2d5c0 68 61 6e 20 2e 2a 3f 29 0d 0a 20 20 20 20 74 63 68 72 69 73 74 20 20 20 20 20 20 20 20 20 20 20 han..*?)......tchrist...........
2d5e0 20 20 20 20 20 20 23 20 6e 6f 77 20 74 72 79 20 74 6f 20 66 69 6e 64 20 54 6f 6d 0d 0a 7d 78 0d ......#.now.try.to.find.Tom..}x.
2d600 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d .#-----------------------------.
2d620 0a 23 25 20 77 20 7c 20 67 72 65 70 20 74 63 68 72 69 73 74 20 7c 20 67 72 65 70 20 2d 76 20 74 .#%.w.|.grep.tchrist.|.grep.-v.t
2d640 74 79 70 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d typ..#--------------------------
2d660 2d 2d 2d 0d 0a 23 25 20 67 72 65 70 20 2d 69 20 27 70 61 74 74 65 72 6e 27 20 66 69 6c 65 73 0d ---..#%.grep.-i.'pattern'.files.
2d680 0a 23 25 20 6d 69 6e 69 67 72 65 70 20 27 28 3f 69 29 70 61 74 74 65 72 6e 27 20 66 69 6c 65 73 .#%.minigrep.'(?i)pattern'.files
2d6a0 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#-----------------------------
2d6c0 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 32 30 0d 0a 61 6e 73 20 3d 20 24 73 ......#.@@PLEAC@@_6.20..ans.=.$s
2d6e0 74 64 69 6e 2e 67 65 74 73 2e 63 68 6f 6d 70 0d 0a 72 65 20 3d 20 25 72 2f 5e 23 7b 52 65 67 65 tdin.gets.chomp..re.=.%r/^#{Rege
2d700 78 70 2e 71 75 6f 74 65 28 61 6e 73 29 7d 2f 0d 0a 63 61 73 65 0d 0a 20 20 20 20 77 68 65 6e 20 xp.quote(ans)}/..case......when.
2d720 22 53 45 4e 44 22 20 20 3d 7e 20 72 65 20 3a 20 70 75 74 73 20 22 41 63 74 69 6f 6e 20 69 73 20 "SEND"..=~.re.:.puts."Action.is.
2d740 73 65 6e 64 22 0d 0a 20 20 20 20 77 68 65 6e 20 22 53 54 4f 50 22 20 20 3d 7e 20 72 65 20 3a 20 send"......when."STOP"..=~.re.:.
2d760 70 75 74 73 20 22 41 63 74 69 6f 6e 20 69 73 20 73 74 6f 70 22 0d 0a 20 20 20 20 77 68 65 6e 20 puts."Action.is.stop"......when.
2d780 22 41 42 4f 52 54 22 20 3d 7e 20 72 65 20 3a 20 70 75 74 73 20 22 41 63 74 69 6f 6e 20 69 73 20 "ABORT".=~.re.:.puts."Action.is.
2d7a0 61 62 6f 72 74 22 0d 0a 20 20 20 20 77 68 65 6e 20 22 45 44 49 54 22 20 20 3d 7e 20 72 65 20 3a abort"......when."EDIT"..=~.re.:
2d7c0 20 70 75 74 73 20 22 41 63 74 69 6f 6e 20 69 73 20 65 64 69 74 22 0d 0a 65 6e 64 0d 0a 23 2d 2d .puts."Action.is.edit"..end..#--
2d7e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 72 65 71 ---------------------------..req
2d800 75 69 72 65 20 27 61 62 62 72 65 76 27 0d 0a 74 61 62 6c 65 20 3d 20 41 62 62 72 65 76 2e 61 62 uire.'abbrev'..table.=.Abbrev.ab
2d820 62 72 65 76 20 25 77 2d 73 65 6e 64 20 73 74 6f 70 20 61 62 6f 72 74 20 65 64 69 74 2d 0d 0a 6c brev.%w-send.stop.abort.edit-..l
2d840 6f 6f 70 20 64 6f 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 41 63 74 69 6f 6e 3a 20 22 0d 0a 20 20 oop.do......print."Action:."....
2d860 20 20 61 6e 73 20 3d 20 24 73 74 64 69 6e 2e 67 65 74 73 2e 63 68 6f 6d 70 0d 0a 20 20 20 20 70 ..ans.=.$stdin.gets.chomp......p
2d880 75 74 73 20 22 41 63 74 69 6f 6e 20 66 6f 72 20 23 7b 61 6e 73 7d 20 69 73 20 23 7b 74 61 62 6c uts."Action.for.#{ans}.is.#{tabl
2d8a0 65 5b 61 6e 73 2e 64 6f 77 6e 63 61 73 65 5d 7d 22 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 2d 2d 2d e[ans.downcase]}"..end......#---
2d8c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 64 75 --------------------------..#.du
2d8e0 6d 6d 79 20 76 61 6c 75 65 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 66 6f 72 20 27 66 69 6c 65 mmy.values.are.defined.for.'file
2d900 27 2c 20 27 50 41 47 45 52 27 2c 20 61 6e 64 0d 0a 23 20 74 68 65 20 27 69 6e 76 6f 6b 65 5f 65 ',.'PAGER',.and..#.the.'invoke_e
2d920 64 69 74 6f 72 27 20 61 6e 64 20 27 64 65 6c 69 76 65 72 5f 6d 65 73 73 61 67 65 27 20 6d 65 74 ditor'.and.'deliver_message'.met
2d940 68 6f 64 73 0d 0a 23 20 64 6f 20 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 69 6e 74 65 72 hods..#.do.not.do.anything.inter
2d960 65 73 74 69 6e 67 20 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 2e 0d 0a 23 21 2f 75 73 72 2f esting.in.this.example...#!/usr/
2d980 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 72 65 71 75 69 72 65 20 27 61 62 62 72 65 76 27 0d 0a 0d bin/ruby.-w..require.'abbrev'...
2d9a0 0a 66 69 6c 65 20 3d 20 27 70 6c 65 61 63 5f 72 75 62 79 2e 64 61 74 61 27 0d 0a 50 41 47 45 52 .file.=.'pleac_ruby.data'..PAGER
2d9c0 20 3d 20 27 6c 65 73 73 27 0d 0a 0d 0a 64 65 66 20 69 6e 76 6f 6b 65 5f 65 64 69 74 6f 72 0d 0a .=.'less'....def.invoke_editor..
2d9e0 20 20 20 20 70 75 74 73 20 22 69 6e 76 6f 6b 69 6e 67 20 65 64 69 74 6f 72 22 0d 0a 65 6e 64 0d ....puts."invoking.editor"..end.
2da00 0a 0d 0a 64 65 66 20 64 65 6c 69 76 65 72 5f 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 70 75 74 73 ...def.deliver_message......puts
2da20 20 22 64 65 6c 69 76 65 72 69 6e 67 20 6d 65 73 73 61 67 65 22 0d 0a 65 6e 64 0d 0a 0d 0a 61 63 ."delivering.message"..end....ac
2da40 74 69 6f 6e 73 20 3d 20 7b 0d 0a 20 20 20 20 27 65 64 69 74 27 20 20 3d 3e 20 73 65 6c 66 2e 6d tions.=.{......'edit'..=>.self.m
2da60 65 74 68 6f 64 28 3a 69 6e 76 6f 6b 65 5f 65 64 69 74 6f 72 29 2c 0d 0a 20 20 20 20 27 73 65 6e ethod(:invoke_editor),......'sen
2da80 64 27 20 20 3d 3e 20 73 65 6c 66 2e 6d 65 74 68 6f 64 28 3a 64 65 6c 69 76 65 72 5f 6d 65 73 73 d'..=>.self.method(:deliver_mess
2daa0 61 67 65 29 2c 0d 0a 20 20 20 20 27 6c 69 73 74 27 20 20 3d 3e 20 70 72 6f 63 20 7b 73 79 73 74 age),......'list'..=>.proc.{syst
2dac0 65 6d 28 50 41 47 45 52 2c 20 66 69 6c 65 29 7d 2c 0d 0a 20 20 20 20 27 61 62 6f 72 74 27 20 3d em(PAGER,.file)},......'abort'.=
2dae0 3e 20 70 72 6f 63 20 7b 70 75 74 73 20 22 53 65 65 20 79 61 21 22 3b 20 65 78 69 74 7d 2c 0d 0a >.proc.{puts."See.ya!";.exit},..
2db00 20 20 20 20 22 22 20 20 20 20 20 20 3d 3e 20 70 72 6f 63 20 7b 70 75 74 73 20 22 55 6e 6b 6e 6f ....""......=>.proc.{puts."Unkno
2db20 77 6e 20 43 6f 6d 6d 61 6e 64 22 7d 0d 0a 7d 0d 0a 0d 0a 64 74 61 62 6c 65 20 3d 20 41 62 62 72 wn.Command"}..}....dtable.=.Abbr
2db40 65 76 2e 61 62 62 72 65 76 28 61 63 74 69 6f 6e 73 2e 6b 65 79 73 29 0d 0a 6c 6f 6f 70 20 64 6f ev.abbrev(actions.keys)..loop.do
2db60 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 41 63 74 69 6f 6e 3a 20 22 0d 0a 20 20 20 20 61 6e 73 20 ......print."Action:."......ans.
2db80 3d 20 24 73 74 64 69 6e 2e 67 65 74 73 2e 63 68 6f 6d 70 2e 64 65 6c 65 74 65 28 22 20 5c 74 22 =.$stdin.gets.chomp.delete(".\t"
2dba0 29 0d 0a 20 20 20 20 61 63 74 69 6f 6e 73 5b 20 64 74 61 62 6c 65 5b 61 6e 73 2e 64 6f 77 6e 63 )......actions[.dtable[ans.downc
2dbc0 61 73 65 5d 20 7c 7c 20 22 22 20 5d 2e 63 61 6c 6c 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 ase].||."".].call..end......#.@@
2dbe0 50 4c 45 41 43 40 40 5f 36 2e 31 39 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d PLEAC@@_6.19..#-----------------
2dc00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 62 61 73 69 63 61 6c 6c 79 2c 20 74 68 65 20 50 ------------..#.basically,.the.P
2dc20 65 72 6c 20 43 6f 6f 6b 62 6f 6f 6b 20 63 61 74 65 67 6f 72 69 7a 65 73 20 74 68 69 73 20 61 73 erl.Cookbook.categorizes.this.as
2dc40 20 61 6e 0d 0a 23 20 75 6e 73 6f 6c 76 61 62 6c 65 20 70 72 6f 62 6c 65 6d 20 2e 2e 2e 0d 0a 23 .an..#.unsolvable.problem......#
2dc60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 31 -----------------------------..1
2dc80 20 77 68 69 6c 65 20 61 64 64 72 2e 67 73 75 62 21 28 2f 5c 28 5b 5e 28 29 5d 2a 5c 29 2f 2c 27 .while.addr.gsub!(/\([^()]*\)/,'
2dca0 27 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ')..#---------------------------
2dcc0 2d 2d 0d 0a 44 65 61 72 20 73 6f 6d 65 75 73 65 72 40 68 6f 73 74 2e 63 6f 6d 2c 0d 0a 0d 0a 50 --..Dear.someuser@host.com,....P
2dce0 6c 65 61 73 65 20 63 6f 6e 66 69 72 6d 20 74 68 65 20 6d 61 69 6c 20 61 64 64 72 65 73 73 20 79 lease.confirm.the.mail.address.y
2dd00 6f 75 20 67 61 76 65 20 75 73 20 57 65 64 20 4d 61 79 20 20 36 20 30 39 3a 33 38 3a 34 31 0d 0a ou.gave.us.Wed.May..6.09:38:41..
2dd20 4d 44 54 20 31 39 39 38 20 62 79 20 72 65 70 6c 79 69 6e 67 20 74 6f 20 74 68 69 73 20 6d 65 73 MDT.1998.by.replying.to.this.mes
2dd40 73 61 67 65 2e 20 20 49 6e 63 6c 75 64 65 20 74 68 65 20 73 74 72 69 6e 67 0d 0a 22 52 75 6d 70 sage...Include.the.string.."Rump
2dd60 65 6c 73 74 69 6c 74 73 6b 69 6e 22 20 69 6e 20 74 68 61 74 20 72 65 70 6c 79 2c 20 62 75 74 20 elstiltskin".in.that.reply,.but.
2dd80 73 70 65 6c 6c 65 64 20 69 6e 20 72 65 76 65 72 73 65 3b 20 74 68 61 74 20 69 73 2c 0d 0a 73 74 spelled.in.reverse;.that.is,..st
2dda0 61 72 74 20 77 69 74 68 20 22 4e 69 6b 2e 2e 2e 22 2e 20 20 4f 6e 63 65 20 74 68 69 73 20 69 73 art.with."Nik..."...Once.this.is
2ddc0 20 64 6f 6e 65 2c 20 79 6f 75 72 20 63 6f 6e 66 69 72 6d 65 64 20 61 64 64 72 65 73 73 20 77 69 .done,.your.confirmed.address.wi
2dde0 6c 6c 0d 0a 62 65 20 65 6e 74 65 72 65 64 20 69 6e 74 6f 20 6f 75 72 20 72 65 63 6f 72 64 73 2e ll..be.entered.into.our.records.
2de00 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 32 31 0d 0a 23 2d 2d 2d 2d 2d 2d 2d ......#.@@PLEAC@@_6.21..#-------
2de20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 25 20 67 75 6e 7a 69 ----------------------..#%.gunzi
2de40 70 20 2d 63 20 7e 2f 6d 61 69 6c 2f 61 72 63 68 69 76 65 2e 67 7a 20 7c 20 75 72 6c 69 66 79 20 p.-c.~/mail/archive.gz.|.urlify.
2de60 3e 20 61 72 63 68 69 76 65 2e 75 72 6c 69 66 69 65 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d >.archive.urlified..#-----------
2de80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 25 20 75 72 6c 69 66 79 20 7e 2f ------------------..#%.urlify.~/
2dea0 6d 61 69 6c 2f 2a 2e 69 6e 62 6f 78 20 3e 20 7e 2f 61 6c 6c 6d 61 69 6c 2e 75 72 6c 69 66 69 65 mail/*.inbox.>.~/allmail.urlifie
2dec0 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d d..#----------------------------
2dee0 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 75 72 6c 69 66 79 20 -..#!/usr/bin/ruby.-w..#.urlify.
2df00 2d 20 77 72 61 70 20 48 54 4d 4c 20 6c 69 6e 6b 73 20 61 72 6f 75 6e 64 20 55 52 4c 2d 6c 69 6b -.wrap.HTML.links.around.URL-lik
2df20 65 20 63 6f 6e 73 74 72 75 63 74 73 0d 0a 0d 0a 75 72 6c 73 20 3d 20 27 28 68 74 74 70 73 3f 7c e.constructs....urls.=.'(https?|
2df40 74 65 6c 6e 65 74 7c 67 6f 70 68 65 72 7c 66 69 6c 65 7c 77 61 69 73 7c 66 74 70 29 27 3b 0d 0a telnet|gopher|file|wais|ftp)';..
2df60 6c 74 72 73 20 3d 20 27 5c 77 27 3b 0d 0a 67 75 6e 6b 20 3d 20 27 2f 23 7e 3a 2e 3f 2b 3d 26 25 ltrs.=.'\w';..gunk.=.'/#~:.?+=&%
2df80 40 21 5c 2d 27 3b 0d 0a 70 75 6e 63 20 3d 20 27 2e 3a 3f 5c 2d 27 3b 0d 0a 61 6e 79 20 20 3d 20 @!\-';..punc.=.'.:?\-';..any..=.
2dfa0 22 23 7b 6c 74 72 73 7d 23 7b 67 75 6e 6b 7d 23 7b 70 75 6e 63 7d 22 3b 0d 0a 0d 0a 41 52 47 46 "#{ltrs}#{gunk}#{punc}";....ARGF
2dfc0 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 6c 69 6e 65 2e 67 73 75 62 21 20 .each.do.|line|......line.gsub!.
2dfe0 25 72 2f 0d 0a 20 20 20 20 20 20 20 20 5c 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 %r/..........\b.................
2e000 20 20 20 23 20 73 74 61 72 74 20 61 74 20 77 6f 72 64 20 62 6f 75 6e 64 61 72 79 0d 0a 20 20 20 ...#.start.at.word.boundary.....
2e020 20 20 20 20 20 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 62 65 67 .....(.....................#.beg
2e040 69 6e 20 24 31 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 23 7b 75 72 6c 73 7d 20 20 20 20 20 3a in.$1..{...........#{urls}.....:
2e060 20 20 20 20 20 20 20 20 23 20 6e 65 65 64 20 72 65 73 6f 75 72 63 65 20 61 6e 64 20 61 20 63 6f ........#.need.resource.and.a.co
2e080 6c 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 5b 23 7b 61 6e 79 7d 5d 20 2b 3f 20 20 20 20 20 20 20 lon...........[#{any}].+?.......
2e0a0 20 20 20 23 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 20 6f 72 20 6d 6f 72 65 0d 0a 20 20 20 ...#.followed.by.on.or.more.....
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 6f 66 ...........................#..of
2e0e0 20 61 6e 79 20 76 61 6c 69 64 20 63 68 61 72 61 63 74 65 72 2c 20 62 75 74 0d 0a 20 20 20 20 20 .any.valid.character,.but.......
2e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 62 65 20 63 .........................#..be.c
2e120 6f 6e 73 65 72 76 61 74 69 76 65 20 61 6e 64 20 74 61 6b 65 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 onservative.and.take.only.......
2e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 77 68 61 74 .........................#..what
2e160 20 79 6f 75 20 6e 65 65 64 20 74 6f 2e 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 29 20 20 20 20 20 .you.need.to..............).....
2e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 65 6e 64 20 20 20 24 31 20 20 7d 0d 0a 20 ................#.end...$1..}...
2e1a0 20 20 20 20 20 20 20 28 3f 3d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6c .......(?=...................#.l
2e1c0 6f 6f 6b 2d 61 68 65 61 64 20 6e 6f 6e 2d 63 6f 6e 73 75 6d 70 74 69 76 65 20 61 73 73 65 72 74 ook-ahead.non-consumptive.assert
2e1e0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 5b 23 7b 70 75 6e 63 7d 5d 2a 20 20 20 20 20 20 20 20 ion...........[#{punc}]*........
2e200 20 20 20 23 20 65 69 74 68 65 72 20 30 20 6f 72 20 6d 6f 72 65 20 70 75 6e 63 74 75 61 74 69 6f ...#.either.0.or.more.punctuatio
2e220 6e 0d 0a 20 20 20 20 20 20 20 20 20 5b 5e 23 7b 61 6e 79 7d 5d 20 20 20 20 20 20 20 20 20 20 20 n...........[^#{any}]...........
2e240 20 23 20 20 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 6f 6e 2d 75 72 6c 20 63 68 61 72 0d .#...followed.by.a.non-url.char.
2e260 0a 20 20 20 20 20 20 20 20 20 7c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 ..........|....................#
2e280 20 6f 72 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 24 20 20 20 20 20 20 20 20 20 20 20 20 .or.else...........$............
2e2a0 20 20 20 20 20 20 20 20 23 20 20 20 74 68 65 6e 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 72 69 ........#...then.end.of.the.stri
2e2c0 6e 67 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 2f 69 6f 78 20 64 6f 0d 0a 20 20 20 20 ng..........)....../iox.do......
2e2e0 20 20 20 20 25 51 7c 3c 41 20 48 52 45 46 3d 22 23 7b 24 31 7d 22 3e 23 7b 24 31 7d 3c 2f 41 3e ....%Q|<A.HREF="#{$1}">#{$1}</A>
2e300 7c 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 70 72 69 6e 74 20 6c 69 6e 65 0d 0a 65 6e 64 0d |......end......print.line..end.
2e320 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 36 2e 32 33 0d 0a 25 72 2f 5e 6d 2a 28 64 3f .....#.@@PLEAC@@_6.23..%r/^m*(d?
2e340 63 7b 30 2c 33 7d 7c 63 5b 64 6d 5d 29 28 6c 3f 78 7b 30 2c 33 7d 7c 78 5b 6c 63 5d 29 28 76 3f c{0,3}|c[dm])(l?x{0,3}|x[lc])(v?
2e360 69 7b 30 2c 33 7d 7c 69 5b 76 78 5d 29 24 2f 69 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d i{0,3}|i[vx])$/i..#-------------
2e380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 2e 73 75 62 21 28 2f 28 5c 53 2b ----------------..str.sub!(/(\S+
2e3a0 29 28 5c 73 2b 29 28 5c 53 2b 29 2f 2c 20 27 5c 33 5c 32 5c 31 27 29 0d 0a 23 2d 2d 2d 2d 2d 2d )(\s+)(\S+)/,.'\3\2\1')..#------
2e3c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 2f 28 5c 77 2b -----------------------..%r/(\w+
2e3e0 29 5c 73 2a 3d 5c 73 2a 28 2e 2a 29 5c 73 2a 24 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 )\s*=\s*(.*)\s*$/.............#.
2e400 6b 65 79 77 6f 72 64 20 69 73 20 24 31 2c 20 76 61 6c 75 65 20 69 73 20 24 32 0d 0a 23 2d 2d 2d keyword.is.$1,.value.is.$2..#---
2e420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 2f 2e --------------------------..%r/.
2e440 7b 38 30 2c 7d 2f 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d {80,}/..#-----------------------
2e460 2d 2d 2d 2d 2d 2d 0d 0a 25 72 7c 28 5c 64 2b 29 2f 28 5c 64 2b 29 2f 28 5c 64 2b 29 20 28 5c 64 ------..%r|(\d+)/(\d+)/(\d+).(\d
2e480 2b 29 3a 28 5c 64 2b 29 3a 28 5c 64 2b 29 7c 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d +):(\d+):(\d+)|..#--------------
2e4a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 2e 67 73 75 62 21 28 25 72 7c 2f 75 ---------------..str.gsub!(%r|/u
2e4c0 73 72 2f 62 69 6e 7c 2c 27 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e 27 29 0d 0a 23 2d 2d 2d 2d sr/bin|,'/usr/local/bin')..#----
2e4e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 2e 67 -------------------------..str.g
2e500 73 75 62 21 28 2f 25 28 5b 30 2d 39 41 2d 46 61 2d 66 5d 5b 30 2d 39 41 2d 46 61 2d 66 5d 29 2f sub!(/%([0-9A-Fa-f][0-9A-Fa-f])/
2e520 29 7b 20 24 31 2e 68 65 78 2e 63 68 72 20 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ){.$1.hex.chr.}..#--------------
2e540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 2e 67 73 75 62 21 28 25 72 7b 0d 0a ---------------..str.gsub!(%r{..
2e560 20 20 20 20 2f 5c 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4d 61 74 ..../\*....................#.Mat
2e580 63 68 20 74 68 65 20 6f 70 65 6e 69 6e 67 20 64 65 6c 69 6d 69 74 65 72 0d 0a 20 20 20 20 2e 2a ch.the.opening.delimiter.......*
2e5a0 3f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4d 61 74 63 68 20 61 20 6d ?....................#.Match.a.m
2e5c0 69 6e 69 6d 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 0d 0a 20 20 20 inimal.number.of.characters.....
2e5e0 20 5c 2a 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4d 61 74 63 68 20 .\*/....................#.Match.
2e600 74 68 65 20 63 6c 6f 73 69 6e 67 20 64 65 6c 69 6d 69 74 65 72 0d 0a 7d 78 6d 2c 27 27 29 0d 0a the.closing.delimiter..}xm,'')..
2e620 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a #-----------------------------..
2e640 73 74 72 2e 73 75 62 21 28 2f 5e 5c 73 2b 2f 2c 20 27 27 29 0d 0a 73 74 72 2e 73 75 62 21 28 2f str.sub!(/^\s+/,.'')..str.sub!(/
2e660 5c 73 2b 24 2f 2c 20 27 27 29 0d 0a 0d 0a 23 20 62 75 74 20 72 65 61 6c 6c 79 2c 20 69 6e 20 52 \s+$/,.'')....#.but.really,.in.R
2e680 75 62 79 20 77 65 27 64 20 6a 75 73 74 20 64 6f 3a 0d 0a 73 74 72 2e 73 74 72 69 70 21 0d 0a 23 uby.we'd.just.do:..str.strip!..#
2e6a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 -----------------------------..s
2e6c0 74 72 2e 67 73 75 62 21 28 2f 5c 5c 6e 2f 2c 22 5c 6e 22 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d tr.gsub!(/\\n/,"\n")..#---------
2e6e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 2e 73 75 62 21 28 2f --------------------..str.sub!(/
2e700 5e 2e 2a 3a 3a 2f 2c 20 27 27 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ^.*::/,.'')..#------------------
2e720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 2f 5e 28 5b 30 31 5d 3f 5c 64 5c 64 7c 32 5b 30 2d -----------..%r/^([01]?\d\d|2[0-
2e740 34 5d 5c 64 7c 32 35 5b 30 2d 35 5d 29 5c 2e 28 5b 30 31 5d 3f 5c 64 5c 64 7c 32 5b 30 2d 34 5d 4]\d|25[0-5])\.([01]?\d\d|2[0-4]
2e760 5c 64 7c 32 35 5b 30 2d 35 5d 29 5c 2e 0d 0a 20 20 20 20 28 5b 30 31 5d 3f 5c 64 5c 64 7c 32 5b \d|25[0-5])\.......([01]?\d\d|2[
2e780 30 2d 34 5d 5c 64 7c 32 35 5b 30 2d 35 5d 29 5c 2e 28 5b 30 31 5d 3f 5c 64 5c 64 7c 32 5b 30 2d 0-4]\d|25[0-5])\.([01]?\d\d|2[0-
2e7a0 34 5d 5c 64 7c 32 35 5b 30 2d 35 5d 29 24 2f 78 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 4]\d|25[0-5])$/x..#-------------
2e7c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 2e 73 75 62 21 28 25 72 7c 5e 2e ----------------..str.sub!(%r|^.
2e7e0 2a 2f 7c 2c 20 27 27 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d */|,.'')..#---------------------
2e800 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 63 6f 6c 73 20 3d 20 28 20 28 45 4e 56 5b 27 54 45 52 4d 43 41 50 --------..cols.=.(.(ENV['TERMCAP
2e820 27 5d 20 7c 7c 20 22 20 22 29 20 3d 7e 20 2f 3a 63 6f 23 28 5c 64 2b 29 3a 2f 20 29 20 3f 20 24 '].||.".").=~./:co#(\d+):/.).?.$
2e840 31 20 3a 20 38 30 3b 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 1.:.80;..#----------------------
2e860 2d 2d 2d 2d 2d 2d 2d 0d 0a 6e 61 6d 65 20 3d 20 22 20 23 7b 24 30 7d 20 23 7b 41 52 47 56 7d 22 -------..name.=.".#{$0}.#{ARGV}"
2e880 2e 67 73 75 62 28 25 72 7c 20 2f 5c 53 2b 2f 7c 2c 20 27 20 27 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d .gsub(%r|./\S+/|,.'.')..#-------
2e8a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 72 65 71 75 69 72 65 20 ----------------------..require.
2e8c0 27 72 62 63 6f 6e 66 69 67 27 0d 0a 69 6e 63 6c 75 64 65 20 43 6f 6e 66 69 67 0d 0a 72 61 69 73 'rbconfig'..include.Config..rais
2e8e0 65 20 22 54 68 69 73 20 69 73 6e 27 74 20 4c 69 6e 75 78 22 20 75 6e 6c 65 73 73 20 43 4f 4e 46 e."This.isn't.Linux".unless.CONF
2e900 49 47 5b 27 74 61 72 67 65 74 5f 6f 73 27 5d 20 3d 7e 20 2f 6c 69 6e 75 78 2f 69 3b 0d 0a 23 2d IG['target_os'].=~./linux/i;..#-
2e920 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 ----------------------------..st
2e940 72 2e 67 73 75 62 21 28 25 72 2f 5c 6e 5c 73 2b 2f 2c 20 27 20 27 29 0d 0a 23 2d 2d 2d 2d 2d 2d r.gsub!(%r/\n\s+/,.'.')..#------
2e960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6e 75 6d 73 20 3d 20 -----------------------..nums.=.
2e980 73 74 72 2e 73 63 61 6e 28 2f 28 5c 64 2b 5c 2e 3f 5c 64 2a 7c 5c 2e 5c 64 2b 29 2f 29 0d 0a 23 str.scan(/(\d+\.?\d*|\.\d+)/)..#
2e9a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 63 -----------------------------..c
2e9c0 61 70 77 6f 72 64 73 20 3d 20 73 74 72 2e 73 63 61 6e 28 25 72 2f 28 5c 62 5b 5e 5c 57 61 2d 7a apwords.=.str.scan(%r/(\b[^\Wa-z
2e9e0 30 2d 39 5f 5d 2b 5c 62 29 2f 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0-9_]+\b)/)..#------------------
2ea00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6c 6f 77 6f 72 64 73 20 3d 20 73 74 72 2e 73 63 61 6e 28 -----------..lowords.=.str.scan(
2ea20 25 72 2f 28 5c 62 5b 5e 5c 57 41 2d 5a 30 2d 39 5f 5d 2b 5c 62 29 2f 29 0d 0a 23 2d 2d 2d 2d 2d %r/(\b[^\WA-Z0-9_]+\b)/)..#-----
2ea40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 69 63 77 6f 72 64 ------------------------..icword
2ea60 73 20 3d 20 73 74 72 2e 73 63 61 6e 28 25 72 2f 28 5c 62 5b 5e 5c 57 61 2d 7a 30 2d 39 5f 5d 5b s.=.str.scan(%r/(\b[^\Wa-z0-9_][
2ea80 5e 5c 57 41 2d 5a 30 2d 39 5f 5d 2a 5c 62 29 2f 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ^\WA-Z0-9_]*\b)/)..#------------
2eaa0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6c 69 6e 6b 73 20 3d 20 73 74 72 2e 73 -----------------..links.=.str.s
2eac0 63 61 6e 28 25 72 2f 3c 41 5b 5e 3e 5d 2b 3f 48 52 45 46 5c 73 2a 3d 5c 73 2a 5b 22 27 5d 3f 28 can(%r/<A[^>]+?HREF\s*=\s*["']?(
2eae0 5b 5e 27 22 20 3e 5d 2b 3f 29 5b 20 27 22 5d 3f 3e 2f 6d 69 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d [^'".>]+?)[.'"]?>/mi)..#--------
2eb00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 69 6e 69 74 69 61 6c 20 3d ---------------------..initial.=
2eb20 20 73 74 72 20 3d 7e 20 2f 5e 5c 53 2b 5c 73 2b 28 5c 53 29 5c 53 2a 5c 73 2b 5c 53 2f 20 3f 20 .str.=~./^\S+\s+(\S)\S*\s+\S/.?.
2eb40 24 31 20 3a 20 22 22 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d $1.:.""..#----------------------
2eb60 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 74 72 2e 67 73 75 62 21 28 25 72 2f 22 28 5b 5e 22 5d 2a 29 22 2f -------..str.gsub!(%r/"([^"]*)"/
2eb80 2c 20 25 71 2d 60 60 5c 31 27 27 2d 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ,.%q-``\1''-)..#----------------
2eba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 24 2f 20 3d 20 22 22 0d 0a 73 65 6e 74 65 6e -------------....$/.=.""..senten
2ebc0 63 65 73 20 3d 20 5b 5d 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 70 61 72 61 7c 0d 0a 20 ces.=.[]..ARGF.each.do.|para|...
2ebe0 20 20 20 70 61 72 61 2e 67 73 75 62 21 28 2f 5c 6e 2f 2c 20 27 20 27 29 0d 0a 20 20 20 20 70 61 ...para.gsub!(/\n/,.'.')......pa
2ec00 72 61 2e 67 73 75 62 21 28 2f 20 7b 33 2c 7d 2f 2c 27 20 20 27 29 0d 0a 20 20 20 20 73 65 6e 74 ra.gsub!(/.{3,}/,'..')......sent
2ec20 65 6e 63 65 73 20 3c 3c 20 70 61 72 61 2e 73 63 61 6e 28 2f 28 5c 53 2e 2a 3f 5b 21 3f 2e 5d 29 ences.<<.para.scan(/(\S.*?[!?.])
2ec40 28 3f 3d 20 20 7c 5c 5a 29 2f 29 0d 0a 65 6e 64 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d (?=..|\Z)/)..end....#-----------
2ec60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 2f 28 5c 64 7b 34 7d 29 2d 28 ------------------..%r/(\d{4})-(
2ec80 5c 64 5c 64 29 2d 28 5c 64 5c 64 29 2f 20 20 20 20 20 20 20 20 20 20 20 20 23 20 59 59 59 59 20 \d\d)-(\d\d)/............#.YYYY.
2eca0 69 6e 20 24 31 2c 20 4d 4d 20 69 6e 20 24 32 2c 20 44 44 20 69 6e 20 24 33 0d 0a 23 2d 2d 2d 2d in.$1,.MM.in.$2,.DD.in.$3..#----
2ecc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 25 72 2f 20 5e -------------------------..%r/.^
2ece0 0d 0a 20 20 20 20 20 20 28 3f 3a 0d 0a 20 20 20 20 20 20 20 31 20 5c 73 20 28 3f 3a 20 5c 64 5c ........(?:.........1.\s.(?:.\d\
2ed00 64 5c 64 20 5c 73 29 3f 20 20 20 20 20 20 20 20 20 20 20 20 23 20 31 2c 20 6f 72 20 31 20 61 6e d\d.\s)?............#.1,.or.1.an
2ed20 64 20 61 72 65 61 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 7c 20 20 20 20 20 20 20 20 20 20 20 d.area.code.........|...........
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 2e 2e 2e 20 6f 72 20 2e 2e 2e ....................#.....or....
2ed60 0d 0a 20 20 20 20 20 20 20 5c 28 5c 64 5c 64 5c 64 5c 29 20 5c 73 20 20 20 20 20 20 20 20 20 20 .........\(\d\d\d\).\s..........
2ed80 20 20 20 20 20 20 20 20 20 23 20 61 72 65 61 20 63 6f 64 65 20 77 69 74 68 20 70 61 72 65 6e 73 .........#.area.code.with.parens
2eda0 0d 0a 20 20 20 20 20 20 20 7c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........|......................
2edc0 20 20 20 20 20 20 20 20 20 23 20 2e 2e 2e 20 6f 72 20 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 28 3f .........#.....or.............(?
2ede0 3a 20 5c 2b 5c 64 5c 64 3f 5c 64 3f 20 5c 73 29 3f 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 :.\+\d\d?\d?.\s)?.............#.
2ee00 6f 70 74 69 6f 6e 61 6c 20 2b 63 6f 75 6e 74 72 79 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 5c optional.+country.code.........\
2ee20 64 5c 64 5c 64 20 28 5b 5c 73 5c 2d 5d 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 d\d\d.([\s\-]).................#
2ee40 20 61 6e 64 20 61 72 65 61 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 5c .and.area.code........)........\
2ee60 64 5c 64 5c 64 20 28 5c 73 7c 5c 31 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d\d\d.(\s|\1)...................
2ee80 23 20 70 72 65 66 69 78 20 28 61 6e 64 20 61 72 65 61 20 63 6f 64 65 20 73 65 70 61 72 61 74 6f #.prefix.(and.area.code.separato
2eea0 72 29 0d 0a 20 20 20 20 20 20 5c 64 5c 64 5c 64 5c 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 r)........\d\d\d\d..............
2eec0 20 20 20 20 20 20 20 20 20 20 20 23 20 65 78 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 20 20 24 ...........#.exchange..........$
2eee0 0d 0a 20 2f 78 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .../x..#------------------------
2ef00 2d 2d 2d 2d 2d 0d 0a 25 72 2f 5c 62 6f 68 5c 73 2b 6d 79 5c 73 2b 67 68 3f 6f 28 64 28 64 65 73 -----..%r/\boh\s+my\s+gh?o(d(des
2ef20 73 28 65 73 29 3f 7c 73 3f 29 7c 6f 64 6e 65 73 73 7c 73 68 29 5c 62 2f 69 0d 0a 23 2d 2d 2d 2d s(es)?|s?)|odness|sh)\b/i..#----
2ef40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6c 69 6e 65 73 -------------------------..lines
2ef60 20 3d 20 5b 5d 0d 0a 6c 69 6e 65 73 20 3c 3c 20 24 31 20 77 68 69 6c 65 20 69 6e 70 75 74 2e 73 .=.[]..lines.<<.$1.while.input.s
2ef80 75 62 21 28 2f 5e 28 5b 5e 5c 30 31 32 5c 30 31 35 5d 2a 29 28 5c 30 31 32 5c 30 31 35 3f 7c 5c ub!(/^([^\012\015]*)(\012\015?|\
2efa0 30 31 35 5c 30 31 32 3f 29 2f 2c 27 27 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 015\012?)/,'')......#.@@PLEAC@@_
2efc0 37 2e 30 0d 0a 23 20 41 6e 20 49 4f 20 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 45 6e 75 6d 65 72 7.0..#.An.IO.object.being.Enumer
2efe0 61 62 6c 65 2c 20 77 65 20 63 61 6e 20 75 73 65 20 27 65 61 63 68 27 20 64 69 72 65 63 74 6c 79 able,.we.can.use.'each'.directly
2f000 20 6f 6e 20 69 74 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 22 2f 75 73 72 2f 6c 6f 63 61 6c 2f 77 69 .on.it..File.open("/usr/local/wi
2f020 64 67 65 74 73 2f 64 61 74 61 22 29 2e 65 61 63 68 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 dgets/data").each.{.|line|......
2f040 70 75 74 73 20 6c 69 6e 65 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f 62 6c 75 65 2f 0d 0a 7d 0d 0a puts.line.if.line.=~./blue/..}..
2f060 0d 0a 6c 6f 67 66 69 6c 65 20 3d 20 46 69 6c 65 2e 6e 65 77 28 22 2f 76 61 72 2f 6c 6f 67 2f 72 ..logfile.=.File.new("/var/log/r
2f080 75 62 79 6c 6f 67 2e 74 78 74 22 2c 20 22 77 22 29 0d 0a 6d 79 73 75 62 28 24 73 74 64 69 6e 2c ubylog.txt",."w")..mysub($stdin,
2f0a0 20 6c 6f 67 66 69 6c 65 29 0d 0a 0d 0a 23 20 54 68 65 20 6d 65 74 68 6f 64 20 49 4f 23 72 65 61 .logfile)....#.The.method.IO#rea
2f0c0 64 6c 69 6e 65 20 69 73 20 73 69 6d 69 6c 61 72 20 20 74 6f 20 49 4f 23 67 65 74 73 0d 0a 23 20 dline.is.similar..to.IO#gets..#.
2f0e0 62 75 74 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 but.throws.an.exception.when.it.
2f100 72 65 61 63 68 65 73 20 45 4f 46 0d 0a 66 20 3d 20 46 69 6c 65 2e 6e 65 77 28 22 62 6c 61 2e 74 reaches.EOF..f.=.File.new("bla.t
2f120 78 74 22 29 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 77 68 69 6c 65 20 28 6c 69 6e 65 20 3d 20 66 xt")..begin......while.(line.=.f
2f140 2e 72 65 61 64 6c 69 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 6c 69 6e 65 2e 63 68 6f 6d 70 0d 0a .readline)..........line.chomp..
2f160 20 20 20 20 20 20 20 20 24 73 74 64 6f 75 74 2e 70 72 69 6e 74 20 6c 69 6e 65 20 69 66 20 6c 69 ........$stdout.print.line.if.li
2f180 6e 65 20 3d 7e 20 2f 62 6c 75 65 2f 0d 0a 20 20 20 20 65 6e 64 0d 0a 72 65 73 63 75 65 20 45 4f ne.=~./blue/......end..rescue.EO
2f1a0 46 45 72 72 6f 72 0d 0a 20 20 20 20 66 2e 63 6c 6f 73 65 0d 0a 65 6e 64 0d 0a 0d 0a 77 68 69 6c FError......f.close..end....whil
2f1c0 65 20 24 73 74 64 69 6e 2e 67 65 74 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.$stdin.gets...................
2f1e0 20 20 20 20 20 23 20 72 65 61 64 73 20 66 72 6f 6d 20 53 54 44 49 4e 0d 0a 20 20 20 20 75 6e 6c .....#.reads.from.STDIN......unl
2f200 65 73 73 20 28 2f 5c 64 2f 29 0d 0a 20 20 20 20 20 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 73 ess.(/\d/)..........$stderr.puts
2f220 20 22 4e 6f 20 64 69 67 69 74 20 66 6f 75 6e 64 2e 22 20 20 20 23 20 77 72 69 74 65 73 20 74 6f ."No.digit.found."...#.writes.to
2f240 20 53 54 44 45 52 52 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 70 75 74 73 20 22 52 65 61 64 .STDERR......end......puts."Read
2f260 3a 20 23 7b 24 5f 7d 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 72 69 :.#{$_}"...................#.wri
2f280 74 65 73 20 74 6f 20 53 54 44 4f 55 54 0d 0a 65 6e 64 0d 0a 0d 0a 6c 6f 67 66 69 6c 65 20 3d 20 tes.to.STDOUT..end....logfile.=.
2f2a0 46 69 6c 65 2e 6e 65 77 28 22 2f 74 6d 70 2f 6c 6f 67 22 2c 20 22 77 22 29 0d 0a 0d 0a 6c 6f 67 File.new("/tmp/log",."w")....log
2f2c0 66 69 6c 65 2e 63 6c 6f 73 65 0d 0a 0d 0a 23 20 24 64 65 66 6f 75 74 20 28 6f 72 20 69 74 73 20 file.close....#.$defout.(or.its.
2f2e0 73 79 6e 6f 6e 79 6d 20 27 24 3e 27 29 20 69 73 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e synonym.'$>').is.the.destination
2f300 20 6f 66 20 6f 75 74 70 75 74 0d 0a 23 20 66 6f 72 20 4b 65 72 6e 65 6c 23 70 72 69 6e 74 2c 20 .of.output..#.for.Kernel#print,.
2f320 4b 65 72 6e 65 6c 23 70 75 74 73 2c 20 61 6e 64 20 66 61 6d 69 6c 79 20 66 75 6e 63 74 69 6f 6e Kernel#puts,.and.family.function
2f340 73 0d 0a 6c 6f 67 66 69 6c 65 20 3d 20 46 69 6c 65 2e 6e 65 77 28 22 6c 6f 67 2e 74 78 74 22 2c s..logfile.=.File.new("log.txt",
2f360 20 22 77 22 29 0d 0a 6f 6c 64 20 3d 20 24 64 65 66 6f 75 74 0d 0a 24 64 65 66 6f 75 74 20 3d 20 ."w")..old.=.$defout..$defout.=.
2f380 6c 6f 67 66 69 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 77 69 74 63 68 logfile.................#.switch
2f3a0 20 74 6f 20 6c 6f 67 66 69 6c 65 20 66 6f 72 20 6f 75 74 70 75 74 0d 0a 70 75 74 73 20 22 43 6f .to.logfile.for.output..puts."Co
2f3c0 75 6e 74 64 6f 77 6e 20 69 6e 69 74 69 61 74 65 64 20 2e 2e 2e 22 0d 0a 24 64 65 66 6f 75 74 20 untdown.initiated...."..$defout.
2f3e0 3d 20 6f 6c 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 72 65 74 75 =.old.....................#.retu
2f400 72 6e 20 74 6f 20 6f 72 69 67 69 6e 61 6c 20 6f 75 74 70 75 74 0d 0a 70 75 74 73 20 22 59 6f 75 rn.to.original.output..puts."You
2f420 20 68 61 76 65 20 33 30 20 73 65 63 6f 6e 64 73 20 74 6f 20 72 65 61 63 68 20 6d 69 6e 69 6d 75 .have.30.seconds.to.reach.minimu
2f440 6d 20 73 61 66 65 74 79 20 64 69 73 74 61 6e 63 65 2e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 m.safety.distance."......#.@@PLE
2f460 41 43 40 40 5f 37 2e 31 0d 0a 73 6f 75 72 63 65 20 3d 20 46 69 6c 65 2e 6e 65 77 28 70 61 74 68 AC@@_7.1..source.=.File.new(path
2f480 2c 20 22 72 22 29 20 20 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 66 6f 72 20 72 ,."r")..#.open.file."path".for.r
2f4a0 65 61 64 69 6e 67 20 6f 6e 6c 79 0d 0a 73 69 6e 6b 20 20 20 3d 20 46 69 6c 65 2e 6e 65 77 28 70 eading.only..sink...=.File.new(p
2f4c0 61 74 68 2c 20 22 77 22 29 20 20 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 66 6f ath,."w")..#.open.file."path".fo
2f4e0 72 20 77 72 69 74 69 6e 67 20 6f 6e 6c 79 0d 0a 0d 0a 73 6f 75 72 63 65 20 3d 20 46 69 6c 65 2e r.writing.only....source.=.File.
2f500 6f 70 65 6e 28 70 61 74 68 2c 20 46 69 6c 65 3a 3a 52 44 4f 4e 4c 59 29 20 20 23 20 6f 70 65 6e open(path,.File::RDONLY)..#.open
2f520 20 66 69 6c 65 20 22 70 61 74 68 22 20 66 6f 72 20 72 65 61 64 69 6e 67 20 6f 6e 6c 79 0d 0a 73 .file."path".for.reading.only..s
2f540 69 6e 6b 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 46 69 6c 65 3a 3a 57 52 ink...=.File.open(path,.File::WR
2f560 4f 4e 4c 59 29 20 20 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 66 6f 72 20 77 72 ONLY)..#.open.file."path".for.wr
2f580 69 74 69 6e 67 20 6f 6e 6c 79 0d 0a 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e iting.only....file...=.File.open
2f5a0 28 70 61 74 68 2c 20 22 72 2b 22 29 20 20 23 20 6f 70 65 6e 20 22 70 61 74 68 22 20 66 6f 72 20 (path,."r+")..#.open."path".for.
2f5c0 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 reading.and.writing..file...=.Fi
2f5e0 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 66 6c 61 67 73 29 20 23 20 6f 70 65 6e 20 22 70 61 74 le.open(path,.flags).#.open."pat
2f600 68 22 20 77 69 74 68 20 74 68 65 20 66 6c 61 67 73 20 22 66 6c 61 67 73 22 20 28 73 65 65 20 65 h".with.the.flags."flags".(see.e
2f620 78 61 6d 70 6c 65 73 20 62 65 6c 6f 77 20 66 6f 72 20 66 6c 61 67 73 29 0d 0a 0d 0a 23 20 6f 70 xamples.below.for.flags)....#.op
2f640 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 72 65 61 64 20 6f 6e 6c 79 0d 0a 66 69 6c 65 20 20 en.file."path".read.only..file..
2f660 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 22 72 22 29 0d 0a 66 69 6c 65 20 20 20 .=.File.open(path,."r")..file...
2f680 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 46 69 6c 65 3a 3a 52 44 4f 4e 4c 59 29 0d =.File.open(path,.File::RDONLY).
2f6a0 0a 0d 0a 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 77 72 69 74 65 20 6f 6e 6c 79 ...#.open.file."path".write.only
2f6c0 2c 20 63 72 65 61 74 65 20 69 74 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 ,.create.it.if.it.does.not.exist
2f6e0 0d 0a 23 20 74 72 75 6e 63 61 74 65 20 69 74 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 20 69 ..#.truncate.it.to.zero.length.i
2f700 66 20 69 74 20 65 78 69 73 74 73 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 f.it.exists..file...=.File.open(
2f720 70 61 74 68 2c 20 22 77 22 29 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 path,."w")..file...=.File.open(p
2f740 61 74 68 2c 20 46 69 6c 65 3a 3a 57 52 4f 4e 4c 59 7c 46 69 6c 65 3a 3a 54 52 55 4e 43 7c 46 69 ath,.File::WRONLY|File::TRUNC|Fi
2f760 6c 65 3a 3a 43 52 45 41 54 29 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 le::CREAT)..file...=.File.open(p
2f780 61 74 68 2c 20 46 69 6c 65 3a 3a 57 52 4f 4e 4c 59 7c 46 69 6c 65 3a 3a 54 52 55 4e 43 7c 46 69 ath,.File::WRONLY|File::TRUNC|Fi
2f7a0 6c 65 3a 3a 43 52 45 41 54 2c 20 30 36 36 36 29 20 20 23 20 77 69 74 68 20 70 65 72 6d 69 73 73 le::CREAT,.0666)..#.with.permiss
2f7c0 69 6f 6e 20 30 36 36 36 0d 0a 0d 0a 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 77 ion.0666....#.open.file."path".w
2f7e0 72 69 74 65 20 6f 6e 6c 79 2c 20 66 61 69 6c 73 20 69 66 20 66 69 6c 65 20 65 78 69 73 74 73 0d rite.only,.fails.if.file.exists.
2f800 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 46 69 6c 65 3a 3a .file...=.File.open(path,.File::
2f820 57 52 4f 4e 4c 59 7c 46 69 6c 65 3a 3a 45 58 43 4c 7c 46 69 6c 65 3a 3a 43 52 45 41 54 29 0d 0a WRONLY|File::EXCL|File::CREAT)..
2f840 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 46 69 6c 65 3a 3a 57 file...=.File.open(path,.File::W
2f860 52 4f 4e 4c 59 7c 46 69 6c 65 3a 3a 45 58 43 4c 7c 46 69 6c 65 3a 3a 43 52 45 41 54 2c 20 30 36 RONLY|File::EXCL|File::CREAT,.06
2f880 36 36 29 0d 0a 0d 0a 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 66 6f 72 20 61 70 66)....#.open.file."path".for.ap
2f8a0 70 65 6e 64 69 6e 67 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 pending..file...=.File.open(path
2f8c0 2c 20 22 61 22 29 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c ,."a")..file...=.File.open(path,
2f8e0 20 46 69 6c 65 3a 3a 57 52 4f 4e 4c 59 7c 46 69 6c 65 3a 3a 41 50 50 45 4e 44 7c 46 69 6c 65 3a .File::WRONLY|File::APPEND|File:
2f900 3a 43 52 45 41 54 29 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 :CREAT)..file...=.File.open(path
2f920 2c 20 46 69 6c 65 3a 3a 57 52 4f 4e 4c 59 7c 46 69 6c 65 3a 3a 41 50 50 45 4e 44 7c 46 69 6c 65 ,.File::WRONLY|File::APPEND|File
2f940 3a 3a 43 52 45 41 54 2c 20 30 36 36 36 29 0d 0a 0d 0a 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 ::CREAT,.0666)....#.open.file."p
2f960 61 74 68 22 20 66 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 6f 6e 6c 79 20 77 68 65 6e 20 66 69 6c ath".for.appending.only.when.fil
2f980 65 20 65 78 69 73 74 73 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 e.exists..file...=.File.open(pat
2f9a0 68 2c 20 46 69 6c 65 3a 3a 57 52 4f 4e 4c 59 7c 46 69 6c 65 3a 3a 41 50 50 45 4e 44 29 0d 0a 0d h,.File::WRONLY|File::APPEND)...
2f9c0 0a 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 20 66 6f 72 20 72 65 61 64 69 6e 67 20 .#.open.file."path".for.reading.
2f9e0 61 6e 64 20 77 72 69 74 69 6e 67 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 and.writing..file...=.File.open(
2fa00 70 61 74 68 2c 20 22 72 2b 22 29 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 path,."r+")..file...=.File.open(
2fa20 70 61 74 68 2c 20 46 69 6c 65 3a 3a 52 44 57 52 29 0d 0a 0d 0a 23 20 6f 70 65 6e 20 66 69 6c 65 path,.File::RDWR)....#.open.file
2fa40 20 66 6f 72 20 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 2c 20 63 72 65 61 74 65 .for.reading.and.writing,.create
2fa60 20 61 20 6e 65 77 20 66 69 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 .a.new.file.if.it.does.not.exist
2fa80 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 46 69 6c 65 3a ..file...=.File.open(path,.File:
2faa0 3a 52 44 57 52 7c 46 69 6c 65 3a 3a 43 52 45 41 54 29 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c :RDWR|File::CREAT)..file...=.Fil
2fac0 65 2e 6f 70 65 6e 28 70 61 74 68 2c 20 46 69 6c 65 3a 3a 52 44 57 52 7c 46 69 6c 65 3a 3a 43 52 e.open(path,.File::RDWR|File::CR
2fae0 45 41 54 2c 20 30 36 30 30 29 0d 0a 0d 0a 23 20 6f 70 65 6e 20 66 69 6c 65 20 22 70 61 74 68 22 EAT,.0600)....#.open.file."path"
2fb00 20 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 2c 20 66 61 69 6c 73 20 69 66 20 66 .reading.and.writing,.fails.if.f
2fb20 69 6c 65 20 65 78 69 73 74 73 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 ile.exists..file...=.File.open(p
2fb40 61 74 68 2c 20 46 69 6c 65 3a 3a 52 44 57 52 7c 46 69 6c 65 3a 3a 45 58 43 4c 7c 46 69 6c 65 3a ath,.File::RDWR|File::EXCL|File:
2fb60 3a 43 52 45 41 54 29 0d 0a 66 69 6c 65 20 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 70 61 74 68 :CREAT)..file...=.File.open(path
2fb80 2c 20 46 69 6c 65 3a 3a 52 44 57 52 7c 46 69 6c 65 3a 3a 45 58 43 4c 7c 46 69 6c 65 3a 3a 43 52 ,.File::RDWR|File::EXCL|File::CR
2fba0 45 41 54 2c 20 30 36 30 30 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 37 2e 32 0d EAT,.0600)......#.@@PLEAC@@_7.2.
2fbc0 0a 23 20 4e 6f 20 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 52 75 62 79 20 73 69 6e 63 65 20 74 68 .#.No.problem.with.Ruby.since.th
2fbe0 65 20 66 69 6c 65 6e 61 6d 65 20 64 6f 65 73 6e 27 74 20 63 6f 6e 74 61 69 6e 20 63 68 61 72 61 e.filename.doesn't.contain.chara
2fc00 63 74 65 72 73 20 77 69 74 68 0d 0a 23 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3b 20 6c cters.with..#.special.meaning;.l
2fc20 69 6b 65 20 50 65 72 6c 27 73 20 73 79 73 6f 70 65 6e 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 66 69 ike.Perl's.sysopen..File.open(fi
2fc40 6c 65 6e 61 6d 65 2c 20 27 72 27 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 37 2e lename,.'r')......#.@@PLEAC@@_7.
2fc60 33 0d 0a 46 69 6c 65 2e 65 78 70 61 6e 64 5f 70 61 74 68 28 27 7e 72 6f 6f 74 2f 74 6d 70 27 29 3..File.expand_path('~root/tmp')
2fc80 0d 0a 23 3d 3e 20 22 2f 72 6f 6f 74 2f 74 6d 70 22 0d 0a 46 69 6c 65 2e 65 78 70 61 6e 64 5f 70 ..#=>."/root/tmp"..File.expand_p
2fca0 61 74 68 28 27 7e 72 70 63 75 73 65 72 27 29 0d 0a 23 3d 3e 20 22 2f 76 61 72 2f 6c 69 62 2f 6e ath('~rpcuser')..#=>."/var/lib/n
2fcc0 66 73 22 0d 0a 0d 0a 23 20 54 6f 20 65 78 70 61 6e 64 20 7e 2f 2e 2e 20 69 74 20 65 78 70 6c 69 fs"....#.To.expand.~/...it.expli
2fce0 63 69 74 65 6c 79 20 6e 65 65 64 73 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 citely.needs.the.environment.var
2fd00 69 61 62 6c 65 20 48 4f 4d 45 0d 0a 46 69 6c 65 2e 65 78 70 61 6e 64 5f 70 61 74 68 28 27 7e 2f iable.HOME..File.expand_path('~/
2fd20 74 6d 70 27 29 0d 0a 23 3d 3e 20 22 2f 68 6f 6d 65 2f 67 63 2f 74 6d 70 22 0d 0a 0d 0a 0d 0a 23 tmp')..#=>."/home/gc/tmp"......#
2fd40 20 40 40 50 4c 45 41 43 40 40 5f 37 2e 34 0d 0a 23 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 .@@PLEAC@@_7.4..#.The.exception.
2fd60 72 61 69 73 65 64 20 69 6e 20 52 75 62 79 20 72 65 70 6f 72 74 73 20 74 68 65 20 66 69 6c 65 6e raised.in.Ruby.reports.the.filen
2fd80 61 6d 65 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 27 61 66 69 6c 65 27 29 0d 0a 0d 0a 0d 0a 23 20 40 ame..File.open('afile')......#.@
2fda0 40 50 4c 45 41 43 40 40 5f 37 2e 35 0d 0a 23 20 53 74 61 6e 64 61 72 64 20 52 75 62 79 20 64 69 @PLEAC@@_7.5..#.Standard.Ruby.di
2fdc0 73 74 72 69 62 75 74 69 6f 6e 20 70 72 6f 76 69 64 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e stribution.provides.the.followin
2fde0 67 20 75 73 65 66 75 6c 20 65 78 74 65 6e 73 69 6f 6e 0d 0a 72 65 71 75 69 72 65 20 27 74 65 6d g.useful.extension..require.'tem
2fe00 70 66 69 6c 65 27 0d 0a 23 20 57 69 74 68 20 74 68 65 20 54 65 6d 70 66 69 6c 65 20 63 6c 61 73 pfile'..#.With.the.Tempfile.clas
2fe20 73 2c 20 74 68 65 20 66 69 6c 65 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c s,.the.file.is.automatically.del
2fe40 65 74 65 64 20 6f 6e 20 67 61 72 62 61 67 65 0d 0a 23 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 73 eted.on.garbage..#.collection,.s
2fe60 6f 20 79 6f 75 20 77 6f 6e 27 74 20 6e 65 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 69 74 2c 20 6c o.you.won't.need.to.remove.it,.l
2fe80 61 74 65 72 20 6f 6e 2e 0d 0a 74 66 20 3d 20 54 65 6d 70 66 69 6c 65 2e 6e 65 77 28 27 74 6d 70 ater.on...tf.=.Tempfile.new('tmp
2fea0 27 29 20 20 20 23 20 61 20 6e 61 6d 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 63 72 65 ')...#.a.name.is.required.to.cre
2fec0 61 74 65 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 0d 0a 0d 0a 23 20 49 66 20 79 6f 75 20 6e 65 65 ate.the.filename....#.If.you.nee
2fee0 64 20 74 6f 20 70 61 73 73 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 74 6f 20 61 6e 20 65 78 74 d.to.pass.the.filename.to.an.ext
2ff00 65 72 6e 61 6c 20 70 72 6f 67 72 61 6d 20 79 6f 75 20 63 61 6e 20 75 73 65 0d 0a 23 20 46 69 6c ernal.program.you.can.use..#.Fil
2ff20 65 23 70 61 74 68 2c 20 62 75 74 20 64 6f 6e 27 74 20 66 6f 72 67 65 74 20 74 6f 20 46 69 6c 65 e#path,.but.don't.forget.to.File
2ff40 23 66 6c 75 73 68 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6c 75 73 68 20 61 6e 79 74 68 69 6e #flush.in.order.to.flush.anythin
2ff60 67 0d 0a 23 20 6c 69 76 69 6e 67 20 69 6e 20 73 6f 6d 65 20 62 75 66 66 65 72 20 73 6f 6d 65 77 g..#.living.in.some.buffer.somew
2ff80 68 65 72 65 2e 0d 0a 74 66 2e 66 6c 75 73 68 0d 0a 73 79 73 74 65 6d 28 22 2f 75 73 72 2f 62 69 here...tf.flush..system("/usr/bi
2ffa0 6e 2f 64 6f 77 68 61 74 65 76 65 72 20 23 7b 74 66 2e 70 61 74 68 7d 22 29 0d 0a 0d 0a 66 68 20 n/dowhatever.#{tf.path}")....fh.
2ffc0 3d 20 54 65 6d 70 66 69 6c 65 2e 6e 65 77 28 27 74 6d 70 27 29 0d 0a 66 68 2e 73 79 6e 63 20 3d =.Tempfile.new('tmp')..fh.sync.=
2ffe0 20 74 72 75 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 75 74 6f 66 6c 75 73 68 .true................#.autoflush
30000 65 73 0d 0a 31 30 2e 74 69 6d 65 73 20 7b 20 7c 69 7c 20 66 68 2e 70 75 74 73 20 69 20 7d 0d 0a es..10.times.{.|i|.fh.puts.i.}..
30020 66 68 2e 72 65 77 69 6e 64 0d 0a 70 75 74 73 20 27 54 6d 70 20 66 69 6c 65 20 68 61 73 3a 20 27 fh.rewind..puts.'Tmp.file.has:.'
30040 2c 20 66 68 2e 72 65 61 64 6c 69 6e 65 73 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f ,.fh.readlines......#.@@PLEAC@@_
30060 37 2e 36 0d 0a 77 68 69 6c 65 20 28 44 41 54 41 2e 67 65 74 73 29 20 64 6f 0d 0a 20 20 20 20 23 7.6..while.(DATA.gets).do......#
30080 20 70 72 6f 63 65 73 73 20 74 68 65 20 6c 69 6e 65 0d 0a 65 6e 64 0d 0a 5f 5f 45 4e 44 5f 5f 0d .process.the.line..end..__END__.
300a0 0a 23 20 79 6f 75 72 20 64 61 74 61 20 67 6f 65 73 20 68 65 72 65 0d 0a 23 20 5f 5f 44 41 54 41 .#.your.data.goes.here..#.__DATA
300c0 5f 5f 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 20 69 6e 20 52 75 62 79 0d 0a 0d 0a 23 43 4f 44 __.doesn't.exist.in.Ruby....#COD
300e0 45 0d 0a 23 20 67 65 74 20 69 6e 66 6f 20 61 62 6f 75 74 20 74 68 65 20 73 63 72 69 70 74 20 28 E..#.get.info.about.the.script.(
30100 73 69 7a 65 2c 20 64 61 74 65 20 6f 66 20 6c 61 73 74 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 29 size,.date.of.last.modification)
30120 0d 0a 6b 69 6c 6f 73 69 7a 65 20 3d 20 44 41 54 41 2e 73 74 61 74 2e 73 69 7a 65 20 2f 20 31 30 ..kilosize.=.DATA.stat.size./.10
30140 32 34 0d 0a 6c 61 73 74 5f 6d 6f 64 69 66 20 3d 20 44 41 54 41 2e 73 74 61 74 2e 6d 74 69 6d 65 24..last_modif.=.DATA.stat.mtime
30160 0d 0a 70 75 74 73 20 22 3c 50 3e 53 63 72 69 70 74 20 73 69 7a 65 20 69 73 20 23 7b 6b 69 6c 6f ..puts."<P>Script.size.is.#{kilo
30180 73 69 7a 65 7d 22 0d 0a 70 75 74 73 20 22 3c 50 3e 4c 61 73 74 20 73 63 72 69 70 74 20 75 70 64 size}"..puts."<P>Last.script.upd
301a0 61 74 65 3a 20 23 7b 6c 61 73 74 5f 6d 6f 64 69 66 7d 22 0d 0a 5f 5f 45 4e 44 5f 5f 0d 0a 23 20 ate:.#{last_modif}"..__END__..#.
301c0 44 4f 20 4e 4f 54 20 52 45 4d 4f 56 45 20 54 48 45 20 50 52 45 43 45 45 44 49 4e 47 20 4c 49 4e DO.NOT.REMOVE.THE.PRECEEDING.LIN
301e0 45 2e 0d 0a 23 20 45 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65 20 69 6e 20 74 68 69 73 20 66 69 E...#.Everything.else.in.this.fi
30200 6c 65 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 0d 0a 23 43 4f 44 45 0d 0a 0d 0a 0d 0a le.will.be.ignored...#CODE......
30220 23 20 40 40 50 4c 45 41 43 40 40 5f 37 2e 37 0d 0a 77 68 69 6c 65 20 6c 69 6e 65 20 3d 20 67 65 #.@@PLEAC@@_7.7..while.line.=.ge
30240 74 73 20 64 6f 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 6c ts.do......#.do.something.with.l
30260 69 6e 65 2e 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 20 6f 72 0d 0a 77 68 69 6c 65 20 67 65 74 73 20 64 ine...end....#..or..while.gets.d
30280 6f 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 24 5f 0d 0a 65 o......#.do.something.with.$_..e
302a0 6e 64 0d 0a 0d 0a 23 20 6f 72 20 6d 6f 72 65 20 72 75 62 79 69 73 68 0d 0a 24 73 74 64 75 6e 2e nd....#.or.more.rubyish..$stdun.
302c0 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 23 20 64 6f 20 73 74 75 66 66 20 77 each.do.|line|......#.do.stuff.w
302e0 69 74 68 20 6c 69 6e 65 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 41 52 47 46 20 6d 61 79 20 6d 61 ith.line..end......#.ARGF.may.ma
30300 6b 65 73 20 74 68 69 73 20 6d 6f 72 65 20 65 61 73 79 0d 0a 23 20 74 68 69 73 20 69 73 20 73 6b kes.this.more.easy..#.this.is.sk
30320 69 70 70 65 64 20 69 66 20 41 52 47 56 2e 73 69 7a 65 3d 3d 30 0d 0a 41 52 47 56 2e 65 61 63 68 ipped.if.ARGV.size==0..ARGV.each
30340 20 64 6f 20 7c 66 69 6c 65 6e 61 6d 65 7c 0d 0a 20 20 20 20 23 20 63 6c 6f 73 69 6e 67 20 61 6e .do.|filename|......#.closing.an
30360 64 20 65 78 63 65 70 74 69 6f 6e 20 68 61 6e 64 6c 69 6e 67 20 61 72 65 20 64 6f 6e 65 20 62 79 d.exception.handling.are.done.by
30380 20 74 68 65 20 62 6c 6f 63 6b 0d 0a 20 20 20 20 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 29 20 64 .the.block......open(filename).d
303a0 6f 20 7c 66 64 7c 0d 0a 20 20 20 20 20 20 20 20 66 64 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 o.|fd|..........fd.each.do.|line
303c0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 64 6f 20 73 74 75 66 66 20 77 69 74 68 20 6c |..............#.do.stuff.with.l
303e0 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 20 72 65 73 63 75 65 ine..........end......end.rescue
30400 20 61 62 6f 72 74 28 22 63 61 6e 27 74 20 6f 70 65 6e 20 25 73 22 20 25 20 66 69 6c 65 6e 61 6d .abort("can't.open.%s".%.filenam
30420 65 29 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 67 6c 6f 62 62 69 6e 67 20 69 73 20 64 6f 6e 65 20 69 6e e)..end....#.globbing.is.done.in
30440 20 74 68 65 20 44 69 72 20 6d 6f 64 75 6c 65 0d 0a 41 52 47 56 20 3d 20 44 69 72 5b 22 2a 2e 5b .the.Dir.module..ARGV.=.Dir["*.[
30460 43 63 68 5d 22 5d 20 69 66 20 41 52 47 56 2e 65 6d 70 74 79 3f 0d 0a 0d 0a 23 20 6e 6f 74 65 3a Cch]"].if.ARGV.empty?....#.note:
30480 20 6f 70 74 70 61 72 73 65 20 69 73 20 74 68 65 20 70 72 65 66 65 72 72 65 64 20 77 61 79 20 74 .optparse.is.the.preferred.way.t
304a0 6f 20 68 61 6e 64 6c 65 20 74 68 69 73 0d 0a 69 66 20 28 41 52 47 56 5b 30 5d 20 3d 3d 20 27 2d o.handle.this..if.(ARGV[0].==.'-
304c0 63 27 29 0d 0a 20 20 20 20 63 68 6f 70 5f 66 69 72 73 74 20 2b 3d 20 31 0d 0a 20 20 20 20 41 52 c')......chop_first.+=.1......AR
304e0 47 56 2e 73 68 69 66 74 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 70 72 6f 63 65 73 73 69 6e 67 20 GV.shift..end......#.processing.
30500 6e 75 6d 65 72 69 63 61 6c 20 6f 70 74 69 6f 6e 73 0d 0a 69 66 20 41 52 47 56 5b 30 5d 20 3d 7e numerical.options..if.ARGV[0].=~
30520 20 2f 5e 2d 28 5c 64 2b 29 24 2f 0d 0a 20 20 20 20 63 6f 6c 75 6d 6e 73 20 3d 20 24 31 0d 0a 20 ./^-(\d+)$/......columns.=.$1...
30540 20 20 20 41 52 47 56 2e 73 68 69 66 74 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 61 67 61 69 6e 2c 20 62 ...ARGV.shift..end....#.again,.b
30560 65 74 74 65 72 20 74 6f 20 75 73 65 20 6f 70 74 70 61 72 73 65 3a 0d 0a 72 65 71 75 69 72 65 20 etter.to.use.optparse:..require.
30580 27 6f 70 74 70 61 72 73 65 27 0d 0a 6e 6f 73 74 64 6f 75 74 20 3d 20 30 0d 0a 61 70 70 65 6e 64 'optparse'..nostdout.=.0..append
305a0 20 3d 20 30 0d 0a 75 6e 62 75 66 66 65 72 20 3d 20 30 0d 0a 69 67 6e 6f 72 65 5f 69 6e 74 73 20 .=.0..unbuffer.=.0..ignore_ints.
305c0 3d 20 30 0d 0a 41 52 47 56 2e 6f 70 74 69 6f 6e 73 20 64 6f 20 7c 6f 70 74 7c 0d 0a 20 20 20 20 =.0..ARGV.options.do.|opt|......
305e0 6f 70 74 2e 6f 6e 28 27 2d 6e 27 29 20 7b 20 6e 6f 73 74 64 6f 75 74 20 2b 3d 31 20 7d 0d 0a 20 opt.on('-n').{.nostdout.+=1.}...
30600 20 20 20 6f 70 74 2e 6f 6e 28 27 2d 61 27 29 20 7b 20 61 70 70 65 6e 64 20 20 20 2b 3d 31 20 7d ...opt.on('-a').{.append...+=1.}
30620 0d 0a 20 20 20 20 6f 70 74 2e 6f 6e 28 27 2d 75 27 29 20 7b 20 75 6e 62 75 66 66 65 72 20 2b 3d ......opt.on('-u').{.unbuffer.+=
30640 31 20 7d 0d 0a 20 20 20 20 6f 70 74 2e 6f 6e 28 27 2d 69 27 29 20 7b 20 69 67 6e 6f 72 65 5f 69 1.}......opt.on('-i').{.ignore_i
30660 6e 74 73 20 2b 3d 31 20 7d 0d 0a 20 20 20 20 6f 70 74 2e 70 61 72 73 65 21 0d 0a 65 6e 64 20 6f nts.+=1.}......opt.parse!..end.o
30680 72 20 61 62 6f 72 74 28 22 75 73 61 67 65 3a 20 22 20 2b 20 5f 5f 46 49 4c 45 5f 5f 20 2b 20 22 r.abort("usage:.".+.__FILE__.+."
306a0 20 5b 2d 61 69 6e 75 5d 20 5b 66 69 6c 65 6e 61 6d 65 73 5d 22 29 0d 0a 0d 0a 23 20 6e 6f 20 6e .[-ainu].[filenames]")....#.no.n
306c0 65 65 64 20 74 6f 20 64 6f 20 75 6e 64 65 66 20 24 2f 2c 20 77 65 20 68 61 76 65 20 46 69 6c 65 eed.to.do.undef.$/,.we.have.File
306e0 2e 72 65 61 64 0d 0a 73 74 72 20 3d 20 46 69 6c 65 2e 72 65 61 64 28 41 52 47 56 5b 30 5d 29 0d .read..str.=.File.read(ARGV[0]).
30700 0a 0d 0a 23 20 61 67 61 69 6e 20 77 65 20 68 61 76 65 20 46 69 6c 65 2e 72 65 61 64 0d 0a 73 74 ...#.again.we.have.File.read..st
30720 72 20 3d 20 46 69 6c 65 2e 72 65 61 64 28 41 52 47 56 5b 30 5d 29 0d 0a 0d 0a 23 20 6e 6f 74 20 r.=.File.read(ARGV[0])....#.not.
30740 73 75 72 65 20 77 68 61 74 20 74 68 69 73 20 73 68 6f 75 6c 64 20 64 6f 3a 0d 0a 23 20 49 20 62 sure.what.this.should.do:..#.I.b
30760 65 6c 69 65 76 65 20 6f 70 65 6e 20 74 68 65 20 66 69 6c 65 2c 20 70 72 69 6e 74 20 66 69 6c 65 elieve.open.the.file,.print.file
30780 6e 61 6d 65 2c 20 6c 69 6e 65 6e 6f 20 61 6e 64 20 6c 69 6e 65 3a 0d 0a 41 52 47 46 2e 65 61 63 name,.lineno.and.line:..ARGF.eac
307a0 68 5f 77 69 74 68 5f 69 6e 64 65 78 20 64 6f 20 7c 6c 69 6e 65 2c 20 69 64 78 7c 0d 0a 20 20 20 h_with_index.do.|line,.idx|.....
307c0 20 70 72 69 6e 74 20 41 52 47 46 2e 66 69 6c 65 6e 61 6d 65 2c 20 22 3a 22 2c 20 69 64 78 2c 20 .print.ARGF.filename,.":",.idx,.
307e0 22 3b 22 2c 20 6c 69 6e 65 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 70 72 69 6e 74 20 61 6c 6c 20 74 68 ";",.line..end....#.print.all.th
30800 65 20 6c 69 6e 65 73 20 69 6e 20 65 76 65 72 79 20 66 69 6c 65 20 70 61 73 73 65 64 20 76 69 61 e.lines.in.every.file.passed.via
30820 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6c 6f 67 69 .command.line.that.contains.logi
30840 6e 0d 0a 41 52 47 46 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 70 75 74 73 n..ARGF.each.do.|line|......puts
30860 20 6c 69 6e 65 20 69 66 20 6c 69 6e 65 20 3d 7e 20 2f 6c 6f 67 69 6e 2f 0d 0a 65 6e 64 0d 0a 23 .line.if.line.=~./login/..end..#
30880 0d 0a 23 20 65 76 65 6e 20 74 68 69 73 20 77 6f 75 6c 64 20 66 69 74 0d 0a 23 25 72 75 62 79 20 ..#.even.this.would.fit..#%ruby.
308a0 2d 6e 65 20 22 70 72 69 6e 74 20 69 66 20 2f 66 2f 22 20 32 2e 6c 6f 67 0d 0a 23 0d 0a 0d 0a 41 -ne."print.if./f/".2.log..#....A
308c0 52 47 46 2e 65 61 63 68 20 7b 20 7c 6c 7c 20 70 75 74 73 20 6c 2e 64 6f 77 6e 63 61 73 65 21 20 RGF.each.{.|l|.puts.l.downcase!.
308e0 7d 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 }....#------------------..#!/usr
30900 2f 62 69 6e 2f 72 75 62 79 20 2d 70 0d 0a 23 20 6a 75 73 74 20 6c 69 6b 65 20 70 65 72 6c 27 73 /bin/ruby.-p..#.just.like.perl's
30920 20 2d 70 0d 0a 24 5f 2e 64 6f 77 6e 63 61 73 65 21 0d 0a 23 0d 0a 0d 0a 23 20 49 20 64 6f 6e 27 .-p..$_.downcase!..#....#.I.don'
30940 74 20 6b 6e 6f 77 20 77 68 6f 20 73 68 6f 75 6c 64 20 49 20 74 72 75 73 74 2e 0d 0a 23 20 70 65 t.know.who.should.I.trust...#.pe
30960 72 6c 27 73 20 76 65 72 73 69 6f 6e 20 73 70 6c 69 74 73 20 6f 6e 20 5c 77 2b 20 77 68 69 6c 65 rl's.version.splits.on.\w+.while
30980 20 70 79 74 68 6f 6e 27 73 20 6f 6e 20 5c 77 2e 0d 0a 0d 0a 63 68 75 6e 6b 73 20 3d 20 30 0d 0a .python's.on.\w.....chunks.=.0..
309a0 0d 0a 46 69 6c 65 2e 72 65 61 64 28 41 52 47 56 5b 30 5d 29 2e 73 70 6c 69 74 2e 65 61 63 68 20 ..File.read(ARGV[0]).split.each.
309c0 64 6f 20 7c 77 6f 72 64 7c 0d 0a 20 20 20 20 6e 65 78 74 20 69 66 20 77 6f 72 64 20 3d 7e 20 2f do.|word|......next.if.word.=~./
309e0 5e 23 2f 0d 0a 20 20 20 20 62 72 65 61 6b 20 69 66 20 5b 22 5f 5f 44 41 54 41 5f 5f 22 2c 20 22 ^#/......break.if.["__DATA__",."
30a00 5f 5f 45 4e 44 5f 5f 22 5d 2e 6d 65 6d 62 65 72 3f 20 77 6f 72 64 0d 0a 20 20 20 20 63 68 75 6e __END__"].member?.word......chun
30a20 6b 73 20 2b 3d 20 31 0d 0a 65 6e 64 0d 0a 0d 0a 70 72 69 6e 74 20 22 46 6f 75 6e 64 20 22 2c 20 ks.+=.1..end....print."Found.",.
30a40 63 68 75 6e 6b 73 2c 20 22 20 63 68 75 6e 6b 73 5c 6e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 chunks,.".chunks\n"......#.@@PLE
30a60 41 43 40 40 5f 37 2e 38 0d 0a 6f 6c 64 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 6f 6c 64 5f 66 69 AC@@_7.8..old.=.File.open(old_fi
30a80 6c 65 29 0d 0a 6e 65 77 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 6e 65 77 5f 66 69 6c 65 2c 20 22 le)..new.=.File.open(new_file,."
30aa0 77 22 29 0d 0a 77 68 69 6c 65 20 6f 6c 64 2e 67 65 74 73 20 64 6f 0d 0a 20 20 20 20 23 20 63 68 w")..while.old.gets.do......#.ch
30ac0 61 6e 67 65 20 24 5f 2c 20 74 68 65 6e 2e 2e 2e 0d 0a 20 20 20 20 6e 65 77 2e 70 72 69 6e 74 20 ange.$_,.then.........new.print.
30ae0 24 5f 0d 0a 65 6e 64 0d 0a 6f 6c 64 2e 63 6c 6f 73 65 0d 0a 6e 65 77 2e 63 6c 6f 73 65 0d 0a 46 $_..end..old.close..new.close..F
30b00 69 6c 65 2e 72 65 6e 61 6d 65 28 6f 6c 64 5f 66 69 6c 65 2c 20 22 6f 6c 64 2e 6f 72 69 67 22 29 ile.rename(old_file,."old.orig")
30b20 0d 0a 46 69 6c 65 2e 72 65 6e 61 6d 65 28 6e 65 77 5f 66 69 6c 65 2c 20 6f 6c 64 5f 66 69 6c 65 ..File.rename(new_file,.old_file
30b40 29 0d 0a 0d 0a 77 68 69 6c 65 20 6f 6c 64 2e 67 65 74 73 20 64 6f 0d 0a 20 20 20 20 69 66 20 24 )....while.old.gets.do......if.$
30b60 2e 20 3d 3d 20 32 30 20 74 68 65 6e 20 23 20 77 65 20 61 72 65 20 61 74 20 74 68 65 20 32 30 74 ..==.20.then.#.we.are.at.the.20t
30b80 68 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 6e 65 77 2e 70 75 74 73 20 22 45 78 74 72 61 20 h.line..........new.puts."Extra.
30ba0 6c 69 6e 65 20 31 22 0d 0a 20 20 20 20 20 20 20 20 6e 65 77 2e 70 75 74 73 20 22 45 78 74 72 61 line.1"..........new.puts."Extra
30bc0 20 6c 69 6e 65 20 32 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 6e 65 77 2e 70 72 69 6e 74 .line.2"......end......new.print
30be0 20 24 5f 0d 0a 65 6e 64 0d 0a 0d 0a 77 68 69 6c 65 20 6f 6c 64 2e 67 65 74 73 20 64 6f 0d 0a 20 .$_..end....while.old.gets.do...
30c00 20 20 20 6e 65 78 74 20 69 66 20 32 30 2e 2e 33 30 20 23 20 73 6b 69 70 20 74 68 65 20 32 30 74 ...next.if.20..30.#.skip.the.20t
30c20 68 20 6c 69 6e 65 20 74 6f 20 74 68 65 20 33 30 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 h.line.to.the.30th..............
30c40 20 20 20 20 20 20 20 23 20 52 75 62 79 20 28 61 6e 64 20 50 65 72 6c 29 20 70 65 72 6d 69 74 20 .......#.Ruby.(and.Perl).permit.
30c60 74 6f 20 77 72 69 74 65 20 69 66 20 32 30 2e 2e 33 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 to.write.if.20..30..............
30c80 20 20 20 20 20 20 20 23 20 69 6e 73 74 65 61 64 20 6f 66 20 69 66 20 28 32 30 20 3c 3d 20 24 2e .......#.instead.of.if.(20.<=.$.
30ca0 29 20 61 6e 64 20 28 24 2e 20 3c 3d 20 33 30 29 0d 0a 20 20 20 20 6e 65 77 2e 70 72 69 6e 74 20 ).and.($..<=.30)......new.print.
30cc0 24 5f 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 37 2e 39 0d 0a 23 25 $_..end......#.@@PLEAC@@_7.9..#%
30ce0 20 72 75 62 79 20 2d 69 2e 6f 72 69 67 20 2d 70 65 20 27 46 49 4c 54 45 52 20 43 4f 4d 4d 41 4e .ruby.-i.orig.-pe.'FILTER.COMMAN
30d00 44 27 20 66 69 6c 65 31 20 66 69 6c 65 32 20 66 69 6c 65 33 20 2e 2e 2e 0d 0a 23 0d 0a 23 2d 2d D'.file1.file2.file3......#..#--
30d20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 23 21 ---------------------------..##!
30d40 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 69 2e 6f 72 69 67 20 2d 70 0d 0a 23 20 66 69 6c 74 /usr/bin/ruby.-i.orig.-p..#.filt
30d60 65 72 20 63 6f 6d 6d 61 6e 64 73 20 67 6f 20 68 65 72 65 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d er.commands.go.here..#----------
30d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 23 25 20 72 75 62 79 20 2d -------------------....#%.ruby.-
30da0 70 69 2e 6f 72 69 67 20 2d 65 20 27 67 73 75 62 21 28 2f 44 41 54 45 2f 29 7b 54 69 6d 65 2e 6e pi.orig.-e.'gsub!(/DATE/){Time.n
30dc0 6f 77 29 27 0d 0a 0d 0a 23 20 65 66 66 65 63 74 69 76 65 6c 79 20 62 65 63 6f 6d 65 73 3a 0d 0a ow)'....#.effectively.becomes:..
30de0 41 52 47 56 20 3c 3c 20 27 49 27 0d 0a 6f 6c 64 66 69 6c 65 20 3d 20 22 22 0d 0a 77 68 69 6c 65 ARGV.<<.'I'..oldfile.=.""..while
30e00 20 67 65 74 73 0d 0a 20 20 20 20 69 66 20 41 52 47 46 2e 66 69 6c 65 6e 61 6d 65 20 21 3d 20 6f .gets......if.ARGF.filename.!=.o
30e20 6c 64 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 6e 65 77 66 69 6c 65 20 3d 20 41 52 47 46 2e 66 ldfile..........newfile.=.ARGF.f
30e40 69 6c 65 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 46 69 6c 65 2e 72 65 6e 61 6d 65 28 6e 65 77 ilename..........File.rename(new
30e60 66 69 6c 65 2c 20 6e 65 77 66 69 6c 65 20 2b 20 22 2e 6f 72 69 67 22 29 0d 0a 20 20 20 20 20 20 file,.newfile.+.".orig")........
30e80 20 20 24 73 74 64 6f 75 74 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 6e 65 77 66 69 6c 65 2c 27 77 ..$stdout.=.File.open(newfile,'w
30ea0 27 29 0d 0a 20 20 20 20 20 20 20 20 6f 6c 64 66 69 6c 65 20 3d 20 6e 65 77 66 69 6c 65 0d 0a 20 ')..........oldfile.=.newfile...
30ec0 20 20 20 65 6e 64 0d 0a 20 20 20 20 67 73 75 62 21 28 2f 44 41 54 45 2f 29 7b 54 69 6d 65 2e 6e ...end......gsub!(/DATE/){Time.n
30ee0 6f 77 7d 0d 0a 20 20 20 20 70 72 69 6e 74 0d 0a 65 6e 64 0d 0a 24 73 74 64 6f 75 74 20 3d 20 53 ow}......print..end..$stdout.=.S
30f00 54 44 4f 55 54 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d TDOUT..#------------------------
30f20 2d 2d 2d 2d 2d 0d 0a 23 25 20 72 75 62 79 20 2d 69 2e 6f 6c 64 20 2d 70 65 20 27 67 73 75 62 21 -----..#%.ruby.-i.old.-pe.'gsub!
30f40 28 25 72 7b 5c 62 68 69 73 76 61 72 5c 62 7d 2c 20 27 68 65 72 76 61 72 27 29 27 20 2a 2e 5b 43 (%r{\bhisvar\b},.'hervar')'.*.[C
30f60 63 68 79 5d 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d chy]....#-----------------------
30f80 2d 2d 2d 2d 2d 2d 0d 0a 23 20 73 65 74 20 75 70 20 74 6f 20 69 74 65 72 61 74 65 20 6f 76 65 72 ------..#.set.up.to.iterate.over
30fa0 20 74 68 65 20 2a 2e 63 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 .the.*.c.files.in.the.current.di
30fc0 72 65 63 74 6f 72 79 2c 0d 0a 23 20 65 64 69 74 69 6e 67 20 69 6e 20 70 6c 61 63 65 20 61 6e 64 rectory,..#.editing.in.place.and
30fe0 20 73 61 76 69 6e 67 20 74 68 65 20 6f 6c 64 20 66 69 6c 65 20 77 69 74 68 20 61 20 2e 6f 72 69 .saving.the.old.file.with.a..ori
31000 67 20 65 78 74 65 6e 73 69 6f 6e 0d 0a 24 2d 69 20 3d 20 27 2e 6f 72 69 67 27 20 20 20 20 20 20 g.extension..$-i.=.'.orig'......
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 65 74 20 75 70 20 2d 69 20 6d 6f 64 .................#.set.up.-i.mod
31040 65 0d 0a 41 52 47 56 2e 72 65 70 6c 61 63 65 28 44 69 72 5b 27 2a 2e 5b 43 63 68 79 5d 27 5d 29 e..ARGV.replace(Dir['*.[Cchy]'])
31060 0d 0a 77 68 69 6c 65 20 67 65 74 73 0d 0a 20 20 20 20 69 66 20 24 2e 20 3d 3d 20 31 0d 0a 20 20 ..while.gets......if.$..==.1....
31080 20 20 20 20 20 20 70 72 69 6e 74 20 22 54 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 70 ......print."This.line.should.ap
310a0 70 65 61 72 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 65 61 63 68 20 66 69 6c 65 5c 6e 22 0d pear.at.the.top.of.each.file\n".
310c0 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 67 73 75 62 21 28 2f 5c 62 28 70 29 65 61 72 6c 5c 62 .....end......gsub!(/\b(p)earl\b
310e0 2f 69 2c 20 27 5c 31 65 72 6c 27 29 20 20 20 20 23 20 43 6f 72 72 65 63 74 20 74 79 70 6f 73 2c /i,.'\1erl')....#.Correct.typos,
31100 20 70 72 65 73 65 72 76 69 6e 67 20 63 61 73 65 0d 0a 20 20 20 20 70 72 69 6e 74 0d 0a 20 20 20 .preserving.case......print.....
31120 20 41 52 47 46 2e 63 6c 6f 73 65 20 69 66 20 41 52 47 46 2e 65 6f 66 0d 0a 65 6e 64 0d 0a 0d 0a .ARGF.close.if.ARGF.eof..end....
31140 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 37 2e 31 30 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 27 69 ..#.@@PLEAC@@_7.10..File.open('i
31160 74 65 73 74 27 2c 20 27 72 2b 27 29 20 64 6f 20 7c 66 7c 20 20 20 23 20 6f 70 65 6e 20 66 69 6c test',.'r+').do.|f|...#.open.fil
31180 65 20 66 6f 72 20 75 70 64 61 74 65 0d 0a 20 20 20 20 6c 69 6e 65 73 20 3d 20 66 2e 72 65 61 64 e.for.update......lines.=.f.read
311a0 6c 69 6e 65 73 20 20 20 20 20 20 20 20 20 20 20 23 20 72 65 61 64 20 69 6e 74 6f 20 61 72 72 61 lines...........#.read.into.arra
311c0 79 20 6f 66 20 6c 69 6e 65 73 0d 0a 20 20 20 20 6c 69 6e 65 73 2e 65 61 63 68 20 64 6f 20 7c 69 y.of.lines......lines.each.do.|i
311e0 74 7c 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6d 6f 64 69 66 79 20 6c 69 6e 65 73 0d 0a 20 20 t|............#.modify.lines....
31200 20 20 20 20 20 20 69 74 2e 67 73 75 62 21 28 2f 66 6f 6f 2f 2c 20 27 51 51 51 27 29 0d 0a 20 20 ......it.gsub!(/foo/,.'QQQ')....
31220 20 20 65 6e 64 0d 0a 20 20 20 20 66 2e 70 6f 73 20 3d 20 30 20 20 20 20 20 20 20 20 20 20 20 20 ..end......f.pos.=.0............
31240 20 20 20 20 20 20 20 20 20 23 20 62 61 63 6b 20 74 6f 20 73 74 61 72 74 0d 0a 20 20 20 20 66 2e .........#.back.to.start......f.
31260 70 72 69 6e 74 20 6c 69 6e 65 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 72 print.lines.................#.wr
31280 69 74 65 20 6f 75 74 20 6d 6f 64 69 66 69 65 64 20 6c 69 6e 65 73 0d 0a 20 20 20 20 66 2e 74 72 ite.out.modified.lines......f.tr
312a0 75 6e 63 61 74 65 28 66 2e 70 6f 73 29 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 72 75 6e uncate(f.pos).............#.trun
312c0 63 61 74 65 20 74 6f 20 6e 65 77 20 6c 65 6e 67 74 68 0d 0a 65 6e 64 20 20 20 20 20 20 20 20 20 cate.to.new.length..end.........
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 66 69 6c 65 20 69 73 20 ......................#.file.is.
31300 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6c 6f 73 65 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d automatically.closed..#---------
31320 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 --------------------..File.open(
31340 27 69 74 65 73 74 27 2c 20 27 72 2b 27 29 20 64 6f 20 7c 66 7c 0d 0a 20 20 20 20 6f 75 74 20 3d 'itest',.'r+').do.|f|......out.=
31360 20 22 22 0d 0a 20 20 20 20 66 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 20 .""......f.each.do.|line|.......
31380 20 20 20 6f 75 74 20 3c 3c 20 6c 69 6e 65 2e 67 73 75 62 28 2f 44 41 54 45 2f 29 20 7b 54 69 6d ...out.<<.line.gsub(/DATE/).{Tim
313a0 65 2e 6e 6f 77 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 66 2e 70 6f 73 20 3d 20 30 0d 0a e.now}......end......f.pos.=.0..
313c0 20 20 20 20 66 2e 70 72 69 6e 74 20 6f 75 74 0d 0a 20 20 20 20 66 2e 74 72 75 6e 63 61 74 65 28 ....f.print.out......f.truncate(
313e0 66 2e 70 6f 73 29 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 37 2e 31 31 0d f.pos)..end....#.@@PLEAC@@_7.11.
31400 0a 46 69 6c 65 2e 6f 70 65 6e 28 27 69 6e 66 69 6c 65 27 2c 20 27 72 2b 27 29 20 64 6f 20 7c 66 .File.open('infile',.'r+').do.|f
31420 7c 0d 0a 20 20 20 20 66 2e 66 6c 6f 63 6b 20 46 69 6c 65 3a 3a 4c 4f 43 4b 5f 45 58 0d 0a 20 20 |......f.flock.File::LOCK_EX....
31440 20 20 23 20 75 70 64 61 74 65 20 66 69 6c 65 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#.update.file..end..#---------
31460 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 46 69 6c 65 3a 3a 4c 4f 43 4b --------------------..File::LOCK
31480 5f 53 48 20 20 20 20 20 23 20 73 68 61 72 65 64 20 6c 6f 63 6b 20 28 66 6f 72 20 72 65 61 64 69 _SH.....#.shared.lock.(for.readi
314a0 6e 67 29 0d 0a 46 69 6c 65 3a 3a 4c 4f 43 4b 5f 45 58 20 20 20 20 20 23 20 65 78 63 6c 75 73 69 ng)..File::LOCK_EX.....#.exclusi
314c0 76 65 20 6c 6f 63 6b 20 28 66 6f 72 20 77 72 69 74 69 6e 67 29 0d 0a 46 69 6c 65 3a 3a 4c 4f 43 ve.lock.(for.writing)..File::LOC
314e0 4b 5f 4e 42 20 20 20 20 20 23 20 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 72 65 71 75 65 73 74 0d K_NB.....#.non-blocking.request.
31500 0a 46 69 6c 65 3a 3a 4c 4f 43 4b 5f 55 4e 20 20 20 20 20 23 20 66 72 65 65 20 6c 6f 63 6b 0d 0a .File::LOCK_UN.....#.free.lock..
31520 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a #-----------------------------..
31540 75 6e 6c 65 73 73 20 66 2e 66 6c 6f 63 6b 20 46 69 6c 65 3a 3a 4c 4f 43 4b 5f 45 58 20 7c 20 46 unless.f.flock.File::LOCK_EX.|.F
31560 69 6c 65 3a 3a 4c 4f 43 4b 5f 4e 42 0d 0a 20 20 20 20 77 61 72 6e 20 22 63 61 6e 27 74 20 67 65 ile::LOCK_NB......warn."can't.ge
31580 74 20 69 6d 6d 65 64 69 61 74 65 20 6c 6f 63 6b 3a 20 62 6c 6f 63 6b 69 6e 67 20 2e 2e 2e 22 0d t.immediate.lock:.blocking....".
315a0 0a 20 20 20 20 66 2e 66 6c 6f 63 6b 20 46 69 6c 65 3a 3a 4c 4f 43 4b 5f 45 58 0d 0a 65 6e 64 0d .....f.flock.File::LOCK_EX..end.
315c0 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d .#-----------------------------.
315e0 0a 46 69 6c 65 2e 6f 70 65 6e 28 27 6e 75 6d 66 69 6c 65 27 2c 20 46 69 6c 65 3a 3a 52 44 57 52 .File.open('numfile',.File::RDWR
31600 7c 46 69 6c 65 3a 3a 43 52 45 41 54 29 20 64 6f 20 7c 66 7c 0d 0a 20 20 20 20 66 2e 66 6c 6f 63 |File::CREAT).do.|f|......f.floc
31620 6b 28 46 69 6c 65 3a 3a 4c 4f 43 4b 5f 45 58 29 0d 0a 20 20 20 20 6e 75 6d 20 3d 20 66 2e 67 65 k(File::LOCK_EX)......num.=.f.ge
31640 74 73 2e 74 6f 5f 69 20 7c 7c 20 30 0d 0a 20 20 20 20 66 2e 70 6f 73 20 3d 20 30 0d 0a 20 20 20 ts.to_i.||.0......f.pos.=.0.....
31660 20 66 2e 74 72 75 6e 63 61 74 65 20 30 0d 0a 20 20 20 20 66 2e 70 75 74 73 20 6e 75 6d 20 2b 20 .f.truncate.0......f.puts.num.+.
31680 31 71 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 37 2e 31 32 0d 0a 6f 1q..end......#.@@PLEAC@@_7.12..o
316a0 75 74 70 75 74 5f 68 61 6e 64 6c 65 2e 73 79 6e 63 20 3d 20 74 72 75 65 0d 0a 23 20 50 6c 65 61 utput_handle.sync.=.true..#.Plea
316c0 73 65 20 6e 6f 74 65 20 74 68 61 74 20 6c 69 6b 65 20 69 6e 20 50 65 72 6c 2c 20 24 73 74 64 65 se.note.that.like.in.Perl,.$stde
316e0 72 72 20 69 73 20 61 6c 72 65 61 64 79 20 75 6e 62 75 66 66 65 72 65 64 0d 0a 23 2d 2d 2d 2d 2d rr.is.already.unbuffered..#-----
31700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 ------------------------..#!/usr
31720 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 73 65 65 6d 65 20 2d 20 64 65 6d 6f 20 73 74 64 /bin/ruby.-w..#.seeme.-.demo.std
31740 69 6f 20 6f 75 74 70 75 74 20 62 75 66 66 65 72 69 6e 67 0d 0a 24 73 74 64 6f 75 74 2e 73 79 6e io.output.buffering..$stdout.syn
31760 63 20 3d 20 41 52 47 56 2e 73 69 7a 65 20 3e 20 30 0d 0a 70 72 69 6e 74 20 22 4e 6f 77 20 79 6f c.=.ARGV.size.>.0..print."Now.yo
31780 75 20 64 6f 6e 27 74 20 73 65 65 20 69 74 2e 2e 2e 22 0d 0a 73 6c 65 65 70 20 32 0d 0a 70 75 74 u.don't.see.it..."..sleep.2..put
317a0 73 20 22 6e 6f 77 20 79 6f 75 20 64 6f 22 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d s."now.you.do"..#---------------
317c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 24 73 74 64 65 72 72 2e 73 79 6e 63 20 3d 20 74 --------------..$stderr.sync.=.t
317e0 72 75 65 0d 0a 61 66 69 6c 65 2e 73 79 6e 63 20 3d 20 66 61 6c 73 65 0d 0a 23 2d 2d 2d 2d 2d 2d rue..afile.sync.=.false..#------
31800 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 61 73 73 75 6d -----------------------..#.assum
31820 65 20 27 72 65 6d 6f 74 65 5f 63 6f 6e 27 20 69 73 20 61 6e 20 69 6e 74 65 72 61 63 74 69 76 65 e.'remote_con'.is.an.interactive
31840 20 73 6f 63 6b 65 74 20 68 61 6e 64 6c 65 2c 0d 0a 23 20 62 75 74 20 27 64 69 73 6b 5f 66 69 6c .socket.handle,..#.but.'disk_fil
31860 65 27 20 69 73 20 61 20 68 61 6e 64 6c 65 20 74 6f 20 61 20 72 65 67 75 6c 61 72 20 66 69 6c 65 e'.is.a.handle.to.a.regular.file
31880 2e 0d 0a 72 65 6d 6f 74 65 5f 63 6f 6e 2e 73 79 6e 63 20 3d 20 74 72 75 65 20 20 20 20 20 20 20 ...remote_con.sync.=.true.......
318a0 23 20 75 6e 62 75 66 66 65 72 20 66 6f 72 20 63 6c 61 72 69 74 79 0d 0a 64 69 73 6b 5f 66 69 6c #.unbuffer.for.clarity..disk_fil
318c0 65 2e 73 79 6e 63 20 3d 20 66 61 6c 73 65 20 20 20 20 20 20 20 23 20 62 75 66 66 65 72 65 64 20 e.sync.=.false.......#.buffered.
318e0 66 6f 72 20 73 70 65 65 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d for.speed..#--------------------
31900 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 72 65 71 75 69 72 65 20 27 73 6f 63 6b 65 74 27 0d 0a 73 6f 63 ---------..require.'socket'..soc
31920 6b 20 3d 20 54 43 50 53 6f 63 6b 65 74 2e 6e 65 77 28 27 77 77 77 2e 72 75 62 79 2d 6c 61 6e 67 k.=.TCPSocket.new('www.ruby-lang
31940 2e 6f 72 67 27 2c 20 38 30 29 0d 0a 73 6f 63 6b 2e 73 79 6e 63 20 3d 20 74 72 75 65 0d 0a 73 6f .org',.80)..sock.sync.=.true..so
31960 63 6b 2e 70 75 74 73 20 22 47 45 54 20 2f 65 6e 2f 20 48 54 54 50 2f 31 2e 30 20 5c 6e 5c 6e 22 ck.puts."GET./en/.HTTP/1.0.\n\n"
31980 0d 0a 72 65 73 70 20 3d 20 73 6f 63 6b 2e 72 65 61 64 0d 0a 70 72 69 6e 74 20 22 44 4f 43 20 49 ..resp.=.sock.read..print."DOC.I
319a0 53 3a 20 23 7b 72 65 73 70 7d 5c 6e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 37 S:.#{resp}\n"......#.@@PLEAC@@_7
319c0 2e 31 33 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .13..#--------------------------
319e0 2d 2d 2d 0d 0a 23 20 61 73 73 75 6d 65 73 20 66 68 31 2c 20 66 68 32 2c 20 66 68 32 20 61 72 65 ---..#.assumes.fh1,.fh2,.fh2.are
31a00 20 6f 65 6e 20 49 4f 20 6f 62 6a 65 63 74 73 0d 0a 6e 66 6f 75 6e 64 20 3d 20 73 65 6c 65 63 74 .oen.IO.objects..nfound.=.select
31a20 28 5b 24 73 74 64 69 6e 2c 20 66 68 31 2c 20 66 68 32 2c 20 66 68 33 5d 2c 20 6e 69 6c 2c 20 6e ([$stdin,.fh1,.fh2,.fh3],.nil,.n
31a40 69 6c 2c 20 30 29 0d 0a 6e 66 6f 75 6e 64 5b 30 5d 2e 65 61 63 68 20 64 6f 20 7c 66 69 6c 65 7c il,.0)..nfound[0].each.do.|file|
31a60 0d 0a 20 20 20 20 63 61 73 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 77 68 65 6e 20 66 68 ......case.file..........when.fh
31a80 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 1..............#.do.something.wi
31aa0 74 68 20 66 68 31 0d 0a 20 20 20 20 20 20 20 20 77 68 65 6e 20 66 68 32 0d 0a 20 20 20 20 20 20 th.fh1..........when.fh2........
31ac0 20 20 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 66 68 32 0d 0a 20 ......#.do.something.with.fh2...
31ae0 20 20 20 20 20 20 20 77 68 65 6e 20 66 68 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 64 .......when.fh3..............#.d
31b00 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 66 68 33 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 o.something.with.fh3......end..e
31b20 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nd..#---------------------------
31b40 2d 2d 0d 0a 69 6e 70 75 74 5f 66 69 6c 65 73 20 3d 20 5b 5d 0d 0a 23 20 72 65 70 65 61 74 20 6e --..input_files.=.[]..#.repeat.n
31b60 65 78 74 20 6c 69 6e 65 20 66 6f 72 20 61 6c 6c 20 69 6e 2d 66 69 6c 65 73 20 74 6f 20 70 6f 6c ext.line.for.all.in-files.to.pol
31b80 6c 0d 0a 69 6e 70 75 74 5f 66 69 6c 65 73 20 3c 3c 20 66 68 31 0d 0a 69 66 20 6e 66 6f 75 6e 64 l..input_files.<<.fh1..if.nfound
31ba0 20 3d 20 73 65 6c 65 63 74 28 69 6e 70 75 74 5f 66 69 6c 65 73 2c 20 6e 69 6c 2c 20 6e 69 6c 2c .=.select(input_files,.nil,.nil,
31bc0 20 30 29 0d 0a 20 20 20 20 23 20 69 6e 70 75 74 20 72 65 61 64 79 20 6f 6e 20 66 69 6c 65 73 20 .0)......#.input.ready.on.files.
31be0 69 6e 20 6e 66 6f 75 6e 64 5b 30 5d 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 in.nfound[0]..end......#.@@PLEAC
31c00 40 40 5f 38 2e 30 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d @@_8.0..#-----------------------
31c20 2d 2d 2d 2d 2d 2d 0d 0a 23 20 64 61 74 61 66 69 6c 65 20 69 73 20 61 20 66 69 6c 65 20 6f 72 20 ------..#.datafile.is.a.file.or.
31c40 49 4f 20 6f 62 6a 65 63 74 0d 0a 64 61 74 61 66 69 6c 65 2e 72 65 61 64 6c 69 6e 65 73 2e 65 61 IO.object..datafile.readlines.ea
31c60 63 68 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 6c 69 6e 65 2e 63 68 6f 6d 70 21 0d 0a 20 20 ch.{.|line|......line.chomp!....
31c80 20 20 73 69 7a 65 20 3d 20 6c 69 6e 65 2e 6c 65 6e 67 74 68 0d 0a 20 20 20 20 70 75 74 73 20 73 ..size.=.line.length......puts.s
31ca0 69 7a 65 0d 0a 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ize..}..#-----------------------
31cc0 2d 2d 2d 2d 2d 2d 0d 0a 64 61 74 61 66 69 6c 65 2e 72 65 61 64 6c 69 6e 65 73 2e 65 61 63 68 20 ------..datafile.readlines.each.
31ce0 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 70 75 74 73 20 6c 69 6e 65 2e 63 68 6f 6d 70 21 2e 6c {.|line|......puts.line.chomp!.l
31d00 65 6e 67 74 68 0d 0a 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ength..}..#---------------------
31d20 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6c 69 6e 65 73 20 3d 20 64 61 74 61 66 69 6c 65 2e 72 65 61 64 6c --------..lines.=.datafile.readl
31d40 69 6e 65 73 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ines..#-------------------------
31d60 2d 2d 2d 2d 0d 0a 77 68 6f 6c 65 5f 66 69 6c 65 20 3d 20 66 69 6c 65 2e 72 65 61 64 0d 0a 23 2d ----..whole_file.=.file.read..#-
31d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 ----------------------------..#.
31da0 72 75 62 79 20 2d 30 34 30 20 2d 65 20 27 77 6f 72 64 20 3d 20 67 65 74 73 3b 20 70 75 74 73 20 ruby.-040.-e.'word.=.gets;.puts.
31dc0 22 46 69 72 73 74 20 77 6f 72 64 20 69 73 20 23 7b 77 6f 72 64 7d 22 27 0d 0a 23 2d 2d 2d 2d 2d "First.word.is.#{word}"'..#-----
31de0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 72 75 62 79 ------------------------..#.ruby
31e00 20 2d 6e 65 20 27 42 45 47 49 4e 20 7b 20 24 2f 3d 22 25 25 5c 6e 22 20 7d 3b 20 24 5f 2e 63 68 .-ne.'BEGIN.{.$/="%%\n".};.$_.ch
31e20 6f 6d 70 3b 20 70 75 74 73 20 24 5f 20 69 66 28 20 24 5f 3d 7e 2f 55 6e 69 78 2f 69 29 27 20 66 omp;.puts.$_.if(.$_=~/Unix/i)'.f
31e40 6f 72 74 75 6e 65 2e 64 61 74 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ortune.dat..#-------------------
31e60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 68 61 6e 64 6c 65 2e 70 72 69 6e 74 20 22 6f 6e 65 22 2c 20 ----------..handle.print."one",.
31e80 22 74 77 6f 22 2c 20 22 74 68 72 65 65 22 20 23 20 22 6f 6e 65 74 77 6f 74 68 72 65 65 22 0d 0a "two",."three".#."onetwothree"..
31ea0 70 75 74 73 20 22 42 61 61 20 62 61 61 20 62 6c 61 63 6b 20 73 68 65 65 70 2e 22 20 20 20 20 20 puts."Baa.baa.black.sheep.".....
31ec0 20 20 20 23 20 73 65 6e 74 20 74 6f 20 24 73 74 64 6f 75 74 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d ...#.sent.to.$stdout..#---------
31ee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 62 75 66 66 65 72 20 3d 20 68 --------------------..buffer.=.h
31f00 61 6e 64 6c 65 2e 72 65 61 64 28 34 30 39 36 29 0d 0a 72 76 20 20 20 20 20 3d 20 62 75 66 66 65 andle.read(4096)..rv.....=.buffe
31f20 72 2e 6c 65 6e 67 74 68 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d r.length..#---------------------
31f40 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 68 61 6e 64 6c 65 2e 74 72 75 6e 63 61 74 65 28 6c 65 6e 67 74 68 --------..handle.truncate(length
31f60 29 0d 0a 6f 70 65 6e 28 22 2f 74 6d 70 23 7b 24 24 7d 2e 70 69 64 22 2c 20 27 77 27 29 20 7b 20 )..open("/tmp#{$$}.pid",.'w').{.
31f80 7c 68 61 6e 64 6c 65 7c 20 68 61 6e 64 6c 65 2e 74 72 75 6e 63 61 74 65 28 6c 65 6e 67 74 68 29 |handle|.handle.truncate(length)
31fa0 20 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .}..#---------------------------
31fc0 2d 2d 0d 0a 70 6f 73 20 3d 20 64 61 74 61 66 69 6c 65 2e 70 6f 73 20 20 23 20 74 65 6c 6c 20 69 --..pos.=.datafile.pos..#.tell.i
31fe0 73 20 61 6e 20 61 6c 69 61 73 20 6f 66 20 70 6f 73 0d 0a 70 75 74 73 20 22 49 27 6d 20 23 7b 70 s.an.alias.of.pos..puts."I'm.#{p
32000 6f 73 7d 20 62 79 74 65 73 20 66 72 6f 6d 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 os}.bytes.from.the.start.of.data
32020 66 69 6c 65 22 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d file"..#------------------------
32040 2d 2d 2d 2d 2d 0d 0a 6c 6f 67 66 69 6c 65 2e 73 65 65 6b 28 30 2c 20 49 4f 3a 3a 53 45 45 4b 5f -----..logfile.seek(0,.IO::SEEK_
32060 45 4e 44 29 0d 0a 64 61 74 61 66 69 6c 65 2e 73 65 65 6b 28 70 6f 73 29 20 20 23 20 20 49 4f 3a END)..datafile.seek(pos)..#..IO:
32080 3a 53 45 45 4b 5f 53 45 54 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 6f 75 74 2e 73 65 :SEEK_SET.is.the.default..out.se
320a0 65 6b 28 2d 32 30 2c 20 49 4f 3a 3a 53 45 45 4b 5f 43 55 52 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d ek(-20,.IO::SEEK_CUR)..#--------
320c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 77 72 69 74 74 65 6e 20 3d ---------------------..written.=
320e0 20 64 61 74 61 66 69 6c 65 2e 73 79 73 77 72 69 74 65 28 6d 79 73 74 72 69 6e 67 29 0d 0a 72 61 .datafile.syswrite(mystring)..ra
32100 69 73 65 20 52 75 6e 54 69 6d 65 45 72 72 6f 72 20 75 6e 6c 65 73 73 20 77 72 69 74 74 65 6e 20 ise.RunTimeError.unless.written.
32120 3d 3d 20 6d 79 73 74 72 69 6e 67 2e 6c 65 6e 67 74 68 0d 0a 62 6c 6f 63 6b 20 3d 20 69 6e 66 69 ==.mystring.length..block.=.infi
32140 6c 65 2e 73 79 73 72 65 61 64 28 32 35 36 29 20 20 20 23 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e le.sysread(256)...#.no.equivalen
32160 74 20 74 6f 20 70 65 72 6c 20 6f 66 66 73 65 74 20 70 61 72 61 6d 65 74 65 72 20 69 6e 20 73 79 t.to.perl.offset.parameter.in.sy
32180 73 72 65 61 64 0d 0a 70 75 74 73 20 22 6f 6e 6c 79 20 72 65 61 64 20 23 7b 62 6c 6f 63 6b 2e 6c sread..puts."only.read.#{block.l
321a0 65 6e 67 74 68 7d 20 62 79 74 65 73 22 20 69 66 20 32 35 36 20 21 3d 20 62 6c 6f 63 6b 2e 6c 65 ength}.bytes".if.256.!=.block.le
321c0 6e 67 74 68 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ngth..#-------------------------
321e0 2d 2d 2d 2d 0d 0a 70 6f 73 20 3d 20 68 61 6e 64 6c 65 2e 73 79 73 73 65 65 6b 28 30 2c 20 49 4f ----..pos.=.handle.sysseek(0,.IO
32200 3a 3a 53 45 45 4b 5f 43 55 52 29 20 20 23 20 64 6f 6e 27 74 20 63 68 61 6e 67 65 20 70 6f 73 69 ::SEEK_CUR)..#.don't.change.posi
32220 74 69 6f 6e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 38 2e 31 0d 0a 77 68 69 6c 65 tion......#.@@PLEAC@@_8.1..while
32240 20 28 6c 69 6e 65 20 3d 20 66 68 2e 67 65 74 73 29 0d 0a 20 20 20 20 6c 69 6e 65 2e 63 68 6f 6d .(line.=.fh.gets)......line.chom
32260 70 21 0d 0a 20 20 20 20 6e 65 78 74 6c 69 6e 65 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 6c 69 6e 65 p!......nextline.=.nil......line
32280 2e 67 73 75 62 21 28 2f 5c 5c 24 2f 29 20 7b 20 7c 6d 61 74 63 68 7c 20 6e 65 78 74 6c 69 6e 65 .gsub!(/\\$/).{.|match|.nextline
322a0 20 3d 20 66 68 2e 67 65 74 73 3b 20 27 27 20 7d 0d 0a 20 20 20 20 69 66 20 28 6e 65 78 74 6c 69 .=.fh.gets;.''.}......if.(nextli
322c0 6e 65 20 21 3d 20 6e 69 6c 29 0d 0a 20 20 20 20 20 20 20 20 6c 69 6e 65 20 2b 3d 20 6e 65 78 74 ne.!=.nil)..........line.+=.next
322e0 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 72 65 64 6f 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 line..........redo......end.....
32300 20 23 20 70 72 6f 63 65 73 73 20 66 75 6c 6c 20 72 65 63 6f 72 64 20 69 6e 20 6c 69 6e 65 20 68 .#.process.full.record.in.line.h
32320 65 72 65 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ere..end..#---------------------
32340 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 44 49 53 54 46 49 4c 45 53 20 3d 20 24 28 44 49 53 54 5f 43 --------..#.DISTFILES.=.$(DIST_C
32360 4f 4d 4d 4f 4e 29 20 24 28 53 4f 55 52 43 45 53 29 20 24 28 48 45 41 44 45 52 53 29 20 5c 0d 0a OMMON).$(SOURCES).$(HEADERS).\..
32380 23 20 20 20 20 20 20 20 20 20 24 28 54 45 58 49 4e 46 4f 53 29 20 24 28 49 4e 46 4f 53 29 20 24 #.........$(TEXINFOS).$(INFOS).$
323a0 28 4d 41 4e 53 29 20 24 28 44 41 54 41 29 0d 0a 23 20 44 45 50 5f 44 49 53 54 46 49 4c 45 53 20 (MANS).$(DATA)..#.DEP_DISTFILES.
323c0 3d 20 24 28 44 49 53 54 5f 43 4f 4d 4d 4f 4e 29 20 24 28 53 4f 55 52 43 45 53 29 20 24 28 48 45 =.$(DIST_COMMON).$(SOURCES).$(HE
323e0 41 44 45 52 53 29 20 5c 0d 0a 23 20 20 20 20 20 20 20 20 20 24 28 54 45 58 49 4e 46 4f 53 29 20 ADERS).\..#.........$(TEXINFOS).
32400 24 28 49 4e 46 4f 5f 44 45 50 53 29 20 24 28 4d 41 4e 53 29 20 24 28 44 41 54 41 29 20 5c 0d 0a $(INFO_DEPS).$(MANS).$(DATA).\..
32420 23 20 20 20 20 20 20 20 20 20 24 28 45 58 54 52 41 5f 44 49 53 54 29 0d 0a 23 2d 2d 2d 2d 2d 2d #.........$(EXTRA_DIST)..#------
32440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6c 69 6e 65 2e 67 73 -----------------------..line.gs
32460 75 62 21 28 2f 5c 5c 5c 73 2a 24 2f 2c 20 27 27 29 20 7b 0d 0a 20 20 20 20 23 20 61 73 20 62 65 ub!(/\\\s*$/,.'').{......#.as.be
32480 66 6f 72 65 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 38 2e 32 0d 0a 23 2d fore..}......#.@@PLEAC@@_8.2..#-
324a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 63 6f ----------------------------..co
324c0 75 6e 74 20 3d 20 60 77 63 20 2d 6c 20 3c 20 23 7b 66 69 6c 65 6e 61 6d 65 7d 60 0d 0a 66 61 69 unt.=.`wc.-l.<.#{filename}`..fai
324e0 6c 20 22 77 63 20 66 61 69 6c 65 64 3a 20 23 7b 24 3f 7d 22 20 69 66 20 24 3f 20 21 3d 20 30 0d l."wc.failed:.#{$?}".if.$?.!=.0.
32500 0a 63 6f 75 6e 74 2e 63 68 6f 6d 70 21 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .count.chomp!..#----------------
32520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 63 6f 75 6e 74 20 3d 20 30 0d 0a 46 69 6c 65 2e 6f -------------..count.=.0..File.o
32540 70 65 6e 28 66 69 6c 65 2c 20 27 72 27 29 20 7b 20 7c 66 68 7c 0d 0a 20 20 20 20 63 6f 75 6e 74 pen(file,.'r').{.|fh|......count
32560 20 2b 3d 20 31 20 77 68 69 6c 65 20 66 68 2e 67 65 74 73 0d 0a 7d 0d 0a 23 20 63 6f 75 6e 74 20 .+=.1.while.fh.gets..}..#.count.
32580 6e 6f 77 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 73 20 72 65 now.holds.the.number.of.lines.re
325a0 61 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ad..#---------------------------
325c0 2d 2d 0d 0a 63 6f 75 6e 74 20 3d 20 30 0d 0a 77 68 69 6c 65 20 28 63 68 75 6e 6b 20 3d 20 66 69 --..count.=.0..while.(chunk.=.fi
325e0 6c 65 2e 73 79 73 72 65 61 64 28 32 2a 2a 31 36 29 29 0d 0a 20 20 20 20 63 6f 75 6e 74 20 2b 3d le.sysread(2**16))......count.+=
32600 20 63 68 75 6e 6b 2e 63 6f 75 6e 74 28 22 5c 6e 22 29 0d 0a 65 6e 64 20 72 65 73 63 75 65 20 45 .chunk.count("\n")..end.rescue.E
32620 4f 46 45 72 72 6f 72 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d OFError..#----------------------
32640 2d 2d 2d 2d 2d 2d 2d 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 27 72 27 29 -------..File.open(filename,'r')
32660 20 7b 20 7c 66 68 7c 0d 0a 20 20 20 20 63 6f 75 6e 74 20 2b 3d 20 31 20 77 68 69 6c 65 20 66 68 .{.|fh|......count.+=.1.while.fh
32680 2e 67 65 74 73 0d 0a 7d 0d 0a 23 20 63 6f 75 6e 74 20 6e 6f 77 20 68 6f 6c 64 73 20 74 68 65 20 .gets..}..#.count.now.holds.the.
326a0 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 73 20 72 65 61 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d number.of.lines.read..#---------
326c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 41 73 20 72 75 62 79 20 --------------------..#.As.ruby.
326e0 64 6f 65 73 6e 27 74 20 71 75 69 74 65 20 68 61 76 65 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 doesn't.quite.have.an.equivalent
32700 20 74 6f 20 75 73 69 6e 67 20 61 20 66 6f 72 0d 0a 23 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 .to.using.a.for..#.statement.as.
32720 69 6e 20 70 65 72 6c 2c 20 49 20 74 68 72 65 77 20 74 68 69 73 20 69 6e 0d 0a 63 6f 75 6e 74 20 in.perl,.I.threw.this.in..count.
32740 3d 20 46 69 6c 65 2e 72 65 61 64 6c 69 6e 65 73 28 66 69 6c 65 6e 61 6d 65 29 2e 73 69 7a 65 0d =.File.readlines(filename).size.
32760 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d .#-----------------------------.
32780 0a 31 20 77 68 69 6c 65 20 66 69 6c 65 2e 67 65 74 73 0d 0a 63 6f 75 6e 74 20 3d 20 24 2e 0d 0a .1.while.file.gets..count.=.$...
327a0 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a #-----------------------------..
327c0 24 2f 20 3d 20 27 27 0d 0a 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 20 27 72 27 29 20 7b 20 7c $/.=.''..open(filename,.'r').{.|
327e0 66 68 7c 0d 0a 20 20 20 20 31 20 77 68 69 6c 65 20 66 68 2e 67 65 74 73 0d 0a 20 20 20 20 70 61 fh|......1.while.fh.gets......pa
32800 72 61 5f 63 6f 75 6e 74 20 3d 20 24 2e 0d 0a 7d 20 72 65 73 63 75 65 20 66 61 69 6c 28 22 63 61 ra_count.=.$...}.rescue.fail("ca
32820 6e 27 74 20 6f 70 65 6e 20 23 7b 66 69 6c 65 6e 61 6d 65 7d 3a 20 24 21 22 29 0d 0a 23 2d 2d 2d n't.open.#{filename}:.$!")..#---
32840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a --------------------------......
32860 23 20 5e 5e 50 4c 45 41 43 5e 5e 5f 38 2e 33 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d #.^^PLEAC^^_8.3..#--------------
32880 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 77 68 69 6c 65 20 28 67 65 74 73 29 0d 0a 20 ---------------..while.(gets)...
328a0 20 20 20 73 70 6c 69 74 2e 65 61 63 68 20 7b 20 7c 63 68 75 6e 6b 7c 0d 0a 20 20 20 20 20 20 20 ...split.each.{.|chunk|.........
328c0 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 63 68 75 6e 6b 0d 0a 20 20 20 20 .#.do.something.with.chunk......
328e0 7d 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d }..end..#-----------------------
32900 2d 2d 2d 2d 2d 2d 0d 0a 77 68 69 6c 65 20 28 67 65 74 73 29 0d 0a 20 20 20 20 67 73 75 62 28 2f ------..while.(gets)......gsub(/
32920 28 5c 77 5b 5c 77 27 2d 5d 2a 29 2f 29 20 7b 20 7c 77 6f 72 64 7c 0d 0a 20 20 20 20 20 20 20 20 (\w[\w'-]*)/).{.|word|..........
32940 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 77 6f 72 64 0d 0a 20 20 20 20 7d 0d #.do.something.with.word......}.
32960 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .end..#-------------------------
32980 2d 2d 2d 2d 0d 0a 23 20 4d 61 6b 65 20 61 20 77 6f 72 64 20 66 72 65 71 75 65 6e 63 79 20 63 6f ----..#.Make.a.word.frequency.co
329a0 75 6e 74 0d 0a 23 20 6e 6f 72 6d 61 6c 6c 79 20 68 61 73 68 65 73 20 63 61 6e 20 62 65 20 63 72 unt..#.normally.hashes.can.be.cr
329c0 65 61 74 65 64 20 75 73 69 6e 67 20 7b 7d 20 6f 72 20 6a 75 73 74 20 48 61 73 68 2e 6e 65 77 0d eated.using.{}.or.just.Hash.new.
329e0 0a 23 20 62 75 74 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 .#.but.we.want.the.default.value
32a00 20 6f 66 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 62 65 20 30 20 69 6e 73 74 65 61 64 0d 0a 23 20 .of.an.entry.to.be.0.instead..#.
32a20 6f 66 20 6e 69 6c 2e 20 28 6e 69 6c 20 63 61 6e 27 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 of.nil..(nil.can't.be.incremente
32a40 64 29 0d 0a 73 65 65 6e 20 3d 20 48 61 73 68 2e 6e 65 77 28 30 29 0d 0a 77 68 69 6c 65 20 28 67 d)..seen.=.Hash.new(0)..while.(g
32a60 65 74 73 29 0d 0a 20 20 20 20 67 73 75 62 28 2f 28 5c 77 5b 5c 77 27 2d 5d 2a 29 2f 29 20 7b 20 ets)......gsub(/(\w[\w'-]*)/).{.
32a80 7c 77 6f 72 64 7c 0d 0a 20 20 20 20 20 20 20 20 73 65 65 6e 5b 77 6f 72 64 2e 64 6f 77 6e 63 61 |word|..........seen[word.downca
32aa0 73 65 5d 20 2b 3d 20 31 0d 0a 20 20 20 20 7d 0d 0a 65 6e 64 0d 0a 23 20 6f 75 74 70 75 74 20 68 se].+=.1......}..end..#.output.h
32ac0 61 73 68 20 69 6e 20 61 20 64 65 73 63 65 6e 64 69 6e 67 20 6e 75 6d 65 72 69 63 20 73 6f 72 74 ash.in.a.descending.numeric.sort
32ae0 20 6f 66 20 69 74 73 20 76 61 6c 75 65 73 0d 0a 73 65 65 6e 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 .of.its.values..seen.sort.{.|a,b
32b00 7c 20 62 5b 31 5d 20 3c 3d 3e 20 61 5b 31 5d 20 7d 2e 65 61 63 68 20 64 6f 20 7c 6b 2c 76 7c 0d |.b[1].<=>.a[1].}.each.do.|k,v|.
32b20 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 35 64 20 25 73 5c 6e 22 2c 20 76 2c 20 6b 20 29 0d 0a .....printf("%5d.%s\n",.v,.k.)..
32b40 65 6e 64 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d end....#------------------------
32b60 2d 2d 2d 2d 2d 0d 0a 23 20 4c 69 6e 65 20 66 72 65 71 75 65 6e 63 79 20 63 6f 75 6e 74 0d 0a 73 -----..#.Line.frequency.count..s
32b80 65 65 6e 20 3d 20 48 61 73 68 2e 6e 65 77 28 30 29 0d 0a 77 68 69 6c 65 20 28 67 65 74 73 29 0d een.=.Hash.new(0)..while.(gets).
32ba0 0a 20 20 20 20 73 65 65 6e 5b 24 5f 2e 64 6f 77 6e 63 61 73 65 5d 20 2b 3d 20 31 0d 0a 65 6e 64 .....seen[$_.downcase].+=.1..end
32bc0 0d 0a 73 65 65 6e 2e 73 6f 72 74 20 7b 20 7c 61 2c 62 7c 20 62 5b 31 5d 20 3c 3d 3e 20 61 5b 31 ..seen.sort.{.|a,b|.b[1].<=>.a[1
32be0 5d 20 7d 2e 65 61 63 68 20 64 6f 20 7c 6b 2c 76 7c 0d 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 ].}.each.do.|k,v|......printf("%
32c00 35 64 20 25 73 5c 6e 22 2c 20 76 2c 20 6b 20 29 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 5d.%s\n",.v,.k.)..end..#--------
32c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 ---------------------......#.@@P
32c40 4c 45 41 43 40 40 5f 38 2e 34 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d LEAC@@_8.4..#-------------------
32c60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 69 6e 73 74 65 61 64 20 6f 66 20 66 69 6c 65 20 68 61 ----------..#.instead.of.file.ha
32c80 6e 64 6c 65 20 46 49 4c 45 2c 20 77 65 20 63 61 6e 20 6a 75 73 74 0d 0a 23 20 75 73 65 20 61 20 ndle.FILE,.we.can.just..#.use.a.
32ca0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 0d 0a string.containing.the.filename..
32cc0 46 69 6c 65 2e 72 65 61 64 6c 69 6e 65 73 28 66 69 6c 65 29 2e 65 61 63 68 20 7b 20 7c 6c 69 6e File.readlines(file).each.{.|lin
32ce0 65 7c 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 6c 69 6e 65 e|......#.do.something.with.line
32d00 0d 0a 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..}..#--------------------------
32d20 2d 2d 2d 0d 0a 46 69 6c 65 2e 72 65 61 64 6c 69 6e 65 73 28 66 69 6c 65 29 2e 72 65 76 65 72 73 ---..File.readlines(file).revers
32d40 65 5f 65 61 63 68 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 e_each.{.|line|......#.do.someth
32d60 69 6e 67 20 77 69 74 68 20 6c 69 6e 65 0d 0a 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ing.with.line..}..#-------------
32d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 74 68 65 20 76 61 72 69 61 62 6c 65 ----------------..#.the.variable
32da0 20 6c 69 6e 65 73 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74 65 64 0d 0a .lines.might.have.been.created..
32dc0 23 20 74 68 69 73 20 77 61 79 0d 0a 23 20 6c 69 6e 65 73 20 3d 20 46 69 6c 65 2e 72 65 61 64 6c #.this.way..#.lines.=.File.readl
32de0 69 6e 65 73 28 66 69 6c 65 29 0d 0a 23 0d 0a 23 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20 77 6f ines(file)..#..#.normally.one.wo
32e00 75 6c 64 20 75 73 65 20 74 68 65 20 72 65 76 65 72 73 65 5f 65 61 63 68 2c 20 62 75 74 0d 0a 23 uld.use.the.reverse_each,.but..#
32e20 20 69 66 20 79 6f 75 20 69 6e 73 69 73 74 20 6f 6e 20 75 73 69 6e 67 20 61 20 6e 75 6d 65 72 69 .if.you.insist.on.using.a.numeri
32e40 63 61 6c 20 69 6e 64 65 78 20 74 6f 0d 0a 23 20 69 74 65 72 61 74 65 20 6f 76 65 72 20 74 68 65 cal.index.to..#.iterate.over.the
32e60 20 6c 69 6e 65 73 20 61 72 72 61 79 2e 2e 2e 0d 0a 28 6c 69 6e 65 73 2e 73 69 7a 65 20 2d 20 31 .lines.array.....(lines.size.-.1
32e80 29 2e 64 6f 77 6e 74 6f 28 30 29 20 7b 20 7c 69 7c 0d 0a 20 20 20 20 6c 69 6e 65 20 3d 20 6c 69 ).downto(0).{.|i|......line.=.li
32ea0 6e 65 73 5b 69 5d 0d 0a 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nes[i]..}..#--------------------
32ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 74 68 65 20 73 65 63 6f 6e 64 20 72 65 61 64 6c 69 6e 65 ---------..#.the.second.readline
32ee0 73 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 74 68 65 0d 0a 23 20 72 65 63 6f 72 64 20 73 65 s.argument.is.a.the..#.record.se
32f00 70 61 72 61 74 6f 72 20 24 2f 2c 20 6a 75 73 74 20 6c 69 6b 65 20 70 65 72 6c 2c 20 61 20 62 6c parator.$/,.just.like.perl,.a.bl
32f20 61 6e 6b 0d 0a 23 20 73 65 70 61 72 61 74 6f 72 20 73 70 6c 69 74 73 20 74 68 65 20 72 65 63 6f ank..#.separator.splits.the.reco
32f40 72 64 73 20 69 6e 74 6f 20 70 61 72 61 67 72 61 70 68 73 0d 0a 46 69 6c 65 2e 72 65 61 64 6c 69 rds.into.paragraphs..File.readli
32f60 6e 65 73 28 66 69 6c 65 2c 20 27 27 29 2e 65 61 63 68 20 7b 20 7c 70 61 72 61 67 72 61 70 68 7c nes(file,.'').each.{.|paragraph|
32f80 0d 0a 20 20 20 20 23 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 70 61 72 61 67 72 ......#.do.something.with.paragr
32fa0 61 70 68 0d 0a 20 20 20 20 70 75 74 73 20 22 2d 3e 50 61 72 61 67 72 61 70 68 20 23 7b 70 61 72 aph......puts."->Paragraph.#{par
32fc0 61 67 72 61 70 68 7d 22 0d 0a 7d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d agraph}"..}..#------------------
32fe0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 38 2e 36 -----------......#.@@PLEAC@@_8.6
33000 0d 0a 0d 0a 24 2f 20 3d 20 22 25 5c 6e 22 3b 0d 0a 73 72 61 6e 64 3b 0d 0a 0d 0a 46 69 6c 65 2e ....$/.=."%\n";..srand;....File.
33020 6f 70 65 6e 28 27 2f 75 73 72 2f 73 68 61 72 65 2f 66 6f 72 74 75 6e 65 2f 68 75 6d 6f 72 69 73 open('/usr/share/fortune/humoris
33040 74 73 27 29 2e 65 61 63 68 20 64 6f 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 61 64 61 67 65 20 3d ts').each.do.|line|......adage.=
33060 20 6c 69 6e 65 20 69 66 20 72 61 6e 64 28 24 2e 29 20 3c 20 31 0d 0a 65 6e 64 0d 0a 0d 0a 70 75 .line.if.rand($.).<.1..end....pu
33080 74 73 20 61 64 61 67 65 3b 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 38 2e 31 30 0d ts.adage;......#.@@PLEAC@@_8.10.
330a0 0a 62 65 67 69 6e 0d 0a 20 20 20 20 66 68 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 66 69 6c 65 2c .begin......fh.=.File.open(file,
330c0 20 22 72 2b 22 29 0d 0a 20 20 20 20 61 64 64 72 20 3d 20 66 68 2e 74 65 6c 6c 20 75 6e 6c 65 73 ."r+")......addr.=.fh.tell.unles
330e0 73 20 66 68 2e 65 6f 66 20 77 68 69 6c 65 20 66 68 2e 67 65 74 73 0d 0a 20 20 20 20 66 68 2e 74 s.fh.eof.while.fh.gets......fh.t
33100 72 75 6e 63 61 74 65 28 61 64 64 72 29 0d 0a 72 65 73 63 75 65 20 53 79 73 74 65 6d 43 61 6c 6c runcate(addr)..rescue.SystemCall
33120 45 72 72 6f 72 0d 0a 20 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 73 20 22 23 24 21 22 0d 0a 65 Error......$stderr.puts."#$!"..e
33140 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 30 0d 0a 65 6e 74 72 79 20 3d nd......#.@@PLEAC@@_9.0..entry.=
33160 20 46 69 6c 65 2e 73 74 61 74 28 22 2f 75 73 72 2f 62 69 6e 2f 76 69 22 29 0d 0a 65 6e 74 72 79 .File.stat("/usr/bin/vi")..entry
33180 20 3d 20 46 69 6c 65 2e 73 74 61 74 28 22 2f 75 73 72 2f 62 69 6e 22 29 0d 0a 65 6e 74 72 79 20 .=.File.stat("/usr/bin")..entry.
331a0 3d 20 46 69 6c 65 2e 73 74 61 74 28 49 4e 46 49 4c 45 29 0d 0a 0d 0a 65 6e 74 72 79 20 3d 20 46 =.File.stat(INFILE)....entry.=.F
331c0 69 6c 65 2e 73 74 61 74 28 22 2f 75 73 72 2f 62 69 6e 2f 76 69 22 29 0d 0a 63 74 69 6d 65 20 3d ile.stat("/usr/bin/vi")..ctime.=
331e0 20 65 6e 74 72 79 2e 63 74 69 6d 65 0d 0a 73 69 7a 65 20 20 3d 20 65 6e 74 72 79 2e 73 69 7a 65 .entry.ctime..size..=.entry.size
33200 0d 0a 0d 0a 66 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 20 22 72 22 29 ....f.=.File.open(filename,."r")
33220 0d 0a 0d 0a 23 23 20 54 68 65 72 65 20 69 73 20 6e 6f 20 2d 54 20 65 71 75 69 76 61 6c 65 6e 74 ....##.There.is.no.-T.equivalent
33240 20 69 6e 20 52 75 62 79 2c 20 62 75 74 20 77 65 20 63 61 6e 20 73 74 69 6c 6c 20 74 65 73 74 20 .in.Ruby,.but.we.can.still.test.
33260 65 6d 70 74 69 6e 65 73 73 0d 0a 69 66 20 74 65 73 74 28 3f 73 2c 20 66 69 6c 65 6e 61 6d 65 29 emptiness..if.test(?s,.filename)
33280 0d 0a 20 20 70 75 74 73 20 22 23 7b 66 69 6c 65 6e 61 6d 65 7d 20 64 6f 65 73 6e 27 74 20 68 61 ....puts."#{filename}.doesn't.ha
332a0 76 65 20 74 65 78 74 20 69 6e 20 69 74 2e 22 0d 0a 20 20 65 78 69 74 0d 0a 65 6e 64 0d 0a 0d 0a ve.text.in.it."....exit..end....
332c0 44 69 72 2e 6e 65 77 28 22 2f 75 73 72 2f 62 69 6e 22 29 2e 65 61 63 68 20 64 6f 20 7c 66 69 6c Dir.new("/usr/bin").each.do.|fil
332e0 65 6e 61 6d 65 7c 0d 0a 20 20 70 75 74 73 20 22 49 6e 73 69 64 65 20 2f 75 73 72 2f 62 69 6e 20 ename|....puts."Inside./usr/bin.
33300 69 73 20 73 6f 6d 65 74 68 69 6e 67 20 63 61 6c 6c 65 64 20 23 7b 66 69 6c 65 6e 61 6d 65 7d 22 is.something.called.#{filename}"
33320 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 31 0d 0a 66 69 6c 65 ..end......#.@@PLEAC@@_9.1..file
33340 20 3d 20 46 69 6c 65 2e 73 74 61 74 28 22 66 69 6c 65 6e 61 6d 65 22 29 0d 0a 72 65 61 64 74 69 .=.File.stat("filename")..readti
33360 6d 65 2c 20 77 72 69 74 65 74 69 6d 65 20 3d 20 66 69 6c 65 2e 61 74 69 6d 65 2c 20 66 69 6c 65 me,.writetime.=.file.atime,.file
33380 2e 6d 74 69 6d 65 0d 0a 66 69 6c 65 2e 75 74 69 6d 65 28 72 65 61 64 74 69 6d 65 2c 20 77 72 69 .mtime..file.utime(readtime,.wri
333a0 74 65 74 69 6d 65 29 0d 0a 0d 0a 53 45 43 4f 4e 44 53 5f 50 45 52 5f 44 41 59 20 3d 20 36 30 20 tetime)....SECONDS_PER_DAY.=.60.
333c0 2a 20 36 30 20 2a 20 32 34 0d 0a 66 69 6c 65 20 3d 20 46 69 6c 65 2e 73 74 61 74 28 22 66 69 6c *.60.*.24..file.=.File.stat("fil
333e0 65 6e 61 6d 65 22 29 0d 0a 61 74 69 6d 65 2c 20 6d 74 69 6d 65 20 3d 20 66 69 6c 65 2e 61 74 69 ename")..atime,.mtime.=.file.ati
33400 6d 65 2c 20 66 69 6c 65 2e 6d 74 69 6d 65 0d 0a 0d 0a 61 74 69 6d 65 20 2d 3d 20 37 20 2a 20 53 me,.file.mtime....atime.-=.7.*.S
33420 45 43 4f 4e 44 53 5f 50 45 52 5f 44 41 59 0d 0a 6d 74 69 6d 65 20 2d 3d 20 37 20 2a 20 53 45 43 ECONDS_PER_DAY..mtime.-=.7.*.SEC
33440 4f 4e 44 53 5f 50 45 52 5f 44 41 59 0d 0a 0d 0a 46 69 6c 65 2e 75 74 69 6d 65 28 61 74 69 6d 65 ONDS_PER_DAY....File.utime(atime
33460 2c 20 6d 74 69 6d 65 2c 20 66 69 6c 65 29 0d 0a 6d 74 69 6d 65 20 3d 20 46 69 6c 65 2e 73 74 61 ,.mtime,.file)..mtime.=.File.sta
33480 74 28 66 69 6c 65 29 2e 6d 74 69 6d 65 0d 0a 46 69 6c 65 2e 75 74 69 6d 65 28 54 69 6d 65 2e 6e t(file).mtime..File.utime(Time.n
334a0 65 77 2c 20 6d 74 69 6d 65 2c 20 66 69 6c 65 29 0d 0a 46 69 6c 65 2e 75 74 69 6d 65 28 54 69 6d ew,.mtime,.file)..File.utime(Tim
334c0 65 2e 6e 65 77 2c 20 46 69 6c 65 2e 73 74 61 74 28 22 74 65 73 74 66 69 6c 65 22 29 2e 6d 74 69 e.new,.File.stat("testfile").mti
334e0 6d 65 2c 20 66 69 6c 65 29 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d me,.file)....#------------------
33500 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d -----------..#!/usr/bin/ruby.-w.
33520 0a 23 23 20 75 76 69 20 2d 20 76 69 20 61 20 66 69 6c 65 20 77 69 74 68 6f 75 74 20 63 68 61 6e .##.uvi.-.vi.a.file.without.chan
33540 67 69 6e 67 20 69 74 27 73 20 61 63 63 65 73 73 20 74 69 6d 65 73 0d 0a 0d 0a 69 66 20 41 52 47 ging.it's.access.times....if.ARG
33560 56 2e 6c 65 6e 67 74 68 20 21 3d 20 31 0d 0a 20 20 70 75 74 73 20 22 75 73 61 67 65 3a 20 75 76 V.length.!=.1....puts."usage:.uv
33580 69 20 66 69 6c 65 6e 61 6d 65 22 0d 0a 20 20 65 78 69 74 0d 0a 65 6e 64 0d 0a 66 69 6c 65 20 3d i.filename"....exit..end..file.=
335a0 20 41 52 47 56 5b 30 5d 0d 0a 61 74 69 6d 65 2c 20 6d 74 69 6d 65 20 3d 20 46 69 6c 65 2e 73 74 .ARGV[0]..atime,.mtime.=.File.st
335c0 61 74 28 66 69 6c 65 29 2e 61 74 69 6d 65 2c 20 46 69 6c 65 2e 73 74 61 74 28 66 69 6c 65 29 2e at(file).atime,.File.stat(file).
335e0 6d 74 69 6d 65 0d 0a 73 79 73 74 65 6d 28 45 4e 56 5b 22 45 44 49 54 4f 52 22 5d 20 7c 7c 20 22 mtime..system(ENV["EDITOR"].||."
33600 76 69 22 2c 20 66 69 6c 65 29 0d 0a 46 69 6c 65 2e 75 74 69 6d 65 28 61 74 69 6d 65 2c 20 6d 74 vi",.file)..File.utime(atime,.mt
33620 69 6d 65 2c 20 66 69 6c 65 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ime,.file)..#-------------------
33640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 32 0d ----------......#.@@PLEAC@@_9.2.
33660 0a 46 69 6c 65 2e 75 6e 6c 69 6e 6b 28 46 49 4c 45 4e 41 4d 45 29 0d 0a 0d 0a 65 72 72 5f 66 6c .File.unlink(FILENAME)....err_fl
33680 67 20 3d 20 66 61 6c 73 65 0d 0a 66 69 6c 65 6e 61 6d 65 73 2e 65 61 63 68 20 64 6f 20 7c 66 69 g.=.false..filenames.each.do.|fi
336a0 6c 65 7c 0d 0a 20 20 62 65 67 69 6e 0d 0a 20 20 20 20 46 69 6c 65 2e 75 6e 6c 69 6e 6b 28 66 69 le|....begin......File.unlink(fi
336c0 6c 65 29 0d 0a 20 20 72 65 73 63 75 65 0d 0a 20 20 20 20 65 72 72 5f 66 6c 67 20 3d 20 24 21 0d le)....rescue......err_flg.=.$!.
336e0 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 65 72 72 5f 66 6c 67 20 61 6e 64 20 72 61 69 73 65 20 22 ...end..end..err_flg.and.raise."
33700 43 6f 75 6c 64 6e 27 74 20 75 6e 6c 69 6e 6b 20 61 6c 6c 20 6f 66 20 23 7b 66 69 6c 65 6e 61 6d Couldn't.unlink.all.of.#{filenam
33720 65 73 2e 6a 6f 69 6e 28 22 20 22 29 7d 3a 20 23 7b 65 72 72 5f 66 6c 67 7d 22 0d 0a 0d 0a 46 69 es.join(".")}:.#{err_flg}"....Fi
33740 6c 65 2e 75 6e 6c 69 6e 6b 28 66 69 6c 65 29 0d 0a 0d 0a 63 6f 75 6e 74 20 3d 20 66 69 6c 65 6e le.unlink(file)....count.=.filen
33760 61 6d 65 73 2e 6c 65 6e 67 74 68 0d 0a 66 69 6c 65 6e 61 6d 65 73 2e 65 61 63 68 20 64 6f 20 7c ames.length..filenames.each.do.|
33780 66 69 6c 65 7c 0d 0a 20 20 62 65 67 69 6e 0d 0a 20 20 20 20 46 69 6c 65 2e 75 6e 6c 69 6e 6b 28 file|....begin......File.unlink(
337a0 66 69 6c 65 29 0d 0a 20 20 72 65 73 63 75 65 0d 0a 20 20 20 20 63 6f 75 6e 74 20 2d 3d 20 31 0d file)....rescue......count.-=.1.
337c0 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 69 66 20 63 6f 75 6e 74 20 21 3d 20 66 69 6c 65 6e 61 6d ...end..end..if.count.!=.filenam
337e0 65 73 2e 6c 65 6e 67 74 68 0d 0a 20 20 53 54 44 45 52 52 2e 70 75 74 73 20 22 63 6f 75 6c 64 20 es.length....STDERR.puts."could.
33800 6f 6e 6c 79 20 64 65 6c 65 74 65 20 23 7b 63 6f 75 6e 74 7d 20 6f 66 20 23 7b 66 69 6c 65 6e 61 only.delete.#{count}.of.#{filena
33820 6d 65 73 2e 6c 65 6e 67 74 68 7d 20 66 69 6c 65 73 22 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 mes.length}.files"..end......#.@
33840 40 50 4c 45 41 43 40 40 5f 39 2e 33 0d 0a 72 65 71 75 69 72 65 20 22 66 74 6f 6f 6c 73 22 0d 0a @PLEAC@@_9.3..require."ftools"..
33860 46 69 6c 65 2e 63 6f 70 79 28 6f 6c 64 66 69 6c 65 2c 20 6e 65 77 66 69 6c 65 29 0d 0a 0d 0a 69 File.copy(oldfile,.newfile)....i
33880 6e 66 69 6c 65 20 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 6f 6c 64 66 69 6c 65 2c 20 22 72 22 29 nfile..=.File.open(oldfile,."r")
338a0 0d 0a 6f 75 74 66 69 6c 65 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 6e 65 77 66 69 6c 65 2c 20 22 ..outfile.=.File.open(newfile,."
338c0 77 22 29 0d 0a 0d 0a 62 6c 6b 73 69 7a 65 20 3d 20 69 6e 66 69 6c 65 2e 73 74 61 74 2e 62 6c 6b w")....blksize.=.infile.stat.blk
338e0 73 69 7a 65 0d 0a 23 20 54 68 69 73 20 64 6f 65 73 6e 27 74 20 68 61 6e 64 6c 65 20 70 61 72 74 size..#.This.doesn't.handle.part
33900 69 61 6c 20 77 72 69 74 65 73 20 6f 72 20 5e 5a 0d 0a 23 20 6c 69 6b 65 20 74 68 65 20 50 65 72 ial.writes.or.^Z..#.like.the.Per
33920 6c 20 76 65 72 73 69 6f 6e 20 64 6f 65 73 2e 0d 0a 77 68 69 6c 65 20 28 6c 69 6e 65 20 3d 20 69 l.version.does...while.(line.=.i
33940 6e 66 69 6c 65 2e 72 65 61 64 28 62 6c 6b 73 69 7a 65 29 29 0d 0a 20 20 6f 75 74 66 69 6c 65 2e nfile.read(blksize))....outfile.
33960 77 72 69 74 65 28 6c 69 6e 65 29 0d 0a 65 6e 64 0d 0a 0d 0a 69 6e 66 69 6c 65 2e 63 6c 6f 73 65 write(line)..end....infile.close
33980 0d 0a 6f 75 74 66 69 6c 65 2e 63 6c 6f 73 65 0d 0a 0d 0a 73 79 73 74 65 6d 28 22 63 70 20 23 7b ..outfile.close....system("cp.#{
339a0 6f 6c 64 66 69 6c 65 7d 20 23 7b 6e 65 77 66 69 6c 65 7d 22 29 20 20 20 20 23 20 75 6e 69 78 0d oldfile}.#{newfile}")....#.unix.
339c0 0a 73 79 73 74 65 6d 28 22 63 6f 70 79 20 23 7b 6f 6c 64 66 69 6c 65 7d 20 23 7b 6e 65 77 66 69 .system("copy.#{oldfile}.#{newfi
339e0 6c 65 7d 22 29 20 20 23 20 64 6f 73 2c 20 76 6d 73 0d 0a 0d 0a 72 65 71 75 69 72 65 20 22 66 74 le}")..#.dos,.vms....require."ft
33a00 6f 6f 6c 73 22 0d 0a 46 69 6c 65 2e 63 6f 70 79 28 22 64 61 74 61 66 69 6c 65 2e 64 61 74 22 2c ools"..File.copy("datafile.dat",
33a20 20 22 64 61 74 61 66 69 6c 65 2e 62 61 6b 22 29 0d 0a 46 69 6c 65 2e 6d 6f 76 65 28 22 64 61 74 ."datafile.bak")..File.move("dat
33a40 61 66 69 6c 65 2e 6e 65 77 22 2c 20 22 64 61 74 61 66 69 6c 65 2e 64 61 74 22 29 0d 0a 0d 0a 0d afile.new",."datafile.dat").....
33a60 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 34 0d 0a 24 73 65 65 6e 20 3d 20 7b 7d 20 23 20 6d .#.@@PLEAC@@_9.4..$seen.=.{}.#.m
33a80 75 73 74 20 75 73 65 20 67 6c 6f 62 61 6c 20 76 61 72 20 74 6f 20 62 65 20 73 65 65 6e 20 69 6e ust.use.global.var.to.be.seen.in
33aa0 73 69 64 65 20 6f 66 20 6d 65 74 68 6f 64 20 62 65 6c 6f 77 0d 0a 0d 0a 64 65 66 20 64 6f 5f 6d side.of.method.below....def.do_m
33ac0 79 5f 74 68 69 6e 67 28 66 69 6c 65 6e 61 6d 65 29 0d 0a 20 20 20 20 64 65 76 2c 20 69 6e 6f 20 y_thing(filename)......dev,.ino.
33ae0 3d 20 46 69 6c 65 2e 73 74 61 74 28 66 69 6c 65 6e 61 6d 65 29 2e 64 65 76 2c 20 46 69 6c 65 2e =.File.stat(filename).dev,.File.
33b00 73 74 61 74 28 66 69 6c 65 6e 61 6d 65 29 2e 69 6e 6f 0d 0a 20 20 20 20 75 6e 6c 65 73 73 20 24 stat(filename).ino......unless.$
33b20 73 65 65 6e 5b 5b 64 65 76 2c 20 69 6e 6f 5d 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 64 6f 20 73 seen[[dev,.ino]]..........#.do.s
33b40 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 24 66 69 6c 65 6e 61 6d 65 20 62 65 63 61 75 73 65 20 omething.with.$filename.because.
33b60 77 65 20 68 61 76 65 6e 27 74 0d 0a 20 20 20 20 20 20 20 20 23 20 73 65 65 6e 20 69 74 20 62 65 we.haven't..........#.seen.it.be
33b80 66 6f 72 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 24 73 65 65 6e 5b 5b 64 65 76 2c 20 69 fore......end......$seen[[dev,.i
33ba0 6e 6f 5d 5d 20 3d 20 24 73 65 65 6e 5b 5b 64 65 76 2c 20 69 6e 6f 5d 5d 2e 74 6f 5f 69 20 2b 20 no]].=.$seen[[dev,.ino]].to_i.+.
33bc0 31 0d 0a 65 6e 64 0d 0a 0d 0a 66 69 6c 65 73 2e 65 61 63 68 20 64 6f 20 7c 66 69 6c 65 6e 61 6d 1..end....files.each.do.|filenam
33be0 65 7c 0d 0a 20 20 20 20 64 65 76 2c 20 69 6e 6f 20 3d 20 46 69 6c 65 2e 73 74 61 74 28 66 69 6c e|......dev,.ino.=.File.stat(fil
33c00 65 6e 61 6d 65 29 2e 64 65 76 2c 20 46 69 6c 65 2e 73 74 61 74 28 66 69 6c 65 6e 61 6d 65 29 2e ename).dev,.File.stat(filename).
33c20 69 6e 6f 0d 0a 20 20 20 20 69 66 20 21 24 73 65 65 6e 2e 68 61 73 5f 6b 65 79 3f 28 5b 64 65 76 ino......if.!$seen.has_key?([dev
33c40 2c 20 69 6e 6f 5d 29 0d 0a 20 20 20 20 20 20 20 20 24 73 65 65 6e 5b 5b 64 65 76 2c 20 69 6e 6f ,.ino])..........$seen[[dev,.ino
33c60 5d 5d 20 3d 20 5b 5d 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 24 73 65 65 6e 5b 5b 64 65 76 ]].=.[]......end......$seen[[dev
33c80 2c 20 69 6e 6f 5d 5d 2e 70 75 73 68 28 66 69 6c 65 6e 61 6d 65 29 0d 0a 65 6e 64 0d 0a 0d 0a 24 ,.ino]].push(filename)..end....$
33ca0 73 65 65 6e 2e 6b 65 79 73 2e 73 6f 72 74 2e 65 61 63 68 20 64 6f 20 7c 64 65 76 69 6e 6f 7c 0d seen.keys.sort.each.do.|devino|.
33cc0 0a 20 20 20 20 69 6e 6f 2c 20 64 65 76 20 3d 20 64 65 76 69 6e 6f 0d 0a 20 20 20 20 69 66 20 24 .....ino,.dev.=.devino......if.$
33ce0 73 65 65 6e 5b 64 65 76 69 6e 6f 5d 2e 6c 65 6e 67 74 68 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 seen[devino].length.>.1.........
33d00 20 23 20 24 73 65 65 6e 5b 64 65 76 69 6e 6f 5d 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 66 69 .#.$seen[devino].is.a.list.of.fi
33d20 6c 65 6e 61 6d 65 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 65 lenames.for.the.same.file......e
33d40 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 35 0d 0a 44 69 nd..end......#.@@PLEAC@@_9.5..Di
33d60 72 2e 6f 70 65 6e 28 64 69 72 6e 61 6d 65 29 20 64 6f 20 7c 64 69 72 7c 0d 0a 20 20 20 20 64 69 r.open(dirname).do.|dir|......di
33d80 72 2e 65 61 63 68 20 64 6f 20 7c 66 69 6c 65 7c 0d 0a 20 20 20 20 20 20 20 20 23 20 64 6f 20 73 r.each.do.|file|..........#.do.s
33da0 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 64 69 72 6e 61 6d 65 2f 66 69 6c 65 0d 0a 20 20 20 20 omething.with.dirname/file......
33dc0 20 20 20 20 70 75 74 73 20 66 69 6c 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 23 20 44 ....puts.file......end..end..#.D
33de0 69 72 2e 63 6c 6f 73 65 20 69 73 20 61 75 74 6f 6d 61 74 69 63 0d 0a 0d 0a 23 20 4e 6f 20 2d 54 ir.close.is.automatic....#.No.-T
33e00 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 20 52 75 62 79 0d 0a 0d 0a 64 69 72 2e 65 61 63 68 20 .equivalent.in.Ruby....dir.each.
33e20 64 6f 20 7c 66 69 6c 65 7c 0d 0a 20 20 20 20 6e 65 78 74 20 69 66 20 66 69 6c 65 20 3d 7e 20 2f do.|file|......next.if.file.=~./
33e40 5e 5c 2e 5c 2e 3f 24 2f 0d 0a 20 20 20 20 23 20 2e 2e 2e 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 ^\.\.?$/......#......end....def.
33e60 70 6c 61 69 6e 66 69 6c 65 73 28 64 69 72 29 0d 0a 20 20 20 20 64 68 20 3d 20 44 69 72 2e 6f 70 plainfiles(dir)......dh.=.Dir.op
33e80 65 6e 28 64 69 72 29 0d 0a 20 20 20 20 64 68 2e 65 6e 74 72 69 65 73 2e 67 72 65 70 28 2f 5e 5b en(dir)......dh.entries.grep(/^[
33ea0 5e 2e 5d 2f 29 2e 0d 0a 20 20 20 20 20 20 20 20 6d 61 70 20 20 20 20 20 20 7b 7c 66 69 6c 65 7c ^.]/)...........map......{|file|
33ec0 20 22 23 7b 64 69 72 7d 2f 23 7b 66 69 6c 65 7d 22 7d 2e 0d 0a 20 20 20 20 20 20 20 20 66 69 6e ."#{dir}/#{file}"}...........fin
33ee0 64 5f 61 6c 6c 20 7b 7c 66 69 6c 65 7c 20 74 65 73 74 28 3f 66 2c 20 66 69 6c 65 29 7d 2e 0d 0a d_all.{|file|.test(?f,.file)}...
33f00 20 20 20 20 20 20 20 20 73 6f 72 74 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 ........sort..end......#.@@PLEAC
33f20 40 40 5f 39 2e 36 0d 0a 6c 69 73 74 20 3d 20 44 69 72 2e 67 6c 6f 62 28 22 2a 2e 63 22 29 0d 0a @@_9.6..list.=.Dir.glob("*.c")..
33f40 0d 0a 64 69 72 20 3d 20 44 69 72 2e 6f 70 65 6e 28 70 61 74 68 29 0d 0a 66 69 6c 65 73 20 3d 20 ..dir.=.Dir.open(path)..files.=.
33f60 64 69 72 2e 65 6e 74 72 69 65 73 2e 67 72 65 70 28 2f 5c 2e 63 24 2f 29 0d 0a 64 69 72 2e 63 6c dir.entries.grep(/\.c$/)..dir.cl
33f80 6f 73 65 0d 0a 0d 0a 66 69 6c 65 73 20 3d 20 44 69 72 2e 67 6c 6f 62 28 22 2a 2e 63 22 29 0d 0a ose....files.=.Dir.glob("*.c")..
33fa0 66 69 6c 65 73 20 3d 20 44 69 72 2e 6f 70 65 6e 28 70 61 74 68 29 2e 65 6e 74 72 69 65 73 2e 67 files.=.Dir.open(path).entries.g
33fc0 72 65 70 28 2f 5c 2e 5b 63 68 5d 24 2f 69 29 0d 0a 0d 0a 64 69 72 20 3d 20 44 69 72 2e 6e 65 77 rep(/\.[ch]$/i)....dir.=.Dir.new
33fe0 28 70 61 74 68 29 0d 0a 66 69 6c 65 73 20 3d 20 64 69 72 2e 65 6e 74 72 69 65 73 2e 67 72 65 70 (path)..files.=.dir.entries.grep
34000 28 2f 5c 2e 5b 63 68 5d 24 2f 69 29 0d 0a 0d 0a 62 65 67 69 6e 0d 0a 20 20 64 20 3d 20 44 69 72 (/\.[ch]$/i)....begin....d.=.Dir
34020 2e 6f 70 65 6e 28 64 69 72 29 0d 0a 72 65 73 63 75 65 20 45 72 72 6e 6f 3a 3a 45 4e 4f 45 4e 54 .open(dir)..rescue.Errno::ENOENT
34040 0d 0a 20 20 72 61 69 73 65 20 22 43 6f 75 6c 64 6e 27 74 20 6f 70 65 6e 20 23 7b 64 69 72 7d 20 ....raise."Couldn't.open.#{dir}.
34060 66 6f 72 20 72 65 61 64 69 6e 67 3a 20 23 7b 24 21 7d 22 0d 0a 65 6e 64 0d 0a 0d 0a 66 69 6c 65 for.reading:.#{$!}"..end....file
34080 73 20 3d 20 5b 5d 0d 0a 64 2e 65 61 63 68 20 64 6f 20 7c 66 69 6c 65 7c 0d 0a 20 20 70 75 74 73 s.=.[]..d.each.do.|file|....puts
340a0 20 66 69 6c 65 0d 0a 20 20 6e 65 78 74 20 75 6e 6c 65 73 73 20 66 69 6c 65 20 3d 7e 20 2f 5c 2e .file....next.unless.file.=~./\.
340c0 5b 63 68 5d 24 2f 69 0d 0a 0d 0a 20 20 66 69 6c 65 6e 61 6d 65 20 3d 20 22 23 7b 64 69 72 7d 2f [ch]$/i......filename.=."#{dir}/
340e0 23 7b 66 69 6c 65 7d 22 0d 0a 20 20 23 20 54 68 65 72 65 20 69 73 20 6e 6f 20 2d 54 20 65 71 75 #{file}"....#.There.is.no.-T.equ
34100 69 76 61 6c 65 6e 74 20 69 6e 20 52 75 62 79 2c 20 62 75 74 20 77 65 20 63 61 6e 20 73 74 69 6c ivalent.in.Ruby,.but.we.can.stil
34120 6c 20 74 65 73 74 20 65 6d 70 74 69 6e 65 73 73 0d 0a 20 20 66 69 6c 65 73 2e 70 75 73 68 28 66 l.test.emptiness....files.push(f
34140 69 6c 65 6e 61 6d 65 29 20 69 66 20 74 65 73 74 28 3f 73 2c 20 66 69 6c 65 6e 61 6d 65 29 0d 0a ilename).if.test(?s,.filename)..
34160 65 6e 64 0d 0a 0d 0a 64 69 72 73 2e 65 6e 74 72 69 65 73 2e 67 72 65 70 28 2f 5e 5c 64 2b 24 2f end....dirs.entries.grep(/^\d+$/
34180 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 70 20 20 20 20 7b 20 7c 66 69 6c 65 7c )................map....{.|file|
341a0 20 5b 66 69 6c 65 2c 20 22 23 7b 70 61 74 68 7d 2f 23 7b 66 69 6c 65 7d 22 5d 7d 20 2e 0d 0a 20 .[file,."#{path}/#{file}"]}.....
341c0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 7b 20 7c 66 69 6c 65 7c 20 74 65 73 74 ............select.{.|file|.test
341e0 28 3f 64 2c 20 66 69 6c 65 5b 31 5d 29 20 7d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 73 (?d,.file[1]).}................s
34200 6f 72 74 20 20 20 7b 20 7c 61 2c 62 7c 20 20 61 5b 30 5d 20 3c 3d 3e 20 62 5b 30 5d 20 7d 2e 0d ort...{.|a,b|..a[0].<=>.b[0].}..
34220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 70 20 20 20 20 7b 20 7c 66 69 6c 65 7c 20 66 69 ..............map....{.|file|.fi
34240 6c 65 5b 31 5d 20 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 37 0d 0a 72 65 le[1].}......#.@@PLEAC@@_9.7..re
34260 71 75 69 72 65 20 27 66 69 6e 64 27 0d 0a 46 69 6e 64 2e 66 69 6e 64 28 64 69 72 6c 69 73 74 29 quire.'find'..Find.find(dirlist)
34280 20 64 6f 20 7c 66 69 6c 65 7c 0d 0a 20 20 23 20 64 6f 20 77 68 61 74 65 76 65 72 0d 0a 65 6e 64 .do.|file|....#.do.whatever..end
342a0 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6e 64 27 0d 0a 61 72 67 76 20 3d 20 41 52 47 56 2e ....require.'find'..argv.=.ARGV.
342c0 65 6d 70 74 79 3f 20 3f 20 25 77 7b 2e 7d 20 3a 20 41 52 47 56 0d 0a 46 69 6e 64 2e 66 69 6e 64 empty?.?.%w{.}.:.ARGV..Find.find
342e0 28 2a 61 72 67 76 29 20 64 6f 20 7c 66 69 6c 65 7c 0d 0a 20 20 70 72 69 6e 74 20 66 69 6c 65 2c (*argv).do.|file|....print.file,
34300 20 28 74 65 73 74 28 3f 64 2c 20 66 69 6c 65 29 20 3f 20 22 2f 5c 6e 22 20 3a 20 22 5c 6e 22 29 .(test(?d,.file).?."/\n".:."\n")
34320 0d 0a 65 6e 64 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6e 64 27 0d 0a 61 72 67 76 20 3d 20 ..end....require.'find'..argv.=.
34340 41 52 47 56 2e 65 6d 70 74 79 3f 20 3f 20 25 77 7b 2e 7d 20 3a 20 41 52 47 56 0d 0a 73 75 6d 20 ARGV.empty?.?.%w{.}.:.ARGV..sum.
34360 3d 20 30 0d 0a 46 69 6e 64 2e 66 69 6e 64 28 2a 61 72 67 76 29 20 64 6f 20 7c 66 69 6c 65 7c 0d =.0..Find.find(*argv).do.|file|.
34380 0a 20 20 73 69 7a 65 20 3d 20 74 65 73 74 28 3f 73 2c 20 66 69 6c 65 29 20 7c 7c 20 30 0d 0a 20 ...size.=.test(?s,.file).||.0...
343a0 20 73 75 6d 20 2b 3d 20 73 69 7a 65 0d 0a 65 6e 64 0d 0a 70 75 74 73 20 22 23 7b 61 72 67 76 2e .sum.+=.size..end..puts."#{argv.
343c0 6a 6f 69 6e 28 27 20 27 29 7d 20 63 6f 6e 74 61 69 6e 73 20 23 7b 73 75 6d 7d 20 62 79 74 65 73 join('.')}.contains.#{sum}.bytes
343e0 22 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6e 64 27 0d 0a 61 72 67 76 20 3d 20 41 52 47 56 "....require.'find'..argv.=.ARGV
34400 2e 65 6d 70 74 79 3f 20 3f 20 25 77 7b 2e 7d 20 3a 20 41 52 47 56 0d 0a 73 61 76 65 64 5f 73 69 .empty?.?.%w{.}.:.ARGV..saved_si
34420 7a 65 2c 20 73 61 76 65 64 5f 6e 61 6d 65 20 3d 20 2d 31 2c 20 22 22 0d 0a 46 69 6e 64 2e 66 69 ze,.saved_name.=.-1,.""..Find.fi
34440 6e 64 28 2a 61 72 67 76 29 20 64 6f 20 7c 66 69 6c 65 7c 0d 0a 20 20 73 69 7a 65 20 3d 20 74 65 nd(*argv).do.|file|....size.=.te
34460 73 74 28 3f 73 2c 20 66 69 6c 65 29 20 7c 7c 20 30 0d 0a 20 20 6e 65 78 74 20 75 6e 6c 65 73 73 st(?s,.file).||.0....next.unless
34480 20 74 65 73 74 28 3f 66 2c 20 66 69 6c 65 29 20 26 26 20 73 69 7a 65 20 3e 20 73 61 76 65 64 5f .test(?f,.file).&&.size.>.saved_
344a0 73 69 7a 65 0d 0a 20 20 73 61 76 65 64 5f 73 69 7a 65 20 3d 20 73 69 7a 65 0d 0a 20 20 73 61 76 size....saved_size.=.size....sav
344c0 65 64 5f 6e 61 6d 65 20 3d 20 66 69 6c 65 0d 0a 65 6e 64 0d 0a 70 75 74 73 20 22 42 69 67 67 65 ed_name.=.file..end..puts."Bigge
344e0 73 74 20 66 69 6c 65 20 23 7b 73 61 76 65 64 5f 6e 61 6d 65 7d 20 69 6e 20 23 7b 61 72 67 76 2e st.file.#{saved_name}.in.#{argv.
34500 6a 6f 69 6e 28 27 20 27 29 7d 20 69 73 20 23 7b 73 61 76 65 64 5f 73 69 7a 65 7d 22 0d 0a 0d 0a join('.')}.is.#{saved_size}"....
34520 72 65 71 75 69 72 65 20 27 66 69 6e 64 27 0d 0a 61 72 67 76 20 3d 20 41 52 47 56 2e 65 6d 70 74 require.'find'..argv.=.ARGV.empt
34540 79 3f 20 3f 20 25 77 7b 2e 7d 20 3a 20 41 52 47 56 0d 0a 61 67 65 2c 20 6e 61 6d 65 20 3d 20 6e y?.?.%w{.}.:.ARGV..age,.name.=.n
34560 69 6c 0d 0a 46 69 6e 64 2e 66 69 6e 64 28 2a 61 72 67 76 29 20 64 6f 20 7c 66 69 6c 65 7c 0d 0a il..Find.find(*argv).do.|file|..
34580 20 20 6d 74 69 6d 65 20 3d 20 46 69 6c 65 2e 73 74 61 74 28 66 69 6c 65 29 2e 6d 74 69 6d 65 0d ..mtime.=.File.stat(file).mtime.
345a0 0a 20 20 6e 65 78 74 20 69 66 20 61 67 65 20 26 26 20 61 67 65 20 3e 20 6d 74 69 6d 65 0d 0a 20 ...next.if.age.&&.age.>.mtime...
345c0 20 61 67 65 20 3d 20 6d 74 69 6d 65 0d 0a 20 20 6e 61 6d 65 20 3d 20 66 69 6c 65 0d 0a 65 6e 64 .age.=.mtime....name.=.file..end
345e0 0d 0a 70 75 74 73 20 22 23 7b 6e 61 6d 65 7d 20 23 7b 61 67 65 7d 22 0d 0a 0d 0a 23 2d 2d 2d 2d ..puts."#{name}.#{age}"....#----
34600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 -------------------------..#!/us
34620 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 66 64 69 72 73 20 2d 20 66 69 6e 64 20 61 6c r/bin/ruby.-w..#.fdirs.-.find.al
34640 6c 20 64 69 72 65 63 74 6f 72 69 65 73 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6e 64 27 0d 0a 61 l.directories..require.'find'..a
34660 72 67 76 20 3d 20 41 52 47 56 2e 65 6d 70 74 79 3f 20 3f 20 25 77 7b 2e 7d 20 3a 20 41 52 47 56 rgv.=.ARGV.empty?.?.%w{.}.:.ARGV
34680 0d 0a 46 69 6c 65 2e 66 69 6e 64 28 2a 61 72 67 76 29 20 7b 20 7c 66 69 6c 65 7c 20 70 75 74 73 ..File.find(*argv).{.|file|.puts
346a0 20 66 69 6c 65 20 69 66 20 74 65 73 74 28 3f 64 2c 20 66 69 6c 65 29 20 7d 0d 0a 23 2d 2d 2d 2d .file.if.test(?d,.file).}..#----
346c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 23 -------------------------......#
346e0 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 38 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6c 65 75 74 69 .@@PLEAC@@_9.8..require.'fileuti
34700 6c 73 27 0d 0a 0d 0a 70 75 74 73 20 22 55 73 61 67 65 20 23 7b 24 30 7d 20 64 69 72 20 2e 2e 2e ls'....puts."Usage.#{$0}.dir....
34720 22 20 69 66 20 41 52 47 56 2e 65 6d 70 74 79 3f 0d 0a 41 52 47 56 2e 65 61 63 68 20 64 6f 20 7c ".if.ARGV.empty?..ARGV.each.do.|
34740 64 69 72 7c 0d 0a 20 20 46 69 6c 65 55 74 69 6c 73 2e 72 6d 74 72 65 65 28 64 69 72 29 0d 0a 65 dir|....FileUtils.rmtree(dir)..e
34760 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 39 0d 0a 72 65 71 75 69 72 65 nd......#.@@PLEAC@@_9.9..require
34780 20 27 66 74 6f 6f 6c 73 27 0d 0a 6e 61 6d 65 73 2e 65 61 63 68 20 64 6f 20 7c 66 69 6c 65 7c 0d .'ftools'..names.each.do.|file|.
347a0 0a 20 20 6e 65 77 6e 61 6d 65 20 3d 20 66 69 6c 65 0d 0a 20 20 62 65 67 69 6e 0d 0a 20 20 20 20 ...newname.=.file....begin......
347c0 46 69 6c 65 2e 6d 6f 76 65 28 66 69 6c 65 2c 20 6e 65 77 6e 61 6d 65 29 0d 0a 20 20 72 65 73 63 File.move(file,.newname)....resc
347e0 75 65 20 45 72 72 6e 6f 3a 3a 45 50 45 52 4d 0d 0a 20 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 ue.Errno::EPERM......$stderr.put
34800 73 20 22 43 6f 75 6c 64 6e 27 74 20 72 65 6e 61 6d 65 20 23 7b 66 69 6c 65 7d 20 74 6f 20 23 7b s."Couldn't.rename.#{file}.to.#{
34820 6e 65 77 6e 61 6d 65 7d 3a 20 23 7b 24 21 7d 22 0d 0a 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a newname}:.#{$!}"....end..end....
34840 72 65 71 75 69 72 65 20 27 66 74 6f 6f 6c 73 27 0d 0a 6f 70 20 3d 20 41 52 47 56 2e 65 6d 70 74 require.'ftools'..op.=.ARGV.empt
34860 79 3f 20 3f 20 28 72 61 69 73 65 20 22 55 73 61 67 65 3a 20 72 65 6e 61 6d 65 20 65 78 70 72 20 y?.?.(raise."Usage:.rename.expr.
34880 5b 66 69 6c 65 73 5d 5c 6e 22 29 20 3a 20 41 52 47 56 2e 73 68 69 66 74 0d 0a 61 72 67 76 20 3d [files]\n").:.ARGV.shift..argv.=
348a0 20 41 52 47 56 2e 65 6d 70 74 79 3f 20 3f 20 24 73 74 64 69 6e 2e 72 65 61 64 6c 69 6e 65 73 2e .ARGV.empty?.?.$stdin.readlines.
348c0 6d 61 70 20 7b 20 7c 66 7c 20 66 2e 63 68 6f 6d 70 20 7d 20 3a 20 41 52 47 56 0d 0a 61 72 67 76 map.{.|f|.f.chomp.}.:.ARGV..argv
348e0 2e 65 61 63 68 20 64 6f 20 7c 66 69 6c 65 7c 0d 0a 20 20 77 61 73 20 3d 20 66 69 6c 65 0d 0a 20 .each.do.|file|....was.=.file...
34900 20 66 69 6c 65 20 3d 20 65 76 61 6c 28 22 66 69 6c 65 2e 23 7b 6f 70 7d 22 29 0d 0a 20 20 46 69 .file.=.eval("file.#{op}")....Fi
34920 6c 65 2e 6d 6f 76 65 28 77 61 73 2c 20 66 69 6c 65 29 20 75 6e 6c 65 73 73 20 77 61 73 20 3d 3d le.move(was,.file).unless.was.==
34940 20 66 69 6c 65 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 31 30 .file..end......#.@@PLEAC@@_9.10
34960 0d 0a 62 61 73 65 20 3d 20 46 69 6c 65 2e 62 61 73 65 6e 61 6d 65 28 70 61 74 68 29 0d 0a 64 69 ..base.=.File.basename(path)..di
34980 72 20 20 3d 20 46 69 6c 65 2e 64 69 72 6e 61 6d 65 28 70 61 74 68 29 0d 0a 23 20 72 75 62 79 20 r..=.File.dirname(path)..#.ruby.
349a0 68 61 73 20 6e 6f 20 66 69 6c 65 70 61 72 73 65 20 65 71 75 69 76 61 6c 65 6e 74 0d 0a 64 69 72 has.no.fileparse.equivalent..dir
349c0 2c 20 62 61 73 65 20 3d 20 46 69 6c 65 2e 73 70 6c 69 74 28 70 61 74 68 29 0d 0a 65 78 74 20 3d ,.base.=.File.split(path)..ext.=
349e0 20 62 61 73 65 2e 73 63 61 6e 28 2f 5c 2e 2e 2a 24 2f 29 2e 74 6f 5f 73 0d 0a 0d 0a 70 61 74 68 .base.scan(/\..*$/).to_s....path
34a00 20 3d 20 27 2f 75 73 72 2f 6c 69 62 2f 6c 69 62 63 2e 61 27 0d 0a 66 69 6c 65 20 3d 20 46 69 6c .=.'/usr/lib/libc.a'..file.=.Fil
34a20 65 2e 62 61 73 65 6e 61 6d 65 28 70 61 74 68 29 0d 0a 64 69 72 20 20 3d 20 46 69 6c 65 2e 64 69 e.basename(path)..dir..=.File.di
34a40 72 6e 61 6d 65 28 70 61 74 68 29 0d 0a 0d 0a 70 75 74 73 20 22 64 69 72 20 69 73 20 23 7b 64 69 rname(path)....puts."dir.is.#{di
34a60 72 7d 2c 20 66 69 6c 65 20 69 73 20 23 7b 66 69 6c 65 7d 22 0d 0a 23 20 64 69 72 20 69 73 20 2f r},.file.is.#{file}"..#.dir.is./
34a80 75 73 72 2f 6c 69 62 2c 20 66 69 6c 65 20 69 73 20 6c 69 62 63 2e 61 0d 0a 0d 0a 70 61 74 68 20 usr/lib,.file.is.libc.a....path.
34aa0 3d 20 27 2f 75 73 72 2f 6c 69 62 2f 6c 69 62 63 2e 61 27 0d 0a 64 69 72 2c 20 66 69 6c 65 6e 61 =.'/usr/lib/libc.a'..dir,.filena
34ac0 6d 65 20 3d 20 46 69 6c 65 2e 73 70 6c 69 74 28 70 61 74 68 29 0d 0a 6e 61 6d 65 2c 20 65 78 74 me.=.File.split(path)..name,.ext
34ae0 20 3d 20 66 69 6c 65 6e 61 6d 65 2e 73 70 6c 69 74 28 2f 28 3f 3d 5c 2e 29 2f 29 0d 0a 70 75 74 .=.filename.split(/(?=\.)/)..put
34b00 73 20 22 64 69 72 20 69 73 20 23 7b 64 69 72 7d 2c 20 6e 61 6d 65 20 69 73 20 23 7b 6e 61 6d 65 s."dir.is.#{dir},.name.is.#{name
34b20 7d 2c 20 65 78 74 20 69 73 20 23 7b 65 78 74 7d 22 0d 0a 23 20 20 20 4e 4f 54 45 3a 20 54 68 65 },.ext.is.#{ext}"..#...NOTE:.The
34b40 20 52 75 62 79 20 63 6f 64 65 20 70 72 69 6e 74 73 0d 0a 23 20 20 20 64 69 72 20 69 73 20 2f 75 .Ruby.code.prints..#...dir.is./u
34b60 73 72 2f 6c 69 62 2c 20 6e 61 6d 65 20 69 73 20 6c 69 62 63 2c 20 65 78 74 65 6e 73 69 6f 6e 20 sr/lib,.name.is.libc,.extension.
34b80 69 73 20 2e 61 0d 0a 23 20 20 20 20 20 77 68 69 6c 65 20 74 68 65 20 50 65 72 6c 20 63 6f 64 65 is..a..#.....while.the.Perl.code
34ba0 20 70 72 69 6e 74 73 20 61 20 27 2f 27 20 61 66 74 65 72 20 74 68 65 20 64 69 72 65 63 74 6f 72 .prints.a.'/'.after.the.director
34bc0 79 20 6e 61 6d 65 0d 0a 23 20 20 20 64 69 72 20 69 73 20 2f 75 73 72 2f 6c 69 62 2f 2c 20 6e 61 y.name..#...dir.is./usr/lib/,.na
34be0 6d 65 20 69 73 20 6c 69 62 63 2c 20 65 78 74 65 6e 73 69 6f 6e 20 69 73 20 2e 61 0d 0a 0d 0a 23 me.is.libc,.extension.is..a....#
34c00 20 4e 6f 20 66 69 6c 65 70 61 72 73 65 5f 73 65 74 5f 66 73 74 79 70 65 28 29 20 65 71 75 69 76 .No.fileparse_set_fstype().equiv
34c20 61 6c 65 6e 74 20 69 6e 20 72 75 62 79 0d 0a 0d 0a 64 65 66 20 65 78 74 65 6e 73 69 6f 6e 28 70 alent.in.ruby....def.extension(p
34c40 61 74 68 29 0d 0a 20 20 20 20 65 78 74 20 3d 20 70 61 74 68 2e 73 63 61 6e 28 2f 5c 2e 2e 2a 24 ath)......ext.=.path.scan(/\..*$
34c60 2f 29 2e 74 6f 5f 73 0d 0a 20 20 20 20 65 78 74 2e 73 75 62 28 2f 5e 5c 2e 2f 2c 20 22 22 29 0d /).to_s......ext.sub(/^\./,."").
34c80 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 31 31 0d 0a 23 2d 2d 2d .end......#.@@PLEAC@@_9.11..#---
34ca0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 --------------------------..#!/u
34cc0 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 73 79 6d 69 72 72 6f 72 20 2d 20 62 75 69 sr/bin/ruby.-w..#.symirror.-.bui
34ce0 6c 64 20 73 70 65 63 74 72 61 6c 20 66 6f 72 65 73 74 20 6f 66 20 73 79 6d 6c 69 6e 6b 73 0d 0a ld.spectral.forest.of.symlinks..
34d00 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6e 64 27 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6c 65 75 ..require.'find'..require.'fileu
34d20 74 69 6c 73 27 0d 0a 0d 0a 72 61 69 73 65 20 22 75 73 61 67 65 3a 20 23 7b 24 30 7d 20 72 65 61 tils'....raise."usage:.#{$0}.rea
34d40 6c 64 69 72 20 6d 69 72 72 6f 72 64 69 72 22 20 75 6e 6c 65 73 73 20 41 52 47 56 2e 73 69 7a 65 ldir.mirrordir".unless.ARGV.size
34d60 20 3d 3d 20 32 0d 0a 0d 0a 73 72 63 64 69 72 2c 64 73 74 64 69 72 20 3d 20 41 52 47 56 0d 0a 73 .==.2....srcdir,dstdir.=.ARGV..s
34d80 72 63 6d 6f 64 65 20 3d 20 46 69 6c 65 3a 3a 73 74 61 74 28 73 72 63 64 69 72 29 2e 6d 6f 64 65 rcmode.=.File::stat(srcdir).mode
34da0 0d 0a 44 69 72 2e 6d 6b 64 69 72 28 64 73 74 64 69 72 2c 20 73 72 63 6d 6f 64 65 20 26 20 30 37 ..Dir.mkdir(dstdir,.srcmode.&.07
34dc0 37 37 37 29 20 75 6e 6c 65 73 73 20 74 65 73 74 28 3f 64 2c 20 64 73 74 64 69 72 29 0d 0a 0d 0a 777).unless.test(?d,.dstdir)....
34de0 23 20 66 69 78 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 73 0d 0a 44 69 72 2e 63 68 64 69 72 28 #.fix.relative.paths..Dir.chdir(
34e00 73 72 63 64 69 72 29 20 7b 73 72 63 64 69 72 20 3d 20 44 69 72 2e 70 77 64 7d 0d 0a 44 69 72 2e srcdir).{srcdir.=.Dir.pwd}..Dir.
34e20 63 68 64 69 72 28 64 73 74 64 69 72 29 20 7b 64 73 74 64 69 72 20 3d 20 44 69 72 2e 70 77 64 7d chdir(dstdir).{dstdir.=.Dir.pwd}
34e40 0d 0a 0d 0a 46 69 6e 64 2e 66 69 6e 64 28 73 72 63 64 69 72 29 20 64 6f 20 7c 73 72 63 66 69 6c ....Find.find(srcdir).do.|srcfil
34e60 65 7c 0d 0a 20 20 20 20 69 66 20 74 65 73 74 28 3f 64 2c 20 73 72 63 66 69 6c 65 29 0d 0a 20 20 e|......if.test(?d,.srcfile)....
34e80 20 20 20 20 20 20 64 65 73 74 20 3d 20 73 72 63 66 69 6c 65 2e 73 75 62 28 2f 5e 23 7b 73 72 63 ......dest.=.srcfile.sub(/^#{src
34ea0 64 69 72 7d 2f 2c 20 64 73 74 64 69 72 29 0d 0a 20 20 20 20 20 20 20 20 64 6d 6f 64 65 20 3d 20 dir}/,.dstdir)..........dmode.=.
34ec0 46 69 6c 65 3a 3a 73 74 61 74 28 73 72 63 66 69 6c 65 29 2e 6d 6f 64 65 20 26 20 30 37 37 37 37 File::stat(srcfile).mode.&.07777
34ee0 0d 0a 20 20 20 20 20 20 20 20 44 69 72 2e 6d 6b 64 69 72 28 64 65 73 74 2c 20 64 6d 6f 64 65 29 ..........Dir.mkdir(dest,.dmode)
34f00 20 75 6e 6c 65 73 73 20 74 65 73 74 28 3f 64 2c 20 64 65 73 74 29 0d 0a 20 20 20 20 20 20 20 20 .unless.test(?d,.dest)..........
34f20 61 20 3d 20 44 69 72 5b 22 23 7b 73 72 63 66 69 6c 65 7d 2f 2a 22 5d 2e 72 65 6a 65 63 74 7b 7c a.=.Dir["#{srcfile}/*"].reject{|
34f40 66 7c 20 74 65 73 74 28 3f 64 2c 20 66 29 7d 0d 0a 20 20 20 20 20 20 20 20 46 69 6c 65 55 74 69 f|.test(?d,.f)}..........FileUti
34f60 6c 73 2e 6c 6e 5f 73 28 61 2c 20 64 65 73 74 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a ls.ln_s(a,.dest)......end..end..
34f80 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 39 2e 31 32 0d 0a 23 20 77 65 20 75 73 65 20 74 ....#.@@PLEAC@@_9.12..#.we.use.t
34fa0 68 65 20 47 65 74 6f 70 74 2f 44 65 63 6c 61 72 65 20 6c 69 62 72 61 72 79 20 68 65 72 65 20 66 he.Getopt/Declare.library.here.f
34fc0 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 3a 0d 0a 23 20 20 20 68 74 74 70 3a 2f 2f 72 61 61 2e or.convenience:..#...http://raa.
34fe0 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 2f 70 72 6f 6a 65 63 74 2f 67 65 74 6f 70 74 64 65 63 6c ruby-lang.org/project/getoptdecl
35000 61 72 65 2f 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d are/..#-------------------------
35020 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 6c 73 74 20 ----..#!/usr/bin/ruby.-w..#.lst.
35040 2d 20 6c 69 73 74 20 73 6f 72 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 65 6e 74 73 -.list.sorted.directory.contents
35060 20 28 64 65 70 74 68 20 66 69 72 73 74 29 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 66 69 6e 64 27 .(depth.first)....require.'find'
35080 0d 0a 72 65 71 75 69 72 65 20 27 65 74 63 27 0d 0a 72 65 71 75 69 72 65 20 22 47 65 74 6f 70 74 ..require.'etc'..require."Getopt
350a0 2f 44 65 63 6c 61 72 65 22 0d 0a 0d 0a 23 20 4e 6f 74 65 3a 20 69 6e 20 74 68 65 20 6f 70 74 69 /Declare"....#.Note:.in.the.opti
350c0 6f 6e 2d 73 70 65 63 20 62 65 6c 6f 77 20 74 68 65 72 65 20 6d 75 73 74 20 62 79 20 61 74 20 6c on-spec.below.there.must.by.at.l
350e0 65 61 73 74 20 6f 6e 65 20 68 61 72 64 0d 0a 23 20 74 61 62 20 69 6e 20 62 65 74 77 65 65 6e 20 east.one.hard..#.tab.in.between.
35100 65 61 63 68 20 2d 6f 70 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 64 65 73 63 72 69 70 74 69 6f 6e each.-option.and.its.description
35120 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 0d 0a 23 20 20 20 20 2d 69 20 3c 74 61 62 3e 20 72 65 61 ..For.example..#....-i.<tab>.rea
35140 64 20 66 72 6f 6d 20 73 74 64 69 6e 0d 0a 0d 0a 6f 70 74 73 20 3d 20 47 65 74 6f 70 74 3a 3a 44 d.from.stdin....opts.=.Getopt::D
35160 65 63 6c 61 72 65 2e 6e 65 77 28 3c 3c 27 45 4f 50 41 52 41 4d 27 29 0d 0a 20 20 20 20 3d 3d 3d eclare.new(<<'EOPARAM')......===
35180 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 20 20 20 20 49 6e 70 75 74 20 46 6f 72 6d 61 74 3a 0d 0a 20 20 =========......Input.Format:....
351a0 20 20 20 20 20 20 2d 69 09 72 65 61 64 20 66 72 6f 6d 20 73 74 64 69 6e 0d 0a 20 20 20 20 3d 3d ......-i.read.from.stdin......==
351c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 20 20 20 20 4f 75 74 70 75 74 20 46 6f 72 6d 61 74 3a 0d 0a ==========......Output.Format:..
351e0 20 20 20 20 20 20 20 20 2d 6c 09 6c 6f 6e 67 20 6c 69 73 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 ........-l.long.listing.........
35200 20 2d 72 09 72 65 76 65 72 73 65 20 6c 69 73 74 69 6e 67 0d 0a 20 20 20 20 3d 3d 3d 3d 3d 3d 3d .-r.reverse.listing......=======
35220 3d 3d 3d 3d 3d 0d 0a 20 20 20 20 53 6f 72 74 20 6f 6e 3a 20 28 6f 6e 65 20 6f 66 29 0d 0a 20 20 =====......Sort.on:.(one.of)....
35240 20 20 20 20 20 20 2d 6d 09 6d 74 69 6d 65 20 28 6d 6f 64 69 66 79 20 74 69 6d 65 20 2d 20 64 65 ......-m.mtime.(modify.time.-.de
35260 66 61 75 6c 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 73 6f 72 74 5f 63 fault)..................{$sort_c
35280 72 69 74 65 72 69 61 20 3d 20 3a 6d 74 69 6d 65 7d 0d 0a 20 20 20 20 20 20 20 20 2d 75 09 61 74 riteria.=.:mtime}..........-u.at
352a0 69 6d 65 20 28 61 63 63 65 73 73 20 74 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ime.(access.time)...............
352c0 20 20 20 7b 24 73 6f 72 74 5f 63 72 69 74 65 72 69 61 20 3d 20 3a 61 74 69 6d 65 7d 0d 0a 20 20 ...{$sort_criteria.=.:atime}....
352e0 20 20 20 20 20 20 2d 63 09 63 74 69 6d 65 20 28 69 6e 6f 64 65 20 63 68 61 6e 67 65 20 74 69 6d ......-c.ctime.(inode.change.tim
35300 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 73 6f 72 74 5f 63 72 69 74 65 e)..................{$sort_crite
35320 72 69 61 20 3d 20 3a 63 74 69 6d 65 7d 0d 0a 20 20 20 20 20 20 20 20 2d 73 09 73 69 7a 65 0d 0a ria.=.:ctime}..........-s.size..
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 73 6f 72 74 5f 63 72 69 74 65 72 69 61 20 ................{$sort_criteria.
35360 3d 20 3a 73 69 7a 65 7d 0d 0a 20 20 20 20 20 20 20 20 5b 6d 75 74 65 78 3a 20 2d 6d 20 2d 75 20 =.:size}..........[mutex:.-m.-u.
35380 2d 63 20 2d 73 5d 0d 0a 0d 0a 45 4f 50 41 52 41 4d 0d 0a 0d 0a 24 73 6f 72 74 5f 63 72 69 74 65 -c.-s]....EOPARAM....$sort_crite
353a0 72 69 61 20 7c 7c 3d 20 3a 6d 74 69 6d 65 0d 0a 66 69 6c 65 73 20 3d 20 7b 7d 0d 0a 44 49 52 53 ria.||=.:mtime..files.=.{}..DIRS
353c0 20 3d 20 6f 70 74 73 5b 27 2d 69 27 5d 20 3f 20 24 73 74 64 69 6e 2e 72 65 61 64 6c 69 6e 65 73 .=.opts['-i'].?.$stdin.readlines
353e0 2e 6d 61 70 7b 7c 66 7c 66 2e 63 68 6f 6d 70 21 7d 20 3a 20 41 52 47 56 0d 0a 44 49 52 53 2e 65 .map{|f|f.chomp!}.:.ARGV..DIRS.e
35400 61 63 68 20 64 6f 20 7c 64 69 72 7c 0d 0a 20 20 20 20 46 69 6e 64 2e 66 69 6e 64 28 64 69 72 29 ach.do.|dir|......Find.find(dir)
35420 20 64 6f 20 7c 65 6e 74 7c 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 73 5b 65 6e 74 5d 20 3d 20 .do.|ent|..........files[ent].=.
35440 46 69 6c 65 3a 3a 73 74 61 74 28 65 6e 74 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 65 File::stat(ent)......end..end..e
35460 6e 74 72 69 65 73 20 3d 20 66 69 6c 65 73 2e 6b 65 79 73 2e 73 6f 72 74 5f 62 79 7b 7c 66 7c 20 ntries.=.files.keys.sort_by{|f|.
35480 66 69 6c 65 73 5b 66 5d 2e 73 65 6e 64 28 24 73 6f 72 74 5f 63 72 69 74 65 72 69 61 29 7d 0d 0a files[f].send($sort_criteria)}..
354a0 65 6e 74 72 69 65 73 20 3d 20 65 6e 74 72 69 65 73 2e 72 65 76 65 72 73 65 20 75 6e 6c 65 73 73 entries.=.entries.reverse.unless
354c0 20 6f 70 74 73 5b 27 2d 72 27 5d 0d 0a 0d 0a 65 6e 74 72 69 65 73 2e 65 61 63 68 20 64 6f 20 7c .opts['-r']....entries.each.do.|
354e0 65 6e 74 7c 0d 0a 20 20 20 20 75 6e 6c 65 73 73 20 6f 70 74 73 5b 27 2d 6c 27 5d 0d 0a 20 20 20 ent|......unless.opts['-l'].....
35500 20 20 20 20 20 70 75 74 73 20 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 6e 65 78 74 0d 0a 20 20 20 .....puts.ent..........next.....
35520 20 65 6e 64 0d 0a 20 20 20 20 73 74 61 74 73 20 3d 20 66 69 6c 65 73 5b 65 6e 74 5d 0d 0a 20 20 .end......stats.=.files[ent]....
35540 20 20 66 74 69 6d 65 20 3d 20 73 74 61 74 73 2e 73 65 6e 64 28 24 73 6f 72 74 5f 63 72 69 74 65 ..ftime.=.stats.send($sort_crite
35560 72 69 61 20 3d 3d 20 3a 73 69 7a 65 20 3f 20 3a 6d 74 69 6d 65 20 3a 20 24 73 6f 72 74 5f 63 72 ria.==.:size.?.:mtime.:.$sort_cr
35580 69 74 65 72 69 61 29 0d 0a 20 20 20 20 70 72 69 6e 74 66 20 22 25 36 64 20 25 30 34 6f 20 25 36 iteria)......printf."%6d.%04o.%6
355a0 64 20 25 38 73 20 25 38 73 20 25 38 64 20 25 73 20 25 73 5c 6e 22 2c 0d 0a 20 20 20 20 20 20 20 d.%8s.%8s.%8d.%s.%s\n",.........
355c0 20 73 74 61 74 73 2e 69 6e 6f 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 61 74 73 2e 6d 6f 64 65 20 .stats.ino,..........stats.mode.
355e0 26 20 30 37 37 37 37 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 61 74 73 2e 6e 6c 69 6e 6b 2c 0d 0a &.07777,..........stats.nlink,..
35600 20 20 20 20 20 20 20 20 45 54 43 3a 3a 50 41 53 53 57 44 5b 73 74 61 74 73 2e 75 69 64 5d 2e 6e ........ETC::PASSWD[stats.uid].n
35620 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 45 54 43 3a 3a 47 52 4f 55 50 5b 73 74 61 74 73 2e 67 ame,..........ETC::GROUP[stats.g
35640 69 64 5d 2e 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 61 74 73 2e 73 69 7a 65 2c 0d 0a id].name,..........stats.size,..
35660 20 20 20 20 20 20 20 20 66 74 69 6d 65 2e 73 74 72 66 74 69 6d 65 28 22 25 61 20 25 62 20 25 64 ........ftime.strftime("%a.%b.%d
35680 20 25 48 3a 25 4d 3a 25 53 20 25 59 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 65 6e 74 0d 0a 65 6e .%H:%M:%S.%Y"),..........ent..en
356a0 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 30 0d 0a 64 65 66 20 68 65 6c d......#.@@PLEAC@@_10.0..def.hel
356c0 6c 6f 0d 0a 20 20 20 20 24 67 72 65 65 74 65 64 20 2b 3d 20 31 20 20 20 20 20 20 23 20 69 6e 20 lo......$greeted.+=.1......#.in.
356e0 52 75 62 79 2c 20 61 20 76 61 72 69 61 62 6c 65 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 Ruby,.a.variable.beginning.with.
35700 24 20 69 73 20 67 6c 6f 62 61 6c 20 28 63 61 6e 20 62 65 20 61 6e 79 20 74 79 70 65 20 6f 66 20 $.is.global.(can.be.any.type.of.
35720 63 6f 75 72 73 65 29 0d 0a 20 20 20 20 70 75 74 73 20 22 68 69 20 74 68 65 72 65 21 22 0d 0a 65 course)......puts."hi.there!"..e
35740 6e 64 0d 0a 0d 0a 23 20 57 65 20 6e 65 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 24 67 nd....#.We.need.to.initialize.$g
35760 72 65 65 74 65 64 20 62 65 66 6f 72 65 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 2c 20 62 65 reeted.before.it.can.be.used,.be
35780 63 61 75 73 65 20 22 2b 3d 22 20 69 73 20 77 61 69 74 69 6e 67 20 61 20 4e 75 6d 65 72 69 63 20 cause."+=".is.waiting.a.Numeric.
357a0 6f 62 6a 65 63 74 0d 0a 24 67 72 65 65 74 65 64 20 3d 20 30 0d 0a 68 65 6c 6c 6f 20 20 20 20 20 object..$greeted.=.0..hello.....
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6e 6f 74 65 20 74 68 61 74 20 61 70 70 65 6e 64 69 .............#.note.that.appendi
357e0 6e 67 20 28 29 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 63 61 ng.().is.optional.to.function.ca
35800 6c 6c 73 20 77 69 74 68 20 6e 6f 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 0d 0a 0d 0a 23 20 40 40 lls.with.no.parameters......#.@@
35820 50 4c 45 41 43 40 40 5f 31 30 2e 31 0d 0a 23 20 49 6e 20 52 75 62 79 2c 20 70 61 72 61 6d 65 74 PLEAC@@_10.1..#.In.Ruby,.paramet
35840 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 6e 79 77 61 79 0d 0a 64 65 66 20 68 79 70 6f 74 65 ers.are.named.anyway..def.hypote
35860 6e 75 73 65 28 73 69 64 65 31 2c 20 73 69 64 65 32 29 0d 0a 20 20 20 20 4d 61 74 68 2e 73 71 72 nuse(side1,.side2)......Math.sqr
35880 74 28 73 69 64 65 31 2a 2a 32 20 2b 20 73 69 64 65 32 2a 2a 32 29 20 20 20 20 23 20 74 68 65 20 t(side1**2.+.side2**2)....#.the.
358a0 73 71 72 74 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 4d 61 74 sqrt.function.comes.from.the.Mat
358c0 68 20 6d 6f 64 75 6c 65 0d 0a 65 6e 64 0d 0a 64 69 61 67 20 3d 20 68 79 70 6f 74 65 6e 75 73 65 h.module..end..diag.=.hypotenuse
358e0 28 33 2c 20 34 29 0d 0a 0d 0a 70 75 74 73 20 68 79 70 6f 74 65 6e 75 73 65 28 33 2c 20 34 29 0d (3,.4)....puts.hypotenuse(3,.4).
35900 0a 0d 0a 61 20 3d 20 5b 33 2c 20 34 5d 0d 0a 70 72 69 6e 74 20 68 79 70 6f 74 65 6e 75 73 65 28 ...a.=.[3,.4]..print.hypotenuse(
35920 2a 61 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65 20 73 74 61 72 20 *a)..................#.the.star.
35940 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6d 61 67 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72 74 20 operator.will.magically.convert.
35960 61 6e 20 41 72 72 61 79 20 69 6e 74 6f 20 61 20 22 74 75 70 6c 65 22 0d 0a 0d 0a 62 6f 74 68 20 an.Array.into.a."tuple"....both.
35980 3d 20 6d 65 6e 20 2b 20 77 6f 6d 65 6e 0d 0a 0d 0a 23 20 49 6e 20 52 75 62 79 2c 20 61 6c 6c 20 =.men.+.women....#.In.Ruby,.all.
359a0 6f 62 6a 65 63 74 73 20 61 72 65 20 72 65 66 65 72 65 6e 63 65 73 2c 20 73 6f 20 74 68 65 20 73 objects.are.references,.so.the.s
359c0 61 6d 65 20 70 72 6f 62 6c 65 6d 20 61 72 69 73 65 73 3b 20 77 65 20 74 68 65 6e 20 72 65 74 75 ame.problem.arises;.we.then.retu
359e0 72 6e 20 61 20 6e 65 77 20 6f 62 6a 65 63 74 0d 0a 6e 75 6d 73 20 3d 20 5b 31 2e 34 2c 20 33 2e rn.a.new.object..nums.=.[1.4,.3.
35a00 35 2c 20 36 2e 37 5d 0d 0a 64 65 66 20 69 6e 74 5f 61 6c 6c 28 6e 29 0d 0a 20 20 20 20 6e 2e 63 5,.6.7]..def.int_all(n)......n.c
35a20 6f 6c 6c 65 63 74 20 7b 20 7c 76 7c 20 76 2e 74 6f 5f 69 20 7d 0d 0a 65 6e 64 0d 0a 69 6e 74 73 ollect.{.|v|.v.to_i.}..end..ints
35a40 20 3d 20 69 6e 74 5f 61 6c 6c 28 6e 75 6d 73 29 0d 0a 0d 0a 6e 75 6d 73 20 3d 20 5b 31 2e 34 2c .=.int_all(nums)....nums.=.[1.4,
35a60 20 33 2e 35 2c 20 36 2e 37 5d 0d 0a 64 65 66 20 74 72 75 6e 63 5f 65 6d 28 6e 29 0d 0a 20 20 20 .3.5,.6.7]..def.trunc_em(n).....
35a80 20 6e 2e 63 6f 6c 6c 65 63 74 21 20 7b 20 7c 76 7c 20 76 2e 74 6f 5f 69 20 7d 20 20 20 20 20 20 .n.collect!.{.|v|.v.to_i.}......
35aa0 20 20 20 23 20 74 68 65 20 62 61 6e 67 2d 76 65 72 73 69 6f 6e 20 6f 66 20 63 6f 6c 6c 65 63 74 ...#.the.bang-version.of.collect
35ac0 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 6f 62 6a 65 63 74 0d 0a 65 6e 64 0d 0a 74 72 75 6e 63 .modifies.the.object..end..trunc
35ae0 5f 65 6d 28 6e 75 6d 73 29 0d 0a 0d 0a 23 20 52 75 62 79 20 68 61 73 20 74 77 6f 20 63 68 6f 6d _em(nums)....#.Ruby.has.two.chom
35b00 70 20 76 65 72 73 69 6f 6e 3a 0d 0a 23 20 60 60 63 68 6f 6d 70 27 27 20 63 68 6f 6d 70 73 20 74 p.version:..#.``chomp''.chomps.t
35b20 68 65 20 72 65 63 6f 72 64 20 73 65 70 61 72 61 74 6f 72 20 61 6e 64 20 72 65 74 75 72 6e 73 20 he.record.separator.and.returns.
35b40 77 68 61 74 27 73 20 65 78 70 65 63 74 65 64 0d 0a 23 20 60 60 63 68 6f 6d 70 21 27 27 20 64 6f what's.expected..#.``chomp!''.do
35b60 65 73 20 74 68 65 20 73 61 6d 65 20 62 75 74 20 61 6c 73 6f 20 6d 6f 64 69 66 69 65 73 20 74 68 es.the.same.but.also.modifies.th
35b80 65 20 70 61 72 61 6d 65 74 65 72 20 6f 62 6a 65 63 74 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 e.parameter.object......#.@@PLEA
35ba0 43 40 40 5f 31 30 2e 32 0d 0a 64 65 66 20 73 6f 6d 65 66 75 6e 63 0d 0a 20 20 20 20 76 61 72 69 C@@_10.2..def.somefunc......vari
35bc0 61 62 6c 65 20 3d 20 73 6f 6d 65 74 68 69 6e 67 20 20 23 20 76 61 72 69 61 62 6c 65 20 69 73 20 able.=.something..#.variable.is.
35be0 6c 6f 63 61 6c 20 62 79 20 64 65 66 61 75 6c 74 0d 0a 65 6e 64 0d 0a 0d 0a 6e 61 6d 65 2c 20 61 local.by.default..end....name,.a
35c00 67 65 20 3d 20 41 52 47 56 0d 0a 73 74 61 72 74 20 20 20 20 20 3d 20 66 65 74 63 68 5f 74 69 6d ge.=.ARGV..start.....=.fetch_tim
35c20 65 0d 0a 0d 0a 61 2c 20 62 20 3d 20 70 61 69 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 e....a,.b.=.pair...............#
35c40 20 77 69 6c 6c 20 73 75 63 63 65 65 64 20 69 66 20 70 61 69 72 20 69 73 20 61 6e 20 41 72 72 61 .will.succeed.if.pair.is.an.Arra
35c60 79 20 6f 62 6a 65 63 74 20 28 6c 69 6b 65 20 41 52 47 56 20 69 73 29 0d 0a 63 20 3d 20 66 65 74 y.object.(like.ARGV.is)..c.=.fet
35c80 63 68 5f 74 69 6d 65 0d 0a 0d 0a 23 20 49 6e 20 72 75 62 79 2c 20 72 75 6e 5f 63 68 65 63 6b 20 ch_time....#.In.ruby,.run_check.
35ca0 63 61 6e 27 74 20 61 63 63 65 73 73 20 61 2c 20 62 2c 20 6f 72 20 63 20 75 6e 74 69 6c 20 74 68 can't.access.a,.b,.or.c.until.th
35cc0 65 79 20 61 72 65 0d 0a 23 20 65 78 70 6c 69 63 69 74 65 6c 79 20 64 65 66 69 6e 65 64 20 67 6c ey.are..#.explicitely.defined.gl
35ce0 6f 62 61 6c 20 28 75 73 69 6e 67 20 6c 65 61 64 69 6e 67 20 24 29 2c 20 65 76 65 6e 20 69 66 20 obal.(using.leading.$),.even.if.
35d00 74 68 65 79 20 61 72 65 0d 0a 23 20 62 6f 74 68 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 they.are..#.both.defined.in.the.
35d20 73 61 6d 65 20 73 63 6f 70 65 0d 0a 0d 0a 64 65 66 20 63 68 65 63 6b 5f 78 28 78 29 0d 0a 20 20 same.scope....def.check_x(x)....
35d40 20 20 79 20 3d 20 22 77 68 61 74 65 76 65 72 22 0d 0a 20 20 20 20 72 75 6e 5f 63 68 65 63 6b 0d ..y.=."whatever"......run_check.
35d60 0a 20 20 20 20 69 66 20 24 63 6f 6e 64 69 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 .....if.$condition..........puts
35d80 20 22 67 6f 74 20 24 78 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 68 65 ."got.$x"......end..end....#.The
35da0 20 66 6f 6c 6c 6f 77 69 6e 67 20 77 69 6c 6c 20 6b 65 65 70 20 61 20 72 65 66 65 72 65 6e 63 65 .following.will.keep.a.reference
35dc0 20 74 6f 20 74 68 65 20 61 72 72 61 79 2c 20 74 68 6f 75 67 68 20 74 68 65 0d 0a 23 20 72 65 73 .to.the.array,.though.the..#.res
35de0 75 6c 74 73 20 77 69 6c 6c 20 62 65 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20 ults.will.be.slightly.different.
35e00 66 72 6f 6d 20 70 65 72 6c 3a 20 74 68 65 20 6c 61 73 74 20 65 6c 65 6d 65 6e 74 0d 0a 23 20 6f from.perl:.the.last.element..#.o
35e20 66 20 24 67 6c 6f 62 61 6c 5f 61 72 72 61 79 20 77 69 6c 6c 20 62 65 20 69 74 73 65 6c 66 20 61 f.$global_array.will.be.itself.a
35e40 6e 20 61 72 72 61 79 0d 0a 64 65 66 20 73 61 76 65 5f 61 72 72 61 79 28 61 72 79 29 0d 0a 20 20 n.array..def.save_array(ary)....
35e60 20 20 24 67 6c 6f 62 61 6c 5f 61 72 72 61 79 20 3c 3c 20 61 72 79 0d 0a 65 6e 64 0d 0a 0d 0a 23 ..$global_array.<<.ary..end....#
35e80 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 69 76 65 73 20 74 68 65 20 73 61 6d 65 20 72 65 .The.following.gives.the.same.re
35ea0 73 75 6c 74 73 20 61 73 20 69 6e 20 50 65 72 6c 20 66 6f 72 20 24 67 6c 6f 62 61 6c 5f 61 72 72 sults.as.in.Perl.for.$global_arr
35ec0 61 79 2c 0d 0a 23 20 74 68 6f 75 67 68 20 69 74 20 64 6f 65 73 6e 27 74 20 69 6c 6c 75 73 74 72 ay,..#.though.it.doesn't.illustr
35ee0 61 74 65 20 61 6e 79 6d 6f 72 65 20 74 68 65 20 77 61 79 20 74 6f 20 6b 65 65 70 20 61 20 72 65 ate.anymore.the.way.to.keep.a.re
35f00 66 65 72 65 6e 63 65 0d 0a 23 20 74 6f 20 61 6e 20 6f 62 6a 65 63 74 3a 20 24 67 6c 6f 62 61 6c ference..#.to.an.object:.$global
35f20 5f 61 72 72 61 79 20 69 73 20 65 78 74 65 6e 64 65 64 20 77 69 74 68 20 74 68 65 20 65 6c 65 6d _array.is.extended.with.the.elem
35f40 65 6e 74 73 20 6f 66 20 61 72 79 0d 0a 64 65 66 20 73 61 76 65 5f 61 72 72 61 79 28 61 72 79 29 ents.of.ary..def.save_array(ary)
35f60 0d 0a 20 20 20 20 24 67 6c 6f 62 61 6c 5f 61 72 72 61 79 20 2b 3d 20 61 72 79 0d 0a 65 6e 64 0d ......$global_array.+=.ary..end.
35f80 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 33 0d 0a 23 20 49 6e 20 52 75 62 79 .....#.@@PLEAC@@_10.3..#.In.Ruby
35fa0 2c 20 41 46 41 49 4b 20 61 20 6d 65 74 68 6f 64 20 63 61 6e 6e 6f 74 20 61 63 63 65 73 73 20 22 ,.AFAIK.a.method.cannot.access."
35fc0 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 73 22 20 64 65 66 69 6e 65 64 0d 0a 23 20 75 70 70 65 local.variables".defined..#.uppe
35fe0 72 20 73 63 6f 70 65 3b 20 6d 6f 73 74 6c 79 20 62 65 63 61 75 73 65 20 65 76 65 72 79 74 68 69 r.scope;.mostly.because.everythi
36000 6e 67 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 2c 20 73 6f 20 79 6f 75 27 6c 6c 0d 0a 23 20 64 6f ng.is.an.object,.so.you'll..#.do
36020 20 74 68 65 20 73 61 6d 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 61 6e 20 61 74 74 72 69 62 75 .the.same.by.defining.an.attribu
36040 74 65 20 6f 72 20 61 20 73 74 61 74 69 63 20 61 74 74 72 69 62 75 74 65 0d 0a 0d 0a 23 20 49 6e te.or.a.static.attribute....#.In
36060 20 52 75 62 79 20 74 68 65 20 42 45 47 49 4e 20 61 6c 73 6f 20 65 78 69 73 74 73 3a 0d 0a 42 45 .Ruby.the.BEGIN.also.exists:..BE
36080 47 49 4e 20 7b 20 70 75 74 73 20 22 68 65 6c 6c 6f 20 66 72 6f 6d 20 42 45 47 49 4e 22 20 7d 0d GIN.{.puts."hello.from.BEGIN".}.
360a0 0a 70 75 74 73 20 22 68 65 6c 6c 6f 20 66 72 6f 6d 20 6d 61 69 6e 22 0d 0a 42 45 47 49 4e 20 7b .puts."hello.from.main"..BEGIN.{
360c0 20 70 75 74 73 20 22 68 65 6c 6c 6f 20 66 72 6f 6d 20 32 6e 64 20 42 45 47 49 4e 22 20 7d 0d 0a .puts."hello.from.2nd.BEGIN".}..
360e0 23 20 67 69 76 65 73 3a 0d 0a 23 20 20 20 68 65 6c 6c 6f 20 66 72 6f 6d 20 42 45 47 49 4e 0d 0a #.gives:..#...hello.from.BEGIN..
36100 23 20 20 20 68 65 6c 6c 6f 20 66 72 6f 6d 20 32 6e 64 20 42 45 47 49 4e 0d 0a 23 20 20 20 68 65 #...hello.from.2nd.BEGIN..#...he
36120 6c 6c 6f 20 66 72 6f 6d 20 6d 61 69 6e 0d 0a 0d 0a 23 20 49 6e 20 52 75 62 79 2c 20 69 74 20 63 llo.from.main....#.In.Ruby,.it.c
36140 61 6e 20 62 65 20 77 72 69 74 74 65 6e 20 61 73 20 61 20 73 74 61 74 69 63 20 6d 65 74 68 6f 64 an.be.written.as.a.static.method
36160 20 61 6e 64 20 61 20 73 74 61 74 69 63 0d 0a 23 20 76 61 72 69 61 62 6c 65 0d 0a 63 6c 61 73 73 .and.a.static..#.variable..class
36180 20 43 6f 75 6e 74 65 72 0d 0a 20 20 20 20 40 40 63 6f 75 6e 74 65 72 20 3d 20 30 0d 0a 20 20 20 .Counter......@@counter.=.0.....
361a0 20 64 65 66 20 43 6f 75 6e 74 65 72 2e 6e 65 78 74 5f 63 6f 75 6e 74 65 72 3b 20 40 40 63 6f 75 .def.Counter.next_counter;.@@cou
361c0 6e 74 65 72 20 2b 3d 20 31 3b 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 68 65 72 65 20 69 nter.+=.1;.end..end....#.There.i
361e0 73 20 6e 6f 20 6e 65 65 64 20 6f 66 20 42 45 47 49 4e 20 73 69 6e 63 65 20 74 68 65 20 76 61 72 s.no.need.of.BEGIN.since.the.var
36200 69 61 62 6c 65 20 77 69 6c 6c 20 67 65 74 0d 0a 23 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 77 68 iable.will.get..#.initialized.wh
36220 65 6e 20 70 61 72 73 69 6e 67 0d 0a 63 6c 61 73 73 20 43 6f 75 6e 74 65 72 0d 0a 20 20 20 20 40 en.parsing..class.Counter......@
36240 40 63 6f 75 6e 74 65 72 20 3d 20 34 32 0d 0a 20 20 20 20 64 65 66 20 43 6f 75 6e 74 65 72 2e 6e @counter.=.42......def.Counter.n
36260 65 78 74 5f 63 6f 75 6e 74 65 72 3b 20 40 40 63 6f 75 6e 74 65 72 20 2b 3d 20 31 3b 20 65 6e 64 ext_counter;.@@counter.+=.1;.end
36280 0d 0a 20 20 20 20 64 65 66 20 43 6f 75 6e 74 65 72 2e 70 72 65 76 5f 63 6f 75 6e 74 65 72 3b 20 ......def.Counter.prev_counter;.
362a0 40 40 63 6f 75 6e 74 65 72 20 2d 3d 20 31 3b 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 @@counter.-=.1;.end..end......#.
362c0 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 34 0d 0a 23 20 59 6f 75 20 63 61 6e 20 65 69 74 68 65 72 @@PLEAC@@_10.4..#.You.can.either
362e0 20 67 65 74 20 74 68 65 20 77 68 6f 6c 65 20 74 72 61 63 65 20 61 73 20 61 6e 20 61 72 72 61 79 .get.the.whole.trace.as.an.array
36300 20 6f 66 20 73 74 72 69 6e 67 73 2c 20 65 61 63 68 0d 0a 23 20 73 74 72 69 6e 67 20 74 65 6c 6c .of.strings,.each..#.string.tell
36320 69 6e 67 20 77 68 69 63 68 20 66 69 6c 65 2c 20 6c 69 6e 65 20 61 6e 64 20 6d 65 74 68 6f 64 20 ing.which.file,.line.and.method.
36340 69 73 20 63 61 6c 6c 69 6e 67 3a 0d 0a 63 61 6c 6c 65 72 0d 0a 0d 0a 23 20 2e 2e 2e 6f 72 20 6f is.calling:..caller....#....or.o
36360 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 63 61 6c 6c 65 72 0d 0a 63 61 6c 6c 65 72 5b 30 5d 0d 0a nly.the.last.caller..caller[0]..
36380 0d 0a 23 20 57 65 20 6e 65 65 64 20 74 6f 20 65 78 74 72 61 63 74 20 6a 75 73 74 20 74 68 65 20 ..#.We.need.to.extract.just.the.
363a0 6d 65 74 68 6f 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 61 63 6b 74 72 61 63 65 3a 0d 0a 64 method.name.of.the.backtrace:..d
363c0 65 66 20 77 68 6f 61 6d 69 3b 20 20 63 61 6c 6c 65 72 28 29 5b 30 5d 20 3d 7e 20 2f 69 6e 20 60 ef.whoami;..caller()[0].=~./in.`
363e0 28 5b 5e 27 5d 2b 29 27 2f 20 3f 20 24 31 20 3a 20 27 28 61 6e 6f 6e 79 6d 6f 75 73 29 27 3b 20 ([^']+)'/.?.$1.:.'(anonymous)';.
36400 65 6e 64 0d 0a 64 65 66 20 77 68 6f 77 61 73 69 3b 20 63 61 6c 6c 65 72 28 29 5b 31 5d 20 3d 7e end..def.whowasi;.caller()[1].=~
36420 20 2f 69 6e 20 60 28 5b 5e 27 5d 2b 29 27 2f 20 3f 20 24 31 20 3a 20 27 28 61 6e 6f 6e 79 6d 6f ./in.`([^']+)'/.?.$1.:.'(anonymo
36440 75 73 29 27 3b 20 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 35 0d us)';.end......#.@@PLEAC@@_10.5.
36460 0a 23 20 49 6e 20 52 75 62 79 2c 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 61 20 72 65 66 .#.In.Ruby,.every.value.is.a.ref
36480 65 72 65 6e 63 65 20 6f 6e 20 61 6e 20 6f 62 6a 65 63 74 2c 20 74 68 75 73 20 74 68 65 72 65 20 erence.on.an.object,.thus.there.
364a0 69 73 0d 0a 23 20 6e 6f 20 73 75 63 68 20 70 72 6f 62 6c 65 6d 0d 0a 61 72 72 61 79 5f 64 69 66 is..#.no.such.problem..array_dif
364c0 66 28 61 72 72 61 79 31 2c 20 61 72 72 61 79 32 29 0d 0a 0d 0a 64 65 66 20 61 64 64 5f 76 65 63 f(array1,.array2)....def.add_vec
364e0 70 61 69 72 28 61 31 2c 20 61 32 29 0d 0a 20 20 20 20 72 65 73 75 6c 74 73 20 3d 20 5b 5d 0d 0a pair(a1,.a2)......results.=.[]..
36500 20 20 20 20 61 31 2e 65 61 63 68 5f 69 6e 64 65 78 20 7b 20 7c 69 7c 20 72 65 73 75 6c 74 73 20 ....a1.each_index.{.|i|.results.
36520 3c 3c 20 28 61 31 5b 69 5d 20 2b 20 61 32 5b 69 5d 29 20 7d 0d 0a 20 20 20 20 72 65 73 75 6c 74 <<.(a1[i].+.a2[i]).}......result
36540 73 0d 0a 65 6e 64 0d 0a 61 20 3d 20 5b 31 2c 20 32 5d 0d 0a 62 20 3d 20 5b 35 2c 20 38 5d 0d 0a s..end..a.=.[1,.2]..b.=.[5,.8]..
36560 63 20 3d 20 61 64 64 5f 76 65 63 70 61 69 72 28 61 2c 20 62 29 0d 0a 70 20 63 0d 0a 0d 0a 23 20 c.=.add_vecpair(a,.b)..p.c....#.
36580 41 64 64 20 74 68 69 73 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 Add.this.to.the.beginning.of.the
365a0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 68 65 63 6b 20 69 66 20 77 65 20 77 65 72 65 0d 0a 23 .function.to.check.if.we.were..#
365c0 20 67 69 76 65 6e 20 74 77 6f 20 61 72 72 61 79 73 0d 0a 61 31 2e 74 79 70 65 20 3d 3d 20 41 72 .given.two.arrays..a1.type.==.Ar
365e0 72 61 79 20 26 26 20 61 32 2e 74 79 70 65 20 3d 3d 20 41 72 72 61 79 20 6f 72 0d 0a 20 20 20 20 ray.&&.a2.type.==.Array.or......
36600 72 61 69 73 65 20 22 75 73 61 67 65 3a 20 61 64 64 5f 76 65 63 70 61 69 72 20 61 72 72 61 79 31 raise."usage:.add_vecpair.array1
36620 20 61 72 72 61 79 32 20 28 77 61 73 20 75 73 65 64 20 77 69 74 68 3a 20 23 7b 61 31 2e 74 79 70 .array2.(was.used.with:.#{a1.typ
36640 65 7d 20 23 7b 61 32 2e 74 79 70 65 7d 29 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 e}.#{a2.type})"......#.@@PLEAC@@
36660 5f 31 30 2e 36 0d 0a 23 20 54 68 65 72 65 20 69 73 20 6e 6f 20 72 65 74 75 72 6e 20 63 6f 6e 74 _10.6..#.There.is.no.return.cont
36680 65 78 74 20 69 6e 20 52 75 62 79 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e ext.in.Ruby......#.@@PLEAC@@_10.
366a0 37 0d 0a 23 20 4c 69 6b 65 20 69 6e 20 50 65 72 6c 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 66 61 7..#.Like.in.Perl,.we.need.to.fa
366c0 6b 65 20 77 69 74 68 20 61 20 68 61 73 68 2c 20 62 75 74 20 69 74 27 73 20 64 69 72 74 79 20 3a ke.with.a.hash,.but.it's.dirty.:
366e0 2d 28 0d 0a 64 65 66 20 74 68 65 66 75 6e 63 28 70 61 72 61 6d 5f 61 72 67 73 29 0d 0a 20 20 20 -(..def.thefunc(param_args).....
36700 20 61 72 67 73 20 3d 20 7b 20 27 49 4e 43 52 45 4d 45 4e 54 27 20 3d 3e 20 27 31 30 73 27 2c 20 .args.=.{.'INCREMENT'.=>.'10s',.
36720 27 46 49 4e 49 53 48 27 20 3d 3e 20 27 30 27 2c 20 27 53 54 41 52 54 27 20 3d 3e 20 30 20 7d 0d 'FINISH'.=>.'0',.'START'.=>.0.}.
36740 0a 20 20 20 20 61 72 67 73 2e 75 70 64 61 74 65 28 70 61 72 61 6d 5f 61 72 67 73 29 0d 0a 20 20 .....args.update(param_args)....
36760 20 20 69 66 20 28 61 72 67 73 5b 27 49 4e 43 52 45 4d 45 4e 54 27 5d 20 20 3d 7e 20 2f 6d 24 2f ..if.(args['INCREMENT']..=~./m$/
36780 20 29 0d 0a 20 20 20 20 20 20 20 20 23 20 2e 2e 2e 2e 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e .)..........#............end..en
367a0 64 0d 0a 0d 0a 74 68 65 66 75 6e 63 28 7b 20 27 49 4e 43 52 45 4d 45 4e 54 27 20 3d 3e 20 27 32 d....thefunc({.'INCREMENT'.=>.'2
367c0 30 73 27 2c 20 27 53 54 41 52 54 27 20 3d 3e 20 27 2b 35 6d 27 2c 20 27 46 49 4e 49 53 48 27 20 0s',.'START'.=>.'+5m',.'FINISH'.
367e0 3d 3e 20 27 2b 33 30 6d 27 20 7d 29 0d 0a 74 68 65 66 75 6e 63 28 7b 7d 29 0d 0a 0d 0a 0d 0a 23 =>.'+30m'.})..thefunc({})......#
36800 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 38 0d 0a 23 20 74 68 65 72 65 20 69 73 20 6e 6f 20 22 .@@PLEAC@@_10.8..#.there.is.no."
36820 75 6e 64 65 66 22 20 64 69 72 65 63 74 20 65 71 75 69 76 61 6c 65 6e 74 20 62 75 74 20 74 68 65 undef".direct.equivalent.but.the
36840 72 65 20 69 73 20 74 68 65 20 73 6c 69 63 65 20 65 71 75 69 76 3a 0d 0a 61 2c 20 63 20 3d 20 66 re.is.the.slice.equiv:..a,.c.=.f
36860 75 6e 63 2e 69 6e 64 65 78 65 73 28 30 2c 20 32 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 unc.indexes(0,.2)......#.@@PLEAC
36880 40 40 5f 31 30 2e 39 0d 0a 23 20 52 75 62 79 20 68 61 73 20 6e 6f 20 73 75 63 68 20 6c 69 6d 69 @@_10.9..#.Ruby.has.no.such.limi
368a0 74 61 74 69 6f 6e 3a 0d 0a 64 65 66 20 73 6f 6d 65 66 75 6e 63 0d 0a 20 20 20 20 61 72 79 20 3d tation:..def.somefunc......ary.=
368c0 20 5b 5d 0d 0a 20 20 20 20 68 61 73 68 20 3d 20 7b 7d 0d 0a 20 20 20 20 23 20 2e 2e 2e 0d 0a 20 .[]......hash.=.{}......#.......
368e0 20 20 20 72 65 74 75 72 6e 20 61 72 79 2c 20 68 61 73 68 0d 0a 65 6e 64 0d 0a 61 72 72 2c 20 64 ...return.ary,.hash..end..arr,.d
36900 69 63 74 20 3d 20 73 6f 6d 65 66 75 6e 63 0d 0a 0d 0a 61 72 72 61 79 5f 6f 66 5f 68 61 73 68 65 ict.=.somefunc....array_of_hashe
36920 73 20 3d 20 66 6e 0d 0a 68 31 2c 20 68 32 2c 20 68 33 20 20 20 20 20 20 3d 20 66 6e 0d 0a 0d 0a s.=.fn..h1,.h2,.h3......=.fn....
36940 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 31 30 0d 0a 72 65 74 75 72 6e 0d 0a 23 20 6f ..#.@@PLEAC@@_10.10..return..#.o
36960 72 20 28 65 71 75 69 76 61 6c 65 6e 74 29 0d 0a 72 65 74 75 72 6e 20 6e 69 6c 0d 0a 0d 0a 0d 0a r.(equivalent)..return.nil......
36980 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 31 31 0d 0a 23 20 59 6f 75 20 63 61 6e 27 74 20 70 #.@@PLEAC@@_10.11..#.You.can't.p
369a0 72 6f 74 6f 74 79 70 65 20 69 6e 20 52 75 62 79 20 72 65 67 61 72 64 69 6e 67 20 74 79 70 65 73 rototype.in.Ruby.regarding.types
369c0 20 3a 2d 28 0d 0a 23 20 54 68 6f 75 67 68 2c 20 79 6f 75 20 63 61 6e 20 66 6f 72 63 65 20 74 68 .:-(..#.Though,.you.can.force.th
369e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 3a 0d 0a 64 65 66 20 66 75 6e 63 e.number.of.arguments:..def.func
36a00 5f 77 69 74 68 5f 6e 6f 5f 61 72 67 3b 20 65 6e 64 0d 0a 64 65 66 20 66 75 6e 63 5f 77 69 74 68 _with_no_arg;.end..def.func_with
36a20 5f 6e 6f 5f 61 72 67 28 29 3b 20 65 6e 64 0d 0a 64 65 66 20 66 75 6e 63 5f 77 69 74 68 5f 6f 6e _no_arg();.end..def.func_with_on
36a40 65 5f 61 72 67 28 61 31 29 3b 20 65 6e 64 0d 0a 64 65 66 20 66 75 6e 63 5f 77 69 74 68 5f 74 77 e_arg(a1);.end..def.func_with_tw
36a60 6f 5f 61 72 67 73 28 61 31 2c 20 61 32 29 3b 20 65 6e 64 0d 0a 64 65 66 20 66 75 6e 63 5f 77 69 o_args(a1,.a2);.end..def.func_wi
36a80 74 68 5f 61 6e 79 5f 6e 75 6d 62 65 72 5f 6f 66 5f 61 72 67 73 28 2a 61 72 67 73 29 3b 20 65 6e th_any_number_of_args(*args);.en
36aa0 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 31 32 0d 0a 72 61 69 73 65 20 d......#.@@PLEAC@@_10.12..raise.
36ac0 22 73 6f 6d 65 20 6d 65 73 73 61 67 65 22 20 20 20 20 20 20 20 20 23 20 72 61 69 73 65 20 65 78 "some.message"........#.raise.ex
36ae0 63 65 70 74 69 6f 6e 0d 0a 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 76 61 6c 20 3d 20 66 75 6e 63 ception....begin......val.=.func
36b00 0d 0a 72 65 73 63 75 65 20 45 78 63 65 70 74 69 6f 6e 20 3d 3e 20 6d 73 67 0d 0a 20 20 20 20 24 ..rescue.Exception.=>.msg......$
36b20 73 74 64 65 72 72 2e 70 75 74 73 20 22 66 75 6e 63 20 72 61 69 73 65 64 20 61 6e 20 65 78 63 65 stderr.puts."func.raised.an.exce
36b40 70 74 69 6f 6e 3a 20 23 7b 6d 73 67 7d 22 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 49 6e 20 52 75 62 79 ption:.#{msg}"..end....#.In.Ruby
36b60 20 74 68 65 20 72 65 73 63 75 65 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 73 20 61 6e 20 65 78 .the.rescue.statement.uses.an.ex
36b80 63 65 70 74 69 6f 6e 20 63 6c 61 73 73 2c 20 65 76 65 72 79 0d 0a 23 20 65 78 63 65 70 74 69 6f ception.class,.every..#.exceptio
36ba0 6e 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 6d 61 74 63 68 65 64 20 69 73 20 73 74 69 6c 6c 20 n.which.is.not.matched.is.still.
36bc0 63 6f 6e 74 69 6e 75 69 6e 67 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 76 61 6c 20 3d 20 66 75 6e continuing..begin......val.=.fun
36be0 63 0d 0a 72 65 73 63 75 65 20 46 75 6c 6c 4d 6f 6f 6e 45 72 72 6f 72 0d 0a 20 20 20 20 2e 2e 2e c..rescue.FullMoonError.........
36c00 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 31 33 0d 0a 23 20 ..end......#.@@PLEAC@@_10.13..#.
36c20 53 61 76 69 6e 67 20 47 6c 6f 62 61 6c 20 56 61 6c 75 65 73 0d 0a 23 20 4f 66 20 63 6f 75 72 73 Saving.Global.Values..#.Of.cours
36c40 65 20 77 65 20 63 61 6e 20 6a 75 73 74 20 73 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 61 6e 64 e.we.can.just.save.the.value.and
36c60 20 72 65 73 74 6f 72 65 20 69 74 20 6c 61 74 65 72 3a 0d 0a 64 65 66 20 70 72 69 6e 74 5f 61 67 .restore.it.later:..def.print_ag
36c80 65 0d 0a 20 20 20 20 70 75 74 73 20 22 41 67 65 20 69 73 20 23 7b 24 61 67 65 7d 22 0d 0a 65 6e e......puts."Age.is.#{$age}"..en
36ca0 64 0d 0a 0d 0a 24 61 67 65 20 3d 20 31 38 20 20 20 20 20 20 20 20 20 23 20 67 6c 6f 62 61 6c 20 d....$age.=.18.........#.global.
36cc0 76 61 72 69 61 62 6c 65 0d 0a 70 72 69 6e 74 5f 61 67 65 28 29 0d 0a 69 66 20 63 6f 6e 64 69 74 variable..print_age()..if.condit
36ce0 69 6f 6e 0d 0a 20 20 20 20 73 61 66 65 61 67 65 20 3d 20 24 61 67 65 0d 0a 20 20 20 20 24 61 67 ion......safeage.=.$age......$ag
36d00 65 20 3d 20 32 33 0d 0a 20 20 20 20 70 72 69 6e 74 5f 61 67 65 28 29 0d 0a 20 20 20 20 24 61 67 e.=.23......print_age()......$ag
36d20 65 20 3d 20 73 61 66 65 61 67 65 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 57 65 20 63 61 6e 20 61 6c 73 e.=.safeage..end....#.We.can.als
36d40 6f 20 75 73 65 20 61 20 6d 65 74 68 6f 64 20 74 68 61 74 20 73 61 76 65 73 20 74 68 65 20 67 6c o.use.a.method.that.saves.the.gl
36d60 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 61 6e 64 0d 0a 23 20 72 65 73 74 6f 72 65 73 20 69 74 obal.variable.and..#.restores.it
36d80 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 62 6c 6f 63 6b 20 69 73 .automatically.when.the.block.is
36da0 20 6c 65 66 74 3a 0d 0a 0d 0a 64 65 66 20 6c 6f 63 61 6c 28 76 61 72 29 0d 0a 20 20 20 20 65 76 .left:....def.local(var)......ev
36dc0 61 6c 28 22 73 61 76 65 20 3d 20 23 7b 76 61 72 2e 69 64 32 6e 61 6d 65 7d 22 29 0d 0a 20 20 20 al("save.=.#{var.id2name}").....
36de0 20 62 65 67 69 6e 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 79 69 65 6c 64 0d 0a .begin..........result.=.yield..
36e00 20 20 20 20 65 6e 73 75 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 77 65 20 77 61 6e 74 20 74 6f ....ensure..........#.we.want.to
36e20 20 63 61 6c 6c 20 74 68 69 73 20 65 76 65 6e 20 69 66 20 77 65 20 67 6f 74 20 61 6e 20 65 78 63 .call.this.even.if.we.got.an.exc
36e40 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 28 22 23 7b 76 61 72 2e 69 64 32 6e eption..........eval("#{var.id2n
36e60 61 6d 65 7d 20 3d 20 73 61 76 65 22 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 72 65 73 75 ame}.=.save")......end......resu
36e80 6c 74 0d 0a 65 6e 64 0d 0a 0d 0a 63 6f 6e 64 69 74 69 6f 6e 20 3d 20 74 72 75 65 0d 0a 24 61 67 lt..end....condition.=.true..$ag
36ea0 65 20 3d 20 31 38 0d 0a 70 72 69 6e 74 5f 61 67 65 28 29 0d 0a 69 66 20 63 6f 6e 64 69 74 69 6f e.=.18..print_age()..if.conditio
36ec0 6e 0d 0a 20 20 20 20 6c 6f 63 61 6c 28 3a 24 61 67 65 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 24 n......local(:$age).{..........$
36ee0 61 67 65 20 3d 20 32 33 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 5f 61 67 65 28 29 0d 0a 20 age.=.23..........print_age()...
36f00 20 20 20 7d 0d 0a 65 6e 64 0d 0a 70 72 69 6e 74 5f 61 67 65 28 29 0d 0a 0d 0a 23 20 54 68 65 72 ...}..end..print_age()....#.Ther
36f20 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 75 73 65 20 6c 6f 63 61 6c 28 29 20 66 6f 72 20 e.is.no.need.to.use.local().for.
36f40 66 69 6c 65 68 61 6e 64 6c 65 73 20 6f 72 20 64 69 72 65 63 74 6f 72 79 0d 0a 23 20 68 61 6e 64 filehandles.or.directory..#.hand
36f60 6c 65 73 20 69 6e 20 72 75 62 79 20 62 65 63 61 75 73 65 20 66 69 6c 65 68 61 6e 64 6c 65 73 20 les.in.ruby.because.filehandles.
36f80 61 72 65 20 6e 6f 72 6d 61 6c 20 6f 62 6a 65 63 74 73 2e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 are.normal.objects.......#.@@PLE
36fa0 41 43 40 40 5f 31 30 2e 31 34 0d 0a 23 20 49 6e 20 52 75 62 79 20 79 6f 75 20 6d 61 79 20 72 65 AC@@_10.14..#.In.Ruby.you.may.re
36fc0 64 65 66 69 6e 65 20 61 20 6d 65 74 68 6f 64 20 5b 62 75 74 20 6e 6f 74 20 6f 76 65 72 6c 6f 61 define.a.method.[but.not.overloa
36fe0 64 20 69 74 20 3a 2d 28 5d 0d 0a 23 20 6a 75 73 74 20 62 79 20 64 65 66 69 6e 69 6e 67 20 61 67 d.it.:-(]..#.just.by.defining.ag
37000 61 69 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0d 0a 64 65 66 20 66 6f 6f ain.with.the.same.name...def.foo
37020 3b 20 70 75 74 73 20 27 66 6f 6f 27 3b 20 65 6e 64 0d 0a 64 65 66 20 66 6f 6f 3b 20 70 75 74 73 ;.puts.'foo';.end..def.foo;.puts
37040 20 27 62 61 72 27 3b 20 65 6e 64 0d 0a 66 6f 6f 0d 0a 23 3d 3e 20 62 61 72 0d 0a 0d 0a 23 20 59 .'bar';.end..foo..#=>.bar....#.Y
37060 6f 75 20 63 61 6e 20 61 6c 73 6f 20 74 61 6b 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 ou.can.also.take.a.reference.to.
37080 61 6e 20 65 78 69 73 74 69 6e 67 20 6d 65 74 68 6f 64 20 62 65 66 6f 72 65 0d 0a 23 20 72 65 64 an.existing.method.before..#.red
370a0 65 66 69 6e 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2c 20 75 73 69 6e 67 20 74 68 65 20 60 61 6c efining.a.new.one,.using.the.`al
370c0 69 61 73 27 20 6b 65 79 77 6f 72 64 0d 0a 64 65 66 20 66 6f 6f 3b 20 70 75 74 73 20 27 66 6f 6f ias'.keyword..def.foo;.puts.'foo
370e0 27 3b 20 65 6e 64 0d 0a 61 6c 69 61 73 20 66 6f 6f 5f 6f 72 69 67 20 66 6f 6f 0d 0a 64 65 66 20 ';.end..alias.foo_orig.foo..def.
37100 66 6f 6f 3b 20 70 75 74 73 20 27 62 61 72 27 3b 20 65 6e 64 0d 0a 66 6f 6f 5f 6f 72 69 67 0d 0a foo;.puts.'bar';.end..foo_orig..
37120 66 6f 6f 0d 0a 23 3d 3e 20 66 6f 6f 0d 0a 23 3d 3e 20 62 61 72 0d 0a 0d 0a 23 20 41 46 41 49 4b foo..#=>.foo..#=>.bar....#.AFAIK
37140 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 64 69 72 65 63 74 20 77 61 79 20 74 6f 20 63 72 65 61 ,.there.is.no.direct.way.to.crea
37160 74 65 20 61 20 6e 65 77 20 6d 65 74 68 6f 64 20 77 68 6f 73 65 20 6e 61 6d 65 0d 0a 23 20 63 6f te.a.new.method.whose.name..#.co
37180 6d 65 73 20 66 72 6f 6d 20 61 20 76 61 72 69 61 62 6c 65 2c 20 73 6f 20 75 73 65 20 22 65 76 61 mes.from.a.variable,.so.use."eva
371a0 6c 22 0d 0a 63 6f 6c 6f 72 73 20 3d 20 25 77 28 72 65 64 20 62 6c 75 65 20 67 72 65 65 6e 20 79 l"..colors.=.%w(red.blue.green.y
371c0 65 6c 6c 6f 77 20 6f 72 61 6e 67 65 20 70 75 72 70 6c 65 20 76 69 6f 6c 65 74 29 0d 0a 63 6f 6c ellow.orange.purple.violet)..col
371e0 6f 72 73 2e 65 61 63 68 20 7b 20 7c 63 7c 0d 0a 20 20 20 20 65 76 61 6c 20 3c 3c 2d 45 4f 53 0d ors.each.{.|c|......eval.<<-EOS.
37200 0a 20 20 20 20 64 65 66 20 23 7b 63 7d 28 2a 61 29 0d 0a 20 20 20 20 20 20 20 20 22 3c 46 4f 4e .....def.#{c}(*a).........."<FON
37220 54 20 43 4f 4c 4f 52 3d 27 23 7b 63 7d 27 3e 22 20 2b 20 61 2e 74 6f 5f 73 20 2b 20 22 3c 2f 46 T.COLOR='#{c}'>".+.a.to_s.+."</F
37240 4f 4e 54 3e 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 45 4f 53 0d 0a 7d 0d 0a 0d 0a 0d 0a ONT>"......end......EOS..}......
37260 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 31 35 0d 0a 64 65 66 20 6d 65 74 68 6f 64 5f 6d 69 #.@@PLEAC@@_10.15..def.method_mi
37280 73 73 69 6e 67 28 6e 61 6d 65 2c 20 2a 61 72 67 73 29 0d 0a 20 20 20 20 22 3c 46 4f 4e 54 20 43 ssing(name,.*args)......"<FONT.C
372a0 4f 4c 4f 52 3d 27 23 7b 6e 61 6d 65 7d 27 3e 22 20 2b 20 61 72 67 73 2e 6a 6f 69 6e 28 27 20 27 OLOR='#{name}'>".+.args.join('.'
372c0 29 20 2b 20 22 3c 2f 46 4f 4e 54 3e 22 0d 0a 65 6e 64 0d 0a 70 75 74 73 20 63 68 61 72 74 72 65 ).+."</FONT>"..end..puts.chartre
372e0 75 73 65 28 22 73 74 75 66 66 22 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 use("stuff")......#.@@PLEAC@@_10
37300 2e 31 36 0d 0a 64 65 66 20 6f 75 74 65 72 28 61 72 67 29 0d 0a 20 20 20 20 78 20 3d 20 61 72 67 .16..def.outer(arg)......x.=.arg
37320 20 2b 20 33 35 0d 0a 20 20 20 20 69 6e 6e 65 72 20 3d 20 70 72 6f 63 20 7b 20 78 20 2a 20 31 39 .+.35......inner.=.proc.{.x.*.19
37340 20 7d 0d 0a 20 20 20 20 78 20 2b 20 69 6e 6e 65 72 2e 63 61 6c 6c 28 29 0d 0a 65 6e 64 0d 0a 0d .}......x.+.inner.call()..end...
37360 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 30 2e 31 37 0d 0a 23 21 2f 75 73 72 2f 62 69 6e ...#.@@PLEAC@@_10.17..#!/usr/bin
37380 2f 72 75 62 79 20 2d 77 0d 0a 23 20 6d 61 69 6c 73 6f 72 74 20 2d 20 73 6f 72 74 20 6d 62 6f 78 /ruby.-w..#.mailsort.-.sort.mbox
373a0 20 62 79 20 64 69 66 66 65 72 65 6e 74 20 63 72 69 74 65 72 69 61 0d 0a 72 65 71 75 69 72 65 20 .by.different.criteria..require.
373c0 27 45 6e 67 6c 69 73 68 27 0d 0a 72 65 71 75 69 72 65 20 27 44 61 74 65 27 0d 0a 0d 0a 23 20 4f 'English'..require.'Date'....#.O
373e0 62 6a 65 63 74 73 20 6f 66 20 63 6c 61 73 73 20 4d 61 69 6c 20 72 65 70 72 65 73 65 6e 74 20 61 bjects.of.class.Mail.represent.a
37400 20 73 69 6e 67 6c 65 20 6d 61 69 6c 2e 0d 0a 63 6c 61 73 73 20 4d 61 69 6c 0d 0a 20 20 20 20 61 .single.mail...class.Mail......a
37420 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 6e 6f 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 ttr_accessor.:no......attr_acces
37440 73 6f 72 20 3a 73 75 62 6a 65 63 74 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 sor.:subject......attr_accessor.
37460 3a 66 75 6c 6c 74 65 78 74 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 64 61 :fulltext......attr_accessor.:da
37480 74 65 0d 0a 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 te........def.initialize........
374a0 20 20 40 66 75 6c 6c 74 65 78 74 20 3d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 40 73 75 62 6a 65 ..@fulltext.=.""..........@subje
374c0 63 74 20 3d 20 22 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 61 70 70 65 ct.=.""......end........def.appe
374e0 6e 64 28 70 61 72 61 29 0d 0a 20 20 20 20 20 20 20 20 40 66 75 6c 6c 74 65 78 74 20 3c 3c 20 70 nd(para)..........@fulltext.<<.p
37500 61 72 61 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 74 68 69 73 20 69 73 20 63 61 ara......end........#.this.is.ca
37520 6c 6c 65 64 20 69 66 20 79 6f 75 20 63 61 6c 6c 20 70 75 74 73 28 6d 61 69 6c 29 0d 0a 20 20 20 lled.if.you.call.puts(mail).....
37540 20 64 65 66 20 74 6f 5f 73 0d 0a 20 20 20 20 20 20 20 20 40 66 75 6c 6c 74 65 78 74 0d 0a 20 20 .def.to_s..........@fulltext....
37560 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 6c 69 73 ..end..end....#.represents.a.lis
37580 74 20 6f 66 20 6d 61 69 6c 73 2e 0d 0a 63 6c 61 73 73 20 4d 61 69 6c 62 6f 78 20 3c 20 41 72 72 t.of.mails...class.Mailbox.<.Arr
375a0 61 79 0d 0a 0d 0a 20 20 20 20 53 75 62 6a 65 63 74 70 61 74 74 65 72 6e 20 3d 20 52 65 67 65 78 ay........Subjectpattern.=.Regex
375c0 70 2e 6e 65 77 28 27 53 75 62 6a 65 63 74 3a 5c 73 2a 28 3f 3a 52 65 3a 5c 73 2a 29 2a 28 2e 2a p.new('Subject:\s*(?:Re:\s*)*(.*
375e0 29 5c 6e 27 29 0d 0a 20 20 20 20 44 61 74 65 70 61 74 74 65 72 6e 20 3d 20 52 65 67 65 78 70 2e )\n')......Datepattern.=.Regexp.
37600 6e 65 77 28 27 44 61 74 65 3a 5c 73 2a 28 2e 2a 29 5c 6e 27 29 0d 0a 0d 0a 20 20 20 20 23 20 72 new('Date:\s*(.*)\n')........#.r
37620 65 61 64 73 20 6d 61 69 6c 73 20 66 72 6f 6d 20 6f 70 65 6e 20 66 69 6c 65 20 61 6e 64 20 73 74 eads.mails.from.open.file.and.st
37640 6f 72 65 73 20 74 68 65 6d 0d 0a 20 20 20 20 64 65 66 20 72 65 61 64 28 66 69 6c 65 29 0d 0a 20 ores.them......def.read(file)...
37660 20 20 20 20 20 20 20 24 49 4e 50 55 54 5f 52 45 43 4f 52 44 5f 53 45 50 41 52 41 54 4f 52 20 3d .......$INPUT_RECORD_SEPARATOR.=
37680 20 27 27 20 20 23 20 70 61 72 61 67 72 61 70 68 20 72 65 61 64 73 0d 0a 20 20 20 20 20 20 20 20 .''..#.paragraph.reads..........
376a0 6d 73 67 6e 6f 20 3d 20 2d 31 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 2e 65 61 63 68 20 7b 20 msgno.=.-1..........file.each.{.
376c0 7c 70 61 72 61 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 70 61 72 61 20 3d 7e 20 2f |para|..............if.para.=~./
376e0 5e 46 72 6f 6d 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 6c 20 3d 20 4d ^From/..................mail.=.M
37700 61 69 6c 2e 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 6c 2e 6e 6f ail.new..................mail.no
37720 20 3d 20 28 6d 73 67 6e 6f 20 2b 3d 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .=.(msgno.+=.1).................
37740 20 6d 64 20 3d 20 53 75 62 6a 65 63 74 70 61 74 74 65 72 6e 2e 6d 61 74 63 68 28 70 61 72 61 29 .md.=.Subjectpattern.match(para)
37760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6d 64 0d 0a 20 20 20 20 20 20 20 ..................if.md.........
37780 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 6c 2e 73 75 62 6a 65 63 74 20 3d 20 6d 64 5b 31 .............mail.subject.=.md[1
377a0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 ]..................end..........
377c0 20 20 20 20 20 20 20 20 6d 64 20 3d 20 44 61 74 65 70 61 74 74 65 72 6e 2e 6d 61 74 63 68 28 70 ........md.=.Datepattern.match(p
377e0 61 72 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6d 64 0d 0a 20 20 20 ara)..................if.md.....
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 6c 2e 64 61 74 65 20 3d 20 44 61 74 .................mail.date.=.Dat
37820 65 54 69 6d 65 2e 70 61 72 73 65 28 6d 64 5b 31 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 eTime.parse(md[1])..............
37840 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 ....else......................ma
37860 69 6c 2e 64 61 74 65 20 3d 20 44 61 74 65 54 69 6d 65 2e 6e 6f 77 0d 0a 20 20 20 20 20 20 20 20 il.date.=.DateTime.now..........
37880 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c ........end..................sel
378a0 66 2e 70 75 73 68 28 6d 61 69 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 f.push(mail)..............end...
378c0 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 6c 2e 61 70 70 65 6e 64 28 70 61 72 61 29 20 69 66 20 ...........mail.append(para).if.
378e0 6d 61 69 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 mail..........}......end........
37900 64 65 66 20 73 6f 72 74 5f 62 79 5f 73 75 62 6a 65 63 74 5f 61 6e 64 5f 6e 6f 0d 0a 20 20 20 20 def.sort_by_subject_and_no......
37920 20 20 20 20 73 65 6c 66 2e 73 6f 72 74 5f 62 79 20 7b 20 7c 6d 7c 0d 0a 20 20 20 20 20 20 20 20 ....self.sort_by.{.|m|..........
37940 20 20 20 20 5b 6d 2e 73 75 62 6a 65 63 74 2c 20 6d 2e 6e 6f 5d 0d 0a 20 20 20 20 20 20 20 20 7d ....[m.subject,.m.no]..........}
37960 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 73 6f 72 74 73 20 62 79 20 61 20 6c 69 ......end........#.sorts.by.a.li
37980 73 74 20 6f 66 20 61 74 74 72 69 62 75 74 73 20 6f 66 20 6d 61 69 6c 2c 20 67 69 76 65 6e 20 61 st.of.attributs.of.mail,.given.a
379a0 73 20 73 79 6d 62 6f 6c 73 0d 0a 20 20 20 20 64 65 66 20 73 6f 72 74 5f 62 79 5f 61 74 74 72 69 s.symbols......def.sort_by_attri
379c0 62 75 74 73 28 2a 61 74 74 72 73 29 0d 0a 20 20 20 20 20 20 20 20 23 20 79 6f 75 20 63 61 6e 20 buts(*attrs)..........#.you.can.
379e0 73 6f 72 74 20 61 6e 20 45 6e 75 6d 65 72 61 62 6c 65 20 62 79 20 61 6e 20 61 72 72 61 79 20 6f sort.an.Enumerable.by.an.array.o
37a00 66 0d 0a 20 20 20 20 20 20 20 20 23 20 76 61 6c 75 65 73 2c 20 74 68 65 79 20 77 6f 75 6c 64 20 f..........#.values,.they.would.
37a20 62 65 20 63 6f 6d 70 61 72 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 66 72 6f 6d 20 61 72 79 5b be.compared..........#.from.ary[
37a40 30 5d 20 74 6f 20 61 72 79 5b 6e 5d 74 2c 20 73 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 23 20 5b 0].to.ary[n]t,.say:..........#.[
37a60 27 62 27 2c 31 5d 20 3e 20 5b 27 61 27 2c 31 30 5d 20 3e 20 5b 27 61 27 2c 39 5d 0d 0a 20 20 20 'b',1].>.['a',10].>.['a',9].....
37a80 20 20 20 20 20 73 65 6c 66 2e 73 6f 72 74 5f 62 79 20 7b 20 7c 65 6c 65 6d 7c 0d 0a 20 20 20 20 .....self.sort_by.{.|elem|......
37aa0 20 20 20 20 20 20 20 20 61 74 74 72 73 2e 6d 61 70 20 7b 20 7c 61 74 74 72 7c 0d 0a 20 20 20 20 ........attrs.map.{.|attr|......
37ac0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 2e 73 65 6e 64 28 61 74 74 72 29 0d 0a 20 20 20 ............elem.send(attr).....
37ae0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a .........}..........}......end..
37b00 0d 0a 65 6e 64 0d 0a 0d 0a 6d 61 69 6c 62 6f 78 20 3d 20 4d 61 69 6c 62 6f 78 2e 6e 65 77 0d 0a ..end....mailbox.=.Mailbox.new..
37b20 6d 61 69 6c 62 6f 78 2e 72 65 61 64 28 41 52 47 46 29 0d 0a 0d 0a 23 20 70 72 69 6e 74 20 6f 6e mailbox.read(ARGF)....#.print.on
37b40 6c 79 20 73 75 62 6a 65 63 74 73 20 73 6f 72 74 65 64 20 62 79 20 73 75 62 6a 65 63 74 20 61 6e ly.subjects.sorted.by.subject.an
37b60 64 20 6e 75 6d 62 65 72 0d 0a 66 6f 72 20 6d 20 69 6e 20 6d 61 69 6c 62 6f 78 2e 73 6f 72 74 5f d.number..for.m.in.mailbox.sort_
37b80 62 79 5f 73 75 62 6a 65 63 74 5f 61 6e 64 5f 6e 6f 0d 0a 20 20 20 20 70 75 74 73 28 6d 2e 73 75 by_subject_and_no......puts(m.su
37ba0 62 6a 65 63 74 29 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 70 72 69 6e 74 20 63 6f 6d 70 6c 65 74 65 20 bject)..end....#.print.complete.
37bc0 6d 61 69 6c 73 20 73 6f 72 74 65 64 20 62 79 20 64 61 74 65 2c 20 74 68 65 6e 20 73 75 62 6a 65 mails.sorted.by.date,.then.subje
37be0 63 74 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 0d 0a 66 6f 72 20 6d 20 69 6e 20 6d 61 69 6c 62 6f ct,.then.number..for.m.in.mailbo
37c00 78 2e 73 6f 72 74 5f 62 79 5f 61 74 74 72 69 62 75 74 73 28 3a 64 61 74 65 2c 20 3a 73 75 62 6a x.sort_by_attributs(:date,.:subj
37c20 65 63 74 29 0d 0a 20 20 20 20 70 75 74 73 28 6d 29 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 ect)......puts(m)..end......#.@@
37c40 50 4c 45 41 43 40 40 5f 31 31 2e 37 0d 0a 64 65 66 20 6d 6b 63 6f 75 6e 74 65 72 28 63 6f 75 6e PLEAC@@_11.7..def.mkcounter(coun
37c60 74 29 0d 0a 20 20 20 20 73 74 61 72 74 20 20 3d 20 63 6f 75 6e 74 0d 0a 20 20 20 20 62 75 6e 64 t)......start..=.count......bund
37c80 6c 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 22 4e 45 58 54 22 20 20 20 3d 3e 20 70 72 6f 63 le.=.{.........."NEXT"...=>.proc
37ca0 20 7b 20 63 6f 75 6e 74 20 2b 3d 20 31 20 7d 2c 0d 0a 20 20 20 20 20 20 20 20 22 50 52 45 56 22 .{.count.+=.1.},.........."PREV"
37cc0 20 20 20 3d 3e 20 70 72 6f 63 20 7b 20 63 6f 75 6e 74 20 2d 3d 20 31 20 7d 2c 0d 0a 20 20 20 20 ...=>.proc.{.count.-=.1.},......
37ce0 20 20 20 20 22 52 45 53 45 54 22 20 20 3d 3e 20 70 72 6f 63 20 7b 20 63 6f 75 6e 74 20 3d 20 73 ...."RESET"..=>.proc.{.count.=.s
37d00 74 61 72 74 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 62 75 6e 64 6c 65 5b 22 4c 41 53 54 22 tart.}......}......bundle["LAST"
37d20 5d 20 3d 20 62 75 6e 64 6c 65 5b 22 50 52 45 56 22 5d 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 62 ].=.bundle["PREV"]......return.b
37d40 75 6e 64 6c 65 0d 0a 65 6e 64 0d 0a 0d 0a 63 31 20 3d 20 6d 6b 63 6f 75 6e 74 65 72 28 32 30 29 undle..end....c1.=.mkcounter(20)
37d60 0d 0a 63 32 20 3d 20 6d 6b 63 6f 75 6e 74 65 72 28 37 37 29 0d 0a 0d 0a 70 75 74 73 20 22 6e 65 ..c2.=.mkcounter(77)....puts."ne
37d80 78 74 20 63 31 3a 20 23 7b 63 31 5b 22 4e 45 58 54 22 5d 2e 63 61 6c 6c 7d 22 20 20 23 20 32 31 xt.c1:.#{c1["NEXT"].call}"..#.21
37da0 0d 0a 70 75 74 73 20 22 6e 65 78 74 20 63 32 3a 20 23 7b 63 32 5b 22 4e 45 58 54 22 5d 2e 63 61 ..puts."next.c2:.#{c2["NEXT"].ca
37dc0 6c 6c 7d 22 20 20 23 20 37 38 0d 0a 70 75 74 73 20 22 6e 65 78 74 20 63 31 3a 20 23 7b 63 31 5b ll}"..#.78..puts."next.c1:.#{c1[
37de0 22 4e 45 58 54 22 5d 2e 63 61 6c 6c 7d 22 20 20 23 20 32 32 0d 0a 70 75 74 73 20 22 6c 61 73 74 "NEXT"].call}"..#.22..puts."last
37e00 20 63 31 3a 20 23 7b 63 31 5b 22 50 52 45 56 22 5d 2e 63 61 6c 6c 7d 22 20 20 23 20 32 31 0d 0a .c1:.#{c1["PREV"].call}"..#.21..
37e20 70 75 74 73 20 22 6c 61 73 74 20 63 31 3a 20 23 7b 63 31 5b 22 4c 41 53 54 22 5d 2e 63 61 6c 6c puts."last.c1:.#{c1["LAST"].call
37e40 7d 22 20 20 23 20 32 30 0d 0a 70 75 74 73 20 22 6f 6c 64 20 20 63 32 3a 20 23 7b 63 32 5b 22 52 }"..#.20..puts."old..c2:.#{c2["R
37e60 45 53 45 54 22 5d 2e 63 61 6c 6c 7d 22 20 23 20 37 37 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 ESET"].call}".#.77......#.@@PLEA
37e80 43 40 40 5f 31 31 2e 31 35 0d 0a 63 6c 61 73 73 20 42 69 6e 61 72 79 5f 74 72 65 65 0d 0a 20 20 C@@_11.15..class.Binary_tree....
37ea0 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 76 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 40 ..def.initialize(val)..........@
37ec0 76 61 6c 75 65 20 3d 20 76 61 6c 0d 0a 20 20 20 20 20 20 20 20 40 6c 65 66 74 20 3d 20 6e 69 6c value.=.val..........@left.=.nil
37ee0 0d 0a 20 20 20 20 20 20 20 20 40 72 69 67 68 74 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 65 6e 64 0d ..........@right.=.nil......end.
37f00 0a 0d 0a 20 20 20 20 23 20 69 6e 73 65 72 74 20 67 69 76 65 6e 20 76 61 6c 75 65 20 69 6e 74 6f .......#.insert.given.value.into
37f20 20 70 72 6f 70 65 72 20 70 6f 69 6e 74 20 6f 66 0d 0a 20 20 20 20 23 20 70 72 6f 76 69 64 65 64 .proper.point.of......#.provided
37f40 20 74 72 65 65 2e 20 20 49 66 20 6e 6f 20 74 72 65 65 20 70 72 6f 76 69 64 65 64 2c 0d 0a 20 20 .tree...If.no.tree.provided,....
37f60 20 20 23 20 75 73 65 20 69 6d 70 6c 69 63 69 74 20 70 61 73 73 20 62 79 20 72 65 66 65 72 65 6e ..#.use.implicit.pass.by.referen
37f80 63 65 20 61 73 70 65 63 74 20 6f 66 20 40 5f 0d 0a 20 20 20 20 23 20 74 6f 20 66 69 6c 6c 20 6f ce.aspect.of.@_......#.to.fill.o
37fa0 6e 65 20 69 6e 20 66 6f 72 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 64 65 66 20 69 ne.in.for.our.caller.......def.i
37fc0 6e 73 65 72 74 28 76 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 76 61 6c 20 3c 20 40 76 61 nsert(val)..........if.val.<.@va
37fe0 6c 75 65 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 40 6c 65 66 74 20 74 lue.then..............if.@left.t
38000 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 40 6c 65 66 74 2e 69 6e 73 65 72 hen..................@left.inser
38020 74 28 76 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 t(val)..............else........
38040 20 20 20 20 20 20 20 20 20 20 40 6c 65 66 74 20 3d 20 42 69 6e 61 72 79 5f 74 72 65 65 2e 6e 65 ..........@left.=.Binary_tree.ne
38060 77 28 76 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 w(val)..............end.........
38080 20 65 6c 73 69 66 20 76 61 6c 20 3e 20 40 76 61 6c 75 65 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 .elsif.val.>.@value.then........
380a0 20 20 20 20 20 20 69 66 20 40 72 69 67 68 74 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 ......if.@right.then............
380c0 20 20 20 20 20 20 40 72 69 67 68 74 2e 69 6e 73 65 72 74 28 76 61 6c 29 0d 0a 20 20 20 20 20 20 ......@right.insert(val)........
380e0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 40 72 69 67 ......else..................@rig
38100 68 74 20 3d 20 42 69 6e 61 72 79 5f 74 72 65 65 2e 6e 65 77 28 76 61 6c 29 0d 0a 20 20 20 20 20 ht.=.Binary_tree.new(val).......
38120 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 .......end..........else........
38140 20 20 20 20 20 20 70 75 74 73 20 22 64 6f 75 62 6c 65 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ......puts."double".............
38160 20 23 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 6e 6f 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 73 0d .#.do.nothing,.no.double.values.
38180 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 72 .........end......end........#.r
381a0 65 63 75 72 73 65 20 6f 6e 20 6c 65 66 74 20 63 68 69 6c 64 2c 0d 0a 20 20 20 20 23 20 74 68 65 ecurse.on.left.child,......#.the
381c0 6e 20 73 68 6f 77 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 23 20 74 68 65 n.show.current.value,......#.the
381e0 6e 20 72 65 63 75 72 73 65 20 6f 6e 20 72 69 67 68 74 20 63 68 69 6c 64 2e 0d 0a 20 20 20 20 64 n.recurse.on.right.child.......d
38200 65 66 20 69 6e 5f 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20 20 40 6c 65 66 74 2e 69 6e 5f 6f 72 ef.in_order..........@left.in_or
38220 64 65 72 20 69 66 20 40 6c 65 66 74 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 40 76 61 6c der.if.@left..........print.@val
38240 75 65 2c 20 22 20 22 0d 0a 20 20 20 20 20 20 20 20 40 72 69 67 68 74 2e 69 6e 5f 6f 72 64 65 72 ue,."."..........@right.in_order
38260 20 69 66 20 40 72 69 67 68 74 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 73 68 6f .if.@right......end........#.sho
38280 77 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 23 20 74 68 65 6e 20 72 65 63 w.current.value,......#.then.rec
382a0 75 72 73 65 20 6f 6e 20 6c 65 66 74 20 63 68 69 6c 64 2c 0d 0a 20 20 20 20 23 20 74 68 65 6e 20 urse.on.left.child,......#.then.
382c0 72 65 63 75 72 73 65 20 6f 6e 20 72 69 67 68 74 20 63 68 69 6c 64 2e 0d 0a 20 20 20 20 64 65 66 recurse.on.right.child.......def
382e0 20 70 72 65 5f 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 40 76 61 6c 75 65 .pre_order..........print.@value
38300 2c 20 22 20 22 0d 0a 20 20 20 20 20 20 20 20 40 6c 65 66 74 2e 70 72 65 5f 6f 72 64 65 72 20 69 ,."."..........@left.pre_order.i
38320 66 20 40 6c 65 66 74 0d 0a 20 20 20 20 20 20 20 20 40 72 69 67 68 74 2e 70 72 65 5f 6f 72 64 65 f.@left..........@right.pre_orde
38340 72 20 69 66 20 40 72 69 67 68 74 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 72 65 r.if.@right......end........#.re
38360 63 75 72 73 65 20 6f 6e 20 6c 65 66 74 20 63 68 69 6c 64 2c 0d 0a 20 20 20 20 23 20 74 68 65 6e curse.on.left.child,......#.then
38380 20 72 65 63 75 72 73 65 20 6f 6e 20 72 69 67 68 74 20 63 68 69 6c 64 2c 0d 0a 20 20 20 20 23 20 .recurse.on.right.child,......#.
383a0 74 68 65 6e 20 73 68 6f 77 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 64 65 then.show.current.value.......de
383c0 66 20 70 6f 73 74 5f 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20 20 40 6c 65 66 74 2e 70 6f 73 74 f.post_order..........@left.post
383e0 5f 6f 72 64 65 72 20 69 66 20 40 6c 65 66 74 0d 0a 20 20 20 20 20 20 20 20 40 72 69 67 68 74 2e _order.if.@left..........@right.
38400 70 6f 73 74 5f 6f 72 64 65 72 20 69 66 20 40 72 69 67 68 74 0d 0a 20 20 20 20 20 20 20 20 70 72 post_order.if.@right..........pr
38420 69 6e 74 20 40 76 61 6c 75 65 2c 20 22 20 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 int.@value,."."......end........
38440 23 20 66 69 6e 64 20 6f 75 74 20 77 68 65 74 68 65 72 20 70 72 6f 76 69 64 65 64 20 76 61 6c 75 #.find.out.whether.provided.valu
38460 65 20 69 73 20 69 6e 20 74 68 65 20 74 72 65 65 2e 0d 0a 20 20 20 20 23 20 69 66 20 73 6f 2c 20 e.is.in.the.tree.......#.if.so,.
38480 72 65 74 75 72 6e 20 74 68 65 20 6e 6f 64 65 20 61 74 20 77 68 69 63 68 20 74 68 65 20 76 61 6c return.the.node.at.which.the.val
384a0 75 65 20 77 61 73 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 23 20 63 75 74 20 64 6f 77 6e 20 73 65 ue.was.found.......#.cut.down.se
384c0 61 72 63 68 20 74 69 6d 65 20 62 79 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 20 69 6e 20 74 68 65 arch.time.by.only.looking.in.the
384e0 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 20 23 20 62 72 61 6e 63 68 2c 20 62 61 73 65 64 20 6f 6e .correct......#.branch,.based.on
38500 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 64 65 66 20 73 65 61 72 63 68 28 .current.value.......def.search(
38520 76 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 76 61 6c 20 3d 3d 20 40 76 61 6c 75 65 20 74 val)..........if.val.==.@value.t
38540 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 6c 66 0d 0a 20 20 hen..............return.self....
38560 20 20 20 20 20 20 65 6c 73 69 66 20 76 61 6c 20 3c 20 40 76 61 6c 75 65 20 74 68 65 6e 0d 0a 20 ......elsif.val.<.@value.then...
38580 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 40 6c 65 66 74 2e 73 65 61 72 63 68 28 76 ...........return.@left.search(v
385a0 61 6c 29 20 69 66 20 40 6c 65 66 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e al).if.@left..............return
385c0 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .nil..........else..............
385e0 72 65 74 75 72 6e 20 40 72 69 67 68 74 2e 73 65 61 72 63 68 28 76 61 6c 29 20 69 66 20 40 72 69 return.@right.search(val).if.@ri
38600 67 68 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 69 6c 0d 0a 20 20 20 ght..............return.nil.....
38620 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 66 69 72 73 .....end......end..end....#.firs
38640 74 20 67 65 6e 65 72 61 74 65 20 32 30 20 72 61 6e 64 6f 6d 20 69 6e 73 65 72 74 73 0d 0a 74 65 t.generate.20.random.inserts..te
38660 73 74 20 3d 20 42 69 6e 61 72 79 5f 74 72 65 65 2e 6e 65 77 28 30 29 0d 0a 66 6f 72 20 61 20 69 st.=.Binary_tree.new(0)..for.a.i
38680 6e 20 30 2e 2e 32 30 0d 0a 20 20 20 20 74 65 73 74 2e 69 6e 73 65 72 74 28 72 61 6e 64 28 31 30 n.0..20......test.insert(rand(10
386a0 30 30 29 29 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 6e 6f 77 20 64 75 6d 70 20 6f 75 74 20 74 68 65 20 00))..end....#.now.dump.out.the.
386c0 74 72 65 65 20 61 6c 6c 20 74 68 72 65 65 20 77 61 79 73 0d 0a 70 72 69 6e 74 20 22 50 72 65 20 tree.all.three.ways..print."Pre.
386e0 6f 72 64 65 72 3a 20 20 22 3b 20 20 74 65 73 74 2e 70 72 65 5f 6f 72 64 65 72 3b 20 20 70 75 74 order:..";..test.pre_order;..put
38700 73 20 22 22 0d 0a 70 72 69 6e 74 20 22 49 6e 20 6f 72 64 65 72 3a 20 20 22 3b 20 20 74 65 73 74 s.""..print."In.order:..";..test
38720 2e 69 6e 5f 6f 72 64 65 72 3b 20 20 70 75 74 73 20 22 22 0d 0a 70 72 69 6e 74 20 22 50 6f 73 74 .in_order;..puts.""..print."Post
38740 20 6f 72 64 65 72 3a 20 20 22 3b 20 20 74 65 73 74 2e 70 6f 73 74 5f 6f 72 64 65 72 3b 20 20 70 .order:..";..test.post_order;..p
38760 75 74 73 20 22 22 0d 0a 0d 0a 70 72 69 6e 74 20 22 73 65 61 72 63 68 3f 22 0d 0a 77 68 69 6c 65 uts.""....print."search?"..while
38780 20 67 65 74 73 0d 0a 20 20 20 20 70 72 69 6e 74 20 74 65 73 74 2e 73 65 61 72 63 68 28 24 5f 2e .gets......print.test.search($_.
387a0 74 6f 5f 69 29 0d 0a 20 20 20 20 70 72 69 6e 74 20 22 5c 6e 73 65 61 72 63 68 3f 22 0d 0a 65 6e to_i)......print."\nsearch?"..en
387c0 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 32 2e 30 0d 0a 23 20 63 6c 61 73 73 d......#.@@PLEAC@@_12.0..#.class
387e0 20 61 6e 64 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 73 20 6e 65 65 64 20 74 6f 20 68 61 76 65 20 74 .and.module.names.need.to.have.t
38800 68 65 20 66 69 72 73 74 20 6c 65 74 74 65 72 20 63 61 70 69 74 61 6c 69 7a 65 64 0d 0a 6d 6f 64 he.first.letter.capitalized..mod
38820 75 6c 65 20 41 6c 70 68 61 0d 0a 20 20 20 20 4e 41 4d 45 20 3d 20 27 66 69 72 73 74 27 0d 0a 65 ule.Alpha......NAME.=.'first'..e
38840 6e 64 0d 0a 6d 6f 64 75 6c 65 20 4f 6d 65 67 61 0d 0a 20 20 20 20 4e 41 4d 45 20 3d 20 27 6c 61 nd..module.Omega......NAME.=.'la
38860 73 74 27 0d 0a 65 6e 64 0d 0a 70 75 74 73 20 22 41 6c 70 68 61 20 69 73 20 23 7b 41 6c 70 68 61 st'..end..puts."Alpha.is.#{Alpha
38880 3a 3a 4e 41 4d 45 7d 2c 20 4f 6d 65 67 61 20 69 73 20 23 7b 4f 6d 65 67 61 3a 3a 4e 41 4d 45 7d ::NAME},.Omega.is.#{Omega::NAME}
388a0 22 0d 0a 0d 0a 23 20 72 75 62 79 20 64 6f 65 73 6e 27 74 20 64 69 66 66 65 72 65 6e 74 69 61 74 "....#.ruby.doesn't.differentiat
388c0 65 20 62 65 74 65 65 6e 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 61 6e 64 20 72 75 6e 2d 74 69 e.beteen.compile-time.and.run-ti
388e0 6d 65 0d 0a 72 65 71 75 69 72 65 20 27 67 65 74 6f 70 74 6c 6f 6e 67 2e 72 62 27 0d 0a 72 65 71 me..require.'getoptlong.rb'..req
38900 75 69 72 65 20 27 67 65 74 6f 70 74 6c 6f 6e 67 27 20 20 20 20 20 23 20 61 73 73 75 6d 65 73 20 uire.'getoptlong'.....#.assumes.
38920 74 68 65 20 2e 72 62 0d 0a 72 65 71 75 69 72 65 20 27 63 61 72 64 73 2f 70 6f 6b 65 72 2e 72 62 the..rb..require.'cards/poker.rb
38940 27 0d 0a 72 65 71 75 69 72 65 20 27 63 61 72 64 73 2f 70 6f 6b 65 72 27 20 20 20 20 23 20 61 73 '..require.'cards/poker'....#.as
38960 73 75 6d 65 73 20 74 68 65 20 2e 72 62 0d 0a 6c 6f 61 64 20 20 20 20 27 63 61 72 64 73 2f 70 6f sumes.the..rb..load....'cards/po
38980 6b 65 72 27 20 20 20 20 23 20 72 65 71 75 69 72 65 20 6f 6e 6c 79 20 6c 6f 61 64 73 20 74 68 65 ker'....#.require.only.loads.the
389a0 20 66 69 6c 65 20 6f 6e 63 65 0d 0a 0d 0a 6d 6f 64 75 6c 65 20 43 61 72 64 73 0d 0a 20 20 20 20 .file.once....module.Cards......
389c0 6d 6f 64 75 6c 65 20 50 6f 6b 65 72 0d 0a 20 20 20 20 20 20 20 20 40 63 61 72 64 5f 64 65 63 6b module.Poker..........@card_deck
389e0 20 3d 20 41 72 72 61 79 2e 6e 65 77 20 23 20 6f 72 20 40 63 61 72 64 5f 64 65 63 6b 20 3d 20 5b .=.Array.new.#.or.@card_deck.=.[
38a00 5d 0d 0a 20 20 20 20 20 20 20 20 64 65 66 20 73 68 75 66 66 6c 65 0d 0a 20 20 20 20 20 20 20 20 ]..........def.shuffle..........
38a20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 end......end..end......#.@@PLEAC
38a40 40 40 5f 31 32 2e 31 0d 0a 23 20 61 20 6d 6f 64 75 6c 65 20 65 78 70 6f 72 74 73 20 61 6c 6c 20 @@_12.1..#.a.module.exports.all.
38a60 6f 66 20 69 74 73 20 66 75 6e 63 74 69 6f 6e 73 0d 0a 6d 6f 64 75 6c 65 20 59 6f 75 72 5f 4d 6f of.its.functions..module.Your_Mo
38a80 64 75 6c 65 0d 0a 20 20 20 20 64 65 66 20 73 65 6c 66 2e 66 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 dule......def.self.function.....
38aa0 20 20 20 20 20 23 20 74 68 69 73 20 77 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 61 73 20 59 .....#.this.would.be.called.as.Y
38ac0 6f 75 72 5f 4d 6f 64 75 6c 65 2e 66 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a our_Module.function......end....
38ae0 20 20 20 20 64 65 66 20 59 6f 75 72 5f 4d 6f 64 75 6c 65 2e 61 6e 6f 74 68 65 72 0d 0a 20 20 20 ....def.Your_Module.another.....
38b00 20 20 20 20 20 23 20 74 68 69 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 62 6f 76 65 .....#.this.is.the.same.as.above
38b20 2c 20 62 75 74 20 6d 6f 72 65 20 73 70 65 63 69 66 69 63 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e ,.but.more.specific......end..en
38b40 64 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 32 2e 32 0d 0a 62 65 67 69 6e 0d 0a 20 20 d....#.@@PLEAC@@_12.2..begin....
38b60 20 20 72 65 71 75 69 72 65 20 27 6e 6f 6e 65 78 69 73 74 65 6e 74 27 0d 0a 72 65 73 63 75 65 20 ..require.'nonexistent'..rescue.
38b80 4c 6f 61 64 45 72 72 6f 72 0d 0a 20 20 20 20 70 75 74 73 20 22 43 6f 75 6c 64 6e 27 74 20 6c 6f LoadError......puts."Couldn't.lo
38ba0 61 64 20 23 7b 24 21 7d 22 20 20 23 20 24 21 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6c 61 73 ad.#{$!}"..#.$!.contains.the.las
38bc0 74 20 65 72 72 6f 72 20 73 74 72 69 6e 67 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 t.error.string..end....#.@@PLEAC
38be0 40 40 5f 31 32 2e 34 0d 0a 23 20 6d 6f 64 75 6c 65 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 @@_12.4..#.module.variables.are.
38c00 70 72 69 76 61 74 65 20 75 6e 6c 65 73 73 20 61 63 63 65 73 73 20 66 75 6e 63 74 69 6f 6e 73 20 private.unless.access.functions.
38c20 61 72 65 20 64 65 66 69 6e 65 64 0d 0a 6d 6f 64 75 6c 65 20 41 6c 70 68 61 0d 0a 20 20 20 20 40 are.defined..module.Alpha......@
38c40 61 61 20 3d 20 31 30 0d 0a 20 20 20 20 40 62 62 20 3d 20 31 31 0d 0a 0d 0a 20 20 20 20 64 65 66 aa.=.10......@bb.=.11........def
38c60 20 73 65 6c 66 2e 70 75 74 5f 61 61 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 40 61 61 0d 0a .self.put_aa..........puts.@aa..
38c80 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 73 65 6c 66 2e 62 62 3d 28 76 61 6c 29 ....end........def.self.bb=(val)
38ca0 0d 0a 20 20 20 20 20 20 20 20 40 62 62 20 3d 20 76 61 6c 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e ..........@bb.=.val......end..en
38cc0 64 0d 0a 0d 0a 41 6c 70 68 61 2e 62 62 20 3d 20 31 32 0d 0a 23 20 41 6c 70 68 61 2e 61 61 20 3d d....Alpha.bb.=.12..#.Alpha.aa.=
38ce0 20 31 30 20 23 20 65 72 72 6f 72 2c 20 6e 6f 20 61 61 3d 6d 65 74 68 6f 64 0d 0a 0d 0a 0d 0a 23 .10.#.error,.no.aa=method......#
38d00 20 40 40 50 4c 45 41 43 40 40 5f 31 32 2e 35 0d 0a 23 20 63 61 6c 6c 65 72 20 70 72 6f 76 69 64 .@@PLEAC@@_12.5..#.caller.provid
38d20 65 73 20 61 20 62 61 63 6b 74 72 61 63 65 20 6f 66 20 74 68 65 20 63 61 6c 6c 20 73 74 61 63 6b es.a.backtrace.of.the.call.stack
38d40 0d 0a 6d 6f 64 75 6c 65 20 4d 79 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 64 65 66 20 66 69 6e 64 5f ..module.MyModule......def.find_
38d60 63 61 6c 6c 65 72 0d 0a 20 20 20 20 20 20 20 20 63 61 6c 6c 65 72 0d 0a 20 20 20 20 65 6e 64 0d caller..........caller......end.
38d80 0a 0d 0a 20 20 20 20 64 65 66 20 66 69 6e 64 5f 63 61 6c 6c 65 72 32 28 69 29 0d 0a 20 20 20 20 .......def.find_caller2(i)......
38da0 20 20 20 20 63 61 6c 6c 65 72 28 69 29 20 23 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 6c 69 6d 69 ....caller(i).#.an.argument.limi
38dc0 74 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 72 65 74 75 72 6e 65 ts.the.size.of.the.stack.returne
38de0 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 d......end..end......#.@@PLEAC@@
38e00 5f 31 32 2e 36 0d 0a 42 45 47 49 4e 20 7b 0d 0a 20 20 20 20 24 6c 6f 67 66 69 6c 65 20 3d 20 27 _12.6..BEGIN.{......$logfile.=.'
38e20 2f 74 6d 70 2f 6d 79 6c 6f 67 27 20 75 6e 6c 65 73 73 20 64 65 66 69 6e 65 64 3f 20 24 6c 6f 67 /tmp/mylog'.unless.defined?.$log
38e40 66 69 6c 65 0d 0a 20 20 20 20 24 4c 46 20 3d 20 46 69 6c 65 2e 6f 70 65 6e 28 24 6c 6f 67 66 69 file......$LF.=.File.open($logfi
38e60 6c 65 2c 20 27 61 27 29 0d 0a 7d 0d 0a 0d 0a 6d 6f 64 75 6c 65 20 4c 6f 67 67 65 72 0d 0a 20 20 le,.'a')..}....module.Logger....
38e80 20 20 64 65 66 20 73 65 6c 66 2e 6c 6f 67 6d 73 67 28 6d 73 67 29 0d 0a 20 20 20 20 20 20 20 20 ..def.self.logmsg(msg)..........
38ea0 24 4c 46 2e 70 75 74 73 20 6d 73 67 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 6c 6f 67 $LF.puts.msg......end........log
38ec0 6d 73 67 28 27 73 74 61 72 74 75 70 27 29 0d 0a 65 6e 64 0d 0a 0d 0a 45 4e 44 20 7b 0d 0a 20 20 msg('startup')..end....END.{....
38ee0 20 20 4c 6f 67 67 65 72 3a 3a 6c 6f 67 6d 73 67 28 27 73 68 75 74 64 6f 77 6e 27 29 0d 0a 20 20 ..Logger::logmsg('shutdown')....
38f00 20 20 24 4c 46 2e 63 6c 6f 73 65 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f ..$LF.close..}......#.@@PLEAC@@_
38f20 31 32 2e 37 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 12.7..#-------------------------
38f40 2d 2d 2d 2d 0d 0a 23 20 72 65 73 75 6c 74 73 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 ----..#.results.may.be.different
38f60 20 6f 6e 20 79 6f 75 72 20 73 79 73 74 65 6d 0d 0a 23 20 25 20 72 75 62 79 20 2d 65 20 22 24 4c .on.your.system..#.%.ruby.-e."$L
38f80 4f 41 44 5f 50 41 54 48 2e 65 61 63 68 5f 69 6e 64 65 78 20 7b 20 7c 69 7c 20 70 72 69 6e 74 66 OAD_PATH.each_index.{.|i|.printf
38fa0 28 22 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 24 4c 4f 41 44 5f 50 41 54 48 5b 69 5d 20 7d 0d 0a ("%d.%s\n",.i,.$LOAD_PATH[i].}..
38fc0 23 30 20 2f 75 73 72 2f 6c 6f 63 61 6c 2f 6c 69 62 2f 73 69 74 65 5f 72 75 62 79 2f 31 2e 36 0d #0./usr/local/lib/site_ruby/1.6.
38fe0 0a 23 31 20 2f 75 73 72 2f 6c 6f 63 61 6c 2f 6c 69 62 2f 73 69 74 65 5f 72 75 62 79 2f 31 2e 36 .#1./usr/local/lib/site_ruby/1.6
39000 2f 69 33 38 36 2d 6c 69 6e 75 78 0d 0a 23 32 20 2f 75 73 72 2f 6c 6f 63 61 6c 2f 6c 69 62 2f 73 /i386-linux..#2./usr/local/lib/s
39020 69 74 65 5f 72 75 62 79 2f 0d 0a 23 33 20 2f 75 73 72 2f 6c 69 62 2f 72 75 62 79 2f 31 2e 36 0d ite_ruby/..#3./usr/lib/ruby/1.6.
39040 0a 23 34 20 2f 75 73 72 2f 6c 69 62 2f 72 75 62 79 2f 31 2e 36 2f 69 31 33 36 2d 6c 69 6e 75 78 .#4./usr/lib/ruby/1.6/i136-linux
39060 0d 0a 23 35 20 2e 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#5....#-----------------------
39080 2d 2d 2d 2d 2d 2d 0d 0a 23 20 73 79 6e 74 61 78 20 66 6f 72 20 73 68 2c 20 62 61 73 68 2c 20 6b ------..#.syntax.for.sh,.bash,.k
390a0 73 68 2c 20 6f 72 20 7a 73 68 0d 0a 23 24 20 65 78 70 6f 72 74 20 52 55 42 59 4c 49 42 3d 24 48 sh,.or.zsh..#$.export.RUBYLIB=$H
390c0 4f 4d 45 2f 72 75 62 79 6c 69 62 0d 0a 0d 0a 23 20 73 79 6e 74 61 78 20 66 6f 72 20 63 73 68 20 OME/rubylib....#.syntax.for.csh.
390e0 6f 72 20 74 63 73 68 0d 0a 23 20 25 20 73 65 74 65 6e 76 20 52 55 42 59 4c 49 42 20 7e 2f 72 75 or.tcsh..#.%.setenv.RUBYLIB.~/ru
39100 62 79 6c 69 62 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d bylib..#------------------------
39120 2d 2d 2d 2d 2d 0d 0a 24 4c 4f 41 44 5f 50 41 54 48 2e 75 6e 73 68 69 66 74 20 22 2f 70 72 6f 6a -----..$LOAD_PATH.unshift."/proj
39140 65 63 74 73 2f 73 70 65 63 74 72 65 2f 6c 69 62 22 3b 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 ects/spectre/lib";......#.@@PLEA
39160 43 40 40 5f 31 32 2e 38 0d 0a 23 20 65 71 75 69 76 61 6c 65 6e 74 73 20 69 6e 20 72 75 62 79 20 C@@_12.8..#.equivalents.in.ruby.
39180 61 72 65 20 6d 6b 6d 66 2c 20 53 57 49 47 2c 20 6f 72 20 52 75 62 79 2f 44 4c 20 64 65 70 65 6e are.mkmf,.SWIG,.or.Ruby/DL.depen
391a0 64 69 6e 67 20 6f 6e 20 75 73 61 67 65 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 ding.on.usage......#.@@PLEAC@@_1
391c0 32 2e 39 0d 0a 23 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 20 72 75 62 79 0d 0a 0d 0a 2.9..#.no.equivalent.in.ruby....
391e0 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 32 2e 31 30 0d 0a 23 20 6e 6f 20 65 71 75 69 76 61 ..#.@@PLEAC@@_12.10..#.no.equiva
39200 6c 65 6e 74 20 69 6e 20 72 75 62 79 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 32 lent.in.ruby......#.@@PLEAC@@_12
39220 2e 31 31 0d 0a 6d 6f 64 75 6c 65 20 46 69 6e 65 54 69 6d 65 0d 0a 20 20 20 20 64 65 66 20 73 65 .11..module.FineTime......def.se
39240 6c 66 2e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 lf.time..........#.to.be.defined
39260 20 6c 61 74 65 72 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 6d 6f 64 75 6c 65 .later......end..end......module
39280 20 46 69 6e 65 54 69 6d 65 0d 0a 20 20 20 20 64 65 66 20 73 65 6c 66 2e 74 69 6d 65 0d 0a 20 20 .FineTime......def.self.time....
392a0 20 20 20 20 20 20 22 69 74 73 20 61 20 66 69 6e 65 20 74 69 6d 65 22 0d 0a 20 20 20 20 65 6e 64 ......"its.a.fine.time"......end
392c0 0d 0a 65 6e 64 0d 0a 0d 0a 70 75 74 73 20 46 69 6e 65 54 69 6d 65 2e 74 69 6d 65 20 23 3d 3e 20 ..end....puts.FineTime.time.#=>.
392e0 22 69 74 73 20 61 20 66 69 6e 65 20 74 69 6d 65 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 "its.a.fine.time"......#.@@PLEAC
39300 40 40 5f 31 32 2e 31 32 0d 0a 64 65 66 20 65 76 65 6e 5f 6f 6e 6c 79 28 6e 29 0d 0a 20 20 20 20 @@_12.12..def.even_only(n)......
39320 72 61 69 73 65 20 22 23 7b 6e 7d 20 69 73 20 6e 6f 74 20 65 76 65 6e 22 20 69 66 20 28 6e 20 26 raise."#{n}.is.not.even".if.(n.&
39340 20 31 29 20 21 3d 20 30 20 20 23 20 6f 6e 65 20 77 61 79 20 74 6f 20 74 65 73 74 0d 0a 20 20 20 .1).!=.0..#.one.way.to.test.....
39360 20 23 20 2e 2e 2e 0d 0a 65 6e 64 0d 0a 64 65 66 20 65 76 65 6e 5f 6f 6e 6c 79 28 6e 29 0d 0a 20 .#......end..def.even_only(n)...
39380 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 73 20 22 23 7b 6e 7d 20 69 73 20 6e 6f 74 20 65 76 65 ...$stderr.puts."#{n}.is.not.eve
393a0 6e 22 20 69 66 20 28 6e 20 26 20 31 29 20 21 3d 20 30 0d 0a 20 20 20 20 23 20 2e 2e 2e 0d 0a 65 n".if.(n.&.1).!=.0......#......e
393c0 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 32 2e 31 37 0d 0a 23 20 54 68 65 nd......#.@@PLEAC@@_12.17..#.The
393e0 20 6c 69 62 72 61 72 79 20 61 72 63 68 69 76 65 20 66 6f 72 20 72 75 62 79 20 69 73 20 63 61 6c .library.archive.for.ruby.is.cal
39400 6c 65 64 20 52 75 62 79 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 61 72 63 68 69 76 65 2c 0d 0a 23 led.Ruby.Application.archive,..#
39420 20 6f 72 20 73 68 6f 72 74 65 72 20 52 41 41 2c 20 61 6e 64 20 63 61 6e 20 62 65 20 66 6f 75 6e .or.shorter.RAA,.and.can.be.foun
39440 64 20 61 74 20 68 74 74 70 3a 2f 2f 72 61 61 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 2e 0d 0a d.at.http://raa.ruby-lang.org...
39460 23 20 41 20 74 79 70 69 63 61 6c 20 6c 69 62 72 61 72 79 20 69 73 20 69 6e 73 74 61 6c 6c 65 64 #.A.typical.library.is.installed
39480 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 23 20 25 20 67 75 6e 7a 69 70 20 73 6f 6d 65 2d 6d 6f 64 .like.this:..#.%.gunzip.some-mod
394a0 75 6c 65 2d 34 2e 35 34 2e 74 61 72 2e 67 7a 0d 0a 23 20 25 20 74 61 72 20 78 66 20 73 6f 6d 65 ule-4.54.tar.gz..#.%.tar.xf.some
394c0 2d 6d 6f 64 75 6c 65 2d 34 2e 35 34 2e 74 61 72 0d 0a 23 20 25 20 63 64 20 73 6f 6d 65 2d 6d 6f -module-4.54.tar..#.%.cd.some-mo
394e0 64 75 6c 65 2d 34 2e 35 34 2e 74 61 72 0d 0a 23 20 25 20 72 75 62 79 20 69 6e 73 74 61 6c 6c 2e dule-4.54.tar..#.%.ruby.install.
39500 72 62 20 63 6f 6e 66 69 67 0d 0a 23 20 25 20 72 75 62 79 20 69 6e 73 74 61 6c 6c 2e 72 62 20 73 rb.config..#.%.ruby.install.rb.s
39520 65 74 75 70 0d 0a 23 20 67 65 74 20 73 75 70 65 72 75 73 65 72 20 70 72 65 76 69 6c 65 67 65 73 etup..#.get.superuser.previleges
39540 20 68 65 72 65 20 69 66 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 65 78 74 20 73 74 65 70 0d 0a 23 .here.if.needed.for.next.step..#
39560 20 25 20 72 75 62 79 20 69 6e 73 74 61 6c 6c 2e 72 62 20 69 6e 73 74 61 6c 6c 0d 0a 0d 0a 23 20 .%.ruby.install.rb.install....#.
39580 53 6f 6d 65 20 6d 6f 64 75 6c 65 73 20 75 73 65 20 61 20 64 69 66 66 65 72 65 6e 74 20 70 72 6f Some.modules.use.a.different.pro
395a0 63 65 73 73 2c 0d 0a 23 20 79 6f 75 20 73 68 6f 75 6c 64 20 66 69 6e 64 20 64 65 74 61 69 6c 73 cess,..#.you.should.find.details
395c0 20 69 6e 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0d 0a 23 20 48 65 72 65 20 69 73 .in.the.documentation..#.Here.is
395e0 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 73 75 63 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 .an.example.of.such.a.different.
39600 70 72 6f 63 65 73 73 0d 0a 23 20 25 20 72 75 62 79 20 65 78 74 63 6f 6e 66 2e 72 62 0d 0a 23 20 process..#.%.ruby.extconf.rb..#.
39620 25 20 6d 61 6b 65 0d 0a 23 20 25 20 6d 61 6b 65 20 69 6e 73 74 61 6c 6c 0d 0a 0d 0a 23 20 49 66 %.make..#.%.make.install....#.If
39640 20 79 6f 75 20 77 61 6e 74 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6e 73 74 61 6c 6c 65 64 20 69 .you.want.the.module.installed.i
39660 6e 20 79 6f 75 72 20 6f 77 6e 20 64 69 72 65 63 74 6f 72 79 3a 0d 0a 23 20 46 6f 72 20 72 75 62 n.your.own.directory:..#.For.rub
39680 79 20 76 65 72 73 69 6f 6e 20 73 70 65 63 69 66 69 63 20 6c 69 62 72 61 72 69 65 73 0d 0a 23 20 y.version.specific.libraries..#.
396a0 25 20 72 75 62 79 20 69 6e 73 74 61 6c 6c 2e 72 62 20 63 6f 6e 66 69 67 20 2d 2d 73 69 74 65 2d %.ruby.install.rb.config.--site-
396c0 72 75 62 79 3d 7e 2f 6c 69 62 0d 0a 23 20 46 6f 72 20 76 65 72 73 69 6f 6e 20 69 6e 64 65 70 65 ruby=~/lib..#.For.version.indepe
396e0 6e 64 65 6e 74 20 6c 69 62 72 61 72 69 65 73 0d 0a 23 20 25 20 72 75 62 79 20 69 6e 73 74 61 6c ndent.libraries..#.%.ruby.instal
39700 6c 2e 72 62 20 63 6f 6e 66 69 67 20 2d 2d 73 69 74 65 2d 72 75 62 79 2d 63 6f 6d 6d 6f 6e 3d 7e l.rb.config.--site-ruby-common=~
39720 2f 6c 69 62 0d 0a 0d 0a 23 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 6f 73 73 /lib....#.Information.about.poss
39740 69 62 6c 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 63 6f 6e 66 69 67 0d 0a 23 20 25 20 72 75 62 ible.options.for.config..#.%.rub
39760 79 20 69 6e 73 74 61 6c 6c 2e 72 62 20 2d 2d 68 65 6c 70 0d 0a 0d 0a 23 20 49 66 20 79 6f 75 20 y.install.rb.--help....#.If.you.
39780 68 61 76 65 20 79 6f 75 72 20 6f 77 6e 20 63 6f 6d 70 6c 65 74 65 20 64 69 73 74 72 69 62 75 74 have.your.own.complete.distribut
397a0 69 6f 6e 0d 0a 23 20 25 20 72 75 62 79 20 69 6e 73 74 61 6c 6c 2e 72 62 20 2d 2d 70 72 65 66 69 ion..#.%.ruby.install.rb.--prefi
397c0 78 3d 70 61 74 68 3d 7e 2f 72 75 62 79 2d 70 72 69 76 61 74 65 0d 0a 0d 0a 0d 0a 23 20 40 40 50 x=path=~/ruby-private......#.@@P
397e0 4c 45 41 43 40 40 5f 31 33 2e 30 0d 0a 23 20 43 6c 61 73 73 65 73 20 61 6e 64 20 6f 62 6a 65 63 LEAC@@_13.0..#.Classes.and.objec
39800 74 73 20 69 6e 20 52 75 62 79 20 61 72 65 20 72 61 74 68 65 72 20 73 74 72 61 69 67 74 68 66 6f ts.in.Ruby.are.rather.straigthfo
39820 72 77 61 72 64 0d 0a 63 6c 61 73 73 20 50 65 72 73 6f 6e 0d 0a 20 20 20 20 23 20 43 6c 61 73 73 rward..class.Person......#.Class
39840 20 76 61 72 69 61 62 6c 65 73 20 28 61 6c 73 6f 20 63 61 6c 6c 65 64 20 73 74 61 74 69 63 20 61 .variables.(also.called.static.a
39860 74 74 72 69 62 75 74 65 73 29 20 61 72 65 20 70 72 65 66 69 78 65 64 20 62 79 20 40 40 0d 0a 20 ttributes).are.prefixed.by.@@...
39880 20 20 20 40 40 70 65 72 73 6f 6e 5f 63 6f 75 6e 74 65 72 3d 30 0d 0a 0d 0a 20 20 20 20 23 20 6f ...@@person_counter=0........#.o
398a0 62 6a 65 63 74 20 63 6f 6e 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 bject.constructor......def.initi
398c0 61 6c 69 7a 65 28 61 67 65 2c 20 6e 61 6d 65 2c 20 61 6c 69 76 65 20 3d 20 74 72 75 65 29 20 20 alize(age,.name,.alive.=.true)..
398e0 20 20 20 23 20 44 65 66 61 75 6c 74 20 61 72 67 20 6c 69 6b 65 20 69 6e 20 43 2b 2b 0d 0a 20 20 ...#.Default.arg.like.in.C++....
39900 20 20 20 20 20 20 40 61 67 65 2c 20 40 6e 61 6d 65 2c 20 40 61 6c 69 76 65 20 3d 20 61 67 65 2c ......@age,.@name,.@alive.=.age,
39920 20 6e 61 6d 65 2c 20 61 6c 69 76 65 20 20 23 20 4f 62 6a 65 63 74 20 61 74 74 72 69 62 75 74 65 .name,.alive..#.Object.attribute
39940 73 20 61 72 65 20 70 72 65 66 69 78 65 64 20 62 79 20 27 40 27 0d 0a 20 20 20 20 20 20 20 20 40 s.are.prefixed.by.'@'..........@
39960 40 70 65 72 73 6f 6e 5f 63 6f 75 6e 74 65 72 20 2b 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 @person_counter.+=.1............
39980 23 20 54 68 65 72 65 20 69 73 20 6e 6f 20 27 2b 2b 27 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 52 #.There.is.no.'++'.operator.in.R
399a0 75 62 79 2e 20 54 68 65 20 27 2b 2b 27 2f 27 2d 2d 27 20 20 6f 70 65 72 61 74 6f 72 73 20 61 72 uby..The.'++'/'--'..operators.ar
399c0 65 20 69 6e 20 66 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 68 69 64 64 65 6e 20 61 73 e.in.fact............#.hidden.as
399e0 73 69 67 6e 6d 65 6e 74 73 20 77 68 69 63 68 20 61 66 66 65 63 74 20 76 61 72 69 61 62 6c 65 73 signments.which.affect.variables
39a00 2c 20 6e 6f 74 20 6f 62 6a 65 63 74 73 2e 20 59 6f 75 20 63 61 6e 6e 6f 74 20 61 63 63 6f 6d 70 ,.not.objects..You.cannot.accomp
39a20 6c 69 73 68 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 61 73 73 69 67 6e 6d 65 6e 74 20 76 69 61 lish............#.assignment.via
39a40 20 6d 65 74 68 6f 64 2e 20 53 69 6e 63 65 20 65 76 65 72 79 74 68 69 6e 67 20 69 6e 20 52 75 62 .method..Since.everything.in.Rub
39a60 79 20 69 73 20 6f 62 6a 65 63 74 2c 20 27 2b 2b 27 20 61 6e 64 20 27 2d 2d 27 0d 0a 20 20 20 20 y.is.object,.'++'.and.'--'......
39a80 20 20 20 20 20 20 23 20 63 6f 6e 74 72 61 64 69 63 74 20 52 75 62 79 20 4f 4f 20 69 64 65 6f 6c ......#.contradict.Ruby.OO.ideol
39aa0 6f 67 79 2e 20 49 6e 73 74 65 61 64 20 27 2d 3d 27 20 61 6e 64 20 27 2b 3d 27 20 61 72 65 20 75 ogy..Instead.'-='.and.'+='.are.u
39ac0 73 65 64 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 sed.......end........attr_access
39ae0 6f 72 20 3a 6e 61 6d 65 2c 20 3a 61 67 65 20 20 20 23 20 54 68 69 73 20 63 72 65 61 74 65 73 20 or.:name,.:age...#.This.creates.
39b00 73 65 74 74 65 72 20 61 6e 64 20 67 65 74 74 65 72 20 6d 65 74 68 6f 64 73 20 66 6f 72 20 40 6e setter.and.getter.methods.for.@n
39b20 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ame.............................
39b40 20 20 20 20 20 23 20 61 6e 64 20 40 61 67 65 2e 20 53 65 65 20 31 33 2e 33 20 66 6f 72 20 64 65 .....#.and.@age..See.13.3.for.de
39b60 74 61 69 6c 65 73 2e 0d 0a 0d 0a 20 20 20 20 23 20 6d 65 74 68 6f 64 73 20 6d 6f 64 69 66 79 69 tailes.........#.methods.modifyi
39b80 6e 67 20 74 68 65 20 72 65 63 65 69 76 65 72 20 6f 62 6a 65 63 74 20 75 73 75 61 6c 6c 79 20 68 ng.the.receiver.object.usually.h
39ba0 61 76 65 20 74 68 65 20 27 21 27 20 73 75 66 66 69 78 0d 0a 20 20 20 20 64 65 66 20 64 69 65 21 ave.the.'!'.suffix......def.die!
39bc0 0d 0a 20 20 20 20 20 20 20 20 40 61 6c 69 76 65 20 3d 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 ..........@alive.=.false........
39be0 20 20 70 75 74 73 20 22 23 7b 40 6e 61 6d 65 7d 20 68 61 73 20 64 69 65 64 20 61 74 20 74 68 65 ..puts."#{@name}.has.died.at.the
39c00 20 61 67 65 20 6f 66 20 23 7b 40 61 67 65 7d 2e 22 0d 0a 20 20 20 20 20 20 20 20 40 61 6c 69 76 .age.of.#{@age}."..........@aliv
39c20 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 6b 69 6c 6c 28 61 6e 6f 74 68 e......end........def.kill(anoth
39c40 65 72 50 65 72 73 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 40 6e 61 6d 65 2c 20 erPerson)..........print.@name,.
39c60 27 20 69 73 20 6b 69 6c 6c 69 6e 67 20 27 2c 20 61 6e 6f 74 68 65 72 50 65 72 73 6f 6e 2e 6e 61 '.is.killing.',.anotherPerson.na
39c80 6d 65 2c 20 22 2e 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 61 6e 6f 74 68 65 72 50 65 72 73 6f 6e me,.".\n"..........anotherPerson
39ca0 2e 64 69 65 21 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 6d 65 74 68 6f 64 73 20 .die!......end........#.methods.
39cc0 75 73 65 64 20 61 73 20 71 75 65 72 69 65 73 0d 0a 20 20 20 20 23 20 75 73 75 61 6c 6c 79 20 68 used.as.queries......#.usually.h
39ce0 61 76 65 20 74 68 65 20 27 3f 27 20 73 75 66 66 69 78 0d 0a 20 20 20 20 64 65 66 20 61 6c 69 76 ave.the.'?'.suffix......def.aliv
39d00 65 3f 0d 0a 20 20 20 20 20 20 20 20 40 61 6c 69 76 65 20 26 26 20 74 72 75 65 0d 0a 20 20 20 20 e?..........@alive.&&.true......
39d20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 79 65 61 72 5f 6f 66 5f 62 69 72 74 68 0d 0a 20 20 end........def.year_of_birth....
39d40 20 20 20 20 20 20 54 69 6d 65 2e 6e 6f 77 2e 79 65 61 72 20 2d 20 40 61 67 65 0d 0a 20 20 20 20 ......Time.now.year.-.@age......
39d60 65 6e 64 0d 0a 0d 0a 20 20 20 20 23 20 43 6c 61 73 73 20 6d 65 74 68 6f 64 20 28 61 6c 73 6f 20 end........#.Class.method.(also.
39d80 63 61 6c 6c 65 64 20 73 74 61 74 69 63 20 6d 65 74 68 6f 64 29 0d 0a 20 20 20 20 64 65 66 20 50 called.static.method)......def.P
39da0 65 72 73 6f 6e 2e 6e 75 6d 62 65 72 5f 6f 66 5f 70 65 6f 70 6c 65 0d 0a 20 20 20 20 20 20 20 20 erson.number_of_people..........
39dc0 40 40 70 65 72 73 6f 6e 5f 63 6f 75 6e 74 65 72 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a @@person_counter......end..end..
39de0 0d 0a 23 20 55 73 69 6e 67 20 74 68 65 20 63 6c 61 73 73 3a 0d 0a 23 20 43 72 65 61 74 65 20 6f ..#.Using.the.class:..#.Create.o
39e00 62 6a 65 63 74 73 20 6f 66 20 63 6c 61 73 73 20 50 65 72 73 6f 6e 0d 0a 6c 65 63 74 65 72 20 3d bjects.of.class.Person..lecter.=
39e20 20 50 65 72 73 6f 6e 2e 6e 65 77 28 34 37 2c 20 27 48 61 6e 6e 69 62 61 6c 27 29 0d 0a 73 74 61 .Person.new(47,.'Hannibal')..sta
39e40 72 6c 69 6e 67 20 3d 20 50 65 72 73 6f 6e 2e 6e 65 77 28 32 39 2c 20 27 43 6c 61 72 69 63 65 27 rling.=.Person.new(29,.'Clarice'
39e60 2c 20 74 72 75 65 29 0d 0a 70 61 7a 7a 69 20 3d 20 50 65 72 73 6f 6e 2e 6e 65 77 28 34 30 2c 20 ,.true)..pazzi.=.Person.new(40,.
39e80 27 52 69 6e 61 6c 64 6f 27 2c 20 74 72 75 65 29 0d 0a 0d 0a 23 20 43 61 6c 6c 69 6e 67 20 61 20 'Rinaldo',.true)....#.Calling.a.
39ea0 63 6c 61 73 73 20 6d 65 74 68 6f 64 0d 0a 70 72 69 6e 74 20 22 54 68 65 72 65 20 61 72 65 20 22 class.method..print."There.are."
39ec0 2c 20 50 65 72 73 6f 6e 2e 6e 75 6d 62 65 72 5f 6f 66 5f 70 65 6f 70 6c 65 2c 20 22 20 50 65 72 ,.Person.number_of_people,.".Per
39ee0 73 6f 6e 20 6f 62 6a 65 63 74 73 5c 6e 22 0d 0a 0d 0a 70 72 69 6e 74 20 70 61 7a 7a 69 2e 6e 61 son.objects\n"....print.pazzi.na
39f00 6d 65 2c 20 27 20 69 73 20 27 2c 20 28 70 61 7a 7a 69 2e 61 6c 69 76 65 3f 29 20 3f 20 27 61 6c me,.'.is.',.(pazzi.alive?).?.'al
39f20 69 76 65 27 20 3a 20 27 64 65 61 64 27 2c 20 22 2e 5c 6e 22 0d 0a 6c 65 63 74 65 72 2e 6b 69 6c ive'.:.'dead',.".\n"..lecter.kil
39f40 6c 28 70 61 7a 7a 69 29 0d 0a 70 72 69 6e 74 20 70 61 7a 7a 69 2e 6e 61 6d 65 2c 20 27 20 69 73 l(pazzi)..print.pazzi.name,.'.is
39f60 20 27 2c 20 28 70 61 7a 7a 69 2e 61 6c 69 76 65 3f 29 20 3f 20 27 61 6c 69 76 65 27 20 3a 20 27 .',.(pazzi.alive?).?.'alive'.:.'
39f80 64 65 61 64 27 2c 20 22 2e 5c 6e 22 0d 0a 0d 0a 70 72 69 6e 74 20 73 74 61 72 6c 69 6e 67 2e 6e dead',.".\n"....print.starling.n
39fa0 61 6d 65 20 2c 20 27 20 77 61 73 20 62 6f 72 6e 20 69 6e 20 27 2c 20 73 74 61 72 6c 69 6e 67 2e ame.,.'.was.born.in.',.starling.
39fc0 79 65 61 72 5f 6f 66 5f 62 69 72 74 68 2c 20 22 5c 6e 22 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 year_of_birth,."\n"......#.@@PLE
39fe0 41 43 40 40 5f 31 33 2e 31 0d 0a 23 20 49 66 20 79 6f 75 20 64 6f 6e 27 74 20 6e 65 65 64 20 61 AC@@_13.1..#.If.you.don't.need.a
3a000 6e 79 20 69 6e 69 74 69 61 6c 69 73 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 63 6f 6e 73 74 72 75 ny.initialisation.in.the.constru
3a020 63 74 6f 72 2c 0d 0a 23 20 79 6f 75 20 64 6f 6e 27 74 20 6e 65 65 64 20 74 6f 20 77 72 69 74 65 ctor,..#.you.don't.need.to.write
3a040 20 61 20 63 6f 6e 73 74 72 75 63 74 6f 72 2e 0d 0a 63 6c 61 73 73 20 4d 79 43 6c 61 73 73 0d 0a .a.constructor...class.MyClass..
3a060 65 6e 64 0d 0a 0d 0a 63 6c 61 73 73 20 4d 79 43 6c 61 73 73 0d 0a 20 20 20 20 64 65 66 20 69 6e end....class.MyClass......def.in
3a080 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 40 73 74 61 72 74 20 3d 20 54 69 6d 65 2e itialize..........@start.=.Time.
3a0a0 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 40 61 67 65 20 3d 20 30 0d 0a 20 20 20 20 65 6e 64 0d 0a new..........@age.=.0......end..
3a0c0 65 6e 64 0d 0a 0d 0a 63 6c 61 73 73 20 4d 79 43 6c 61 73 73 0d 0a 20 20 20 20 64 65 66 20 69 6e end....class.MyClass......def.in
3a0e0 69 74 69 61 6c 69 7a 65 28 69 6e 69 74 68 61 73 68 29 0d 0a 20 20 20 20 20 20 20 20 40 73 74 61 itialize(inithash)..........@sta
3a100 72 74 20 3d 20 54 69 6d 65 2e 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 40 61 67 65 20 3d 20 30 0d rt.=.Time.new..........@age.=.0.
3a120 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6b 65 79 2c 20 76 61 6c 75 65 20 69 6e 20 69 6e 69 74 68 .........for.key,.value.in.inith
3a140 61 73 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65 5f 76 61 72 69 61 62 ash..............instance_variab
3a160 6c 65 5f 73 65 74 28 22 40 23 7b 6b 65 79 7d 22 2c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 le_set("@#{key}",.value)........
3a180 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 ..end......end..end....#.@@PLEAC
3a1a0 40 40 5f 31 33 2e 32 0d 0a 23 20 4f 62 6a 65 63 74 73 20 61 72 65 20 64 65 73 74 72 6f 79 65 64 @@_13.2..#.Objects.are.destroyed
3a1c0 20 62 79 20 74 68 65 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 6f 72 2e 0d 0a 23 20 54 68 .by.the.garbage.collector...#.Th
3a1e0 65 20 74 69 6d 65 20 6f 66 20 64 65 73 74 72 6f 79 69 6e 67 20 69 73 20 6e 6f 74 20 70 72 65 64 e.time.of.destroying.is.not.pred
3a200 69 63 74 61 62 6c 65 2e 0d 0a 23 20 54 68 65 20 72 75 62 79 20 67 61 72 62 61 67 65 20 63 6f 6c ictable...#.The.ruby.garbage.col
3a220 6c 65 63 74 6f 72 20 63 61 6e 20 68 61 6e 64 6c 65 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 lector.can.handle.circular.refer
3a240 65 6e 63 65 73 2c 0d 0a 23 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f ences,..#.so.there.is.no.need.to
3a260 20 77 72 69 74 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 74 68 61 74 2e 0d 0a 0d 0a 23 .write.destructor.for.that.....#
3a280 20 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 72 65 63 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20 .There.is.no.direct.support.for.
3a2a0 64 65 73 74 72 75 63 74 6f 72 2e 0d 0a 23 20 59 6f 75 20 63 61 6e 20 63 61 6c 6c 20 61 20 63 75 destructor...#.You.can.call.a.cu
3a2c0 73 74 6f 6d 20 66 75 6e 63 74 69 6f 6e 2c 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69 63 20 stom.function,.or.more.specific.
3a2e0 61 20 70 72 6f 63 20 6f 62 6a 65 63 74 2c 20 77 68 65 6e 20 74 68 65 0d 0a 23 20 67 61 72 62 61 a.proc.object,.when.the..#.garba
3a300 67 65 20 63 6f 6c 6c 65 63 74 6f 72 20 69 73 20 61 62 6f 75 74 20 74 6f 20 64 65 73 74 72 75 63 ge.collector.is.about.to.destruc
3a320 74 20 74 68 65 20 6f 62 6a 65 63 74 2c 20 62 75 74 20 69 74 20 69 73 20 75 6e 70 72 65 64 69 63 t.the.object,.but.it.is.unpredic
3a340 74 61 62 6c 65 0d 0a 23 20 77 68 65 6e 20 74 68 69 73 20 6f 63 63 75 72 73 2e 0d 0a 23 20 41 6c table..#.when.this.occurs...#.Al
3a360 73 6f 20 69 66 20 73 75 63 68 20 61 20 66 69 6e 61 6c 69 7a 65 72 20 6f 62 6a 65 63 74 20 68 61 so.if.such.a.finalizer.object.ha
3a380 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 6f 72 69 67 6e 61 6c 20 6f 62 6a s.a.reference.to.the.orignal.obj
3a3a0 65 63 74 2c 0d 0a 23 20 74 68 69 73 20 6d 61 79 20 70 72 65 76 65 6e 74 20 74 68 65 20 6f 72 69 ect,..#.this.may.prevent.the.ori
3a3c0 67 69 6e 61 6c 20 6f 62 6a 65 63 74 20 74 6f 20 67 65 74 20 67 61 72 62 61 67 65 20 63 6f 6c 6c ginal.object.to.get.garbage.coll
3a3e0 65 63 74 65 64 2e 0d 0a 23 20 42 65 63 61 75 73 65 20 6f 66 20 74 68 69 73 20 70 72 6f 62 6c 65 ected...#.Because.of.this.proble
3a400 6d 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 20 6d 65 74 68 6f 64 20 62 65 6c 6f 77 20 69 73 0d 0a m.the.finalize.method.below.is..
3a420 23 20 61 20 63 6c 61 73 73 20 6d 65 74 68 6f 64 20 61 6e 64 20 6e 6f 74 20 61 20 69 6e 73 74 61 #.a.class.method.and.not.a.insta
3a440 6e 63 65 20 6d 65 74 68 6f 64 2e 0d 0a 23 20 53 6f 20 69 66 20 79 6f 75 20 6e 65 65 64 20 74 6f nce.method...#.So.if.you.need.to
3a460 20 66 72 65 65 20 72 65 73 6f 75 72 63 65 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 2c 20 6c .free.resources.for.an.object,.l
3a480 69 6b 65 0d 0a 23 20 63 6c 6f 73 69 6e 67 20 61 20 73 6f 63 6b 65 74 20 6f 72 20 6b 69 6c 6c 20 ike..#.closing.a.socket.or.kill.
3a4a0 61 20 73 70 61 77 6e 65 64 20 73 75 62 70 72 6f 63 65 73 73 2c 0d 0a 23 20 79 6f 75 20 73 68 6f a.spawned.subprocess,..#.you.sho
3a4c0 75 6c 64 20 64 6f 20 69 74 20 65 78 70 6c 69 63 69 74 6c 79 2e 0d 0a 0d 0a 63 6c 61 73 73 20 4d uld.do.it.explicitly.....class.M
3a4e0 79 43 6c 61 73 73 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 yClass......def.initialize......
3a500 20 20 20 20 4f 62 6a 65 63 74 53 70 61 63 65 2e 64 65 66 69 6e 65 5f 66 69 6e 61 6c 69 7a 65 72 ....ObjectSpace.define_finalizer
3a520 28 73 65 6c 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (self,..........................
3a540 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 63 6c 61 73 73 2e 6d 65 74 68 6f 64 28 3a .............self.class.method(:
3a560 66 69 6e 61 6c 69 7a 65 29 2e 74 6f 5f 70 72 6f 63 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 finalize).to_proc)......end.....
3a580 20 64 65 66 20 4d 79 43 6c 61 73 73 2e 66 69 6e 61 6c 69 7a 65 28 69 64 29 0d 0a 20 20 20 20 20 .def.MyClass.finalize(id).......
3a5a0 20 20 20 70 75 74 73 20 22 4f 62 6a 65 63 74 20 23 7b 69 64 7d 20 64 79 69 6e 67 20 61 74 20 23 ...puts."Object.#{id}.dying.at.#
3a5c0 7b 54 69 6d 65 2e 6e 65 77 7d 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 74 {Time.new}"......end..end....#.t
3a5e0 65 73 74 20 63 6f 64 65 0d 0a 33 2e 74 69 6d 65 73 20 7b 0d 0a 20 20 20 20 4d 79 43 6c 61 73 73 est.code..3.times.{......MyClass
3a600 2e 6e 65 77 0d 0a 7d 0d 0a 4f 62 6a 65 63 74 53 70 61 63 65 2e 67 61 72 62 61 67 65 5f 63 6f 6c .new..}..ObjectSpace.garbage_col
3a620 6c 65 63 74 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 33 0d 0a 23 20 59 6f lect......#.@@PLEAC@@_13.3..#.Yo
3a640 75 20 63 61 6e 20 77 72 69 74 65 20 67 65 74 74 65 72 20 61 6e 64 20 73 65 74 74 65 72 20 6d 65 u.can.write.getter.and.setter.me
3a660 74 68 6f 64 73 20 69 6e 20 61 20 6e 61 74 75 72 61 6c 20 77 61 79 3a 0d 0a 63 6c 61 73 73 20 50 thods.in.a.natural.way:..class.P
3a680 65 72 73 6f 6e 0d 0a 20 20 20 20 64 65 66 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 40 6e 61 erson......def.name..........@na
3a6a0 6d 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 6e 61 6d 65 3d 28 6e 61 6d 65 29 me......end......def.name=(name)
3a6c0 0d 0a 20 20 20 20 20 20 20 20 40 6e 61 6d 65 20 3d 20 6e 61 6d 65 0d 0a 20 20 20 20 65 6e 64 0d ..........@name.=.name......end.
3a6e0 0a 65 6e 64 0d 0a 0d 0a 23 20 42 75 74 20 74 68 65 72 65 20 69 73 20 61 20 62 65 74 74 65 72 20 .end....#.But.there.is.a.better.
3a700 61 6e 64 20 73 68 6f 72 74 65 72 20 77 61 79 0d 0a 63 6c 61 73 73 20 50 65 72 73 6f 6e 0d 0a 20 and.shorter.way..class.Person...
3a720 20 20 20 61 74 74 72 5f 72 65 61 64 65 72 20 3a 61 67 65 0d 0a 20 20 20 20 61 74 74 72 5f 77 72 ...attr_reader.:age......attr_wr
3a740 69 74 65 72 20 3a 6e 61 6d 65 0d 0a 20 20 20 20 23 20 61 74 74 72 5f 72 65 61 64 65 72 20 61 6e iter.:name......#.attr_reader.an
3a760 64 20 61 74 74 72 5f 77 72 69 74 65 72 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 6d 65 74 68 6f d.attr_writer.are.actually.metho
3a780 64 73 20 69 6e 20 63 6c 61 73 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 23 20 77 68 69 63 68 20 73 ds.in.class.Class......#.which.s
3a7a0 65 74 20 67 65 74 74 65 72 20 61 6e 64 20 73 65 74 74 65 72 20 6d 65 74 68 6f 64 73 20 66 6f 72 et.getter.and.setter.methods.for
3a7c0 20 79 6f 75 2e 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 68 65 72 65 20 69 73 20 61 6c 73 6f 20 61 74 .you...end....#.There.is.also.at
3a7e0 74 72 5f 61 63 63 65 73 73 6f 72 20 74 6f 20 63 72 65 61 74 65 20 62 6f 74 68 20 73 65 74 74 65 tr_accessor.to.create.both.sette
3a800 72 73 20 61 6e 64 20 67 65 74 74 65 72 73 0d 0a 63 6c 61 73 73 20 50 65 72 73 6f 6e 0d 0a 20 20 rs.and.getters..class.Person....
3a820 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 61 67 65 2c 20 3a 6e 61 6d 65 0d 0a 65 6e 64 ..attr_accessor.:age,.:name..end
3a840 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 34 0d 0a 63 6c 61 73 73 20 50 65 ......#.@@PLEAC@@_13.4..class.Pe
3a860 72 73 6f 6e 0d 0a 20 20 20 20 23 20 43 6c 61 73 73 20 76 61 72 69 61 62 6c 65 73 20 28 61 6c 73 rson......#.Class.variables.(als
3a880 6f 20 63 61 6c 6c 65 64 20 73 74 61 74 69 63 20 61 74 74 72 69 62 75 74 65 73 29 20 61 72 65 20 o.called.static.attributes).are.
3a8a0 70 72 65 66 69 78 65 64 20 62 79 20 40 40 0d 0a 20 20 20 20 40 40 70 65 72 73 6f 6e 5f 63 6f 75 prefixed.by.@@......@@person_cou
3a8c0 6e 74 65 72 20 3d 20 30 0d 0a 0d 0a 20 20 20 20 64 65 66 20 50 65 72 73 6f 6e 2e 70 6f 70 75 6c nter.=.0........def.Person.popul
3a8e0 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 40 40 70 65 72 73 6f 6e 5f 63 6f 75 6e 74 65 72 0d ation..........@@person_counter.
3a900 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 .....end......def.initialize....
3a920 20 20 20 20 20 20 40 40 70 65 72 73 6f 6e 5f 63 6f 75 6e 74 65 72 20 2b 3d 20 31 0d 0a 20 20 20 ......@@person_counter.+=.1.....
3a940 20 20 20 20 20 4f 62 6a 65 63 74 53 70 61 63 65 2e 64 65 66 69 6e 65 5f 66 69 6e 61 6c 69 7a 65 .....ObjectSpace.define_finalize
3a960 72 28 73 65 6c 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 r(self,.........................
3a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 63 6c 61 73 73 2e 6d 65 74 68 6f 64 28 ..............self.class.method(
3a9a0 3a 66 69 6e 61 6c 69 7a 65 29 2e 74 6f 5f 70 72 6f 63 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 :finalize).to_proc)......end....
3a9c0 20 20 64 65 66 20 50 65 72 73 6f 6e 2e 66 69 6e 61 6c 69 7a 65 28 69 64 29 0d 0a 20 20 20 20 20 ..def.Person.finalize(id).......
3a9e0 20 20 20 40 40 70 65 72 73 6f 6e 5f 63 6f 75 6e 74 65 72 20 2d 3d 20 31 0d 0a 20 20 20 20 65 6e ...@@person_counter.-=.1......en
3aa00 64 0d 0a 65 6e 64 0d 0a 70 65 6f 70 6c 65 20 3d 20 5b 5d 0d 0a 31 30 2e 74 69 6d 65 73 20 7b 0d d..end..people.=.[]..10.times.{.
3aa20 0a 20 20 20 20 70 65 6f 70 6c 65 2e 70 75 73 68 28 50 65 72 73 6f 6e 2e 6e 65 77 29 0d 0a 7d 0d .....people.push(Person.new)..}.
3aa40 0a 70 72 69 6e 74 66 28 22 54 68 65 72 65 20 61 72 65 20 25 64 20 70 65 6f 70 6c 65 20 61 6c 69 .printf("There.are.%d.people.ali
3aa60 76 65 22 2c 20 50 65 72 73 6f 6e 2e 70 6f 70 75 6c 61 74 69 6f 6e 29 0d 0a 0d 0a 0d 0a 46 69 78 ve",.Person.population)......Fix
3aa80 65 64 41 72 72 61 79 2e 63 6c 61 73 73 5f 6d 61 78 5f 62 6f 75 6e 64 73 20 3d 20 31 30 30 0d 0a edArray.class_max_bounds.=.100..
3aaa0 61 6c 70 68 61 20 3d 20 46 69 78 65 64 41 72 72 61 79 2e 6e 65 77 0d 0a 70 75 74 73 20 22 42 6f alpha.=.FixedArray.new..puts."Bo
3aac0 75 6e 64 20 6f 6e 20 61 6c 70 68 61 20 69 73 20 23 7b 61 6c 70 68 61 2e 6d 61 78 5f 62 6f 75 6e und.on.alpha.is.#{alpha.max_boun
3aae0 64 73 7d 22 0d 0a 0d 0a 62 65 74 61 20 3d 20 46 69 78 65 64 41 72 72 61 79 2e 6e 65 77 0d 0a 62 ds}"....beta.=.FixedArray.new..b
3ab00 65 74 61 2e 6d 61 78 5f 62 6f 75 6e 64 73 20 3d 20 35 30 20 20 20 20 20 20 20 20 20 20 20 20 20 eta.max_bounds.=.50.............
3ab20 20 20 20 20 20 20 20 23 20 63 61 6c 6c 73 20 74 68 65 20 69 6e 73 74 61 6e 63 65 20 6d 65 74 68 .......#.calls.the.instance.meth
3ab40 6f 64 0d 0a 62 65 74 61 2e 63 6c 61 73 73 2e 63 6c 61 73 73 5f 6d 61 78 5f 62 6f 75 6e 64 73 20 od..beta.class.class_max_bounds.
3ab60 3d 20 35 30 20 20 20 20 20 20 20 20 23 20 61 6c 74 65 72 6e 61 74 69 76 65 2c 20 63 61 6c 6c 73 =.50........#.alternative,.calls
3ab80 20 74 68 65 20 63 6c 61 73 73 20 6d 65 74 68 6f 64 0d 0a 70 75 74 73 20 22 42 6f 75 6e 64 20 6f .the.class.method..puts."Bound.o
3aba0 6e 20 61 6c 70 68 61 20 69 73 20 23 7b 61 6c 70 68 61 2e 6d 61 78 5f 62 6f 75 6e 64 73 7d 22 0d n.alpha.is.#{alpha.max_bounds}".
3abc0 0a 0d 0a 63 6c 61 73 73 20 46 69 78 65 64 41 72 72 61 79 0d 0a 20 20 20 20 40 40 62 6f 75 6e 64 ...class.FixedArray......@@bound
3abe0 73 20 3d 20 37 0d 0a 0d 0a 20 20 20 20 64 65 66 20 6d 61 78 5f 62 6f 75 6e 64 73 0d 0a 20 20 20 s.=.7........def.max_bounds.....
3ac00 20 20 20 20 20 40 40 6d 61 78 5f 62 6f 75 6e 64 73 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 .....@@max_bounds......end......
3ac20 23 20 69 6e 73 74 61 6e 63 65 20 6d 65 74 68 6f 64 2c 20 77 68 69 63 68 20 73 65 74 73 20 74 68 #.instance.method,.which.sets.th
3ac40 65 20 63 6c 61 73 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 64 65 66 20 6d 61 78 5f 62 6f e.class.variable......def.max_bo
3ac60 75 6e 64 73 3d 28 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 40 40 6d 61 78 5f 62 6f 75 6e unds=(value)..........@@max_boun
3ac80 64 73 20 3d 20 76 61 6c 75 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 23 20 63 6c 61 73 73 ds.=.value......end......#.class
3aca0 20 6d 65 74 68 6f 64 2e 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 .method..This.can.only.be.called
3acc0 20 6f 6e 20 61 20 63 6c 61 73 73 2c 0d 0a 20 20 20 20 23 20 62 75 74 20 6e 6f 74 20 6f 6e 20 74 .on.a.class,......#.but.not.on.t
3ace0 68 65 20 69 6e 73 74 61 6e 63 65 73 0d 0a 20 20 20 20 64 65 66 20 46 69 78 65 64 41 72 72 61 79 he.instances......def.FixedArray
3ad00 2e 63 6c 61 73 73 5f 6d 61 78 5f 62 6f 75 6e 64 73 3d 28 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 .class_max_bounds=(value).......
3ad20 20 20 20 40 40 6d 61 78 5f 62 6f 75 6e 64 73 20 3d 20 76 61 6c 75 65 0d 0a 20 20 20 20 65 6e 64 ...@@max_bounds.=.value......end
3ad40 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 35 0d 0a 50 65 72 ..end......#.@@PLEAC@@_13.5..Per
3ad60 73 6f 6e 53 74 72 75 63 74 20 3d 20 53 74 72 75 63 74 2e 6e 65 77 28 22 50 65 72 73 6f 6e 22 2c sonStruct.=.Struct.new("Person",
3ad80 20 3a 6e 61 6d 65 2c 20 3a 61 67 65 2c 20 3a 70 65 65 72 73 29 0d 0a 23 20 63 72 65 61 74 65 73 .:name,.:age,.:peers)..#.creates
3ada0 20 61 20 63 6c 61 73 73 20 22 50 65 72 73 6f 6e 3a 3a 53 74 72 75 63 74 22 2c 20 77 68 69 63 68 .a.class."Person::Struct",.which
3adc0 20 69 73 20 61 63 63 65 73 73 69 61 62 6c 65 20 77 69 74 68 20 74 68 65 0d 0a 23 20 63 6f 6e 73 .is.accessiable.with.the..#.cons
3ade0 74 61 6e 74 20 22 50 65 72 73 6f 6e 53 74 72 75 63 74 22 0d 0a 70 20 3d 20 50 65 72 73 6f 6e 53 tant."PersonStruct"..p.=.PersonS
3ae00 74 72 75 63 74 2e 6e 65 77 0d 0a 70 20 3d 20 53 74 72 75 63 74 3a 3a 50 65 72 73 6f 6e 2e 6e 65 truct.new..p.=.Struct::Person.ne
3ae20 77 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6c 74 65 72 6e 61 w......................#.alterna
3ae40 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 20 63 6c 61 73 73 6e 61 6d 65 0d 0a 70 2e 6e 61 6d 65 tive.using.the.classname..p.name
3ae60 20 3d 20 22 4a 61 73 6f 6e 20 53 6d 79 74 68 65 22 0d 0a 70 2e 61 67 65 20 3d 20 31 33 0d 0a 70 .=."Jason.Smythe"..p.age.=.13..p
3ae80 2e 70 65 65 72 73 20 3d 20 5b 22 57 69 6c 62 75 72 22 2c 20 22 52 61 6c 70 68 22 2c 20 22 46 72 .peers.=.["Wilbur",."Ralph",."Fr
3aea0 65 64 22 5d 0d 0a 70 5b 3a 70 65 65 72 73 5d 20 3d 20 5b 22 57 69 6c 62 75 72 22 2c 20 22 52 61 ed"]..p[:peers].=.["Wilbur",."Ra
3aec0 6c 70 68 22 2c 20 22 46 72 65 64 22 5d 20 20 20 20 20 23 20 61 6c 74 65 72 6e 61 74 69 76 65 20 lph",."Fred"].....#.alternative.
3aee0 61 63 63 65 73 73 20 75 73 69 6e 67 20 73 79 6d 62 6f 6c 0d 0a 70 5b 22 70 65 65 72 73 22 5d 20 access.using.symbol..p["peers"].
3af00 3d 20 5b 22 57 69 6c 62 75 72 22 2c 20 22 52 61 6c 70 68 22 2c 20 22 46 72 65 64 22 5d 20 20 20 =.["Wilbur",."Ralph",."Fred"]...
3af20 20 23 20 61 6c 74 65 72 6e 61 74 69 76 65 20 61 63 63 65 73 73 20 75 73 69 6e 67 20 6e 61 6d 65 .#.alternative.access.using.name
3af40 20 6f 66 20 66 69 65 6c 64 0d 0a 70 5b 32 5d 20 3d 20 5b 22 57 69 6c 62 75 72 22 2c 20 22 52 61 .of.field..p[2].=.["Wilbur",."Ra
3af60 6c 70 68 22 2c 20 22 46 72 65 64 22 5d 20 20 20 20 20 20 20 20 20 20 23 20 61 6c 74 65 72 6e 61 lph",."Fred"]..........#.alterna
3af80 74 69 76 65 20 61 63 63 65 73 73 20 75 73 69 6e 67 20 69 6e 64 65 78 20 6f 66 20 66 69 65 6c 64 tive.access.using.index.of.field
3afa0 0d 0a 70 75 74 73 20 22 41 74 20 61 67 65 20 23 7b 70 2e 61 67 65 7d 2c 20 23 7b 70 2e 6e 61 6d ..puts."At.age.#{p.age},.#{p.nam
3afc0 65 7d 27 73 20 66 69 72 73 74 20 66 72 69 65 6e 64 20 69 73 20 23 7b 70 2e 70 65 65 72 73 5b 30 e}'s.first.friend.is.#{p.peers[0
3afe0 5d 7d 22 0d 0a 0d 0a 23 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 61 20 73 74 72 75 63 74 20 ]}"....#.The.fields.of.a.struct.
3b000 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 74 79 70 65 2c 20 6c 69 6b 65 20 6f 74 68 65 72 have.no.special.type,.like.other
3b020 20 72 75 62 79 20 76 61 72 69 61 62 6c 65 73 0d 0a 23 20 79 6f 75 20 63 61 6e 20 70 75 74 20 61 .ruby.variables..#.you.can.put.a
3b040 6e 79 20 6f 62 6a 65 63 74 73 20 69 6e 2e 20 54 68 65 72 65 66 6f 72 65 20 74 68 65 20 64 69 73 ny.objects.in..Therefore.the.dis
3b060 63 75 73 73 69 6f 6e 73 20 68 6f 77 20 74 6f 20 73 70 65 63 69 66 79 0d 0a 23 20 74 68 65 20 74 cussions.how.to.specify..#.the.t
3b080 79 70 65 73 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 61 70 70 6c 79 20 ypes.of.the.fields.do.not.apply.
3b0a0 74 6f 20 72 75 62 79 2e 0d 0a 0d 0a 46 61 6d 69 6c 79 53 74 72 75 63 74 20 3d 20 53 74 72 75 63 to.ruby.....FamilyStruct.=.Struc
3b0c0 74 2e 6e 65 77 28 22 46 61 6d 69 6c 79 22 2c 20 3a 68 65 61 64 2c 20 3a 61 64 64 72 65 73 73 2c t.new("Family",.:head,.:address,
3b0e0 20 3a 6d 65 6d 62 65 72 73 29 0d 0a 66 6f 6c 6b 73 20 3d 20 46 61 6d 69 6c 79 53 74 72 75 63 74 .:members)..folks.=.FamilyStruct
3b100 2e 6e 65 77 0d 0a 66 6f 6c 6b 73 2e 68 65 61 64 20 3d 20 50 65 72 73 6f 6e 53 74 72 75 63 74 2e .new..folks.head.=.PersonStruct.
3b120 6e 65 77 0d 0a 64 61 64 20 3d 20 66 6f 6c 6b 73 2e 68 65 61 64 0d 0a 64 61 64 2e 6e 61 6d 65 20 new..dad.=.folks.head..dad.name.
3b140 3d 20 22 4a 6f 68 6e 22 0d 0a 64 61 64 2e 61 67 65 20 3d 20 33 34 0d 0a 0d 0a 23 20 73 75 70 70 =."John"..dad.age.=.34....#.supp
3b160 6c 79 20 6f 66 20 6f 77 6e 20 61 63 63 65 73 73 6f 72 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 ly.of.own.accessor.method.for.th
3b180 65 20 73 74 72 75 63 74 20 66 6f 72 20 65 72 72 6f 72 20 63 68 65 63 6b 69 6e 67 0d 0a 63 6c 61 e.struct.for.error.checking..cla
3b1a0 73 73 20 50 65 72 73 6f 6e 53 74 72 75 63 74 0d 0a 20 20 20 20 64 65 66 20 61 67 65 3d 28 76 61 ss.PersonStruct......def.age=(va
3b1c0 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 21 76 61 6c 75 65 2e 6b 69 6e 64 5f 6f 66 3f lue)..........if.!value.kind_of?
3b1e0 28 49 6e 74 65 67 65 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 28 41 72 67 (Integer)..............raise(Arg
3b200 75 6d 65 6e 74 45 72 72 6f 72 2c 20 22 41 67 65 20 23 7b 76 61 6c 75 65 7d 20 69 73 6e 27 74 20 umentError,."Age.#{value}.isn't.
3b220 61 6e 20 49 6e 74 65 67 65 72 22 29 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 69 66 20 76 61 6c 75 an.Integer")..........elsif.valu
3b240 65 20 3e 20 31 35 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 69 73 65 28 41 72 67 75 6d e.>.150..............raise(Argum
3b260 65 6e 74 45 72 72 6f 72 2c 20 22 41 67 65 20 23 7b 76 61 6c 75 65 7d 20 69 73 20 75 6e 72 65 61 entError,."Age.#{value}.is.unrea
3b280 73 6f 6e 61 62 6c 65 22 29 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 sonable")..........end..........
3b2a0 40 61 67 65 20 3d 20 76 61 6c 75 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a @age.=.value......end..end......
3b2c0 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 36 0d 0a 23 20 54 68 65 20 72 75 62 79 20 4f 62 6a #.@@PLEAC@@_13.6..#.The.ruby.Obj
3b2e0 65 63 74 20 63 6c 61 73 73 20 64 65 66 69 6e 65 73 20 61 20 64 75 70 20 61 6e 64 20 61 20 63 6c ect.class.defines.a.dup.and.a.cl
3b300 6f 6e 65 20 6d 65 74 68 6f 64 2e 0d 0a 23 20 54 68 65 20 64 75 70 20 6d 65 74 68 6f 64 20 69 73 one.method...#.The.dup.method.is
3b320 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 66 6f 72 20 70 72 6f 74 6f 74 79 70 65 20 6f 62 6a 65 63 .recommended.for.prototype.objec
3b340 74 20 63 72 65 61 74 69 6f 6e 2e 0d 0a 23 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 t.creation...#.The.default.imple
3b360 6d 65 6e 74 61 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 2c 0d mentation.makes.a.shallow.copy,.
3b380 0a 23 20 62 75 74 20 65 61 63 68 20 63 6c 61 73 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 69 .#.but.each.class.can.override.i
3b3a0 74 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 74 6f 20 6d 61 6b 65 20 61 20 64 65 65 70 20 63 6f t,.for.example.to.make.a.deep.co
3b3c0 70 79 2e 0d 0a 0d 0a 23 20 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 63 61 6c 6c 20 27 6e 65 py.....#.If.you.want.to.call.'ne
3b3e0 77 27 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 74 68 65 20 69 6e 73 74 61 6e 63 65 73 2c 0d 0a 23 w'.directly.on.the.instances,..#
3b400 20 79 6f 75 20 63 61 6e 20 63 72 65 61 74 65 20 61 20 69 6e 73 74 61 6e 63 65 20 6d 65 74 68 6f .you.can.create.a.instance.metho
3b420 64 20 22 6e 65 77 22 2c 20 77 68 69 63 68 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 64 75 70 d."new",.which.returns.a.new.dup
3b440 6c 69 63 61 74 65 2e 0d 0a 23 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 64 69 73 74 69 6e licate...#.This.method.is.distin
3b460 63 74 20 66 72 6f 6d 20 74 68 65 20 63 6c 61 73 73 20 6d 65 74 68 6f 64 20 6e 65 77 2e 0d 0a 23 ct.from.the.class.method.new...#
3b480 0d 0a 63 6c 61 73 73 20 41 0d 0a 20 20 20 20 64 65 66 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 ..class.A......def.new..........
3b4a0 64 75 70 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 6f 62 31 20 3d 20 41 2e 6e 65 77 dup......end..end....ob1.=.A.new
3b4c0 0d 0a 23 20 6c 61 74 65 72 20 6f 6e 0d 0a 6f 62 32 20 3d 20 6f 62 31 2e 6e 65 77 0d 0a 0d 0a 0d ..#.later.on..ob2.=.ob1.new.....
3b4e0 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 37 0d 0a 6d 65 74 68 6e 61 6d 65 20 3d 20 27 66 .#.@@PLEAC@@_13.7..methname.=.'f
3b500 6c 69 63 6b 65 72 27 0d 0a 6f 62 6a 2e 73 65 6e 64 28 6d 65 74 68 6e 61 6d 65 2c 20 31 30 29 20 licker'..obj.send(methname,.10).
3b520 20 20 20 20 20 23 20 63 61 6c 6c 73 20 6f 62 6a 2e 66 6c 69 63 6b 65 72 28 31 30 29 0d 0a 0d 0a .....#.calls.obj.flicker(10)....
3b540 23 20 63 61 6c 6c 20 74 68 72 65 65 20 6d 65 74 68 6f 64 73 20 6f 6e 20 74 68 65 20 6f 62 6a 65 #.call.three.methods.on.the.obje
3b560 63 74 2c 20 62 79 20 6e 61 6d 65 0d 0a 5b 27 73 74 61 72 74 27 2c 20 27 72 75 6e 27 2c 20 27 73 ct,.by.name..['start',.'run',.'s
3b580 74 6f 70 27 5d 2e 65 61 63 68 20 64 6f 20 7c 6d 65 74 68 6f 64 5f 73 74 72 69 6e 67 7c 0d 0a 20 top'].each.do.|method_string|...
3b5a0 20 20 20 6f 62 6a 2e 73 65 6e 64 28 6d 65 74 68 6f 64 5f 73 74 72 69 6e 67 29 0d 0a 65 6e 64 0d ...obj.send(method_string)..end.
3b5c0 0a 0d 0a 23 20 41 6e 6f 74 68 65 72 20 77 61 79 20 69 73 20 74 6f 20 63 72 65 61 74 65 20 61 20 ...#.Another.way.is.to.create.a.
3b5e0 4d 65 74 68 6f 64 20 6f 62 6a 65 63 74 0d 0a 6d 65 74 68 6f 64 5f 6f 62 6a 20 3d 20 6f 62 6a 2e Method.object..method_obj.=.obj.
3b600 6d 65 74 68 6f 64 28 27 66 6c 69 63 6b 65 72 27 29 0d 0a 23 20 41 6e 64 20 74 68 65 6e 20 63 61 method('flicker')..#.And.then.ca
3b620 6c 6c 20 69 74 0d 0a 6d 65 74 68 6f 64 5f 6f 62 6a 2e 63 61 6c 6c 28 31 30 29 0d 0a 0d 0a 0d 0a ll.it..method_obj.call(10)......
3b640 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 38 0d 0a 23 20 41 6c 6c 20 63 6c 61 73 73 65 73 20 #.@@PLEAC@@_13.8..#.All.classes.
3b660 69 6e 20 52 75 62 79 20 69 6e 68 65 72 69 74 20 66 72 6f 6d 20 63 6c 61 73 73 20 4f 62 6a 65 63 in.Ruby.inherit.from.class.Objec
3b680 74 0d 0a 23 20 61 6e 64 20 74 68 75 73 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 73 68 61 72 65 20 t..#.and.thus.all.objects.share.
3b6a0 6d 65 74 68 6f 64 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 63 6c 61 73 73 0d 0a 0d methods.defined.in.this.class...
3b6c0 0a 23 20 74 68 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 0d 0a 70 75 74 73 .#.the.class.of.the.object..puts
3b6e0 20 61 6e 79 5f 6f 62 6a 65 63 74 2e 74 79 70 65 0d 0a 0d 0a 23 20 52 75 62 79 20 63 6c 61 73 73 .any_object.type....#.Ruby.class
3b700 65 73 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 6f 62 6a 65 63 74 73 20 6f 66 20 63 6c 61 73 73 es.are.actually.objects.of.class
3b720 20 43 6c 61 73 73 20 61 6e 64 20 74 68 65 79 0d 0a 23 20 72 65 73 70 6f 6e 64 20 74 6f 20 6d 65 .Class.and.they..#.respond.to.me
3b740 74 68 6f 64 73 20 64 65 66 69 6e 65 64 20 69 6e 20 4f 62 6a 65 63 74 20 63 6c 61 73 73 20 61 73 thods.defined.in.Object.class.as
3b760 20 77 65 6c 6c 0d 0a 0d 0a 23 20 74 68 65 20 73 75 70 65 72 63 6c 61 73 73 20 6f 66 20 74 68 69 .well....#.the.superclass.of.thi
3b780 73 20 63 6c 61 73 73 0d 0a 70 75 74 73 20 61 6e 79 5f 6f 62 6a 65 63 74 2e 63 6c 61 73 73 2e 73 s.class..puts.any_object.class.s
3b7a0 75 70 65 72 63 6c 61 73 73 0d 0a 0d 0a 23 20 61 73 6b 20 61 6e 20 6f 62 6a 65 63 74 20 77 68 65 uperclass....#.ask.an.object.whe
3b7c0 74 68 65 72 20 69 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70 61 72 74 69 63 ther.it.is.an.instance.of.partic
3b7e0 75 6c 61 72 20 63 6c 61 73 73 0d 0a 6e 20 3d 20 34 2e 37 0d 0a 70 75 74 73 20 6e 2e 69 6e 73 74 ular.class..n.=.4.7..puts.n.inst
3b800 61 6e 63 65 5f 6f 66 3f 28 46 6c 6f 61 74 29 20 20 20 20 23 20 74 72 75 65 0d 0a 70 75 74 73 20 ance_of?(Float)....#.true..puts.
3b820 6e 2e 69 6e 73 74 61 6e 63 65 5f 6f 66 3f 28 4e 75 6d 65 72 69 63 29 20 20 23 20 66 61 6c 73 65 n.instance_of?(Numeric)..#.false
3b840 0d 0a 0d 0a 23 20 61 73 6b 20 61 6e 20 6f 62 6a 65 63 74 20 77 68 65 74 68 65 72 20 69 74 20 69 ....#.ask.an.object.whether.it.i
3b860 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 63 6c 61 73 73 2c 20 6f 6e 65 20 6f 66 20 74 s.an.instance.of.class,.one.of.t
3b880 68 65 0d 0a 23 20 73 75 70 65 72 63 6c 61 73 73 65 73 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 he..#.superclasses.of.the.object
3b8a0 2c 20 6f 72 20 6d 6f 64 75 6c 65 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 69 74 0d 0a 70 75 74 ,.or.modules.included.in.it..put
3b8c0 73 20 6e 2e 6b 69 6e 64 5f 6f 66 3f 28 46 6c 6f 61 74 29 20 20 20 20 20 20 20 23 20 74 72 75 65 s.n.kind_of?(Float).......#.true
3b8e0 20 28 74 68 65 20 63 6c 61 73 73 29 0d 0a 70 75 74 73 20 6e 2e 6b 69 6e 64 5f 6f 66 3f 28 4e 75 .(the.class)..puts.n.kind_of?(Nu
3b900 6d 65 72 69 63 29 20 20 20 20 20 23 20 74 72 75 65 20 28 61 6e 20 61 6e 63 65 73 74 6f 72 20 63 meric).....#.true.(an.ancestor.c
3b920 6c 61 73 73 29 0d 0a 70 75 74 73 20 6e 2e 6b 69 6e 64 5f 6f 66 3f 28 43 6f 6d 70 61 72 61 62 6c lass)..puts.n.kind_of?(Comparabl
3b940 65 29 20 20 23 20 74 72 75 65 20 28 61 20 6d 69 78 69 6e 20 6d 6f 64 75 6c 65 29 0d 0a 70 75 74 e)..#.true.(a.mixin.module)..put
3b960 73 20 6e 2e 6b 69 6e 64 5f 6f 66 3f 28 53 74 72 69 6e 67 29 20 20 20 20 20 20 23 20 66 61 6c 73 s.n.kind_of?(String)......#.fals
3b980 65 0d 0a 0d 0a 23 20 61 73 6b 20 61 6e 20 6f 62 6a 65 63 74 20 77 68 65 74 68 65 72 20 69 74 20 e....#.ask.an.object.whether.it.
3b9a0 63 61 6e 20 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d 65 74 68 can.respond.to.a.particular.meth
3b9c0 6f 64 0d 0a 70 75 74 73 20 6e 2e 72 65 73 70 6f 6e 64 5f 74 6f 3f 28 27 2b 27 29 20 20 20 20 20 od..puts.n.respond_to?('+').....
3b9e0 20 23 20 74 72 75 65 0d 0a 70 75 74 73 20 6e 2e 72 65 73 70 6f 6e 64 5f 74 6f 3f 28 27 6c 65 6e .#.true..puts.n.respond_to?('len
3ba00 67 74 68 27 29 20 23 20 66 61 6c 73 65 0d 0a 0d 0a 23 20 61 6c 6c 20 6d 65 74 68 6f 64 73 20 61 gth').#.false....#.all.methods.a
3ba20 6e 20 6f 62 6a 65 63 74 20 63 61 6e 20 72 65 73 70 6f 6e 64 20 74 6f 0d 0a 27 6a 75 73 74 20 61 n.object.can.respond.to..'just.a
3ba40 20 73 74 72 69 6e 67 27 2e 6d 65 74 68 6f 64 73 2e 65 61 63 68 20 7b 20 7c 6d 7c 20 70 75 74 73 .string'.methods.each.{.|m|.puts
3ba60 20 6d 20 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 39 0d 0a 23 20 41 63 .m.}......#.@@PLEAC@@_13.9..#.Ac
3ba80 74 75 61 6c 6c 79 20 61 6e 79 20 63 6c 61 73 73 20 69 6e 20 52 75 62 79 20 69 73 20 69 6e 68 65 tually.any.class.in.Ruby.is.inhe
3baa0 72 69 74 61 62 6c 65 0d 0a 63 6c 61 73 73 20 50 65 72 73 6f 6e 0d 0a 20 20 20 20 61 74 74 72 5f ritable..class.Person......attr_
3bac0 61 63 63 65 73 73 6f 72 20 3a 61 67 65 2c 20 3a 6e 61 6d 65 0d 0a 20 20 20 20 64 65 66 20 69 6e accessor.:age,.:name......def.in
3bae0 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 40 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 itialize..........@name.........
3bb00 20 40 61 67 65 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .@age......end..end..#----------
3bb20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 64 75 64 65 20 3d 20 50 65 72 73 -------------------..dude.=.Pers
3bb40 6f 6e 2e 6e 65 77 0d 0a 64 75 64 65 2e 6e 61 6d 65 20 3d 20 27 4a 61 73 6f 6e 27 0d 0a 64 75 64 on.new..dude.name.=.'Jason'..dud
3bb60 65 2e 61 67 65 20 3d 20 32 33 0d 0a 70 72 69 6e 74 66 20 22 25 73 20 69 73 20 61 67 65 20 25 64 e.age.=.23..printf."%s.is.age.%d
3bb80 2e 5c 6e 22 2c 20 64 75 64 65 2e 6e 61 6d 65 2c 20 64 75 64 65 2e 61 67 65 0d 0a 23 2d 2d 2d 2d .\n",.dude.name,.dude.age..#----
3bba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 49 6e 68 -------------------------..#.Inh
3bbc0 65 72 69 74 69 6e 67 20 66 72 6f 6d 20 50 65 72 73 6f 6e 0d 0a 63 6c 61 73 73 20 45 6d 70 6c 6f eriting.from.Person..class.Emplo
3bbe0 79 65 65 20 3c 20 50 65 72 73 6f 6e 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 yee.<.Person......attr_accessor.
3bc00 3a 73 61 6c 61 72 79 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d :salary..end..#-----------------
3bc20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 65 6d 70 6c 20 3d 20 45 6d 70 6c 6f 79 65 65 2e 6e 65 ------------..empl.=.Employee.ne
3bc40 77 0d 0a 65 6d 70 6c 2e 6e 61 6d 65 20 3d 20 27 4a 61 73 6f 6e 27 0d 0a 65 6d 70 6c 2e 61 67 65 w..empl.name.=.'Jason'..empl.age
3bc60 20 3d 20 32 33 0d 0a 65 6d 70 6c 2e 73 61 6c 61 72 79 20 3d 20 32 30 30 0d 0a 70 72 69 6e 74 66 .=.23..empl.salary.=.200..printf
3bc80 20 22 25 73 20 69 73 20 61 67 65 20 25 64 2c 20 74 68 65 20 73 61 6c 61 72 79 20 69 73 20 25 64 ."%s.is.age.%d,.the.salary.is.%d
3bca0 2e 5c 6e 22 2c 20 65 6d 70 6c 2e 6e 61 6d 65 2c 20 65 6d 70 6c 2e 61 67 65 2c 20 65 6d 70 6c 2e .\n",.empl.name,.empl.age,.empl.
3bcc0 73 61 6c 61 72 79 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d salary..#-----------------------
3bce0 2d 2d 2d 2d 2d 2d 0d 0a 23 20 41 6e 79 20 62 75 69 6c 74 2d 69 6e 20 63 6c 61 73 73 20 63 61 6e ------..#.Any.built-in.class.can
3bd00 20 62 65 20 69 6e 68 65 72 69 74 65 64 20 74 68 65 20 73 61 6d 65 20 77 61 79 0d 0a 63 6c 61 73 .be.inherited.the.same.way..clas
3bd20 73 20 57 65 69 72 64 53 74 72 69 6e 67 20 3c 20 53 74 72 69 6e 67 0d 0a 20 20 20 20 64 65 66 20 s.WeirdString.<.String......def.
3bd40 69 6e 69 74 69 61 6c 69 7a 65 28 6f 62 6a 29 0d 0a 20 20 20 20 20 20 20 20 73 75 70 65 72 20 6f initialize(obj)..........super.o
3bd60 62 6a 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 65 66 20 2b 28 61 6e 6f 74 68 65 72 4f 62 bj......end......def.+(anotherOb
3bd80 6a 29 20 20 20 23 20 2b 20 6d 65 74 68 6f 64 20 69 6e 20 74 68 69 73 20 63 6c 61 73 73 20 69 73 j)...#.+.method.in.this.class.is
3bda0 20 6f 76 65 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 74 6f 20 72 65 74 75 72 6e .overridden..........#.to.return
3bdc0 20 74 68 65 20 73 75 6d 20 6f 66 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 73 0d 0a 20 20 20 20 .the.sum.of.string.lengths......
3bde0 20 20 20 20 73 65 6c 66 2e 6c 65 6e 67 74 68 20 2b 20 61 6e 6f 74 68 65 72 4f 62 6a 2e 6c 65 6e ....self.length.+.anotherObj.len
3be00 67 74 68 20 20 23 20 27 73 65 6c 66 27 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 0d 0a 20 20 gth..#.'self'.can.be.omitted....
3be20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..end..end..#-------------------
3be40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 61 20 3d 20 57 65 69 72 64 53 74 72 69 6e 67 2e 6e 65 77 28 ----------..a.=.WeirdString.new(
3be60 27 68 65 6c 6c 6f 27 29 0d 0a 62 20 3d 20 57 65 69 72 64 53 74 72 69 6e 67 2e 6e 65 77 28 27 62 'hello')..b.=.WeirdString.new('b
3be80 79 65 27 29 0d 0a 0d 0a 70 75 74 73 20 61 20 2b 20 62 20 20 20 20 23 20 74 68 65 20 6f 76 65 72 ye')....puts.a.+.b....#.the.over
3bea0 72 69 64 64 65 6e 20 2b 0d 0a 23 3d 3e 20 38 0d 0a 70 75 74 73 20 61 2e 6c 65 6e 67 74 68 20 23 ridden.+..#=>.8..puts.a.length.#
3bec0 20 6d 65 74 68 6f 64 20 66 72 6f 6d 20 74 68 65 20 73 75 70 65 72 63 6c 61 73 73 2c 20 53 74 72 .method.from.the.superclass,.Str
3bee0 69 6e 67 0d 0a 23 3d 3e 20 35 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 31 ing..#=>.5......#.@@PLEAC@@_13.1
3bf00 31 0d 0a 23 20 49 6e 20 72 75 62 79 20 79 6f 75 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68 1..#.In.ruby.you.can.override.th
3bf20 65 20 6d 65 74 68 6f 64 5f 6d 69 73 73 69 6e 67 20 6d 65 74 68 6f 64 0d 0a 23 20 74 6f 20 68 61 e.method_missing.method..#.to.ha
3bf40 76 65 20 61 20 73 6f 6c 75 74 69 6f 6e 20 73 69 6d 69 6c 61 72 20 74 6f 20 70 65 72 6c 73 20 41 ve.a.solution.similar.to.perls.A
3bf60 55 54 4f 4c 4f 41 44 2e 0d 0a 63 6c 61 73 73 20 50 65 72 73 6f 6e 0d 0a 0d 0a 20 20 20 20 64 65 UTOLOAD...class.Person........de
3bf80 66 20 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 40 6f 6b 5f 66 69 65 6c 64 73 f.initialize..........@ok_fields
3bfa0 20 3d 20 25 77 28 6e 61 6d 65 20 61 67 65 20 70 65 65 72 73 20 70 61 72 65 6e 74 29 0d 0a 20 20 .=.%w(name.age.peers.parent)....
3bfc0 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 76 61 6c 69 64 5f 61 74 74 72 69 62 75 74 65 ..end........def.valid_attribute
3bfe0 3f 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 40 6f 6b 5f 66 69 65 6c 64 73 2e 69 6e 63 6c ?(name)..........@ok_fields.incl
3c000 75 64 65 3f 28 6e 61 6d 65 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 6d ude?(name)......end........def.m
3c020 65 74 68 6f 64 5f 6d 69 73 73 69 6e 67 28 6e 61 6d 65 73 79 6d 62 6f 6c 2c 20 2a 70 61 72 61 6d ethod_missing(namesymbol,.*param
3c040 73 29 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 6e 61 6d 65 73 79 6d 62 6f 6c 2e 74 6f s)..........name.=.namesymbol.to
3c060 5f 73 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 66 20 6e 61 6d 65 20 3d 7e 20 2f 5e _s..........return.if.name.=~./^
3c080 41 2d 5a 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 6e 61 6d 65 2e 74 6f 5f 73 5b 2d 31 5d 20 3d A-Z/..........if.name.to_s[-1].=
3c0a0 3d 20 28 27 3d 27 5b 30 5d 29 20 20 20 20 20 20 20 23 20 77 65 20 68 61 76 65 20 61 20 73 65 74 =.('='[0]).......#.we.have.a.set
3c0c0 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53 65 74 74 65 72 20 3d 20 74 72 75 65 ter..............isSetter.=.true
3c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2e 73 75 62 21 28 2f 3d 24 2f 2c 20 27 27 ..............name.sub!(/=$/,.''
3c100 29 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 69 66 20 76 61 6c 69 64 )..........end..........if.valid
3c120 5f 61 74 74 72 69 62 75 74 65 3f 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 _attribute?(name)..............i
3c140 66 20 69 73 53 65 74 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 f.isSetter..................inst
3c160 61 6e 63 65 5f 76 61 72 69 61 62 6c 65 5f 73 65 74 28 22 40 23 7b 6e 61 6d 65 7d 22 2c 20 2a 70 ance_variable_set("@#{name}",.*p
3c180 61 72 61 6d 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 arams)..............else........
3c1a0 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65 5f 76 61 72 69 61 62 6c 65 5f 67 65 74 28 ..........instance_variable_get(
3c1c0 22 40 23 7b 6e 61 6d 65 7d 22 2c 20 2a 70 61 72 61 6d 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 "@#{name}",.*params)............
3c1e0 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ..end..........else.............
3c200 20 23 20 69 66 20 6e 6f 20 61 6e 6e 65 73 74 6f 72 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 .#.if.no.annestor.is.responsible
3c220 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65 20 4f 62 6a 65 63 74 20 63 6c 61 73 ,..............#.the.Object.clas
3c240 73 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 20 4e 6f 4d 65 74 68 6f 64 45 72 72 6f 72 20 65 78 63 s.will.throw.a.NoMethodError.exc
3c260 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 75 70 65 72 28 6e 61 6d 65 73 79 eption..............super(namesy
3c280 6d 62 6f 6c 2c 20 2a 70 61 72 61 6d 73 29 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 mbol,.*params)..........end.....
3c2a0 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 6b 69 64 .end........def.new..........kid
3c2c0 20 3d 20 50 65 72 73 6f 6e 2e 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 6b 69 64 2e 70 61 72 65 6e .=.Person.new..........kid.paren
3c2e0 74 20 3d 20 73 65 6c 66 0d 0a 20 20 20 20 20 20 20 20 6b 69 64 0d 0a 20 20 20 20 65 6e 64 0d 0a t.=.self..........kid......end..
3c300 0d 0a 65 6e 64 0d 0a 0d 0a 64 61 64 20 3d 20 50 65 72 73 6f 6e 2e 6e 65 77 0d 0a 64 61 64 2e 6e ..end....dad.=.Person.new..dad.n
3c320 61 6d 65 20 3d 20 22 4a 61 73 6f 6e 22 0d 0a 64 61 64 2e 61 67 65 20 3d 20 32 33 0d 0a 6b 69 64 ame.=."Jason"..dad.age.=.23..kid
3c340 20 3d 20 64 61 64 2e 6e 65 77 0d 0a 6b 69 64 2e 6e 61 6d 65 20 3d 20 22 52 61 63 68 65 6c 22 0d .=.dad.new..kid.name.=."Rachel".
3c360 0a 6b 69 64 2e 61 67 65 20 3d 20 32 0d 0a 70 75 74 73 20 22 4b 69 64 27 73 20 70 61 72 65 6e 74 .kid.age.=.2..puts."Kid's.parent
3c380 20 69 73 20 23 7b 6b 69 64 2e 70 61 72 65 6e 74 2e 6e 61 6d 65 7d 22 0d 0a 70 75 74 73 20 64 61 .is.#{kid.parent.name}"..puts.da
3c3a0 64 0d 0a 70 75 74 73 20 6b 69 64 0d 0a 0d 0a 63 6c 61 73 73 20 45 6d 70 6c 6f 79 65 65 20 3c 20 d..puts.kid....class.Employee.<.
3c3c0 50 65 72 73 6f 6e 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 Person......def.initialize......
3c3e0 20 20 20 20 73 75 70 65 72 0d 0a 20 20 20 20 20 20 20 20 40 6f 6b 5f 66 69 65 6c 64 73 2e 70 75 ....super..........@ok_fields.pu
3c400 73 68 28 22 73 61 6c 61 72 79 22 2c 20 22 62 6f 73 73 22 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 sh("salary",."boss")......end...
3c420 20 20 20 64 65 66 20 6f 6b 5f 66 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 40 6f 6b 5f 66 69 ...def.ok_fields..........@ok_fi
3c440 65 6c 64 73 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 elds......end..end......#.@@PLEA
3c460 43 40 40 5f 31 33 2e 31 33 0d 0a 23 20 54 68 65 20 72 75 62 79 20 67 61 72 62 61 67 65 20 63 6f C@@_13.13..#.The.ruby.garbage.co
3c480 6c 6c 65 63 74 6f 72 20 70 72 65 74 65 6e 64 73 20 74 6f 20 63 6f 70 65 20 77 69 74 68 20 63 69 llector.pretends.to.cope.with.ci
3c4a0 72 63 75 6c 61 72 20 73 74 72 75 63 74 75 72 65 73 2e 0d 0a 23 20 59 6f 75 20 63 61 6e 20 74 65 rcular.structures...#.You.can.te
3c4c0 73 74 20 69 74 20 77 69 74 68 20 74 68 69 73 20 63 6f 64 65 3a 0d 0a 63 6c 61 73 73 20 52 69 6e st.it.with.this.code:..class.Rin
3c4e0 67 4e 6f 64 65 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 6e 65 78 74 0d 0a gNode......attr_accessor.:next..
3c500 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 70 72 65 76 0d 0a 20 20 20 20 61 74 74 ....attr_accessor.:prev......att
3c520 72 5f 72 65 61 64 65 72 20 3a 6e 61 6d 65 0d 0a 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 r_reader.:name........def.initia
3c540 6c 69 7a 65 28 61 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 40 6e 61 6d 65 20 3d 20 61 4e 61 lize(aName)..........@name.=.aNa
3c560 6d 65 0d 0a 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 53 70 61 63 65 2e 64 65 66 69 6e 65 5f 66 me..........ObjectSpace.define_f
3c580 69 6e 61 6c 69 7a 65 72 28 73 65 6c 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 inalizer(self,..................
3c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 63 6c 61 73 73 2e .....................self.class.
3c5c0 6d 65 74 68 6f 64 28 3a 66 69 6e 61 6c 69 7a 65 29 2e 74 6f 5f 70 72 6f 63 29 0d 0a 20 20 20 20 method(:finalize).to_proc)......
3c5e0 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 52 69 6e 67 4e 6f 64 65 2e 66 69 6e 61 6c 69 7a 65 end........def.RingNode.finalize
3c600 28 69 64 29 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22 4e 6f 64 65 20 23 7b 69 64 7d 20 64 (id)..........puts."Node.#{id}.d
3c620 79 69 6e 67 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 52 69 6e 67 4e 6f ying"......end........def.RingNo
3c640 64 65 2e 73 68 6f 77 5f 61 6c 6c 5f 6f 62 6a 65 63 74 73 0d 0a 20 20 20 20 20 20 20 20 4f 62 6a de.show_all_objects..........Obj
3c660 65 63 74 53 70 61 63 65 2e 65 61 63 68 5f 6f 62 6a 65 63 74 20 7b 7c 69 64 7c 0d 0a 20 20 20 20 ectSpace.each_object.{|id|......
3c680 20 20 20 20 20 20 20 20 70 75 74 73 20 69 64 2e 6e 61 6d 65 20 69 66 20 69 64 2e 63 6c 61 73 73 ........puts.id.name.if.id.class
3c6a0 20 3d 3d 20 52 69 6e 67 4e 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 65 6e 64 .==.RingNode..........}......end
3c6c0 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 63 72 65 61 74 65 5f 74 65 73 74 0d 0a 20 20 20 20 61 20 ..end....def.create_test......a.
3c6e0 3d 20 52 69 6e 67 4e 6f 64 65 2e 6e 65 77 28 22 4e 6f 64 65 20 41 22 29 0d 0a 20 20 20 20 62 20 =.RingNode.new("Node.A")......b.
3c700 3d 20 52 69 6e 67 4e 6f 64 65 2e 6e 65 77 28 22 4e 6f 64 65 20 42 22 29 0d 0a 20 20 20 20 63 20 =.RingNode.new("Node.B")......c.
3c720 3d 20 52 69 6e 67 4e 6f 64 65 2e 6e 65 77 28 22 4e 6f 64 65 20 43 22 29 0d 0a 20 20 20 20 61 2e =.RingNode.new("Node.C")......a.
3c740 6e 65 78 74 20 3d 20 62 0d 0a 20 20 20 20 62 2e 6e 65 78 74 20 3d 20 63 0d 0a 20 20 20 20 63 2e next.=.b......b.next.=.c......c.
3c760 6e 65 78 74 20 3d 20 61 0d 0a 20 20 20 20 61 2e 70 72 65 76 20 3d 20 63 0d 0a 20 20 20 20 63 2e next.=.a......a.prev.=.c......c.
3c780 70 72 65 76 20 3d 20 62 0d 0a 20 20 20 20 62 2e 70 72 65 76 20 3d 20 61 0d 0a 0d 0a 20 20 20 20 prev.=.b......b.prev.=.a........
3c7a0 61 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 62 20 3d 20 6e 69 6c 0d 0a 20 20 20 20 63 20 3d 20 6e 69 a.=.nil......b.=.nil......c.=.ni
3c7c0 6c 0d 0a 65 6e 64 0d 0a 0d 0a 63 72 65 61 74 65 5f 74 65 73 74 0d 0a 52 69 6e 67 4e 6f 64 65 2e l..end....create_test..RingNode.
3c7e0 73 68 6f 77 5f 61 6c 6c 5f 6f 62 6a 65 63 74 73 0d 0a 4f 62 6a 65 63 74 53 70 61 63 65 2e 67 61 show_all_objects..ObjectSpace.ga
3c800 72 62 61 67 65 5f 63 6f 6c 6c 65 63 74 0d 0a 70 75 74 73 20 22 41 66 74 65 72 20 67 61 72 62 61 rbage_collect..puts."After.garba
3c820 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 22 0d 0a 52 69 6e 67 4e 6f 64 65 2e 73 68 6f 77 5f 61 6c ge.collection"..RingNode.show_al
3c840 6c 5f 6f 62 6a 65 63 74 73 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 33 2e 31 34 l_objects......#.@@PLEAC@@_13.14
3c860 0d 0a 63 6c 61 73 73 20 53 74 72 69 6e 67 0d 0a 20 20 20 20 64 65 66 20 3c 3d 3e 28 6f 74 68 65 ..class.String......def.<=>(othe
3c880 72 29 0d 0a 20 20 20 20 20 20 20 20 73 65 6c 66 2e 63 61 73 65 63 6d 70 20 6f 74 68 65 72 0d 0a r)..........self.casecmp.other..
3c8a0 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 ....end..end....#.There.is.no.wa
3c8c0 79 20 74 6f 20 64 69 72 65 63 74 6c 79 20 6f 76 65 72 6c 6f 61 64 20 74 68 65 20 27 22 22 27 20 y.to.directly.overload.the.'""'.
3c8e0 28 73 74 72 69 6e 67 69 66 79 29 0d 0a 23 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 52 75 62 79 2e (stringify)..#.operator.in.Ruby.
3c900 20 20 48 6f 77 65 76 65 72 2c 20 62 79 20 63 6f 6e 76 65 6e 74 69 6f 6e 2c 20 63 6c 61 73 73 65 ..However,.by.convention,.classe
3c920 73 20 77 68 69 63 68 0d 0a 23 20 63 61 6e 20 72 65 61 73 6f 6e 61 62 6c 79 20 62 65 20 63 6f 6e s.which..#.can.reasonably.be.con
3c940 76 65 72 74 65 64 20 74 6f 20 61 20 53 74 72 69 6e 67 20 77 69 6c 6c 20 64 65 66 69 6e 65 20 61 verted.to.a.String.will.define.a
3c960 0d 0a 23 20 27 74 6f 5f 73 27 20 6d 65 74 68 6f 64 20 61 73 20 69 6e 20 74 68 65 20 54 69 6d 65 ..#.'to_s'.method.as.in.the.Time
3c980 4e 75 6d 62 65 72 20 63 6c 61 73 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 0d 0a 23 20 54 Number.class.defined.below...#.T
3c9a0 68 65 20 27 70 75 74 73 27 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 63 61 6c he.'puts'.method.will.automatcal
3c9c0 6c 79 20 63 61 6c 6c 20 61 6e 20 6f 62 6a 65 63 74 27 73 0d 0a 23 20 27 74 6f 5f 73 27 20 6d 65 ly.call.an.object's..#.'to_s'.me
3c9e0 74 68 6f 64 20 61 73 20 69 73 20 64 65 6d 6f 6e 73 74 72 61 74 65 64 20 62 65 6c 6f 77 2e 0d 0a thod.as.is.demonstrated.below...
3ca00 23 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 63 6c 61 73 73 20 64 65 66 69 6e 65 #.Furthermore,.if.a.class.define
3ca20 73 20 61 20 74 6f 5f 73 74 72 20 6d 65 74 68 6f 64 2c 20 61 6e 20 6f 62 6a 65 63 74 20 6f 66 20 s.a.to_str.method,.an.object.of.
3ca40 74 68 61 74 0d 0a 23 20 63 6c 61 73 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 6d 6f 73 74 20 61 that..#.class.can.be.used.most.a
3ca60 6e 79 20 70 6c 61 63 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 ny.place.where.the.interpreter.i
3ca80 73 20 6c 6f 6f 6b 69 6e 67 0d 0a 23 20 66 6f 72 20 61 20 53 74 72 69 6e 67 20 76 61 6c 75 65 2e s.looking..#.for.a.String.value.
3caa0 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ....#---------------------------
3cac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 4e 4f 54 45 3a 20 52 75 62 79 20 68 61 73 20 61 ------------..#.NOTE:.Ruby.has.a
3cae0 20 62 75 69 6c 74 69 6e 20 54 69 6d 65 20 63 6c 61 73 73 20 77 68 69 63 68 20 77 6f 75 6c 64 20 .builtin.Time.class.which.would.
3cb00 75 73 75 61 6c 6c 79 20 62 65 20 75 73 65 64 0d 0a 23 20 74 6f 20 6d 61 6e 69 70 75 6c 61 74 65 usually.be.used..#.to.manipulate
3cb20 20 74 69 6d 65 20 6f 62 6a 65 63 74 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 .time.objects,.the.following.is.
3cb40 73 75 70 70 6c 69 65 64 20 66 6f 72 0d 0a 23 20 65 64 75 63 61 74 69 6f 6e 61 6c 20 70 75 72 70 supplied.for..#.educational.purp
3cb60 6f 73 65 73 20 74 6f 20 64 65 6d 6f 6e 73 74 72 61 74 65 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 oses.to.demonstrate.operator.ove
3cb80 72 6c 6f 61 64 69 6e 67 2e 0d 0a 23 0d 0a 63 6c 61 73 73 20 54 69 6d 65 4e 75 6d 62 65 72 0d 0a rloading...#..class.TimeNumber..
3cba0 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 20 3a 68 6f 75 72 73 2c 3a 6d 69 6e 75 74 ....attr_accessor..:hours,:minut
3cbc0 65 73 2c 3a 73 65 63 6f 6e 64 73 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 es,:seconds......def.initialize(
3cbe0 20 68 6f 75 72 73 2c 20 6d 69 6e 75 74 65 73 2c 20 73 65 63 6f 6e 64 73 29 0d 0a 20 20 20 20 20 .hours,.minutes,.seconds).......
3cc00 20 20 20 40 68 6f 75 72 73 20 3d 20 68 6f 75 72 73 0d 0a 20 20 20 20 20 20 20 20 40 6d 69 6e 75 ...@hours.=.hours..........@minu
3cc20 74 65 73 20 3d 20 6d 69 6e 75 74 65 73 0d 0a 20 20 20 20 20 20 20 20 40 73 65 63 6f 6e 64 73 20 tes.=.minutes..........@seconds.
3cc40 3d 20 73 65 63 6f 6e 64 73 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 74 6f =.seconds......end........def.to
3cc60 5f 73 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 70 72 69 6e 74 66 28 20 22 25 64 3a _s..........return.sprintf(."%d:
3cc80 25 30 32 64 3a 25 30 32 64 22 2c 20 40 68 6f 75 72 73 2c 20 40 6d 69 6e 75 74 65 73 2c 20 40 73 %02d:%02d",.@hours,.@minutes,.@s
3cca0 65 63 6f 6e 64 73 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 74 6f 5f 73 econds)......end........def.to_s
3ccc0 74 72 0d 0a 20 20 20 20 20 20 20 20 74 6f 5f 73 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 tr..........to_s......end.......
3cce0 20 64 65 66 20 2b 28 20 6f 74 68 65 72 29 0d 0a 20 20 20 20 20 20 20 20 73 65 63 6f 6e 64 73 20 .def.+(.other)..........seconds.
3cd00 3d 20 40 73 65 63 6f 6e 64 73 20 2b 20 6f 74 68 65 72 2e 73 65 63 6f 6e 64 73 0d 0a 20 20 20 20 =.@seconds.+.other.seconds......
3cd20 20 20 20 20 6d 69 6e 75 74 65 73 20 3d 20 40 6d 69 6e 75 74 65 73 20 2b 20 6f 74 68 65 72 2e 6d ....minutes.=.@minutes.+.other.m
3cd40 69 6e 75 74 65 73 0d 0a 20 20 20 20 20 20 20 20 68 6f 75 72 73 20 3d 20 40 68 6f 75 72 73 20 2b inutes..........hours.=.@hours.+
3cd60 20 6f 74 68 65 72 2e 68 6f 75 72 73 0d 0a 20 20 20 20 20 20 20 20 69 66 20 73 65 63 6f 6e 64 73 .other.hours..........if.seconds
3cd80 20 3e 3d 20 36 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 63 6f 6e 64 73 20 25 3d 20 36 .>=.60..............seconds.%=.6
3cda0 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 69 6e 75 74 65 73 20 2b 3d 20 31 0d 0a 20 20 20 0..............minutes.+=.1.....
3cdc0 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 69 66 20 6d 69 6e 75 74 65 73 20 3e 3d 20 .....end..........if.minutes.>=.
3cde0 36 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 69 6e 75 74 65 73 20 25 3d 20 36 30 0d 0a 20 60..............minutes.%=.60...
3ce00 20 20 20 20 20 20 20 20 20 20 20 68 6f 75 72 73 20 2b 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 65 ...........hours.+=.1..........e
3ce20 6e 64 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 69 6d 65 4e 75 6d 62 65 72 2e 6e 65 nd..........return.TimeNumber.ne
3ce40 77 28 68 6f 75 72 73 2c 20 6d 69 6e 75 74 65 73 2c 20 73 65 63 6f 6e 64 73 29 0d 0a 20 20 20 20 w(hours,.minutes,.seconds)......
3ce60 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 2d 28 6f 74 68 65 72 29 0d 0a 20 20 20 20 20 20 20 end........def.-(other).........
3ce80 20 72 61 69 73 65 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 72 72 6f 72 0d 0a 20 20 20 20 .raise.NotImplementedError......
3cea0 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 2a 28 6f 74 68 65 72 29 0d 0a 20 20 20 20 20 20 20 end........def.*(other).........
3cec0 20 72 61 69 73 65 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 72 72 6f 72 0d 0a 20 20 20 20 .raise.NotImplementedError......
3cee0 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 2f 28 20 6f 74 68 65 72 29 0d 0a 20 20 20 20 20 20 end........def./(.other)........
3cf00 20 20 72 61 69 73 65 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 72 72 6f 72 0d 0a 20 20 20 ..raise.NotImplementedError.....
3cf20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 74 31 20 3d 20 54 69 6d 65 4e 75 6d 62 65 72 2e 6e 65 77 .end..end....t1.=.TimeNumber.new
3cf40 28 30 2c 20 35 38 2c 20 35 39 29 0d 0a 73 65 63 20 3d 20 54 69 6d 65 4e 75 6d 62 65 72 2e 6e 65 (0,.58,.59)..sec.=.TimeNumber.ne
3cf60 77 28 30 2c 20 30 2c 20 31 29 0d 0a 6d 69 6e 20 3d 20 54 69 6d 65 4e 75 6d 62 65 72 2e 6e 65 77 w(0,.0,.1)..min.=.TimeNumber.new
3cf80 28 30 2c 20 31 2c 20 30 29 0d 0a 70 75 74 73 20 74 31 20 2b 20 73 65 63 20 2b 20 6d 69 6e 20 2b (0,.1,.0)..puts.t1.+.sec.+.min.+
3cfa0 20 6d 69 6e 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .min....#-----------------------
3cfc0 2d 2d 2d 2d 2d 2d 0d 0a 23 20 53 74 72 4e 75 6d 20 63 6c 61 73 73 20 65 78 61 6d 70 6c 65 3a 20 ------..#.StrNum.class.example:.
3cfe0 52 75 62 79 27 73 20 62 75 69 6c 74 69 6e 20 53 74 72 69 6e 67 20 63 6c 61 73 73 20 61 6c 72 65 Ruby's.builtin.String.class.alre
3d000 61 64 79 20 68 61 73 20 74 68 65 0d 0a 23 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 75 74 6c ady.has.the..#.capabilities.outl
3d020 69 6e 65 64 20 69 6e 20 53 74 72 4e 75 6d 20 50 65 72 6c 20 65 78 61 6d 70 6c 65 2c 20 68 6f 77 ined.in.StrNum.Perl.example,.how
3d040 65 76 65 72 20 74 68 65 20 27 2a 27 20 6f 70 65 72 61 74 6f 72 0d 0a 23 20 6f 6e 20 52 75 62 79 ever.the.'*'.operator..#.on.Ruby
3d060 27 73 20 53 74 72 69 6e 67 20 63 6c 61 73 73 20 61 63 74 73 20 64 69 66 66 65 72 65 6e 74 6c 79 's.String.class.acts.differently
3d080 3a 20 49 74 20 63 72 65 61 74 65 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 0d 0a 23 20 69 :.It.creates.a.string.which..#.i
3d0a0 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 74 72 69 6e 67 20 72 65 70 65 61 74 65 64 20 4e s.the.original.string.repeated.N
3d0c0 20 74 69 6d 65 73 2e 0d 0a 23 0d 0a 23 20 55 73 69 6e 67 20 52 75 62 79 27 73 20 53 74 72 69 6e .times...#..#.Using.Ruby's.Strin
3d0e0 67 20 63 6c 61 73 73 20 61 73 20 69 73 20 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0d 0a g.class.as.is.in.this.example:..
3d100 78 20 3d 20 22 52 65 64 22 3b 20 79 20 3d 20 22 42 6c 61 63 6b 22 0d 0a 7a 20 3d 20 78 2b 79 0d x.=."Red";.y.=."Black"..z.=.x+y.
3d120 0a 72 20 3d 20 7a 2a 33 20 23 20 72 20 69 73 20 22 52 65 64 42 6c 61 63 6b 52 65 64 42 6c 61 63 .r.=.z*3.#.r.is."RedBlackRedBlac
3d140 6b 52 65 64 42 6c 61 63 6b 22 0d 0a 70 75 74 73 20 22 76 61 6c 75 65 73 20 61 72 65 20 23 7b 78 kRedBlack"..puts."values.are.#{x
3d160 7d 2c 20 23 7b 79 7d 2c 20 23 7b 7a 7d 2c 20 61 6e 64 20 23 7b 72 7d 22 0d 0a 70 72 69 6e 74 20 },.#{y},.#{z},.and.#{r}"..print.
3d180 22 23 7b 78 7d 20 69 73 20 22 2c 20 78 20 3c 20 79 20 3f 20 22 4c 54 22 20 3a 20 22 47 45 22 2c "#{x}.is.",.x.<.y.?."LT".:."GE",
3d1a0 20 22 20 23 7b 79 7d 5c 6e 22 0d 0a 23 20 70 72 69 6e 74 73 3a 0d 0a 23 20 76 61 6c 75 65 73 20 .".#{y}\n"..#.prints:..#.values.
3d1c0 61 72 65 20 52 65 64 2c 20 42 6c 61 63 6b 2c 20 52 65 64 42 6c 61 63 6b 2c 20 61 6e 64 20 52 65 are.Red,.Black,.RedBlack,.and.Re
3d1e0 64 42 6c 61 63 6b 52 65 64 42 6c 61 63 6b 52 65 64 42 6c 61 63 6b 0d 0a 23 20 52 65 64 20 69 73 dBlackRedBlackRedBlack..#.Red.is
3d200 20 47 45 20 42 6c 61 63 6b 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .GE.Black....#------------------
3d220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 63 6c 61 73 73 20 46 69 78 4e 75 6d 0d 0a 20 20 20 20 52 -----------..class.FixNum......R
3d240 45 47 45 58 20 3d 20 2f 28 5c 2e 5c 64 2a 29 2f 0d 0a 20 20 20 20 44 45 46 41 55 4c 54 5f 50 4c EGEX.=./(\.\d*)/......DEFAULT_PL
3d260 41 43 45 53 20 3d 20 30 0d 0a 20 20 20 20 61 74 74 72 5f 61 63 63 65 73 73 6f 72 20 3a 76 61 6c ACES.=.0......attr_accessor.:val
3d280 75 65 2c 20 3a 70 6c 61 63 65 73 0d 0a 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 ue,.:places......def.initialize(
3d2a0 76 61 6c 75 65 2c 20 70 6c 61 63 65 73 20 3d 20 6e 69 6c 29 0d 0a 20 20 20 20 20 20 20 20 40 76 value,.places.=.nil)..........@v
3d2c0 61 6c 75 65 20 3d 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 69 66 20 70 6c 61 63 65 73 0d alue.=.value..........if.places.
3d2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 70 6c 61 63 65 73 20 3d 20 70 6c 61 63 65 73 0d 0a 20 .............@places.=.places...
3d300 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 20 3d 20 52 45 47 .......else..............m.=.REG
3d320 45 58 2e 6d 61 74 63 68 28 76 61 6c 75 65 2e 74 6f 5f 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 EX.match(value.to_s)............
3d340 20 20 69 66 20 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 40 70 6c 61 63 65 73 20 ..if.m..................@places.
3d360 3d 20 6d 5b 30 5d 2e 6c 65 6e 67 74 68 20 2d 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 =.m[0].length.-.1..............e
3d380 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 40 70 6c 61 63 65 73 20 3d 20 44 lse..................@places.=.D
3d3a0 45 46 41 55 4c 54 5f 50 4c 41 43 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a EFAULT_PLACES..............end..
3d3c0 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 ........end......end........def.
3d3e0 2b 28 6f 74 68 65 72 29 0d 0a 20 20 20 20 20 20 20 20 46 69 78 4e 75 6d 2e 6e 65 77 28 40 76 61 +(other)..........FixNum.new(@va
3d400 6c 75 65 20 2b 20 6f 74 68 65 72 2e 76 61 6c 75 65 2c 20 6d 61 78 28 40 70 6c 61 63 65 73 2c 20 lue.+.other.value,.max(@places,.
3d420 6f 74 68 65 72 2e 70 6c 61 63 65 73 29 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 other.places))......end........d
3d440 65 66 20 2a 28 6f 74 68 65 72 29 0d 0a 20 20 20 20 20 20 20 20 46 69 78 4e 75 6d 2e 6e 65 77 28 ef.*(other)..........FixNum.new(
3d460 40 76 61 6c 75 65 20 2a 20 6f 74 68 65 72 2e 76 61 6c 75 65 2c 20 6d 61 78 28 40 70 6c 61 63 65 @value.*.other.value,.max(@place
3d480 73 2c 20 6f 74 68 65 72 2e 70 6c 61 63 65 73 29 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 s,.other.places))......end......
3d4a0 20 20 64 65 66 20 2f 28 6f 74 68 65 72 29 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22 44 69 ..def./(other)..........puts."Di
3d4c0 76 69 64 65 3a 20 23 7b 40 76 61 6c 75 65 2e 74 6f 5f 66 2f 6f 74 68 65 72 2e 76 61 6c 75 65 2e vide:.#{@value.to_f/other.value.
3d4e0 74 6f 5f 66 7d 22 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 46 69 78 4e 75 6d 2e to_f}"..........result.=.FixNum.
3d500 6e 65 77 28 40 76 61 6c 75 65 2e 74 6f 5f 66 2f 6f 74 68 65 72 2e 76 61 6c 75 65 2e 74 6f 5f 66 new(@value.to_f/other.value.to_f
3d520 29 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 70 6c 61 63 65 73 20 3d 20 6d 61 78 28 72 )..........result.places.=.max(r
3d540 65 73 75 6c 74 2e 70 6c 61 63 65 73 2c 6f 74 68 65 72 2e 70 6c 61 63 65 73 29 0d 0a 20 20 20 20 esult.places,other.places)......
3d560 20 20 20 20 72 65 73 75 6c 74 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 74 ....result......end........def.t
3d580 6f 5f 73 0d 0a 20 20 20 20 20 20 20 20 73 70 72 69 6e 74 66 28 22 53 54 52 25 73 3a 20 25 2e 2a o_s..........sprintf("STR%s:.%.*
3d5a0 66 22 2c 20 73 65 6c 66 2e 63 6c 61 73 73 2e 74 6f 5f 73 20 2c 20 40 70 6c 61 63 65 73 2c 20 40 f",.self.class.to_s.,.@places,.@
3d5c0 76 61 6c 75 65 29 20 20 20 23 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 value)...#.......end........def.
3d5e0 74 6f 5f 73 74 72 0d 0a 20 20 20 20 20 20 20 20 74 6f 5f 73 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d to_str..........to_s......end...
3d600 0a 20 20 20 20 64 65 66 20 74 6f 5f 69 20 23 63 6f 6e 76 65 72 74 20 74 6f 20 69 6e 74 0d 0a 20 .....def.to_i.#convert.to.int...
3d620 20 20 20 20 20 20 20 40 76 61 6c 75 65 2e 74 6f 5f 69 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 .......@value.to_i......end.....
3d640 20 20 20 64 65 66 20 74 6f 5f 66 20 23 63 6f 6e 76 65 72 74 20 74 6f 20 66 6c 6f 61 74 60 0d 0a ...def.to_f.#convert.to.float`..
3d660 20 20 20 20 20 20 20 20 40 76 61 6c 75 65 2e 74 6f 5f 66 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a ........@value.to_f......end....
3d680 20 20 20 20 70 72 69 76 61 74 65 0d 0a 20 20 20 20 64 65 66 20 6d 61 78 28 61 2c 62 29 0d 0a 20 ....private......def.max(a,b)...
3d6a0 20 20 20 20 20 20 20 61 20 3e 20 62 20 3f 20 61 20 3a 20 62 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 .......a.>.b.?.a.:.b......end..e
3d6c0 6e 64 0d 0a 0d 0a 64 65 66 20 64 65 6d 6f 28 29 0d 0a 20 20 20 20 78 20 3d 20 46 69 78 4e 75 6d nd....def.demo()......x.=.FixNum
3d6e0 2e 6e 65 77 28 34 30 29 0d 0a 20 20 20 20 79 20 3d 20 46 69 78 4e 75 6d 2e 6e 65 77 28 31 32 2c .new(40)......y.=.FixNum.new(12,
3d700 20 30 29 0d 0a 0d 0a 20 20 20 20 70 75 74 73 20 22 73 75 6d 20 6f 66 20 23 7b 78 7d 20 61 6e 64 .0)........puts."sum.of.#{x}.and
3d720 20 23 7b 79 7d 20 69 73 20 20 23 7b 78 2b 79 7d 22 0d 0a 20 20 20 20 70 75 74 73 20 22 70 72 6f .#{y}.is..#{x+y}"......puts."pro
3d740 64 75 63 74 20 6f 66 20 23 7b 78 7d 20 61 6e 64 20 23 7b 79 7d 20 69 73 20 23 7b 78 2a 79 7d 22 duct.of.#{x}.and.#{y}.is.#{x*y}"
3d760 0d 0a 0d 0a 20 20 20 20 7a 20 3d 20 78 2f 79 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 7a 7d 20 ........z.=.x/y......puts."#{z}.
3d780 68 61 73 20 23 7b 7a 2e 70 6c 61 63 65 73 7d 20 70 6c 61 63 65 73 22 0d 0a 20 20 20 20 75 6e 6c has.#{z.places}.places"......unl
3d7a0 65 73 73 20 7a 2e 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 20 20 7a 2e 70 6c 61 63 65 73 20 3d ess.z.places..........z.places.=
3d7c0 20 32 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 70 75 74 73 20 22 64 69 76 20 6f 66 20 .2......end........puts."div.of.
3d7e0 23 7b 78 7d 20 62 79 20 23 7b 79 7d 20 69 73 20 23 7b 7a 7d 22 0d 0a 20 20 20 20 70 75 74 73 20 #{x}.by.#{y}.is.#{z}"......puts.
3d800 22 73 71 75 61 72 65 20 6f 66 20 74 68 61 74 20 69 73 20 20 23 7b 7a 2a 7a 7d 22 0d 0a 65 6e 64 "square.of.that.is..#{z*z}"..end
3d820 0d 0a 0d 0a 69 66 20 5f 5f 46 49 4c 45 5f 5f 20 3d 3d 20 24 30 0d 0a 20 20 20 20 64 65 6d 6f 28 ....if.__FILE__.==.$0......demo(
3d840 29 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 34 2e 31 0d 0a 23 20 )..end......#.@@PLEAC@@_14.1..#.
3d860 54 68 65 72 65 20 61 72 65 20 64 62 6d 2c 20 73 64 62 6d 2c 20 67 64 62 6d 20 6d 6f 64 75 6c 65 There.are.dbm,.sdbm,.gdbm.module
3d880 73 0d 0a 23 20 61 6e 64 20 74 68 65 20 62 64 62 20 6d 6f 64 75 6c 65 20 66 6f 72 20 61 63 63 65 s..#.and.the.bdb.module.for.acce
3d8a0 73 73 69 6e 67 20 74 68 65 20 62 65 72 6b 65 6c 65 79 20 64 62 0d 0a 23 20 73 64 62 6d 20 73 65 ssing.the.berkeley.db..#.sdbm.se
3d8c0 65 6d 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 74 68 65 20 6d 6f 73 74 20 73 em.to.be.available.on.the.most.s
3d8e0 79 73 74 65 6d 73 2c 0d 0a 23 20 73 6f 20 77 65 20 75 73 65 20 69 74 20 68 65 72 65 0d 0a 23 0d ystems,..#.so.we.use.it.here..#.
3d900 0a 72 65 71 75 69 72 65 20 22 73 64 62 6d 22 0d 0a 53 44 42 4d 2e 6f 70 65 6e 28 22 66 69 6c 65 .require."sdbm"..SDBM.open("file
3d920 6e 61 6d 65 22 2c 20 30 36 36 36 29 20 7b 20 7c 64 62 6f 62 6a 7c 0d 0a 20 20 20 20 23 20 72 61 name",.0666).{.|dbobj|......#.ra
3d940 69 73 65 73 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 6f 70 65 6e 20 65 72 72 6f 72 0d 0a 0d 0a ises.exception.if.open.error....
3d960 20 20 20 20 23 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 73 64 62 6d 2d 64 62 6f 62 6a 20 68 61 ....#.the.returned.sdbm-dbobj.ha
3d980 73 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 73 20 6f 66 20 61 20 68 61 73 68 0d s.most.of.the.methods.of.a.hash.
3d9a0 0a 20 20 20 20 76 20 3d 20 64 62 6f 62 6a 5b 22 6b 65 79 22 5d 0d 0a 20 20 20 20 64 62 6f 62 6a .....v.=.dbobj["key"]......dbobj
3d9c0 5b 22 6b 65 79 22 5d 20 3d 20 22 6e 65 77 76 61 6c 75 65 22 0d 0a 20 20 20 20 69 66 20 64 62 6f ["key"].=."newvalue"......if.dbo
3d9e0 62 6a 2e 68 61 73 5f 6b 65 79 3f 28 22 6b 65 79 22 29 0d 0a 20 20 20 20 20 20 20 20 23 20 2e 2e bj.has_key?("key")..........#...
3da00 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 64 62 6f 62 6a 2e 64 65 6c 65 74 65 28 22 6b 65 .......end......dbobj.delete("ke
3da20 79 32 22 29 0d 0a 7d 0d 0a 23 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 6f 6e 6c 79 y2")..}..#.database.is.open.only
3da40 20 69 6e 73 69 64 65 20 74 68 65 20 62 6c 6f 63 6b 2e 0d 0a 0d 0a 23 20 49 74 20 69 73 20 61 6c .inside.the.block.....#.It.is.al
3da60 73 6f 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 75 73 65 20 61 20 6f 70 65 6e 20 2e 2e 20 63 6c 6f so.possible.to.use.a.open....clo
3da80 73 65 20 70 61 69 72 3a 0d 0a 64 62 6f 62 6a 20 3d 20 53 44 42 4d 2e 6f 70 65 6e 28 22 66 69 6c se.pair:..dbobj.=.SDBM.open("fil
3daa0 65 6e 61 6d 65 22 2c 20 30 36 36 36 29 0d 0a 23 2e 2e 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 ename",.0666)..#...do.something.
3dac0 77 69 74 68 20 64 62 6f 62 6a 0d 0a 64 62 6f 62 6a 2e 63 6c 6f 73 65 0d 0a 0d 0a 23 21 2f 75 73 with.dbobj..dbobj.close....#!/us
3dae0 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 75 73 65 72 73 74 61 74 73 20 2d 20 67 65 6e r/bin/ruby.-w..#.userstats.-.gen
3db00 65 72 61 74 65 20 73 74 61 74 69 73 74 69 63 73 20 6f 6e 20 77 68 6f 20 69 73 20 6c 6f 67 67 65 erate.statistics.on.who.is.logge
3db20 64 20 69 6e 0d 0a 23 20 63 61 6c 6c 20 77 69 74 68 20 75 73 65 72 6e 61 6d 65 73 20 61 73 20 61 d.in..#.call.with.usernames.as.a
3db40 72 67 75 6d 65 6e 74 20 74 6f 20 64 69 73 70 6c 61 79 20 74 68 65 20 74 6f 74 61 6c 73 0d 0a 23 rgument.to.display.the.totals..#
3db60 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e 20 75 73 65 72 6e 61 6d 65 73 2c 20 63 61 6c 6c 20 77 .for.the.given.usernames,.call.w
3db80 69 74 68 20 22 41 4c 4c 22 20 74 6f 20 64 69 73 70 6c 61 79 20 61 6c 6c 20 75 73 65 72 73 0d 0a ith."ALL".to.display.all.users..
3dba0 0d 0a 72 65 71 75 69 72 65 20 22 73 64 62 6d 22 0d 0a 66 69 6c 65 6e 61 6d 65 20 3d 20 27 2f 74 ..require."sdbm"..filename.=.'/t
3dbc0 6d 70 2f 75 73 65 72 73 74 61 74 73 2e 64 62 27 0d 0a 53 44 42 4d 2e 6f 70 65 6e 28 66 69 6c 65 mp/userstats.db'..SDBM.open(file
3dbe0 6e 61 6d 65 2c 20 30 36 36 36 29 20 7b 20 7c 64 62 6f 62 6a 7c 0d 0a 20 20 20 20 69 66 20 41 52 name,.0666).{.|dbobj|......if.AR
3dc00 47 56 2e 6c 65 6e 67 74 68 20 3e 20 30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 41 52 47 56 5b 30 GV.length.>.0..........if.ARGV[0
3dc20 5d 20 3d 3d 20 22 41 4c 4c 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 41 52 47 56 20 69 ].==."ALL"..............#.ARGV.i
3dc40 73 20 63 6f 6e 73 74 61 6e 74 2c 20 73 6f 20 77 65 20 6e 65 65 64 20 74 68 65 20 76 61 72 69 61 s.constant,.so.we.need.the.varia
3dc60 62 6c 65 20 75 73 65 72 6c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6c 69 ble.userlist..............userli
3dc80 73 74 20 3d 20 64 62 6f 62 6a 2e 6b 65 79 73 28 29 2e 73 6f 72 74 28 29 0d 0a 20 20 20 20 20 20 st.=.dbobj.keys().sort()........
3dca0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6c 69 73 74 20 3d 20 41 ..else..............userlist.=.A
3dcc0 52 47 56 0d 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 75 73 65 72 6c 69 RGV..........end..........userli
3dce0 73 74 2e 65 61 63 68 20 7b 20 7c 75 73 65 72 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 st.each.{.|user|..............pr
3dd00 69 6e 74 20 22 23 7b 75 73 65 72 7d 5c 74 23 7b 64 62 6f 62 6a 5b 75 73 65 72 5d 7d 5c 6e 22 0d int."#{user}\t#{dbobj[user]}\n".
3dd20 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 77 68 .........}......else..........wh
3dd40 6f 20 3d 20 60 77 68 6f 60 0d 0a 20 20 20 20 20 20 20 20 77 68 6f 2e 73 70 6c 69 74 28 22 5c 6e o.=.`who`..........who.split("\n
3dd60 22 29 2e 65 61 63 68 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 64 ").each.{.|line|..............md
3dd80 20 3d 20 2f 5e 28 5c 53 2b 29 2f 2e 6d 61 74 63 68 28 6c 69 6e 65 29 0d 0a 20 20 20 20 20 20 20 .=./^(\S+)/.match(line).........
3dda0 20 20 20 20 20 72 61 69 73 65 20 22 42 61 64 20 6c 69 6e 65 20 66 72 6f 6d 20 77 68 6f 3a 20 23 .....raise."Bad.line.from.who:.#
3ddc0 7b 6c 69 6e 65 7d 22 20 75 6e 6c 65 73 73 20 6d 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {line}".unless.md..............#
3dde0 20 73 64 62 6d 20 73 74 6f 72 65 73 20 6f 6e 6c 79 20 73 74 72 69 6e 67 73 2c 20 73 6f 20 22 2b .sdbm.stores.only.strings,.so."+
3de00 3d 22 20 64 6f 65 73 6e 27 74 20 77 6f 72 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 =".doesn't.work,..............#.
3de20 77 65 20 6e 65 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 6d 20 65 78 70 69 63 69 74 6c we.need.to.convert.them.expicitl
3de40 79 20 62 61 63 6b 20 74 6f 20 69 6e 74 65 67 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y.back.to.integer...............
3de60 69 66 20 64 62 6f 62 6a 2e 68 61 73 5f 6b 65 79 3f 28 6d 64 5b 30 5d 29 0d 0a 20 20 20 20 20 20 if.dbobj.has_key?(md[0])........
3de80 20 20 20 20 20 20 20 20 20 20 64 62 6f 62 6a 5b 6d 64 5b 30 5d 5d 20 3d 20 64 62 6f 62 6a 5b 6d ..........dbobj[md[0]].=.dbobj[m
3dea0 64 5b 30 5d 5d 2e 74 6f 5f 69 20 2b 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 d[0]].to_i.+.1..............else
3dec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 6f 62 6a 5b 6d 64 5b 30 5d 5d 20 3d ..................dbobj[md[0]].=
3dee0 20 22 31 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 7d ."1"..............end..........}
3df00 0d 0a 20 20 20 20 65 6e 64 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 34 ......end..}......#.@@PLEAC@@_14
3df20 2e 32 0d 0a 23 20 75 73 69 6e 67 20 6f 70 65 6e 20 61 6e 64 20 63 6c 65 61 72 0d 0a 64 62 6f 62 .2..#.using.open.and.clear..dbob
3df40 6a 20 3d 20 53 44 42 4d 2e 6f 70 65 6e 28 22 66 69 6c 65 6e 61 6d 65 22 2c 20 30 36 36 36 29 0d j.=.SDBM.open("filename",.0666).
3df60 0a 64 62 6f 62 6a 2e 63 6c 65 61 72 28 29 0d 0a 64 62 6f 62 6a 2e 63 6c 6f 73 65 28 29 0d 0a 23 .dbobj.clear()..dbobj.close()..#
3df80 20 64 65 6c 65 74 69 6e 67 20 66 69 6c 65 20 61 6e 64 20 72 65 63 72 65 61 74 69 6e 67 20 69 74 .deleting.file.and.recreating.it
3dfa0 0d 0a 23 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 73 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65 20 ..#.the.filenames.depend.on.the.
3dfc0 66 6c 61 76 6f 72 20 6f 66 20 64 62 6d 20 79 6f 75 20 75 73 65 2c 0d 0a 23 20 66 6f 72 20 65 78 flavor.of.dbm.you.use,..#.for.ex
3dfe0 61 6d 70 6c 65 20 73 64 62 6d 20 68 61 73 20 74 77 6f 20 66 69 6c 65 73 20 6e 61 6d 65 64 20 66 ample.sdbm.has.two.files.named.f
3e000 69 6c 65 6e 61 6d 65 2e 70 61 67 20 61 6e 64 20 66 69 6c 65 6e 61 6d 65 2e 64 69 72 2c 0d 0a 23 ilename.pag.and.filename.dir,..#
3e020 20 73 6f 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 6f 74 68 20 66 69 6c 65 .so.you.need.to.delete.both.file
3e040 73 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 46 69 6c 65 2e 64 65 6c 65 74 65 28 22 66 69 6c 65 6e s..begin......File.delete("filen
3e060 61 6d 65 22 29 0d 0a 20 20 20 20 23 20 72 61 69 73 65 73 20 45 78 63 65 70 74 69 6f 6e 20 69 66 ame")......#.raises.Exception.if
3e080 20 6e 6f 74 20 65 78 69 73 74 0d 0a 20 20 20 20 64 62 6f 62 6a 20 3d 20 53 44 42 4d 2e 6f 70 65 .not.exist......dbobj.=.SDBM.ope
3e0a0 6e 28 22 66 69 6c 65 6e 61 6d 65 22 2c 20 30 36 36 36 29 0d 0a 72 65 73 63 75 65 0d 0a 20 20 20 n("filename",.0666)..rescue.....
3e0c0 20 23 20 61 64 64 20 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 68 65 72 65 0d 0a 65 6e 64 0d .#.add.error.handling.here..end.
3e0e0 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 34 2e 33 0d 0a 23 20 73 64 62 6d 32 67 64 .....#.@@PLEAC@@_14.3..#.sdbm2gd
3e100 62 6d 3a 20 63 6f 6e 76 65 72 74 73 20 73 64 62 6d 20 64 61 74 61 62 61 73 65 20 74 6f 20 61 20 bm:.converts.sdbm.database.to.a.
3e120 67 64 62 6d 20 64 61 74 61 62 61 73 65 0d 0a 72 65 71 75 69 72 65 20 22 73 64 62 6d 22 0d 0a 72 gdbm.database..require."sdbm"..r
3e140 65 71 75 69 72 65 20 22 67 64 62 6d 22 0d 0a 0d 0a 75 6e 6c 65 73 73 20 41 52 47 56 2e 6c 65 6e equire."gdbm"....unless.ARGV.len
3e160 67 74 68 20 3d 3d 20 32 0d 0a 20 20 20 20 66 61 69 6c 20 22 75 73 61 67 65 3a 20 73 64 62 6d 32 gth.==.2......fail."usage:.sdbm2
3e180 67 64 62 6d 20 69 6e 66 69 6c 65 20 6f 75 74 66 69 6c 65 22 0d 0a 65 6e 64 0d 0a 69 6e 66 69 6c gdbm.infile.outfile"..end..infil
3e1a0 65 20 3d 20 41 52 47 56 5b 30 5d 0d 0a 6f 75 74 66 69 6c 65 20 3d 20 41 52 47 56 5b 31 5d 0d 0a e.=.ARGV[0]..outfile.=.ARGV[1]..
3e1c0 0d 0a 73 64 62 20 3d 20 53 44 42 4d 2e 6f 70 65 6e 28 69 6e 66 69 6c 65 29 0d 0a 67 64 62 20 3d ..sdb.=.SDBM.open(infile)..gdb.=
3e1e0 20 47 44 42 4d 2e 6f 70 65 6e 28 6f 75 74 66 69 6c 65 2c 20 30 36 36 36 29 0d 0a 73 64 62 2e 65 .GDBM.open(outfile,.0666)..sdb.e
3e200 61 63 68 20 7b 20 7c 6b 65 79 2c 20 76 61 6c 7c 0d 0a 20 20 20 20 67 64 62 5b 6b 65 79 5d 20 3d ach.{.|key,.val|......gdb[key].=
3e220 20 76 61 6c 0d 0a 7d 0d 0a 67 64 62 2e 63 6c 6f 73 65 0d 0a 73 64 62 2e 63 6c 6f 73 65 0d 0a 0d .val..}..gdb.close..sdb.close...
3e240 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 34 2e 34 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f ...#.@@PLEAC@@_14.4..#!/usr/bin/
3e260 72 75 62 79 20 2d 77 0d 0a 23 20 64 62 6d 6d 65 72 67 65 3a 20 6d 65 72 67 65 73 20 74 77 6f 20 ruby.-w..#.dbmmerge:.merges.two.
3e280 64 62 6d 20 64 61 74 61 62 61 73 65 73 0d 0a 72 65 71 75 69 72 65 20 22 73 64 62 6d 22 0d 0a 0d dbm.databases..require."sdbm"...
3e2a0 0a 75 6e 6c 65 73 73 20 41 52 47 56 2e 6c 65 6e 67 74 68 20 3d 3d 20 33 0d 0a 20 20 20 20 66 61 .unless.ARGV.length.==.3......fa
3e2c0 69 6c 20 22 75 73 61 67 65 3a 20 64 62 6d 6d 65 72 67 65 20 69 6e 64 62 31 20 69 6e 64 62 32 20 il."usage:.dbmmerge.indb1.indb2.
3e2e0 6f 75 74 64 62 22 0d 0a 65 6e 64 0d 0a 69 6e 66 69 6c 65 31 20 3d 20 41 52 47 56 5b 30 5d 0d 0a outdb"..end..infile1.=.ARGV[0]..
3e300 69 6e 66 69 6c 65 32 20 3d 20 41 52 47 56 5b 30 5d 0d 0a 6f 75 74 66 69 6c 65 20 3d 20 41 52 47 infile2.=.ARGV[0]..outfile.=.ARG
3e320 56 5b 32 5d 0d 0a 0d 0a 69 6e 31 20 3d 20 53 44 42 4d 2e 6f 70 65 6e 28 69 6e 66 69 6c 65 31 2c V[2]....in1.=.SDBM.open(infile1,
3e340 20 6e 69 6c 29 0d 0a 69 6e 32 20 3d 20 53 44 42 4d 2e 6f 70 65 6e 28 69 6e 66 69 6c 65 32 2c 20 .nil)..in2.=.SDBM.open(infile2,.
3e360 6e 69 6c 29 0d 0a 6f 75 74 64 62 20 3d 20 53 44 42 4d 2e 6f 70 65 6e 28 6f 75 74 66 69 6c 65 2c nil)..outdb.=.SDBM.open(outfile,
3e380 20 30 36 36 36 29 0d 0a 0d 0a 5b 69 6e 31 2c 20 69 6e 32 5d 2e 65 61 63 68 20 7b 20 7c 69 6e 64 .0666)....[in1,.in2].each.{.|ind
3e3a0 62 7c 0d 0a 20 20 20 20 69 6e 64 62 2e 65 61 63 68 20 7b 20 7c 6b 65 79 2c 20 76 61 6c 7c 0d 0a b|......indb.each.{.|key,.val|..
3e3c0 20 20 20 20 20 20 20 20 69 66 20 6f 75 74 64 62 2e 68 61 73 5f 6b 65 79 3f 28 6b 65 79 29 0d 0a ........if.outdb.has_key?(key)..
3e3e0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 64 65 63 69 64 65 20 77 68 69 63 68 20 76 61 6c 75 65 ............#.decide.which.value
3e400 20 74 6f 20 73 65 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 65 74 20 6f 75 74 64 .to.set...............#.set.outd
3e420 62 5b 6b 65 79 5d 20 69 66 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 b[key].if.necessary..........els
3e440 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 64 62 5b 6b 65 79 5d 20 3d 20 76 61 6c 0d e..............outdb[key].=.val.
3e460 0a 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 7d 0d 0a 7d 0d 0a 69 6e 31 2e 63 6c 6f 73 .........end......}..}..in1.clos
3e480 65 0d 0a 69 6e 32 2e 63 6c 6f 73 65 0d 0a 6f 75 74 64 62 2e 63 6c 6f 73 65 0d 0a 0d 0a 0d 0a 23 e..in2.close..outdb.close......#
3e4a0 20 40 40 50 4c 45 41 43 40 40 5f 31 34 2e 37 0d 0a 23 20 77 65 20 77 72 69 74 65 20 61 20 74 69 .@@PLEAC@@_14.7..#.we.write.a.ti
3e4c0 65 20 6d 65 74 68 6f 64 20 74 68 61 74 20 65 78 74 65 6e 64 73 20 74 68 65 20 41 72 72 61 79 20 e.method.that.extends.the.Array.
3e4e0 63 6c 61 73 73 2e 0d 0a 23 20 49 74 20 72 65 61 64 73 20 74 68 65 20 66 69 6c 65 20 69 6e 74 6f class...#.It.reads.the.file.into
3e500 20 74 68 65 20 6d 65 6d 6f 72 79 2c 20 65 78 65 63 75 74 65 73 20 74 68 65 20 63 6f 64 65 20 62 .the.memory,.executes.the.code.b
3e520 6c 6f 63 6b 0d 0a 23 20 69 6e 20 77 68 69 63 68 20 79 6f 75 20 63 61 6e 20 6d 61 6e 69 70 75 6c lock..#.in.which.you.can.manipul
3e540 61 74 65 20 74 68 65 20 61 72 72 61 79 20 61 73 20 6e 65 65 64 65 64 2c 20 61 6e 64 20 77 72 69 ate.the.array.as.needed,.and.wri
3e560 74 65 73 0d 0a 23 20 74 68 65 20 61 72 72 61 79 20 62 61 63 6b 20 74 6f 20 74 68 65 20 66 69 6c tes..#.the.array.back.to.the.fil
3e580 65 20 61 66 74 65 72 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 6c 6f 63 6b 20 65 78 65 e.after.the.end.of.the.block.exe
3e5a0 63 75 74 69 6f 6e 0d 0a 63 6c 61 73 73 20 41 72 72 61 79 0d 0a 20 20 20 20 64 65 66 20 74 69 65 cution..class.Array......def.tie
3e5c0 28 66 69 6c 65 6e 61 6d 65 2c 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 20 20 20 20 46 69 6c 65 2e (filename,.flags)..........File.
3e5e0 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 20 66 6c 61 67 73 29 20 7b 20 7c 66 7c 0d 0a 20 20 20 open(filename,.flags).{.|f|.....
3e600 20 20 20 20 20 20 20 20 20 66 2e 65 61 63 68 5f 6c 69 6e 65 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 .........f.each_line.{.|line|...
3e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 70 75 73 68 28 6c 69 6e 65 2e 63 68 ...............self.push(line.ch
3e640 6f 6d 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 omp)..............}.............
3e660 20 79 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 2e 72 65 77 69 6e 64 0d 0a 20 20 .yield..............f.rewind....
3e680 20 20 20 20 20 20 20 20 20 20 65 61 63 68 20 7b 20 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 20 20 20 ..........each.{.|line|.........
3e6a0 20 20 20 20 20 20 20 20 20 69 66 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........if.line................
3e6c0 20 20 20 20 20 20 66 2e 70 75 74 73 28 6c 69 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ......f.puts(line)..............
3e6e0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 2e ....else......................f.
3e700 70 75 74 73 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 puts.""..................end....
3e720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 65 6e 64 0d ..........}..........}......end.
3e740 0a 65 6e 64 0d 0a 0d 0a 61 72 72 61 79 20 3d 20 41 72 72 61 79 2e 6e 65 77 0d 0a 61 72 72 61 79 .end....array.=.Array.new..array
3e760 2e 74 69 65 28 22 2f 74 6d 70 2f 74 65 78 74 66 69 6c 65 2e 74 78 74 22 2c 20 46 69 6c 65 3a 3a .tie("/tmp/textfile.txt",.File::
3e780 52 44 57 52 7c 46 69 6c 65 3a 3a 43 52 45 41 54 29 20 7b 0d 0a 20 20 20 20 61 72 72 61 79 5b 34 RDWR|File::CREAT).{......array[4
3e7a0 5d 20 3d 20 22 61 20 6e 65 77 20 6c 69 6e 65 20 34 22 0d 0a 7d 0d 0a 0d 0a 23 20 54 68 65 20 74 ].=."a.new.line.4"..}....#.The.t
3e7c0 69 65 64 20 61 72 72 61 79 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 6c 69 6b ied.array.can.be.manipulated.lik
3e7e0 65 20 61 20 6e 6f 72 6d 61 6c 20 61 72 72 61 79 2c 0d 0a 23 20 73 6f 20 74 68 65 72 65 20 69 73 e.a.normal.array,..#.so.there.is
3e800 20 6e 6f 20 6e 65 65 64 20 66 6f 72 20 61 20 73 70 65 63 69 61 6c 20 41 50 49 2c 20 61 6e 64 20 .no.need.for.a.special.API,.and.
3e820 74 68 65 20 72 65 63 6e 6f 5f 64 65 6d 6f 20 70 72 6f 67 72 61 6d 0d 0a 23 20 74 6f 20 64 65 6d the.recno_demo.program..#.to.dem
3e840 6f 6e 73 74 72 61 74 65 20 69 73 20 41 50 49 20 69 73 20 75 73 65 6c 65 73 73 0d 0a 0d 0a 0d 0a onstrate.is.API.is.useless......
3e860 23 20 74 69 65 64 20 61 72 72 61 79 20 64 65 6d 6f 3a 20 73 68 6f 77 20 68 6f 77 20 74 6f 20 75 #.tied.array.demo:.show.how.to.u
3e880 73 65 20 61 72 72 61 79 20 77 69 74 68 20 61 20 74 69 65 64 20 66 69 6c 65 0d 0a 66 69 6c 65 6e se.array.with.a.tied.file..filen
3e8a0 61 6d 65 20 3d 20 22 64 62 5f 66 69 6c 65 2e 74 78 74 22 0d 0a 6c 69 6e 65 73 20 3d 20 41 72 72 ame.=."db_file.txt"..lines.=.Arr
3e8c0 61 79 2e 6e 65 77 0d 0a 46 69 6c 65 2e 75 6e 6c 69 6e 6b 28 66 69 6c 65 6e 61 6d 65 29 20 69 66 ay.new..File.unlink(filename).if
3e8e0 20 46 69 6c 65 2e 65 78 69 73 74 73 3f 28 66 69 6c 65 6e 61 6d 65 29 0d 0a 6c 69 6e 65 73 2e 74 .File.exists?(filename)..lines.t
3e900 69 65 28 66 69 6c 65 6e 61 6d 65 2c 20 46 69 6c 65 3a 3a 52 44 57 52 20 7c 20 46 69 6c 65 3a 3a ie(filename,.File::RDWR.|.File::
3e920 43 52 45 41 54 29 20 7b 0d 0a 20 20 20 20 23 20 66 69 72 73 74 20 63 72 65 61 74 65 20 61 20 74 CREAT).{......#.first.create.a.t
3e940 65 78 74 66 69 6c 65 20 74 6f 20 70 6c 61 79 20 77 69 74 68 0d 0a 20 20 20 20 6c 69 6e 65 73 5b extfile.to.play.with......lines[
3e960 30 5d 20 3d 20 22 7a 65 72 6f 22 0d 0a 20 20 20 20 6c 69 6e 65 73 5b 31 5d 20 3d 20 22 6f 6e 65 0].=."zero"......lines[1].=."one
3e980 22 0d 0a 20 20 20 20 6c 69 6e 65 73 5b 32 5d 20 3d 20 22 74 77 6f 22 0d 0a 20 20 20 20 6c 69 6e "......lines[2].=."two"......lin
3e9a0 65 73 5b 33 5d 20 3d 20 22 74 68 72 65 65 22 0d 0a 20 20 20 20 6c 69 6e 65 73 5b 34 5d 20 3d 20 es[3].=."three"......lines[4].=.
3e9c0 22 66 6f 75 72 22 0d 0a 0d 0a 20 20 20 20 23 20 70 72 69 6e 74 20 74 68 65 20 72 65 63 6f 72 64 "four"........#.print.the.record
3e9e0 73 20 69 6e 20 6f 72 64 65 72 2e 0d 0a 20 20 20 20 23 20 4f 70 70 6f 73 65 64 20 74 6f 20 70 65 s.in.order.......#.Opposed.to.pe
3ea00 72 6c 2c 20 74 68 65 20 74 69 65 64 20 61 72 72 61 79 20 62 65 68 61 76 65 73 20 65 78 61 63 74 rl,.the.tied.array.behaves.exact
3ea20 6c 79 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 61 72 72 61 79 0d 0a 20 20 20 20 70 75 74 73 20 22 ly.as.a.normal.array......puts."
3ea40 5c 6e 4f 72 69 67 69 6e 61 6c 22 0d 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 30 2e 2e 28 6c 69 \nOriginal"......for.i.in.0..(li
3ea60 6e 65 73 2e 6c 65 6e 67 74 68 2d 31 29 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22 23 7b 69 nes.length-1)..........puts."#{i
3ea80 7d 3a 20 23 7b 6c 69 6e 65 73 5b 69 5d 7d 22 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 }:.#{lines[i]}"......end........
3eaa0 23 75 73 65 20 70 75 73 68 20 61 6e 64 20 70 6f 70 0d 0a 20 20 20 20 61 20 3d 20 6c 69 6e 65 73 #use.push.and.pop......a.=.lines
3eac0 2e 70 6f 70 0d 0a 20 20 20 20 6c 69 6e 65 73 2e 70 75 73 68 28 22 6c 61 73 74 22 29 0d 0a 20 20 .pop......lines.push("last")....
3eae0 20 20 70 75 74 73 28 22 54 68 65 20 6c 61 73 74 20 6c 69 6e 65 20 77 61 73 20 5b 23 7b 61 7d 5d ..puts("The.last.line.was.[#{a}]
3eb00 22 29 0d 0a 0d 0a 20 20 20 20 23 75 73 65 20 73 68 69 66 74 20 61 6e 64 20 75 6e 73 68 69 66 74 ")........#use.shift.and.unshift
3eb20 0d 0a 20 20 20 20 61 20 3d 20 6c 69 6e 65 73 2e 73 68 69 66 74 0d 0a 20 20 20 20 6c 69 6e 65 73 ......a.=.lines.shift......lines
3eb40 2e 75 6e 73 68 69 66 74 28 22 66 69 72 73 74 22 29 0d 0a 20 20 20 20 70 75 74 73 28 22 54 68 65 .unshift("first")......puts("The
3eb60 20 66 69 72 73 74 20 6c 69 6e 65 20 77 61 73 20 5b 23 7b 61 7d 5d 22 29 0d 0a 0d 0a 20 20 20 20 .first.line.was.[#{a}]")........
3eb80 23 20 61 64 64 20 72 65 63 6f 72 64 20 61 66 74 65 72 20 72 65 63 6f 72 64 20 32 0d 0a 20 20 20 #.add.record.after.record.2.....
3eba0 20 69 20 3d 20 32 0d 0a 20 20 20 20 6c 69 6e 65 73 2e 69 6e 73 65 72 74 28 69 20 2b 20 31 2c 20 .i.=.2......lines.insert(i.+.1,.
3ebc0 22 4e 65 77 62 69 65 22 29 0d 0a 0d 0a 20 20 20 20 23 20 61 64 64 20 72 65 63 6f 72 64 20 62 65 "Newbie")........#.add.record.be
3ebe0 66 6f 72 65 20 72 65 63 6f 72 64 20 6f 6e 65 0d 0a 20 20 20 20 69 20 3d 20 31 0d 0a 20 20 20 20 fore.record.one......i.=.1......
3ec00 6c 69 6e 65 73 2e 69 6e 73 65 72 74 28 69 2c 20 22 4e 65 77 20 4f 6e 65 22 29 0d 0a 0d 0a 20 20 lines.insert(i,."New.One")......
3ec20 20 20 23 20 64 65 6c 65 74 65 20 72 65 63 6f 72 64 20 33 0d 0a 20 20 20 20 6c 69 6e 65 73 2e 64 ..#.delete.record.3......lines.d
3ec40 65 6c 65 74 65 5f 61 74 28 33 29 0d 0a 0d 0a 20 20 20 20 23 6e 6f 77 20 70 72 69 6e 74 20 74 68 elete_at(3)........#now.print.th
3ec60 65 20 72 65 63 6f 72 64 73 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 0d 0a 20 20 20 20 e.records.in.reverse.order......
3ec80 70 75 74 73 20 22 5c 6e 52 65 76 65 72 73 65 22 0d 0a 20 20 20 20 28 6c 69 6e 65 73 2e 6c 65 6e puts."\nReverse"......(lines.len
3eca0 67 74 68 20 2d 20 31 29 2e 64 6f 77 6e 74 6f 28 30 29 7b 20 7c 69 7c 0d 0a 20 20 20 20 20 20 20 gth.-.1).downto(0){.|i|.........
3ecc0 20 70 75 74 73 20 22 23 7b 69 7d 3a 20 23 7b 6c 69 6e 65 73 5b 69 5d 7d 22 0d 0a 20 20 20 20 7d .puts."#{i}:.#{lines[i]}"......}
3ece0 0d 0a 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 34 2e 38 0d 0a 23 20 65 ....}......#.@@PLEAC@@_14.8..#.e
3ed00 78 61 6d 70 6c 65 20 74 6f 20 73 74 6f 72 65 20 63 6f 6d 70 6c 65 78 20 64 61 74 61 20 69 6e 20 xample.to.store.complex.data.in.
3ed20 61 20 64 61 74 61 62 61 73 65 0d 0a 23 20 75 73 65 73 20 6d 61 72 73 68 61 6c 6c 20 66 72 6f 6d a.database..#.uses.marshall.from
3ed40 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 0d 0a 72 65 71 75 69 72 65 20 22 .the.standard.library..require."
3ed60 73 64 62 6d 22 0d 0a 64 62 20 3d 20 53 44 42 4d 2e 6f 70 65 6e 28 22 70 6c 65 61 63 31 34 2d 38 sdbm"..db.=.SDBM.open("pleac14-8
3ed80 2d 64 61 74 61 62 61 73 65 22 2c 20 30 36 36 36 29 0d 0a 0d 0a 23 20 63 6f 6e 76 65 72 74 20 74 -database",.0666)....#.convert.t
3eda0 68 65 20 4f 62 6a 65 63 74 73 20 69 6e 74 6f 20 73 74 72 69 6e 67 73 20 61 6e 64 20 62 61 63 6b he.Objects.into.strings.and.back
3edc0 20 62 79 20 75 73 69 6e 67 20 74 68 65 20 4d 61 72 73 68 61 6c 20 6d 6f 64 75 6c 65 2e 0d 0a 23 .by.using.the.Marshal.module...#
3ede0 20 4d 6f 73 74 20 6e 6f 72 6d 61 6c 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 .Most.normal.objects.can.be.conv
3ee00 65 72 74 65 64 20 6f 75 74 20 6f 66 20 74 68 65 20 62 6f 78 2c 0d 0a 23 20 62 75 74 20 6e 6f 74 erted.out.of.the.box,..#.but.not
3ee20 20 73 70 65 63 69 61 6c 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 70 72 6f 63 65 64 75 72 65 20 6f .special.things.like.procedure.o
3ee40 62 6a 65 63 74 73 2c 0d 0a 23 20 49 4f 20 69 6e 73 74 61 6e 63 65 20 76 61 72 69 61 62 6c 65 73 bjects,..#.IO.instance.variables
3ee60 2c 20 73 69 6e 67 6c 65 74 6f 6e 20 6f 62 6a 65 63 74 73 0d 0a 0d 0a 64 62 5b 22 54 6f 6d 20 43 ,.singleton.objects....db["Tom.C
3ee80 68 72 69 73 74 69 61 6e 73 65 6e 22 5d 20 3d 20 4d 61 72 73 68 61 6c 2e 64 75 6d 70 28 5b 22 62 hristiansen"].=.Marshal.dump(["b
3eea0 6f 6f 6b 20 61 75 74 68 6f 72 22 2c 20 20 22 74 63 68 72 69 73 74 40 70 65 72 6c 2e 63 6f 6d 22 ook.author",.."tchrist@perl.com"
3eec0 5d 29 0d 0a 64 62 5b 22 54 6f 6d 20 42 6f 75 74 65 6c 6c 22 5d 20 3d 20 4d 61 72 73 68 61 6c 2e ])..db["Tom.Boutell"].=.Marshal.
3eee0 64 75 6d 70 28 5b 22 73 68 61 72 65 77 61 72 65 20 61 75 74 68 6f 72 22 2c 0d 0a 22 62 6f 75 74 dump(["shareware.author",.."bout
3ef00 65 6c 6c 40 62 6f 75 74 65 6c 6c 2e 63 6f 6d 22 5d 29 0d 0a 0d 0a 6e 61 6d 65 31 20 3d 20 22 54 ell@boutell.com"])....name1.=."T
3ef20 6f 6d 20 43 68 72 69 73 74 69 61 6e 73 65 6e 22 0d 0a 6e 61 6d 65 32 20 3d 20 22 54 6f 6d 20 42 om.Christiansen"..name2.=."Tom.B
3ef40 6f 75 74 65 6c 6c 22 0d 0a 0d 0a 74 6f 6d 31 20 3d 20 4d 61 72 73 68 61 6c 2e 6c 6f 61 64 28 64 outell"....tom1.=.Marshal.load(d
3ef60 62 5b 6e 61 6d 65 31 5d 29 0d 0a 74 6f 6d 32 20 3d 20 4d 61 72 73 68 61 6c 2e 6c 6f 61 64 28 64 b[name1])..tom2.=.Marshal.load(d
3ef80 62 5b 6e 61 6d 65 32 5d 29 0d 0a 0d 0a 70 75 74 73 20 22 54 77 6f 20 54 6f 6d 69 6e 67 3a 20 23 b[name2])....puts."Two.Toming:.#
3efa0 7b 74 6f 6d 31 7d 20 23 7b 74 6f 6d 32 7d 22 0d 0a 0d 0a 69 66 20 74 6f 6d 31 5b 30 5d 20 3d 3d {tom1}.#{tom2}"....if.tom1[0].==
3efc0 20 74 6f 6d 32 5b 30 5d 20 26 26 20 74 6f 6d 31 5b 31 5d 20 3d 3d 20 74 6f 6d 32 5b 31 5d 0d 0a .tom2[0].&&.tom1[1].==.tom2[1]..
3efe0 20 20 20 70 75 74 73 20 22 59 6f 75 27 72 65 20 68 61 76 69 6e 67 20 72 75 6e 74 69 6d 65 20 66 ...puts."You're.having.runtime.f
3f000 75 6e 20 77 69 74 68 20 6f 6e 65 20 54 6f 6d 20 6d 61 64 65 20 74 77 6f 2e 22 0d 0a 65 6c 73 65 un.with.one.Tom.made.two."..else
3f020 0d 0a 20 20 20 70 75 74 73 20 22 4e 6f 20 74 77 6f 20 54 6f 6d 73 20 61 72 65 20 65 76 65 72 20 .....puts."No.two.Toms.are.ever.
3f040 61 6c 69 6b 65 22 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 6f 20 63 68 61 6e 67 65 20 70 61 72 74 73 alike"..end....#.To.change.parts
3f060 20 6f 66 20 61 6e 20 65 6e 74 72 79 2c 20 67 65 74 20 74 68 65 20 77 68 6f 6c 65 20 65 6e 74 72 .of.an.entry,.get.the.whole.entr
3f080 79 2c 20 63 68 61 6e 67 65 20 74 68 65 20 70 61 72 74 73 2c 0d 0a 23 20 61 6e 64 20 73 61 76 65 y,.change.the.parts,..#.and.save
3f0a0 20 74 68 65 20 77 68 6f 6c 65 20 65 6e 74 72 79 20 62 61 63 6b 0d 0a 65 6e 74 72 79 20 3d 20 4d .the.whole.entry.back..entry.=.M
3f0c0 61 72 73 68 61 6c 2e 6c 6f 61 64 28 64 62 5b 22 54 6f 6d 20 42 6f 75 74 65 6c 6c 22 5d 29 0d 0a arshal.load(db["Tom.Boutell"])..
3f0e0 65 6e 74 72 79 5b 30 5d 20 3d 20 22 50 6f 65 74 20 50 72 6f 67 72 61 6d 6d 65 72 22 0d 0a 64 62 entry[0].=."Poet.Programmer"..db
3f100 5b 22 54 6f 6d 20 42 6f 75 74 65 6c 6c 22 5d 20 3d 20 4d 61 72 73 68 61 6c 2e 64 75 6d 70 28 65 ["Tom.Boutell"].=.Marshal.dump(e
3f120 6e 74 72 79 29 0d 0a 64 62 2e 63 6c 6f 73 65 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 ntry)..db.close......#.@@PLEAC@@
3f140 5f 31 34 2e 39 0d 0a 23 20 65 78 61 6d 70 6c 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 20 70 65 _14.9..#.example.to.make.data.pe
3f160 72 73 69 73 74 65 6e 74 0d 0a 23 20 75 73 65 73 20 4d 61 72 73 68 61 6c 20 66 72 6f 6d 20 74 68 rsistent..#.uses.Marshal.from.th
3f180 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 0d 0a 23 20 53 74 6f 72 65 73 20 74 68 65 20 64 61 74 e.standard.lib..#.Stores.the.dat
3f1a0 61 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 66 69 6c 65 2c 0d 0a 23 20 73 65 65 20 31 34 2e 38 20 a.in.a.simple.file,..#.see.14.8.
3f1c0 6f 6e 20 68 6f 77 20 74 6f 20 73 74 6f 72 65 20 69 74 20 69 6e 20 61 20 64 62 6d 20 66 69 6c 65 on.how.to.store.it.in.a.dbm.file
3f1e0 0d 0a 0d 0a 23 20 54 68 65 20 42 45 47 49 4e 20 62 6c 6f 63 6b 20 69 73 20 65 78 65 63 75 74 65 ....#.The.BEGIN.block.is.execute
3f200 64 20 62 65 66 6f 72 65 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 73 63 72 69 70 74 0d d.before.the.rest.of.the.script.
3f220 0a 23 20 77 65 20 75 73 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 73 20 68 65 72 65 20 .#.we.use.global.variables.here.
3f240 62 65 63 61 75 73 65 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 73 0d 0a 23 20 77 69 6c 6c 20 because.local.variables..#.will.
3f260 67 6f 20 6f 75 74 20 6f 66 20 73 63 6f 70 65 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 61 63 63 65 go.out.of.scope.and.are.not.acce
3f280 73 73 69 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e 20 73 63 72 69 70 74 0d 0a 0d 0a 42 ssible.from.the.main.script....B
3f2a0 45 47 49 4e 20 7b 0d 0a 20 20 20 24 70 65 72 73 69 73 74 65 6e 74 5f 73 74 6f 72 65 20 3d 20 22 EGIN.{.....$persistent_store.=."
3f2c0 70 65 72 73 69 74 65 6e 63 65 2e 64 61 74 22 0d 0a 20 20 20 62 65 67 69 6e 0d 0a 20 20 20 20 20 persitence.dat".....begin.......
3f2e0 46 69 6c 65 2e 6f 70 65 6e 28 24 70 65 72 73 69 73 74 65 6e 74 5f 73 74 6f 72 65 29 20 64 6f 20 File.open($persistent_store).do.
3f300 7c 66 7c 0d 0a 20 20 20 20 20 20 20 24 73 74 72 69 6e 67 76 61 72 69 61 62 6c 65 31 20 3d 20 4d |f|.........$stringvariable1.=.M
3f320 61 72 73 68 61 6c 2e 6c 6f 61 64 28 66 29 0d 0a 20 20 20 20 20 20 20 24 61 72 72 61 79 76 61 72 arshal.load(f).........$arrayvar
3f340 69 61 62 6c 65 32 20 3d 20 4d 61 72 73 68 61 6c 2e 6c 6f 61 64 28 66 29 0d 0a 20 20 20 20 20 65 iable2.=.Marshal.load(f).......e
3f360 6e 64 0d 0a 20 20 20 72 65 73 63 75 65 0d 0a 20 20 20 20 20 70 75 74 73 20 22 43 61 6e 20 6e 6f nd.....rescue.......puts."Can.no
3f380 74 20 6f 70 65 6e 20 23 7b 24 70 65 72 73 69 73 74 65 6e 74 5f 73 74 6f 72 65 7d 22 0d 0a 20 20 t.open.#{$persistent_store}"....
3f3a0 20 20 20 23 20 49 6e 69 74 69 61 6c 69 73 61 74 69 6f 6e 20 69 66 20 74 68 69 73 20 73 63 72 69 ...#.Initialisation.if.this.scri
3f3c0 70 74 20 72 75 6e 73 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 0d 0a 20 20 20 20 20 24 73 74 pt.runs.the.first.time.......$st
3f3e0 72 69 6e 67 76 61 72 69 61 62 6c 65 31 20 3d 20 22 22 0d 0a 20 20 20 20 20 24 61 72 72 61 79 76 ringvariable1.=."".......$arrayv
3f400 61 72 69 61 62 6c 65 32 20 3d 20 5b 5d 0d 0a 20 20 20 65 6e 64 0d 0a 7d 0d 0a 0d 0a 45 4e 44 20 ariable2.=.[].....end..}....END.
3f420 7b 0d 0a 20 20 20 46 69 6c 65 2e 6f 70 65 6e 28 24 70 65 72 73 69 73 74 65 6e 74 5f 73 74 6f 72 {.....File.open($persistent_stor
3f440 65 2c 20 22 77 2b 22 29 20 64 6f 20 7c 66 7c 0d 0a 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 64 75 e,."w+").do.|f|.......Marshal.du
3f460 6d 70 28 24 73 74 72 69 6e 67 76 61 72 69 61 62 6c 65 31 2c 20 66 29 0d 0a 20 20 20 20 20 4d 61 mp($stringvariable1,.f).......Ma
3f480 72 73 68 61 6c 2e 64 75 6d 70 28 24 61 72 72 61 79 76 61 72 69 61 62 6c 65 32 2c 20 66 29 0d 0a rshal.dump($arrayvariable2,.f)..
3f4a0 20 20 20 65 6e 64 0d 0a 7d 0d 0a 0d 0a 23 20 73 69 6d 70 6c 65 20 74 65 73 74 20 70 72 6f 67 72 ...end..}....#.simple.test.progr
3f4c0 61 6d 0d 0a 70 75 74 73 20 24 73 74 72 69 6e 67 76 61 72 69 61 62 6c 65 31 0d 0a 70 75 74 73 20 am..puts.$stringvariable1..puts.
3f4e0 24 61 72 72 61 79 76 61 72 69 61 62 6c 65 32 0d 0a 24 73 74 72 69 6e 67 76 61 72 69 61 62 6c 65 $arrayvariable2..$stringvariable
3f500 31 20 3d 20 22 48 65 6c 6c 6f 20 57 6f 72 6c 64 22 0d 0a 24 61 72 72 61 79 76 61 72 69 61 62 6c 1.=."Hello.World"..$arrayvariabl
3f520 65 32 2e 70 75 73 68 28 35 29 0d 0a 70 75 74 73 20 24 73 74 72 69 6e 67 76 61 72 69 61 62 6c 65 e2.push(5)..puts.$stringvariable
3f540 31 0d 0a 70 75 74 73 20 24 61 72 72 61 79 76 61 72 69 61 62 6c 65 32 0d 0a 0d 0a 0d 0a 23 20 40 1..puts.$arrayvariable2......#.@
3f560 40 50 4c 45 41 43 40 40 5f 31 34 2e 31 30 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 @PLEAC@@_14.10..#!/usr/bin/ruby.
3f580 2d 77 0d 0a 23 20 52 75 62 79 20 68 61 73 20 61 20 64 62 69 20 6d 6f 64 75 6c 65 20 77 69 74 68 -w..#.Ruby.has.a.dbi.module.with
3f5a0 20 61 6e 20 61 72 63 68 69 74 65 63 74 75 72 65 20 73 69 6d 69 6c 61 72 0d 0a 23 20 74 6f 20 74 .an.architecture.similar..#.to.t
3f5c0 68 65 20 50 65 72 6c 20 64 62 69 20 6d 6f 64 75 6c 65 3a 20 74 68 65 20 64 62 69 20 6d 6f 64 75 he.Perl.dbi.module:.the.dbi.modu
3f5e0 6c 65 20 70 72 6f 76 69 64 65 73 20 61 6e 20 75 6e 69 66 69 65 64 0d 0a 23 20 69 6e 74 65 72 66 le.provides.an.unified..#.interf
3f600 61 63 65 20 61 6e 64 20 75 73 65 73 20 73 70 65 63 69 61 6c 69 7a 65 64 20 64 72 69 76 65 72 73 ace.and.uses.specialized.drivers
3f620 20 66 6f 72 20 65 61 63 68 20 64 62 6d 73 20 76 65 6e 64 6f 72 0d 0a 23 0d 0a 62 65 67 69 6e 0d .for.each.dbms.vendor..#..begin.
3f640 0a 20 20 20 20 44 42 49 2e 63 6f 6e 6e 65 63 74 28 22 44 42 49 3a 64 72 69 76 65 72 3a 64 72 69 .....DBI.connect("DBI:driver:dri
3f660 76 65 72 73 70 65 63 69 66 69 63 22 2c 20 22 75 73 65 72 6e 61 6d 65 22 2c 20 22 61 75 74 68 22 verspecific",."username",."auth"
3f680 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 7c 64 62 68 7c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 62 ).{..........|dbh|............db
3f6a0 68 2e 64 6f 28 53 51 4c 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 62 68 2e 70 72 65 70 61 72 h.do(SQL1)............dbh.prepar
3f6c0 65 28 53 51 4c 32 29 7b 20 7c 73 74 68 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 68 2e e(SQL2){.|sth|..............sth.
3f6e0 65 78 65 63 75 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 68 2e 66 65 74 63 68 20 7b execute..............sth.fetch.{
3f700 7c 72 6f 77 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 2e 2e 2e 0d 0a 20 20 |row|..................#........
3f720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 23 20 65 6e 64 20 6f 66 20 ..........}..........}.#.end.of.
3f740 62 6c 6f 63 6b 20 66 69 6e 69 73 68 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e block.finishes.the.statement.han
3f760 64 6c 65 0d 0a 20 20 20 20 7d 20 23 20 65 6e 64 20 6f 66 20 62 6c 6f 63 6b 20 63 6c 6f 73 65 73 dle......}.#.end.of.block.closes
3f780 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 72 65 73 63 75 65 .the.database.connection..rescue
3f7a0 20 44 42 49 3a 3a 44 61 74 61 62 61 73 65 45 72 72 6f 72 20 3d 3e 20 65 0d 0a 20 20 20 20 70 75 .DBI::DatabaseError.=>.e......pu
3f7c0 74 73 20 22 64 62 69 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 22 0d 0a 20 20 20 20 70 75 74 ts."dbi.error.occurred"......put
3f7e0 73 20 22 45 72 72 6f 72 20 63 6f 64 65 3a 20 23 7b 65 2e 65 72 72 7d 22 0d 0a 20 20 20 20 70 75 s."Error.code:.#{e.err}"......pu
3f800 74 73 20 22 45 72 72 6f 72 20 6d 65 73 73 61 67 65 3a 20 23 7b 65 2e 65 72 72 73 74 72 7d 22 0d ts."Error.message:.#{e.errstr}".
3f820 0a 65 6e 64 0d 0a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 64 62 .end....#!/usr/bin/ruby.-w..#.db
3f840 75 73 65 72 73 20 2d 20 65 78 61 6d 70 6c 65 20 66 6f 72 20 6d 79 73 71 6c 20 77 68 69 63 68 20 users.-.example.for.mysql.which.
3f860 63 72 65 61 74 65 73 20 61 20 74 61 62 6c 65 2c 0d 0a 23 20 66 69 6c 6c 73 20 69 74 20 77 69 74 creates.a.table,..#.fills.it.wit
3f880 68 20 76 61 6c 75 65 73 2c 20 72 65 74 72 69 65 76 65 73 20 74 68 65 20 76 61 6c 75 65 73 20 62 h.values,.retrieves.the.values.b
3f8a0 61 63 6b 2c 0d 0a 23 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 64 65 73 74 72 6f 79 73 20 74 68 65 ack,..#.and.finally.destroys.the
3f8c0 20 74 61 62 6c 65 2e 0d 0a 0d 0a 72 65 71 75 69 72 65 20 22 64 62 69 22 0d 0a 0d 0a 23 20 72 65 .table.....require."dbi"....#.re
3f8e0 70 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 55 73 65 72 3a 3a 70 77 6e 74 20 6d 6f 64 placement.for.the.User::pwnt.mod
3f900 75 6c 65 0d 0a 64 65 66 20 67 65 74 70 77 65 6e 74 0d 0a 20 20 20 20 72 65 73 75 6c 74 20 3d 20 ule..def.getpwent......result.=.
3f920 5b 5d 0d 0a 20 20 20 20 46 69 6c 65 2e 6f 70 65 6e 28 22 2f 65 74 63 2f 70 61 73 73 77 64 22 29 []......File.open("/etc/passwd")
3f940 20 7b 7c 66 69 6c 65 7c 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 2e 65 61 63 68 5f 6c 69 6e 65 .{|file|..........file.each_line
3f960 20 7b 7c 6c 69 6e 65 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 74 20 69 66 20 6c 69 .{|line|..............next.if.li
3f980 6e 65 2e 6d 61 74 63 68 28 2f 5e 23 2f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 73 ne.match(/^#/)..............cols
3f9a0 20 3d 20 6c 69 6e 65 2e 73 70 6c 69 74 28 22 3a 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .=.line.split(":")..............
3f9c0 72 65 73 75 6c 74 2e 70 75 73 68 28 5b 63 6f 6c 73 5b 32 5d 2c 20 63 6f 6c 73 5b 30 5d 5d 29 0d result.push([cols[2],.cols[0]]).
3f9e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 72 65 73 75 6c 74 0d 0a 65 .........}......}......result..e
3fa00 6e 64 0d 0a 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 44 42 49 2e 63 6f 6e 6e 65 63 74 28 22 44 42 nd....begin......DBI.connect("DB
3fa20 49 3a 4d 79 73 71 6c 3a 70 6c 65 61 63 64 61 74 61 62 61 73 65 22 2c 20 22 70 6c 65 61 63 22 2c I:Mysql:pleacdatabase",."pleac",
3fa40 20 22 70 6c 65 61 63 70 61 73 73 77 6f 72 64 22 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 7c 63 6f ."pleacpassword").{..........|co
3fa60 6e 6e 7c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 6f 6e 6e 2e 64 6f 28 22 43 52 45 41 54 45 20 54 nn|............conn.do("CREATE.T
3fa80 41 42 4c 45 20 75 73 65 72 73 20 28 75 69 64 20 49 4e 54 2c 20 6c 6f 67 69 6e 20 43 48 41 52 28 ABLE.users.(uid.INT,.login.CHAR(
3faa0 38 29 29 22 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 73 65 72 73 20 3d 20 67 65 74 70 77 65 6e 8))")............users.=.getpwen
3fac0 74 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 6f 6e 6e 2e 70 72 65 70 61 72 65 28 22 49 4e 53 45 52 t............conn.prepare("INSER
3fae0 54 20 49 4e 54 4f 20 75 73 65 72 73 20 56 41 4c 55 45 53 20 28 3f 2c 3f 29 22 29 20 7b 7c 73 74 T.INTO.users.VALUES.(?,?)").{|st
3fb00 68 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 73 2e 65 61 63 68 20 7b 7c 65 6e 74 h|..............users.each.{|ent
3fb20 72 79 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 68 2e 65 78 65 63 75 74 65 ry|..................sth.execute
3fb40 28 65 6e 74 72 79 5b 30 5d 2c 20 65 6e 74 72 79 5b 31 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 (entry[0],.entry[1])............
3fb60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 6f 6e 6e 2e 65 ..}..........}............conn.e
3fb80 78 65 63 75 74 65 28 22 53 45 4c 45 43 54 20 75 69 64 2c 20 6c 6f 67 69 6e 20 46 52 4f 4d 20 75 xecute("SELECT.uid,.login.FROM.u
3fba0 73 65 72 73 20 57 48 45 52 45 20 75 69 64 20 3c 20 35 30 22 29 20 7b 7c 73 74 68 7c 0d 0a 20 20 sers.WHERE.uid.<.50").{|sth|....
3fbc0 20 20 20 20 20 20 20 20 20 20 73 74 68 2e 66 65 74 63 68 20 7b 7c 72 6f 77 7c 0d 0a 20 20 20 20 ..........sth.fetch.{|row|......
3fbe0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 74 73 20 72 6f 77 2e 63 6f 6c 6c 65 63 74 20 7b 7c 63 ............puts.row.collect.{|c
3fc00 6f 6c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 63 6f 6c 2e ol|......................if.col.
3fc20 6e 69 6c 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 28 nil?.........................."(
3fc40 6e 75 6c 6c 29 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 null)"......................else
3fc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 0d 0a 20 ..........................col...
3fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 ...................end..........
3fca0 20 20 20 20 20 20 20 20 7d 2e 6a 6f 69 6e 28 22 2c 20 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ........}.join(",.")............
3fcc0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 6f 6e 6e 2e 64 ..}..........}............conn.d
3fce0 6f 28 22 44 52 4f 50 20 54 41 42 4c 45 20 75 73 65 72 73 22 29 0d 0a 20 20 20 20 7d 0d 0a 72 65 o("DROP.TABLE.users")......}..re
3fd00 73 63 75 65 20 44 42 49 3a 3a 44 61 74 61 62 61 73 65 45 72 72 6f 72 20 3d 3e 20 65 0d 0a 20 20 scue.DBI::DatabaseError.=>.e....
3fd20 20 20 70 75 74 73 20 22 64 62 69 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 22 0d 0a 20 20 20 ..puts."dbi.error.occurred".....
3fd40 20 70 75 74 73 20 22 45 72 72 6f 72 20 63 6f 64 65 3a 20 23 7b 65 2e 65 72 72 7d 22 0d 0a 20 20 .puts."Error.code:.#{e.err}"....
3fd60 20 20 70 75 74 73 20 22 45 72 72 6f 72 20 6d 65 73 73 61 67 65 3a 20 23 7b 65 2e 65 72 72 73 74 ..puts."Error.message:.#{e.errst
3fd80 72 7d 22 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 35 2e 31 0d 0a r}"..end......#.@@PLEAC@@_15.1..
3fda0 23 20 54 68 69 73 20 74 65 73 74 20 70 72 6f 67 72 61 6d 20 64 65 6d 6f 6e 73 74 72 61 74 65 73 #.This.test.program.demonstrates
3fdc0 20 70 61 72 73 69 6e 67 20 70 72 6f 67 72 61 6d 20 61 72 67 75 6d 65 6e 74 73 2e 0d 0a 23 20 49 .parsing.program.arguments...#.I
3fde0 74 20 75 73 65 73 20 74 68 65 20 6f 70 74 70 61 72 73 65 20 6c 69 62 72 61 72 79 2c 20 77 68 69 t.uses.the.optparse.library,.whi
3fe00 63 68 20 69 73 20 69 6e 63 6c 75 64 65 64 20 77 69 74 68 20 72 75 62 79 20 31 2e 38 0d 0a 23 20 ch.is.included.with.ruby.1.8..#.
3fe20 49 74 20 68 61 6e 64 6c 65 73 20 63 6c 61 73 73 69 63 20 75 6e 69 78 20 73 74 79 6c 65 20 61 6e It.handles.classic.unix.style.an
3fe40 64 20 67 6e 75 20 73 74 79 6c 65 20 6f 70 74 69 6f 6e 73 0d 0a 72 65 71 75 69 72 65 20 27 6f 70 d.gnu.style.options..require.'op
3fe60 74 70 61 72 73 65 27 0d 0a 0d 0a 40 64 65 62 75 67 6d 6f 64 65 20 3d 20 66 61 6c 73 65 0d 0a 40 tparse'....@debugmode.=.false..@
3fe80 76 65 72 62 6f 73 65 20 3d 20 66 61 6c 73 65 0d 0a 0d 0a 41 52 47 56 2e 6f 70 74 69 6f 6e 73 20 verbose.=.false....ARGV.options.
3fea0 64 6f 20 7c 6f 70 74 73 7c 0d 0a 20 20 20 20 6f 70 74 73 2e 62 61 6e 6e 65 72 20 3d 20 22 55 73 do.|opts|......opts.banner.=."Us
3fec0 61 67 65 3a 20 72 75 62 79 20 23 7b 24 30 7d 20 5b 4f 50 54 49 4f 4e 53 5d 20 49 4e 50 55 54 46 age:.ruby.#{$0}.[OPTIONS].INPUTF
3fee0 49 4c 45 53 22 0d 0a 0d 0a 20 20 20 20 6f 70 74 73 2e 6f 6e 28 22 2d 68 22 2c 20 22 2d 2d 68 65 ILES"........opts.on("-h",."--he
3ff00 6c 70 22 2c 20 22 73 68 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65 22 29 20 7b 0d 0a 20 20 20 lp",."show.this.message").{.....
3ff20 20 20 20 20 20 70 75 74 73 20 6f 70 74 73 0d 0a 20 20 20 20 20 20 20 20 65 78 69 74 0d 0a 20 20 .....puts.opts..........exit....
3ff40 20 20 7d 0d 0a 20 20 20 20 23 20 54 68 65 20 4f 70 74 69 6f 6e 50 61 72 73 65 72 23 6f 6e 20 6d ..}......#.The.OptionParser#on.m
3ff60 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 73 70 65 63 69 66 69 63 61 ethod.is.called.with.a.specifica
3ff80 74 69 6f 6e 20 6f 66 20 73 68 6f 72 74 0d 0a 20 20 20 20 23 20 6f 70 74 69 6f 6e 73 2c 20 6f 66 tion.of.short......#.options,.of
3ffa0 20 6c 6f 6e 67 20 6f 70 74 69 6f 6e 73 2c 20 61 20 64 61 74 61 20 74 79 70 65 20 73 70 65 7a 69 .long.options,.a.data.type.spezi
3ffc0 66 69 63 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 72 20 68 65 6c 70 0d 0a 20 20 20 20 23 20 6d 65 fication.and.user.help......#.me
3ffe0 73 73 61 67 65 73 20 66 6f 72 20 74 68 69 73 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 23 20 54 ssages.for.this.option.......#.T
40000 68 65 20 6d 65 74 68 6f 64 20 61 6e 61 6c 79 73 65 73 20 74 68 65 20 67 69 76 65 6e 20 70 61 72 he.method.analyses.the.given.par
40020 61 6d 65 74 65 72 20 61 6e 64 20 64 65 63 69 64 65 73 20 77 68 61 74 20 69 74 20 69 73 2c 0d 0a ameter.and.decides.what.it.is,..
40040 20 20 20 20 23 20 73 6f 20 79 6f 75 20 63 61 6e 20 6c 65 61 76 65 20 6f 75 74 20 74 68 65 20 6c ....#.so.you.can.leave.out.the.l
40060 6f 6e 67 20 6f 70 74 69 6f 6e 20 69 66 20 79 6f 75 20 64 6f 6e 27 74 20 6e 65 65 64 20 69 74 0d ong.option.if.you.don't.need.it.
40080 0a 20 20 20 20 6f 70 74 73 2e 6f 6e 28 22 2d 76 22 2c 20 22 2d 2d 5b 6e 6f 2d 5d 76 65 72 62 6f .....opts.on("-v",."--[no-]verbo
400a0 73 65 3d 5b 46 4c 41 47 5d 22 2c 20 54 72 75 65 43 6c 61 73 73 2c 20 22 72 75 6e 20 76 65 72 62 se=[FLAG]",.TrueClass,."run.verb
400c0 6f 73 6c 79 22 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 7c 40 76 65 72 62 6f 73 65 7c 20 20 20 23 osly").{..........|@verbose|...#
400e0 20 73 65 74 73 20 40 76 65 72 62 6f 73 65 20 74 6f 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 0d .sets.@verbose.to.true.or.false.
40100 0a 20 20 20 20 7d 0d 0a 20 20 20 20 6f 70 74 73 2e 6f 6e 28 22 2d 44 22 2c 20 22 2d 2d 44 45 42 .....}......opts.on("-D",."--DEB
40120 55 47 22 2c 20 54 72 75 65 43 6c 61 73 73 2c 20 22 74 75 72 6e 73 20 6f 6e 20 64 65 62 75 67 20 UG",.TrueClass,."turns.on.debug.
40140 6d 6f 64 65 22 20 29 7b 0d 0a 20 20 20 20 20 20 20 20 7c 40 64 65 62 75 67 6d 6f 64 65 7c 20 20 mode".){..........|@debugmode|..
40160 20 23 20 73 65 74 73 20 40 64 65 62 75 67 6d 6f 64 65 20 74 6f 20 74 72 75 65 0d 0a 20 20 20 20 .#.sets.@debugmode.to.true......
40180 7d 0d 0a 20 20 20 20 6f 70 74 73 2e 6f 6e 28 22 2d 63 22 2c 20 22 2d 2d 63 6f 75 6e 74 3d 4e 55 }......opts.on("-c",."--count=NU
401a0 4d 42 45 52 22 2c 20 49 6e 74 65 67 65 72 2c 20 22 68 6f 77 20 6d 61 6e 79 20 74 69 6d 65 73 20 MBER",.Integer,."how.many.times.
401c0 77 65 20 64 6f 20 69 74 22 20 29 7b 0d 0a 20 20 20 20 20 20 20 20 7c 40 63 6f 75 6e 74 7c 20 20 we.do.it".){..........|@count|..
401e0 20 20 20 20 23 20 73 65 74 73 20 40 63 6f 75 6e 74 20 74 6f 20 67 69 76 65 6e 20 69 6e 74 65 67 ....#.sets.@count.to.given.integ
40200 65 72 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 6f 70 74 73 2e 6f 6e 28 22 2d 6f 22 2c 20 22 2d 2d er......}......opts.on("-o",."--
40220 6f 75 74 70 75 74 3d 46 49 4c 45 22 2c 20 53 74 72 69 6e 67 2c 20 22 66 69 6c 65 20 74 6f 20 77 output=FILE",.String,."file.to.w
40240 72 69 74 65 20 6f 75 74 70 75 74 20 74 6f 22 29 7b 0d 0a 20 20 20 20 20 20 20 20 7c 40 6f 75 74 rite.output.to"){..........|@out
40260 70 75 74 66 69 6c 65 7c 20 20 20 23 20 73 65 74 73 20 40 6f 75 74 70 75 74 66 69 6c 65 20 74 6f putfile|...#.sets.@outputfile.to
40280 20 67 69 76 65 6e 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 6f 70 74 73 2e 70 .given.string......}......opts.p
402a0 61 72 73 65 21 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 65 78 61 6d 70 6c 65 20 74 6f 20 75 73 65 20 74 arse!..end....#.example.to.use.t
402c0 68 65 20 6f 70 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 0d 0a he.options.in.the.main.program..
402e0 70 75 74 73 20 22 56 65 72 62 6f 73 65 20 69 73 20 6f 6e 22 20 69 66 20 40 76 65 72 62 6f 73 65 puts."Verbose.is.on".if.@verbose
40300 0d 0a 70 75 74 73 20 22 44 65 62 75 67 6d 6f 64 65 20 69 73 20 6f 6e 22 20 69 66 20 40 64 65 62 ..puts."Debugmode.is.on".if.@deb
40320 75 67 6d 6f 64 65 0d 0a 70 75 74 73 20 22 4f 75 74 66 69 6c 65 20 69 73 20 23 7b 40 6f 75 74 70 ugmode..puts."Outfile.is.#{@outp
40340 75 74 66 69 6c 65 7d 22 20 69 66 20 64 65 66 69 6e 65 64 3f 20 40 6f 75 74 70 75 74 66 69 6c 65 utfile}".if.defined?.@outputfile
40360 0d 0a 70 75 74 73 20 22 43 6f 75 6e 74 20 69 73 20 23 7b 40 63 6f 75 6e 74 7d 22 20 69 66 20 64 ..puts."Count.is.#{@count}".if.d
40380 65 66 69 6e 65 64 3f 20 40 63 6f 75 6e 74 0d 0a 41 52 47 56 2e 65 61 63 68 20 7b 20 7c 70 61 72 efined?.@count..ARGV.each.{.|par
403a0 61 6d 7c 0d 0a 20 20 20 20 70 75 74 73 20 22 47 6f 74 20 70 61 72 61 6d 65 74 65 72 20 23 7b 70 am|......puts."Got.parameter.#{p
403c0 61 72 61 6d 7d 22 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 35 2e 34 0d aram}"..}......#.@@PLEAC@@_15.4.
403e0 0a 62 75 66 20 3d 20 22 5c 30 22 20 2a 20 38 0d 0a 24 73 74 64 6f 75 74 2e 69 6f 63 74 6c 28 30 .buf.=."\0".*.8..$stdout.ioctl(0
40400 78 35 34 31 33 2c 20 62 75 66 29 0d 0a 77 73 5f 72 6f 77 2c 20 77 73 5f 63 6f 6c 2c 20 77 73 5f x5413,.buf)..ws_row,.ws_col,.ws_
40420 78 70 69 78 65 6c 2c 20 77 73 5f 79 70 69 78 65 6c 20 3d 20 62 75 66 2e 75 6e 70 61 63 6b 28 22 xpixel,.ws_ypixel.=.buf.unpack("
40440 53 34 22 29 0d 0a 0d 0a 72 61 69 73 65 20 22 59 6f 75 20 6d 75 73 74 20 68 61 76 65 20 61 74 20 S4")....raise."You.must.have.at.
40460 6c 65 61 73 74 20 32 30 20 63 68 61 72 61 63 74 65 72 73 22 20 75 6e 6c 65 73 73 20 77 73 5f 63 least.20.characters".unless.ws_c
40480 6f 6c 20 3e 3d 20 32 30 0d 0a 6d 61 78 20 3d 20 30 0d 0a 76 61 6c 75 65 73 20 3d 20 28 31 2e 2e ol.>=.20..max.=.0..values.=.(1..
404a0 35 29 2e 63 6f 6c 6c 65 63 74 20 7b 20 72 61 6e 64 28 32 30 29 20 7d 20 20 23 20 67 65 6e 65 72 5).collect.{.rand(20).}..#.gener
404c0 61 74 65 20 61 6e 20 61 72 72 61 79 5b 35 5d 20 6f 66 20 72 61 6e 64 20 76 61 6c 75 65 73 0d 0a ate.an.array[5].of.rand.values..
404e0 66 6f 72 20 69 20 69 6e 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 6d 61 78 20 3d 20 69 20 69 66 20 for.i.in.values......max.=.i.if.
40500 6d 61 78 20 3c 20 69 0d 0a 65 6e 64 0d 0a 72 61 74 69 6f 20 3d 20 46 6c 6f 61 74 28 77 73 5f 63 max.<.i..end..ratio.=.Float(ws_c
40520 6f 6c 2d 31 32 29 2f 6d 61 78 20 20 20 20 20 20 20 20 20 20 23 20 63 68 61 72 73 20 70 65 72 20 ol-12)/max..........#.chars.per.
40540 75 6e 69 74 0d 0a 66 6f 72 20 69 20 69 6e 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 70 72 69 6e 74 unit..for.i.in.values......print
40560 66 20 22 25 38 2e 31 66 20 25 73 5c 6e 22 2c 20 69 2c 20 22 2a 22 20 2a 20 28 72 61 74 69 6f 2a f."%8.1f.%s\n",.i,."*".*.(ratio*
40580 69 29 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 67 69 76 65 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 3a i)..end....#.gives,.for.example:
405a0 0d 0a 23 20 20 20 31 35 2e 30 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ..#...15.0.*********************
405c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 23 20 20 20 31 30 2e 30 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a **********..#...10.0.***********
405e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 23 20 20 20 20 35 2e 30 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d **********..#....5.0.**********.
40600 0a 23 20 20 20 31 34 2e 30 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .#...14.0.**********************
40620 2a 2a 2a 2a 2a 2a 2a 0d 0a 23 20 20 20 31 38 2e 30 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a *******..#...18.0.**************
40640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 0d 0a 0d 0a 23 20 ************************......#.
40660 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 31 0d 0a 6f 75 74 70 75 74 20 3d 20 60 70 72 6f 67 72 61 @@PLEAC@@_16.1..output.=.`progra
40680 6d 20 61 72 67 73 60 20 20 20 20 20 20 20 23 20 63 6f 6c 6c 65 63 74 20 6f 75 74 70 75 74 20 69 m.args`.......#.collect.output.i
406a0 6e 74 6f 20 6f 6e 65 20 6d 75 6c 74 69 6c 69 6e 65 20 73 74 72 69 6e 67 0d 0a 6f 75 74 70 75 74 nto.one.multiline.string..output
406c0 20 3d 20 60 70 72 6f 67 72 61 6d 20 61 72 67 73 60 2e 73 70 6c 69 74 20 23 20 63 6f 6c 6c 65 63 .=.`program.args`.split.#.collec
406e0 74 20 6f 75 74 70 75 74 20 69 6e 74 6f 20 61 72 72 61 79 2c 20 6f 6e 65 20 6c 69 6e 65 20 70 65 t.output.into.array,.one.line.pe
40700 72 0d 0a 65 6c 65 6d 65 6e 74 0d 0a 0d 0a 72 65 61 64 6d 65 20 3d 20 49 4f 2e 70 6f 70 65 6e 28 r..element....readme.=.IO.popen(
40720 22 6c 73 22 29 0d 0a 6f 75 74 70 75 74 20 3d 20 22 22 0d 0a 77 68 69 6c 65 20 72 65 61 64 6d 65 "ls")..output.=.""..while.readme
40740 2e 67 65 74 73 20 64 6f 0d 0a 20 20 20 20 6f 75 74 70 75 74 20 2b 3d 20 24 5f 0d 0a 65 6e 64 0d .gets.do......output.+=.$_..end.
40760 0a 72 65 61 64 6d 65 2e 63 6c 6f 73 65 0d 0a 0d 0a 60 66 73 63 6b 20 2d 79 20 2f 64 65 76 2f 72 .readme.close....`fsck.-y./dev/r
40780 73 64 31 61 60 20 20 23 20 42 41 44 20 41 4e 44 20 53 43 41 52 59 20 69 6e 20 50 65 72 6c 20 62 sd1a`..#.BAD.AND.SCARY.in.Perl.b
407a0 65 63 61 75 73 65 20 69 74 27 73 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 73 68 65 6c 6c ecause.it's.managed.by.the.shell
407c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 49 20 64 6f 6e 6e ........................#.I.donn
407e0 61 20 69 6e 20 52 75 62 79 20 2e 2e 2e 0d 0a 0d 0a 23 20 73 6f 20 74 68 65 20 22 63 6c 65 61 6e a.in.Ruby........#.so.the."clean
40800 20 61 6e 64 20 73 65 63 75 72 65 22 20 76 65 72 73 69 6f 6e 0d 0a 72 65 61 64 6d 65 2c 20 77 72 .and.secure".version..readme,.wr
40820 69 74 65 6d 65 20 3d 20 49 4f 2e 70 69 70 65 0d 0a 70 69 64 20 3d 20 66 6f 72 6b 20 7b 0d 0a 20 iteme.=.IO.pipe..pid.=.fork.{...
40840 20 20 20 23 20 63 68 69 6c 64 0d 0a 20 20 20 20 24 73 74 64 6f 75 74 20 3d 20 77 72 69 74 65 6d ...#.child......$stdout.=.writem
40860 65 0d 0a 20 20 20 20 72 65 61 64 6d 65 2e 63 6c 6f 73 65 0d 0a 20 20 20 20 65 78 65 63 28 27 66 e......readme.close......exec('f
40880 69 6e 64 27 2c 20 27 2e 2e 27 29 0d 0a 7d 0d 0a 23 20 70 61 72 65 6e 74 0d 0a 50 72 6f 63 65 73 ind',.'..')..}..#.parent..Proces
408a0 73 2e 77 61 69 74 70 69 64 28 70 69 64 2c 20 30 29 0d 0a 77 72 69 74 65 6d 65 2e 63 6c 6f 73 65 s.waitpid(pid,.0)..writeme.close
408c0 0d 0a 77 68 69 6c 65 20 72 65 61 64 6d 65 2e 67 65 74 73 20 64 6f 0d 0a 20 20 20 20 23 20 64 6f ..while.readme.gets.do......#.do
408e0 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 24 5f 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 .something.with.$_..end......#.@
40900 40 50 4c 45 41 43 40 40 5f 31 36 2e 32 0d 0a 73 74 61 74 75 73 20 3d 20 73 79 73 74 65 6d 28 22 @PLEAC@@_16.2..status.=.system("
40920 78 65 6d 61 63 73 20 23 7b 6d 79 66 69 6c 65 7d 22 29 0d 0a 0d 0a 73 74 61 74 75 73 20 3d 20 73 xemacs.#{myfile}")....status.=.s
40940 79 73 74 65 6d 28 22 78 65 6d 61 63 73 22 2c 20 6d 79 66 69 6c 65 29 0d 0a 0d 0a 73 79 73 74 65 ystem("xemacs",.myfile)....syste
40960 6d 28 22 63 6d 64 31 20 61 72 67 73 20 7c 20 63 6d 64 32 20 7c 20 63 6d 64 33 20 3e 6f 75 74 66 m("cmd1.args.|.cmd2.|.cmd3.>outf
40980 69 6c 65 22 29 0d 0a 73 79 73 74 65 6d 28 22 63 6d 64 20 61 72 67 73 20 3c 69 6e 66 69 6c 65 20 ile")..system("cmd.args.<infile.
409a0 3e 6f 75 74 66 69 6c 65 20 32 3e 65 72 72 66 69 6c 65 22 29 0d 0a 0d 0a 23 20 73 74 6f 70 20 69 >outfile.2>errfile")....#.stop.i
409c0 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 0d 0a 72 61 69 73 65 20 22 24 70 72 6f f.the.command.fails..raise."$pro
409e0 67 72 61 6d 20 65 78 69 74 65 64 20 66 75 6e 6e 79 3a 20 23 7b 24 3f 7d 22 20 75 6e 6c 65 73 73 gram.exited.funny:.#{$?}".unless
40a00 20 73 79 73 74 65 6d 28 22 63 6d 64 22 2c 20 22 61 72 67 73 31 22 2c 20 22 61 72 67 73 32 22 29 .system("cmd",."args1",."args2")
40a20 0d 0a 0d 0a 23 20 67 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 69 67 6e 61 ....#.get.the.value.of.the.signa
40a40 6c 20 73 65 6e 74 20 74 6f 20 74 68 65 20 63 68 69 6c 64 0d 0a 23 20 65 76 65 6e 20 69 66 20 69 l.sent.to.the.child..#.even.if.i
40a60 74 20 69 73 20 61 20 53 49 47 49 4e 54 20 6f 72 20 53 49 47 51 55 49 54 0d 0a 73 79 73 74 65 6d t.is.a.SIGINT.or.SIGQUIT..system
40a80 28 61 72 67 6c 69 73 74 29 0d 0a 72 61 69 73 65 20 22 70 72 6f 67 72 61 6d 20 6b 69 6c 6c 65 64 (arglist)..raise."program.killed
40aa0 20 62 79 20 73 69 67 6e 61 6c 20 23 7b 24 3f 7d 22 20 69 66 20 28 24 3f 20 26 20 31 32 37 29 20 .by.signal.#{$?}".if.($?.&.127).
40ac0 21 3d 20 30 0d 0a 0d 0a 70 69 64 20 3d 20 66 6f 72 6b 20 7b 0d 0a 20 20 20 20 74 72 61 70 28 22 !=.0....pid.=.fork.{......trap("
40ae0 53 49 47 49 4e 54 22 2c 20 22 49 47 4e 4f 52 45 22 29 0d 0a 20 20 20 20 65 78 65 63 28 22 73 6c SIGINT",."IGNORE")......exec("sl
40b00 65 65 70 22 2c 20 22 31 30 22 29 0d 0a 7d 0d 0a 74 72 61 70 20 28 22 53 49 47 49 4e 54 22 29 20 eep",."10")..}..trap.("SIGINT").
40b20 7b 0d 0a 20 20 20 20 70 75 74 73 20 22 54 73 6b 20 74 73 6b 2c 20 6e 6f 20 70 72 6f 63 65 73 73 {......puts."Tsk.tsk,.no.process
40b40 20 69 6e 74 65 72 72 75 70 74 75 73 22 0d 0a 7d 0d 0a 50 72 6f 63 65 73 73 2e 77 61 69 74 70 69 .interruptus"..}..Process.waitpi
40b60 64 28 70 69 64 2c 20 30 29 0d 0a 0d 0a 23 20 52 75 62 79 20 64 6f 65 73 6e 27 74 20 70 65 72 6d d(pid,.0)....#.Ruby.doesn't.perm
40b80 69 74 20 74 6f 20 6c 69 65 20 74 6f 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 61 6c 6c 65 64 20 it.to.lie.to.the.program.called.
40ba0 62 79 20 61 20 27 73 79 73 74 65 6d 27 2e 0d 0a 23 20 28 69 65 20 73 70 65 63 69 66 79 20 77 68 by.a.'system'...#.(ie.specify.wh
40bc0 61 74 20 72 65 74 75 72 6e 20 61 72 67 76 5b 30 5d 20 69 6e 20 43 2c 20 24 30 20 69 6e 20 50 65 at.return.argv[0].in.C,.$0.in.Pe
40be0 72 6c 2f 52 75 62 79 20 2e 2e 2e 29 0d 0a 23 20 41 20 28 64 69 72 74 79 29 20 77 61 79 20 69 73 rl/Ruby....)..#.A.(dirty).way.is
40c00 20 74 6f 20 63 72 65 61 74 65 20 61 20 6c 69 6e 6b 20 28 75 6e 64 65 72 20 55 6e 69 78 29 2c 20 .to.create.a.link.(under.Unix),.
40c20 72 75 6e 20 74 68 69 73 20 6c 69 6e 6b 20 61 6e 64 0d 0a 23 20 65 72 61 73 65 20 69 74 2e 20 53 run.this.link.and..#.erase.it..S
40c40 6f 6d 65 62 6f 64 79 20 68 61 73 20 61 20 62 65 73 74 20 69 64 65 61 20 3f 0d 0a 0d 0a 0d 0a 23 omebody.has.a.best.idea.?......#
40c60 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 33 0d 0a 65 78 65 63 28 22 61 72 63 68 69 76 65 20 2a .@@PLEAC@@_16.3..exec("archive.*
40c80 2e 64 61 74 61 22 29 0d 0a 0d 0a 65 78 65 63 28 22 61 72 63 68 69 76 65 22 2c 20 22 61 63 63 6f .data")....exec("archive",."acco
40ca0 75 6e 74 69 6e 67 2e 64 61 74 61 22 29 0d 0a 0d 0a 65 78 65 63 28 22 61 72 63 68 69 76 65 20 61 unting.data")....exec("archive.a
40cc0 63 63 6f 75 6e 74 69 6e 67 2e 64 61 74 61 22 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 ccounting.data")......#.@@PLEAC@
40ce0 40 5f 31 36 2e 34 0d 0a 23 20 72 65 61 64 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 61 20 70 @_16.4..#.read.the.output.of.a.p
40d00 72 6f 67 72 61 6d 0d 0a 49 4f 2e 70 6f 70 65 6e 28 22 6c 73 22 29 20 7b 7c 72 65 61 64 6d 65 7c rogram..IO.popen("ls").{|readme|
40d20 0d 0a 20 20 20 20 77 68 69 6c 65 20 72 65 61 64 6d 65 2e 67 65 74 73 20 64 6f 0d 0a 20 20 20 20 ......while.readme.gets.do......
40d40 20 20 20 20 23 20 2e 2e 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 7d 0d 0a 23 20 6f 72 0d 0a 72 65 61 ....#..........end..}..#.or..rea
40d60 64 6d 65 20 3d 20 49 4f 2e 70 6f 70 65 6e 28 22 6c 73 22 29 0d 0a 77 68 69 6c 65 20 72 65 61 64 dme.=.IO.popen("ls")..while.read
40d80 6d 65 2e 67 65 74 73 20 64 6f 0d 0a 20 20 20 20 23 20 2e 2e 2e 0d 0a 65 6e 64 0d 0a 72 65 61 64 me.gets.do......#......end..read
40da0 6d 65 2e 63 6c 6f 73 65 0d 0a 0d 0a 23 20 22 77 72 69 74 65 22 20 69 6e 20 61 20 70 72 6f 67 72 me.close....#."write".in.a.progr
40dc0 61 6d 0d 0a 49 4f 2e 70 6f 70 65 6e 28 22 63 6d 64 20 61 72 67 73 22 2c 22 77 22 29 20 7b 7c 70 am..IO.popen("cmd.args","w").{|p
40de0 69 70 65 7c 0d 0a 20 20 20 20 70 69 70 65 2e 70 75 74 73 28 22 64 61 74 61 22 29 0d 0a 20 20 20 ipe|......pipe.puts("data").....
40e00 20 70 69 70 65 2e 70 75 74 73 28 22 66 6f 6f 22 29 0d 0a 7d 0d 0a 0d 0a 23 20 63 6c 6f 73 65 20 .pipe.puts("foo")..}....#.close.
40e20 77 61 69 74 20 66 6f 72 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 0d wait.for.the.end.of.the.process.
40e40 0a 72 65 61 64 20 3d 20 49 4f 2e 70 6f 70 65 6e 28 22 73 6c 65 65 70 20 31 30 30 30 30 22 29 20 .read.=.IO.popen("sleep.10000").
40e60 23 20 63 68 69 6c 64 20 67 6f 65 73 20 74 6f 20 73 6c 65 65 70 0d 0a 72 65 61 64 2e 63 6c 6f 73 #.child.goes.to.sleep..read.clos
40e80 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 64 20 74 68 65 20 e.....................#.and.the.
40ea0 70 61 72 65 6e 74 20 67 6f 65 73 20 74 6f 20 6c 61 6c 61 20 6c 61 6e 64 0d 0a 0d 0a 77 72 69 74 parent.goes.to.lala.land....writ
40ec0 65 6d 65 20 3d 20 49 4f 2e 70 6f 70 65 6e 28 22 63 6d 64 20 61 72 67 73 22 2c 20 22 77 22 29 0d eme.=.IO.popen("cmd.args",."w").
40ee0 0a 77 72 69 74 65 6d 65 2e 70 75 74 73 20 22 68 65 6c 6c 6f 22 20 23 20 70 72 6f 67 72 61 6d 20 .writeme.puts."hello".#.program.
40f00 77 69 6c 6c 20 67 65 74 20 68 65 6c 6c 6f 5c 6e 20 6f 6e 20 53 54 44 49 4e 0d 0a 77 72 69 74 65 will.get.hello\n.on.STDIN..write
40f20 6d 65 2e 63 6c 6f 73 65 20 20 20 20 20 20 20 20 23 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 67 me.close........#.program.will.g
40f40 65 74 20 45 4f 46 20 6f 6e 20 53 54 44 49 4e 0d 0a 0d 0a 23 20 73 65 6e 64 20 69 6e 20 61 20 70 et.EOF.on.STDIN....#.send.in.a.p
40f60 61 67 65 72 20 28 65 67 20 6c 65 73 73 29 20 61 6c 6c 20 6f 75 74 70 75 74 0d 0a 24 73 74 64 6f ager.(eg.less).all.output..$stdo
40f80 75 74 20 3d 20 49 4f 2e 70 6f 70 65 6e 28 22 2f 75 73 72 2f 62 69 6e 2f 6c 65 73 73 22 2c 22 77 ut.=.IO.popen("/usr/bin/less","w
40fa0 22 29 0d 0a 70 72 69 6e 74 20 22 68 75 67 65 20 73 74 72 69 6e 67 5c 6e 22 20 2a 20 31 30 30 30 ")..print."huge.string\n".*.1000
40fc0 30 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 35 0d 0a 23 2d 2d 2d 2d 2d 2d 0......#.@@PLEAC@@_16.5..#------
40fe0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 64 65 66 20 68 65 61 -----------------------..def.hea
41000 64 28 6c 69 6e 65 73 20 3d 20 32 30 29 0d 0a 20 20 20 20 70 69 64 20 3d 20 6f 70 65 6e 28 22 7c d(lines.=.20)......pid.=.open("|
41020 2d 22 2c 22 77 22 29 0d 0a 20 20 20 20 69 66 20 70 69 64 20 3d 3d 20 6e 69 6c 0d 0a 20 20 20 20 -","w")......if.pid.==.nil......
41040 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 77 68 ....return......else..........wh
41060 69 6c 65 20 67 65 74 73 28 29 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 69 64 2e 70 ile.gets().do..............pid.p
41080 72 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65 73 20 2d 3d 20 31 0d 0a 20 20 rint..............lines.-=.1....
410a0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 20 69 66 20 6c 69 6e 65 73 20 3d 3d 20 30 0d 0a 20 ..........break.if.lines.==.0...
410c0 20 20 20 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 65 78 69 74 0d 0a 65 .......end......end......exit..e
410e0 6e 64 0d 0a 0d 0a 68 65 61 64 28 31 30 30 29 0d 0a 77 68 69 6c 65 20 67 65 74 73 28 29 20 64 6f nd....head(100)..while.gets().do
41100 0d 0a 20 20 20 20 70 72 69 6e 74 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ......print..end..#-------------
41120 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 31 3a 20 3e 20 57 65 6c 63 6f 6d 65 20 74 ----------------..1:.>.Welcome.t
41140 6f 20 4c 69 6e 75 78 2c 20 76 65 72 73 69 6f 6e 20 32 2e 30 2e 33 33 20 6f 6e 20 61 20 69 36 38 o.Linux,.version.2.0.33.on.a.i68
41160 36 0d 0a 0d 0a 32 3a 20 3e 0d 0a 0d 0a 33 3a 20 3e 20 20 20 20 20 22 54 68 65 20 73 6f 66 74 77 6....2:.>....3:.>....."The.softw
41180 61 72 65 20 72 65 71 75 69 72 65 64 20 60 57 69 6e 64 6f 77 73 20 39 35 20 6f 72 20 62 65 74 74 are.required.`Windows.95.or.bett
411a0 65 72 27 2c 0d 0a 0d 0a 34 3a 20 3e 20 20 20 20 20 20 73 6f 20 49 20 69 6e 73 74 61 6c 6c 65 64 er',....4:.>......so.I.installed
411c0 20 4c 69 6e 75 78 2e 22 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .Linux."..#---------------------
411e0 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 3e 20 31 3a 20 57 65 6c 63 6f 6d 65 20 74 6f 20 4c 69 6e 75 78 2c --------..>.1:.Welcome.to.Linux,
41200 20 4b 65 72 6e 65 6c 20 76 65 72 73 69 6f 6e 20 32 2e 30 2e 33 33 20 6f 6e 20 61 20 69 36 38 36 .Kernel.version.2.0.33.on.a.i686
41220 0d 0a 0d 0a 3e 20 32 3a 0d 0a 0d 0a 3e 20 33 3a 20 20 20 20 20 22 54 68 65 20 73 6f 66 74 77 61 ....>.2:....>.3:....."The.softwa
41240 72 65 20 72 65 71 75 69 72 65 64 20 60 57 69 6e 64 6f 77 73 20 39 35 20 6f 72 20 62 65 74 74 65 re.required.`Windows.95.or.bette
41260 72 27 2c 0d 0a 0d 0a 3e 20 34 3a 20 20 20 20 20 20 73 6f 20 49 20 69 6e 73 74 61 6c 6c 65 64 20 r',....>.4:......so.I.installed.
41280 4c 69 6e 75 78 2e 22 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d Linux."..#----------------------
412a0 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 0d 0a 23 20 71 6e 75 6d -------..#!/usr/bin/ruby..#.qnum
412c0 63 61 74 20 2d 20 64 65 6d 6f 20 61 64 64 69 74 69 76 65 20 6f 75 74 70 75 74 20 66 69 6c 74 65 cat.-.demo.additive.output.filte
412e0 72 73 0d 0a 0d 0a 64 65 66 20 6e 75 6d 62 65 72 28 29 0d 0a 20 20 20 20 70 69 64 20 3d 20 6f 70 rs....def.number()......pid.=.op
41300 65 6e 28 22 7c 2d 22 2c 22 77 22 29 0d 0a 20 20 20 20 69 66 20 70 69 64 20 3d 3d 20 6e 69 6c 0d en("|-","w")......if.pid.==.nil.
41320 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 .........return......else.......
41340 20 20 20 77 68 69 6c 65 20 67 65 74 73 28 29 20 64 6f 20 70 69 64 2e 70 72 69 6e 74 66 28 22 25 ...while.gets().do.pid.printf("%
41360 64 3a 20 25 73 22 2c 20 24 2e 2c 20 24 5f 29 3b 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 d:.%s",.$.,.$_);.end......end...
41380 20 20 20 65 78 69 74 0d 0a 65 6e 64 0d 0a 0d 0a 64 65 66 20 71 75 6f 74 65 28 29 0d 0a 20 20 20 ...exit..end....def.quote().....
413a0 20 70 69 64 20 3d 20 6f 70 65 6e 28 22 7c 2d 22 2c 22 77 22 29 0d 0a 20 20 20 20 69 66 20 70 69 .pid.=.open("|-","w")......if.pi
413c0 64 20 3d 3d 20 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 65 6c d.==.nil..........return......el
413e0 73 65 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 67 65 74 73 28 29 20 64 6f 20 70 69 64 2e se..........while.gets().do.pid.
41400 70 72 69 6e 74 20 22 3e 20 23 7b 24 5f 7d 22 20 65 6e 64 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 print.">.#{$_}".end......end....
41420 20 20 65 78 69 74 0d 0a 65 6e 64 0d 0a 0d 0a 6e 75 6d 62 65 72 28 29 0d 0a 71 75 6f 74 65 28 29 ..exit..end....number()..quote()
41440 0d 0a 0d 0a 77 68 69 6c 65 20 67 65 74 73 28 29 20 64 6f 0d 0a 20 20 20 20 70 72 69 6e 74 0d 0a ....while.gets().do......print..
41460 65 6e 64 0d 0a 24 73 74 64 6f 75 74 2e 63 6c 6f 73 65 0d 0a 65 78 69 74 0d 0a 0d 0a 0d 0a 23 20 end..$stdout.close..exit......#.
41480 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 36 0d 0a 41 52 47 56 2e 6d 61 70 21 20 7b 20 7c 61 72 67 @@PLEAC@@_16.6..ARGV.map!.{.|arg
414a0 7c 0d 0a 20 20 20 20 61 72 67 20 3d 7e 20 2f 5c 2e 28 67 7a 7c 5a 29 24 2f 20 3f 20 22 7c 67 7a |......arg.=~./\.(gz|Z)$/.?."|gz
414c0 69 70 20 2d 64 63 20 23 7b 61 72 67 7d 22 20 3a 20 61 72 67 0d 0a 7d 0d 0a 66 6f 72 20 66 69 6c ip.-dc.#{arg}".:.arg..}..for.fil
414e0 65 20 69 6e 20 41 52 47 56 0d 0a 20 20 20 20 66 68 20 3d 20 6f 70 65 6e 28 66 69 6c 65 29 0d 0a e.in.ARGV......fh.=.open(file)..
41500 20 20 20 20 77 68 69 6c 65 20 66 68 2e 67 65 74 73 28 29 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 ....while.fh.gets().do..........
41520 23 20 2e 2e 2e 2e 2e 2e 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d #..............end..end..#------
41540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 41 52 47 56 2e 6d 61 -----------------------..ARGV.ma
41560 70 21 20 7b 20 7c 61 72 67 7c 0d 0a 20 20 20 20 61 72 67 20 3d 7e 20 25 72 23 5e 5c 77 2b 3a 2f p!.{.|arg|......arg.=~.%r#^\w+:/
41580 2f 23 20 3f 20 22 7c 47 45 54 20 23 7b 61 72 67 7d 22 20 3a 20 61 72 67 20 20 20 23 0d 0a 7d 0d /#.?."|GET.#{arg}".:.arg...#..}.
415a0 0a 66 6f 72 20 66 69 6c 65 20 69 6e 20 41 52 47 56 0d 0a 20 20 20 20 66 68 20 3d 20 6f 70 65 6e .for.file.in.ARGV......fh.=.open
415c0 28 66 69 6c 65 29 0d 0a 20 20 20 20 77 68 69 6c 65 20 66 68 2e 67 65 74 73 28 29 20 64 6f 0d 0a (file)......while.fh.gets().do..
415e0 20 20 20 20 20 20 20 20 23 20 2e 2e 2e 2e 2e 2e 2e 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d ........#..............end..end.
41600 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d .#-----------------------------.
41620 0a 70 77 64 69 6e 66 6f 20 3d 20 28 60 64 6f 6d 61 69 6e 6e 61 6d 65 60 20 3d 7e 20 2f 5e 28 5c .pwdinfo.=.(`domainname`.=~./^(\
41640 28 6e 6f 6e 65 5c 29 29 3f 24 2f 29 20 3f 20 27 2f 65 74 63 2f 70 61 73 73 77 64 27 20 3a 20 27 (none\))?$/).?.'/etc/passwd'.:.'
41660 7c 79 70 63 61 74 20 20 70 61 73 73 77 64 27 3b 0d 0a 70 77 64 20 3d 20 6f 70 65 6e 28 70 77 64 |ypcat..passwd';..pwd.=.open(pwd
41680 69 6e 66 6f 29 3b 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d info);..#-----------------------
416a0 2d 2d 2d 2d 2d 2d 0d 0a 70 75 74 73 20 22 46 69 6c 65 2c 20 70 6c 65 61 73 65 3f 20 22 3b 0d 0a ------..puts."File,.please?.";..
416c0 66 69 6c 65 20 3d 20 67 65 74 73 28 29 2e 63 68 6f 6d 70 28 29 3b 0d 0a 66 68 20 3d 20 6f 70 65 file.=.gets().chomp();..fh.=.ope
416e0 6e 28 66 69 6c 65 29 3b 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 37 0d 0a n(file);......#.@@PLEAC@@_16.7..
41700 6f 75 74 70 75 74 20 3d 20 60 63 6d 64 20 32 3e 26 31 60 20 20 20 20 20 20 20 20 20 20 20 20 20 output.=.`cmd.2>&1`.............
41720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 62 61 63 6b 74 69 63 6b 73 0d ...............#.with.backticks.
41740 0a 23 20 6f 72 0d 0a 70 68 20 3d 20 6f 70 65 6e 28 22 7c 63 6d 64 20 32 3e 26 31 22 29 20 20 20 .#.or..ph.=.open("|cmd.2>&1")...
41760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 61 6e 20 ......................#.with.an.
41780 6f 70 65 6e 20 70 69 70 65 0d 0a 77 68 69 6c 65 20 70 68 2e 67 65 74 73 28 29 20 7b 20 7d 20 20 open.pipe..while.ph.gets().{.}..
417a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 70 6c 75 73 ..........................#.plus
417c0 20 61 20 72 65 61 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .a.read..#----------------------
417e0 2d 2d 2d 2d 2d 2d 2d 0d 0a 6f 75 74 70 75 74 20 3d 20 60 63 6d 64 20 32 3e 2f 64 65 76 2f 6e 75 -------..output.=.`cmd.2>/dev/nu
41800 6c 6c 60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 62 ll`.....................#.with.b
41820 61 63 6b 74 69 63 6b 73 0d 0a 23 20 6f 72 0d 0a 70 68 20 3d 20 6f 70 65 6e 28 22 7c 63 6d 64 20 ackticks..#.or..ph.=.open("|cmd.
41840 32 3e 2f 64 65 76 2f 6e 75 6c 6c 22 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 2>/dev/null")..................#
41860 20 77 69 74 68 20 61 6e 20 6f 70 65 6e 20 70 69 70 65 0d 0a 77 68 69 6c 65 20 70 68 2e 67 65 74 .with.an.open.pipe..while.ph.get
41880 73 28 29 20 7b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s().{.}.........................
418a0 20 20 20 23 20 70 6c 75 73 20 61 20 72 65 61 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...#.plus.a.read..#-------------
418c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6f 75 74 70 75 74 20 3d 20 60 63 6d 64 20 ----------------..output.=.`cmd.
418e0 32 3e 26 31 20 31 3e 2f 64 65 76 2f 6e 75 6c 6c 60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2>&1.1>/dev/null`...............
41900 20 23 20 77 69 74 68 20 62 61 63 6b 74 69 63 6b 73 0d 0a 23 20 6f 72 0d 0a 70 68 20 3d 20 6f 70 .#.with.backticks..#.or..ph.=.op
41920 65 6e 28 22 7c 63 6d 64 20 32 3e 26 31 20 31 3e 2f 64 65 76 2f 6e 75 6c 6c 22 29 20 20 20 20 20 en("|cmd.2>&1.1>/dev/null").....
41940 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 61 6e 20 6f 70 65 6e 20 70 69 70 65 0d 0a 77 68 69 ........#.with.an.open.pipe..whi
41960 6c 65 20 70 68 2e 67 65 74 73 28 29 20 7b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 le.ph.gets().{.}................
41980 20 20 20 20 20 20 20 20 20 20 20 20 23 20 70 6c 75 73 20 61 20 72 65 61 64 0d 0a 23 2d 2d 2d 2d ............#.plus.a.read..#----
419a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 6f 75 74 70 75 -------------------------..outpu
419c0 74 20 3d 20 60 63 6d 64 20 33 3e 26 31 20 31 3e 26 32 20 32 3e 26 33 20 33 3e 26 2d 60 20 20 20 t.=.`cmd.3>&1.1>&2.2>&3.3>&-`...
419e0 20 20 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 62 61 63 6b 74 69 63 6b 73 0d 0a 23 20 6f 72 ..........#.with.backticks..#.or
41a00 0d 0a 70 68 20 3d 20 6f 70 65 6e 28 22 7c 63 6d 64 20 33 3e 26 31 20 31 3e 26 32 20 32 3e 26 33 ..ph.=.open("|cmd.3>&1.1>&2.2>&3
41a20 20 33 3e 26 2d 22 29 20 20 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 61 6e 20 6f 70 65 6e 20 .3>&-")..........#.with.an.open.
41a40 70 69 70 65 0d 0a 77 68 69 6c 65 20 70 68 2e 67 65 74 73 28 29 20 7b 20 7d 20 20 20 20 20 20 20 pipe..while.ph.gets().{.}.......
41a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 70 6c 75 73 20 61 20 72 65 .....................#.plus.a.re
41a80 61 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ad..#---------------------------
41aa0 2d 2d 0d 0a 73 79 73 74 65 6d 28 22 70 72 6f 67 72 61 6d 20 61 72 67 73 20 31 3e 2f 74 6d 70 2f --..system("program.args.1>/tmp/
41ac0 70 72 6f 67 72 61 6d 2e 73 74 64 6f 75 74 20 32 3e 2f 74 6d 70 2f 70 72 6f 67 72 61 6d 2e 73 74 program.stdout.2>/tmp/program.st
41ae0 64 65 72 72 22 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d derr")..#-----------------------
41b00 2d 2d 2d 2d 2d 2d 0d 0a 6f 75 74 70 75 74 20 3d 20 60 63 6d 64 20 33 3e 26 31 20 31 3e 26 32 20 ------..output.=.`cmd.3>&1.1>&2.
41b20 32 3e 26 33 20 33 3e 26 2d 60 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2>&3.3>&-`..#-------------------
41b40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 66 64 33 20 3d 20 66 64 31 0d 0a 66 64 31 20 3d 20 66 64 32 ----------..fd3.=.fd1..fd1.=.fd2
41b60 0d 0a 66 64 32 20 3d 20 66 64 33 0d 0a 66 64 33 20 3d 20 75 6e 64 65 66 0d 0a 23 2d 2d 2d 2d 2d ..fd2.=.fd3..fd3.=.undef..#-----
41b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 73 79 73 74 65 6d ------------------------..system
41ba0 28 22 70 72 6f 67 20 61 72 67 73 20 31 3e 74 6d 70 66 69 6c 65 20 32 3e 26 31 22 29 0d 0a 73 79 ("prog.args.1>tmpfile.2>&1")..sy
41bc0 73 74 65 6d 28 22 70 72 6f 67 20 61 72 67 73 20 32 3e 26 31 20 31 3e 74 6d 70 66 69 6c 65 22 29 stem("prog.args.2>&1.1>tmpfile")
41be0 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#-----------------------------
41c00 0d 0a 23 20 73 79 73 74 65 6d 20 28 22 70 72 6f 67 20 61 72 67 73 20 31 3e 74 6d 70 66 69 6c 65 ..#.system.("prog.args.1>tmpfile
41c20 20 32 3e 26 31 22 29 0d 0a 66 64 31 20 3d 20 22 74 6d 70 66 69 6c 65 22 20 20 20 20 20 20 20 20 .2>&1")..fd1.=."tmpfile"........
41c40 20 20 23 20 63 68 61 6e 67 65 20 73 74 64 6f 75 74 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 69 ..#.change.stdout.destination.fi
41c60 72 73 74 0d 0a 66 64 32 20 3d 20 66 64 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 rst..fd2.=.fd1................#.
41c80 6e 6f 77 20 70 6f 69 6e 74 20 73 74 64 65 72 72 20 74 68 65 72 65 2c 20 74 6f 6f 0d 0a 23 2d 2d now.point.stderr.there,.too..#--
41ca0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 73 ---------------------------..#.s
41cc0 79 73 74 65 6d 28 22 70 72 6f 67 20 61 72 67 73 20 32 3e 26 31 20 31 3e 74 6d 70 66 69 6c 65 22 ystem("prog.args.2>&1.1>tmpfile"
41ce0 29 0d 0a 66 64 32 20 3d 20 66 64 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 74 )..fd2.=.fd1................#.st
41d00 64 65 72 72 20 73 61 6d 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 73 20 73 74 64 6f 75 74 0d derr.same.destination.as.stdout.
41d20 0a 66 64 31 20 3d 20 22 74 6d 70 66 69 6c 65 22 20 20 20 20 20 20 20 20 20 20 23 20 62 75 74 20 .fd1.=."tmpfile"..........#.but.
41d40 63 68 61 6e 67 65 20 73 74 64 6f 75 74 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 23 2d 2d 2d 2d change.stdout.destination..#----
41d60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 49 74 20 -------------------------..#.It.
41d80 69 73 20 6f 66 74 65 6e 20 62 65 74 74 65 72 20 6e 6f 74 20 74 6f 20 72 65 6c 79 20 6f 6e 20 74 is.often.better.not.to.rely.on.t
41da0 68 65 20 73 68 65 6c 6c 2c 0d 0a 23 20 62 65 63 61 75 73 65 20 6f 66 20 70 6f 72 74 61 62 69 6c he.shell,..#.because.of.portabil
41dc0 69 74 79 2c 20 70 6f 73 73 69 62 6c 65 20 73 65 63 75 72 69 74 79 20 70 72 6f 62 6c 65 6d 73 0d ity,.possible.security.problems.
41de0 0a 23 20 61 6e 64 20 62 69 67 67 65 72 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 2e 20 53 6f .#.and.bigger.resource.usage..So
41e00 2c 20 69 74 20 69 73 20 6f 66 74 65 6e 20 62 65 74 74 65 72 20 74 6f 20 75 73 65 20 74 68 65 20 ,.it.is.often.better.to.use.the.
41e20 6f 70 65 6e 33 20 6c 69 62 72 61 72 79 2e 0d 0a 23 20 53 65 65 20 62 65 6c 6f 77 20 66 6f 72 20 open3.library...#.See.below.for.
41e40 61 6e 20 65 78 61 6d 70 6c 65 2e 0d 0a 23 20 6f 70 65 6e 69 6e 67 20 73 74 64 69 6e 2c 20 73 74 an.example...#.opening.stdin,.st
41e60 64 6f 75 74 2c 20 73 74 64 65 72 72 0d 0a 72 65 71 75 69 72 65 20 22 6f 70 65 6e 33 22 0d 0a 73 dout,.stderr..require."open3"..s
41e80 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 72 20 3d 20 4f 70 65 6e 33 2e 70 6f 70 tdin,.stdout,.stderr.=.Open3.pop
41ea0 65 6e 28 27 63 6d 64 27 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 38 0d en('cmd')......#.@@PLEAC@@_16.8.
41ec0 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d .#-----------------------------.
41ee0 0a 23 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 70 65 72 6c 2c 20 77 65 20 64 6f 6e 27 74 20 6e 65 .#.Contrary.to.perl,.we.don't.ne
41f00 65 64 20 74 6f 20 75 73 65 20 61 20 6d 6f 64 75 6c 65 20 69 6e 20 52 75 62 79 0d 0a 66 68 20 3d ed.to.use.a.module.in.Ruby..fh.=
41f20 20 4b 65 72 6e 65 6c 2e 6f 70 65 6e 28 22 7c 22 20 2b 20 70 72 6f 67 72 61 6d 2c 20 22 77 2b 22 .Kernel.open("|".+.program,."w+"
41f40 29 0d 0a 66 68 2e 70 75 74 73 20 22 68 65 72 65 27 73 20 79 6f 75 72 20 69 6e 70 75 74 5c 6e 22 )..fh.puts."here's.your.input\n"
41f60 0d 0a 6f 75 74 70 75 74 20 3d 20 66 68 2e 67 65 74 73 28 29 0d 0a 66 68 2e 63 6c 6f 73 65 28 29 ..output.=.fh.gets()..fh.close()
41f80 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#-----------------------------
41fa0 0d 0a 4b 65 72 6e 65 6c 2e 6f 70 65 6e 28 22 7c 70 72 6f 67 72 61 6d 22 29 2c 22 77 2b 22 29 20 ..Kernel.open("|program"),"w+").
41fc0 20 20 20 23 20 52 49 47 48 54 20 21 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...#.RIGHT.!..#-----------------
41fe0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 52 75 62 79 20 68 61 73 20 61 6c 72 65 61 64 79 ------------..#.Ruby.has.already
42000 20 6f 62 6a 65 63 74 20 6d 65 74 68 6f 64 73 20 66 6f 72 20 49 2f 4f 20 68 61 6e 64 6c 65 73 0d .object.methods.for.I/O.handles.
42020 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d .#-----------------------------.
42040 0a 62 65 67 69 6e 0d 0a 20 20 20 20 66 68 20 3d 20 4b 65 72 6e 65 6c 2e 6f 70 65 6e 28 22 7c 22 .begin......fh.=.Kernel.open("|"
42060 20 2b 20 70 72 6f 67 72 61 6d 5f 61 6e 64 5f 6f 70 74 69 6f 6e 73 2c 20 22 77 2b 22 29 0d 0a 72 .+.program_and_options,."w+")..r
42080 65 73 63 75 65 0d 0a 20 20 20 20 69 66 20 28 24 40 20 7e 3d 20 2f 5e 6f 70 65 6e 2f 29 0d 0a 20 escue......if.($@.~=./^open/)...
420a0 20 20 20 20 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 73 20 22 6f 70 65 6e 20 66 61 69 6c 65 64 .......$stderr.puts."open.failed
420c0 20 3a 20 23 7b 24 21 7d 20 5c 6e 20 23 7b 24 40 7d 20 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 62 .:.#{$!}.\n.#{$@}.\n"..........b
420e0 72 65 61 6b 0d 0a 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 72 61 69 73 65 20 20 20 20 20 20 23 20 reak......end......raise......#.
42100 72 65 72 61 69 73 65 20 75 6e 66 6f 72 73 65 65 6e 20 65 78 63 65 70 74 69 6f 6e 0d 0a 65 6e 64 reraise.unforseen.exception..end
42120 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 31 33 0d 0a 23 25 20 6b 69 6c 6c ......#.@@PLEAC@@_16.13..#%.kill
42140 20 2d 6c 0d 0a 23 48 55 50 20 49 4e 54 20 51 55 49 54 20 49 4c 4c 20 54 52 41 50 20 41 42 52 54 .-l..#HUP.INT.QUIT.ILL.TRAP.ABRT
42160 20 42 55 53 20 46 50 45 20 4b 49 4c 4c 20 55 53 52 31 20 53 45 47 56 20 55 53 52 32 20 50 49 50 .BUS.FPE.KILL.USR1.SEGV.USR2.PIP
42180 45 0d 0a 23 41 4c 52 4d 20 54 45 52 4d 20 43 48 4c 44 20 43 4f 4e 54 20 53 54 4f 50 20 54 53 54 E..#ALRM.TERM.CHLD.CONT.STOP.TST
421a0 50 20 54 54 49 4e 20 54 54 4f 55 20 55 52 47 20 58 43 50 55 20 58 46 53 5a 20 56 54 41 4c 52 4d P.TTIN.TTOU.URG.XCPU.XFSZ.VTALRM
421c0 0d 0a 23 50 52 4f 46 20 57 49 4e 43 48 20 50 4f 4c 4c 20 50 57 52 0d 0a 23 2d 2d 2d 2d 2d 2d 2d ..#PROF.WINCH.POLL.PWR..#-------
421e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 25 20 72 75 62 79 20 ----------------------..#%.ruby.
42200 2d 65 20 27 70 75 74 73 20 53 69 67 6e 61 6c 2e 6c 69 73 74 2e 6b 65 79 73 2e 6a 6f 69 6e 28 22 -e.'puts.Signal.list.keys.join("
42220 20 22 29 27 0d 0a 23 50 57 52 20 55 53 52 31 20 42 55 53 20 55 53 52 32 20 54 45 52 4d 20 53 45 .")'..#PWR.USR1.BUS.USR2.TERM.SE
42240 47 56 20 4b 49 4c 4c 20 50 4f 4c 4c 20 53 54 4f 50 20 53 59 53 20 54 52 41 50 20 49 4f 54 20 48 GV.KILL.POLL.STOP.SYS.TRAP.IOT.H
42260 55 50 20 49 4e 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 UP.INT..........................
42280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
422a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 23 57 49 4e 43 48 20 58 43 50 55 20 54 ................#..#WINCH.XCPU.T
422c0 54 49 4e 20 43 4c 44 20 54 53 54 50 20 46 50 45 20 49 4f 20 54 54 4f 55 20 50 52 4f 46 20 43 48 TIN.CLD.TSTP.FPE.IO.TTOU.PROF.CH
422e0 4c 44 20 43 4f 4e 54 20 50 49 50 45 20 41 42 52 54 0d 0a 23 56 54 41 4c 52 4d 20 51 55 49 54 20 LD.CONT.PIPE.ABRT..#VTALRM.QUIT.
42300 49 4c 4c 20 58 46 53 5a 20 55 52 47 20 41 4c 52 4d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ILL.XFSZ.URG.ALRM..#------------
42320 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 41 66 74 65 72 20 74 68 61 74 2c -----------------..#.After.that,
42340 20 74 68 65 20 70 65 72 6c 20 73 63 72 69 70 74 20 63 72 65 61 74 65 20 61 6e 20 68 61 73 68 20 .the.perl.script.create.an.hash.
42360 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 53 69 67 6e 61 6c 2e 6c 69 73 74 2c 0d 0a 23 20 61 6e equivalent.to.Signal.list,..#.an
42380 64 20 61 6e 20 61 72 72 61 79 2e 20 54 68 65 20 61 72 72 61 79 20 63 61 6e 20 62 65 20 6f 62 74 d.an.array..The.array.can.be.obt
423a0 61 69 6e 65 64 20 62 79 20 3a 0d 0a 73 69 67 6e 61 6d 65 20 3d 20 5b 5d 0d 0a 53 69 67 6e 61 6c ained.by.:..signame.=.[]..Signal
423c0 2e 6c 69 73 74 2e 65 61 63 68 20 7b 20 7c 6e 61 6d 65 2c 20 69 7c 20 73 69 67 6e 61 6d 65 5b 69 .list.each.{.|name,.i|.signame[i
423e0 5d 20 3d 20 6e 61 6d 65 20 7d 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 31 ].=.name.}......#.@@PLEAC@@_16.1
42400 34 0d 0a 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 39 2c 20 70 69 64 29 20 20 20 20 20 20 20 20 20 4..Process.kill(9,.pid).........
42420 20 20 20 20 20 20 20 20 20 20 20 23 20 73 65 6e 64 20 24 70 69 64 20 61 20 73 69 67 6e 61 6c 20 ...........#.send.$pid.a.signal.
42440 39 0d 0a 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 2d 31 2c 20 50 72 6f 63 65 73 73 2e 67 65 74 70 9..Process.kill(-1,.Process.getp
42460 67 72 70 28 29 29 20 20 20 20 20 23 20 73 65 6e 64 20 77 68 6f 6c 65 20 6a 6f 62 20 61 20 73 69 grp()).....#.send.whole.job.a.si
42480 67 6e 61 6c 20 31 0d 0a 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 22 55 53 52 31 22 2c 20 24 24 29 gnal.1..Process.kill("USR1",.$$)
424a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 65 6e 64 20 6d 79 73 65 6c 66 20 61 20 ................#.send.myself.a.
424c0 53 49 47 55 53 52 31 0d 0a 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 22 48 55 50 22 2c 20 70 69 64 SIGUSR1..Process.kill("HUP",.pid
424e0 31 2c 20 70 69 64 32 2c 20 70 69 64 33 29 20 20 20 23 20 73 65 6e 64 20 61 20 53 49 47 48 55 50 1,.pid2,.pid3)...#.send.a.SIGHUP
42500 20 74 6f 20 70 72 6f 63 65 73 73 65 73 20 69 6e 20 40 70 69 64 73 0d 0a 23 2d 2d 2d 2d 2d 2d 2d .to.processes.in.@pids..#-------
42520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 62 65 67 69 6e 0d 0a 20 ----------------------..begin...
42540 20 20 20 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 30 2c 20 6d 69 6e 69 6f 6e 29 0d 0a 20 20 20 20 ...Process.kill(0,.minion)......
42560 70 75 74 73 20 22 23 7b 6d 69 6e 69 6f 6e 7d 20 69 73 20 61 6c 69 76 65 21 22 0d 0a 72 65 73 63 puts."#{minion}.is.alive!"..resc
42580 75 65 20 45 72 72 6e 6f 3a 3a 45 50 45 52 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ue.Errno::EPERM.................
425a0 20 20 20 20 23 20 63 68 61 6e 67 65 64 20 75 69 64 0d 0a 20 20 20 20 70 75 74 73 20 22 23 7b 6d ....#.changed.uid......puts."#{m
425c0 69 6e 69 6f 6e 7d 20 68 61 73 20 65 73 63 61 70 65 64 20 6d 79 20 63 6f 6e 74 72 6f 6c 21 22 3b inion}.has.escaped.my.control!";
425e0 0d 0a 72 65 73 63 75 65 20 45 72 72 6e 6f 3a 3a 45 53 52 43 48 0d 0a 20 20 20 20 70 75 74 73 20 ..rescue.Errno::ESRCH......puts.
42600 22 23 7b 6d 69 6e 69 6f 6e 7d 20 69 73 20 64 65 63 65 61 73 65 64 2e 22 3b 20 20 20 20 20 20 23 "#{minion}.is.deceased.";......#
42620 20 6f 72 20 7a 6f 6d 62 69 65 64 0d 0a 72 65 73 63 75 65 0d 0a 20 20 20 20 70 75 74 73 20 22 4f .or.zombied..rescue......puts."O
42640 64 64 3b 20 49 20 63 6f 75 6c 64 6e 27 74 20 63 68 65 63 6b 20 74 68 65 20 73 74 61 74 75 73 20 dd;.I.couldn't.check.the.status.
42660 6f 66 20 23 7b 6d 69 6e 69 6f 6e 7d 20 3a 20 23 7b 24 21 7d 22 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a of.#{minion}.:.#{$!}"..end......
42680 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 31 35 0d 0a 4b 65 72 6e 65 6c 2e 74 72 61 70 28 22 #.@@PLEAC@@_16.15..Kernel.trap("
426a0 51 55 49 54 22 2c 20 67 6f 74 5f 73 69 67 5f 71 75 69 74 29 20 20 20 20 20 20 20 23 20 67 6f 74 QUIT",.got_sig_quit).......#.got
426c0 5f 73 69 67 5f 71 75 69 74 20 3d 20 50 72 6f 63 2e 6e 65 77 20 7b 20 70 75 74 73 20 22 51 75 69 _sig_quit.=.Proc.new.{.puts."Qui
426e0 74 5c 6e 22 20 7d 0d 0a 74 72 61 70 28 22 50 49 50 45 22 2c 20 22 67 6f 74 5f 73 69 67 5f 71 75 t\n".}..trap("PIPE",."got_sig_qu
42700 69 74 22 29 20 20 20 20 20 20 20 20 20 20 20 20 23 20 64 65 66 20 67 6f 74 5f 73 69 67 5f 70 69 it")............#.def.got_sig_pi
42720 70 65 20 2e 2e 2e 0d 0a 74 72 61 70 28 22 49 4e 54 22 29 20 7b 20 6f 75 63 68 2b 2b 20 7d 20 20 pe......trap("INT").{.ouch++.}..
42740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69 6e 63 72 65 6d 65 6e 74 20 6f 75 63 68 ................#.increment.ouch
42760 20 66 6f 72 20 65 76 65 72 79 20 53 49 47 49 4e 54 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .for.every.SIGINT..#------------
42780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 74 72 61 70 28 22 49 4e 54 22 2c 20 22 -----------------..trap("INT",."
427a0 49 47 4e 4f 52 45 22 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69 67 6e IGNORE")...................#.ign
427c0 6f 72 65 20 74 68 65 20 73 69 67 6e 61 6c 20 49 4e 54 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ore.the.signal.INT..#-----------
427e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 74 72 61 70 28 22 53 54 4f 50 22 2c ------------------..trap("STOP",
42800 20 22 44 45 46 41 55 4c 54 22 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 72 65 ."DEFAULT").................#.re
42820 73 74 6f 72 65 20 64 65 66 61 75 6c 74 20 53 54 4f 50 20 73 69 67 6e 61 6c 20 68 61 6e 64 6c 69 store.default.STOP.signal.handli
42840 6e 67 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 31 36 0d 0a 23 20 74 68 65 ng......#.@@PLEAC@@_16.16..#.the
42860 20 73 69 67 6e 61 6c 20 68 61 6e 64 6c 65 72 0d 0a 64 65 66 20 64 69 6e 67 0d 0a 20 20 20 20 74 .signal.handler..def.ding......t
42880 72 61 70 28 22 49 4e 54 22 2c 20 22 64 69 6e 67 22 29 0d 0a 20 20 20 20 70 75 74 73 20 22 5c 61 rap("INT",."ding")......puts."\a
428a0 45 6e 74 65 72 20 79 6f 75 72 20 6e 61 6d 65 21 22 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 70 72 6f 6d Enter.your.name!"..end....#.prom
428c0 70 74 20 66 6f 72 20 6e 61 6d 65 2c 20 6f 76 65 72 72 69 64 69 6e 67 20 53 49 47 49 4e 54 0d 0a pt.for.name,.overriding.SIGINT..
428e0 64 65 66 20 67 65 74 5f 6e 61 6d 65 0d 0a 20 20 20 20 73 61 76 65 20 3d 20 74 72 61 70 28 22 49 def.get_name......save.=.trap("I
42900 4e 54 22 2c 20 22 64 69 6e 67 22 29 0d 0a 0d 0a 20 20 20 20 70 75 74 73 20 22 4b 69 6e 64 6c 79 NT",."ding")........puts."Kindly
42920 20 53 74 72 61 6e 67 65 72 2c 20 70 6c 65 61 73 65 20 65 6e 74 65 72 20 79 6f 75 72 20 6e 61 6d .Stranger,.please.enter.your.nam
42940 65 3a 20 22 0d 0a 20 20 20 20 6e 61 6d 65 20 3d 20 67 65 74 73 28 29 2e 63 68 6f 6d 70 28 29 0d e:."......name.=.gets().chomp().
42960 0a 20 20 20 20 74 72 61 70 28 22 49 4e 54 22 2c 20 73 61 76 65 29 0d 0a 20 20 20 20 6e 61 6d 65 .....trap("INT",.save)......name
42980 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 36 2e 32 31 0d 0a 23 20 ..end......#.@@PLEAC@@_16.21..#.
429a0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 74 68 61 6e 6b 73 20 74 6f 20 68 74 74 70 3a 2f 2f 62 6c 61 implemented.thanks.to.http://bla
429c0 64 65 2e 6e 61 67 61 6f 6b 61 75 74 2e 61 63 2e 6a 70 2f 63 67 69 2d 62 69 6e 2f 73 63 61 74 2e de.nagaokaut.ac.jp/cgi-bin/scat.
429e0 72 62 2f 72 75 62 79 2f 72 75 62 79 2d 74 61 6c 6b 2f 31 37 36 30 0d 0a 72 65 71 75 69 72 65 20 rb/ruby/ruby-talk/1760..require.
42a00 27 74 69 6d 65 6f 75 74 27 0d 0a 0d 0a 23 20 77 65 27 6c 6c 20 64 6f 20 73 6f 6d 65 74 68 69 6e 'timeout'....#.we'll.do.somethin
42a20 67 20 76 61 73 74 6c 79 20 6d 6f 72 65 20 75 73 65 66 75 6c 20 74 68 61 6e 20 63 6f 6f 6b 62 6f g.vastly.more.useful.than.cookbo
42a40 6f 6b 20 74 6f 20 64 65 6d 6f 6e 73 74 72 61 74 65 20 74 69 6d 65 6f 75 74 73 0d 0a 62 65 67 69 ok.to.demonstrate.timeouts..begi
42a60 6e 0d 0a 20 20 20 20 74 69 6d 65 6f 75 74 28 35 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 61 69 n......timeout(5).{..........wai
42a80 74 73 65 63 20 3d 20 72 61 6e 64 28 31 30 29 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22 4c tsec.=.rand(10)..........puts."L
42aa0 65 74 27 73 20 73 65 65 20 69 66 20 61 20 73 6c 65 65 70 20 6f 66 20 23 7b 77 61 69 74 73 65 63 et's.see.if.a.sleep.of.#{waitsec
42ac0 7d 20 73 65 63 6f 6e 64 73 20 69 73 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 35 20 73 65 63 6f 6e }.seconds.is.longer.than.5.secon
42ae0 64 73 2e 2e 2e 22 0d 0a 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 28 22 73 6c 65 65 70 20 23 7b ds..."..........system("sleep.#{
42b00 77 61 69 74 73 65 63 7d 22 29 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 70 75 74 73 20 22 54 69 6d waitsec}")......}......puts."Tim
42b20 65 6f 75 74 20 64 69 64 6e 27 74 20 6f 63 63 75 72 22 0d 0a 72 65 73 63 75 65 20 54 69 6d 65 6f eout.didn't.occur"..rescue.Timeo
42b40 75 74 3a 3a 45 72 72 6f 72 0d 0a 20 20 20 20 70 75 74 73 20 22 54 69 6d 65 64 20 6f 75 74 21 22 ut::Error......puts."Timed.out!"
42b60 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 37 2e 31 0d 0a 23 20 41 ..end......#.@@PLEAC@@_17.1..#.A
42b80 20 62 61 73 69 63 20 54 43 50 20 63 6c 69 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 72 65 .basic.TCP.client.connection..re
42ba0 71 75 69 72 65 20 27 73 6f 63 6b 65 74 27 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 74 20 3d 20 54 quire.'socket'..begin......t.=.T
42bc0 43 50 53 6f 63 6b 65 74 2e 6e 65 77 28 27 77 77 77 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 27 CPSocket.new('www.ruby-lang.org'
42be0 2c 20 27 77 77 77 27 29 0d 0a 72 65 73 63 75 65 0d 0a 20 20 20 20 70 75 74 73 20 22 65 72 72 6f ,.'www')..rescue......puts."erro
42c00 72 3a 20 23 7b 24 21 7d 22 0d 0a 65 6c 73 65 0d 0a 20 20 20 20 23 20 2e 2e 2e 20 64 6f 20 73 6f r:.#{$!}"..else......#.....do.so
42c20 6d 65 74 68 69 6e 67 20 77 69 74 68 20 74 68 65 20 73 6f 63 6b 65 74 0d 0a 20 20 20 20 74 2e 70 mething.with.the.socket......t.p
42c40 72 69 6e 74 20 22 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 30 5c 6e 5c 6e 22 0d 0a 20 20 20 20 61 rint."GET./.HTTP/1.0\n\n"......a
42c60 6e 73 77 65 72 20 3d 20 74 2e 67 65 74 73 28 6e 69 6c 29 0d 0a 20 20 20 20 23 20 61 6e 64 20 74 nswer.=.t.gets(nil)......#.and.t
42c80 65 72 6d 69 6e 61 74 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 65 6e 20 77 65 27 erminate.the.connection.when.we'
42ca0 72 65 20 64 6f 6e 65 0d 0a 20 20 20 20 74 2e 63 6c 6f 73 65 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 55 re.done......t.close..end....#.U
42cc0 73 69 6e 67 20 74 68 65 20 65 76 69 6c 20 6c 6f 77 20 6c 65 76 65 6c 20 73 6f 63 6b 65 74 20 41 sing.the.evil.low.level.socket.A
42ce0 50 49 0d 0a 72 65 71 75 69 72 65 20 27 73 6f 63 6b 65 74 27 0d 0a 23 20 63 72 65 61 74 65 20 61 PI..require.'socket'..#.create.a
42d00 20 73 6f 63 6b 65 74 0d 0a 73 20 3d 20 53 6f 63 6b 65 74 2e 6e 65 77 28 53 6f 63 6b 65 74 3a 3a .socket..s.=.Socket.new(Socket::
42d20 41 46 5f 49 4e 45 54 2c 20 53 6f 63 6b 65 74 3a 3a 53 4f 43 4b 5f 53 54 52 45 41 4d 2c 20 30 29 AF_INET,.Socket::SOCK_STREAM,.0)
42d40 0d 0a 23 20 62 75 69 6c 64 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 72 65 6d ..#.build.the.address.of.the.rem
42d60 6f 74 65 20 6d 61 63 68 69 6e 65 0d 0a 73 6f 63 6b 61 64 64 72 5f 73 65 72 76 65 72 20 3d 20 5b ote.machine..sockaddr_server.=.[
42d80 53 6f 63 6b 65 74 3a 3a 41 46 5f 49 4e 45 54 2c 20 38 30 2c 0d 0a 20 20 20 20 53 6f 63 6b 65 74 Socket::AF_INET,.80,......Socket
42da0 2e 67 65 74 68 6f 73 74 62 79 6e 61 6d 65 28 27 77 77 77 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 .gethostbyname('www.ruby-lang.or
42dc0 67 27 29 5b 33 5d 2c 0d 0a 20 20 20 20 30 2c 20 30 5d 2e 70 61 63 6b 28 22 73 6e 41 34 4e 4e 22 g')[3],......0,.0].pack("snA4NN"
42de0 29 0d 0a 23 20 63 6f 6e 6e 65 63 74 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 73 2e 63 6f 6e 6e 65 )..#.connect..begin......s.conne
42e00 63 74 28 73 6f 63 6b 61 64 64 72 5f 73 65 72 76 65 72 29 0d 0a 72 65 73 63 75 65 0d 0a 20 20 20 ct(sockaddr_server)..rescue.....
42e20 20 70 75 74 73 20 22 65 72 72 6f 72 3a 20 23 7b 24 21 7d 22 0d 0a 65 6c 73 65 0d 0a 20 20 20 20 .puts."error:.#{$!}"..else......
42e40 23 20 2e 2e 2e 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20 74 68 65 20 73 6f 63 6b #.....do.something.with.the.sock
42e60 65 74 0d 0a 20 20 20 20 73 2e 70 72 69 6e 74 20 22 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 30 5c et......s.print."GET./.HTTP/1.0\
42e80 6e 5c 6e 22 0d 0a 20 20 20 20 23 20 61 6e 64 20 74 65 72 6d 69 6e 61 74 65 20 74 68 65 20 63 6f n\n"......#.and.terminate.the.co
42ea0 6e 6e 65 63 74 69 6f 6e 20 77 68 65 6e 20 77 65 27 72 65 20 64 6f 6e 65 0d 0a 20 20 20 20 73 2e nnection.when.we're.done......s.
42ec0 63 6c 6f 73 65 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 43 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 close..end....#.TCP.connection.w
42ee0 69 74 68 20 6d 61 6e 61 67 65 6d 65 6e 74 20 6f 66 20 65 72 72 6f 72 20 28 44 4e 53 29 0d 0a 72 ith.management.of.error.(DNS)..r
42f00 65 71 75 69 72 65 20 27 73 6f 63 6b 65 74 27 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 63 6c 69 65 equire.'socket'..begin......clie
42f20 6e 74 20 3d 20 54 43 50 53 6f 63 6b 65 74 2e 6e 65 77 28 27 64 6f 65 73 20 6e 6f 74 20 65 78 69 nt.=.TCPSocket.new('does.not.exi
42f40 73 74 73 27 2c 20 27 77 77 77 27 29 0d 0a 72 65 73 63 75 65 0d 0a 20 20 20 20 70 75 74 73 20 22 sts',.'www')..rescue......puts."
42f60 65 72 72 6f 72 3a 20 23 7b 24 21 7d 22 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 54 43 50 20 63 6f 6e 6e error:.#{$!}"..end....#.TCP.conn
42f80 65 63 74 69 6f 6e 20 77 69 74 68 20 61 20 74 69 6d 65 20 6f 75 74 0d 0a 72 65 71 75 69 72 65 20 ection.with.a.time.out..require.
42fa0 27 73 6f 63 6b 65 74 27 0d 0a 72 65 71 75 69 72 65 20 27 74 69 6d 65 6f 75 74 27 0d 0a 62 65 67 'socket'..require.'timeout'..beg
42fc0 69 6e 0d 0a 20 20 20 20 74 69 6d 65 6f 75 74 28 31 29 20 64 6f 20 23 74 68 65 20 73 65 72 76 65 in......timeout(1).do.#the.serve
42fe0 72 20 68 61 73 20 6f 6e 65 20 73 65 63 6f 6e 64 20 74 6f 20 61 6e 73 77 65 72 0d 0a 20 20 20 20 r.has.one.second.to.answer......
43000 20 20 20 20 63 6c 69 65 6e 74 20 3d 20 54 43 50 53 6f 63 6b 65 74 2e 6e 65 77 28 27 77 77 77 2e ....client.=.TCPSocket.new('www.
43020 68 6f 73 74 2e 63 6f 6d 27 2c 20 27 77 77 77 27 29 0d 0a 20 20 20 20 65 6e 64 0d 0a 72 65 73 63 host.com',.'www')......end..resc
43040 75 65 0d 0a 20 20 20 20 70 75 74 73 20 22 65 72 72 6f 72 3a 20 23 7b 24 21 7d 22 0d 0a 65 6e 64 ue......puts."error:.#{$!}"..end
43060 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 37 2e 31 32 0d 0a 72 65 71 75 69 72 65 ......#.@@PLEAC@@_17.12..require
43080 20 27 73 6f 63 6b 65 74 27 0d 0a 0d 0a 63 6c 61 73 73 20 50 72 65 66 6f 72 6b 65 72 0d 0a 20 20 .'socket'....class.Preforker....
430a0 20 20 61 74 74 72 5f 72 65 61 64 65 72 20 28 3a 63 68 69 6c 64 5f 63 6f 75 6e 74 29 0d 0a 0d 0a ..attr_reader.(:child_count)....
430c0 20 20 20 20 64 65 66 20 69 6e 69 74 69 61 6c 69 7a 65 28 70 72 65 66 6f 72 6b 2c 20 6d 61 78 5f ....def.initialize(prefork,.max_
430e0 63 6c 69 65 6e 74 73 5f 70 65 72 5f 63 68 69 6c 64 2c 20 70 6f 72 74 2c 20 63 6c 69 65 6e 74 5f clients_per_child,.port,.client_
43100 68 61 6e 64 6c 65 72 29 0d 0a 20 20 20 20 20 20 20 20 40 70 72 65 66 6f 72 6b 20 3d 20 70 72 65 handler)..........@prefork.=.pre
43120 66 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 40 6d 61 78 5f 63 6c 69 65 6e 74 73 5f 70 65 72 5f 63 fork..........@max_clients_per_c
43140 68 69 6c 64 20 3d 20 6d 61 78 5f 63 6c 69 65 6e 74 73 5f 70 65 72 5f 63 68 69 6c 64 0d 0a 20 20 hild.=.max_clients_per_child....
43160 20 20 20 20 20 20 40 70 6f 72 74 20 3d 20 70 6f 72 74 0d 0a 20 20 20 20 20 20 20 20 40 63 68 69 ......@port.=.port..........@chi
43180 6c 64 5f 63 6f 75 6e 74 20 3d 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 40 72 65 61 70 65 72 20 ld_count.=.0............@reaper.
431a0 3d 20 70 72 6f 63 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 70 28 27 43 48 4c 44 =.proc.{..............trap('CHLD
431c0 27 2c 20 40 72 65 61 70 65 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 69 64 20 3d 20 50 ',.@reaper)..............pid.=.P
431e0 72 6f 63 65 73 73 2e 77 61 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 63 68 69 6c 64 5f rocess.wait..............@child_
43200 63 6f 75 6e 74 20 2d 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 count.-=.1..........}...........
43220 20 40 68 75 6e 74 73 6d 61 6e 20 3d 20 70 72 6f 63 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .@huntsman.=.proc.{.............
43240 20 74 72 61 70 28 27 43 48 4c 44 27 2c 20 27 49 47 4e 4f 52 45 27 29 0d 0a 20 20 20 20 20 20 20 .trap('CHLD',.'IGNORE').........
43260 20 20 20 20 20 74 72 61 70 28 27 49 4e 54 27 2c 20 27 49 47 4e 4f 52 45 27 29 0d 0a 20 20 20 20 .....trap('INT',.'IGNORE')......
43280 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 2e 6b 69 6c 6c 28 27 49 4e 54 27 2c 20 30 29 0d 0a ........Process.kill('INT',.0)..
432a0 20 20 20 20 20 20 20 20 20 20 20 20 65 78 69 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ............exit..........}.....
432c0 20 20 20 20 20 20 20 40 63 6c 69 65 6e 74 5f 68 61 6e 64 6c 65 72 3d 63 6c 69 65 6e 74 5f 68 61 .......@client_handler=client_ha
432e0 6e 64 6c 65 72 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 63 68 69 6c 64 5f ndler......end........def.child_
43300 68 61 6e 64 6c 65 72 0d 0a 20 20 20 20 20 20 20 20 74 72 61 70 28 27 49 4e 54 27 2c 20 27 45 58 handler..........trap('INT',.'EX
43320 49 54 27 29 0d 0a 20 20 20 20 20 20 20 20 40 63 6c 69 65 6e 74 5f 68 61 6e 64 6c 65 72 2e 73 65 IT')..........@client_handler.se
43340 74 55 70 0d 0a 20 20 20 20 20 20 20 20 23 20 77 69 73 68 3a 20 73 69 67 70 72 6f 63 6d 61 73 6b tUp..........#.wish:.sigprocmask
43360 20 55 4e 62 6c 6f 63 6b 20 53 49 47 49 4e 54 0d 0a 20 20 20 20 20 20 20 20 40 6d 61 78 5f 63 6c .UNblock.SIGINT..........@max_cl
43380 69 65 6e 74 73 5f 70 65 72 5f 63 68 69 6c 64 2e 74 69 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 ients_per_child.times.{.........
433a0 20 20 20 20 20 63 6c 69 65 6e 74 20 3d 20 40 73 65 72 76 65 72 2e 61 63 63 65 70 74 20 6f 72 20 .....client.=.@server.accept.or.
433c0 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 63 6c 69 65 6e 74 5f 68 61 6e 64 6c break..............@client_handl
433e0 65 72 2e 68 61 6e 64 6c 65 5f 72 65 71 75 65 73 74 28 63 6c 69 65 6e 74 29 0d 0a 20 20 20 20 20 er.handle_request(client).......
43400 20 20 20 20 20 20 20 63 6c 69 65 6e 74 2e 63 6c 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a .......client.close..........}..
43420 20 20 20 20 20 20 20 20 40 63 6c 69 65 6e 74 5f 68 61 6e 64 6c 65 72 2e 74 65 61 72 44 6f 77 6e ........@client_handler.tearDown
43440 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 6d 61 6b 65 5f 6e 65 77 5f 63 68 ......end........def.make_new_ch
43460 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 77 69 73 68 3a 20 73 69 67 70 72 6f 63 6d 61 73 6b ild..........#.wish:.sigprocmask
43480 20 62 6c 6f 63 6b 20 53 49 47 49 4e 54 0d 0a 20 20 20 20 20 20 20 20 40 63 68 69 6c 64 5f 63 6f .block.SIGINT..........@child_co
434a0 75 6e 74 20 2b 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 70 69 64 20 3d 20 66 6f 72 6b 20 64 6f 0d unt.+=.1..........pid.=.fork.do.
434c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 69 6c 64 5f 68 61 6e 64 6c 65 72 0d 0a 20 20 20 20 .............child_handler......
434e0 20 20 20 20 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 77 69 73 68 3a 20 73 69 67 70 72 6f 63 ....end..........#.wish:.sigproc
43500 6d 61 73 6b 20 55 4e 62 6c 6f 63 6b 20 53 49 47 49 4e 54 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a mask.UNblock.SIGINT......end....
43520 20 20 20 20 64 65 66 20 72 75 6e 0d 0a 20 20 20 20 20 20 20 20 40 73 65 72 76 65 72 20 3d 20 54 ....def.run..........@server.=.T
43540 43 50 73 65 72 76 65 72 2e 6f 70 65 6e 28 40 70 6f 72 74 29 0d 0a 20 20 20 20 20 20 20 20 74 72 CPserver.open(@port)..........tr
43560 61 70 28 27 43 48 4c 44 27 2c 20 40 72 65 61 70 65 72 29 0d 0a 20 20 20 20 20 20 20 20 74 72 61 ap('CHLD',.@reaper)..........tra
43580 70 28 27 49 4e 54 27 2c 20 40 68 75 6e 74 73 6d 61 6e 29 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6f p('INT',.@huntsman)..........loo
435a0 70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 40 70 72 65 66 6f 72 6b 20 2d 20 40 63 68 p.{..............(@prefork.-.@ch
435c0 69 6c 64 5f 63 6f 75 6e 74 29 2e 74 69 6d 65 73 20 7b 20 7c 69 7c 0d 0a 20 20 20 20 20 20 20 20 ild_count).times.{.|i|..........
435e0 20 20 20 20 20 20 20 20 6d 61 6b 65 5f 6e 65 77 5f 63 68 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 ........make_new_child..........
43600 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 6c 65 65 70 20 2e 31 0d 0a 20 20 20 ....}..............sleep..1.....
43620 20 20 20 20 20 7d 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 23 2d 2d 2d 2d 2d 2d 2d .....}......end..end....#-------
43640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 21 2f 75 73 72 2f 62 ----------------------..#!/usr/b
43660 69 6e 2f 72 75 62 79 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 50 72 65 66 6f 72 6b 65 72 27 0d 0a in/ruby....require.'Preforker'..
43680 0d 0a 63 6c 61 73 73 20 43 6c 69 65 6e 74 48 61 6e 64 6c 65 72 0d 0a 20 20 20 20 64 65 66 20 73 ..class.ClientHandler......def.s
436a0 65 74 55 70 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 74 65 61 72 44 6f 77 etUp......end........def.tearDow
436c0 6e 0d 0a 20 20 20 20 65 6e 64 0d 0a 0d 0a 20 20 20 20 64 65 66 20 68 61 6e 64 6c 65 5f 72 65 71 n......end........def.handle_req
436e0 75 65 73 74 28 63 6c 69 65 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 23 20 64 6f 20 73 74 75 66 66 uest(client)..........#.do.stuff
43700 0d 0a 20 20 20 20 65 6e 64 0d 0a 65 6e 64 0d 0a 0d 0a 73 65 72 76 65 72 20 3d 20 50 72 65 66 6f ......end..end....server.=.Prefo
43720 72 6b 65 72 2e 6e 65 77 28 31 2c 20 31 30 30 2c 20 33 31 30 32 2c 20 43 6c 69 65 6e 74 48 61 6e rker.new(1,.100,.3102,.ClientHan
43740 64 6c 65 72 2e 6e 65 77 29 0d 0a 73 65 72 76 65 72 2e 72 75 6e 0d 0a 0d 0a 0d 0a 23 20 40 40 50 dler.new)..server.run......#.@@P
43760 4c 45 41 43 40 40 5f 31 38 2e 32 0d 0a 72 65 71 75 69 72 65 20 27 6e 65 74 2f 66 74 70 27 0d 0a LEAC@@_18.2..require.'net/ftp'..
43780 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 66 74 70 20 3d 20 4e 65 74 3a 3a 46 54 50 3a 3a 6e 65 77 ..begin......ftp.=.Net::FTP::new
437a0 28 22 66 74 70 2e 68 6f 73 74 2e 63 6f 6d 22 29 0d 0a 20 20 20 20 66 74 70 2e 6c 6f 67 69 6e 28 ("ftp.host.com")......ftp.login(
437c0 75 73 65 72 6e 61 6d 65 2c 70 61 73 73 77 6f 72 64 29 0d 0a 20 20 20 20 66 74 70 2e 63 68 64 69 username,password)......ftp.chdi
437e0 72 28 64 69 72 65 63 74 6f 72 79 29 0d 0a 20 20 20 20 66 74 70 2e 67 65 74 28 66 69 6c 65 6e 61 r(directory)......ftp.get(filena
43800 6d 65 29 0d 0a 20 20 20 20 66 74 70 2e 70 75 74 28 66 69 6c 65 6e 61 6d 65 29 0d 0a 72 65 73 63 me)......ftp.put(filename)..resc
43820 75 65 20 4e 65 74 3a 3a 46 54 50 45 72 72 6f 72 0d 0a 20 20 20 20 24 73 74 64 65 72 72 2e 70 72 ue.Net::FTPError......$stderr.pr
43840 69 6e 74 20 22 46 54 50 20 66 61 69 6c 65 64 3a 20 22 20 2b 20 24 21 0d 0a 65 6e 73 75 72 65 0d int."FTP.failed:.".+.$!..ensure.
43860 0a 20 20 20 20 66 74 70 2e 63 6c 6f 73 65 28 29 20 69 66 20 66 74 70 0d 0a 65 6e 64 0d 0a 0d 0a .....ftp.close().if.ftp..end....
43880 23 20 41 20 62 65 74 74 65 72 20 73 6f 6c 75 74 69 6f 6e 20 66 6f 72 20 61 20 6c 6f 63 61 6c 20 #.A.better.solution.for.a.local.
438a0 75 73 65 20 63 6f 75 6c 64 20 62 65 20 3a 0d 0a 4e 65 74 3a 3a 46 54 50 3a 3a 6e 65 77 28 22 66 use.could.be.:..Net::FTP::new("f
438c0 74 70 2e 68 6f 73 74 2e 63 6f 6d 22 29 20 64 6f 20 7c 66 74 70 7c 0d 0a 20 20 20 20 66 74 70 2e tp.host.com").do.|ftp|......ftp.
438e0 6c 6f 67 69 6e 28 75 73 65 72 6e 61 6d 65 2c 70 61 73 73 77 6f 72 64 29 0d 0a 20 20 20 20 66 74 login(username,password)......ft
43900 70 2e 63 68 64 69 72 28 64 69 72 65 63 74 6f 72 79 29 0d 0a 20 20 20 20 66 74 70 2e 67 65 74 28 p.chdir(directory)......ftp.get(
43920 66 69 6c 65 6e 61 6d 65 29 0d 0a 20 20 20 20 66 74 70 2e 70 75 74 28 66 69 6c 65 6e 61 6d 65 29 filename)......ftp.put(filename)
43940 0d 0a 65 6e 64 0d 0a 0d 0a 23 20 49 66 20 79 6f 75 20 68 61 76 65 20 6f 6e 6c 79 20 6f 6e 65 20 ..end....#.If.you.have.only.one.
43960 66 69 6c 65 20 74 6f 20 67 65 74 2c 20 74 68 65 72 65 20 69 73 20 61 20 73 69 6d 70 6c 65 20 73 file.to.get,.there.is.a.simple.s
43980 6f 6c 75 74 69 6f 6e 20 3a 0d 0a 72 65 71 75 69 72 65 20 27 6f 70 65 6e 2d 75 72 69 27 0d 0a 6f olution.:..require.'open-uri'..o
439a0 70 65 6e 28 22 66 74 70 3a 2f 2f 77 77 77 2e 72 75 62 79 2d 6c 61 6e 67 2e 6f 72 67 2f 70 61 74 pen("ftp://www.ruby-lang.org/pat
439c0 68 2f 66 69 6c 65 6e 61 6d 65 22 29 20 64 6f 20 7c 66 68 7c 0d 0a 20 20 20 20 23 20 72 65 61 64 h/filename").do.|fh|......#.read
439e0 20 66 72 6f 6d 20 66 69 6c 65 68 61 6e 64 6c 65 20 66 68 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d .from.filehandle.fh..end..#-----
43a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
43a20 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 74 6f 20 77 61 69 74 20 61 20 64 65 66 69 6e 65 64 20 74 69 6d -------..#.to.wait.a.defined.tim
43a40 65 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 23 20 75 73 65 20 74 68 65 e.for.the.connection,..#.use.the
43a60 20 74 69 6d 65 6f 75 74 20 6d 6f 64 75 6c 65 0d 0a 72 65 71 75 69 72 65 20 27 74 69 6d 65 6f 75 .timeout.module..require.'timeou
43a80 74 27 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 74 69 6d 65 6f 75 74 28 33 30 29 7b 0d 0a 20 20 20 t'..begin......timeout(30){.....
43aa0 20 20 20 20 20 66 74 70 20 3d 20 4e 65 74 3a 3a 46 54 50 3a 3a 6e 65 77 28 22 66 74 70 2e 68 6f .....ftp.=.Net::FTP::new("ftp.ho
43ac0 73 74 2e 63 6f 6d 22 29 0d 0a 20 20 20 20 20 20 20 20 66 74 70 2e 64 65 62 75 67 5f 6d 6f 64 65 st.com")..........ftp.debug_mode
43ae0 20 3d 20 74 72 75 65 0d 0a 20 20 20 20 7d 0d 0a 72 65 73 63 75 65 20 4e 65 74 3a 3a 46 54 50 45 .=.true......}..rescue.Net::FTPE
43b00 72 72 6f 72 0d 0a 20 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 73 20 22 43 6f 75 6c 64 6e 27 74 rror......$stderr.puts."Couldn't
43b20 20 63 6f 6e 6e 65 63 74 2e 22 0d 0a 72 65 73 63 75 65 20 54 69 6d 65 6f 75 74 3a 3a 45 72 72 6f .connect."..rescue.Timeout::Erro
43b40 72 0d 0a 20 20 20 20 24 73 74 64 65 72 72 2e 70 75 74 73 20 22 54 69 6d 65 6f 75 74 20 77 68 69 r......$stderr.puts."Timeout.whi
43b60 6c 65 20 63 6f 6e 6e 65 63 74 69 6e 67 20 74 6f 20 73 65 72 76 65 72 2e 22 0d 0a 65 6e 64 0d 0a le.connecting.to.server."..end..
43b80 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 66 74 70 2e 6c 6f 67 69 6e 28 29 0d 0a 72 65 73 63 75 65 ..begin......ftp.login()..rescue
43ba0 20 4e 65 74 3a 3a 46 54 50 45 72 72 6f 72 0d 0a 20 20 20 20 24 73 74 64 65 72 72 2e 70 72 69 6e .Net::FTPError......$stderr.prin
43bc0 74 20 22 43 6f 75 6c 64 6e 27 74 20 61 75 74 68 65 6e 74 69 66 69 63 61 74 65 2e 5c 6e 22 0d 0a t."Couldn't.authentificate.\n"..
43be0 65 6e 64 0d 0a 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 66 74 70 2e 6c 6f 67 69 6e 28 75 73 65 72 end....begin......ftp.login(user
43c00 6e 61 6d 65 29 0d 0a 72 65 73 63 75 65 20 4e 65 74 3a 3a 46 54 50 45 72 72 6f 72 0d 0a 20 20 20 name)..rescue.Net::FTPError.....
43c20 20 24 73 74 64 65 72 72 2e 70 72 69 6e 74 20 22 53 74 69 6c 6c 20 63 6f 75 6c 64 6e 27 74 20 61 .$stderr.print."Still.couldn't.a
43c40 75 74 68 65 6e 74 69 63 61 74 65 2e 5c 6e 22 0d 0a 65 6e 64 0d 0a 0d 0a 62 65 67 69 6e 0d 0a 20 uthenticate.\n"..end....begin...
43c60 20 20 20 66 74 70 2e 6c 6f 67 69 6e 28 75 73 65 72 6e 61 6d 65 2c 20 70 61 73 73 77 6f 72 64 29 ...ftp.login(username,.password)
43c80 0d 0a 72 65 73 63 75 65 20 4e 65 74 3a 3a 46 54 50 45 72 72 6f 72 0d 0a 20 20 20 20 24 73 74 64 ..rescue.Net::FTPError......$std
43ca0 65 72 72 2e 70 72 69 6e 74 20 22 43 6f 75 6c 64 6e 27 74 20 61 75 74 68 65 6e 74 69 63 61 74 65 err.print."Couldn't.authenticate
43cc0 2c 20 65 76 65 6e 20 77 69 74 68 20 65 78 70 6c 69 63 69 74 0d 0a 20 20 20 20 75 73 65 72 6e 61 ,.even.with.explicit......userna
43ce0 6d 65 20 61 6e 64 20 70 61 73 73 77 6f 72 64 2e 5c 6e 22 0d 0a 65 6e 64 0d 0a 0d 0a 62 65 67 69 me.and.password.\n"..end....begi
43d00 6e 0d 0a 20 20 20 20 66 74 70 2e 6c 6f 67 69 6e 28 75 73 65 72 6e 61 6d 65 2c 20 70 61 73 73 77 n......ftp.login(username,.passw
43d20 6f 72 64 2c 20 61 63 63 6f 75 6e 74 29 0d 0a 72 65 73 63 75 65 20 4e 65 74 3a 3a 46 54 50 45 72 ord,.account)..rescue.Net::FTPEr
43d40 72 6f 72 0d 0a 20 20 20 20 24 73 74 64 65 72 72 2e 70 72 69 6e 74 20 22 4e 6f 20 64 69 63 65 2e ror......$stderr.print."No.dice.
43d60 20 49 74 20 68 61 74 65 73 20 6d 65 2e 5c 6e 22 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d .It.hates.me.\n"..end..#--------
43d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 66 74 70 2e 70 75 74 28 6c ---------------------..ftp.put(l
43da0 6f 63 61 6c 66 69 6c 65 2c 20 72 65 6d 6f 74 65 66 69 6c 65 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d ocalfile,.remotefile)..#--------
43dc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 53 65 6e 64 69 6e 67 ---------------------..#.Sending
43de0 20 64 61 74 61 20 66 72 6f 6d 20 53 54 44 49 4e 20 69 73 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 .data.from.STDIN.is.not.directly
43e00 20 73 75 70 70 6f 72 74 65 64 0d 0a 23 20 62 79 20 74 68 65 20 66 74 70 20 6c 69 62 72 61 72 79 .supported..#.by.the.ftp.library
43e20 20 6d 6f 64 75 6c 65 2e 20 41 20 70 6f 73 73 69 62 6c 65 20 77 61 79 20 74 6f 20 64 6f 20 69 74 .module..A.possible.way.to.do.it
43e40 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 0d 0a 23 20 73 74 6f 72 6c 69 6e 65 73 20 6d 65 74 68 .is.to.use.the..#.storlines.meth
43e60 6f 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20 73 65 6e 64 20 72 61 77 20 63 6f 6d 6d 61 6e 64 73 od.directly.to.send.raw.commands
43e80 20 74 6f 20 74 68 65 20 66 74 70 20 73 65 72 76 65 72 2e 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .to.the.ftp.server...#----------
43ea0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 66 74 70 2e 67 65 74 28 72 65 6d -------------------..ftp.get(rem
43ec0 6f 74 65 66 69 6c 65 2c 20 6c 6f 63 61 6c 66 69 6c 65 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d otefile,.localfile)..#----------
43ee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 66 74 70 2e 67 65 74 28 72 65 6d -------------------..ftp.get(rem
43f00 6f 74 65 66 69 6c 65 29 20 7b 20 7c 64 61 74 61 7c 20 70 75 74 73 20 64 61 74 61 20 7d 0d 0a 23 otefile).{.|data|.puts.data.}..#
43f20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 66 -----------------------------..f
43f40 74 70 2e 63 68 64 69 72 28 22 2f 70 75 62 2f 72 75 62 79 22 29 0d 0a 70 72 69 6e 74 20 22 49 27 tp.chdir("/pub/ruby")..print."I'
43f60 6d 20 69 6e 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 22 2c 20 66 74 70 2e 70 77 64 28 29 2c m.in.the.directory.",.ftp.pwd(),
43f80 20 22 5c 6e 22 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ."\n"..#------------------------
43fa0 2d 2d 2d 2d 2d 0d 0a 66 74 70 2e 6d 6b 64 69 72 28 22 2f 70 75 62 2f 72 75 62 79 2f 6e 65 77 5f -----..ftp.mkdir("/pub/ruby/new_
43fc0 64 69 72 22 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d dir")..#------------------------
43fe0 2d 2d 2d 2d 2d 0d 0a 6c 69 6e 65 73 20 3d 20 66 74 70 2e 6c 73 28 22 2f 70 75 62 2f 72 75 62 79 -----..lines.=.ftp.ls("/pub/ruby
44000 2f 22 29 0d 0a 23 20 3d 3e 20 5b 22 64 72 77 78 72 2d 78 72 2d 78 20 32 20 6d 61 74 7a 20 75 73 /")..#.=>.["drwxr-xr-x.2.matz.us
44020 65 72 73 20 34 30 39 36 20 4a 75 6c 79 20 31 37 20 31 39 39 38 20 31 2e 30 22 2c 20 2e 2e 2e 20 ers.4096.July.17.1998.1.0",.....
44040 5d 0d 0a 0d 0a 6c 61 74 65 73 74 20 3d 20 66 74 70 2e 64 69 72 28 22 2f 70 75 62 2f 72 75 62 79 ]....latest.=.ftp.dir("/pub/ruby
44060 2f 2a 2e 74 67 7a 22 29 2e 73 6f 72 74 2e 6c 61 73 74 0d 0a 0d 0a 66 74 70 2e 6e 6c 73 74 28 22 /*.tgz").sort.last....ftp.nlst("
44080 2f 70 75 62 2f 72 75 62 79 22 29 0d 0a 23 20 3d 3e 20 5b 22 2f 70 75 62 2f 72 75 62 79 2f 31 2e /pub/ruby")..#.=>.["/pub/ruby/1.
440a0 30 22 2c 20 2e 2e 2e 20 5d 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0",.....]..#--------------------
440c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 66 74 70 2e 71 75 69 74 28 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 ---------..ftp.quit()......#.@@P
440e0 4c 45 41 43 40 40 5f 31 38 2e 36 0d 0a 72 65 71 75 69 72 65 20 27 6e 65 74 2f 74 65 6c 6e 65 74 LEAC@@_18.6..require.'net/telnet
44100 27 0d 0a 74 20 3d 20 4e 65 74 3a 3a 54 65 6c 6e 65 74 3a 3a 6e 65 77 28 20 22 54 69 6d 65 6f 75 '..t.=.Net::Telnet::new(."Timeou
44120 74 22 20 3d 3e 20 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t".=>.10,.......................
44140 20 22 50 72 6f 6d 70 74 22 20 20 3d 3e 20 2f 25 2f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ."Prompt"..=>./%/,..............
44160 20 20 20 20 20 20 20 20 20 20 22 48 6f 73 74 22 20 20 20 20 3d 3e 20 68 6f 73 74 20 29 0d 0a 74 .........."Host"....=>.host.)..t
44180 2e 6c 6f 67 69 6e 28 75 73 65 72 6e 61 6d 65 2c 20 70 61 73 73 77 6f 72 64 29 0d 0a 66 69 6c 65 .login(username,.password)..file
441a0 73 20 3d 20 74 2e 63 6d 64 28 22 6c 73 22 29 0d 0a 74 2e 70 72 69 6e 74 28 22 74 6f 70 22 29 0d s.=.t.cmd("ls")..t.print("top").
441c0 0a 70 72 6f 63 65 73 73 5f 73 74 72 69 6e 67 20 3d 20 74 2e 77 61 69 74 66 6f 72 28 2f 5c 64 2b .process_string.=.t.waitfor(/\d+
441e0 20 70 72 6f 63 65 73 73 65 73 2f 29 0d 0a 74 2e 63 6c 6f 73 65 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d .processes/)..t.close..#--------
44200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 5b 24 25 23 3e 5d 20 5c ---------------------../[$%#>].\
44220 7a 2f 6e 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d z/n..#--------------------------
44240 2d 2d 2d 0d 0a 23 20 49 6e 20 63 61 73 65 20 6f 66 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 65 20 ---..#.In.case.of.an.error,.the.
44260 74 65 6c 6e 65 74 20 6d 6f 64 75 6c 65 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f telnet.module.throws.an.exceptio
44280 6e 2e 0d 0a 23 20 46 6f 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f n...#.For.control.of.the.behavio
442a0 72 20 69 6e 20 63 61 73 65 20 6f 66 20 61 6e 20 65 72 72 6f 72 2c 0d 0a 23 20 79 6f 75 20 6a 75 r.in.case.of.an.error,..#.you.ju
442c0 73 74 20 6e 65 65 64 20 74 6f 20 63 61 74 63 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 st.need.to.catch.the.exceptions.
442e0 61 6e 64 20 64 6f 20 79 6f 75 72 20 63 75 73 74 6f 6d 0d 0a 23 20 65 72 72 6f 72 20 68 61 6e 64 and.do.your.custom..#.error.hand
44300 6c 69 6e 67 2e 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ling...#------------------------
44320 2d 2d 2d 2d 2d 0d 0a 62 65 67 69 6e 0d 0a 20 20 20 20 74 65 6c 6e 65 74 2e 6c 6f 67 69 6e 28 75 -----..begin......telnet.login(u
44340 73 65 72 6e 61 6d 65 2c 20 70 61 73 73 77 6f 72 64 29 0d 0a 72 65 73 63 75 65 20 54 69 6d 65 6f sername,.password)..rescue.Timeo
44360 75 74 45 72 72 6f 72 0d 0a 20 20 20 20 66 61 69 6c 20 22 4c 6f 67 69 6e 20 66 61 69 6c 65 64 20 utError......fail."Login.failed.
44380 21 5c 6e 22 0d 0a 65 6e 64 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d !\n"..end..#--------------------
443a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 74 65 6c 6e 65 74 2e 77 61 69 74 66 6f 72 28 27 2f 2d 2d 6d 6f ---------..telnet.waitfor('/--mo
443c0 72 65 2d 2d 2f 27 29 0d 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d re--/')..#----------------------
443e0 2d 2d 2d 2d 2d 2d 2d 0d 0a 74 65 6c 6e 65 74 2e 77 61 69 74 66 6f 72 28 53 74 72 69 6e 67 20 3d -------..telnet.waitfor(String.=
44400 3e 20 27 67 72 65 61 73 79 20 73 6d 6f 6b 65 27 2c 20 54 69 6d 65 6f 75 74 20 3d 3e 20 33 30 29 >.'greasy.smoke',.Timeout.=>.30)
44420 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 38 2e 37 0d 0a 72 65 71 75 69 72 65 20 ......#.@@PLEAC@@_18.7..require.
44440 27 70 69 6e 67 27 0d 0a 0d 0a 70 75 74 73 20 22 23 7b 68 6f 73 74 7d 20 69 73 20 61 6c 69 76 65 'ping'....puts."#{host}.is.alive
44460 2e 5c 6e 22 20 69 66 20 50 69 6e 67 2e 70 69 6e 67 65 63 68 6f 28 68 6f 73 74 29 3b 0d 0a 23 2d .\n".if.Ping.pingecho(host);..#-
44480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 ----------------------------..#.
444a0 74 68 65 20 70 69 6e 67 20 6d 6f 64 75 6c 65 20 6f 6e 6c 79 20 75 73 65 20 54 43 50 20 70 69 6e the.ping.module.only.use.TCP.pin
444c0 67 2c 20 6e 6f 74 20 49 43 4d 50 20 65 76 65 6e 20 69 66 20 77 65 20 61 72 65 20 72 6f 6f 74 0d g,.not.ICMP.even.if.we.are.root.
444e0 0a 69 66 20 50 69 6e 67 2e 70 69 6e 67 65 63 68 6f 28 22 6b 69 6e 67 6b 6f 6e 67 2e 63 6f 6d 22 .if.Ping.pingecho("kingkong.com"
44500 29 0d 0a 20 20 20 20 70 75 74 73 20 22 54 68 65 20 67 69 61 6e 74 20 61 70 65 20 6c 69 76 65 73 )......puts."The.giant.ape.lives
44520 21 5c 6e 22 3b 0d 0a 65 6c 73 65 0d 0a 20 20 20 20 70 75 74 73 20 22 41 6c 6c 20 68 61 69 6c 20 !\n";..else......puts."All.hail.
44540 6d 69 67 68 74 79 20 47 61 6d 65 72 61 2c 20 66 72 69 65 6e 64 20 6f 66 20 63 68 69 6c 64 72 65 mighty.Gamera,.friend.of.childre
44560 6e 21 5c 6e 22 3b 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 39 2e n!\n";..end......#.@@PLEAC@@_19.
44580 31 0d 0a 23 21 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 68 1..#!/usr/local/bin/ruby.-w..#.h
445a0 69 77 65 62 20 2d 20 6c 6f 61 64 20 43 47 49 20 63 6c 61 73 73 20 74 6f 20 64 65 63 6f 64 65 20 iweb.-.load.CGI.class.to.decode.
445c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 69 76 65 6e 20 62 79 20 77 65 62 20 73 65 72 76 65 72 0d information.given.by.web.server.
445e0 0a 0d 0a 72 65 71 75 69 72 65 20 27 63 67 69 27 0d 0a 0d 0a 63 67 69 20 3d 20 43 47 49 2e 6e 65 ...require.'cgi'....cgi.=.CGI.ne
44600 77 28 27 68 74 6d 6c 33 27 29 0d 0a 0d 0a 23 20 67 65 74 20 61 20 70 61 72 61 6d 65 74 65 72 20 w('html3')....#.get.a.parameter.
44620 66 72 6f 6d 20 61 20 66 6f 72 6d 0d 0a 76 61 6c 75 65 20 3d 20 63 67 69 2e 70 61 72 61 6d 73 5b from.a.form..value.=.cgi.params[
44640 27 50 41 52 41 4d 5f 4e 41 4d 45 27 5d 5b 30 5d 0d 0a 0d 0a 23 20 6f 75 74 70 75 74 20 61 20 64 'PARAM_NAME'][0]....#.output.a.d
44660 6f 63 75 6d 65 6e 74 0d 0a 63 67 69 2e 6f 75 74 20 7b 0d 0a 20 20 20 20 63 67 69 2e 68 74 6d 6c ocument..cgi.out.{......cgi.html
44680 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 67 69 2e 68 65 61 64 20 7b 20 63 67 69 2e 74 69 74 6c 65 .{..........cgi.head.{.cgi.title
446a0 20 7b 20 22 48 6f 77 64 79 20 74 68 65 72 65 21 22 20 7d 20 7d 20 2b 0d 0a 20 20 20 20 20 20 20 .{."Howdy.there!".}.}.+.........
446c0 20 20 20 20 20 63 67 69 2e 62 6f 64 79 20 7b 20 63 67 69 2e 70 20 7b 20 22 59 6f 75 20 74 79 70 .....cgi.body.{.cgi.p.{."You.typ
446e0 65 64 3a 20 22 20 2b 20 63 67 69 2e 74 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ed:.".+.cgi.tt.{................
44700 20 20 20 20 20 20 43 47 49 2e 65 73 63 61 70 65 48 54 4d 4c 28 76 61 6c 75 65 29 20 7d 20 7d 20 ......CGI.escapeHTML(value).}.}.
44720 7d 0d 0a 20 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 72 65 71 75 69 72 65 20 27 63 67 69 27 0d 0a 63 67 }......}..}....require.'cgi'..cg
44740 69 20 3d 20 43 47 49 2e 6e 65 77 0d 0a 77 68 6f 20 20 20 3d 20 63 67 69 2e 70 61 72 61 6d 5b 22 i.=.CGI.new..who...=.cgi.param["
44760 4e 61 6d 65 22 5d 5b 30 5d 20 20 20 20 20 23 20 66 69 72 73 74 20 70 61 72 61 6d 20 69 6e 20 6c Name"][0].....#.first.param.in.l
44780 69 73 74 0d 0a 70 68 6f 6e 65 20 3d 20 63 67 69 2e 70 61 72 61 6d 5b 22 4e 75 6d 62 65 72 22 5d ist..phone.=.cgi.param["Number"]
447a0 5b 30 5d 0d 0a 70 69 63 6b 73 20 3d 20 63 67 69 2e 70 61 72 61 6d 5b 22 43 68 6f 69 63 65 73 22 [0]..picks.=.cgi.param["Choices"
447c0 5d 20 20 20 20 20 23 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 0d 0a 0d 0a 70 72 69 6e 74 20 63 ].....#.complete.list....print.c
447e0 67 69 2e 68 65 61 64 65 72 28 20 27 74 79 70 65 27 20 3d 3e 20 27 74 65 78 74 2f 70 6c 61 69 6e gi.header(.'type'.=>.'text/plain
44800 27 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 65 78 70 69 72 65 73 27 20 ',....................'expires'.
44820 3d 3e 20 54 69 6d 65 2e 6e 6f 77 20 2b 20 28 33 20 2a 20 32 34 20 2a 20 36 30 20 2a 20 36 30 29 =>.Time.now.+.(3.*.24.*.60.*.60)
44840 20 29 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 39 2e 33 0d 0a 23 21 2f 75 73 72 .)......#.@@PLEAC@@_19.3..#!/usr
44860 2f 6c 6f 63 61 6c 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 77 65 62 77 68 6f 61 6d 69 20 /local/bin/ruby.-w..#.webwhoami.
44880 2d 20 73 68 6f 77 20 77 65 62 20 75 73 65 72 27 73 20 69 64 0d 0a 72 65 71 75 69 72 65 20 27 65 -.show.web.user's.id..require.'e
448a0 74 63 27 0d 0a 70 72 69 6e 74 20 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 tc'..print."Content-Type:.text/p
448c0 6c 61 69 6e 5c 6e 5c 6e 22 0d 0a 70 72 69 6e 74 20 22 52 75 6e 6e 69 6e 67 20 61 73 20 22 20 2b lain\n\n"..print."Running.as.".+
448e0 20 45 74 63 2e 67 65 74 70 77 75 69 64 2e 6e 61 6d 65 20 2b 20 22 5c 6e 22 0d 0a 0d 0a 23 20 25 .Etc.getpwuid.name.+."\n"....#.%
44900 20 72 75 62 79 20 2d 77 63 20 63 67 69 2d 73 63 72 69 70 74 20 20 20 20 20 23 20 6a 75 73 74 20 .ruby.-wc.cgi-script.....#.just.
44920 63 68 65 63 6b 20 73 79 6e 74 61 78 0d 0a 0d 0a 23 20 25 20 72 75 62 79 20 2d 77 20 20 63 67 69 check.syntax....#.%.ruby.-w..cgi
44940 2d 73 63 72 69 70 74 20 20 20 20 20 23 20 70 61 72 61 6d 73 20 66 72 6f 6d 20 73 74 64 69 6e 0d -script.....#.params.from.stdin.
44960 0a 23 20 28 6f 66 66 6c 69 6e 65 20 6d 6f 64 65 3a 20 65 6e 74 65 72 20 6e 61 6d 65 3d 76 61 6c .#.(offline.mode:.enter.name=val
44980 75 65 20 70 61 69 72 73 20 6f 6e 20 73 74 61 6e 64 61 72 64 20 69 6e 70 75 74 29 0d 0a 23 20 6e ue.pairs.on.standard.input)..#.n
449a0 61 6d 65 3d 6a 6f 65 0d 0a 23 20 6e 75 6d 62 65 72 3d 31 30 0d 0a 23 20 5e 44 0d 0a 0d 0a 23 20 ame=joe..#.number=10..#.^D....#.
449c0 25 20 72 75 62 79 20 2d 77 20 20 63 67 69 2d 73 63 72 69 70 74 20 6e 61 6d 65 3d 6a 6f 65 20 6e %.ruby.-w..cgi-script.name=joe.n
449e0 75 6d 62 65 72 3d 31 30 20 20 20 20 20 23 20 72 75 6e 20 77 69 74 68 20 6d 6f 63 6b 20 66 6f 72 umber=10.....#.run.with.mock.for
44a00 6d 20 69 6e 70 75 74 0d 0a 23 20 25 20 72 75 62 79 20 2d 64 20 20 63 67 69 2d 73 63 72 69 70 74 m.input..#.%.ruby.-d..cgi-script
44a20 20 6e 61 6d 65 3d 6a 6f 65 20 6e 75 6d 62 65 72 3d 31 30 20 20 20 20 20 23 20 64 69 74 74 6f 2c .name=joe.number=10.....#.ditto,
44a40 20 75 6e 64 65 72 20 74 68 65 20 64 65 62 75 67 67 65 72 0d 0a 0d 0a 23 20 50 4f 53 54 20 6d 65 .under.the.debugger....#.POST.me
44a60 74 68 6f 64 20 73 63 72 69 70 74 20 69 6e 20 63 73 68 0d 0a 23 20 25 20 28 73 65 74 65 6e 76 20 thod.script.in.csh..#.%.(setenv.
44a80 48 54 54 50 5f 4d 45 54 48 4f 44 20 50 4f 53 54 3b 20 72 75 62 79 20 2d 77 20 63 67 69 2d 73 63 HTTP_METHOD.POST;.ruby.-w.cgi-sc
44aa0 72 69 70 74 20 6e 61 6d 65 3d 6a 6f 65 20 6e 75 6d 62 65 72 3d 31 30 29 0d 0a 23 20 50 4f 53 54 ript.name=joe.number=10)..#.POST
44ac0 20 6d 65 74 68 6f 64 20 73 63 72 69 70 74 20 69 6e 20 73 68 0d 0a 23 20 25 20 48 54 54 50 5f 4d .method.script.in.sh..#.%.HTTP_M
44ae0 45 54 48 4f 44 3d 50 4f 53 54 20 70 65 72 6c 20 2d 77 20 63 67 69 2d 73 63 72 69 70 74 20 6e 61 ETHOD=POST.perl.-w.cgi-script.na
44b00 6d 65 3d 6a 6f 65 20 6e 75 6d 62 65 72 3d 31 30 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 me=joe.number=10......#.@@PLEAC@
44b20 40 5f 31 39 2e 34 0d 0a 23 20 72 75 62 79 20 68 61 73 20 73 65 76 65 72 61 6c 20 73 65 63 75 72 @_19.4..#.ruby.has.several.secur
44b40 69 74 79 20 6c 65 76 65 6c 73 2c 20 74 68 65 20 6c 65 76 65 6c 20 22 31 22 20 69 73 20 73 69 6d ity.levels,.the.level."1".is.sim
44b60 69 6c 61 72 20 74 6f 20 70 65 72 6c 73 20 74 61 69 6e 74 20 6d 6f 64 65 2e 0d 0a 23 20 49 74 20 ilar.to.perls.taint.mode...#.It.
44b80 63 61 6e 20 62 65 20 73 77 69 74 63 68 65 64 20 6f 6e 20 62 79 20 70 72 6f 76 69 64 69 6e 67 20 can.be.switched.on.by.providing.
44ba0 74 68 65 20 2d 54 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 61 72 61 6d 65 74 65 72 0d 0a 23 the.-T.command.line.parameter..#
44bc0 20 6f 72 20 62 79 20 73 65 74 74 69 6e 67 20 24 53 41 46 45 20 74 6f 20 31 2e 20 53 65 74 74 69 .or.by.setting.$SAFE.to.1..Setti
44be0 6e 67 20 24 53 41 46 45 20 74 6f 20 32 2c 33 20 6f 72 20 34 20 72 65 73 74 72 69 63 74 73 20 70 ng.$SAFE.to.2,3.or.4.restricts.p
44c00 6f 73 73 69 62 6c 65 0d 0a 23 20 68 61 72 6d 66 75 6c 20 6f 70 65 72 61 74 69 6f 6e 73 20 66 75 ossible..#.harmful.operations.fu
44c20 72 74 68 65 72 2e 0d 0a 0d 0a 23 21 2f 75 73 72 2f 62 69 6e 2f 72 75 62 79 20 2d 54 0d 0a 24 53 rther.....#!/usr/bin/ruby.-T..$S
44c40 41 46 45 20 3d 20 31 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 41 52 47 56 5b 30 5d 2c 20 22 77 22 29 AFE.=.1..File.open(ARGV[0],."w")
44c60 0d 0a 23 20 72 75 62 79 20 77 61 72 6e 73 20 77 69 74 68 3a 0d 0a 23 20 74 61 69 6e 74 31 2e 72 ..#.ruby.warns.with:..#.taint1.r
44c80 62 3a 32 3a 69 6e 20 60 69 6e 69 74 69 61 6c 69 7a 65 27 3a 20 49 6e 73 65 63 75 72 65 20 6f 70 b:2:in.`initialize':.Insecure.op
44ca0 65 72 61 74 69 6f 6e 20 2d 20 69 6e 69 74 69 61 6c 69 7a 65 20 28 53 65 63 75 72 69 74 79 45 72 eration.-.initialize.(SecurityEr
44cc0 72 6f 72 29 0d 0a 0d 0a 24 53 41 46 45 20 3d 20 31 0d 0a 66 69 6c 65 20 3d 20 41 52 47 56 5b 30 ror)....$SAFE.=.1..file.=.ARGV[0
44ce0 5d 0d 0a 75 6e 6c 65 73 73 20 2f 5e 28 5b 5c 77 2e 2d 5d 2b 29 24 2f 2e 6d 61 74 63 68 28 66 69 ]..unless./^([\w.-]+)$/.match(fi
44d00 6c 65 29 0d 0a 20 20 20 20 72 61 69 73 65 20 22 66 69 6c 65 6e 61 6d 65 20 23 7b 66 69 6c 65 7d le)......raise."filename.#{file}
44d20 20 68 61 73 20 69 6e 76 61 6c 69 64 20 63 68 61 72 61 63 74 65 72 73 22 0d 0a 65 6e 64 0d 0a 66 .has.invalid.characters"..end..f
44d40 69 6c 65 20 3d 20 24 31 0d 0a 23 20 49 6e 20 72 75 62 79 2c 20 65 76 65 6e 20 74 68 65 20 62 61 ile.=.$1..#.In.ruby,.even.the.ba
44d60 63 6b 20 72 65 66 65 72 65 6e 63 65 20 66 72 6f 6d 20 61 20 72 65 67 75 6c 61 72 20 65 78 70 72 ck.reference.from.a.regular.expr
44d80 65 73 73 69 6f 6e 20 73 74 61 79 73 20 74 61 69 6e 74 65 64 2e 0d 0a 23 20 79 6f 75 20 6e 65 65 ession.stays.tainted...#.you.nee
44da0 64 20 74 6f 20 65 78 70 6c 69 63 69 74 6c 79 20 75 6e 74 61 69 6e 74 20 74 68 65 20 76 61 72 69 d.to.explicitly.untaint.the.vari
44dc0 61 62 6c 65 3a 0d 0a 66 69 6c 65 2e 75 6e 74 61 69 6e 74 0d 0a 46 69 6c 65 2e 6f 70 65 6e 28 66 able:..file.untaint..File.open(f
44de0 69 6c 65 2c 20 22 77 22 29 0d 0a 0d 0a 23 20 52 61 63 65 20 63 6f 6e 64 69 74 69 6f 6e 20 65 78 ile,."w")....#.Race.condition.ex
44e00 69 73 74 73 20 6c 69 6b 65 20 69 6e 20 70 65 72 6c 3a 0d 0a 75 6e 6c 65 73 73 20 46 69 6c 65 2e ists.like.in.perl:..unless.File.
44e20 65 78 69 73 74 73 28 66 69 6c 65 6e 61 6d 65 29 20 20 20 20 20 20 20 20 23 20 57 72 6f 6e 67 20 exists(filename)........#.Wrong.
44e40 62 65 63 61 75 73 65 20 6f 66 20 72 61 63 65 20 63 6f 6e 64 69 74 69 6f 6e 0d 0a 20 20 20 20 46 because.of.race.condition......F
44e60 69 6c 65 2e 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 20 22 77 22 29 0d 0a 65 6e 64 0d 0a 0d 0a ile.open(filename,."w")..end....
44e80 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 31 39 2e 31 30 0d 0a 70 72 65 66 65 72 65 6e 63 ....#.@@PLEAC@@_19.10..preferenc
44ea0 65 5f 76 61 6c 75 65 20 3d 20 63 67 69 2e 63 6f 6f 6b 69 65 73 5b 22 70 72 65 66 65 72 65 6e 63 e_value.=.cgi.cookies["preferenc
44ec0 65 20 6e 61 6d 65 22 5d 5b 30 5d 0d 0a 0d 0a 70 61 63 6b 65 64 5f 63 6f 6f 6b 69 65 20 3d 20 43 e.name"][0]....packed_cookie.=.C
44ee0 47 49 3a 3a 43 6f 6f 6b 69 65 2e 6e 65 77 28 22 6e 61 6d 65 22 20 3d 3e 20 22 70 72 65 66 65 72 GI::Cookie.new("name".=>."prefer
44f00 65 6e 63 65 20 6e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ence.name",.....................
44f20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76 61 6c 75 65 22 20 3d 3e 20 22 77 68 61 74 65 76 65 ............."value".=>."whateve
44f40 72 20 79 6f 75 27 64 20 6c 69 6b 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 r.you'd.like",..................
44f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78 70 69 72 65 73 22 20 3d 3e 20 54 69 6d ................"expires".=>.Tim
44f80 65 2e 6c 6f 63 61 6c 28 54 69 6d 65 2e 6e 6f 77 2e 79 65 61 72 20 2b 20 32 2c 0d 0a 20 20 20 20 e.local(Time.now.year.+.2,......
44fa0 54 69 6d 65 2e 6e 6f 77 2e 6d 6f 6e 2c 20 54 69 6d 65 2e 6e 6f 77 2e 64 61 79 2c 20 54 69 6d 65 Time.now.mon,.Time.now.day,.Time
44fc0 2e 6e 6f 77 2e 68 6f 75 72 2c 20 54 69 6d 65 2e 6e 6f 77 2e 6d 69 6e 2c 20 54 69 6d 65 2e 6e 6f .now.hour,.Time.now.min,.Time.no
44fe0 77 2e 73 65 63 29 20 29 0d 0a 0d 0a 63 67 69 2e 68 65 61 64 65 72 28 22 63 6f 6f 6b 69 65 22 20 w.sec).)....cgi.header("cookie".
45000 3d 3e 20 5b 70 61 63 6b 65 64 5f 63 6f 6f 6b 69 65 5d 29 0d 0a 0d 0a 23 21 2f 75 73 72 2f 6c 6f =>.[packed_cookie])....#!/usr/lo
45020 63 61 6c 2f 62 69 6e 2f 72 75 62 79 20 2d 77 0d 0a 23 20 69 63 5f 63 6f 6f 6b 69 65 73 20 2d 20 cal/bin/ruby.-w..#.ic_cookies.-.
45040 73 61 6d 70 6c 65 20 43 47 49 20 73 63 72 69 70 74 20 74 68 61 74 20 75 73 65 73 20 61 20 63 6f sample.CGI.script.that.uses.a.co
45060 6f 6b 69 65 0d 0a 72 65 71 75 69 72 65 20 27 63 67 69 27 0d 0a 0d 0a 63 67 69 20 3d 20 43 47 49 okie..require.'cgi'....cgi.=.CGI
45080 2e 6e 65 77 28 27 68 74 6d 6c 33 27 29 0d 0a 0d 0a 63 6f 6f 6b 6e 61 6d 65 20 3d 20 22 66 61 76 .new('html3')....cookname.=."fav
450a0 6f 72 69 74 65 20 69 63 65 20 63 72 65 61 6d 22 0d 0a 66 61 76 6f 72 69 74 65 20 3d 20 63 67 69 orite.ice.cream"..favorite.=.cgi
450c0 2e 70 61 72 61 6d 73 5b 22 66 6c 61 76 6f 72 22 5d 5b 30 5d 0d 0a 74 61 73 74 79 20 20 20 20 3d .params["flavor"][0]..tasty....=
450e0 20 63 67 69 2e 63 6f 6f 6b 69 65 73 5b 63 6f 6f 6b 6e 61 6d 65 5d 5b 30 5d 20 7c 7c 20 27 6d 69 .cgi.cookies[cookname][0].||.'mi
45100 6e 74 27 0d 0a 0d 0a 75 6e 6c 65 73 73 20 66 61 76 6f 72 69 74 65 0d 0a 20 20 20 20 63 67 69 2e nt'....unless.favorite......cgi.
45120 6f 75 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 67 69 2e 68 74 6d 6c 20 7b 0d 0a 20 20 20 20 20 out.{..........cgi.html.{.......
45140 20 20 20 20 20 20 20 63 67 69 2e 68 65 61 64 20 7b 20 63 67 69 2e 74 69 74 6c 65 20 7b 20 22 49 .......cgi.head.{.cgi.title.{."I
45160 63 65 20 43 6f 6f 6b 69 65 73 22 20 7d 20 7d 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 ce.Cookies".}.}.+..............c
45180 67 69 2e 62 6f 64 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 67 69 2e 68 gi.body.{..................cgi.h
451a0 31 20 7b 20 22 48 65 6c 6c 6f 20 49 63 65 20 43 72 65 61 6d 22 20 7d 20 2b 0d 0a 20 20 20 20 20 1.{."Hello.Ice.Cream".}.+.......
451c0 20 20 20 20 20 20 20 20 20 20 20 63 67 69 2e 68 72 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ...........cgi.hr.+.............
451e0 20 20 20 20 20 63 67 69 2e 66 6f 72 6d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .....cgi.form.{.................
45200 20 20 20 20 20 63 67 69 2e 70 20 7b 20 22 50 6c 65 61 73 65 20 73 65 6c 65 63 74 20 61 20 66 6c .....cgi.p.{."Please.select.a.fl
45220 61 76 6f 72 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 avor:.".+.......................
45240 20 20 20 20 20 20 20 63 67 69 2e 74 65 78 74 5f 66 69 65 6c 64 28 22 66 6c 61 76 6f 72 22 2c 20 .......cgi.text_field("flavor",.
45260 74 61 73 74 79 20 29 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 2b 0d 0a tasty.).}..................}.+..
45280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 67 69 2e 68 72 0d 0a 20 20 20 20 20 20 20 20 ................cgi.hr..........
452a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 65 6c 73 65 0d 0a 20 ....}..........}......}..else...
452c0 20 20 20 63 6f 6f 6b 69 65 20 3d 20 43 47 49 3a 3a 43 6f 6f 6b 69 65 2e 6e 65 77 28 20 22 6e 61 ...cookie.=.CGI::Cookie.new(."na
452e0 6d 65 22 20 20 20 20 3d 3e 20 63 6f 6f 6b 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me"....=>.cookname,.............
45300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76 61 6c 75 65 22 20 20 20 3d 3e 20 ..................."value"...=>.
45320 66 61 76 6f 72 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 favorite,.......................
45340 20 20 20 20 20 20 20 20 20 22 65 78 70 69 72 65 73 22 20 3d 3e 20 54 69 6d 65 2e 6c 6f 63 61 6c ........."expires".=>.Time.local
45360 28 54 69 6d 65 2e 6e 6f 77 2e 79 65 61 72 20 2b 20 32 2c 0d 0a 54 69 6d 65 2e 6e 6f 77 2e 6d 6f (Time.now.year.+.2,..Time.now.mo
45380 6e 2c 20 54 69 6d 65 2e 6e 6f 77 2e 64 61 79 2c 20 54 69 6d 65 2e 6e 6f 77 2e 68 6f 75 72 2c 20 n,.Time.now.day,.Time.now.hour,.
453a0 54 69 6d 65 2e 6e 6f 77 2e 6d 69 6e 2c 20 54 69 6d 65 2e 6e 6f 77 2e 73 65 63 29 20 29 0d 0a 20 Time.now.min,.Time.now.sec).)...
453c0 20 20 20 63 67 69 2e 6f 75 74 28 22 63 6f 6f 6b 69 65 22 20 3d 3e 20 5b 63 6f 6f 6b 69 65 5d 29 ...cgi.out("cookie".=>.[cookie])
453e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 67 69 2e 68 74 6d 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 .{..........cgi.html.{..........
45400 20 20 20 20 63 67 69 2e 68 65 61 64 20 7b 20 63 67 69 2e 74 69 74 6c 65 20 7b 20 22 49 63 65 20 ....cgi.head.{.cgi.title.{."Ice.
45420 43 6f 6f 6b 69 65 73 22 20 7d 20 7d 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 67 69 2e Cookies".}.}.+..............cgi.
45440 62 6f 64 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 67 69 2e 68 31 20 7b body.{..................cgi.h1.{
45460 20 22 48 65 6c 6c 6f 20 49 63 65 20 43 72 65 61 6d 22 20 7d 20 2b 0d 0a 20 20 20 20 20 20 20 20 ."Hello.Ice.Cream".}.+..........
45480 20 20 20 20 20 20 20 20 63 67 69 2e 70 20 7b 20 22 59 6f 75 20 63 68 6f 73 65 20 61 73 20 79 6f ........cgi.p.{."You.chose.as.yo
454a0 75 72 20 66 61 76 6f 72 69 74 65 20 66 6c 61 76 6f 72 20 60 23 7b 66 61 76 6f 72 69 74 65 7d 27 ur.favorite.flavor.`#{favorite}'
454c0 2e 22 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a .".}..............}..........}..
454e0 20 20 20 20 7d 0d 0a 65 6e 64 0d 0a 0d 0a 0d 0a 23 20 40 40 50 4c 45 41 43 40 40 5f 32 30 2e 39 ....}..end......#.@@PLEAC@@_20.9
45500 0d 0a 64 65 66 20 74 65 6d 70 6c 61 74 65 66 69 6c 65 28 66 69 6c 65 6e 61 6d 65 2c 20 66 69 6c ..def.templatefile(filename,.fil
45520 6c 69 6e 67 73 29 0d 0a 20 20 20 20 61 46 69 6c 65 20 3d 20 46 69 6c 65 2e 6e 65 77 28 66 69 6c lings)......aFile.=.File.new(fil
45540 65 6e 61 6d 65 2c 20 22 72 22 29 0d 0a 20 20 20 20 74 65 78 74 20 3d 20 61 46 69 6c 65 2e 72 65 ename,."r")......text.=.aFile.re
45560 61 64 28 29 0d 0a 20 20 20 20 61 46 69 6c 65 2e 63 6c 6f 73 65 28 29 0d 0a 20 20 20 20 70 61 74 ad()......aFile.close()......pat
45580 74 65 72 6e 20 3d 20 52 65 67 65 78 70 2e 6e 65 77 28 27 25 25 28 2e 2a 3f 29 25 25 27 29 0d 0a tern.=.Regexp.new('%%(.*?)%%')..
455a0 20 20 20 20 74 65 78 74 2e 67 73 75 62 21 28 70 61 74 74 65 72 6e 29 20 7b 0d 0a 20 20 20 20 20 ....text.gsub!(pattern).{.......
455c0 20 20 20 66 69 6c 6c 69 6e 67 73 5b 24 31 5d 20 7c 7c 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 ...fillings[$1].||.""......}....
455e0 20 20 74 65 78 74 0d 0a 65 6e 64 0d 0a 0d 0a 66 69 65 6c 64 73 20 3d 20 7b 0d 0a 20 20 20 20 27 ..text..end....fields.=.{......'
45600 75 73 65 72 6e 61 6d 65 27 20 3d 3e 20 77 68 61 74 73 5f 68 69 73 5f 6e 61 6d 65 2c 0d 0a 20 20 username'.=>.whats_his_name,....
45620 20 20 27 63 6f 75 6e 74 27 20 3d 3e 20 6c 6f 67 69 6e 5f 63 6f 75 6e 74 2c 0d 0a 20 20 20 20 27 ..'count'.=>.login_count,......'
45640 74 6f 74 61 6c 27 20 3d 3e 20 6d 69 6e 75 74 65 73 5f 75 73 65 64 0d 0a 7d 0d 0a 70 75 74 73 20 total'.=>.minutes_used..}..puts.
45660 74 65 6d 70 6c 61 74 65 66 69 6c 65 28 27 73 69 6d 70 6c 65 2e 74 65 6d 70 6c 61 74 65 27 2c 20 templatefile('simple.template',.
45680 66 69 65 6c 64 73 29 0d 0a 0d 0a 23 20 40 40 49 4e 43 4f 4d 50 4c 45 54 45 40 40 0d 0a 23 20 41 fields)....#.@@INCOMPLETE@@..#.A
456a0 6e 20 65 78 61 6d 70 6c 65 20 75 73 69 6e 67 20 64 61 74 61 62 61 73 65 73 20 69 73 20 6d 69 73 n.example.using.databases.is.mis
456c0 73 69 6e 67 0d 0a 0d 0a sing....