÷Āę{NÅ Ł”7c:Schema’’’’’’’’Hobbits ’’’’’’’’Overview ’’’’’’’’’’’’½ż+ˆß’æ’’’’’Š7ĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ_œs9Bm,ĶĶĶ c ’’’’ĶĶĶĶ’’’’ĶĶĶĶÅ’ĶĶ’’’’ĶĶĶĶ6JSurviving’ĶĶ’’’’ĶĶĶ͇DTopLegIncr † ’ĶĶ’’’’ĶĶĶĶDSex " ’ĶĶ’’’’ĶĶĶ͉DBotLegIncr ˆ ’ĶĶ’’’’ĶĶĶĶ7J Poor’ĶĶ’’’’ĶĶĶ͌FBuildDisplay ‹ Š ’ĶĶ’’’’ĶĶĶĶDAgeString   ’ĶĶ’’’’ĶĶĶĶFIterate ~ Ž  ’ĶĶ’’’’ĶĶĶĶ8?Family€' 9  :  ż ’ĶĶ’’’’ĶĶĶĶ’FSetIncr ‘  ’ĶĶ’’’’ĶĶĶĶDFamilies ž ’ĶĶ’’’’ĶĶĶĶ“?DancerShape€' ”  • ‚ –   ’ĶĶ’’’’ĶĶĶĶ;D Title ’ĶĶ’’’’ĶĶĶĶ—DDataObject  ’ĶĶ’’’’ĶĶĶĶDMoneyString   ’ĶĶ’’’’ĶĶĶ͘DArmTopL <’ĶĶ’’’’ĶĶĶĶ<DTopOfTree  ’ĶĶ’’’’ĶĶĶĶ™DElbowL <’ĶĶ’’’’ĶĶĶĶD Title & ’ĶĶ’’’’ĶĶĶ͚DLegTopL <’ĶĶ’’’’ĶĶĶĶpM Tree ? ’ĶĶ’’’’ĶĶĶĶ›D KneeL <’ĶĶ’’’’ĶĶĶĶ!HCheckParents  ’ĶĶ’’’’ĶĶĶ͜DArmTopR <’ĶĶ’’’’ĶĶĶĶ@?TreeDiagram€' A  B ~ C ’ĶĶ’’’’ĶĶĶĶDElbowR <’ĶĶ’’’’ĶĶĶĶ=sILly Model  > ģ €('  ö          ’ĶĶ’’’’ĶĶĶĶžDLegTopR <’ĶĶ’’’’ĶĶĶĶDDFamilyList ’ Families’ĶĶ’’’’ĶĶĶ͟D KneeR <’ĶĶ’’’’ĶĶĶĶ"ASexEnum€' # ’ĶĶ’’’’ĶĶĶĶ”DArmTopAngle   ’ĶĶ’’’’ĶĶĶĶFDFirstTime E ’ĶĶ’’’’ĶĶĶĶ£DArmBotAngle ¢ ’ĶĶ’’’’ĶĶĶĶDFather  ’ĶĶ’’’’ĶĶĶĶ„DLegTopAngle ¤ ’ĶĶ’’’’ĶĶĶĶGDPersons ü ’ĶĶ’’’’ĶĶĶͧDLegBotAngle ¦ ’ĶĶ’’’’ĶĶĶĶ$J Male’ĶĶ’’’’ĶĶĶĶ«F SetUp Ŗ Ø ’ĶĶ’’’’ĶĶĶĶIDShowMoney H ’ĶĶ’’’’ĶĶĶĶ©Ip  ’ĶĶ’’’’ĶĶĶĶD&PeopleWithChildren ū   ’ĶĶ’’’’ĶĶĶͲF Move ± ¬ ’ĶĶ’’’’ĶĶĶĶLFBuildDisplay K J ’ĶĶ’’’’ĶĶĶĶ­Ita’ĶĶ’’’’ĶĶĶĶ%JFemale’ĶĶ’’’’ĶĶĶĶ®Iba’ĶĶ’’’’ĶĶĶĶM?PersonTree€' N  O € P @ ’ĶĶ’’’’ĶĶĶĶÆItl’ĶĶ’’’’ĶĶĶĶDMother  ’ĶĶ’’’’ĶĶĶͰIbl’ĶĶ’’’’ĶĶĶĶQDDataObject  ’ĶĶ’’’’ĶĶĶĶ“MDiagramShapes’ĶĶ’’’’ĶĶĶĶ&ATitleEnum€' ' ’ĶĶ’’’’ĶĶĶĶėMFlyingBoids µ ’ĶĶ’’’’ĶĶĶĶRDBox a ’ĶĶ’’’’ĶĶĶͶ? Boid€' ·  ø Ī   ’ĶĶ’’’’ĶĶĶĶ? Root€'    ’ĶĶ’’’’ĶĶĶ͹D PosX’ĶĶ’’’’ĶĶĶĶVF SetUp U S ’ĶĶ’’’’ĶĶĶĶŗD PosY’ĶĶ’’’’ĶĶĶĶ(JMr’ĶĶ’’’’ĶĶĶĶ»DMinDistX’ĶĶ’’’’ĶĶĶĶTIp  ’ĶĶ’’’’ĶĶĶͼDMinDistY’ĶĶ’’’’ĶĶĶĶDMarried  Married’ĶĶ’’’’ĶĶĶͽDBoundsX’ĶĶ’’’’ĶĶĶĶZFNewInContainer ~ Y W üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüklĪv­’ĶĶ’’’’ĶĶĶ;DBoundsY’ĶĶ’’’’ĶĶĶĶ)JMrs’ĶĶ’’’’ĶĶĶĶæDVelocityX’ĶĶ’’’’ĶĶĶĶXIDefName ’ĶĶ’’’’ĶĶĶĶĄDVelocityY’ĶĶ’’’’ĶĶĶĶ ?Person€'     ś ’ĶĶ’’’’ĶĶĶĶĆF SetUp Ā Į ’ĶĶ’’’’ĶĶĶĶ[AShowMoneyEnum€' \ ’ĶĶ’’’’ĶĶĶĶĘFMoveStep Å Ä ’ĶĶ’’’’ĶĶĶĶ*J Miss’ĶĶ’’’’ĶĶĶĶŹF KeepMinDistRule É Ē ’ĶĶ’’’’ĶĶĶĶ]JeDontShowMoney’ĶĶ’’’’ĶĶĶĶČIb ¶ ’ĶĶ’’’’ĶĶĶĶD Born’ĶĶ’’’’ĶĶĶĶĶFKeepInBounds Ģ Ė ’ĶĶ’’’’ĶĶĶĶ^JeShowMoney’ĶĶ’’’’ĶĶĶĶĪ?FlyingDiagBase€' Ļ  Š „ Ń ’ĶĶ’’’’ĶĶĶĶ+JSir’ĶĶ’’’’ĶĶĶĶŅD Boids  ’ĶĶ’’’’ĶĶĶĶ_?"HorzStripeSimple€' `  ’ĶĶ’’’’ĶĶĶĶÓDLeftBorder’ĶĶ’’’’ĶĶĶĶŌDTopBorder’ĶĶ’’’’ĶĶĶĶa?PersonShape€' b  c  d @ ’ĶĶ’’’’ĶĶĶĶÕD Width’ĶĶ’’’’ĶĶĶĶ,JDr’ĶĶ’’’’ĶĶĶĶÖDHeight’ĶĶ’’’’ĶĶĶĶeDDataObject  ’ĶĶ’’’’ĶĶĶĶ×DMinDist’ĶĶ’’’’ĶĶĶĶD Died’ĶĶ’’’’ĶĶĶĶŲDMaxSpeed’ĶĶ’’’’ĶĶĶĶfDExpandString ’ĶĶ’’’’ĶĶĶĶŁDNumber’ĶĶ’’’’ĶĶĶĶ-J Prof’ĶĶ’’’’ĶĶĶĶÜFBuildDisplay Ū Ś ’ĶĶ’’’’ĶĶĶĶlF SetUp k g ’ĶĶ’’’’ĶĶĶĶßFIterate ~ Ž Ż ’ĶĶ’’’’ĶĶĶĶ DSurname ’ĶĶ’’’’ĶĶĶĶą?DiagBoid€' į  ā … ć ’ĶĶ’’’’ĶĶĶĶhIp  ’ĶĶ’’’’ĶĶĶĶäD Boid ¶ ’ĶĶ’’’’ĶĶĶĶ.J Lord’ĶĶ’’’’ĶĶĶĶčF SetUp ē å ’ĶĶ’’’’ĶĶĶĶiIshowmoney’ĶĶ’’’’ĶĶĶĶęIb ¶ ’ĶĶ’’’’ĶĶĶĶDWealth 2 ’ĶĶ’’’’ĶĶĶĶé?DiagBoundary€ ' ź ’ĶĶ’’’’ĶĶĶĶjIexpanded’ĶĶ’’’’ĶĶĶĶõM Guide ķ ’ĶĶ’’’’ĶĶĶĶ/J Lady’ĶĶ’’’’ĶĶĶĶī?PersonReport€!' ļ  š  ń ’ĶĶ’’’’ĶĶĶĶoFHit n m ’ĶĶ’’’’ĶĶĶĶōFPeopleList r ó ņ ’ĶĶ’’’’ĶĶĶĶDPeople ū ’ĶĶ’’’’ĶĶĶĶ÷RFamily Tree ~’ĶĶ’’’’ĶĶĶͳM Dance q ’ĶĶ’’’’ĶĶĶĶųRDancing ƒ’ĶĶ’’’’ĶĶĶĶ0J King’ĶĶ’’’’ĶĶĶĶłRFlying Boids „’ĶĶ’’’’ĶĶĶĶr?DanceDiagram€' s  t ƒ u ’ĶĶ’’’’ĶĶĶĶū@PersonSet€"'   ’ĶĶ’’’’ĶĶĶĶDChildren ü   ’ĶĶ’’’’ĶĶĶĶü@PersonList€#'   ’ĶĶ’’’’ĶĶĶĶvDPersonList ü &PeopleWithChildren’ĶĶ’’’’ĶĶĶĶž@FamilySet€$'  8 ’ĶĶ’’’’ĶĶĶĶ1J Queen’ĶĶ’’’’ĶĶĶĶ’@FamilyList€%'  8 ’ĶĶ’’’’ĶĶĶĶxDDanceNumber w ’ĶĶ’’’’ĶĶĶĶ@ DancerShapeList€&'  “ ’ĶĶ’’’’ĶĶĶĶ DForenames ’ĶĶ’’’’ĶĶĶĶ@BoidList€''  ¶ ’ĶĶ’’’’ĶĶĶĶyDDancers  ’ĶĶ’’’’ĶĶĶĶ «NameStyle A’ĶĶ’’’’ĶĶĶĶ2AWealthEnum€' 3 üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü/PPBoŽĄę’ĶĶ’’’’ĶĶĶĶ ¬HeadStyle’dd’’’’ĶĶ’’’’ĶĶĶĶ{DTopArmAngle z ’ĶĶ’’’’ĶĶĶĶ ¬BodyStyle’ ’’’’ĶĶ’’’’ĶĶĶĶDNameString   ’ĶĶ’’’’ĶĶĶͬArmStyle ’ ’’’’ĶĶ’’’’ĶĶĶĶ}DBotArmAngle | ’ĶĶ’’’’ĶĶĶͬLegStyle ’’’’’ĶĶ’’’’ĶĶĶĶ4J Rich’ĶĶ’’’’ĶĶĶͬBoxStyleļ¶?€?’ĶĶ’’’’ĶĶĶĶDTopLegAngle ~ ’ĶĶ’’’’ĶĶĶĶ«NameStyleBold A’ĶĶ’’’’ĶĶĶĶ=MAll  ’ĶĶ’’’’ĶĶĶͬ LineFigureStyle€?’ĶĶ’’’’ĶĶĶ́DBotLegAngle € ’ĶĶ’’’’ĶĶĶͬRectStyleĄĄĄ’ĶĶ’’’’ĶĶĶĶ5JWell_Off’ĶĶ’’’’ĶĶĶͬBoidStyle’’’ĶĶ’’’’ĶĶĶ̓DTopArmIncr ‚ ’ĶĶ’’’’ĶĶĶĶ«MoneyStyle`Aܛ#’ĶĶ’’’’ĶĶĶĶDMarriedString   ’ĶĶ’’’’ĶĶĶĶ«ExpandStyle A’’ĶĶ’’’’ĶĶĶĶ…DBotArmIncr „ ’ĶĶ’’’’ĶĶĶĶ ^’ĶĶ’’’’ĶĶĶĶ J’ĶĶ’’’’ĶĶĶĶQ’ĶĶ’’’’ĶĶĶĶO’ĶĶ’’’’ĶĶĶĶH’ĶĶ’’’’ĶĶĶĶb              ’ĶĶ’’’’ĶĶĶĶ@ ’ĶĶ’’’’ĶĶĶĶ@ ’ĶĶ’’’’ĶĶĶĶż@ž ’ ’ĶĶ’’’’ĶĶĶĶś@ū ü ’ĶĶ’’’’ĶĶĶĶöA÷ ų ł ’ĶĶ’’’’ĶĶĶĶņE’ĶĶ’’’’ĶĶĶĶńD’ĶĶ’’’’ĶĶĶĶšCō ’ĶĶ’’’’ĶĶĶĶļB`’ĶĶ’’’’ĶĶĶĶķ@ī ’ĶĶ’’’’ĶĶĶĶģGõ ’ĶĶ’’’’ĶĶĶĶźBG’ĶĶ’’’’ĶĶĶĶåEę ’ĶĶ’’’’ĶĶĶĶćD’ĶĶ’’’’ĶĶĶĶāCä č ’ĶĶ’’’’ĶĶĶĶįBG’ĶĶ’’’’ĶĶĶĶŻE’ĶĶ’’’’ĶĶĶĶŚE’ĶĶ’’’’ĶĶĶĶŃD’ĶĶ’’’’ĶĶĶĶŠC Ņ Ó Ō Õ Ö × Ų Ł Ü ß ’ĶĶ’’’’ĶĶĶĶĻBD’ĶĶ’’’’ĶĶĶĶĖE’ĶĶ’’’’ĶĶĶĶĒEČ ’ĶĶ’’’’ĶĶĶĶÄE’ĶĶ’’’’ĶĶĶĶĮE’ĶĶ’’’’ĶĶĶĶøD’ĶĶ’’’’ĶĶĶĶ·C ¹ ŗ » ¼ ½ ¾ æ Ą Ć Ę Ź Ķ ’ĶĶ’’’’ĶĶĶ͵@¶ Ī ą é ’ĶĶ’’’’ĶĶĶͬE­ ® Æ ° ’ĶĶ’’’’ĶĶĶĶØE© ’ĶĶ’’’’ĶĶĶĶ–D’ĶĶ’’’’ĶĶĶĶ•C— ˜ ™ š › œ  ž Ÿ ” £ „ § « ² ’ĶĶ’’’’ĶĶĶĶ”BH’ĶĶ’’’’ĶĶĶ͐E’ĶĶ’’’’ĶĶĶĶE’ĶĶ’’’’ĶĶĶ͊E’ĶĶ’’’’ĶĶĶĶuD’ĶĶ’’’’ĶĶĶĶtCv x y { }   ƒ … ‡ ‰ Œ  ’ ’ĶĶ’’’’ĶĶĶĶsBD’ĶĶ’’’’ĶĶĶĶq@r “ ’ĶĶ’’’’ĶĶĶĶmE’ĶĶ’’’’ĶĶĶĶgEh i j ’ĶĶ’’’’ĶĶĶĶdD’ĶĶ’’’’ĶĶĶĶcCe f l o ’ĶĶ’’’’ĶĶĶĶbBH’ĶĶ’’’’ĶĶĶĶ`BI’ĶĶ’’’’ĶĶĶĶ\F] ^ ’ĶĶ’’’’ĶĶĶĶWEX ’ĶĶ’’’’ĶĶĶĶSET ’ĶĶ’’’’ĶĶĶĶPD’ĶĶ’’’’ĶĶĶĶOCQ R V Z ’ĶĶ’’’’ĶĶĶĶNBI’ĶĶ’’’’ĶĶĶĶJE’ĶĶ’’’’ĶĶĶĶCD’ĶĶ’’’’ĶĶĶĶBCD F G I L üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüœø²<ń„œ’ĶĶ’’’’ĶĶĶĶABD’ĶĶ’’’’ĶĶĶĶ?@@ M [ _ a ’ĶĶ’’’’ĶĶĶĶ>Gp ³ “ ė ’ĶĶ’’’’ĶĶĶĶ:D’ĶĶ’’’’ĶĶĶĶ9C; < ’ĶĶ’’’’ĶĶĶĶ3F4 5 6 7 ’ĶĶ’’’’ĶĶĶĶ'F ( ) * + , - . / 0 1 ’ĶĶ’’’’ĶĶĶĶ#F$ % ’ĶĶ’’’’ĶĶĶĶ D! ’ĶĶ’’’’ĶĶĶĶ C                ’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶC   ’ĶĶ’’’’ĶĶĶĶ@  " & 2 8 ’ĶĶ’’’’ĶĶĶĶG= ’ĶĶ’’’’ĶĶĶĶ-Open Source, Copyright (c) 2008, Polyphony IT’ĶĶ’’’’ĶĶĶĶóŗlocals rl _stringList; do for p := model.People do locals ft := if isnull p.Father then "unknown" else p.Father.NameString endif; mt := if isnull p.Mother then "unknown" else p.Mother.NameString endif; tx := p.NameString & ". Father is " & ft & ". Mother is " & mt & "."; do rl append tx; endlocals; endfor; return rl; endlocals; ’ĶĶ’’’’ĶĶĶĶē Boid := b; ’ĶĶ’’’’ĶĶĶĶŽAfor b:= Boids do b.MoveStep; endfor; return RedisplayShapes; ’ĶĶ’’’’ĶĶĶĶŪŽfor c := 1 to Number do Boids append new Boid call SetUp; endfor; for b := Boids do Shapes append new DiagBoid call SetUp(b); endfor; ’ĶĶ’’’’ĶĶĶĶĢiif PosX < context.LeftBorder then BoundsX := 10; else if PosX > context.LeftBorder + context.Width then BoundsX := -10; else BoundsX := 0; endif; endif; if PosY < context.TopBorder then BoundsY := 10; else if PosY > context.TopBorder + context.Height then BoundsY := -10; else BoundsY := 0; endif; endif; ’ĶĶ’’’’ĶĶĶĶÅif b.PosX > PosX then if b.PosX - PosX < context.MinDist then MinDistX := MinDistX - context.MinDist + (b.PosX - PosX); endif; else if PosX - b.PosX < context.MinDist then MinDistX := MinDistX + context.MinDist - (PosX - b.PosX); endif; endif; if b.PosY > PosY then if b.PosY - PosY < context.MinDist then MinDistY := MinDistY - context.MinDist + (b.PosY - PosY); endif; else if PosY - b.PosY < contexü˜£ümŲ’ĶĶ’’’’ĶĶĶĶct.MinDist then MinDistY := MinDistY + context.MinDist - (PosY - b.PosY); endif; endif; ’ĶĶ’’’’ĶĶĶĶÉÅ c ’ĶĶ’’’’ĶĶĶĶÅąMinDistX := 0; MinDistY := 0; locals px float := 0; py float := 0; cnt int := 0; vx float := 0; vy float := 0; do for b := context.Boids where b <> this do px := px + b.PosX; py := py + b.PosY; cnt := cnt + 1; KeepMinDistRule(b); vx := vx + b.VelocityX; vy := vy + b.VelocityY; endfor; px := (px / cnt - PosX) / 100; py := (py / cnt - PosY) / 100; vx := (vx / cnt - VelocityX) / 8; vy := (vy / cnt - VelocityY) / 8; KeepInBounds(); VelocityX := VelocityX + px + MinDistX + vx + BoundsX; VelocityY := VelocityY + py + MinDistY + vy + BoundsY; locals vel float := sqrt(VelocityX ** 2 + VelocityY ** 2); do if vel > context.MaxSpeed then VelocityX := VelocityX * context.MaxSpeed / vel; VelocityY := VelocityY * context.MaxSpeed / vel; endif; endlocals; PosX := PosX + VelocityX; PosY := PosY + VelocityY; endlocals; ’ĶĶ’’’’ĶĶĶĶĀˆPosX := context.LeftBorder + random(context.Width); PosY := context.TopBorder + random(context.Height); VelocityX := 0; VelocityY := 0; ’ĶĶ’’’’ĶĶĶͱArmTopAngle := ta; ArmBotAngle := ba; LegTopAngle := tl; LegBotAngle := bl; ElbowL := angle_move(ArmTopL, 20, ta + 90); KneeL := angle_move(LegTopL, 30, tl + 90); ElbowR.X := ElbowL.X + 30; ElbowR.Y := ElbowL.Y; KneeR.X := KneeL.X + 15; KneeR.Y := KneeL.Y; ’ĶĶ’’’’ĶĶĶĶŖŃDataObject := p; ArmTopL := _xy{5, 25}; ElbowL := _xy{5, 45}; LegTopL := _xy{12.5, 60}; KneeL := _xy{12.5, 90}; ArmTopR := _xy{35, 25}; ElbowR := _xy{35, 45}; LegTopR := _xy{27.5, 60}; KneeR := _xy{27.5, 90}; ’ĶĶ’’’’ĶĶĶͦ0’ĶĶ’’’’ĶĶĶͤ0’ĶĶ’’’’ĶĶĶĶ¢0’ĶĶ’’’’ĶĶĶĶ 0’ĶĶ’’’’ĶĶĶĶ­TopArmIncr := max(-20.0, min(20.0, TopArmIncr + prandom(20.0) - 10.0)); BotArmIncr := max(-20.0, min(20.0, BotArmIncr + prandom(10.0) - 5.0)); TopLegIncr := max(-10.0, min(1üo9ī¼Ēģ%’ĶĶ’’’’ĶĶĶĶo0.0, TopLegIncr + prandom(10.0) - 5.0)); BotLegIncr := max(-10.0, min(10.0, BotLegIncr + prandom(6.0) - 3.0)); ’ĶĶ’’’’ĶĶĶĶ‘­ o ’ĶĶ’’’’ĶĶĶĶŽ SetIncr(); TopArmAngle := TopArmAngle + TopArmIncr; if TopArmAngle > 360 then TopArmAngle := TopArmAngle - 360; endif; BotArmAngle := BotArmAngle + BotArmIncr; if BotArmAngle > 360 then BotArmAngle := BotArmAngle - 360; endif; TopLegAngle := TopLegAngle + TopLegIncr; if TopLegAngle > 30 then TopLegAngle := 30; TopLegIncr := - TopLegIncr; elseif TopLegAngle < -30 then TopLegAngle := -30; TopLegIncr := - TopLegIncr; endif; BotLegAngle := BotLegAngle + BotLegIncr; if BotLegAngle > 30 then BotLegAngle := 30; BotLegIncr := - BotLegIncr; elseif BotLegAngle < -30 then BotLegAngle := -30; BotLegIncr := - BotLegIncr; endif; for p := Dancers do p.Move(TopArmAngle, BotArmAngle, TopLegAngle, BotLegAngle); endfor; return RedisplayShapes; ’ĶĶ’’’’ĶĶĶĶ‹xset_prandom_seed(DanceNumber); locals left float := 100; do for p := PersonList; c := p.Children do locals ds := new DancerShape call SetUp(c); do ds.Top := 100; ds.Left := left; left := left + 100; Shapes append ds; Dancers append ds; endlocals endfor; endlocals; SetIncr(); ’ĶĶ’’’’ĶĶĶ͈0’ĶĶ’’’’ĶĶĶ͆0’ĶĶ’’’’ĶĶĶĶ„0’ĶĶ’’’’ĶĶĶĶ‚0’ĶĶ’’’’ĶĶĶĶ€0’ĶĶ’’’’ĶĶĶĶ~0’ĶĶ’’’’ĶĶĶĶ|0’ĶĶ’’’’ĶĶĶĶz0’ĶĶ’’’’ĶĶĶĶw1’ĶĶ’’’’ĶĶĶĶn»if empty(DataObject.Children) then return; endif; if DataObject in context.Persons then context.Persons remove DataObject; else context.Persons append DataObject; endif; ’ĶĶ’’’’ĶĶĶĶkDataObject := p; if showmoney then DisplayControl := flag(eShowMoney); else DisplayControl := flag(eDontShowMoney); endif; if empty(p.Children) then ExpandString := " "; elseif expanded then ExpandString := ">>> - <<<"; else ExpandString := "<<< + >>>"; endif; üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüK2©¢Ž]U’ĶĶ’’’’ĶĶĶĶYlocals p := new Person; do p.Surname := "new born"; if isnull DataObject.Sex or DataObject.Sex = Male then p.Father := DataObject; else p.Mother := DataObject; endif; model.People append p; endlocals; return RebuildShapes; ’ĶĶ’’’’ĶĶĶĶUDataObject := p; locals expanded := p in context.Persons; do Box := new PersonShape call SetUp(p, context.ShowMoney, expanded); Shapes append Box; if expanded then if not empty(p.Children) then locals row := new _StripeShape; rk := new _RakeShape; do row.IsVertical := false; row.Spacing := 20; row.BoxAlignment := LeftOrTop; rk.HeadBox := Box; rk.HandleLen := Spacing / 2; rk.HeadSide := Bottom; rk.ProngSide := _JoinSideEnum::Top; for c := p.Children do locals bt := new PersonTree call SetUp(c); do row.Shapes append bt; rk.ProngBoxes append bt.Box; endlocals; endfor; Shapes append row; context.Shapes append rk; endlocals; endif; endif; endlocals; ’ĶĶ’’’’ĶĶĶĶKUlocals hs := new HorzStripeSimple; do hs.Left := 100; hs.Top := 100; for f := FamilyList where notnull f.TopOfTree do if FirstTime then Persons append f.TopOfTree; endif; hs.Shapes append new PersonTree call SetUp(f.TopOfTree); endfor; Shapes append hs; endlocals; FirstTime := false; ’ĶĶ’’’’ĶĶĶĶHfalse’ĶĶ’’’’ĶĶĶĶEtrue’ĶĶ’’’’ĶĶĶĶ P(isnull Father or Father.Sex = Male) and (isnull Mother or Mother.Sex = Female) ’ĶĶ’’’’ĶĶĶĶ if isnull Wealth then "£?" elseif Wealth = Rich then "£££" elseif Wealth = Well_Off then "££" elseif Wealth = Surviving then "£" else "p" endif üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüH’s2ŗ ł ’ĶĶ’’’’ĶĶĶĶƒif isnull Born then "(birth year unknown) " elseif isnull Died then str(Born) else str(Born) & " - " & str(Died) endif ’ĶĶ’’’’ĶĶĶĶDif isnull Married then " " else "= " & Married.NameString endif ’ĶĶ’’’’ĶĶĶͲif isnull Surname then if isnull Forenames then " " else Forenames endif else if isnull Forenames then Surname else Forenames & " " & Surname endif endif ’ĶĶ’’’’ĶĶĶ͐for c := model.People where (notnull c.Father and c.Father = this) or (notnull c.Mother and c.Mother = this) endfor ’ĶĶ’’’’ĶĶĶĶ2for p := People where notempty(p.Children) endfor ž’ĶĶE M?PersonTree€' N  O ~ P @  ! ’ĶĶQ “MDiagramShapes % ’ĶĶ ¶? Boid€' &  ·  ø Ī   ’ĶĶo ? Root€'        ’ĶĶŁ ?Person€'       ś ’ĶĶAĪ?FlyingDiagBase€' Ļ  Š ‚ Ń  ' ’ĶĶö_?"HorzStripeSimple€' `  +  ,  " ’ĶĶ„a?PersonShape€' b  c } d @  # ’ĶĶ™ą?DiagBoid€' į  ā ƒ ć  ( ’ĶĶ" é?DiagBoundary€ ' ź  -  .  ) ’ĶĶ× ī?PersonReport€!' ļ  š  ń  * ’ĶĶā ÷RFamily Tree | ’ĶĶF ųRDancing  ’ĶĶ• łRFlying Boids ‚ ’ĶĶĻ r?DanceDiagram€' s  t  u  $ ’ĶĶ’’’’ĶĶĶĶ0ZShow MoneyShowMoney’ĶĶ’’’’ĶĶĶĶ1ZPerson HitHit a ’ĶĶ’’’’ĶĶĶĶ2X“C A B AOK’ĶĶ’’’’ĶĶĶĶ3X“CHB B ACancel’ĶĶ’’’’ĶĶĶĶ4V A A CCHCSelect FamilyFamilyList’ĶĶ’’’’ĶĶĶĶ5V A A CCHCTSelect Person (their Children will dance)PersonList’ĶĶ’’’’ĶĶĶĶ6U ApC CC 7 ’ĶĶ’’’’ĶĶĶĶ8YDance NumberDanceNumber’ĶĶ’’’’ĶĶĶĶ9N : ’ĶĶų8?Family€'   9  :  ż ’ĶĶ’’’’ĶĶĶĶ;†   Ą Ą AšA @ @’ĶĶ’’’’ĶĶĶĶ<N = ’ĶĶ’’’’ĶĶĶĶ>†  šĄ ĄpA B @ @’ĶĶø“?DancerShape€' ”  • € –   ’ĶĶ’’’’ĶĶĶĶ|'Family Tree ?  @ ’ĶĶ’’’’ĶĶĶĶ}' 1 Person A ’ĶĶ’’’’ĶĶĶĶC  @@ČB A B ’ĶĶ’’’’ĶĶĶĶE  @ˆAČB A D ’ĶĶ’’’’ĶĶĶĶG  @BČB A F üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü`'˜ XŽ7 ’ĶĶ’’’’ĶĶĶĶI  @ ģ €('  ö /         ’ĶĶ’’’’ĶĶĶĶ^™ [ \  <  ] ’ĶĶ’’’’ĶĶĶĶb™ _ `  <  a ’ĶĶ’’’’ĶĶĶĶf™ c d  9  e ’ĶĶ’’’’ĶĶĶĶj™ g h  9  i ’ĶĶ’’’’ĶĶĶĶn™ k l  9  m ’ĶĶ’’’’ĶĶĶĶr™ o p  9  q ’ĶĶ’’’’ĶĶĶ́'Dance Diagram s ’ĶĶ’’’’ĶĶĶĶ‚' t HBHBDČC @ A’ĶĶ’’’’ĶĶĶĶw ' u ’ĶĶ’’’’ĶĶĶĶv†  HBHBDČC’ĶĶ’’’’ĶĶĶ̓' x  z { ’ĶĶ’’’’ĶĶĶĶyˆ  @@@’ĶĶ’’’’ĶĶĶĶxUy ’ĶĶ’’’’ĶĶĶĶuUv ’ĶĶ’’’’ĶĶĶĶtTw ’ĶĶ’’’’ĶĶĶĶsR5 6 2 3 ’ĶĶ’’’’ĶĶĶĶNU O Q R V Z ^ b f j n r ’ĶĶ’’’’ĶĶĶĶAUC E G I L ’ĶĶ’’’’ĶĶĶĶ@P0 ’ĶĶ’’’’ĶĶĶĶ?R4 2 3 ’ĶĶ’’’’ĶĶĶĶ=U> ’ĶĶ’’’’ĶĶĶĶ:U; ’ĶĶ’’’’ĶĶĶĶ7S8 ’ĶĶ’’’’ĶĶĶĶ/A’ĶĶ’’’’ĶĶĶĶ.D’ĶĶ’’’’ĶĶĶĶ-C’ĶĶ’’’’ĶĶĶĶ,D’ĶĶ’’’’ĶĶĶĶ+C’ĶĶ’’’’ĶĶĶĶ*@’ĶĶ’’’’ĶĶĶĶ)@’ĶĶ’’’’ĶĶĶĶ(@’ĶĶ’’’’ĶĶĶĶ'@’ĶĶ’’’’ĶĶĶĶ&B’ĶĶ’’’’ĶĶĶĶ%@’ĶĶ’’’’ĶĶĶĶ$@’ĶĶ’’’’ĶĶĶĶ#@’ĶĶ’’’’ĶĶĶĶ"@’ĶĶ’’’’ĶĶĶĶ!@’ĶĶ’’’’ĶĶĶĶ @’ĶĶ’’’’ĶĶĶĶB’ĶĶ’’’’ĶĶĶĶB’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶB’ĶĶ J9 < ’ĶĶ7Q2 3 4 5 6 ’ĶĶTO0 1 ’ĶĶ’’’’ĶĶĶĶ{ =Boid.PosY’ĶĶ’’’’ĶĶĶĶz =Boid.PosX’ĶĶ’’’’ĶĶĶĶq= shape.ArmBotAngle’ĶĶ’’’’ĶĶĶĶp= shape.ElbowR.Y’ĶĶ’’’’ĶĶĶĶo= shape.ElbowR.X’ĶĶ’’’’ĶĶĶĶm= shape.ArmTopAngle’ĶĶ’’’’ĶĶĶĶl= shape.ArmTopR.Y’ĶĶ’’’’ĶĶĶĶk= shape.ArmTopR.X’ĶĶ’’’’ĶĶĶĶi= shape.ArmBotAngle’ĶĶ’’’’ĶĶĶĶh= shape.ElbowL.Y’ĶĶ’’’’ĶĶĶĶg= shape.ElbowL.X’ĶĶ’’’’ĶĶĶĶe= shape.ArmTopAngle’ĶĶ’’’’ĶĶĶĶd= shape.ArmTopL.Y’ĶĶ’’’’ĶĶĶĶc= shape.ArmTopL.X’ĶĶ’’’’ĶĶĶĶa= shape.LegBotAngle’ĶĶ’’’’ĶĶĶĶ`= shape.KneeR.YüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüOŸķ&wmŗė’ĶĶ’’’’ĶĶĶĶ_= shape.KneeR.X’ĶĶ’’’’ĶĶĶĶ]= shape.LegTopAngle’ĶĶ’’’’ĶĶĶĶ\= shape.LegTopR.Y’ĶĶ’’’’ĶĶĶĶ[= shape.LegTopR.X’ĶĶ’’’’ĶĶĶĶY= shape.LegBotAngle’ĶĶ’’’’ĶĶĶĶX= shape.KneeL.Y’ĶĶ’’’’ĶĶĶĶW= shape.KneeL.X’ĶĶ’’’’ĶĶĶĶU= shape.LegTopAngle’ĶĶ’’’’ĶĶĶĶT= shape.LegTopL.Y’ĶĶ’’’’ĶĶĶĶS= shape.LegTopL.X’ĶĶ’’’’ĶĶĶĶP=shape.DataObject.Forenames’ĶĶ’’’’ĶĶĶĶM1= if count(Shapes) > 3 then 50.0 else 100.0 endif’ĶĶ’’’’ĶĶĶĶK=shape.DataObject.MoneyString’ĶĶ’’’’ĶĶĶĶJ= flag(eShowMoney)’ĶĶ’’’’ĶĶĶĶH=shape.ExpandString’ĶĶ’’’’ĶĶĶĶF=shape.DataObject.MarriedString’ĶĶ’’’’ĶĶĶĶD=shape.DataObject.AgeString’ĶĶ’’’’ĶĶĶĶB=shape.DataObject.ForenamesžżŁ”‰:ImportĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢ’ĶĶ ė=sILly Model  > ģ €('  ö /        „  ’ĶĶ’’’’„žüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü#ø§Ö9,ĶĶĶ 6  ’’’’ĶĶĶĶ’’’’ĶĶĶĶc¦’ĶĶ’’’’ĶĶĶĶ'   ’ĶĶ’’’’ĶĶĶĶ'Baggins Balbo  €’ĶĶ’’’’ĶĶĶĶ'BoffinBerylla  ’ĶĶ’’’’ĶĶĶĶ'Baggins Mungo    €·€’ĶĶ’’’’ĶĶĶĶ'Baggins Pansy   €¼’ĶĶ’’’’ĶĶĶĶ'Baggins Ponto    €Ą€’ĶĶ’’’’ĶĶĶĶ'Baggins Largo   €Ä€ ’ĶĶ’’’’ĶĶĶĶ 'Baggins Lily   €Ę€ ’ĶĶ’’’’ĶĶĶĶ ' Grubb Laura  ’ĶĶ’’’’ĶĶĶĶ 'Baggins Bungo    €Ž€.’ĶĶ’’’’ĶĶĶĶ 'Baggins Belba    €č€L’ĶĶ’’’’ĶĶĶĶ 'Baggins Longo    €ģ€F’ĶĶ’’’’ĶĶĶĶ'Baggins Linda    €ī€S’ĶĶ’’’’ĶĶĶĶ'Baggins Bingo    €š€P’ĶĶ’’’’ĶĶĶĶ'Baggins Bilbo   € ’ĶĶ’’’’ĶĶĶĶ' TookBelladonna    €ä€6’ĶĶ’’’’ĶĶĶĶ'BolgerRudigar  ’ĶĶ’’’’ĶĶĶĶ'SackvilleCamellia  ’ĶĶ’’’’ĶĶĶĶ'Proudfoot Bodo  ’ĶĶ’’’’ĶĶĶĶ' Chubb Chica  ’ĶĶ’’’’ĶĶĶĶ' TookGerontius  €¦€(’ĶĶ’’’’ĶĶĶĶ' ChubbAdamanta’ĶĶ’’’’ĶĶĶĶ' TookIsengrim III   €Š€2’ĶĶ’’’’ĶĶĶĶ' TookIsumbras IV   €Ö€;’ĶĶ’’’’ĶĶĶĶ' TookHildigrim    €Ų€=’ĶĶ’’’’ĶĶĶĶ'(Baggins of Hobbiton  ’ĶĶ’’’’ĶĶĶĶ',Tooks of Great Smials  ’ĶĶ’’’’ĶĶĶĶ' ChubbAdamanta  ’ĶĶ’’’’ĶĶĶĶ' BunceMinmosa  ’ĶĶ’’’’ĶĶĶĶ'Baggins Rosa    €č’ĶĶ’’’’ĶĶĶĶ$'  ’ĶĶ’’’’ĶĶĶĶ"'                           žżŁ”så:ImportĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüKžö}ź¬!– ,ĶĶĶ < ’’’’ĶĶĶĶ’’’’ĶĶĶĶc¦’ĶĶ’’’’ĶĶĶĶĆA SilLY Model    ’ĶĶ’’’’ĶĶĶĶÅTreeDiagramFamily TreeHobbits’ĶĶ’’’’ĶĶĶĶÅDanceDiagramDancingHobbits’ĶĶ’’’’ĶĶĶĶÅFlyingBoidsFlying BoidsHobbits’ĶĶ’’’’ĶĶĶͶJDoing Strange Things with WeaverBird  ’ĶĶ’’’’ĶĶĶĶh ’ĶĶ’’’’ĶĶĶĶm   ’ĶĶ’’’’ĶĶĶĶĀ<p>This model shows that you can use <b>WeaverBird</b> for purposes that have no business rationale  or any other rationale for that matter.</p> <p>Click <cmd TreeDiagram>here</cmd> and you see a form that lists some family trees of hobbits (from the Appendix of the Lord of the Rings.) Select a family and you see the family tree. Click on the "<<< + >>>" and the children of the selected hobbit is displayed. Use the <i>Show Money</i> command in the <i>Diagram</i> menu and there are "£"s displayed indicating their wealth.</p> <p>Click <cmd DanceDiagram>here</cmd> and another form is displayed this time showing a list of hobbits that have children. Select one of the hobbit names and click on OK button and you see a line of figures representing the children of the selected hobbit (Mungo Baggins has lots of children). Now you can use the <i>Run</i> menu to make the hobbits dance. (You did want to do this, didn't you.) In the Run dialogue the best option is, in my humble opinion, to set the Timer button and set the time for 0.5 seconds or so. Note that if you use the Step option (the default), it only moves in response to a right mouse click or a press on a letter key.</p> <p>Click <cmd FlyingBoids>here</cmd> and you see a screen with a lot of dots on this. Use the <i>Run</i> menu to get the blobs in motion. This was meant to illustrate flocking behaviour  a classic modelling problem  but they look more like swarming insects than flocks of birds or shoals of fish.</p> <p>This model is provided to you with no security settings. Anyone can change the data (of their local copy). Thus if you know that Bert Baggins was expunged from the records for crimes that would make an elven maid blush, you can add him t”¶t#O؛’ĶĶ’’’’ĶĶĶĶ Äo the data. If you have a development license you can use this model as a starting off point to develop crazy models of your own.</p> <p>Some features of <b>WeaverBird</b> that might be of interest to people developing silly models are:</p> <ul> <li>Diagrams can include images.</li> <li>Instead of using the run menu to put the diagram in motion, you can set up some instructions on the diagram like "click here to make the hobbits dance".</li> </ul> ’ĶĶ’’’’ĶĶĶĶĀ Ä  žżŁ””@;ImportĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢ’ĶĶ <ĆA SilLY Model      ’ĶĶ ˜¶JDoing Strange Things with WeaverBird   ’ĶĶ’’’’ĶĶĶĶ h’ĶĶ’’’’ĶĶĶĶ hžüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü