Changeset 254
- Timestamp:
- 04/29/06 17:20:55 (3 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 11 modified
-
.irbrc (modified) (2 diffs)
-
FaerieMUD.tmproj (added)
-
bin/faeriemud.rb (modified) (9 diffs)
-
docs/FaerieMUD Design Diagrams.graffle (modified) (208 diffs)
-
docs/Units of Measure.oo3 (added)
-
experiments/description-engine.rb (added)
-
experiments/shiny-object.rb (modified) (2 diffs)
-
lib/fm/animatedobject.rb (modified) (1 diff)
-
lib/fm/character.rb (modified) (1 diff)
-
lib/fm/entity.rb (modified) (1 diff)
-
lib/fm/locus.rb (modified) (1 diff)
-
tests/animatedobject.tests.rb (modified) (8 diffs)
-
tests/spirit.tests.rb (modified) (1 diff)
-
utils.rb (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/.irbrc
r234 r254 14 14 end 15 15 16 def add_example_objects_to_main( map ) 17 $deferr.puts "Pre-creating example objects: " 18 map.each do |name, klass| 19 $deferr.puts "\t%s: %s" % [ name, klass.name ] 20 eval( "#{name} = #{klass.name}.example", TOPLEVEL_BINDING ) 21 end 22 end 16 23 17 24 # Modify prompt to do highlighting … … 40 47 puts "Requiring 'fm' classes..." 41 48 require 'fm' 49 50 # add_example_objects_to_main( 51 # :ent => FaerieMUD::Entity, 52 # :character => FaerieMUD::Character 53 # ) 54 42 55 rescue => e 43 56 $stderr.puts "Ack! FaerieMUD Environment failed to load: #{e.message}\n\t" + -
trunk/bin/faeriemud.rb
r251 r254 14 14 require 'optparse' 15 15 require 'fm' 16 require 'fm/verbs/all' 16 17 } 17 18 … … 36 37 } 37 38 38 class SimpleVerb < FaerieMUD::Verb39 @event_class = nil40 class << self41 attr_reader :event_class42 end43 44 def self::set_event_class( klass )45 # $deferr.puts "Setting %s's event class to %p" % [ self, klass ]46 @event_class = klass47 end48 49 def self::inherited( mod )50 super51 # $deferr.puts "Setting %s's event class to %p" % [ mod, @event_class ]52 mod.instance_variable_set( :@event_class, @event_class )53 end54 55 def invoke( instigator, origin, target=nil )56 eclass = self.class.event_class or57 return super58 59 return eclass.new(60 :instigator => instigator,61 :origin => origin,62 :target => target,63 :verb => self )64 end65 end66 39 67 40 # I know, I know -- at least I didn't call it a Heartbeat 68 41 class TickEvent < FaerieMUD::Event 69 42 end 70 class TickVerb < SimpleVerb43 class TickVerb < FaerieMUD::SimpleVerb 71 44 set_event_class TickEvent 72 45 end … … 75 48 class World < FaerieMUD::Area 76 49 def start 50 self.log.notice "Starting the world" 77 51 @thread = Thread::new do 78 52 Thread.current[:running] = true … … 94 68 95 69 def stop 70 self.log.notice "Stopping the world" 96 71 return unless @thread 97 72 @thread[:running] = false 73 end 74 75 def immerseEvents( *events ) 76 self.log.debug "Immersing %d event/s" % events.length 77 super 98 78 end 99 79 … … 101 81 102 82 # Stuff for a Spark to do 103 class TwinkleVerb < SimpleVerb83 class TwinkleVerb < FaerieMUD::SimpleVerb 104 84 set_event_class FaerieMUD::VisualEvent 105 85 end … … 112 92 113 93 def handleTickEvent( event ) 114 if ( rand(100) < 5 ) 94 self.log.debug "handling a TickEvent" 95 if ( rand(100) < 50 ) 96 self.log.debug "Twinkling" 115 97 return TwinkleVerb.instance.invoke( self, self ) 116 98 else … … 118 100 end 119 101 end 102 end 103 104 # Verbs for character commands 105 class SayVerb < FaerieMUD::Verb 106 120 107 end 121 108 … … 137 124 message "Setting the Spirit's IO callbacks...\n" 138 125 spirit.onInputReady do |promptText| 126 $deferr.puts "Input is ready" 139 127 promptText ||= DefaultPrompt 140 128 prompt( promptText ) 141 129 end 142 130 spirit.onOutput do |output| 131 $deferr.puts "Output received" 143 132 $defout.puts( output ) 144 133 end … … 148 137 spirit.animate( character ) 149 138 150 # Stick the character's body into the world Area139 # Stick the character's body into the world Area 151 140 message "Setting up the world...\n" 152 141 world = World::new -
trunk/docs/FaerieMUD Design Diagrams.graffle
r250 r254 96 96 <integer>2</integer> 97 97 <key>Text</key> 98 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 23098 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 99 99 {\fonttbl\f0\fnil\fcharset77 LucidaGrande-Bold;} 100 100 {\colortbl;\red255\green255\blue255;} … … 251 251 </array> 252 252 <key>ModificationDate</key> 253 <string>200 5-12-14 16:12:53 -0800</string>253 <string>2006-02-02 17:37:39 -0500</string> 254 254 <key>Modifier</key> 255 255 <string>Michael Granger</string> … … 353 353 <dict> 354 354 <key>Text</key> 355 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 230355 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 356 356 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExt;} 357 357 {\colortbl;\red255\green255\blue255;} … … 496 496 <dict> 497 497 <key>Text</key> 498 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 230498 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 499 499 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 500 500 {\colortbl;\red255\green255\blue255;} … … 648 648 <dict> 649 649 <key>Text</key> 650 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 230650 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 651 651 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 652 652 {\colortbl;\red255\green255\blue255;} … … 712 712 <dict> 713 713 <key>Text</key> 714 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 230714 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 715 715 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCond;} 716 716 {\colortbl;\red255\green255\blue255;} … … 776 776 <dict> 777 777 <key>Text</key> 778 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 230778 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 779 779 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 780 780 {\colortbl;\red255\green255\blue255;} … … 924 924 <dict> 925 925 <key>Text</key> 926 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 230926 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 927 927 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCond;} 928 928 {\colortbl;\red255\green255\blue255;} … … 988 988 <dict> 989 989 <key>Text</key> 990 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 230990 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 991 991 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 992 992 {\colortbl;\red255\green255\blue255;} … … 1669 1669 <dict> 1670 1670 <key>Text</key> 1671 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2301671 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 1672 1672 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCond;} 1673 1673 {\colortbl;\red255\green255\blue255;} … … 1733 1733 <dict> 1734 1734 <key>Text</key> 1735 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2301735 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 1736 1736 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 1737 1737 {\colortbl;\red255\green255\blue255;} … … 1797 1797 <dict> 1798 1798 <key>Text</key> 1799 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2301799 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 1800 1800 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 1801 1801 {\colortbl;\red255\green255\blue255;} … … 1861 1861 <dict> 1862 1862 <key>Text</key> 1863 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2301863 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 1864 1864 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 1865 1865 {\colortbl;\red255\green255\blue255;} … … 1925 1925 <dict> 1926 1926 <key>Text</key> 1927 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2301927 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 1928 1928 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 1929 1929 {\colortbl;\red255\green255\blue255;} … … 1989 1989 <dict> 1990 1990 <key>Text</key> 1991 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2301991 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 1992 1992 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCond;} 1993 1993 {\colortbl;\red255\green255\blue255;} … … 2053 2053 <dict> 2054 2054 <key>Text</key> 2055 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302055 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2056 2056 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2057 2057 {\colortbl;\red255\green255\blue255;} … … 2117 2117 <dict> 2118 2118 <key>Text</key> 2119 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302119 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2120 2120 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCond;} 2121 2121 {\colortbl;\red255\green255\blue255;} … … 2181 2181 <dict> 2182 2182 <key>Text</key> 2183 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302183 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2184 2184 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2185 2185 {\colortbl;\red255\green255\blue255;} … … 2245 2245 <dict> 2246 2246 <key>Text</key> 2247 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302247 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2248 2248 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2249 2249 {\colortbl;\red255\green255\blue255;} … … 2309 2309 <dict> 2310 2310 <key>Text</key> 2311 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302311 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2312 2312 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2313 2313 {\colortbl;\red255\green255\blue255;} … … 2373 2373 <dict> 2374 2374 <key>Text</key> 2375 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302375 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2376 2376 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCond;} 2377 2377 {\colortbl;\red255\green255\blue255;} … … 2437 2437 <dict> 2438 2438 <key>Text</key> 2439 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302439 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2440 2440 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2441 2441 {\colortbl;\red255\green255\blue255;} … … 2501 2501 <dict> 2502 2502 <key>Text</key> 2503 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302503 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2504 2504 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCond;} 2505 2505 {\colortbl;\red255\green255\blue255;} … … 2572 2572 <dict> 2573 2573 <key>Text</key> 2574 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302574 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2575 2575 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2576 2576 {\colortbl;\red255\green255\blue255;} … … 2678 2678 <dict> 2679 2679 <key>Text</key> 2680 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302680 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2681 2681 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2682 2682 {\colortbl;\red255\green255\blue255;} … … 2739 2739 <dict> 2740 2740 <key>Text</key> 2741 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302741 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2742 2742 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldCondObl;} 2743 2743 {\colortbl;\red255\green255\blue255;} … … 2913 2913 <dict> 2914 2914 <key>Text</key> 2915 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302915 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2916 2916 {\fonttbl\f0\fnil\fcharset77 LucidaGrande;} 2917 2917 {\colortbl;\red255\green255\blue255;} … … 2976 2976 <dict> 2977 2977 <key>Text</key> 2978 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2302978 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 2979 2979 {\fonttbl\f0\fnil\fcharset77 LucidaGrande;} 2980 2980 {\colortbl;\red255\green255\blue255;} … … 3038 3038 <dict> 3039 3039 <key>Text</key> 3040 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303040 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3041 3041 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExtObl;} 3042 3042 {\colortbl;\red255\green255\blue255;} … … 3226 3226 <dict> 3227 3227 <key>Text</key> 3228 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303228 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3229 3229 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExtObl;} 3230 3230 {\colortbl;\red255\green255\blue255;} … … 3271 3271 <integer>0</integer> 3272 3272 <key>Text</key> 3273 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303273 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3274 3274 {\fonttbl\f0\fnil\fcharset77 TektonPro-Regular;} 3275 3275 {\colortbl;\red255\green255\blue255;} … … 3319 3319 <integer>0</integer> 3320 3320 <key>Text</key> 3321 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303321 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3322 3322 {\fonttbl\f0\fnil\fcharset77 TektonPro-Regular;} 3323 3323 {\colortbl;\red255\green255\blue255;} … … 3492 3492 <dict> 3493 3493 <key>Text</key> 3494 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303494 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3495 3495 {\fonttbl\f0\fnil\fcharset77 LucidaGrande;} 3496 3496 {\colortbl;\red255\green255\blue255;} … … 3550 3550 <dict> 3551 3551 <key>Text</key> 3552 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303552 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3553 3553 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExtObl;} 3554 3554 {\colortbl;\red255\green255\blue255;} … … 3731 3731 <dict> 3732 3732 <key>Text</key> 3733 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303733 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3734 3734 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExtObl;} 3735 3735 {\colortbl;\red255\green255\blue255;} … … 3758 3758 <dict> 3759 3759 <key>Text</key> 3760 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303760 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3761 3761 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExtObl;} 3762 3762 {\colortbl;\red255\green255\blue255;} … … 3785 3785 <dict> 3786 3786 <key>Text</key> 3787 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303787 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3788 3788 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExtObl;} 3789 3789 {\colortbl;\red255\green255\blue255;} … … 3812 3812 <dict> 3813 3813 <key>Text</key> 3814 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303814 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3815 3815 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExtObl;} 3816 3816 {\colortbl;\red255\green255\blue255;} … … 3858 3858 <dict> 3859 3859 <key>Text</key> 3860 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303860 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3861 3861 {\fonttbl\f0\fnil\fcharset77 TektonPro-Bold;} 3862 3862 {\colortbl;\red255\green255\blue255;} … … 3903 3903 <integer>0</integer> 3904 3904 <key>Text</key> 3905 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303905 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3906 3906 {\fonttbl\f0\fnil\fcharset77 TektonPro-Regular;} 3907 3907 {\colortbl;\red255\green255\blue255;} … … 3948 3948 <integer>0</integer> 3949 3949 <key>Text</key> 3950 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2303950 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 3951 3951 {\fonttbl\f0\fnil\fcharset77 TektonPro-Regular;} 3952 3952 {\colortbl;\red255\green255\blue255;} … … 4114 4114 <dict> 4115 4115 <key>Text</key> 4116 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2304116 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 4117 4117 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExt;} 4118 4118 {\colortbl;\red255\green255\blue255;} … … 4197 4197 <dict> 4198 4198 <key>Text</key> 4199 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2304199 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 4200 4200 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExt;} 4201 4201 {\colortbl;\red255\green255\blue255;} … … 4260 4260 <dict> 4261 4261 <key>Text</key> 4262 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2304262 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 4263 4263 {\fonttbl\f0\fnil\fcharset77 TektonPro-BoldExt;} 4264 4264 {\colortbl;\red255\green255\blue255;} … … 4540 4540 <dict> 4541 4541 <key>Text</key> 4542 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2304542 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 4543 4543 {\fonttbl\f0\fnil\fcharset77 TektonPro-Bold;} 4544 4544 {\colortbl;\red255\green255\blue255;} … … 4567 4567 <dict> 4568 4568 <key>Text</key> 4569 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2304569 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 4570 4570 {\fonttbl\f0\fnil\fcharset77 TektonPro-Bold;} 4571 4571 {\colortbl;\red255\green255\blue255;} … … 4594 4594 <dict> 4595 4595 <key>Text</key> 4596 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2304596 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 4597 4597 {\fonttbl\f0\fnil\fcharset77 TektonPro-Bold;} 4598 4598 {\colortbl;\red255\green255\blue255;} … … 4662 4662 <dict> 4663 4663 <key>Text</key> 4664 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf 2304664 <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf3
