OSDN Git Service

ver1.3.0a
authorYuji Konishi <yuji.k64613@gmail.com>
Sat, 26 Oct 2013 03:05:43 +0000 (12:05 +0900)
committerYuji Konishi <yuji.k64613@gmail.com>
Sat, 26 Oct 2013 03:05:43 +0000 (12:05 +0900)
99 files changed:
.DS_Store
workspace/JuggleMaster/.classpath
workspace/JuggleMaster/AndroidManifest.xml
workspace/JuggleMaster/bin/AndroidManifest.xml
workspace/JuggleMaster/bin/classes/com/jm/Ball.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$1.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$2.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$3.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$4.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$5.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$6$1.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$6$2.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$6.class
workspace/JuggleMaster/bin/classes/com/jm/Edit$7.class
workspace/JuggleMaster/bin/classes/com/jm/Edit.class
workspace/JuggleMaster/bin/classes/com/jm/GenPattern.class
workspace/JuggleMaster/bin/classes/com/jm/Help$1.class
workspace/JuggleMaster/bin/classes/com/jm/Help.class
workspace/JuggleMaster/bin/classes/com/jm/JmPattern.class
workspace/JuggleMaster/bin/classes/com/jm/JuggleMaster$1.class
workspace/JuggleMaster/bin/classes/com/jm/JuggleMaster.class
workspace/JuggleMaster/bin/classes/com/jm/JuggleView.class
workspace/JuggleMaster/bin/classes/com/jm/JugglingBalls.class
workspace/JuggleMaster/bin/classes/com/jm/Menu1$1.class
workspace/JuggleMaster/bin/classes/com/jm/Menu1.class
workspace/JuggleMaster/bin/classes/com/jm/Menu2$1.class
workspace/JuggleMaster/bin/classes/com/jm/Menu2$2.class
workspace/JuggleMaster/bin/classes/com/jm/Menu2.class
workspace/JuggleMaster/bin/classes/com/jm/R$drawable.class
workspace/JuggleMaster/bin/classes/com/jm/R$id.class
workspace/JuggleMaster/bin/classes/com/jm/R$layout.class
workspace/JuggleMaster/bin/classes/com/jm/R$string.class
workspace/JuggleMaster/bin/classes/com/jm/R.class
workspace/JuggleMaster/bin/classes/com/jm/SiteSwap.class
workspace/JuggleMaster/bin/classes/com/jm/db/Dao.class
workspace/JuggleMaster/bin/classes/com/jm/gen/GenProc.class
workspace/JuggleMaster/bin/classes/com/jm/gen/MainGen.class
workspace/JuggleMaster/bin/classes/com/jm/gen/MainJudge.class
workspace/JuggleMaster/bin/classes/com/jm/gen/StringEx.class
workspace/JuggleMaster/bin/classes/com/jm/opengl/OpenGLActivityBase.class
workspace/JuggleMaster/bin/classes/com/jm/utility/AsyncTaskCommand.class
workspace/JuggleMaster/bin/classes/com/jm/utility/BaseActivity.class
workspace/JuggleMaster/bin/res/drawable-hdpi/icon.png [deleted file]
workspace/JuggleMaster/bin/res/drawable-ldpi/icon.png [deleted file]
workspace/JuggleMaster/bin/res/drawable-mdpi/icon.png [deleted file]
workspace/JuggleMaster/gen/com/jm/R.java
workspace/JuggleMaster/res/color/pattern_list_item.xml [new file with mode: 0644]
workspace/JuggleMaster/res/layout/help.xml
workspace/JuggleMaster/res/layout/pattern_manager.xml [new file with mode: 0644]
workspace/JuggleMaster/res/layout/simple_list_item_2.xml [new file with mode: 0644]
workspace/JuggleMaster/res/values-sw600dp/dimens.xml [new file with mode: 0644]
workspace/JuggleMaster/res/values-sw720dp-land/dimens.xml [new file with mode: 0644]
workspace/JuggleMaster/res/values/colors.xml [new file with mode: 0644]
workspace/JuggleMaster/res/values/dimens.xml [new file with mode: 0644]
workspace/JuggleMaster/res/values/strings.xml
workspace/JuggleMaster/src/com/jm/Edit.java
workspace/JuggleMaster/src/com/jm/Help.java
workspace/JuggleMaster/src/com/jm/JmPattern.java
workspace/JuggleMaster/src/com/jm/JuggleMaster.java
workspace/JuggleMaster/src/com/jm/JuggleView.java
workspace/JuggleMaster/src/com/jm/Menu1.java
workspace/JuggleMaster/src/com/jm/Menu2.java
workspace/JuggleMaster/src/com/jm/PatternManager.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/common/Constant.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/db/Dao.java
workspace/JuggleMaster/src/com/jm/db/DaoFactory.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/db/DatabaseHelper.java
workspace/JuggleMaster/src/com/jm/db/IDao.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/db/InitDB.java
workspace/JuggleMaster/src/com/jm/db/JmDao.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/db/PatternFile.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/pattern/LineAnalyzer.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/pattern/PatternAnalyzer.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/pref/EditPrefUtil.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/pref/PrefUtil.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/pref/PrefUtilImpl.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/utility/CheckedLinearLayout.java [new file with mode: 0644]
workspace/JuggleMaster/src/com/jm/utility/JmUnsupportedOperationException.java [new file with mode: 0644]
workspace/JuggleMaster/src/pattern.jm [new file with mode: 0644]
workspace/JuggleMaster/src/pattern_ja.jm [new file with mode: 0644]
workspace/JuggleMasterTest/.classpath [new file with mode: 0644]
workspace/JuggleMasterTest/.project [new file with mode: 0644]
workspace/JuggleMasterTest/AndroidManifest.xml [new file with mode: 0644]
workspace/JuggleMasterTest/hs_err_pid2529.log [new file with mode: 0644]
workspace/JuggleMasterTest/hs_err_pid2531.log [new file with mode: 0644]
workspace/JuggleMasterTest/hs_err_pid2536.log [new file with mode: 0644]
workspace/JuggleMasterTest/lint.xml [new file with mode: 0644]
workspace/JuggleMasterTest/proguard-project.txt [new file with mode: 0644]
workspace/JuggleMasterTest/project.properties [new file with mode: 0644]
workspace/JuggleMasterTest/res/drawable-hdpi/ic_launcher.png [new file with mode: 0644]
workspace/JuggleMasterTest/res/drawable-ldpi/ic_launcher.png [new file with mode: 0644]
workspace/JuggleMasterTest/res/drawable-mdpi/ic_launcher.png [new file with mode: 0644]
workspace/JuggleMasterTest/res/drawable-xhdpi/ic_launcher.png [new file with mode: 0644]
workspace/JuggleMasterTest/res/values/strings.xml [new file with mode: 0644]
workspace/JuggleMasterTest/src/com/jm/JmPatternTest.java [new file with mode: 0644]
workspace/JuggleMasterTest/src/com/jm/db/DaoTest.java [new file with mode: 0644]
workspace/JuggleMasterTest/src/com/jm/db/JmOpenHelper.java [new file with mode: 0644]
workspace/JuggleMasterTest/src/com/jm/pattern/LineAnalyzerTest.java [new file with mode: 0644]
workspace/JuggleMasterTest/src/com/jm/pattern/PatternAnalyzerTest.java [new file with mode: 0644]

index 451303c..676ae13 100644 (file)
Binary files a/.DS_Store and b/.DS_Store differ
index 6aed2eb..7bc01d9 100644 (file)
@@ -4,5 +4,6 @@
        <classpathentry kind="src" path="gen"/>
        <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+       <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
        <classpathentry kind="output" path="bin/classes"/>
 </classpath>
index 9bc57e2..5515800 100644 (file)
@@ -1,24 +1,37 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="com.jm"
-      android:versionCode="3"
-      android:versionName="1.2.0">
+    package="com.jm"
+    android:versionCode="3"
+    android:versionName="1.2.0" >
 
-
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen">
-        <activity android:name=".Menu1"
-                  android:label="@string/app_name">
+    <application
+        android:icon="@drawable/icon"
+        android:label="@string/app_name"
+        android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" >
+        <activity
+            android:name="com.jm.Menu1"
+            android:label="@string/app_name" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
+
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-
-    <activity android:name=".Menu2"></activity>
-    <activity android:name=".JuggleView"></activity>
-       <activity android:name=".Edit"></activity>
-       <activity android:name=".GenPattern"></activity>
-    <activity android:name=".Help"></activity>
+        <activity android:name="com.jm.Menu2" >
+        </activity>
+        <activity android:name="com.jm.JuggleView" >
+        </activity>
+        <activity android:name="com.jm.Edit" >
+        </activity>
+        <activity android:name="com.jm.GenPattern" >
+        </activity>
+        <activity android:name="com.jm.Help" >
+        </activity>
+        <activity
+            android:name="com.jm.PatternManager" >
+        </activity>
     </application>
+
     <uses-sdk android:minSdkVersion="7" />
+
 </manifest>
\ No newline at end of file
index 9bc57e2..5515800 100644 (file)
@@ -1,24 +1,37 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="com.jm"
-      android:versionCode="3"
-      android:versionName="1.2.0">
+    package="com.jm"
+    android:versionCode="3"
+    android:versionName="1.2.0" >
 
-
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen">
-        <activity android:name=".Menu1"
-                  android:label="@string/app_name">
+    <application
+        android:icon="@drawable/icon"
+        android:label="@string/app_name"
+        android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" >
+        <activity
+            android:name="com.jm.Menu1"
+            android:label="@string/app_name" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
+
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-
-    <activity android:name=".Menu2"></activity>
-    <activity android:name=".JuggleView"></activity>
-       <activity android:name=".Edit"></activity>
-       <activity android:name=".GenPattern"></activity>
-    <activity android:name=".Help"></activity>
+        <activity android:name="com.jm.Menu2" >
+        </activity>
+        <activity android:name="com.jm.JuggleView" >
+        </activity>
+        <activity android:name="com.jm.Edit" >
+        </activity>
+        <activity android:name="com.jm.GenPattern" >
+        </activity>
+        <activity android:name="com.jm.Help" >
+        </activity>
+        <activity
+            android:name="com.jm.PatternManager" >
+        </activity>
     </application>
+
     <uses-sdk android:minSdkVersion="7" />
+
 </manifest>
\ No newline at end of file
index 54736fa..03270ce 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Ball.class and b/workspace/JuggleMaster/bin/classes/com/jm/Ball.class differ
index 1135f41..ac4dab5 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$1.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$1.class differ
index 77c1981..5f8180a 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$2.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$2.class differ
index 6317b10..8f5e402 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$3.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$3.class differ
index 2ce2ee0..e892ae6 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$4.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$4.class differ
index 0a7c208..13cb346 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$5.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$5.class differ
index 804d21e..8414afe 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$6$1.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$6$1.class differ
index ad1e16d..6fa4304 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$6$2.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$6$2.class differ
index d742e84..63c683a 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$6.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$6.class differ
index 99e2e9b..73440e2 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit$7.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit$7.class differ
index ce98495..a5b37d8 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Edit.class and b/workspace/JuggleMaster/bin/classes/com/jm/Edit.class differ
index 2d1a129..c49c7e1 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/GenPattern.class and b/workspace/JuggleMaster/bin/classes/com/jm/GenPattern.class differ
index 7664c81..21e094e 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Help$1.class and b/workspace/JuggleMaster/bin/classes/com/jm/Help$1.class differ
index 9ef3028..900fc4d 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Help.class and b/workspace/JuggleMaster/bin/classes/com/jm/Help.class differ
index 26eeae3..e224a06 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/JmPattern.class and b/workspace/JuggleMaster/bin/classes/com/jm/JmPattern.class differ
index 0435ef2..a02af1f 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/JuggleMaster$1.class and b/workspace/JuggleMaster/bin/classes/com/jm/JuggleMaster$1.class differ
index b6ab808..04c4c1d 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/JuggleMaster.class and b/workspace/JuggleMaster/bin/classes/com/jm/JuggleMaster.class differ
index aa79307..8f0c195 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/JuggleView.class and b/workspace/JuggleMaster/bin/classes/com/jm/JuggleView.class differ
index 9828eda..7c2f074 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/JugglingBalls.class and b/workspace/JuggleMaster/bin/classes/com/jm/JugglingBalls.class differ
index 40863b6..03f30ae 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Menu1$1.class and b/workspace/JuggleMaster/bin/classes/com/jm/Menu1$1.class differ
index ac6b6dc..82be533 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Menu1.class and b/workspace/JuggleMaster/bin/classes/com/jm/Menu1.class differ
index effe324..51fa69d 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Menu2$1.class and b/workspace/JuggleMaster/bin/classes/com/jm/Menu2$1.class differ
index dd95350..9061018 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Menu2$2.class and b/workspace/JuggleMaster/bin/classes/com/jm/Menu2$2.class differ
index 88ef5cc..fad3d5c 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/Menu2.class and b/workspace/JuggleMaster/bin/classes/com/jm/Menu2.class differ
index b6c8948..ef18a32 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/R$drawable.class and b/workspace/JuggleMaster/bin/classes/com/jm/R$drawable.class differ
index 4b9c50f..0597d36 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/R$id.class and b/workspace/JuggleMaster/bin/classes/com/jm/R$id.class differ
index 73ae4a7..ef7573c 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/R$layout.class and b/workspace/JuggleMaster/bin/classes/com/jm/R$layout.class differ
index 4d8ceca..1b97698 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/R$string.class and b/workspace/JuggleMaster/bin/classes/com/jm/R$string.class differ
index 454b90d..d60fd94 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/R.class and b/workspace/JuggleMaster/bin/classes/com/jm/R.class differ
index fcec8c5..34e1031 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/SiteSwap.class and b/workspace/JuggleMaster/bin/classes/com/jm/SiteSwap.class differ
index 1d91200..229b01a 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/db/Dao.class and b/workspace/JuggleMaster/bin/classes/com/jm/db/Dao.class differ
index 132862b..bc87abd 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/gen/GenProc.class and b/workspace/JuggleMaster/bin/classes/com/jm/gen/GenProc.class differ
index 7aceae7..1083ca8 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/gen/MainGen.class and b/workspace/JuggleMaster/bin/classes/com/jm/gen/MainGen.class differ
index 114cd23..0eec009 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/gen/MainJudge.class and b/workspace/JuggleMaster/bin/classes/com/jm/gen/MainJudge.class differ
index bccdc8e..d35b1a4 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/gen/StringEx.class and b/workspace/JuggleMaster/bin/classes/com/jm/gen/StringEx.class differ
index 86f73e3..e83a124 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/opengl/OpenGLActivityBase.class and b/workspace/JuggleMaster/bin/classes/com/jm/opengl/OpenGLActivityBase.class differ
index 9ac9bc4..e1e5732 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/utility/AsyncTaskCommand.class and b/workspace/JuggleMaster/bin/classes/com/jm/utility/AsyncTaskCommand.class differ
index d214a57..a1d8bd2 100644 (file)
Binary files a/workspace/JuggleMaster/bin/classes/com/jm/utility/BaseActivity.class and b/workspace/JuggleMaster/bin/classes/com/jm/utility/BaseActivity.class differ
diff --git a/workspace/JuggleMaster/bin/res/drawable-hdpi/icon.png b/workspace/JuggleMaster/bin/res/drawable-hdpi/icon.png
deleted file mode 100644 (file)
index 7585296..0000000
Binary files a/workspace/JuggleMaster/bin/res/drawable-hdpi/icon.png and /dev/null differ
diff --git a/workspace/JuggleMaster/bin/res/drawable-ldpi/icon.png b/workspace/JuggleMaster/bin/res/drawable-ldpi/icon.png
deleted file mode 100644 (file)
index ded4ee4..0000000
Binary files a/workspace/JuggleMaster/bin/res/drawable-ldpi/icon.png and /dev/null differ
diff --git a/workspace/JuggleMaster/bin/res/drawable-mdpi/icon.png b/workspace/JuggleMaster/bin/res/drawable-mdpi/icon.png
deleted file mode 100644 (file)
index 0c51f87..0000000
Binary files a/workspace/JuggleMaster/bin/res/drawable-mdpi/icon.png and /dev/null differ
index 50b3a8a..76ad580 100644 (file)
@@ -10,60 +10,85 @@ package com.jm;
 public final class R {
     public static final class attr {
     }
+    public static final class color {
+        public static final int green1=0x7f040001;
+        public static final int green2=0x7f040002;
+        public static final int pattern_list_item=0x7f040003;
+        public static final int white=0x7f040000;
+    }
+    public static final class dimen {
+        /**  Default screen margins, per the Android Design guidelines. 
+
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    
+         */
+        public static final int activity_horizontal_margin=0x7f050000;
+        public static final int activity_vertical_margin=0x7f050001;
+    }
     public static final class drawable {
         public static final int icon=0x7f020000;
     }
     public static final class id {
-        public static final int CancelButton=0x7f050016;
-        public static final int DeleteButton=0x7f050015;
-        public static final int DwellLabel=0x7f05000c;
-        public static final int DwellValue=0x7f05000d;
-        public static final int HeightLabel=0x7f050008;
-        public static final int HeightValue=0x7f050009;
-        public static final int LinearLayout01=0x7f050007;
-        public static final int LinearLayout02=0x7f05000b;
-        public static final int LinearLayout03=0x7f050010;
-        public static final int LinearLayout04=0x7f050013;
-        public static final int LinearLayout74=0x7f050025;
-        public static final int Menu1=0x7f050030;
-        public static final int Menu2=0x7f050031;
-        public static final int MotionEdit=0x7f050005;
-        public static final int OkButton=0x7f050014;
-        public static final int PatternEdit=0x7f050001;
-        public static final int SiteswapEdit=0x7f050003;
-        public static final int SpeedLabel=0x7f050011;
-        public static final int SpeedValue=0x7f050012;
-        public static final int StartButton=0x7f05002f;
-        public static final int TextView01=0x7f050006;
-        public static final int TextView02=0x7f050000;
-        public static final int TextView03=0x7f050002;
-        public static final int TextView04=0x7f050004;
-        public static final int TextView05=0x7f05000a;
-        public static final int TextView06=0x7f05000e;
-        public static final int TextView07=0x7f05000f;
-        public static final int TextView70=0x7f050017;
-        public static final int TextView71=0x7f05001b;
-        public static final int TextView72=0x7f05001d;
-        public static final int TextView73=0x7f05001f;
-        public static final int TextView74=0x7f050020;
-        public static final int TextView75=0x7f050023;
-        public static final int button71=0x7f050026;
-        public static final int button73=0x7f050027;
-        public static final int button91=0x7f05002c;
-        public static final int radio71=0x7f050019;
-        public static final int radio72=0x7f05001a;
-        public static final int radiogroup71=0x7f050018;
-        public static final int spinner71=0x7f05001c;
-        public static final int spinner72=0x7f05001e;
-        public static final int spinner73=0x7f050021;
-        public static final int spinner74=0x7f050022;
-        public static final int spinner75=0x7f050024;
-        public static final int tableLayout1=0x7f05002d;
-        public static final int tableRow1=0x7f05002e;
-        public static final int textView91=0x7f050028;
-        public static final int textView92=0x7f050029;
-        public static final int textView93=0x7f05002a;
-        public static final int textView94=0x7f05002b;
+        public static final int CancelButton=0x7f070016;
+        public static final int DeleteButton=0x7f070015;
+        public static final int DwellLabel=0x7f07000c;
+        public static final int DwellValue=0x7f07000d;
+        public static final int HeightLabel=0x7f070008;
+        public static final int HeightValue=0x7f070009;
+        public static final int LinearLayout01=0x7f070007;
+        public static final int LinearLayout02=0x7f07000b;
+        public static final int LinearLayout03=0x7f070010;
+        public static final int LinearLayout04=0x7f070013;
+        public static final int LinearLayout74=0x7f070025;
+        public static final int Menu1=0x7f070031;
+        public static final int Menu2=0x7f070032;
+        public static final int MotionEdit=0x7f070005;
+        public static final int OkButton=0x7f070014;
+        public static final int PatternEdit=0x7f070001;
+        public static final int SiteswapEdit=0x7f070003;
+        public static final int SpeedLabel=0x7f070011;
+        public static final int SpeedValue=0x7f070012;
+        public static final int StartButton=0x7f070030;
+        public static final int TextView01=0x7f070006;
+        public static final int TextView02=0x7f070000;
+        public static final int TextView03=0x7f070002;
+        public static final int TextView04=0x7f070004;
+        public static final int TextView05=0x7f07000a;
+        public static final int TextView06=0x7f07000e;
+        public static final int TextView07=0x7f07000f;
+        public static final int TextView70=0x7f070017;
+        public static final int TextView71=0x7f07001b;
+        public static final int TextView72=0x7f07001d;
+        public static final int TextView73=0x7f07001f;
+        public static final int TextView74=0x7f070020;
+        public static final int TextView75=0x7f070023;
+        public static final int button71=0x7f070026;
+        public static final int button73=0x7f070027;
+        public static final int button91=0x7f07002d;
+        public static final int patternAddButton=0x7f070036;
+        public static final int patternCloseButton=0x7f070039;
+        public static final int patternDeleteButton=0x7f070038;
+        public static final int patternFileText=0x7f070034;
+        public static final int patternLayout=0x7f070033;
+        public static final int patternList=0x7f070035;
+        public static final int patternUpdateButton=0x7f070037;
+        public static final int radio71=0x7f070019;
+        public static final int radio72=0x7f07001a;
+        public static final int radiogroup71=0x7f070018;
+        public static final int spinner71=0x7f07001c;
+        public static final int spinner72=0x7f07001e;
+        public static final int spinner73=0x7f070021;
+        public static final int spinner74=0x7f070022;
+        public static final int spinner75=0x7f070024;
+        public static final int tableLayout1=0x7f07002e;
+        public static final int tableRow1=0x7f07002f;
+        public static final int text3=0x7f07003a;
+        public static final int textView91=0x7f070028;
+        public static final int textView92=0x7f070029;
+        public static final int textView93=0x7f07002a;
+        public static final int textView94=0x7f07002b;
+        public static final int textView95=0x7f07002c;
     }
     public static final class layout {
         public static final int edit=0x7f030000;
@@ -73,50 +98,61 @@ public final class R {
         public static final int main=0x7f030004;
         public static final int menu1=0x7f030005;
         public static final int menu2=0x7f030006;
+        public static final int pattern_manager=0x7f030007;
+        public static final int simple_list_item_2=0x7f030008;
     }
     public static final class string {
-        public static final int app_name=0x7f040001;
-        public static final int bheight=0x7f040018;
-        public static final int calculating=0x7f040013;
-        public static final int cancel=0x7f040009;
-        public static final int close=0x7f04000a;
-        public static final int common_settings=0x7f040010;
-        public static final int create=0x7f040012;
-        public static final int delete=0x7f040008;
-        public static final int error_unexpected=0x7f040021;
-        public static final int generate=0x7f04001b;
-        public static final int handling=0x7f04000d;
-        public static final int height=0x7f04000e;
-        public static final int help=0x7f040006;
-        public static final int help1=0x7f040002;
-        public static final int help2=0x7f040003;
-        public static final int help3=0x7f040004;
-        public static final int help4=0x7f040005;
-        public static final int hold=0x7f04000f;
-        public static final int lang=0x7f040000;
-        public static final int list0_1=0x7f040023;
-        public static final int list0_2=0x7f040024;
-        public static final int list0_3=0x7f040025;
-        public static final int list0_4=0x7f040026;
-        public static final int list0_5=0x7f040027;
-        public static final int list0_6=0x7f040028;
-        public static final int list0_7=0x7f040029;
-        public static final int list0_8=0x7f04002a;
-        public static final int message_delete_pattern=0x7f04001f;
-        public static final int message_nopattern=0x7f040020;
-        public static final int normal=0x7f040015;
-        public static final int number=0x7f040017;
-        public static final int patternMax=0x7f04001a;
-        public static final int patternTypes=0x7f040014;
-        public static final int pattern_name=0x7f04000b;
-        public static final int period=0x7f040019;
-        public static final int save=0x7f040007;
-        public static final int siteswap=0x7f04000c;
-        public static final int siteswap_error=0x7f040022;
-        public static final int speed=0x7f040011;
-        public static final int synchronization=0x7f040016;
-        public static final int title_delete=0x7f04001e;
-        public static final int title_system_error=0x7f04001d;
-        public static final int update=0x7f04001c;
+        public static final int action_settings=0x7f060032;
+        public static final int add=0x7f06000a;
+        public static final int andmode=0x7f060008;
+        public static final int app_name=0x7f060001;
+        public static final int bheight=0x7f06001c;
+        public static final int calculating=0x7f060017;
+        public static final int cancel=0x7f06000d;
+        public static final int close=0x7f06000e;
+        public static final int common_settings=0x7f060014;
+        public static final int create=0x7f060016;
+        public static final int delete=0x7f06000c;
+        public static final int error_unexpected=0x7f060027;
+        public static final int generate=0x7f06001f;
+        public static final int handling=0x7f060011;
+        public static final int height=0x7f060012;
+        public static final int hello_world=0x7f060033;
+        public static final int help=0x7f060006;
+        public static final int help1=0x7f060002;
+        public static final int help2=0x7f060003;
+        public static final int help3=0x7f060004;
+        public static final int help4=0x7f060005;
+        public static final int hold=0x7f060013;
+        public static final int lang=0x7f060000;
+        public static final int list0_1=0x7f060029;
+        public static final int list0_2=0x7f06002a;
+        public static final int list0_3=0x7f06002b;
+        public static final int list0_4=0x7f06002c;
+        public static final int list0_5=0x7f06002d;
+        public static final int list0_6=0x7f06002e;
+        public static final int list0_7=0x7f06002f;
+        public static final int list0_8=0x7f060030;
+        public static final int load=0x7f060009;
+        public static final int message_delete_pattern=0x7f060023;
+        public static final int message_delete_patternfile=0x7f060024;
+        public static final int message_nopattern=0x7f060026;
+        public static final int normal=0x7f060019;
+        public static final int number=0x7f06001b;
+        public static final int orgmode=0x7f060007;
+        public static final int patternFileTitle=0x7f060025;
+        public static final int patternMax=0x7f06001e;
+        public static final int patternTypes=0x7f060018;
+        public static final int pattern_name=0x7f06000f;
+        public static final int period=0x7f06001d;
+        public static final int save=0x7f06000b;
+        public static final int siteswap=0x7f060010;
+        public static final int siteswap_error=0x7f060028;
+        public static final int speed=0x7f060015;
+        public static final int synchronization=0x7f06001a;
+        public static final int title_activity_pattern_list=0x7f060031;
+        public static final int title_delete=0x7f060022;
+        public static final int title_system_error=0x7f060021;
+        public static final int update=0x7f060020;
     }
 }
diff --git a/workspace/JuggleMaster/res/color/pattern_list_item.xml b/workspace/JuggleMaster/res/color/pattern_list_item.xml
new file mode 100644 (file)
index 0000000..39f1fbb
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector 
+  xmlns:android="http://schemas.android.com/apk/res/android">
+<item 
+       android:state_pressed="true" 
+       android:drawable="@color/green1"
+/>
+<item 
+       android:state_selected="true"
+       android:drawable="@color/green1"
+/>
+<item
+       android:state_checked="true"
+       android:drawable="@color/green2"
+/> 
+</selector>
index 8b3809f..7386fa1 100644 (file)
@@ -6,40 +6,49 @@
        android:orientation="vertical"
   >
     <TextView
-       android:text="@+string/help1"
+       android:text=""
        android:id="@+id/textView91"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
-               android:layout_margin="5px"
-       android:textSize="14px"
+               android:layout_margin="5dp"
+       android:textSize="14dp"
     >
     </TextView>
     <TextView
-       android:text="@+string/help2"
+       android:text=""
        android:id="@+id/textView92"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
-               android:layout_margin="5px"
-       android:textSize="14px"
+               android:layout_margin="5dp"
+       android:textSize="14dp"
     >
     </TextView>
     <TextView
-       android:text="@+string/help3"
+       android:text=""
        android:id="@+id/textView93"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
-               android:layout_margin="5px"
-       android:textSize="14px"
+               android:layout_margin="5dp"
+       android:textSize="14dp"
     >
     </TextView>
     <TextView
-       android:text="@+string/help4"
+       android:text=""
        android:id="@+id/textView94"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
-               android:layout_margin="5px"
-       android:textSize="14px"
+               android:layout_margin="5dp"
+       android:textSize="14dp"
+       android:layout_weight="1"
+    >
+    </TextView>
+    <TextView
+       android:text=""
+       android:id="@+id/textView95"
+       android:layout_width="fill_parent" android:layout_height="wrap_content"
+               android:layout_margin="5dp"
+       android:textSize="14dp"
        android:layout_weight="1"
     >
     </TextView>
     <Button android:text="@+string/close" android:id="@+id/button91" android:layout_width="fill_parent" android:layout_height="wrap_content"
-               android:layout_margin="5px"
+               android:layout_margin="2dp"
     >
     </Button>
 </LinearLayout>
diff --git a/workspace/JuggleMaster/res/layout/pattern_manager.xml b/workspace/JuggleMaster/res/layout/pattern_manager.xml
new file mode 100644 (file)
index 0000000..40c4f9c
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical" >
+    
+       <LinearLayout android:id="@+id/patternLayout" android:padding="2dp" android:layout_margin="1dp" android:background="#999999" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
+               <TextView android:text="@+string/patternFileTitle" android:padding="2dp" android:textStyle="bold" android:background="#ccffff" android:layout_width="fill_parent" android:layout_height="wrap_content"></TextView>
+               <EditText android:text="@+id/patternFileText" android:id="@+id/patternFileText" android:layout_marginTop="5dp" android:layout_marginBottom="0dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="text"></EditText>
+       </LinearLayout>
+    <ListView
+        android:id="@+id/patternList"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1" >
+    </ListView>
+
+       <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content">
+               <Button android:text="@+string/add" android:layout_weight="1" android:id="@+id/patternAddButton" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
+               <Button android:text="@+string/update" android:layout_weight="1" android:id="@+id/patternUpdateButton" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
+               <Button android:text="@+string/delete" android:layout_weight="1" android:id="@+id/patternDeleteButton" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
+               <Button android:text="@+string/close" android:layout_weight="1" android:id="@+id/patternCloseButton" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
+       </LinearLayout>    
+
+</LinearLayout>
diff --git a/workspace/JuggleMaster/res/layout/simple_list_item_2.xml b/workspace/JuggleMaster/res/layout/simple_list_item_2.xml
new file mode 100644 (file)
index 0000000..493c3ad
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<com.jm.utility.CheckedLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+       android:orientation="horizontal" android:layout_width="fill_parent"\r
+       android:layout_height="wrap_content" android:background="@color/pattern_list_item">\r
+\r
+       <TextView\r
+               android:id="@+id/text3" android:layout_width="fill_parent"\r
+               android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"\r
+               android:gravity="center_vertical" android:paddingLeft="6dip"\r
+               android:minHeight="?android:attr/listPreferredItemHeight" />\r
+</com.jm.utility.CheckedLinearLayout>
\ No newline at end of file
diff --git a/workspace/JuggleMaster/res/values-sw600dp/dimens.xml b/workspace/JuggleMaster/res/values-sw600dp/dimens.xml
new file mode 100644 (file)
index 0000000..44f01db
--- /dev/null
@@ -0,0 +1,8 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw600dp devices (e.g. 7" tablets) here.
+    -->
+
+</resources>
diff --git a/workspace/JuggleMaster/res/values-sw720dp-land/dimens.xml b/workspace/JuggleMaster/res/values-sw720dp-land/dimens.xml
new file mode 100644 (file)
index 0000000..61e3fa8
--- /dev/null
@@ -0,0 +1,9 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    -->
+    <dimen name="activity_horizontal_margin">128dp</dimen>
+
+</resources>
diff --git a/workspace/JuggleMaster/res/values/colors.xml b/workspace/JuggleMaster/res/values/colors.xml
new file mode 100644 (file)
index 0000000..324ffd1
--- /dev/null
@@ -0,0 +1,5 @@
+<resources>
+<color name="white">#ffffff</color>
+<color name="green1">#99ff99</color>
+<color name="green2">#ccffcc</color>
+</resources>
diff --git a/workspace/JuggleMaster/res/values/dimens.xml b/workspace/JuggleMaster/res/values/dimens.xml
new file mode 100644 (file)
index 0000000..55c1e59
--- /dev/null
@@ -0,0 +1,7 @@
+<resources>
+
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>
index ba60e06..6a4e44a 100644 (file)
@@ -1,13 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+
     <string name="lang">1</string>
-    
     <string name="app_name">JuggleMaster</string>
     <string name="help1">●You can change the figure by pressing a few seconds on its name</string>
     <string name="help2">●You can create a new figure by going into the menu [7] My patterns</string>
     <string name="help3">●You can generate patterns by going to the menu [8] generator patterns</string>
     <string name="help4">●You can change your point of view by draging the juggler</string>
     <string name="help">Help</string>
+    <string name="orgmode">オリジナルモード</string>
+    <string name="andmode">Androidモード</string>
+    <string name="load">パターンファイル選択</string>
+    <string name="add">追加</string>
     <string name="save">Save</string>
     <string name="delete">Delete</string>
     <string name="cancel">Cancel</string>
@@ -21,7 +25,6 @@
     <string name="speed">Speed</string>
     <string name="create">New</string>
     <string name="calculating">During the calculation・・・</string>
-    
     <string name="patternTypes">The type of pattern</string>
     <string name="normal">Usually</string>
     <string name="synchronization">Synchro</string>
     <string name="period">Period of the pattern</string>
     <string name="patternMax">The maximum number of patterns</string>
     <string name="generate">Generation</string>
-
     <string name="update">Update</string>
-    
     <string name="title_system_error">System Error</string>
     <string name="title_delete">Delete</string>
     <string name="message_delete_pattern">Are you sure you want to delete this pattern</string>
+    <string name="message_delete_patternfile">このパターンファイルを削除しますか</string>
+    <string name="patternFileTitle">パターン名</string>
     <string name="message_nopattern">There is no pattern</string>
     <string name="error_unexpected">An unexpected error has occurred</string>
-
     <string name="siteswap_error">Error</string>
-    
     <string name="list0_1">[1] 3 Balls Part 1</string>
     <string name="list0_2">[2] 3 Balls Part 2</string>
     <string name="list0_3">[3] 4 Balls</string>
@@ -49,4 +50,8 @@
     <string name="list0_6">[6] Education</string>
     <string name="list0_7">[7] My patterns</string>
     <string name="list0_8">[8] Patterns generator</string>
+    <string name="title_activity_pattern_list">PatternList</string>
+    <string name="action_settings">Settings</string>
+    <string name="hello_world">Hello world!</string>
+
 </resources>
index fd86083..36f1bd6 100644 (file)
@@ -6,6 +6,7 @@ import android.os.Bundle;
 import android.view.KeyEvent;\r
 import android.view.View;\r
 import android.view.View.OnClickListener;\r
+import android.view.WindowManager.LayoutParams;\r
 import android.widget.Button;\r
 import android.widget.EditText;\r
 import android.widget.SeekBar;\r
@@ -13,7 +14,9 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
 import android.widget.TextView;\r
 import android.widget.TextView.OnEditorActionListener;\r
 \r
-import com.jm.db.Dao;\r
+import com.jm.common.Constant;\r
+import com.jm.db.DaoFactory;\r
+import com.jm.db.IDao;\r
 import com.jm.utility.BaseActivity;\r
 import com.jm.utility.JmException;\r
 import com.jm.utility.Resource;\r
@@ -42,8 +45,9 @@ public class Edit extends BaseActivity {
 \r
        public void onCreate(Bundle savedInstanceState) {\r
                super.onCreate(savedInstanceState);\r
+               this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);\r
                setContentView(R.layout.edit);\r
-\r
+               \r
                patternEdit = (EditText) findViewById(R.id.PatternEdit);\r
                siteswapEdit = (EditText) findViewById(R.id.SiteswapEdit);\r
                motionEdit = (EditText) findViewById(R.id.MotionEdit);\r
@@ -70,8 +74,8 @@ public class Edit extends BaseActivity {
                        deleteButton.setEnabled(false);\r
                } else {\r
                        try {\r
-                               id = extras.getInt("ID");\r
-                               JmPattern[] list = Dao.getInstance().getFromId(id);\r
+                               id = extras.getInt(Constant.EXTRAS_ID);\r
+                               JmPattern[] list = DaoFactory.getInstance().getDao().getFromId(id);\r
                                if (list.length <= 0) {\r
                                        return;\r
                                }\r
@@ -82,8 +86,9 @@ public class Edit extends BaseActivity {
                                heightSeekBar.setProgress(getProgressValue(jp.getHeight()));\r
                                dwellSeekBar.setProgress(getProgressValue(jp.getDwell()));\r
 \r
+                               DaoFactory f = DaoFactory.getInstance();\r
                                index = extras.getInt("INDEX1");\r
-                               if (index != Menu1.INDEX6) {\r
+                               if (f.getMode() != DaoFactory.Mode.ANDROID || index != Menu1.INDEX6) {\r
                                        deleteButton.setEnabled(false);\r
                                }\r
                        } catch (JmException e) {\r
@@ -100,6 +105,7 @@ public class Edit extends BaseActivity {
                speedTextView.setText(String.valueOf(getTextValue(speedSeekBar\r
                                .getProgress())));\r
 \r
+               setStatus();\r
                setListener();\r
        }\r
 \r
@@ -204,12 +210,14 @@ public class Edit extends BaseActivity {
                                                                .getProgress()), getTextValue(dwellSeekBar\r
                                                                .getProgress()), motion);\r
                                try {\r
-                                       Dao dao = Dao.getInstance();\r
+                                       IDao<?> dao = DaoFactory.getInstance().getDao();\r
                                        if (mode == NEW) {\r
                                                int m = dao.max(type);\r
                                                dao.add(jp, m + 1);\r
                                        } else {\r
-                                               dao.set(jp);\r
+                                               if (dao.isWritable()){\r
+                                                       dao.set(jp);\r
+                                               }\r
                                        }\r
                                        Resource.speed = getTextValue(speedSeekBar.getProgress());\r
                                } catch (JmException e) {\r
@@ -234,7 +242,7 @@ public class Edit extends BaseActivity {
                                                        public void onClick(DialogInterface dialog,\r
                                                                        int which) {\r
                                                                try {\r
-                                                                       Dao.getInstance().delete(id);\r
+                                                                       DaoFactory.getInstance().getDao().delete(id);\r
                                                                        finish();\r
                                                                } catch (JmException e) {\r
                                                                        showDialog(this, e);\r
@@ -270,4 +278,18 @@ public class Edit extends BaseActivity {
        private int getProgressValue(int val) {\r
                return val - 1;\r
        }\r
+       \r
+       private void setStatus() {\r
+               IDao<?> dao = DaoFactory.getInstance().getDao();\r
+               \r
+               if (!dao.isWritable()){\r
+                       boolean b = false;\r
+                       \r
+                       patternEdit.setEnabled(b);\r
+                       siteswapEdit.setEnabled(b);\r
+                       motionEdit.setEnabled(b);\r
+                       heightSeekBar.setEnabled(b);\r
+                       dwellSeekBar.setEnabled(b);\r
+               }\r
+       }\r
 }\r
index bb95d71..3af88b7 100644 (file)
@@ -5,7 +5,9 @@ import android.view.Menu;
 import android.view.View;\r
 import android.view.View.OnClickListener;\r
 import android.widget.Button;\r
+import android.widget.TextView;\r
 \r
+import com.jm.db.DaoFactory;\r
 import com.jm.utility.BaseActivity;\r
 \r
 public class Help extends BaseActivity {\r
@@ -14,6 +16,40 @@ public class Help extends BaseActivity {
         super.onCreate(savedInstanceState);\r
         setContentView(R.layout.help);\r
 \r
+        TextView textView1 = (TextView) findViewById(R.id.textView91);\r
+        TextView textView2 = (TextView) findViewById(R.id.textView92);\r
+        TextView textView3 = (TextView) findViewById(R.id.textView93);\r
+        TextView textView4 = (TextView) findViewById(R.id.textView94);\r
+        TextView textView5 = (TextView) findViewById(R.id.textView95);\r
+\r
+        TextView[] textViews = {\r
+                       textView1,\r
+                       textView2,\r
+                       textView3,\r
+                       textView4,\r
+                       textView5,\r
+        };\r
+        String[] messages = {\r
+               getString(R.string.help1),\r
+               getString(R.string.help2),\r
+               getString(R.string.help3),\r
+               getString(R.string.help4),\r
+               ""\r
+        };\r
+        int i = 0;\r
+        if (DaoFactory.getInstance().getMode() == DaoFactory.Mode.ORIGINAL){\r
+               textViews[i++].setText(messages[0]);\r
+               textViews[i++].setText(messages[3]);            \r
+        }\r
+        else {\r
+               textViews[i++].setText(messages[0]);\r
+               textViews[i++].setText(messages[1]);\r
+               textViews[i++].setText(messages[2]);\r
+               textViews[i++].setText(messages[3]);            \r
+        }\r
+        \r
+        textView1.setText(getString(R.string.help1));\r
+        \r
                Button button = (Button)findViewById(R.id.button91);\r
         button.setOnClickListener(new OnClickListener(){\r
                        @Override\r
index f486d7a..a3bf00a 100644 (file)
@@ -96,7 +96,7 @@ public class JmPattern implements Serializable {
 //     }\r
 //\r
        public JmPattern(int id, int type, String name, String siteswap, int height, int dwell, byte[][] motion) {\r
-               this(type, name, siteswap, height, dwell, motion);\r
+               this(type, name, siteswap, height, dwell, (motion == null || motion.length <= 0)? NORMAL_PATTERN : motion);\r
                this.id = id;\r
        }\r
 //// }\r
index 4e7c2ac..7e08f2d 100644 (file)
@@ -13,36 +13,36 @@ import com.jm.utility.BaseActivity;
 import com.jm.utility.JmException;
 
 public class JuggleMaster extends BaseActivity {
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.main);
 
-        try {
-               DatabaseHelper helper = new DatabaseHelper(this);
-               SQLiteDatabase db = helper.getWritableDatabase();
-               int count = Dao.getInstance().count();
-               Dao.getInstance().start(db);
-               if (count <= 0){
-                       new PatternList();
-               }
-        }
-               catch (JmException e){
+               try {
+                       DatabaseHelper helper = new DatabaseHelper(this);
+                       SQLiteDatabase db = helper.getWritableDatabase();
+                       Dao dao = Dao.getInstance();
+                       int count = dao.count();
+                       dao.start(db);
+                       if (count <= 0) {
+                               new PatternList();
+                       }
+               } catch (JmException e) {
                        showDialog(this, e);
                        return;
-               }
-               catch (Exception e){
+               } catch (Exception e) {
                        showDialog(this, e);
                        return;
                }
 
-               Button startButton = (Button)findViewById(R.id.StartButton);
-        startButton.setOnClickListener(new OnClickListener(){
+               Button startButton = (Button) findViewById(R.id.StartButton);
+               startButton.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View arg0) {
-                               Intent intent = new Intent(JuggleMaster.this, (Class<?>)Menu1.class);
+                               Intent intent = new Intent(JuggleMaster.this,
+                                               (Class<?>) Menu1.class);
                                startActivityForResult(intent, -1);
                        }
-        });
-    }
+               });
+       }
 }
\ No newline at end of file
index 00f5bf3..428a210 100644 (file)
@@ -5,7 +5,9 @@ import javax.microedition.khronos.opengles.GL10;
 import android.os.Bundle;\r
 import android.view.MotionEvent;\r
 \r
-import com.jm.db.Dao;\r
+import com.jm.common.Constant;\r
+import com.jm.db.DaoFactory;\r
+import com.jm.db.IDao;\r
 import com.jm.opengl.JuggleDrawer;\r
 import com.jm.opengl.OpenGLActivityBase;\r
 import com.jm.utility.JmException;\r
@@ -58,9 +60,14 @@ public class JuggleView extends OpenGLActivityBase {
            Bundle extras = getIntent().getExtras();\r
                try {\r
                        JmPattern jp = null;\r
-                       int id = extras.getInt("ID");\r
+                       int id = extras.getInt(Constant.EXTRAS_ID);\r
                        if (id >= 0) {\r
-                               JmPattern[] list = Dao.getInstance().getFromId(id);\r
+                               IDao<?> dao = DaoFactory.getInstance().getDao();\r
+                               JmPattern[] list = dao.getFromId(id);\r
+                               if (list == null){\r
+                               finish();\r
+                                       return;\r
+                               }\r
                                if (list.length <= 0) {\r
                                        throw new JmException();\r
                                }\r
index 926b4ed..8b69e0e 100644 (file)
@@ -1,24 +1,36 @@
 package com.jm;\r
 \r
+import java.io.ByteArrayInputStream;\r
+\r
 import android.content.Intent;\r
 import android.os.Bundle;\r
+import android.view.Menu;\r
+import android.view.MenuItem;\r
 import android.view.View;\r
 import android.widget.AdapterView;\r
 import android.widget.AdapterView.OnItemClickListener;\r
 import android.widget.ArrayAdapter;\r
 import android.widget.ListView;\r
 \r
+import com.jm.common.Constant;\r
 import com.jm.db.Dao;\r
+import com.jm.db.DaoFactory;\r
 import com.jm.db.DatabaseHelper;\r
+import com.jm.db.IDao;\r
 import com.jm.db.InitDB;\r
+import com.jm.db.JmDao;\r
+import com.jm.db.PatternFile;\r
+import com.jm.pref.EditPrefUtil;\r
 import com.jm.utility.AsyncTaskCommand;\r
 import com.jm.utility.BaseActivity;\r
+import com.jm.utility.Debug;\r
 import com.jm.utility.JmException;\r
 \r
 public class Menu1 extends BaseActivity {\r
        public static final int INDEX6 = 6;\r
        public static final int INDEX7 = 7;\r
        private static boolean isInit = true;\r
+       private EditPrefUtil pref = new EditPrefUtil(this);\r
 \r
        @Override\r
        public void onCreate(Bundle savedInstanceState) {\r
@@ -32,12 +44,16 @@ public class Menu1 extends BaseActivity {
                        }\r
                }\r
 \r
-               // CharSequence[] list = PatternList.PACKAGE_INDEX;\r
-               CharSequence[] list = { getString(R.string.list0_1),\r
-                               getString(R.string.list0_2), getString(R.string.list0_3),\r
-                               getString(R.string.list0_4), getString(R.string.list0_5),\r
-                               getString(R.string.list0_6), getString(R.string.list0_7),\r
-                               getString(R.string.list0_8) };\r
+               updateList();\r
+       }\r
+\r
+       private void updateList() {\r
+               IDao<?> dao = DaoFactory.getInstance().getDao();\r
+               updateList(dao);\r
+       }\r
+\r
+       private void updateList(IDao<?> dao) {\r
+               CharSequence[] list = dao.getMenu();\r
                ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(\r
                                this, android.R.layout.simple_list_item_1, list);\r
                ListView listView = (ListView) findViewById(R.id.Menu1);\r
@@ -47,7 +63,10 @@ public class Menu1 extends BaseActivity {
                        @Override\r
                        public void onItemClick(AdapterView<?> parent, View view,\r
                                        int position, long id) {\r
-                               if (position == INDEX7) {\r
+                               DaoFactory f = DaoFactory.getInstance();\r
+\r
+                               if (f.getMode() == DaoFactory.Mode.ANDROID\r
+                                               && position == INDEX7) {\r
                                        Intent intent = new Intent(Menu1.this,\r
                                                        (Class<?>) GenPattern.class);\r
                                        intent.putExtra("INDEX", position);\r
@@ -63,21 +82,119 @@ public class Menu1 extends BaseActivity {
        }\r
 \r
        private boolean init() {\r
+               boolean ret = false;\r
                try {\r
                        DatabaseHelper helper = DatabaseHelper.getInstance();\r
                        boolean convFlag = helper.getConvFlag();\r
                        int count;\r
-                       count = Dao.getInstance().countAll();\r
+\r
+                       Dao dao = Dao.getInstance();\r
+                       dao.setContext(this);\r
+                       count = dao.countAll();\r
                        if (count <= 0 || convFlag) {\r
                                InitDB idb = new InitDB(this.getApplicationContext());\r
                                AsyncTaskCommand command = new AsyncTaskCommand(this, idb,\r
                                                getString(R.string.update), false);\r
                                command.execute((String[]) null);\r
-                               return false;\r
+                       } else {\r
+                               JmDao jdao = JmDao.getInstance();\r
+                               jdao.init(null, this);\r
                        }\r
                } catch (JmException e) {\r
+                       Debug.d(this, e.getMessage());\r
                        return true;\r
                }\r
-               return false;\r
+               return ret;\r
+       }\r
+\r
+       @Override\r
+       public boolean onCreateOptionsMenu(Menu menu) {\r
+               menu.add(0, Menu.FIRST + 1, Menu.NONE, R.string.orgmode);\r
+               menu.add(0, Menu.FIRST + 2, Menu.NONE, R.string.andmode);\r
+               menu.add(0, Menu.FIRST + 3, Menu.NONE, R.string.load);\r
+               boolean ret = super.onCreateOptionsMenu(menu);\r
+\r
+               return ret;\r
+       }\r
+\r
+       @Override\r
+       public boolean onPrepareOptionsMenu(Menu menu) {\r
+               DaoFactory f = DaoFactory.getInstance();\r
+               if (f.getMode() == DaoFactory.Mode.ORIGINAL) {\r
+                       menu.findItem(Menu.FIRST + 1).setVisible(false);\r
+                       menu.findItem(Menu.FIRST + 2).setVisible(true);\r
+                       menu.findItem(Menu.FIRST + 3).setVisible(true);\r
+               } else {\r
+                       menu.findItem(Menu.FIRST + 1).setVisible(true);\r
+                       menu.findItem(Menu.FIRST + 2).setVisible(false);\r
+                       menu.findItem(Menu.FIRST + 3).setVisible(false);\r
+               }\r
+               return super.onPrepareOptionsMenu(menu);\r
+       }\r
+\r
+       @Override\r
+       public boolean onOptionsItemSelected(MenuItem item) {\r
+               boolean ret = true;\r
+               Intent intent;\r
+\r
+               try {\r
+                       switch (item.getItemId()) {\r
+                       case Menu.FIRST:\r
+                               intent = new Intent(this, (Class<?>) Help.class);\r
+                               startActivityForResult(intent, -1);\r
+                               break;\r
+                       case Menu.FIRST + 1:\r
+                       case Menu.FIRST + 2:\r
+                               changeMode();\r
+                               break;\r
+                       case Menu.FIRST + 3:\r
+                               PatternManager.init(this.getApplicationContext());\r
+                               intent = new Intent(this, (Class<?>) PatternManager.class);\r
+                               startActivityForResult(intent, 1);\r
+                               break;\r
+                       default:\r
+                               ret = super.onOptionsItemSelected(item);\r
+                               break;\r
+                       }\r
+               } catch (Exception e) {\r
+                       terminate(e);\r
+               }\r
+               return ret;\r
+       }\r
+\r
+       protected void onActivityResult(int requestCode, int resultCode,\r
+                       Intent intent) {\r
+               super.onActivityResult(requestCode, resultCode, intent);\r
+\r
+               if (resultCode != RESULT_OK) {\r
+                       return;\r
+               }\r
+\r
+               switch (requestCode) {\r
+               case 1:\r
+                       Bundle extras = intent.getExtras();\r
+                       long pid = extras.getLong(Constant.EXTRAS_ID);\r
+\r
+                       Dao dao = Dao.getInstance();\r
+                       PatternFile p = dao.getPatternFile(pid);\r
+\r
+                       ByteArrayInputStream bis = new ByteArrayInputStream(p.getValue());\r
+\r
+                       JmDao jmdao = JmDao.getInstance();\r
+                       jmdao.loadPatternFile(bis);\r
+\r
+                       pref.put(Constant.PREF_SELECTED_PATTERN_INDEX, pid);\r
+                       pref.update();\r
+\r
+                       updateList();\r
+                       break;\r
+               }\r
+       }\r
+\r
+       private void changeMode() {\r
+               DaoFactory f = DaoFactory.getInstance();\r
+               f.changeMode();\r
+\r
+               updateList();\r
        }\r
 }\r
index 1446588..ee4640f 100644 (file)
@@ -10,7 +10,8 @@ import android.widget.AdapterView.OnItemClickListener;
 import android.widget.AdapterView.OnItemLongClickListener;\r
 import android.widget.ListView;\r
 \r
-import com.jm.db.Dao;\r
+import com.jm.common.Constant;\r
+import com.jm.db.DaoFactory;\r
 import com.jm.utility.BaseActivity;\r
 import com.jm.utility.JmException;\r
 import com.jm.utility.ListViewArrayAdapter;\r
@@ -39,12 +40,13 @@ public class Menu2 extends BaseActivity {
 \r
            Bundle extras = getIntent().getExtras();\r
            index = extras.getInt("INDEX");\r
-           if (index == Menu1.INDEX7){\r
+               DaoFactory f = DaoFactory.getInstance();\r
+           if (f.getMode() == DaoFactory.Mode.ANDROID && index == Menu1.INDEX7){\r
                list = listGen;\r
            }\r
            else {\r
                    try {\r
-                       list = Dao.getInstance().get(index);\r
+                       list = DaoFactory.getInstance().getDao().get(index);\r
                        listGen = list; // 不要では\r
                    }\r
                    catch (JmException e){\r
@@ -72,13 +74,15 @@ public class Menu2 extends BaseActivity {
                listView.setOnItemClickListener(new OnItemClickListener() {\r
                        @Override\r
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
-                               if (index == Menu1.INDEX6 && position == 0){\r
+                               DaoFactory f = DaoFactory.getInstance();\r
+                               \r
+                               if (f.getMode() == DaoFactory.Mode.ANDROID && index == Menu1.INDEX6 && position == 0){\r
                                        Intent intent = new Intent(Menu2.this, (Class<?>)Edit.class);\r
                                        intent.putExtra("MODE", Edit.NEW);\r
-                                       intent.putExtra("ID", list[position].getId());\r
+                                       intent.putExtra(Constant.EXTRAS_ID, list[position].getId());\r
                                        startActivityForResult(intent, -1);                             \r
                                }\r
-                               else if (index == Menu1.INDEX7){\r
+                               else if (f.getMode() == DaoFactory.Mode.ANDROID && index == Menu1.INDEX7){\r
                                        initJuggleView();\r
                                        \r
                                        topPosition = listView.getFirstVisiblePosition();\r
@@ -87,7 +91,7 @@ public class Menu2 extends BaseActivity {
                                        Intent intent = new Intent(Menu2.this, (Class<?>)JuggleView.class);\r
                                        intent.putExtra("INDEX1", index);\r
                                        intent.putExtra("INDEX2", position);\r
-                                       intent.putExtra("ID", -1);\r
+                                       intent.putExtra(Constant.EXTRAS_ID, -1);\r
                                        intent.putExtra("PATTERN", (Serializable)list[position]);\r
                                        startActivityForResult(intent, -1);                                     \r
                                }\r
@@ -100,7 +104,7 @@ public class Menu2 extends BaseActivity {
                                        Intent intent = new Intent(Menu2.this, (Class<?>)JuggleView.class);\r
                                        intent.putExtra("INDEX1", index);\r
                                        intent.putExtra("INDEX2", position);\r
-                                       intent.putExtra("ID", list[position].getId());\r
+                                       intent.putExtra(Constant.EXTRAS_ID, list[position].getId());\r
                                        startActivityForResult(intent, -1);\r
                                }\r
                        }                       \r
@@ -110,16 +114,18 @@ public class Menu2 extends BaseActivity {
                        @Override\r
                        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,\r
                                        int position, long arg3) {\r
-                               if (index == Menu1.INDEX6 && position == 0){\r
+                               DaoFactory f = DaoFactory.getInstance();\r
+\r
+                               if (f.getMode() == DaoFactory.Mode.ANDROID && index == Menu1.INDEX6 && position == 0){\r
                                        return false;\r
                                }\r
-                               if (index == Menu1.INDEX7){\r
+                               if (f.getMode() == DaoFactory.Mode.ANDROID && index == Menu1.INDEX7){\r
                                        return false;\r
                                }\r
                                Intent intent = new Intent(Menu2.this, (Class<?>)Edit.class);\r
                                intent.putExtra("MODE", Edit.EDIT);\r
                                intent.putExtra("INDEX1", index);\r
-                               intent.putExtra("ID", list[position].getId());\r
+                               intent.putExtra(Constant.EXTRAS_ID, list[position].getId());\r
                                startActivityForResult(intent, -1);                             \r
                                return true;\r
                        }\r
@@ -130,12 +136,13 @@ public class Menu2 extends BaseActivity {
        protected void onRestart() {\r
                super.onRestart();\r
                \r
-               if (index == Menu1.INDEX7){\r
+               DaoFactory f = DaoFactory.getInstance();\r
+               if (f.getMode() == DaoFactory.Mode.ANDROID && index == Menu1.INDEX7){\r
                        list = listGen;\r
                }\r
                else if (index >= 0) {\r
                        try {\r
-                               list = Dao.getInstance().get(index);\r
+                               list = DaoFactory.getInstance().getDao().get(index);\r
                        } catch (JmException e) {\r
                                showDialog(this, e);\r
                                return;\r
diff --git a/workspace/JuggleMaster/src/com/jm/PatternManager.java b/workspace/JuggleMaster/src/com/jm/PatternManager.java
new file mode 100644 (file)
index 0000000..dbfb135
--- /dev/null
@@ -0,0 +1,347 @@
+package com.jm;
+
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.List;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.jm.common.Constant;
+import com.jm.db.Dao;
+import com.jm.db.PatternFile;
+import com.jm.pref.EditPrefUtil;
+import com.jm.utility.BaseActivity;
+import com.jm.utility.Debug;
+import com.jm.utility.JmException;
+
+public class PatternManager extends BaseActivity {
+       private enum Status {
+               NORMAL, SELECTED, INPUT_FILENAME, UPDATE, NONE
+       };
+
+       private static int selectedIndex = -1;
+       private EditPrefUtil pref = new EditPrefUtil(this);
+       private Button patternAddButton;
+       private Button patternUpdateButton;
+       private Button patternDeleteButton;
+       private Button patternCloseButton;
+       private LinearLayout patternLayout;
+       private TextView patternFileText;
+       private ListView listView;
+       private PatternFile[] list;
+       private Status status = Status.NORMAL;
+       private InputStream inputStream;
+       private int selectedPatternIndex = -1;
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.pattern_manager);
+
+               patternAddButton = (Button) findViewById(R.id.patternAddButton);
+               patternUpdateButton = (Button) findViewById(R.id.patternUpdateButton);
+               patternDeleteButton = (Button) findViewById(R.id.patternDeleteButton);
+               patternCloseButton = (Button) findViewById(R.id.patternCloseButton);
+               listView = (ListView) findViewById(R.id.patternList);
+               patternLayout = (LinearLayout) findViewById(R.id.patternLayout);
+               patternFileText = (TextView) findViewById(R.id.patternFileText);
+
+               listView.setOnItemClickListener(new OnItemClickListener() {
+                       @Override
+                       public void onItemClick(AdapterView<?> parent, View view,
+                                       int position, long id) {
+                               listViewOnItemClick(parent, view, position, id);
+                       }
+               });
+
+               patternAddButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View view) {
+                               patternAddButtonOnClick();
+                       }
+               });
+               patternUpdateButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View view) {
+                               patternUpdateButtonOnClick();
+                       }
+               });
+               patternDeleteButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View view) {
+                               patternDeleteButtonOnClick();
+                       }
+               });
+               patternCloseButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View view) {
+                               patternCloseButtonOnClick();
+                       }
+               });
+               patternFileText.addTextChangedListener(new TextWatcher() {
+                       @Override
+                       public void afterTextChanged(Editable arg0) {
+
+                       }
+
+                       @Override
+                       public void beforeTextChanged(CharSequence arg0, int arg1,
+                                       int arg2, int arg3) {
+
+                       }
+
+                       @Override
+                       public void onTextChanged(CharSequence arg0, int arg1, int arg2,
+                                       int arg3) {
+                               setStatus();
+                       }
+               });
+               listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+
+               selectedIndex = pref.getInt(Constant.PREF_PATTERN_FILE_INDEX);
+               setStatus((selectedIndex >= 0) ? Status.SELECTED : Status.NORMAL);
+               updateList();
+
+               selectedPatternIndex = pref
+                               .getInt(Constant.PREF_SELECTED_PATTERN_INDEX);
+       }
+
+       @Override
+       protected void onStart() {
+               super.onStart();
+
+               selectedIndex = pref.getInt(Constant.PREF_PATTERN_FILE_INDEX);
+       }
+
+       @Override
+       protected void onPause() {
+               pref.put(Constant.PREF_PATTERN_FILE_INDEX, selectedIndex);
+               pref.update();
+
+               super.onPause();
+       }
+
+       protected void onActivityResult(int requestCode, int resultCode,
+                       Intent intent) {
+               super.onActivityResult(requestCode, resultCode, intent);
+
+               if (resultCode != RESULT_OK) {
+                       return;
+               }
+
+               switch (requestCode) {
+               case 0:
+                       Uri uri = intent.getData();
+                       try {
+                               inputStream = getContentResolver().openInputStream(uri);
+                               patternFileText.setText("");
+                               setStatus(Status.INPUT_FILENAME);
+                       } catch (FileNotFoundException e) {
+                               Debug.d(this, e.getMessage());
+                       }
+                       break;
+               }
+       }
+
+       private void updateList() {
+               Dao dao = Dao.getInstance();
+               updateList(dao);
+       }
+
+       private void updateList(Dao dao) {
+               List<PatternFile> l = dao.getPatternFile();
+               if (l == null) {
+                       return;
+               }
+               list = l.toArray(new PatternFile[0]);
+
+               ArrayAdapter<PatternFile> adapter = new ArrayAdapter<PatternFile>(this,
+                               R.layout.simple_list_item_2, R.id.text3, list);
+               listView.setAdapter(adapter);
+
+               setStatus();
+       }
+
+       private void listViewOnItemClick(AdapterView<?> parent, View view,
+                       int position, long id) {
+               selectedIndex = position;
+               setStatus(Status.SELECTED);
+       }
+
+       private void patternAddButtonOnClick() {
+               switch (status) {
+               case NORMAL:
+               case SELECTED:
+                       Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+
+                       intent.setType("text/*");
+                       try {
+                               startActivityForResult(intent, 0);
+                       }
+                       catch (Exception e){
+                               // 起動失敗
+                               Debug.d(this, e.getMessage());
+                       }
+                       break;
+               case INPUT_FILENAME:
+                       if (inputStream == null) {
+                               return;
+                       }
+                       String text = patternFileText.getText().toString();
+                       Dao dao = Dao.getInstance();
+                       dao.insertPatternList(inputStream, text, true);
+                       updateList();
+                       inputStream = null;
+                       selectedIndex = -1;
+                       setStatus(Status.NORMAL);
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       private void patternUpdateButtonOnClick() {
+               if (selectedIndex < 0) {
+                       return;
+               }
+
+               setStatus(Status.UPDATE);
+
+               PatternFile p = list[selectedIndex];
+               long pid = p.getId();
+
+               Intent intent = new Intent();
+               intent.putExtra(Constant.EXTRAS_ID, pid);
+               setResult(RESULT_OK, intent);
+
+               finish();
+       }
+
+       private void patternDeleteButtonOnClick() {
+               AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
+               alertDialogBuilder.setTitle(getString(R.string.title_delete));
+               alertDialogBuilder
+                               .setMessage(getString(R.string.message_delete_patternfile));
+               alertDialogBuilder.setPositiveButton(android.R.string.ok,
+                               new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which) {
+                                               if (selectedIndex < 0) {
+                                                       return;
+                                               }
+
+                                               PatternFile p = list[selectedIndex];
+                                               long pid = p.getId();
+
+                                               Dao dao = Dao.getInstance();
+                                               try {
+                                                       dao.deletePatternFile(pid);
+                                                       selectedIndex = -1;
+                                               } catch (JmException e) {
+                                                       Debug.d(this, e.getMessage());
+                                                       return;
+                                               }
+
+                                               setStatus(Status.NORMAL);
+                                               updateList();
+                                       }
+                               });
+               alertDialogBuilder.setNeutralButton(android.R.string.no,
+                               new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which) {
+                                               setStatus(Status.SELECTED);
+                                       }
+                               });
+               alertDialogBuilder.setCancelable(true);
+               AlertDialog alertDialog = alertDialogBuilder.create();
+               alertDialog.show();
+       }
+
+       private void patternCloseButtonOnClick() {
+               finish();
+       }
+
+       private void setStatus() {
+               setStatus(Status.NONE);
+       }
+
+       private void setStatus(Status s) {
+               if (s != Status.NONE) {
+                       status = s;
+               }
+
+               switch (status) {
+               case NORMAL:
+                       patternLayout.setVisibility(View.GONE);
+                       listView.setVisibility(View.VISIBLE);
+                       listView.setEnabled(true);
+                       patternAddButton.setEnabled(true);
+                       patternUpdateButton.setEnabled(false);
+                       patternDeleteButton.setEnabled(false);
+                       patternCloseButton.setEnabled(true);
+                       break;
+               case SELECTED:
+                       patternLayout.setVisibility(View.GONE);
+                       listView.setVisibility(View.VISIBLE);
+                       listView.setEnabled(true);
+                       patternAddButton.setEnabled(true);
+                       patternUpdateButton.setEnabled(true);
+                       boolean b = false;
+                       if (list != null && selectedIndex >= 0) {
+                               PatternFile p = list[selectedIndex];
+                               long pid = p.getId();
+                               if (pid != selectedPatternIndex && p.isWritable()) {
+                                       b = true;
+                               }
+                       }
+                       patternDeleteButton.setEnabled(b);
+                       patternCloseButton.setEnabled(true);
+                       break;
+               case INPUT_FILENAME:
+                       patternLayout.setVisibility(View.VISIBLE);
+                       listView.setVisibility(View.INVISIBLE);
+                       listView.setEnabled(false);
+                       patternAddButton.setEnabled(patternFileText.getText().length() > 0);
+                       patternUpdateButton.setEnabled(false);
+                       patternDeleteButton.setEnabled(false);
+                       patternCloseButton.setEnabled(true);
+                       break;
+               case UPDATE:
+                       patternLayout.setVisibility(View.GONE);
+                       listView.setVisibility(View.VISIBLE);
+                       listView.setEnabled(false);
+                       patternAddButton.setEnabled(false);
+                       patternUpdateButton.setEnabled(false);
+                       patternDeleteButton.setEnabled(false);
+                       patternCloseButton.setEnabled(false);
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       public static void init(Context context) {
+               EditPrefUtil pref = new EditPrefUtil(context);
+               pref.put(Constant.PREF_PATTERN_FILE_INDEX, -1);
+               pref.update();
+
+               selectedIndex = -1;
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/common/Constant.java b/workspace/JuggleMaster/src/com/jm/common/Constant.java
new file mode 100644 (file)
index 0000000..5b0a5a2
--- /dev/null
@@ -0,0 +1,8 @@
+package com.jm.common;
+
+public class Constant {
+       public static String PREF_PATTERN_FILE_INDEX = "PATTERN_FILE_INDEX";
+       public static String PREF_SELECTED_PATTERN_INDEX = "SELECTED_PATTERN_INDEX";
+       
+       public static final String EXTRAS_ID = "ID";
+}
index ab134be..f0e1e1d 100644 (file)
@@ -1,18 +1,33 @@
 package com.jm.db;\r
 \r
+import java.io.ByteArrayOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import android.content.ContentValues;\r
+import android.content.Context;\r
 import android.database.Cursor;\r
 import android.database.SQLException;\r
 import android.database.sqlite.SQLiteDatabase;\r
 import android.database.sqlite.SQLiteStatement;\r
 \r
 import com.jm.JmPattern;\r
+import com.jm.R;\r
+import com.jm.common.Constant;\r
+import com.jm.pref.EditPrefUtil;\r
+import com.jm.utility.Debug;\r
 import com.jm.utility.JmException;\r
 \r
-public class Dao {\r
+public class Dao implements IDao<SQLiteDatabase> {\r
        private static Dao instance = new Dao();\r
        private SQLiteStatement insertStmt = null;\r
        private SQLiteStatement updateStmt = null;\r
        private SQLiteStatement deleteStmt = null;\r
+       private SQLiteStatement patternFileDeleteStmt = null;\r
+\r
+       private Context context;\r
 \r
        public static Dao getInstance() {\r
                return instance;\r
@@ -22,12 +37,38 @@ public class Dao {
 \r
        }\r
 \r
-       public void init(SQLiteDatabase db) {\r
+       public void setContext(Context context) {\r
+               this.context = context;\r
+       }\r
+\r
+       public void init(SQLiteDatabase db, Context context) {\r
+               this.context = context;\r
+\r
                db.execSQL("create table pattern (" + "id integer primary key, "\r
                                + "type integer not null, " + "siteswap text not null, "\r
                                + "height integer, " + "dwell integer, " + "name integer, "\r
                                + "motion text," + "lang integer," + "idx integer);");\r
+               init2to3(db);\r
                start(db);\r
+               initData2to3(db, context);\r
+       }\r
+\r
+       public void initData2to3(SQLiteDatabase db, Context context) {\r
+               long id;\r
+               id = initPatternList(db, "pattern.jm", false);\r
+               initPatternList(db, "pattern_ja.jm", false);\r
+\r
+               EditPrefUtil pref = new EditPrefUtil(context);\r
+               pref.put(Constant.PREF_SELECTED_PATTERN_INDEX, id);\r
+               pref.update();\r
+       }\r
+\r
+       public void init2to3(SQLiteDatabase db) {\r
+               db.execSQL("create table pattern_file ("\r
+                               + android.provider.BaseColumns._ID\r
+                               + " integer primary key autoincrement, "\r
+                               + "name text not null, " + "value blob not null, "\r
+                               + "iswritable integer not null);");\r
        }\r
 \r
        public void start(SQLiteDatabase db) {\r
@@ -39,6 +80,9 @@ public class Dao {
                                + "where id = ? and lang = ?;");\r
                deleteStmt = db\r
                                .compileStatement("delete from pattern where id = ? and lang = ?;");\r
+               patternFileDeleteStmt = db\r
+                               .compileStatement("delete from pattern_file where "\r
+                                               + android.provider.BaseColumns._ID + " = ?;");\r
        }\r
 \r
        public void add(JmPattern jp, int index) throws JmException {\r
@@ -156,7 +200,7 @@ public class Dao {
 \r
        public JmPattern[] get(SQLiteDatabase db, String selection, String orderBy)\r
                        throws JmException {\r
-               DatabaseHelper helper = DatabaseHelper.getInstance();\r
+               //DatabaseHelper helper = DatabaseHelper.getInstance();\r
                JmPattern[] list = null;\r
                Cursor c = db.query("pattern", new String[] { "id", "type", "siteswap",\r
                                "height", "dwell", "name", "motion" }, selection, null, null,\r
@@ -178,7 +222,7 @@ public class Dao {
                return list;\r
        }\r
 \r
-       public JmPattern[] getFromId(int id) throws JmException {\r
+       public JmPattern[] getFromId(long id) throws JmException {\r
                JmPattern[] list = null;\r
                try {\r
                        DatabaseHelper helper = DatabaseHelper.getInstance();\r
@@ -274,4 +318,221 @@ public class Dao {
                }\r
                return count;\r
        }\r
+\r
+       public PatternFile getPatternFile(long id) {\r
+               DatabaseHelper helper = DatabaseHelper.getInstance();\r
+               SQLiteDatabase db = helper.getReadableDatabase();\r
+\r
+               String selection = android.provider.BaseColumns._ID + " = ?";\r
+               String[] selectionArgs = { String.valueOf(id) };\r
+               String orderBy = null;\r
+               List<PatternFile> list = getPatternFile(db, selection, selectionArgs,\r
+                               orderBy, true);\r
+               if (list.size() <= 0) {\r
+                       return null;\r
+               }\r
+               return list.get(0);\r
+       }\r
+\r
+       public List<PatternFile> getPatternFile() {\r
+               DatabaseHelper helper = DatabaseHelper.getInstance();\r
+               SQLiteDatabase db = helper.getReadableDatabase();\r
+               String orderBy = "name";\r
+               return getPatternFile(db, null, null, orderBy, false);\r
+       }\r
+\r
+       public List<PatternFile> getPatternFile(SQLiteDatabase db) {\r
+               return getPatternFile(db, null, null, null, false);\r
+       }\r
+\r
+       private List<PatternFile> getPatternFile(SQLiteDatabase db,\r
+                       String selection, String[] selectionArgs, String orderBy,\r
+                       boolean isBlob) {\r
+               List<PatternFile> list = new ArrayList<PatternFile>();\r
+               Cursor cursor = null;\r
+               try {\r
+                       cursor = db.query("pattern_file", new String[] {\r
+                                       android.provider.BaseColumns._ID, "name", "value",\r
+                                       "iswritable" }, selection, selectionArgs, null, null,\r
+                                       orderBy);\r
+                       cursor.moveToFirst();\r
+                       int size = cursor.getCount();\r
+                       for (int i = 0; i < size; i++) {\r
+                               PatternFile pf = new PatternFile(cursor.getLong(0),\r
+                                               cursor.getString(1), (isBlob) ? cursor.getBlob(2)\r
+                                                               : null, cursor.getInt(3) != 0);\r
+                               list.add(pf);\r
+                               cursor.moveToNext();\r
+                       }\r
+               } catch (SQLException e) {\r
+                       Debug.d(this, null, e);\r
+                       list = null;\r
+               } catch (Exception e) {\r
+                       Debug.d(this, null, e);\r
+                       list = null;\r
+               } finally {\r
+                       if (cursor != null) {\r
+                               cursor.close();\r
+                               cursor = null;\r
+                       }\r
+               }\r
+               return list;\r
+       }\r
+\r
+       // public PatternFile[] getPatternFile(SQLiteDatabase db) throws JmException\r
+       // {\r
+       // String selection = null;\r
+       // String orderBy = "name";\r
+       // return getPatternFile(db, selection, orderBy);\r
+       // }\r
+       //\r
+       // public PatternFile[] getPatternFile(SQLiteDatabase db, String selection,\r
+       // String orderBy) throws JmException {\r
+       // PatternFile[] list = null;\r
+       // Cursor c = db.query("pattern_file", new String[] { "id", "name" },\r
+       // selection, null, null, null, orderBy);\r
+       // c.moveToFirst();\r
+       // list = new PatternFile[c.getCount()];\r
+       // for (int i = 0; i < list.length; i++) {\r
+       // PatternFile pf = new PatternFile(c.getInt(0), // id\r
+       // c.getString(1)); // name\r
+       // list[i] = pf;\r
+       // c.moveToNext();\r
+       // }\r
+       // c.close();\r
+       // return list;\r
+       // }\r
+       //\r
+       // public PatternFile getPatternFile(long id) {\r
+       // String selection = android.provider.BaseColumns._ID + " = ?";\r
+       // String[] selectionArgs = { String.valueOf(id) };\r
+       // String orderBy = null;\r
+       // List<PatternFile> list = getPatternFile(selection, selectionArgs,\r
+       // orderBy);\r
+       // if (list.size() <= 0) {\r
+       // return null;\r
+       // }\r
+       // return list.get(0);\r
+       // }\r
+\r
+       public long addPatternFile(String name, byte[] blob, boolean isWritable) {\r
+               DatabaseHelper helper = DatabaseHelper.getInstance();\r
+               SQLiteDatabase db = helper.getWritableDatabase();\r
+               return addPatternFile(db, name, blob, isWritable);\r
+       }\r
+\r
+       public long addPatternFile(SQLiteDatabase db, String name, byte[] blob,\r
+                       boolean isWritable) {\r
+               ContentValues values = new ContentValues();\r
+               values.put("name", name);\r
+               values.put("value", blob);\r
+               values.put("iswritable", isWritable ? 1 : 0);\r
+\r
+               return db.insert("pattern_file", null, values);\r
+       }\r
+\r
+       public void deletePatternFile(long id) throws JmException {\r
+               DatabaseHelper helper = DatabaseHelper.getInstance();\r
+               SQLiteDatabase db = helper.getWritableDatabase();\r
+               db.beginTransaction();\r
+               try {\r
+                       int i = 1;\r
+                       SQLiteStatement stmt = patternFileDeleteStmt;\r
+                       stmt.bindLong(i++, id);\r
+                       stmt.execute();\r
+                       db.setTransactionSuccessful();\r
+               } catch (SQLException e) {\r
+                       throw new JmException(e);\r
+               } finally {\r
+                       db.endTransaction();\r
+               }\r
+       }\r
+\r
+       public String[] getMenu() {\r
+               String[] list = { context.getString(R.string.list0_1),\r
+                               context.getString(R.string.list0_2),\r
+                               context.getString(R.string.list0_3),\r
+                               context.getString(R.string.list0_4),\r
+                               context.getString(R.string.list0_5),\r
+                               context.getString(R.string.list0_6),\r
+                               context.getString(R.string.list0_7),\r
+                               context.getString(R.string.list0_8) };\r
+               return list;\r
+\r
+       }\r
+\r
+       public long initPatternList(SQLiteDatabase db, String filename,\r
+                       boolean isWritable) {\r
+               InputStream is = null;\r
+               try {\r
+                       is = getClass().getClassLoader().getResourceAsStream(filename);\r
+                       return insertPatternList(db, is, filename, isWritable);\r
+               } finally {\r
+                       if (is != null) {\r
+                               try {\r
+                                       is.close();\r
+                               } catch (IOException e) {\r
+                                       Debug.d(this, e.getMessage());\r
+                               }\r
+                               is = null;\r
+                       }\r
+               }\r
+       }\r
+\r
+       public long insertPatternList(InputStream is, String name,\r
+                       boolean isWritable) {\r
+               DatabaseHelper helper = DatabaseHelper.getInstance();\r
+               SQLiteDatabase db = helper.getWritableDatabase();\r
+               return insertPatternList(db, is, name, isWritable);\r
+       }\r
+\r
+       public long insertPatternList(SQLiteDatabase db, InputStream is,\r
+                       String name, boolean isWritable) {\r
+               long id = -1;\r
+               try {\r
+                       byte[] b = toByteArray(is);\r
+                       if (b == null) {\r
+                               return id;\r
+                       }\r
+                       Dao dao = Dao.getInstance();\r
+                       id = dao.addPatternFile(db, name, b, isWritable);\r
+               } finally {\r
+                       close(is);\r
+               }\r
+               return id;\r
+       }\r
+\r
+       private void close(InputStream is) {\r
+               if (is != null) {\r
+                       try {\r
+                               is.close();\r
+                       } catch (IOException e) {\r
+                               Debug.d(this, e.getMessage());\r
+                       }\r
+               }\r
+       }\r
+\r
+       private byte[] toByteArray(InputStream inputStream) {\r
+               ByteArrayOutputStream bout = new ByteArrayOutputStream();\r
+               byte[] buffer = new byte[1024];\r
+               try {\r
+                       while (true) {\r
+                               int len;\r
+                               len = inputStream.read(buffer);\r
+                               if (len < 0) {\r
+                                       break;\r
+                               }\r
+                               bout.write(buffer, 0, len);\r
+                       }\r
+                       return bout.toByteArray();\r
+               } catch (IOException e) {\r
+                       Debug.d(this, e.getMessage());\r
+                       return null;\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public boolean isWritable() {\r
+               return true;\r
+       }\r
 }\r
diff --git a/workspace/JuggleMaster/src/com/jm/db/DaoFactory.java b/workspace/JuggleMaster/src/com/jm/db/DaoFactory.java
new file mode 100644 (file)
index 0000000..02edcfb
--- /dev/null
@@ -0,0 +1,61 @@
+package com.jm.db;
+
+import android.content.Context;
+
+import com.jm.pref.EditPrefUtil;
+
+public class DaoFactory {
+       public enum Mode {
+               ORIGINAL,
+               ANDROID
+       };
+       
+       private final static String PREF_MODE = "MODE";
+       private static DaoFactory instance = new DaoFactory();
+       private Mode mode = null;
+       private Context context = null;
+
+       public static DaoFactory getInstance() {
+               return instance ;
+       }
+
+       private DaoFactory(){
+               
+       }
+       
+       public void setContext(Context context){
+               this.context  = context;
+       }
+       
+       public IDao<?> getDao(){
+               if (getMode() == Mode.ORIGINAL){
+                       return JmDao.getInstance();
+               }
+               else {
+                       return Dao.getInstance();
+               }
+       }
+       
+       public Mode getMode(){
+               if (mode == null){
+                       EditPrefUtil pref = new EditPrefUtil(context);
+                       int m = pref.getInt(PREF_MODE, 1);
+                       pref.update();
+                       mode = (m == 0)? Mode.ORIGINAL : Mode.ANDROID;
+               }
+               return mode;
+       }
+       
+       public void setMode(Mode mode){
+               this.mode = mode;
+
+               int m = (mode == Mode.ORIGINAL)? 0 : 1;
+               EditPrefUtil pref = new EditPrefUtil(context);
+               pref.put(PREF_MODE, m);
+               pref.update();
+       }
+       
+       public void changeMode(){
+               setMode((getMode() == Mode.ORIGINAL)? Mode.ANDROID : Mode.ORIGINAL);
+       }
+}
index ef39262..8482c7e 100644 (file)
@@ -16,7 +16,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
        public final static int FRENCH_ID = 3;\r
        private static int langId = NONE_ID;\r
        private Context context;\r
-       private static boolean convFlag = false;\r
+       private static boolean convFlag1to2 = false;\r
+       private static boolean convFlag2to3 = false;\r
 \r
        private static DatabaseHelper instance = null;\r
 \r
@@ -25,6 +26,9 @@ public class DatabaseHelper extends SQLiteOpenHelper {
        }\r
 \r
        public static void init(Context context) throws JmException {\r
+               DaoFactory f = DaoFactory.getInstance();\r
+               f.setContext(context.getApplicationContext());\r
+\r
                if (instance != null) {\r
                        return;\r
                }\r
@@ -42,8 +46,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
        }\r
 \r
        public DatabaseHelper(Context context) {\r
-               // super(context, "JuggleMaster.db", null, 1);\r
-               super(context, "JuggleMaster.db", null, 2);\r
+               // super(context, "JuggleMaster.db", null, 2);\r
+               super(context, "JuggleMaster.db", null, 3);\r
                instance = this;\r
 \r
                // setLangId(context);\r
@@ -54,7 +58,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
        public void onCreate(SQLiteDatabase db) {\r
                db.beginTransaction();\r
                try {\r
-                       Dao.getInstance().init(db);\r
+                       Dao dao = Dao.getInstance();\r
+                       dao.init(db, context);\r
                        db.setTransactionSuccessful();\r
                } catch (SQLException e) {\r
                        Debug.d(this, null, e);\r
@@ -66,12 +71,32 @@ public class DatabaseHelper extends SQLiteOpenHelper {
 \r
        @Override\r
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\r
-               if (oldVersion == 1 && newVersion == 2) {\r
-                       convFlag = true;\r
+               int v;\r
+\r
+               v = 1;\r
+               if (oldVersion == v && newVersion > v) {\r
+                       convFlag1to2 = true;\r
+               }\r
+\r
+               v = 2;\r
+               if (oldVersion <= v && newVersion > v) {\r
+                       convFlag2to3 = true;\r
                }\r
        }\r
 \r
        public void convert(SQLiteDatabase db, int langId) throws JmException {\r
+               if (convFlag1to2) {\r
+                       convert1to2(db, langId);\r
+               }\r
+               if (convFlag2to3) {\r
+                       convert2to3(db);\r
+               }\r
+\r
+               convFlag1to2 = false;\r
+               convFlag2to3 = false;\r
+       }\r
+\r
+       private void convert1to2(SQLiteDatabase db, int langId) throws JmException {\r
                db.execSQL("ALTER TABLE pattern ADD COLUMN lang integer;");\r
                db.execSQL("ALTER TABLE pattern ADD COLUMN idx integer;");\r
 \r
@@ -96,14 +121,26 @@ public class DatabaseHelper extends SQLiteOpenHelper {
                db.execSQL("UPDATE pattern set LANG = " + langId + " WHERE TYPE = 6;");\r
                db.execSQL("create index langindex on pattern(lang);");\r
                db.execSQL("create index idxindex on pattern(idx);");\r
+       }\r
 \r
-               convFlag = false;\r
+       private void convert2to3(SQLiteDatabase db) {\r
+               Dao dao = Dao.getInstance();\r
+               \r
+               dao.init2to3(db);\r
+               dao.start(db);          \r
+               dao.initData2to3(db, context);\r
+               \r
+               JmDao jdao = JmDao.getInstance();\r
+               jdao.init(null, context);\r
        }\r
 \r
        public boolean getConvFlag() {\r
-               return convFlag;\r
+               return convFlag1to2 || convFlag2to3;\r
        }\r
 \r
+       public boolean getConvFlag1to2() {\r
+               return convFlag1to2;\r
+       }\r
        public void setLangId(int id) {\r
                langId = id;\r
        }\r
diff --git a/workspace/JuggleMaster/src/com/jm/db/IDao.java b/workspace/JuggleMaster/src/com/jm/db/IDao.java
new file mode 100644 (file)
index 0000000..ff6652c
--- /dev/null
@@ -0,0 +1,45 @@
+package com.jm.db;
+
+import android.content.Context;
+
+import com.jm.JmPattern;
+import com.jm.utility.JmException;
+
+public interface IDao<T> {
+
+       void init(T db, Context context);
+
+       void start(T db);
+
+       void add(JmPattern jp, int index) throws JmException;
+
+       void addNT(JmPattern jp, int index) throws JmException;
+
+       void add(JmPattern jp, int lang, int index) throws JmException;
+
+       void addNT(JmPattern jp, int lang, int index) throws JmException;
+
+       void set(JmPattern jp) throws JmException;
+
+       void delete(int id) throws JmException;
+
+       JmPattern[] get(int type) throws JmException;
+
+       JmPattern[] get(T db, int type) throws JmException;
+
+       JmPattern[] get(T db, String selection, String orderBy) throws JmException;
+
+       JmPattern[] getFromId(long id) throws JmException;
+
+       int max(int type) throws JmException;
+
+       int countAll() throws JmException;
+
+       int count() throws JmException;
+
+       int count(int type) throws JmException;
+
+       String[] getMenu();
+
+       boolean isWritable();
+}
\ No newline at end of file
index a3a95b8..9a74c7e 100644 (file)
@@ -24,23 +24,28 @@ public class InitDB implements AsyncTaskIF {
        
                        db.beginTransaction();
                        
+                       boolean convFlag1to2 = helper.getConvFlag1to2();
                        if (helper.getConvFlag()){
                                helper.convert(db, langId);
                                Dao.getInstance().start(db);
-
-                               helper.setLangId(DatabaseHelper.JAPANEASE_ID);
-                               p.update();                     
-                       }
-                       else {
-                               helper.setLangId(DatabaseHelper.JAPANEASE_ID);
-                               p.create(DatabaseHelper.JAPANEASE_ID);                          
                        }
-
-                       helper.setLangId(DatabaseHelper.ENGLISH_ID);
-                       p.create(DatabaseHelper.ENGLISH_ID);
                        
-                       helper.setLangId(DatabaseHelper.FRENCH_ID);
-                       p.create(DatabaseHelper.FRENCH_ID);
+                       if (convFlag1to2){
+                               if (helper.getConvFlag()){
+                                       helper.setLangId(DatabaseHelper.JAPANEASE_ID);
+                                       p.update();                     
+                               }
+                               else {
+                                       helper.setLangId(DatabaseHelper.JAPANEASE_ID);
+                                       p.create(DatabaseHelper.JAPANEASE_ID);                          
+                               }
+       
+                               helper.setLangId(DatabaseHelper.ENGLISH_ID);
+                               p.create(DatabaseHelper.ENGLISH_ID);
+                               
+                               helper.setLangId(DatabaseHelper.FRENCH_ID);
+                               p.create(DatabaseHelper.FRENCH_ID);
+                       }
                        
                        db.setTransactionSuccessful();
                } catch (JmException e) {
diff --git a/workspace/JuggleMaster/src/com/jm/db/JmDao.java b/workspace/JuggleMaster/src/com/jm/db/JmDao.java
new file mode 100644 (file)
index 0000000..c414029
--- /dev/null
@@ -0,0 +1,175 @@
+package com.jm.db;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+
+import com.jm.JmPattern;
+import com.jm.common.Constant;
+import com.jm.pattern.PatternAnalyzer;
+import com.jm.pref.EditPrefUtil;
+import com.jm.utility.Debug;
+import com.jm.utility.JmException;
+import com.jm.utility.JmUnsupportedOperationException;
+
+public class JmDao implements IDao<String> {
+       private static JmDao instance = new JmDao();
+       private List<String> menu = null;
+       private List<JmPattern> list = null;
+       private EditPrefUtil pref;
+
+       public static JmDao getInstance() {
+               return instance;
+       }
+
+       private JmDao() {
+
+       }
+
+       @Override
+       public void init(String db, Context context) {
+               pref = new EditPrefUtil(context);
+               long id = pref.getLong(Constant.PREF_SELECTED_PATTERN_INDEX);
+               if (id < 0) {
+                       return;
+               }
+               Dao dao = Dao.getInstance();
+               PatternFile p = dao.getPatternFile(id);
+               byte[] b = p.getValue();
+               ByteArrayInputStream is = new ByteArrayInputStream(b);
+               loadPatternFile(is);
+       }
+
+       public void loadPatternFile(InputStream is) {
+               try {
+                       PatternAnalyzer pa = new PatternAnalyzer();
+                       pa.analyzer(is);
+                       list = pa.getPattern();
+                       menu = pa.getTitle();
+
+                       int size = menu.size();
+                       for (int i = size - 1; i >= 0; i--) {
+                               // count()の代わり
+                               JmPattern[] l = this.get(i);
+                               if (l.length <= 0) {
+                                       menu.remove(i);
+                               }
+                       }
+
+               } catch (FileNotFoundException e) {
+                       Debug.d(this, e.getMessage());
+               } catch (IOException e) {
+                       Debug.d(this, e.getMessage());
+               } catch (JmException e) {
+                       Debug.d(this, e.getMessage());
+               }
+       }
+
+       @Override
+       public JmPattern[] get(int type) throws JmException {
+               if (list == null) {
+                       return null;
+               }
+               List<JmPattern> l = new ArrayList<JmPattern>();
+               for (JmPattern p : list) {
+                       if (p.getType() == type) {
+                               l.add(p);
+                       }
+               }
+               return l.toArray(new JmPattern[0]);
+       }
+
+       @Override
+       public void start(String db) {
+
+       }
+
+       @Override
+       public void add(JmPattern jp, int index) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public void addNT(JmPattern jp, int index) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public void add(JmPattern jp, int lang, int index) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public void addNT(JmPattern jp, int lang, int index) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public void set(JmPattern jp) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public void delete(int id) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public JmPattern[] get(String db, int type) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public JmPattern[] get(String db, String selection, String orderBy)
+                       throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public JmPattern[] getFromId(long id) throws JmException {
+               if (list == null) {
+                       return null;
+               }
+               for (JmPattern p : list) {
+                       if (p.getId() == id) {
+                               return new JmPattern[] { p };
+                       }
+               }
+               return null;
+       }
+
+       @Override
+       public int max(int type) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public int countAll() throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public int count() throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public int count(int type) throws JmException {
+               throw new JmUnsupportedOperationException();
+       }
+
+       @Override
+       public String[] getMenu() {
+               return menu.toArray(new String[0]);
+       }
+
+       @Override
+       public boolean isWritable() {
+               return false;
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/db/PatternFile.java b/workspace/JuggleMaster/src/com/jm/db/PatternFile.java
new file mode 100644 (file)
index 0000000..d73a21c
--- /dev/null
@@ -0,0 +1,36 @@
+package com.jm.db;
+
+public class PatternFile {
+       private long id;
+       private String name;
+       private byte[] value;
+       private boolean isWritable;
+       
+       public PatternFile(long id, String name, byte[] value, boolean isWritable){
+               this.id = id;
+               this.name = name;
+               this.value = value;
+               this.isWritable = isWritable;
+       }
+       
+       public long getId() {
+               return id;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public byte[] getValue() {
+               return value;
+       }
+       
+       public boolean isWritable(){
+               return isWritable;
+       }
+       
+       @Override
+       public String toString(){
+               return name;
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/pattern/LineAnalyzer.java b/workspace/JuggleMaster/src/com/jm/pattern/LineAnalyzer.java
new file mode 100644 (file)
index 0000000..dca9cc8
--- /dev/null
@@ -0,0 +1,164 @@
+package com.jm.pattern;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+//#GA=9.8              ;Gravity (0<f<=98) [meter/second^2]
+//#DR=0.50     ;Dwell ratio (0.10<=f<=0.90)
+//#HR=0.20     ;Height (0.01<=f<=1.00) [meter]
+//#SP=1.0              ;Speed ratio (0.1<=f<=2.0)
+//#BC=000              ;Background color  Red Green Blue (0<=R,G,B<=F)
+//#BP=1                ;Beep ON (n=0,1)
+//#HD=1                ;Hand ON (n=0,1)
+//#PD=1                ;Pattern ON (n=0,1)
+//#MR=0                ;Switch right and left (n=0,1)
+public class LineAnalyzer {
+       public enum Type {
+               COMMENT,
+               PARAMETER,
+               SEPARATOR,
+               STYLE,
+               FORMATION,
+               PERSON,
+               PMOTION,
+               MOTION,
+               SITESWAP,
+               SPACE,
+               NONE
+       };
+       
+       private Pattern commentPattern = Pattern.compile("^;");
+       private Pattern parameterPattern = Pattern.compile("^#([A-Z][A-Z])\\s*=\\s*([0-9]*(\\.[0-9]*)?)");
+       private Pattern separatorPattern = Pattern.compile("^/(.*[^\\s])\\s*$");
+       private Pattern separatorSubPattern = Pattern.compile("^\\[\\s*(.*[^\\s])\\s*\\]\\s*$");
+       private Pattern stylePattern = Pattern.compile("^%(.*[^\\s])\\s*$");
+       private Pattern formationPattern = Pattern.compile("^!(.*[^\\s])\\s*$");
+       private Pattern personPattern = Pattern.compile("^\\$");        
+       private Pattern motionPattern = Pattern.compile("^\\{\\s*(-?[0-9]+)\\s*,\\s*(-?[0-9]+)\\s*\\}\\s*\\{\\s*(-?[0-9]+)\\s*,\\s*(-?[0-9]+)\\s*\\}");
+       private Pattern pmotionPattern = Pattern.compile("^\\{\\s*(-?[0-9]+)\\s*,\\s*(-?[0-9]+)\\s*\\}");
+       private Pattern siteswapPattern = Pattern.compile("^([0-9A-Za-z,(\\)\\[\\]]+)(\\s+(.*[^\\s])\\s*$)?");  
+       private Pattern spacePattern = Pattern.compile("^\\s*$");       
+
+       private Matcher matcher;
+       private String parameter;
+       private double value1;
+       private double value2;
+       private double value3;
+       private double value4;
+       private String separator;
+       private String style;
+       private String siteswap;
+       private String name;
+       
+       public Type analyze(String line){
+               Matcher m = null;
+               matcher = null;
+               
+               m = commentPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       return Type.COMMENT;
+               }
+               m = parameterPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       parameter = m.group(1);
+                       value1 = Double.parseDouble(m.group(2));
+                       return Type.PARAMETER;
+               }
+               m = separatorPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       separator = m.group(1);
+                       m = separatorSubPattern.matcher(separator);
+                       if (m.find()){
+                               separator = m.group(1);                         
+                       }
+                       return Type.SEPARATOR;
+               }
+               m = stylePattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       style = m.group(1);
+                       return Type.STYLE;
+               }
+               m = formationPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       name = m.group(1);
+                       return Type.FORMATION;
+               }
+               m = personPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       return Type.PERSON;
+               }
+               m = motionPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       value1 = Double.parseDouble(m.group(1));
+                       value2 = Double.parseDouble(m.group(2));
+                       value3 = Double.parseDouble(m.group(3));
+                       value4 = Double.parseDouble(m.group(4));
+                       return Type.MOTION;
+               }
+               m = pmotionPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       return Type.PMOTION;
+               }
+               m = siteswapPattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       siteswap = m.group(1);
+                       name = (m.groupCount() > 1)? m.group(3) : null;
+                       return Type.SITESWAP;
+               }
+               m = spacePattern.matcher(line);
+               if (m.find()){
+                       matcher = m;
+                       return Type.SPACE;
+               }
+               return Type.NONE;
+       }
+
+       public Matcher getMatcher() {
+               return matcher;
+       }
+
+       public String getParameter() {
+               return parameter;
+       }
+
+       public double getValue1() {
+               return value1;
+       }
+
+       public double getValue2() {
+               return value2;
+       }
+
+       public double getValue3() {
+               return value3;
+       }
+
+       public double getValue4() {
+               return value4;
+       }
+
+       public String getSeparator() {
+               return separator;
+       }
+
+       public String getStyle() {
+               return style;
+       }
+       
+       public String getSiteswap() {
+               return siteswap;
+       }
+
+       public String getName() {
+               return name;
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/pattern/PatternAnalyzer.java b/workspace/JuggleMaster/src/com/jm/pattern/PatternAnalyzer.java
new file mode 100644 (file)
index 0000000..247656e
--- /dev/null
@@ -0,0 +1,242 @@
+package com.jm.pattern;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.jm.JmPattern;
+
+public class PatternAnalyzer {
+       public List<JmPattern> pattern = new ArrayList<JmPattern>();
+       public List<String> title = new ArrayList<String>();
+
+       private final static double RATIO = 100.0;
+
+       enum Status {
+               NORMAL, CALL_STYLE, STYLE, CALL_FORMATION, FORMATION, NONE
+       }
+
+       public void analyzer(InputStream is) throws IOException {
+               BufferedReader br = new BufferedReader(new InputStreamReader(is,
+                               "UTF-8"));
+
+               Status status = Status.NORMAL;
+               int type = -1;
+               int id = 1;
+               JmPattern p;
+
+               double height = 100;
+               double dwell = 200;
+
+               boolean isSkip = false;
+               String parameter;
+               String separator;
+               double value;
+               String motionName = "";
+               Map<String, List<byte[]>> motionMap = new HashMap<String, List<byte[]>>();
+               List<byte[]> motionBuffer = new ArrayList<byte[]>();
+               byte[] m = new byte[4];
+
+               try {
+                       LineAnalyzer la = new LineAnalyzer();
+                       String line;
+
+                       m[0] = (byte) 13;
+                       m[1] = (byte) 0;
+                       m[2] = (byte) 4;
+                       m[3] = (byte) 0;
+                       motionBuffer = new ArrayList<byte[]>();
+                       motionBuffer.add(m.clone());
+                       motionMap.put("Normal", motionBuffer);                  
+                       motionBuffer = new ArrayList<byte[]>();
+                       
+                       while ((line = br.readLine()) != null) {
+                               LineAnalyzer.Type t = la.analyze(line);
+
+                               if (t == LineAnalyzer.Type.COMMENT) {
+                                       continue;
+                               }
+
+                               switch (status) {
+                               case NORMAL:
+                               case FORMATION:
+                                       switch (t) {
+                                       case PARAMETER:
+                                               parameter = la.getParameter();
+                                               value = la.getValue1();
+                                               if (parameter.equals("HR")) {
+                                                       if (value < 0.01){
+                                                               value = 0.01;
+                                                       }
+                                                       else if (value > 1.0){
+                                                               value = 1.0;
+                                                       }
+                                                       height = value;
+                                               } else if (parameter.equals("DR")) {
+                                                       if (value < 0.1){
+                                                               value = 0.1;
+                                                       }
+                                                       else if (value > 0.9){
+                                                               value = 0.9;
+                                                       }
+                                                       dwell = value;
+                                               }
+                                               break;
+                                       case SEPARATOR:
+                                               separator = la.getSeparator();
+                                               title.add(separator);
+                                               isSkip = false;
+                                               type++;
+                                               status = Status.NORMAL;
+                                               break;
+                                       case STYLE:
+                                               status = Status.CALL_STYLE;
+                                               break;
+                                       case FORMATION:
+                                               if (la.getName().equals("1-Person")) {
+                                                       status = Status.NORMAL;
+                                               } else {
+                                                       isSkip = true;
+                                                       status = Status.CALL_FORMATION;
+                                               }
+                                               break;
+                                       case SITESWAP:
+                                               if (isSkip) {
+                                                       break;
+                                               }
+                                               p = new JmPattern(id++, type,
+                                                               (la.getName() != null) ? la.getName() : la
+                                                                               .getSiteswap(), la.getSiteswap(),
+                                                               (int) (height * RATIO), (int) (dwell * RATIO),
+                                                               toArray(motionBuffer));
+                                               pattern.add(p);
+                                               break;
+                                       }
+                                       break;
+                               case CALL_STYLE:
+                                       motionName = la.getStyle();
+                                       List<byte[]> motion = motionMap.get(motionName);
+                                       if (motion != null){
+                                               motionBuffer = motion;
+                                       }
+                                       
+                                       switch (t) {
+                                       case MOTION:
+                                               m[0] = (byte) la.getValue1();
+                                               m[1] = (byte) la.getValue2();
+                                               m[2] = (byte) la.getValue3();
+                                               m[3] = (byte) la.getValue4();
+
+                                               motionBuffer = new ArrayList<byte[]>();
+                                               motionBuffer.add(m.clone());
+                                               motionMap.put(motionName, motionBuffer);
+                                               status = Status.STYLE;
+                                               break;
+                                       case FORMATION:
+                                               if (la.getName().equals("1-Person")) {
+                                                       status = Status.NORMAL;
+                                               } else {
+                                                       isSkip = true;
+                                                       status = Status.CALL_FORMATION;
+                                               }
+                                               break;
+                                       case SITESWAP:
+                                               if (isSkip) {
+                                                       break;
+                                               }
+                                               p = new JmPattern(id++, type,
+                                                               (la.getName() != null) ? la.getName() : la
+                                                                               .getSiteswap(), la.getSiteswap(),
+                                                               (int) (height * RATIO), (int) (dwell * RATIO),
+                                                               toArray(motionBuffer));
+                                               pattern.add(p);
+                                               break;
+                                       default:
+                                               status = Status.NORMAL;
+                                               break;
+                                       }
+                                       break;
+                               case STYLE:
+                                       switch (t) {
+                                       case FORMATION:
+                                               if (la.getName().equals("1-Person")) {
+                                                       status = Status.NORMAL;
+                                               } else {
+                                                       isSkip = true;
+                                                       status = Status.CALL_FORMATION;
+                                               }
+                                               break;
+                                       case MOTION:
+                                               m[0] = (byte) la.getValue1();
+                                               m[1] = (byte) la.getValue2();
+                                               m[2] = (byte) la.getValue3();
+                                               m[3] = (byte) la.getValue4();
+                                               motionBuffer.add(m.clone());
+                                               break;
+                                       case SITESWAP:
+                                               if (isSkip) {
+                                                       break;
+                                               }
+                                               p = new JmPattern(id++, type,
+                                                               (la.getName() != null) ? la.getName() : la
+                                                                               .getSiteswap(), la.getSiteswap(),
+                                                               (int) (height * RATIO), (int) (dwell * RATIO),
+                                                               toArray(motionBuffer));
+                                               pattern.add(p);
+                                               break;
+                                       default:
+                                               status = Status.NORMAL;
+                                               break;
+                                       }
+                                       break;
+                               case CALL_FORMATION:
+                                       switch (t) {
+                                       case FORMATION:
+                                               if (la.getName().equals("1-Person")) {
+                                                       status = Status.NORMAL;
+                                               } else {
+                                                       isSkip = true;
+                                                       status = Status.CALL_FORMATION;
+                                               }
+                                               break;
+                                       case PMOTION:
+                                               isSkip = true;
+                                               status = Status.FORMATION;
+                                               break;
+                                       default:
+                                               isSkip = true;
+                                               status = Status.NORMAL;
+                                               break;
+                                       }
+                                       break;
+                               }
+                               // System.out.println(status + " " + t + "\t" + line + "\t" + sSkip);
+                       }
+               } finally {
+                       if (br != null) {
+                               br.close();
+                       }
+               }
+       }
+
+       public List<JmPattern> getPattern() {
+               return pattern;
+       }
+
+       public List<String> getTitle() {
+               return title;
+       }
+
+       private byte[][] toArray(List<byte[]> l) {
+               byte[][] b = new byte[l.size()][];
+               for (int i = 0; i < l.size(); i++) {
+                       b[i] = l.get(i);
+               }
+               return b;
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/pref/EditPrefUtil.java b/workspace/JuggleMaster/src/com/jm/pref/EditPrefUtil.java
new file mode 100644 (file)
index 0000000..5649dec
--- /dev/null
@@ -0,0 +1,132 @@
+package com.jm.pref;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+public class EditPrefUtil implements PrefUtil {
+       private static final String DELM = "\t";
+       private Map<String, String> hash = new HashMap<String, String>();
+       private PrefUtil pref;
+       
+       public EditPrefUtil(Context context){
+               pref = new PrefUtilImpl(context);
+       }
+       
+       @Override
+       public SharedPreferences getSharedPreferences() {
+               return pref.getSharedPreferences();
+       }
+
+       @Override
+       public void put(String key, String value) {
+               hash.put(key, value);
+       }
+
+       @Override
+       public void put(String key, int value) {
+               hash.put(key, String.valueOf(value));
+       }
+
+       @Override
+       public void put(String key, long value) {
+               hash.put(key, String.valueOf(value));
+       }
+
+       @Override
+       public String get(String key) {
+               String value = hash.get(key);
+               if (value != null){
+                       return value;
+               }
+               value = pref.get(key);
+               
+               return value;
+       }
+
+       @Override
+       public int getInt(String key) {
+               return Integer.parseInt(get(key));
+       }
+
+       @Override
+       public long getLong(String key) {
+               return Long.parseLong(get(key));
+       }
+
+       @Override
+       public String get(String key, String initValue) {
+               String value = get(key);
+               if (value != null){
+                       return value;
+               }
+               hash.put(key, initValue);
+               return initValue;
+       }
+
+       @Override
+       public int getInt(String key, int initValue) {
+               return Integer.valueOf(get(key, String.valueOf(initValue)));
+       }
+       
+       @Override
+       public long getLong(String key, long initValue) {
+               return Long.valueOf(get(key, String.valueOf(initValue)));
+       }
+
+       public void update(){
+               Set<Entry<String, String>> set = hash.entrySet();
+               for (Iterator<Entry<String, String>> it = set.iterator(); it.hasNext(); ){
+                       Entry<String, String> entry = it.next();
+                       String key = entry.getKey();
+                       String value = entry.getValue();
+                       pref.put(key, value);
+               }
+               hash.clear();
+       }
+
+       @Override
+       public void copy(String srcKey, String dstKey){
+               String value = get(srcKey);
+               put(dstKey, value);
+       }
+       
+       @Override
+       public void remove(String key) {
+               hash.put(key, null);
+       }
+       
+       public void save(String key){
+               StringBuffer sb = new StringBuffer();
+               
+               Set<Entry<String, String>> set = hash.entrySet();
+               for (Iterator<Entry<String, String>> it = set.iterator(); it.hasNext(); ){
+                       Entry<String, String> entry = it.next();
+                       String prefKey = entry.getKey();
+                       String prefValue = entry.getValue();
+                       
+                       sb.append(prefKey);
+                       sb.append(DELM);
+                       sb.append(prefValue);
+                       sb.append(DELM);
+               }
+               pref.put(key, sb.toString());
+       }
+       
+       public void restore(String key){
+               hash.clear();
+
+               String data = pref.get(key);
+               String[] str = data.split(DELM);
+               for (int i = 0; i < str.length / 2; i++){
+                       String prefKey = str[i * 2];
+                       String prefValue = str[i * 2 + 1];
+                       put(prefKey, prefValue);
+               }
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/pref/PrefUtil.java b/workspace/JuggleMaster/src/com/jm/pref/PrefUtil.java
new file mode 100644 (file)
index 0000000..fe83f25
--- /dev/null
@@ -0,0 +1,18 @@
+package com.jm.pref;
+
+import android.content.SharedPreferences;
+
+public interface PrefUtil {
+       SharedPreferences getSharedPreferences();
+       void put(String key, String value);
+       void put(String key, int value);
+       void put(String key, long value);
+       String get(String key);
+       int getInt(String key);
+       long getLong(String key);
+       String get(String key, String initValue);
+       int getInt(String key, int initValue);
+       long getLong(String key, long initValue);
+       void copy(String srcKey, String dstKey);
+       void remove(String key);
+}
diff --git a/workspace/JuggleMaster/src/com/jm/pref/PrefUtilImpl.java b/workspace/JuggleMaster/src/com/jm/pref/PrefUtilImpl.java
new file mode 100644 (file)
index 0000000..8466cba
--- /dev/null
@@ -0,0 +1,111 @@
+package com.jm.pref;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.content.pm.PackageManager.NameNotFoundException;
+
+public class PrefUtilImpl implements PrefUtil {
+       private static final String MENU1_ACTIVITY = "Menu1";
+       private static final String PACKAGE_COM_JM = "com.jm";
+       private Context context;
+
+       public PrefUtilImpl(Context context) {
+               this.context = context;
+       }
+
+       @Override
+       public SharedPreferences getSharedPreferences(){
+               SharedPreferences pref = null;
+               try {
+                       Context ctxt = context.createPackageContext(PACKAGE_COM_JM,
+                                       Context.CONTEXT_RESTRICTED);
+                       pref = ctxt.getSharedPreferences(MENU1_ACTIVITY,
+                                       Context.MODE_PRIVATE);
+               } catch (NameNotFoundException e) {
+                       ;
+               }               
+               return pref;
+       }
+       
+       @Override
+       public void put(String key, String value) {
+               synchronized (this) {
+                       SharedPreferences pref = getSharedPreferences();
+                       if (pref == null){
+                               return;
+                       }
+
+                       Editor e = pref.edit();
+                       e.putString(key, value);
+                       e.commit();
+               }
+       }
+
+       @Override
+       public void put(String key, int value) {
+               put(key, String.valueOf(value));
+       }
+
+       @Override
+       public void put(String key, long value) {
+               put(key, String.valueOf(value));
+       }
+
+       @Override
+       public String get(String key) {
+               String val;
+               
+               synchronized (this) {
+                       SharedPreferences pref = getSharedPreferences();
+                       if (pref == null){
+                               return null;
+                       }
+
+                       val = pref.getString(key, null);
+               }
+
+               return val;
+       }
+
+       @Override
+       public int getInt(String key) {
+               return Integer.parseInt(get(key));
+       }
+
+       @Override
+       public long getLong(String key) {
+               return Long.parseLong(get(key));
+       }
+
+       @Override
+       public String get(String key, String initValue) {
+               String value = get(key);
+               if (value != null) {
+                       return value;
+               }
+               put(key, initValue);
+               return initValue;
+       }
+
+       @Override
+       public int getInt(String key, int initValue) {
+               return Integer.valueOf(get(key, String.valueOf(initValue)));
+       }
+
+       @Override
+       public long getLong(String key, long initValue) {
+               return Long.valueOf(get(key, String.valueOf(initValue)));
+       }
+       
+       @Override
+       public void copy(String srcKey, String dstKey){
+               String value = get(srcKey);
+               put(dstKey, value);
+       }
+       
+       @Override
+       public void remove(String key) {
+               put(key, null);
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/utility/CheckedLinearLayout.java b/workspace/JuggleMaster/src/com/jm/utility/CheckedLinearLayout.java
new file mode 100644 (file)
index 0000000..d37e13c
--- /dev/null
@@ -0,0 +1,52 @@
+package com.jm.utility;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.Checkable;
+import android.widget.LinearLayout;
+
+public class CheckedLinearLayout extends LinearLayout implements Checkable {
+       private boolean mChecked;
+
+       private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };
+
+       public CheckedLinearLayout(Context context) {
+                       super(context, (AttributeSet)null);
+       }
+
+       public CheckedLinearLayout(Context context, AttributeSet attrs) {
+//             this(context, attrs, 0);
+               super(context, attrs);
+       }
+
+//     public CheckedLinearLayout(Context context, AttributeSet attrs, int defStyle) {
+//             super(context, attrs, defStyle);
+//     }
+
+       @Override
+       public void toggle() {
+               setChecked(!mChecked);
+       }
+
+       @Override
+       public boolean isChecked() {
+               return mChecked;
+       }
+
+       @Override
+       public void setChecked(boolean checked) {
+               if (mChecked != checked) {
+                       mChecked = checked;
+                       refreshDrawableState();
+               }
+       }
+
+       @Override
+       protected int[] onCreateDrawableState(int extraSpace) {
+               final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
+               if (isChecked()) {
+                       mergeDrawableStates(drawableState, CHECKED_STATE_SET);
+               }
+               return drawableState;
+       }
+}
diff --git a/workspace/JuggleMaster/src/com/jm/utility/JmUnsupportedOperationException.java b/workspace/JuggleMaster/src/com/jm/utility/JmUnsupportedOperationException.java
new file mode 100644 (file)
index 0000000..b2e1383
--- /dev/null
@@ -0,0 +1,10 @@
+package com.jm.utility;
+
+public class JmUnsupportedOperationException extends
+               UnsupportedOperationException {
+       private static final long serialVersionUID = 6828808956941012656L;
+
+       public JmUnsupportedOperationException(){
+               
+       }
+}
diff --git a/workspace/JuggleMaster/src/pattern.jm b/workspace/JuggleMaster/src/pattern.jm
new file mode 100644 (file)
index 0000000..890ba3b
--- /dev/null
@@ -0,0 +1,1560 @@
+;==============================================================================\r
+;       JuggleMaster  Version 1.60  Copyright (c) 1995-1996 Ken Matsuoka\r
+;       JuggleMaster2 Version 2.03  Copyright (c) 2005-     Takumi Okada\r
+;==============================================================================\r
+\r
+;The first numbers on the line are juggling patterns, and space or tab, title.\r
+;The length of pattern must be 76 or less, and title 40 or less.\r
+;JuggleMaster can read up to 9999 patterns.\r
+;Style names are limited to 300.\r
+;Style data are limited to 3000 lines.\r
+;\r
+;The first character on the line means...\r
+;  ';' Comment.\r
+;  '#' Set the parameter.\r
+;  '/' Separator(Green color).\r
+;  '%' Name of the style (30 characters or less) with style data,\r
+;      or call the registered style.\r
+;  '!' Formation Data(person's position)  with style data,\r
+;      or call the registered formation.\r
+;      If you don't define Formation Data in trick-pattern, JM2 set immediately before pattern.\r
+;  '$' Set style on person,\r
+;      set registered style.\r
+;\r
+;This style is already defined.\r
+;%Normal\r
+;{ 13,  0}{  4,  0}\r
+;\r
+;!1-Person\r
+;{ 0,0}\r
+;====  Parameters  ============================================================\r
+;\r
+\r
+#GA=9.8                ;Gravity (0<f<=98) [meter/second^2]\r
+#DR=0.50       ;Dwell ratio (0.10<=f<=0.90)\r
+#HR=0.20       ;Height (0.01<=f<=1.00) [meter]\r
+#SP=1.0                ;Speed ratio (0.1<=f<=2.0)\r
+#BC=000                ;Background color  Red Green Blue (0<=R,G,B<=F)\r
+#BP=1          ;Beep ON (n=0,1)\r
+#HD=1          ;Hand ON (n=0,1)\r
+#PD=1          ;Pattern ON (n=0,1)\r
+#MR=0          ;Switch right and left (n=0,1)\r
+;==============================================================================\r
+\r
+!2-Person RL\r
+{30, 0}\r
+{ 0, 0}\r
+\r
+!2-Person LR\r
+{ 0, 0}\r
+{30, 0}\r
+\r
+!2-Person UpDown\r
+{ 0,30}\r
+{ 0, 0}\r
+\r
+!3-Person RL\r
+{ 0, 0}\r
+{30, 0}\r
+{60, 0}\r
+\r
+!3-Person LR\r
+{60, 0}\r
+{30, 0}\r
+{ 0, 0}\r
+\r
+!3-Person Triangle 1\r
+{ 0, 0}\r
+{30, 0}\r
+{15,30}\r
+\r
+!3-Person Triangle 2\r
+{15, 0}\r
+{ 0,30}\r
+{30,30}\r
+\r
+!4-Person RL\r
+{90, 0}\r
+{60, 0}\r
+{30, 0}\r
+{ 0, 0}\r
+\r
+!4-Person LR\r
+{ 0, 0}\r
+{30, 0}\r
+{60, 0}\r
+{90, 0}\r
+\r
+!4-Person Square 1\r
+{ 0, 0}\r
+{30, 0}\r
+{30,30}\r
+{ 0,30}\r
+\r
+!4-Person Square 2\r
+{20, 0}\r
+{ 0,20}\r
+{40,20}\r
+{20,40}\r
+\r
+!4-Person Y\r
+{60,20}\r
+{30,20}\r
+{ 0,40}\r
+{ 0, 0}\r
+\r
+!5-Person RL\r
+{120, 0}\r
+{ 90, 0}\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+\r
+!5-Person LR\r
+{  0, 0}\r
+{ 30, 0}\r
+{ 60, 0}\r
+{ 90, 0}\r
+{120, 0}\r
+\r
+!5-Person Penta\r
+{  0,45}\r
+{-23,28}\r
+{-15, 0}\r
+{ 15, 0}\r
+{ 23,28}\r
+\r
+!5-Person Star\r
+{  0,45}\r
+{-15, 0}\r
+{ 23,28}\r
+{-23,28}\r
+{ 15, 0}\r
+\r
+!6-Person 3*2\r
+{ 0, 60}\r
+{ 0, 30}\r
+{ 0,  0}\r
+{30, 60}\r
+{30, 30}\r
+{30,  0}\r
+\r
+!6-Person Hexagon\r
+{-30, 26}\r
+{-15,  0}\r
+{ 15,  0}\r
+{ 30, 26}\r
+{ 15, 52}\r
+{-15, 52}\r
+\r
+!7-Person infinity\r
+{-20, 20}\r
+{-40,  0}\r
+{-20,-20}\r
+{  0,  0}\r
+{ 20, 20}\r
+{ 40,  0}\r
+{ 20,-20}\r
+\r
+!8-Person 4*2\r
+{ 90, 0}\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+{ 90,30}\r
+{ 60,30}\r
+{ 30,30}\r
+{  0,30}\r
+\r
+!9-Person 3*3\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+{ 60,30}\r
+{ 30,30}\r
+{  0,30}\r
+{ 60,60}\r
+{ 30,60}\r
+{  0,60}\r
+\r
+!10-Person 244\r
+{ 90, 0}\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+{ 90,30}\r
+{ 60,30}\r
+{ 30,30}\r
+{  0,30}\r
+{ 60,60}\r
+{ 30,60}\r
+\r
+%Reverse\r
+{  4,  0}{ 13,  0}\r
+\r
+%Shower\r
+{  5,  0}{ 10,  0}\r
+{ 10,  0}{  5,  0}\r
+\r
+/[ 3-Cascade Step By Step ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+!1-Person\r
+300    1 Ball out of a 3-Cascade\r
+33022  Throw Twice\r
+330    2 Balls out of a 3-Cascade\r
+[32]3322       Throw 3 Times\r
+3      3-Cascade\r
+\r
+#DR=0.75\r
+#HR=0.2\r
+3      Slower 3-Cascade\r
+\r
+/[ 4-Fountain Step By Step ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+40     2 in One Hand\r
+(4,4)  4-Synchronous Fountain\r
+4      4-Fountain\r
+\r
+/[ 5-Cascade Step By Step ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+50500  2 Balls out of a 5-Cascade\r
+52512  3 Balls\r
+50505  Chase\r
+55500  Flash\r
+[52][52]55022[22][22]  4 Balls\r
+55550  4 Balls out of a 5-Cascade\r
+552\r
+5551\r
+5      5-Cascade\r
+\r
+/[ 3-Cascade Tricks ]\r
+\r
+#DR=0.5\r
+#HR=0.3\r
+%Normal\r
+333355500      3-ball Flash\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Chop\r
+{  4,  9}{-10, -3}\r
+{ 10,  6}{  7,  9}\r
+{ 10,  6}{  7,  9}\r
+{  4,  9}{-10, -3}\r
+(2,4x)(4x,2)   Chop\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Eating Apples\r
+{  0,  7}{ -3, -3}\r
+{ 12, 10}{  0,  8}\r
+{ 12, 10}{  0,  8}\r
+{  0,  7}{ -3, -3}\r
+(2,4x)(4x,2)   Eating Apples\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Eating an Apple\r
+{  0,  6}{ -3,  4}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  2,  0}\r
+{ 12,  7}{  0,  7}\r
+{ 13,  0}{ -4,  0}\r
+33333423       Eating an Apple (for light eaters)\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Wide\r
+{ 21,  9}{ 18,  4}\r
+3      Wide Cascade\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Tennis\r
+{  8,  0}{  4,  0}\r
+{  8,  0}{  4,  0}\r
+{ 14,  3}{ 14,  3}\r
+3      Juggler's Tennis\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Over the Head\r
+{ 12, 19}{  3, 19}\r
+3      Over the Head\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Reverse\r
+3      Reverse Cascade\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Wide Reverse\r
+{ -8,  0}{ 12,  0}\r
+3      Wide Reverse Cascade\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachover\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 10,  0}{  8, -2}\r
+{-13,  5}{  0,  2}\r
+{ 13, -3}{  4,  0}\r
+3      Reachover\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachover (alternate)\r
+{ 10,  0}{  3, -2}\r
+{-13,  5}{ 13,  0}\r
+{ 13, -3}{  4,  0}\r
+3      Reachover (alternate)\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachunder\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  4, -3}\r
+{ 10,  4}{  4,  4}\r
+{-16, -3}{  0,  0}\r
+{ 13,  3}{  4,  0}\r
+3      Reachunder\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachunder (alternate)\r
+{ 10,  4}{  3,  4}\r
+{-13, -5}{ 13,  0}\r
+{ 13,  3}{  4,  0}\r
+3      Reachunder (alternate)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Crossed Arm Reverse\r
+{ -4,  0}{-12,  0}\r
+3      Crossed Arm Reverse\r
+\r
+/[ 3-ball Tricks ]\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up A\r
+{  0,  0}{  0,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{ 10,  0}\r
+(0,4)(4,4)     1Up-2Up A (Columns)\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up B\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{  0,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{  0,  0}\r
+(4,4)(0,4x)(4,4)(4x,0) 1Up-2Up B\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up C\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{ 14,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  0,  0}{  0,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{ 14,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  0,  0}{  0,  0}\r
+{  7,  0}{  7,  0}\r
+(4,4)(0,4x)(4,4)(4,0)(4,4)(4x,0)(4,4)(0,4)     1Up-2Up C\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up D\r
+{ 12,  0}{ -6,  0}\r
+{ -6,  0}{ 12,  0}\r
+{  0,  0}{  0,  0}\r
+{  6,  0}{  6,  0}\r
+{ -6,  0}{ 12,  0}\r
+{ 12,  0}{ -6,  0}\r
+{  6,  0}{  6,  0}\r
+{  0,  0}{  0,  0}\r
+(4,4)(0,4x)(4,4)(4x,0) 1Up-2Up D\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up E\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{ 13,  0}{-13,  0}\r
+{  4,  0}{  4,  0}\r
+(4,4)(0,4)     1Up-2Up E\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%1Up-2Up F\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{ 13,  7}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{ 13,  7}\r
+(6,6)(0,2x)(4x,0)      1Up-2Up F\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Yo-Yo\r
+{  5,  2}{  5,  3}\r
+{ -5, -1}{ -5,  0}\r
+{  5, 13}{  5, 13}\r
+{  5, -1}{  5,  0}\r
+(4,2)  Yo-Yo\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Oy-Oy\r
+{  5, -1}{  5,  0}\r
+{ -5,  3}{ -5,  4}\r
+{  5, 10}{  5, 10}\r
+{  5,  3}{  5,  4}\r
+(4,2)  Oy-Oy\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Around The Yo-Yo\r
+{  0,  2}{  0,  3}\r
+{  0, -1}{  0,  0}\r
+{  0, 13}{  0, 13}\r
+{ 10, -1}{-10, -1}\r
+(4,2)  Around The Yo-Yo\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%Yo-Yo (Columns Fake A)\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{  0, -1}{  0,  0}\r
+{ 10, 10}{ 10, 10}\r
+(2,4)  Yo-Yo (Columns Fake A)\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%Yo-Yo (Columns Fake B)\r
+{  0, -1}{  0,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, 10}{ 10, 10}\r
+(2,4)  Yo-Yo (Columns Fake B)\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Yo-Yo (Columns Fake C)\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, 10}{ 10, 10}\r
+{  0, -1}{  0,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{  0, -1}{  0,  0}\r
+{ 10, 10}{ 10, 10}\r
+(4,2)(4x,2)(2,4)(2,4x) Yo-Yo (Columns Fake C)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Yo-Yo (Tornado)\r
+{  5,  0}{  5,  0}\r
+{ 15, 15}{-15, 14}\r
+{ -5,  0}{ -5,  0}\r
+{ 15, 14}{-15, 15}\r
+(2,4)  Yo-Yo (Tornado)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Yo-Yo (Traverse)\r
+{  5,  0}{  5,  0}\r
+{ 15, 12}{  0, 12}\r
+{ -5,  0}{ -5,  0}\r
+{-15, 12}{  0, 12}\r
+(2,4)  Yo-Yo (Traverse)\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Normal\r
+441\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Outside 441\r
+{  4,  0}{ 13,  0}\r
+{  4,  0}{ 13,  0}\r
+{  4,  0}{  0,  0}\r
+441    Outside 441\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Arches\r
+{ 20, 10}{ 20, 10}\r
+{ 10,  0}{ 10,  0}\r
+{ 15,  5}{ 15,  5}\r
+{ 20, 10}{ 20, 10}\r
+{ 10,  0}{ 10,  0}\r
+{ 15,  5}{ 15,  5}\r
+3      Arches\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%2-in-1-Hand Tennis\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{ 15,  3}{ 15,  3}\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{ 15,  3}{ 15,  3}\r
+(2,4)(2,4x)(4,2)(4x,2) 2-in-1-Hand Tennis\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Statue of Liberty A\r
+{  3,  0}{ 12,  4}\r
+{ 10, 20}{  9, 19}\r
+3      Statue of Liberty A\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%Statue of Liberty B\r
+{  3,  4}{ 12,  0}\r
+{ 10, 17}{  9, 19}\r
+3      Statue of Liberty B\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Shuffle\r
+{  0, -5}{ 12, 10}\r
+{ 10,  0}{ 14,  0}\r
+(4x,2x)        Shuffle\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%See Saw Shuffle\r
+{ 10,  0}{ 14, 10}\r
+{ 10, -3}{  6,  0}\r
+{ 10, -3}{  6,  0}\r
+{ 10,  0}{ 14, 10}\r
+(4,2x)(2x,4)   See Saw Shuffle (Luke's Shuffle)\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%441 Shuffle\r
+{  5, -2}{  5, -2}\r
+{  6,  0}{  6,  0}\r
+{ 15,  4}{  9, 10}\r
+441    441 Shuffle\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Both Side Slam\r
+{  6,  0}{ 12, 10}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  4,  0}\r
+{  6,  0}{  6,  0}\r
+{ 10,  0}{ 10,  0}\r
+{  6,  0}{ 12, 10}\r
+{  6,  0}{  6,  0}\r
+{ 10,  0}{  4,  0}\r
+(4x,2x)(2,4x)(2x,4x)(4x,2)     Both Side Slam\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Robot\r
+{  5,  4}{ 10, -3}\r
+{ 10,  0}{ 10,  0}\r
+{ 10, -3}{ 10, 13}\r
+{  0,  0}{  0,  0}\r
+{ 10, 13}{-10, 13}\r
+{  6,  0}{  6,  0}\r
+242334 Robot (Machine,Factory)\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Exchange\r
+{  0, 11}{ 10, 11}\r
+{ 10,  0}{  0,  0}\r
+{  0, 12}{-10, 12}\r
+{ 10,  0}{  0,  0}\r
+2334   Exchange (Pendulum,Drop)\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Carry\r
+{  7, 12}{ -7, 12}\r
+{  7,  0}{ -7,  0}\r
+3      Carry\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Weave\r
+{ 10,  1}{ -7,  0}\r
+{ 12,  0}{ 12,  9}\r
+{  5,  0}{  5,  0}\r
+{ -5,  9}{  0,  3}\r
+{ 12,  0}{ 12,  9}\r
+{ 10,  1}{ -7,  0}\r
+{ -5,  9}{  0,  3}\r
+{  5,  0}{  5,  0}\r
+(2,4)(2,4x)(4,2)(4x,2) Weave\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Follow\r
+{-10, 10}{-10,  4}\r
+{ 10, -3}{ 10, 10}\r
+{  0,  4}{  0,  2}\r
+423    Follow\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Burke's Barrage\r
+{ 12, 12}{ -6, -2}\r
+{ -6,  5}{ -6, 12}\r
+{  0,  5}{  0,  5}\r
+423    Burke's Barrage\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Rubenstein's Revenge\r
+{  3,  1}{ 13,  8}\r
+{  7, -2}{-10, -3}\r
+{  3,  6}{-12,  2}\r
+{ -1,  0}{ 12,  2}\r
+{ -2,  2}{-10, -2}\r
+35223  Rubenstein's Revenge\r
+\r
+/[ 4-ball Tricks ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Reverse\r
+(4,4)  4-Reverse Synchronous Fountain\r
+4      4-Reverse Fountain\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns Switch\r
+{ 12,  0}{ 12,  2}\r
+{ 12,  2}{ 12,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+(4x,4x)(4,4)   4-Columns Switch\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Cross A\r
+{ 13,  0}{  7,  3}\r
+{ 13,  3}{  7,  0}\r
+(4x,4x)        4-ball Cross A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Cross B\r
+{ 13,  0}{  7,  3}\r
+{ 13,  3}{  7,  0}\r
+{ 13,  3}{  7,  0}\r
+{ 13,  0}{  7,  3}\r
+(4x,4x)        4-ball Cross B\r
+\r
+#DR=0.5\r
+#HR=0.3\r
+%Normal\r
+444447333\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Tennis\r
+{  9,  0}{  4,  0}\r
+{  9,  0}{  4,  0}\r
+{  0,  0}{  4,  0}\r
+{ 15,  3}{ 15,  3}\r
+{  9,  0}{  4,  0}\r
+44453  4-ball Tennis\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%4-ball Burke's Barrage\r
+{ 14, 14}{ -5, -2}\r
+{ -9,  3}{ -9, 14}\r
+{  0,  0}{  3,  0}\r
+525    4-ball Burke's Barrage\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Rubenstein's Revenge\r
+3[53]22[32]    Dancey's Devilment\r
+\r
+/[ 5-ball Tricks ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Reverse\r
+5      5-Reverse Cascade\r
+\r
+%Normal\r
+[32][32][32][32][32][32][52][52][52]555555522  3-Cascade -> 5-Cascade\r
+\r
+#DR=0.5\r
+#HR=0.3\r
+%Normal\r
+555555744\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%5-ball Burke's Barrage\r
+{ 16, 14}{ -3, -4}\r
+{ -9,  0}{-10, 14}\r
+{  2, -2}{  4,  0}\r
+726    5-ball Burke's Barrage\r
+\r
+/[ Shower ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+51     3-Shower Japanese "OTEDAMA"\r
+5223   3-Half Shower A\r
+\r
+%Odd Half\r
+{  8,  0}{ 15,  8}\r
+{ 15,  8}{  8,  0}\r
+3      3-Half Shower B\r
+\r
+%Shower\r
+71     4-Shower\r
+53     4-Half Shower\r
+\r
+%Odd Half\r
+5      5-Half Shower A\r
+\r
+%Shower\r
+73     5-Half Shower B\r
+(4x,6x)        5-Half Shower C\r
+75     6-Half Shower\r
+(2x,4x)        3-Synchronous Shower\r
+(2x,6x)        4-Synchronous Shower\r
+7131   3-High-Low Shower A\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%3-High-Low Shower B\r
+{  6,  0}{ 12,  3}\r
+{  6,  3}{  6,  0}\r
+{  6,  0}{  6,  3}\r
+{ 12,  3}{  6,  0}\r
+(2x,6x)(2x,2x) 3-High-Low Shower B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+315171 3-High-Low Shower C\r
+9151   4-High-Low Shower\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Under-the-Hand Shower\r
+{  5,  0}{-10,  0}\r
+{  3,  4}{ -3,  4}\r
+(2x,4x)        Under-the-Hand Shower\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Under-the-Hand Shower 2\r
+{  3,  0}{ 10,  0}\r
+{  5,  4}{  0,  4}\r
+{  3,  0}{-10,  0}\r
+{  5,  4}{  0,  4}\r
+(2x,4x)        Under-the-Hand Shower (alternate)\r
+\r
+%Odd Half\r
+35     4-Half Shower Like Trick\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%High Half Shower\r
+{  7,  7}{ -7,  7}\r
+{ 13,  0}{-13,  0}\r
+3      High Half Shower\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+[97]121        Multi-Shower\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%False Shower\r
+{ 10,  0}{-10, -2}\r
+{-10,  4}{ 10,  2}\r
+3      False Shower (Windmill)\r
+\r
+/[ Mills Mess ]\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Mills Mess\r
+{ -1,  0}{-12,  0}\r
+{  0,  0}{ 12,  0}\r
+{  1,  0}{-12,  0}\r
+330    2 out of the Mills Mess\r
+3      Standard Mills Mess\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+423\r
+414\r
+315\r
+612    Mills Mess Box\r
+4      4-ball Mills Mess\r
+534\r
+552\r
+642\r
+5      5-ball Mills Mess\r
+6      6-ball Mills Mess\r
+864\r
+[34]23 Multi-Mills Mess\r
+\r
+#DR=0.5\r
+#HR=0.08\r
+%No Through Mills Mess\r
+{ -2,  1}{-12,  1}\r
+{  6, -3}{ 12,  2}\r
+{ -2,  2}{ -6, -4}\r
+3      No Through Mills Mess\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Half Mess\r
+{ 12,  0}{ 12,  0}\r
+{  0,  0}{-12, -3}\r
+{  0,  2}{-12,  2}\r
+{  0, -3}{ -6,  0}\r
+3      Half Mess\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Reverse Mills Mess\r
+{-12,  0}{ -1,  0}\r
+{ 12,  0}{  0,  0}\r
+{-12,  0}{  1,  0}\r
+3      Reverse Mills Mess\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Mills 44133\r
+{ -2,  0}{-12,  5}\r
+{  2, -2}{ 12,  0}\r
+{  0,  2}{ -3,  0}\r
+{ 10,  0}{ 10,  2}\r
+{  7, -2}{-10, -3}\r
+44133  Mills 44133\r
+\r
+#DR=0.75\r
+#HR=0.06\r
+%Mills Simultaneous\r
+{  6, 10}{-10,  2}\r
+{  6, 10}{-10, -1}\r
+{ -4,  0}{ 12,  8}\r
+{ -4, -3}{ 12,  8}\r
+{  6, 10}{-10, -1}\r
+{  6, 10}{-10,  2}\r
+{ -4, -3}{ 12,  8}\r
+{ -4,  0}{ 12,  8}\r
+(4x,4x)(0,0)   2-Mills Simultaneous\r
+(4x,4x)(4x,0)(4x,4x)(0,4x)     3-Mills Simultaneous\r
+(4x,4x)        4-Mills Simultaneous\r
+\r
+/[ Box ]\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Box\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  2,  0}\r
+{ 10,  0}{  2,  0}\r
+{ 10,  0}{ 10,  0}\r
+(2x,4)(0,2x)   2 Balls out of the Box\r
+(2x,4)(4,2x)   Box (See Saw)\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Normal\r
+126    A Box-like Pattern A\r
+630    A Box-like Pattern B\r
+\r
+#DR=0.5\r
+#HR=0.11\r
+%Double Box\r
+{ 14,  0}{  7,  0}\r
+{  0,  0}{  0,  0}\r
+{ 14,  0}{  0,  0}\r
+{  0,  0}{ 14,  0}\r
+{  0,  0}{  0,  0}\r
+{ 14,  0}{  7,  0}\r
+{  0,  0}{ 14,  0}\r
+{ 14,  0}{  0,  0}\r
+(4x,2x)(4,2x)(2x,4x)(2x,4)     Double Box\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Advanced Box\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+(2x,8)(2x,4)(0,2x)(8,2x)(4,2x)(2x,0)   Advanced Box\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Box A\r
+{ 10,  0}{ 10,  0}\r
+{  7,  0}{  0,  0}\r
+{  7,  0}{  0,  0}\r
+633    4-ball Box A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Box B\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{ 10,  0}\r
+(2x,8)(2x,4)(8,2x)(4,2x)       4-ball Box B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+(2x,6)(2x,6)(6,2x)(6,2x)       4-ball Box C\r
+(4x,6)(6,4x)   5-ball Box\r
+\r
+/[ Columns ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Boston Mess A\r
+{ 10, -2}{ 10, -2}\r
+{ 10,  3}{ 10,  3}\r
+{  0, -2}{  0, -2}\r
+{-10,  3}{-10,  3}\r
+{-10, -2}{-10, -2}\r
+{  0,  3}{  0,  3}\r
+3      Boston Mess A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Boston Mess B\r
+{ 10,  3}{ 10, -2}\r
+{ 10,  3}{ 10,  3}\r
+{  0, -2}{  0, -2}\r
+{-10,  3}{-10,  3}\r
+{-10, -2}{-10, -2}\r
+{  0,  3}{  0,  3}\r
+{ 10, -2}{ 10,  3}\r
+{ 10, -2}{ 10, -2}\r
+{  0,  3}{  0,  3}\r
+{-10, -2}{-10, -2}\r
+{-10,  3}{-10,  3}\r
+{  0, -2}{  0, -2}\r
+3      Boston Mess B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns (Asymmetry)\r
+{ 12,  0}{ 12,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{ 12,  0}{ 12,  0}\r
+4      4-Columns (Pistons)\r
+(4,4)  4-Synchronous Columns (Asymmetry)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns (Symmetry)\r
+{ 12,  0}{ 12,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+(4,4)  4-Synchronous Columns (Symmetry)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns (Splits)\r
+{ 12,  0}{ 12,  0}\r
+{ -4,  0}{ -4,  0}\r
+{ -4,  0}{ -4,  0}\r
+{ 12,  0}{ 12,  0}\r
+(4,4)  4-Synchronous Columns (Splits)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Columns\r
+{ 12,  0}{ 12,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  6,  0}{  6,  0}\r
+{  6,  0}{  6,  0}\r
+{  0,  0}{  0,  0}\r
+{  6,  0}{  6,  0}\r
+(6,6)(6,6)(0,6)        5-Columns\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Mills Mess Columns A\r
+{-12,  0}{-12,  0}\r
+{ -6,  0}{ -6,  0}\r
+{  0,  0}{  0,  0}\r
+{  6,  0}{  6,  0}\r
+{ 12,  0}{ 12,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  6,  0}{  6,  0}\r
+{  0,  0}{  0,  0}\r
+{ -6,  0}{ -6,  0}\r
+{-12,  0}{-12,  0}\r
+5      5-Mills Mess Columns A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Mills Mess Columns B\r
+{ 12,  0}{ 12,  0}\r
+{  6,  0}{  6,  0}\r
+{  6,  0}{  6,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  0,  0}{  0,  0}\r
+{-12,  0}{-12,  0}\r
+{ -6,  0}{ -6,  0}\r
+{ -6,  0}{ -6,  0}\r
+{-12,  0}{-12,  0}\r
+{  0,  0}{  0,  0}\r
+5      5-Mills Mess Columns B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Mills Mess Columns C\r
+{ 12,  3}{ 12,  3}\r
+{ -6,  0}{ -6,  0}\r
+{  0,  3}{  0,  3}\r
+{  6,  0}{  6,  0}\r
+{-12,  3}{-12,  3}\r
+{-12,  0}{-12,  0}\r
+{  6,  3}{  6,  3}\r
+{  0,  0}{  0,  0}\r
+{ -6,  3}{ -6,  3}\r
+{ 12,  0}{ 12,  0}\r
+5      5-Mills Mess Columns C\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%6-Columns\r
+{ 15,  0}{ 15,  0}\r
+{ 15,  0}{ 15,  0}\r
+{  9,  0}{  9,  0}\r
+{  9,  0}{  9,  0}\r
+{  3,  0}{  3,  0}\r
+{  3,  0}{  3,  0}\r
+(6,6)  6-Columns\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Multi-Columns\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{ 13,  0}\r
+{  0,  0}{  0,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{ 13,  0}\r
+([46],[46])(0,6)(2,2)  Multi-Columns\r
+\r
+/[ One Hand Tricks ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%2-ball Columns in One Hand\r
+{  0,  0}{  0,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 13,  0}{ 13,  0}\r
+40     2-ball Columns in One Hand\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+60     3-ball in One Hand\r
+[46]06020      3-Multiplex in One Hand\r
+[46]06020[46]06020[46]060606060606020  Combination in One Hand\r
+8040\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%3-ball Columns in One Hand\r
+{ -2,  0}{ -2,  0}\r
+{ 13,  0}{ 13,  0}\r
+{  6,  0}{  6,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 14,  0}{ 14,  0}\r
+{ 13,  0}{ 13,  0}\r
+60     3-ball Columns in One Hand\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Cascade in One Hand\r
+{ -6,  0}{  2,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 18,  0}{ 10,  0}\r
+{ 13,  0}{ 13,  0}\r
+60     Cascade in One Hand\r
+\r
+/[ Site Swaps ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+33333333333333535051515151515151512441441441441441441  3-ball Combination\r
+501\r
+531\r
+561\r
+450\r
+453\r
+720\r
+753\r
+741\r
+744\r
+6424\r
+64\r
+66661\r
+61616\r
+5241   (5201) & (0040)\r
+72312  (70300) & (02012)\r
+7272712\r
+51414\r
+7161616\r
+88333\r
+75751\r
+\r
+%Center\r
+123456789\r
+\r
+/[ Multiplex ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+[34]1\r
+4[43]1 4[43]1 441+1\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Martin\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+[62]25 Martin\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+[22]5[22]0[54]020      5-ball Multiplex A step_1\r
+[54]225[22]2   5-ball Multiplex A step_2\r
+[54][22]2      5-ball Multiplex A\r
+555555522[54][22]2[54][22]2[54][22]2[52][52][52]       5-Cascade -> 5-Multiplex A No.1\r
+555555522[54][22]2[54][22]2[54][22]2[54][52]   5-Cascade -> 5-Multiplex A No.2\r
+[54]24522      5-ball Multiplex B step_1\r
+24[54] 5-ball Multiplex B\r
+25[75]51\r
+[456][22]2     7-ball Splits A\r
+\r
+%Center\r
+([66x],2)(2,[66x])     7-ball Splits B\r
+\r
+%Normal\r
+26[76]\r
+[234]57\r
+[54]   9-ball Multiplex\r
+\r
+/[ Synchronous ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+(2,4x)(4x,2)   3-Synchronous Cascade A\r
+(0,6x)(6x,0)   3-Synchronous Cascade B\r
+(2x,6x)(6x,2x)\r
+(4x,2x)(2,4)\r
+(4x,6)(0,2x)\r
+(2,6x)(2x,6)(6x,2)(6,2x)\r
+(2,4)([44x],2x)\r
+(2,[62])([22],6x)([62],2)(6x,[22])\r
+(6,6)  6-ball Synchronous Fountain\r
+\r
+/[ Numbers ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+91     5-Shower\r
+b1     6-Shower\r
+d1     7-Shower  IJA Champion\r
+\r
+%Normal\r
+6      6-Fountain\r
+7      7-Cascade\r
+8      8-Fountain\r
+9      9-Cascade  IJA Champion\r
+\r
+/[ Are You God? ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+z      35-Cascade\r
+\r
+%Shower\r
+z1     18-Shower\r
+[9bdfh][11111] 35-Multi Shower\r
+\r
+%Mills Mess\r
+333666999cccfffiiilll  12-Mills Mess\r
+\r
+%Normal\r
+[b9753]0020[22]0[222]0[2222]0\r
+\r
+%Center\r
+123456789abcdefghijklmnopqrstuvwxyz\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%9-ball Box\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{ 13,  0}{ 13,  0}\r
+u1q1m1i1e1a1612        9-ball Box\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+trpnljhfdb97531\r
+Ken\r
+[56789]        Penta-Multiplex\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%20-Columns A\r
+{ 29,  3}{ 29,  3}\r
+{  2,  3}{  2,  3}\r
+{ 26,  3}{ 26,  3}\r
+{  5,  3}{  5,  3}\r
+{ 23,  3}{ 23,  3}\r
+{  8,  3}{  8,  3}\r
+{ 20,  3}{ 20,  3}\r
+{ 11,  3}{ 11,  3}\r
+{ 17,  3}{ 17,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 17,  3}{ 17,  3}\r
+{ 11,  3}{ 11,  3}\r
+{ 20,  3}{ 20,  3}\r
+{  8,  3}{  8,  3}\r
+{ 23,  3}{ 23,  3}\r
+{  5,  3}{  5,  3}\r
+{ 26,  3}{ 26,  3}\r
+{  2,  3}{  2,  3}\r
+{ 29,  3}{ 29,  3}\r
+(k,k)  20-Columns A\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%20-Columns B\r
+{ 20,  3}{ 20,  3}\r
+{ 18,  3}{ 18,  3}\r
+{ 16,  3}{ 16,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 12,  3}{ 12,  3}\r
+{ 10,  3}{ 10,  3}\r
+{  8,  3}{  8,  3}\r
+{  6,  3}{  6,  3}\r
+{  4,  3}{  4,  3}\r
+{  2,  3}{  2,  3}\r
+{  2,  3}{  2,  3}\r
+{  4,  3}{  4,  3}\r
+{  6,  3}{  6,  3}\r
+{  8,  3}{  8,  3}\r
+{ 10,  3}{ 10,  3}\r
+{ 12,  3}{ 12,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 16,  3}{ 16,  3}\r
+{ 18,  3}{ 18,  3}\r
+{ 20,  3}{ 20,  3}\r
+k      20-Columns B\r
+\r
+/[ Okada's Original ]\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%reverce box\r
+{10,7}{10,7}\r
+{-10,0}{-10,0}\r
+{-10,7}{-10,7}\r
+{10,0}{10,0}\r
+!1-Person\r
+(4,2)  reverce box\r
+\r
+/[ 2 Persons Trick ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+#SP=0.5        \r
+%Normal\r
+!2-Person RL\r
+(6,6)  2-Person's Multi Cascade\r
+60     2-Person's One Hand Cascade-1\r
+06     2-Person's One Hand Cascade-2\r
+6      2-Person's Double Cascade\r
+(4x,a)(a,4x)   2-Person's synchro 1\r
+(a,4x)(4x,a)   2-Person's synchro 2\r
+\r
+%Carry2\r
+{  7,  0}{ -7,  0}\r
+{  7, 12}{ -7, 12}\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+!2-Person RL\r
+$1:%Carry\r
+$2:%Carry2\r
+(6,4x)(4x,6)   double-Carry\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+!2-Person RL2\r
+{20, 0}\r
+{ 0, 0}\r
+$1:%Carry\r
+$2:%Carry2\r
+(4x,6)(6,4x)   double-Carry2\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+!2-Person RL\r
+$1:%Carry2\r
+$2:%Carry\r
+(4x,6)(6,4x)   double-Carry3\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+$1:%Carry\r
+$2:%Normal\r
+(4x,6)(6,4x)   Carry-Normal\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Normal\r
+!2-Person LR\r
+(ax,6x)(6x,ax) 2-person arc\r
+\r
+%Shuffle2\r
+{ 10,  0}{ 14,  0}\r
+{  0, -5}{ 12, 10}\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+$1:%Shuffle\r
+$2:%Carry\r
+(4x,6)(6,4x)   Shuffle-Carry\r
+\r
+%Shuffle3\r
+{ 10,  0}{ 14,  0}\r
+{  0, 5}{ 12, 10}\r
+\r
+%Shuffle4\r
+{  0, 5}{ 12, 10}\r
+{ 10,  0}{ 14,  0}\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person LR\r
+$1:%Shuffle3\r
+$2:%Shuffle4\r
+(2x,8)(8,2x)   double-Shuffle\r
+(2x,6x)(6x,2x) double-Shuffle2\r
+(2x,ax)(ax,2x) double-Shuffle3\r
+\r
+%Normal-Reverse\r
+{ 13,  0}{  4,  0}\r
+{  4,  0}{ 13,  0}\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+$1:%Normal\r
+$2:%Normal-Reverse\r
+5      2Per-5\r
+5559   2Per-5559\r
+555d   2Per-555d\r
+\r
+%2per-Carry-Up\r
+{10,10}{20,10}\r
+\r
+%2per-Carry-Up2\r
+{20,10}{10,10}\r
+\r
+!2-Person UpDown111\r
+{ 0,10}\r
+{ 0, 0}\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+$2:%Normal\r
+$1:%2per-Carry-Up\r
+!2-Person UpDown111\r
+(6,6)  2per-updown carry1\r
+6      2per-updown carry2\r
+$1:%2per-Carry-Up2\r
+7566   2per-updown carry3\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person LR\r
+$1:%Shuffle2\r
+$2:%Carry\r
+(2,a)(a,2)     Shuffle-Carry 2\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+%Normal\r
+555h   2Person Half Shower 1\r
+595d   2Person Half Shower 2\r
+888888888888888889ad595d595d595d595d595d595d56777888888888888888       2Person fountain -> Half-Shower\r
+\r
+/[ 3 Persons Trick ]\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!3-Person RL\r
+91b9cc fountain-cascade-shower\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!3-Person LR\r
+9009cc fountain-cascade\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!3-Person LR\r
+%Normal-Reverse\r
+77777d 3Per-HalfShower\r
+77777j 3Per-HalfShower 2\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!3-Person LR\r
+$1:%Normal\r
+$3:%Normal-Reverse\r
+$2:%Reverse\r
+77d77j 3Per-HalfShower 3\r
+\r
+/[ 4 Persons Trick ]\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!4-Person RL\r
+(c,c)  4 Person's Multi-Cascade\r
+\r
+/[ 8 Persons Trick ]\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!8-Person 4*2\r
+siteawsp       8 Person's siteawsp\r
+\r
+/[ 10 Persons Trick ]\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!10-Person 244\r
+siteawsp       10 Person's siteawsp\r
+\r
+\r
+#dr=0.5\r
+#hr=0.2\r
+%H\r
+{10,0}{10,0}\r
+{10,0}{10,0}\r
+{10,0}{10,0}\r
+{10,0}{10,0}\r
+{10,-10}{10,-10}\r
+{-10,0}{-10,0}\r
+{10,0}{10,0}\r
+{10,0}{10,0}\r
+{10,0}{10,0}\r
+{10,0}{10,0}\r
+{-10,0}{-10,0}\r
+{10,-10}{10,-10}\r
+(2x,4x)(4,2)(4x,2)(4x,2x)(2,4)(2,4x) Hbox\r
+\r
+/----------------- end ------------------\r
diff --git a/workspace/JuggleMaster/src/pattern_ja.jm b/workspace/JuggleMaster/src/pattern_ja.jm
new file mode 100644 (file)
index 0000000..3a39725
--- /dev/null
@@ -0,0 +1,1549 @@
+;==============================================================================\r
+;       JuggleMaster  Version 1.60  Copyright (c) 1995-1996 Ken Matsuoka\r
+;       JuggleMaster2 Version 2.03  Copyright (c) 2005-     Takumi Okada\r
+;==============================================================================\r
+\r
+;行頭にジャグリングパターン、その後スペースまたはタブを入れて、タイトル\r
+;ジャグリングパターンは76文字以内、タイトルは40文字まで認識\r
+;メニューに読み込めるのは、9999行まで\r
+;スタイルは300種類以内\r
+;スタイルデータは合計3000行以内\r
+;フォーメーションデータは10行以内\r
+;\r
+;行頭の識別文字\r
+;  ';' コメント行\r
+;  '#' 各パラメータの設定\r
+;  '/' メニューの区切り\r
+;  '%' スタイルのタイトル(30文字以内) 続けてスタイルデータを記述\r
+;     または、登録済みのスタイルの呼び出し\r
+;  '!' フォーメーションデータ(人物を配置する座標)  続けてスタイルデータを記述\r
+;     または、登録済みのスタイルの呼び出し\r
+;      フォーメーションデータを定義しない場合、直前のフォーメーションデータがセットされる\r
+;  '$' スタイルデータを人物ごとに割り当てる\r
+;      ファイル中の該当する個所よりも前の個所で定義済みのスタイルを指定すること\r
+;\r
+;以下のスタイルは初期値として登録済み\r
+;%Normal\r
+;{ 13,  0}{  4,  0}\r
+;\r
+;!1-Person\r
+;{ 0,0}\r
+;\r
+;====  パラメータの設定  ======================================================\r
+; 行頭の "#??=" の部分は書きかえないで下さい ( f:実数、n:整数 )\r
+\r
+#GA=9.8                ;重力加速度 (0<f<=98) [m/s^2]\r
+#DR=0.50       ;保持率 (0.10<=f<=0.90)\r
+#HR=0.20       ;高さの基準値 (0.01<=f<=1.00) [m]\r
+#SP=1.0                ;スピード (0.1<=f<=2.0)\r
+#BC=000                ;バックカラー Red Green Blue 16進数3桁 (0<=R,G,B<=F)\r
+#BP=1          ;ビープ音を鳴らす   (n=0,1)\r
+#HD=1          ;手を表示する       (n=0,1)\r
+#PD=1          ;パターンを表示する (n=0,1)\r
+#MR=0          ;左右反転にする     (n=0,1)\r
+\r
+;==============================================================================\r
+\r
+!2-Person RL\r
+{30, 0}\r
+{ 0, 0}\r
+\r
+!2-Person LR\r
+{ 0, 0}\r
+{30, 0}\r
+\r
+!2-Person UpDown\r
+{ 0,30}\r
+{ 0, 0}\r
+\r
+!3-Person RL\r
+{ 0, 0}\r
+{30, 0}\r
+{60, 0}\r
+\r
+!3-Person LR\r
+{60, 0}\r
+{30, 0}\r
+{ 0, 0}\r
+\r
+!3-Person Triangle 1\r
+{ 0, 0}\r
+{30, 0}\r
+{15,30}\r
+\r
+!3-Person Triangle 2\r
+{15, 0}\r
+{ 0,30}\r
+{30,30}\r
+\r
+!4-Person RL\r
+{90, 0}\r
+{60, 0}\r
+{30, 0}\r
+{ 0, 0}\r
+\r
+!4-Person LR\r
+{ 0, 0}\r
+{30, 0}\r
+{60, 0}\r
+{90, 0}\r
+\r
+!4-Person Square 1\r
+{ 0, 0}\r
+{30, 0}\r
+{30,30}\r
+{ 0,30}\r
+\r
+!4-Person Square 2\r
+{20, 0}\r
+{ 0,20}\r
+{40,20}\r
+{20,40}\r
+\r
+!4-Person Y\r
+{60,20}\r
+{30,20}\r
+{ 0,40}\r
+{ 0, 0}\r
+\r
+!5-Person RL\r
+{120, 0}\r
+{ 90, 0}\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+\r
+!5-Person LR\r
+{  0, 0}\r
+{ 30, 0}\r
+{ 60, 0}\r
+{ 90, 0}\r
+{120, 0}\r
+\r
+!5-Person Penta\r
+{  0,45}\r
+{-23,28}\r
+{-15, 0}\r
+{ 15, 0}\r
+{ 23,28}\r
+\r
+!5-Person Star\r
+{  0,45}\r
+{-15, 0}\r
+{ 23,28}\r
+{-23,28}\r
+{ 15, 0}\r
+\r
+!6-Person 3*2\r
+{ 0, 60}\r
+{ 0, 30}\r
+{ 0,  0}\r
+{30, 60}\r
+{30, 30}\r
+{30,  0}\r
+\r
+!6-Person Hexagon\r
+{-30, 26}\r
+{-15,  0}\r
+{ 15,  0}\r
+{ 30, 26}\r
+{ 15, 52}\r
+{-15, 52}\r
+\r
+!7-Person infinity\r
+{-20, 20}\r
+{-40,  0}\r
+{-20,-20}\r
+{  0,  0}\r
+{ 20, 20}\r
+{ 40,  0}\r
+{ 20,-20}\r
+\r
+!8-Person 4*2\r
+{ 90, 0}\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+{ 90,30}\r
+{ 60,30}\r
+{ 30,30}\r
+{  0,30}\r
\r
+!9-Person 3*3\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+{ 60,30}\r
+{ 30,30}\r
+{  0,30}\r
+{ 60,60}\r
+{ 30,60}\r
+{  0,60}\r
+\r
+!10-Person 244\r
+{ 90, 0}\r
+{ 60, 0}\r
+{ 30, 0}\r
+{  0, 0}\r
+{ 90,30}\r
+{ 60,30}\r
+{ 30,30}\r
+{  0,30}\r
+{ 60,60}\r
+{ 30,60}\r
+\r
+%Reverse\r
+{  4,  0}{ 13,  0}\r
+\r
+%Shower\r
+{  5,  0}{ 10,  0}\r
+{ 10,  0}{  5,  0}\r
+\r
+%Center\r
+{ 13,  0}{  0,  0}\r
+\r
+/[ 3−カスケードの練習 ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+!1-Person\r
+300    1個の投げ方\r
+33022  2個の投げ方\r
+330    2個の連続\r
+[32]3322       まず3回投げよう\r
+3      3−カスケード すべての基本\r
+\r
+#DR=0.75\r
+#HR=0.2\r
+3      3−カスケード 少しゆっくり\r
+\r
+/[ 4−ファウンテンの練習 ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+40     右手で2個 左手でも同様に\r
+(4,4)  4−シンクロ ファウンテン\r
+4      4−ファウンテン\r
+\r
+/[ 5−カスケードの練習 ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+50500  まず2個\r
+52512  3個の始め\r
+50505  チェイス\r
+55500  フラッシュ\r
+[52][52]55022[22][22]  4個に挑戦 その1\r
+55550  4個に挑戦 その2\r
+552    4個に挑戦 その3\r
+5551   4個に挑戦 その4\r
+5      5−カスケード\r
+\r
+/[ 3−カスケードのトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.3\r
+%Normal\r
+333355500      フラッシュ\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Chop\r
+{  4,  9}{-10, -3}\r
+{ 10,  6}{  7,  9}\r
+{ 10,  6}{  7,  9}\r
+{  4,  9}{-10, -3}\r
+(2,4x)(4x,2)   チョップ\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Eating Apples\r
+{  0,  7}{ -3, -3}\r
+{ 12, 10}{  0,  8}\r
+{ 12, 10}{  0,  8}\r
+{  0,  7}{ -3, -3}\r
+(2,4x)(4x,2)   リンゴ食べちゃえ\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Eating an Apple\r
+{  0,  6}{ -3,  4}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  2,  0}\r
+{ 12,  7}{  0,  7}\r
+{ 13,  0}{ -4,  0}\r
+33333423       リンゴ食べちゃえ(1個だけね)\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Wide\r
+{ 21,  9}{ 18,  4}\r
+3      ワイド カスケード\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Tennis\r
+{  8,  0}{  4,  0}\r
+{  8,  0}{  4,  0}\r
+{ 14,  3}{ 14,  3}\r
+3      テニス\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Over the Head\r
+{ 12, 19}{  3, 19}\r
+3      オーバー ザ ヘッド\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Reverse\r
+3      リバース カスケード\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Wide Reverse\r
+{ -8,  0}{ 12,  0}\r
+3      ワイド リバース カスケード\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachover\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 10,  0}{  8, -2}\r
+{-13,  5}{  0,  2}\r
+{ 13, -3}{  4,  0}\r
+3      リーチ オーバー\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachover (alternate)\r
+{ 10,  0}{  3, -2}\r
+{-13,  5}{ 13,  0}\r
+{ 13, -3}{  4,  0}\r
+3      リーチ オーバー (左右交互)\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachunder\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  4, -3}\r
+{ 10,  4}{  4,  4}\r
+{-16, -3}{  0,  0}\r
+{ 13,  3}{  4,  0}\r
+3      リーチ アンダー\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Reachunder (alternate)\r
+{ 10,  4}{  3,  4}\r
+{-13, -5}{ 13,  0}\r
+{ 13,  3}{  4,  0}\r
+3      リーチ アンダー (左右交互)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Crossed Arm Reverse\r
+{ -4,  0}{-12,  0}\r
+3      クロス アーム\r
+\r
+/[ 3個のユニークなトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up A\r
+{  0,  0}{  0,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{ 10,  0}\r
+(0,4)(4,4)     1Up-2Up A (コラムス)\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up B\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{  0,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{  0,  0}\r
+(4,4)(0,4x)(4,4)(4x,0) 1Up-2Up B\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up C\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{ 14,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  0,  0}{  0,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{ 14,  0}{ 14,  0}\r
+{  7,  0}{  7,  0}\r
+{  7,  0}{  7,  0}\r
+{  0,  0}{  0,  0}\r
+{  7,  0}{  7,  0}\r
+(4,4)(0,4x)(4,4)(4,0)(4,4)(4x,0)(4,4)(0,4)     1Up-2Up C\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up D\r
+{ 12,  0}{ -6,  0}\r
+{ -6,  0}{ 12,  0}\r
+{  0,  0}{  0,  0}\r
+{  6,  0}{  6,  0}\r
+{ -6,  0}{ 12,  0}\r
+{ 12,  0}{ -6,  0}\r
+{  6,  0}{  6,  0}\r
+{  0,  0}{  0,  0}\r
+(4,4)(0,4x)(4,4)(4x,0) 1Up-2Up D\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%1Up-2Up E\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{ 13,  0}{-13,  0}\r
+{  4,  0}{  4,  0}\r
+(4,4)(0,4)     1Up-2Up E\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%1Up-2Up F\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{ 13,  7}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{ 13,  7}\r
+(6,6)(0,2x)(4x,0)      1Up-2Up F\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Yo-Yo\r
+{  5,  2}{  5,  3}\r
+{ -5, -1}{ -5,  0}\r
+{  5, 13}{  5, 13}\r
+{  5, -1}{  5,  0}\r
+(4,2)  ヨーヨー\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Oy-Oy\r
+{  5, -1}{  5,  0}\r
+{ -5,  3}{ -5,  4}\r
+{  5, 10}{  5, 10}\r
+{  5,  3}{  5,  4}\r
+(4,2)  オイオイ\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Around The Yo-Yo\r
+{  0,  2}{  0,  3}\r
+{  0, -1}{  0,  0}\r
+{  0, 13}{  0, 13}\r
+{ 10, -1}{-10, -1}\r
+(4,2)  ヨーヨーを一周\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%Yo-Yo (Columns Fake A)\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{  0, -1}{  0,  0}\r
+{ 10, 10}{ 10, 10}\r
+(2,4)  ヨーヨー (コラムスもどき A)\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%Yo-Yo (Columns Fake B)\r
+{  0, -1}{  0,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, 10}{ 10, 10}\r
+(2,4)  ヨーヨー (コラムスもどき B)\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Yo-Yo (Columns Fake C)\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, 10}{ 10, 10}\r
+{  0, -1}{  0,  0}\r
+{ 10, -1}{ 10,  0}\r
+{ 10, -1}{ 10,  0}\r
+{  0, -1}{  0,  0}\r
+{ 10, 10}{ 10, 10}\r
+(4,2)(4x,2)(2,4)(2,4x) ヨーヨー (コラムスもどき C)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Yo-Yo (Tornado)\r
+{  5,  0}{  5,  0}\r
+{ 15, 15}{-15, 14}\r
+{ -5,  0}{ -5,  0}\r
+{ 15, 14}{-15, 15}\r
+(2,4)  ヨーヨー (トルネード)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Yo-Yo (Traverse)\r
+{  5,  0}{  5,  0}\r
+{ 15, 12}{  0, 12}\r
+{ -5,  0}{ -5,  0}\r
+{-15, 12}{  0, 12}\r
+(2,4)  ヨーヨー (横断)\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Normal\r
+441\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Outside 441\r
+{  4,  0}{ 13,  0}\r
+{  4,  0}{ 13,  0}\r
+{  4,  0}{  0,  0}\r
+441    外回りの441\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Arches\r
+{ 20, 10}{ 20, 10}\r
+{ 10,  0}{ 10,  0}\r
+{ 15,  5}{ 15,  5}\r
+{ 20, 10}{ 20, 10}\r
+{ 10,  0}{ 10,  0}\r
+{ 15,  5}{ 15,  5}\r
+3      アーチ\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%2-in-1-Hand Tennis\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{ 15,  3}{ 15,  3}\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{  5,  0}{  5,  0}\r
+{ 15,  3}{ 15,  3}\r
+(2,4)(2,4x)(4,2)(4x,2) テニス その2\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Statue of Liberty A\r
+{  3,  0}{ 12,  4}\r
+{ 10, 20}{  9, 19}\r
+3      自由の女神 A\r
+\r
+#DR=0.5\r
+#HR=0.14\r
+%Statue of Liberty B\r
+{  3,  4}{ 12,  0}\r
+{ 10, 17}{  9, 19}\r
+3      自由の女神 B\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Shuffle\r
+{  0, -5}{ 12, 10}\r
+{ 10,  0}{ 14,  0}\r
+(4x,2x)        シャッフル\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%See Saw Shuffle\r
+{ 10,  0}{ 14, 10}\r
+{ 10, -3}{  6,  0}\r
+{ 10, -3}{  6,  0}\r
+{ 10,  0}{ 14, 10}\r
+(4,2x)(2x,4)   シーソー シャッフル (Luke's Shuffle)\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%441 Shuffle\r
+{  5, -2}{  5, -2}\r
+{  6,  0}{  6,  0}\r
+{ 15,  4}{  9, 10}\r
+441    441 シャッフル\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Both Side Slam\r
+{  6,  0}{ 12, 10}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  4,  0}\r
+{  6,  0}{  6,  0}\r
+{ 10,  0}{ 10,  0}\r
+{  6,  0}{ 12, 10}\r
+{  6,  0}{  6,  0}\r
+{ 10,  0}{  4,  0}\r
+(4x,2x)(2,4x)(2x,4x)(4x,2)     Both Side Slam\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Robot\r
+{  5,  4}{ 10, -3}\r
+{ 10,  0}{ 10,  0}\r
+{ 10, -3}{ 10, 13}\r
+{  0,  0}{  0,  0}\r
+{ 10, 13}{-10, 13}\r
+{  6,  0}{  6,  0}\r
+242334 Robot (Machine,Factory)\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Exchange\r
+{  0, 11}{ 10, 11}\r
+{ 10,  0}{  0,  0}\r
+{  0, 12}{-10, 12}\r
+{ 10,  0}{  0,  0}\r
+2334   Exchange (Pendulum,Drop)\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Carry\r
+{  7, 12}{ -7, 12}\r
+{  7,  0}{ -7,  0}\r
+3      Carry\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Weave\r
+{ 10,  1}{ -7,  0}\r
+{ 12,  0}{ 12,  9}\r
+{  5,  0}{  5,  0}\r
+{ -5,  9}{  0,  3}\r
+{ 12,  0}{ 12,  9}\r
+{ 10,  1}{ -7,  0}\r
+{ -5,  9}{  0,  3}\r
+{  5,  0}{  5,  0}\r
+(2,4)(2,4x)(4,2)(4x,2) Weave\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Follow\r
+{-10, 10}{-10,  4}\r
+{ 10, -3}{ 10, 10}\r
+{  0,  4}{  0,  2}\r
+423    Follow\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Burke's Barrage\r
+{ 12, 12}{ -6, -2}\r
+{ -6,  5}{ -6, 12}\r
+{  0,  5}{  0,  5}\r
+423    Burke's Barrage\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Rubenstein's Revenge\r
+{  3,  1}{ 13,  8}\r
+{  7, -2}{-10, -3}\r
+{  3,  6}{-12,  2}\r
+{ -1,  0}{ 12,  2}\r
+{ -2,  2}{-10, -2}\r
+35223  Rubenstein's Revenge\r
+\r
+/[ 4個のトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Reverse\r
+(4,4)  4−リバース シンクロ ファウンテン\r
+4      4−リバース ファウンテン\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns Switch\r
+{ 12,  0}{ 12,  2}\r
+{ 12,  2}{ 12,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+(4x,4x)(4,4)   4−コラムス スイッチ\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Cross A\r
+{ 13,  0}{  7,  3}\r
+{ 13,  3}{  7,  0}\r
+(4x,4x)        4−クロス A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Cross B\r
+{ 13,  0}{  7,  3}\r
+{ 13,  3}{  7,  0}\r
+{ 13,  3}{  7,  0}\r
+{ 13,  0}{  7,  3}\r
+(4x,4x)        4−クロス B\r
+\r
+#DR=0.5\r
+#HR=0.3\r
+%Normal\r
+444447333\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Tennis\r
+{  9,  0}{  4,  0}\r
+{  9,  0}{  4,  0}\r
+{  0,  0}{  4,  0}\r
+{ 15,  3}{ 15,  3}\r
+{  9,  0}{  4,  0}\r
+44453  4ボール テニス\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%4-ball Burke's Barrage\r
+{ 14, 14}{ -5, -2}\r
+{ -9,  3}{ -9, 14}\r
+{  0,  0}{  3,  0}\r
+525    4-ball Burke's Barrage\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Rubenstein's Revenge\r
+3[53]22[32]    Dancey's Devilment\r
+\r
+/[ 5個のトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Reverse\r
+5      5−リバース カスケード\r
+\r
+%Normal\r
+[32][32][32][32][32][32][52][52][52]555555522  3カスケード から 5カスケード\r
+\r
+#DR=0.5\r
+#HR=0.3\r
+%Normal\r
+555555744\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%5-ball Burke's Barrage\r
+{ 16, 14}{ -3, -4}\r
+{ -9,  0}{-10, 14}\r
+{  2, -2}{  4,  0}\r
+726    5-ball Burke's Barrage\r
+\r
+/[ シャワー ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+51     3−シャワー 日本のお手玉\r
+5223   3−ハーフシャワー A\r
+\r
+%Odd Half\r
+{  8,  0}{ 15,  8}\r
+{ 15,  8}{  8,  0}\r
+3      3−ハーフシャワー B\r
+\r
+%Shower\r
+71     4−シャワー\r
+53     4−ハーフシャワー\r
+\r
+%Odd Half\r
+5      5−ハーフシャワー A\r
+\r
+%Shower\r
+73     5−ハーフシャワー B\r
+(4x,6x)        5−ハーフシャワー C\r
+75     6−ハーフシャワー\r
+(2x,4x)        3−シンクロシャワー\r
+(2x,6x)        4−シンクロシャワー\r
+7131   3−上下のシャワー A\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%3-High-Low Shower B\r
+{  6,  0}{ 12,  3}\r
+{  6,  3}{  6,  0}\r
+{  6,  0}{  6,  3}\r
+{ 12,  3}{  6,  0}\r
+(2x,6x)(2x,2x) 3−上下のシャワー B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+315171 3−上下のシャワー C\r
+9151   4−上下のシャワー\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Under-the-Hand Shower\r
+{  5,  0}{-10,  0}\r
+{  3,  4}{ -3,  4}\r
+(2x,4x)        腕の下 シャワー\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Under-the-Hand Shower 2\r
+{  3,  0}{ 10,  0}\r
+{  5,  4}{  0,  4}\r
+{  3,  0}{-10,  0}\r
+{  5,  4}{  0,  4}\r
+(2x,4x)        腕の下 シャワー(交互)\r
+\r
+%Odd Half\r
+35     4−ハーフシャワーの変形\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%High Half Shower\r
+{  7,  7}{ -7,  7}\r
+{ 13,  0}{-13,  0}\r
+3      ハイ ハーフシャワー\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+[97]121        マルチ シャワー\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%False Shower\r
+{ 10,  0}{-10, -2}\r
+{-10,  4}{ 10,  2}\r
+3      False Shower (Windmill)\r
+\r
+/[ ミルズメス ]\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Mills Mess\r
+{ -1,  0}{-12,  0}\r
+{  0,  0}{ 12,  0}\r
+{  1,  0}{-12,  0}\r
+330    3−ミルズメス 基本の練習\r
+3      3−ミルズメス 基本\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+423\r
+414\r
+315\r
+612    ミルズメス ボックス\r
+4      4−ミルズメス\r
+534\r
+552\r
+642\r
+5      5−ミルズメス\r
+6      6−ミルズメス\r
+864\r
+[34]23 マルチ ミルズメス\r
+\r
+#DR=0.5\r
+#HR=0.08\r
+%No Through Mills Mess\r
+{ -2,  1}{-12,  1}\r
+{  6, -3}{ 12,  2}\r
+{ -2,  2}{ -6, -4}\r
+3      無透過ミルズメス\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Half Mess\r
+{ 12,  0}{ 12,  0}\r
+{  0,  0}{-12, -3}\r
+{  0,  2}{-12,  2}\r
+{  0, -3}{ -6,  0}\r
+3      ハーフメス\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Reverse Mills Mess\r
+{-12,  0}{ -1,  0}\r
+{ 12,  0}{  0,  0}\r
+{-12,  0}{  1,  0}\r
+3      リバース ミルズメス\r
+\r
+#DR=0.5\r
+#HR=0.13\r
+%Mills 44133\r
+{ -2,  0}{-12,  5}\r
+{  2, -2}{ 12,  0}\r
+{  0,  2}{ -3,  0}\r
+{ 10,  0}{ 10,  2}\r
+{  7, -2}{-10, -3}\r
+44133  Mills 44133\r
+\r
+#DR=0.75\r
+#HR=0.06\r
+%Mills Simultaneous\r
+{  6, 10}{-10,  2}\r
+{  6, 10}{-10, -1}\r
+{ -4,  0}{ 12,  8}\r
+{ -4, -3}{ 12,  8}\r
+{  6, 10}{-10, -1}\r
+{  6, 10}{-10,  2}\r
+{ -4, -3}{ 12,  8}\r
+{ -4,  0}{ 12,  8}\r
+(4x,4x)(0,0)   2-Mills Simultaneous\r
+(4x,4x)(4x,0)(4x,4x)(0,4x)     3-Mills Simultaneous\r
+(4x,4x)        4-Mills Simultaneous\r
+\r
+/[ ボックス ]\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Box\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  2,  0}\r
+{ 10,  0}{  2,  0}\r
+{ 10,  0}{ 10,  0}\r
+(2x,4)(0,2x)   ボックスのための練習\r
+(2x,4)(4,2x)   ボックス (シーソー)\r
+\r
+#DR=0.5\r
+#HR=0.15\r
+%Normal\r
+126    ボックスもどき A\r
+630    ボックスもどき B\r
+\r
+#DR=0.5\r
+#HR=0.11\r
+%Double Box\r
+{ 14,  0}{  7,  0}\r
+{  0,  0}{  0,  0}\r
+{ 14,  0}{  0,  0}\r
+{  0,  0}{ 14,  0}\r
+{  0,  0}{  0,  0}\r
+{ 14,  0}{  7,  0}\r
+{  0,  0}{ 14,  0}\r
+{ 14,  0}{  0,  0}\r
+(4x,2x)(4,2x)(2x,4x)(2x,4)     ダブルボックス\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Advanced Box\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{  3,  0}{ 10,  0}\r
+{  3,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+(2x,8)(2x,4)(0,2x)(8,2x)(4,2x)(2x,0)   拡張ボックス\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Box A\r
+{ 10,  0}{ 10,  0}\r
+{  7,  0}{  0,  0}\r
+{  7,  0}{  0,  0}\r
+633    4ボールのボックス A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-ball Box B\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 10,  0}{  3,  0}\r
+{ 10,  0}{ 10,  0}\r
+(2x,8)(2x,4)(8,2x)(4,2x)       4ボールのボックス B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+(2x,6)(2x,6)(6,2x)(6,2x)       4ボールのボックス C\r
+(4x,6)(6,4x)   5ボールのボックス\r
+\r
+/[ コラムス ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Boston Mess A\r
+{ 10, -2}{ 10, -2}\r
+{ 10,  3}{ 10,  3}\r
+{  0, -2}{  0, -2}\r
+{-10,  3}{-10,  3}\r
+{-10, -2}{-10, -2}\r
+{  0,  3}{  0,  3}\r
+3      ボストンメス A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Boston Mess B\r
+{ 10,  3}{ 10, -2}\r
+{ 10,  3}{ 10,  3}\r
+{  0, -2}{  0, -2}\r
+{-10,  3}{-10,  3}\r
+{-10, -2}{-10, -2}\r
+{  0,  3}{  0,  3}\r
+{ 10, -2}{ 10,  3}\r
+{ 10, -2}{ 10, -2}\r
+{  0,  3}{  0,  3}\r
+{-10, -2}{-10, -2}\r
+{-10,  3}{-10,  3}\r
+{  0, -2}{  0, -2}\r
+3      ボストンメス B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns (Asymmetry)\r
+{ 12,  0}{ 12,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+{ 12,  0}{ 12,  0}\r
+4      4−コラムス (ピストン)\r
+(4,4)  4−コラムス シンクロ (非対称)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns (Symmetry)\r
+{ 12,  0}{ 12,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  4,  0}{  4,  0}\r
+{  4,  0}{  4,  0}\r
+(4,4)  4−コラムス シンクロ (対称)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%4-Columns (Splits)\r
+{ 12,  0}{ 12,  0}\r
+{ -4,  0}{ -4,  0}\r
+{ -4,  0}{ -4,  0}\r
+{ 12,  0}{ 12,  0}\r
+(4,4)  4−コラムス シンクロ (Splits)\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Columns\r
+{ 12,  0}{ 12,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  6,  0}{  6,  0}\r
+{  6,  0}{  6,  0}\r
+{  0,  0}{  0,  0}\r
+{  6,  0}{  6,  0}\r
+(6,6)(6,6)(0,6)        5−コラムス\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Mills Mess Columns A\r
+{-12,  0}{-12,  0}\r
+{ -6,  0}{ -6,  0}\r
+{  0,  0}{  0,  0}\r
+{  6,  0}{  6,  0}\r
+{ 12,  0}{ 12,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  6,  0}{  6,  0}\r
+{  0,  0}{  0,  0}\r
+{ -6,  0}{ -6,  0}\r
+{-12,  0}{-12,  0}\r
+5      5−ミルズメス コラムス A\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Mills Mess Columns B\r
+{ 12,  0}{ 12,  0}\r
+{  6,  0}{  6,  0}\r
+{  6,  0}{  6,  0}\r
+{ 12,  0}{ 12,  0}\r
+{  0,  0}{  0,  0}\r
+{-12,  0}{-12,  0}\r
+{ -6,  0}{ -6,  0}\r
+{ -6,  0}{ -6,  0}\r
+{-12,  0}{-12,  0}\r
+{  0,  0}{  0,  0}\r
+5      5−ミルズメス コラムス B\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%5-Mills Mess Columns C\r
+{ 12,  3}{ 12,  3}\r
+{ -6,  0}{ -6,  0}\r
+{  0,  3}{  0,  3}\r
+{  6,  0}{  6,  0}\r
+{-12,  3}{-12,  3}\r
+{-12,  0}{-12,  0}\r
+{  6,  3}{  6,  3}\r
+{  0,  0}{  0,  0}\r
+{ -6,  3}{ -6,  3}\r
+{ 12,  0}{ 12,  0}\r
+5      5−ミルズメス コラムス C\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%6-Columns\r
+{ 15,  0}{ 15,  0}\r
+{ 15,  0}{ 15,  0}\r
+{  9,  0}{  9,  0}\r
+{  9,  0}{  9,  0}\r
+{  3,  0}{  3,  0}\r
+{  3,  0}{  3,  0}\r
+(6,6)  6−コラムス\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Multi-Columns\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{ 13,  0}\r
+{  0,  0}{  0,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{ 13,  0}\r
+([46],[46])(0,6)(2,2)  5−マルチ コラムス\r
+\r
+/[ 片手のトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%2-ball Columns in One Hand\r
+{  0,  0}{  0,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 10,  0}{ 10,  0}\r
+{ 13,  0}{ 13,  0}\r
+40     コラムス 片手2個\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+60     片手3個\r
+[46]06020      片手3個のマルチ\r
+[46]06020[46]06020[46]060606060606020  片手3ボールのショー\r
+8040\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%3-ball Columns in One Hand\r
+{ -2,  0}{ -2,  0}\r
+{ 13,  0}{ 13,  0}\r
+{  6,  0}{  6,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 14,  0}{ 14,  0}\r
+{ 13,  0}{ 13,  0}\r
+60     片手3個のコラムス\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Cascade in One Hand\r
+{ -6,  0}{  2,  0}\r
+{ 13,  0}{ 13,  0}\r
+{ 18,  0}{ 10,  0}\r
+{ 13,  0}{ 13,  0}\r
+60     片手カスケード\r
+\r
+/[ サイトスワップ ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+33333333333333535051515151515151512441441441441441441  3ボールの組み合わせ\r
+501    501 両手で2個\r
+531    531 501の発展形 その1\r
+561    561 501の発展形 その2\r
+450\r
+453    453 450の発展形\r
+720    720 大きく投げる3カスケード\r
+753\r
+741\r
+744\r
+6424   右2個 左2個\r
+64     右3個 左2個\r
+66661\r
+61616\r
+5241   (5201) & (0040)\r
+72312  (70300) & (02012)\r
+7272712\r
+51414\r
+7161616\r
+88333\r
+75751\r
+\r
+%Center\r
+123456789\r
+\r
+/[ マルチ ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+[34]1\r
+4[43]1 4[43]1 441+1\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Martin\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  4,  0}\r
+{ 13,  0}{  4,  0}\r
+[62]25 Martin\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+[22]5[22]0[54]020      5マルチAの準備1\r
+[54]225[22]2   5マルチAの準備2\r
+[54][22]2      5マルチA\r
+555555522[54][22]2[54][22]2[54][22]2[52][52][52]       5カスケード→5マルチA その1\r
+555555522[54][22]2[54][22]2[54][22]2[54][52]   5カスケード→5マルチA その2\r
+[54]24522      5マルチBの準備1\r
+24[54] 5マルチB\r
+25[75]51\r
+[456][22]2     7-ball Splits A\r
+\r
+%Center\r
+([66x],2)(2,[66x])     7-ball Splits B\r
+\r
+%Normal\r
+26[76]\r
+[234]57\r
+[54]   9-ball Multiplex\r
+\r
+/[ シンクロ ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+(2,4x)(4x,2)   シンクロで表す3カスケード その1\r
+(0,6x)(6x,0)   シンクロで表す3カスケード その2\r
+(2x,6x)(6x,2x)\r
+(4x,2x)(2,4)\r
+(4x,6)(0,2x)\r
+(2,6x)(2x,6)(6x,2)(6,2x)\r
+(2,4)([44x],2x)\r
+(2,[62])([22],6x)([62],2)(6x,[22])\r
+(6,6)  6−シンクロ ファウンテン\r
+\r
+/[ ナンバーズ ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Shower\r
+91     5−シャワー\r
+b1     6−シャワー\r
+d1     7−シャワー ←IJA Champion\r
+\r
+%Normal\r
+6      6−ファウンテン\r
+7      7−カスケード\r
+8      8−ファウンテン\r
+9      9−カスケード ←IJA Champion\r
+\r
+/[ Are You God? ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+z      35−カスケード\r
+\r
+%Shower\r
+z1     18−シャワー\r
+[9bdfh][11111] 35−マルチ シャワー\r
+\r
+%Mills Mess\r
+333666999cccfffiiilll  12−ミルズメス\r
+\r
+%Normal\r
+[b9753]0020[22]0[222]0[2222]0\r
+\r
+%Center\r
+123456789abcdefghijklmnopqrstuvwxyz\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%9-ball Box\r
+{ 13,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{  3,  0}{ 13,  0}\r
+{ 13,  0}{  3,  0}\r
+{ 13,  0}{ 13,  0}\r
+u1q1m1i1e1a1612        9−ボックス\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+%Normal\r
+trpnljhfdb97531\r
+Ken\r
+[56789]        ペンタマルチ\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%20-Columns A\r
+{ 29,  3}{ 29,  3}\r
+{  2,  3}{  2,  3}\r
+{ 26,  3}{ 26,  3}\r
+{  5,  3}{  5,  3}\r
+{ 23,  3}{ 23,  3}\r
+{  8,  3}{  8,  3}\r
+{ 20,  3}{ 20,  3}\r
+{ 11,  3}{ 11,  3}\r
+{ 17,  3}{ 17,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 17,  3}{ 17,  3}\r
+{ 11,  3}{ 11,  3}\r
+{ 20,  3}{ 20,  3}\r
+{  8,  3}{  8,  3}\r
+{ 23,  3}{ 23,  3}\r
+{  5,  3}{  5,  3}\r
+{ 26,  3}{ 26,  3}\r
+{  2,  3}{  2,  3}\r
+{ 29,  3}{ 29,  3}\r
+(k,k)  20−コラムス A\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%20-Columns B\r
+{ 20,  3}{ 20,  3}\r
+{ 18,  3}{ 18,  3}\r
+{ 16,  3}{ 16,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 12,  3}{ 12,  3}\r
+{ 10,  3}{ 10,  3}\r
+{  8,  3}{  8,  3}\r
+{  6,  3}{  6,  3}\r
+{  4,  3}{  4,  3}\r
+{  2,  3}{  2,  3}\r
+{  2,  3}{  2,  3}\r
+{  4,  3}{  4,  3}\r
+{  6,  3}{  6,  3}\r
+{  8,  3}{  8,  3}\r
+{ 10,  3}{ 10,  3}\r
+{ 12,  3}{ 12,  3}\r
+{ 14,  3}{ 14,  3}\r
+{ 16,  3}{ 16,  3}\r
+{ 18,  3}{ 18,  3}\r
+{ 20,  3}{ 20,  3}\r
+k      20−コラムス B\r
+\r
+/[ Okada's Original ]\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%reverce box\r
+{10,7}{10,7}\r
+{-10,0}{-10,0}\r
+{-10,7}{-10,7}\r
+{10,0}{10,0}\r
+!1-Person\r
+(4,2)  上下逆のボックス\r
+\r
+/[ 2人のトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.2\r
+#SP=0.5        \r
+%Normal\r
+!2-Person RL\r
+(6,6)  2人のマルチカスケード\r
+60     2人で片手ずつでカスケード 1\r
+06     2人で片手ずつでカスケード 2\r
+6      2人で両手でカスケード\r
+(4x,a)(a,4x)   2人でシンクロ 1\r
+(a,4x)(4x,a)   2人でシンクロ 2\r
+\r
+%Carry2\r
+{  7,  0}{ -7,  0}\r
+{  7, 12}{ -7, 12}\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+!2-Person RL\r
+$1:%Carry\r
+$2:%Carry2\r
+(6,4x)(4x,6)   ダブルキャリーその1\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+!2-Person RL2\r
+{20, 0}\r
+{ 0, 0}\r
+$1:%Carry\r
+$2:%Carry2\r
+(4x,6)(6,4x)   ダブルキャリーその2\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+!2-Person RL\r
+$1:%Carry2\r
+$2:%Carry\r
+(4x,6)(6,4x)   ダブルキャリーその3\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+$1:%Carry\r
+$2:%Normal\r
+(4x,6)(6,4x)   キャリーとNormal\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+%Normal\r
+!2-Person LR\r
+(ax,6x)(6x,ax) 虹カスケード\r
+\r
+%Shuffle2\r
+{ 10,  0}{ 14,  0}\r
+{  0, -5}{ 12, 10}\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+$1:%Shuffle\r
+$2:%Carry\r
+(4x,6)(6,4x)   シャッフル&キャリー\r
+\r
+\r
+%Shuffle3\r
+{ 10,  0}{ 14,  0}\r
+{  0, 5}{ 12, 10}\r
+\r
+%Shuffle4\r
+{  0, 5}{ 12, 10}\r
+{ 10,  0}{ 14,  0}\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person LR\r
+$1:%Shuffle3\r
+$2:%Shuffle4\r
+(2x,8)(8,2x)   ダブルシャッフル 1\r
+(2x,6x)(6x,2x) ダブルシャッフル 2\r
+(2x,ax)(ax,2x) ダブルシャッフル 3\r
+\r
+%Normal-Reverse\r
+{ 13,  0}{  4,  0}\r
+{  4,  0}{ 13,  0}\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+$1:%Normal\r
+$2:%Normal-Reverse\r
+5      2人で5\r
+5559   2人で5559\r
+555d   2人で555d\r
+\r
+%2per-Carry-Up\r
+{10,10}{20,10}\r
+\r
+%2per-Carry-Up2\r
+{20,10}{10,10}\r
+\r
+!2-Person UpDown111\r
+{ 0,10}\r
+{ 0, 0}\r
+\r
+#DR=0.5\r
+#HR=0.03\r
+$2:%Normal\r
+$1:%2per-Carry-Up\r
+!2-Person UpDown111\r
+(6,6)  上下でキャリー 1\r
+6      上下でキャリー 2\r
+$1:%2per-Carry-Up2\r
+7566   上下でキャリー 3\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person LR\r
+$1:%Shuffle2\r
+$2:%Carry\r
+(2,a)(a,2)     シャッフル&キャリー2\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!2-Person RL\r
+%Normal\r
+555h   2人でハーフシャワー 1\r
+595d   2人でハーフシャワー 2\r
+888888888888888889ad595d595d595d595d595d595d56777888888888888888       2人のファウンテン -> ハーフシャワー\r
+\r
+/[ 3人のトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!3-Person RL\r
+91b9cc ファウンテン-シャワー-カスケード\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!3-Person LR\r
+9009cc ファウンテン-カスケード\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!3-Person LR\r
+%Normal-Reverse\r
+77777d 3人のハーフシャワー 1\r
+77777j 3人のハーフシャワー 2\r
+\r
+#DR=0.5\r
+#HR=0.1\r
+!3-Person LR\r
+$1:%Normal\r
+$3:%Normal-Reverse\r
+$2:%Reverse\r
+77d77j 3人のハーフシャワー 3\r
+\r
+/[ 4人のトリック ]\r
+\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!4-Person RL\r
+(c,c)  4人のマルチカスケード\r
+\r
+/[ 8 Persons Trick ]\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!8-Person 4*2\r
+siteawsp       8人で siteawsp\r
+\r
+/[ 10 Persons Trick ]\r
+#DR=0.5\r
+#HR=0.12\r
+%Normal\r
+!10-Person 244\r
+siteawsp       10人で siteawsp\r
+\r
+/----------------- end ------------------\r
diff --git a/workspace/JuggleMasterTest/.classpath b/workspace/JuggleMasterTest/.classpath
new file mode 100644 (file)
index 0000000..885dc3b
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="src" path="gen"/>
+       <classpathentry combineaccessrules="false" kind="src" path="/JuggleMaster"/>
+       <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+       <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+       <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+       <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/workspace/JuggleMasterTest/.project b/workspace/JuggleMasterTest/.project
new file mode 100644 (file)
index 0000000..920f9fe
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>JuggleMasterTest</name>
+       <comment></comment>
+       <projects>
+               <project>JuggleMaster</project>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/workspace/JuggleMasterTest/AndroidManifest.xml b/workspace/JuggleMasterTest/AndroidManifest.xml
new file mode 100644 (file)
index 0000000..cf4e7d4
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.jm.test"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="7" />
+
+    <instrumentation
+        android:name="android.test.InstrumentationTestRunner"
+        android:targetPackage="com.jm" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name" >
+        <uses-library android:name="android.test.runner" />
+    </application>
+</manifest>
\ No newline at end of file
diff --git a/workspace/JuggleMasterTest/hs_err_pid2529.log b/workspace/JuggleMasterTest/hs_err_pid2529.log
new file mode 100644 (file)
index 0000000..39a8156
--- /dev/null
@@ -0,0 +1,269 @@
+#
+# A fatal error has been detected by the Java Runtime Environment:
+#
+#  Internal Error (javaClasses.cpp:136), pid=2529, tid=6403
+#  fatal error: Invalid layout of preloaded class
+#
+# JRE version:  (7.0_40-b43) (build )
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.0-b56 mixed mode bsd-amd64 compressed oops)
+# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
+#
+# If you would like to submit a bug report, please visit:
+#   http://bugreport.sun.com/bugreport/crash.jsp
+#
+
+---------------  T H R E A D  ---------------
+
+Current thread (0x00007fc92d801800):  JavaThread "Unknown thread" [_thread_in_vm, id=6403, stack(0x000000011007a000,0x000000011017a000)]
+
+Stack: [0x000000011007a000,0x000000011017a000],  sp=0x0000000110179810,  free space=1022k
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
+V  [libjvm.dylib+0x5245f9]  VMError::report_and_die()+0x5d5
+V  [libjvm.dylib+0x1ebd3d]  report_vm_error(char const*, int, char const*, char const*)+0x54
+V  [libjvm.dylib+0x2d9095]  compute_offset(int&, klassOopDesc*, Symbol*, Symbol*, bool)+0xc2
+V  [libjvm.dylib+0x2d9c70]  java_lang_String::compute_offsets()+0x36
+V  [libjvm.dylib+0x4c3a22]  SystemDictionary::initialize_preloaded_classes(Thread*)+0x34
+V  [libjvm.dylib+0x500ea7]  Universe::genesis(Thread*)+0x46d
+V  [libjvm.dylib+0x50141b]  universe2_init()+0x1f
+V  [libjvm.dylib+0x29f338]  init_globals()+0x7c
+V  [libjvm.dylib+0x4f1426]  Threads::create_vm(JavaVMInitArgs*, bool*)+0x1be
+V  [libjvm.dylib+0x3093f9]  JNI_CreateJavaVM+0x62
+C  [java+0x2915]  JavaMain+0x134
+C  [libsystem_pthread.dylib+0x1899]  _pthread_body+0x8a
+C  [libsystem_pthread.dylib+0x172a]  _pthread_struct_init+0x0
+C  [libsystem_pthread.dylib+0x5fc9]  thread_start+0xd
+
+
+---------------  P R O C E S S  ---------------
+
+Java Threads: ( => current thread )
+
+Other Threads:
+
+=>0x00007fc92d801800 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=6403, stack(0x000000011007a000,0x000000011017a000)]
+
+VM state:not at safepoint (not fully initialized)
+
+VM Mutex/Monitor currently owned by a thread: None
+
+GC Heap History (0 events):
+No events
+
+Deoptimization events (0 events):
+No events
+
+Internal exceptions (0 events):
+No events
+
+Events (10 events):
+Event: 0.267 loading class 0x000000011a3446e0 done
+Event: 0.268 loading class 0x000000011a344100 done
+Event: 0.268 loading class 0x000000011a3440e0
+Event: 0.268 loading class 0x000000011a34c030
+Event: 0.268 loading class 0x000000011a34c030 done
+Event: 0.268 loading class 0x000000011a34c060
+Event: 0.268 loading class 0x000000011a34c060 done
+Event: 0.268 loading class 0x000000011a34c090
+Event: 0.268 loading class 0x000000011a34c090 done
+Event: 0.268 loading class 0x000000011a3440e0 done
+
+
+Dynamic libraries:
+0x0000000004d9f000     /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
+0x0000000004d9f000     /System/Library/Frameworks/Security.framework/Versions/A/Security
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
+0x0000000004d9f000     /usr/lib/libz.1.dylib
+0x0000000004d9f000     /usr/lib/libSystem.B.dylib
+0x0000000004d9f000     /usr/lib/libobjc.A.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
+0x0000000004d9f000     /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
+0x0000000004d9f000     /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
+0x0000000004d9f000     /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
+0x0000000004d9f000     /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
+0x0000000004d9f000     /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
+0x0000000004d9f000     /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
+0x0000000004d9f000     /usr/lib/libauto.dylib
+0x0000000004d9f000     /usr/lib/libicucore.A.dylib
+0x0000000004d9f000     /usr/lib/libxml2.2.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
+0x0000000004d9f000     /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
+0x0000000004d9f000     /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
+0x0000000004d9f000     /usr/lib/liblangid.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
+0x0000000004d9f000     /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
+0x0000000004d9f000     /usr/lib/libDiagnosticMessagesClient.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
+0x0000000004d9f000     /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
+0x0000000004d9f000     /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
+0x0000000004d9f000     /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
+0x0000000004d9f000     /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
+0x0000000004d9f000     /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
+0x0000000004d9f000     /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
+0x0000000004d9f000     /usr/lib/libCRFSuite.dylib
+0x0000000004d9f000     /usr/lib/libc++.1.dylib
+0x0000000004d9f000     /usr/lib/libc++abi.dylib
+0x0000000004d9f000     /usr/lib/system/libcache.dylib
+0x0000000004d9f000     /usr/lib/system/libcommonCrypto.dylib
+0x0000000004d9f000     /usr/lib/system/libcompiler_rt.dylib
+0x0000000004d9f000     /usr/lib/system/libcopyfile.dylib
+0x0000000004d9f000     /usr/lib/system/libcorecrypto.dylib
+0x0000000004d9f000     /usr/lib/system/libdispatch.dylib
+0x0000000004d9f000     /usr/lib/system/libdyld.dylib
+0x0000000004d9f000     /usr/lib/system/libkeymgr.dylib
+0x0000000004d9f000     /usr/lib/system/liblaunch.dylib
+0x0000000004d9f000     /usr/lib/system/libmacho.dylib
+0x0000000004d9f000     /usr/lib/system/libquarantine.dylib
+0x0000000004d9f000     /usr/lib/system/libremovefile.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_asl.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_blocks.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_c.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_configuration.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_dnssd.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_info.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_kernel.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_m.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_malloc.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_network.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_notify.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_platform.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_pthread.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_sandbox.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_stats.dylib
+0x0000000004d9f000     /usr/lib/system/libunc.dylib
+0x0000000004d9f000     /usr/lib/system/libunwind.dylib
+0x0000000004d9f000     /usr/lib/system/libxpc.dylib
+0x0000000004d9f000     /usr/lib/libbsm.0.dylib
+0x0000000004d9f000     /usr/lib/libsqlite3.dylib
+0x0000000004d9f000     /usr/lib/libxar.1.dylib
+0x0000000004d9f000     /usr/lib/libpam.2.dylib
+0x0000000004d9f000     /usr/lib/libOpenScriptingUtil.dylib
+0x0000000004d9f000     /usr/lib/libbz2.1.0.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
+0x0000000004d9f000     /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
+0x0000000004d9f000     /usr/lib/system/libkxld.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
+0x0000000004d9f000     /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
+0x0000000004d9f000     /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
+0x0000000004d9f000     /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
+0x0000000004d9f000     /usr/lib/libxslt.1.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
+0x0000000004d9f000     /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
+0x0000000004d9f000     /usr/lib/libcups.2.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
+0x0000000004d9f000     /System/Library/Frameworks/GSS.framework/Versions/A/GSS
+0x0000000004d9f000     /usr/lib/libresolv.9.dylib
+0x0000000004d9f000     /usr/lib/libiconv.2.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
+0x0000000004d9f000     /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
+0x0000000004d9f000     /usr/lib/libheimdal-asn1.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
+0x0000000004d9f000     /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
+0x0000000004d9f000     /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
+0x0000000004d9f000     /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
+0x0000000004d9f000     /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity
+0x0000000004d9f000     /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
+0x0000000004d9f000     /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
+0x000000005568f000     /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib
+0x0000000111200000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/server/libjvm.dylib
+0x0000000004d9f000     /usr/lib/libstdc++.6.dylib
+0x000000011017c000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libverify.dylib
+0x0000000110189000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libjava.dylib
+0x00000001101ba000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libjdwp.dylib
+0x00000001101f7000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libnpt.dylib
+0x0000000111c5a000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libzip.dylib
+
+VM Arguments:
+jvm_args: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:63960 -Dfile.encoding=UTF-8 -Xbootclasspath:/Users/yuji/prog/android-sdk-mac_x86/platforms/android-7/android.jar 
+java_command: org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 63959 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.jdt.junit.runtime -classNames com.jm.pattern.PatternAnalyzerTest
+Launcher Type: SUN_STANDARD
+
+Environment Variables:
+PATH=/usr/local/bin:/usr/local/opt/ruby/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
+SHELL=/bin/bash
+
+Signal Handlers:
+SIGSEGV: [libjvm.dylib+0x524b25], sa_mask[0]=0xfffefeff, sa_flags=0x00000043
+SIGBUS: [libjvm.dylib+0x524b25], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGFPE: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGPIPE: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGXFSZ: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGILL: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGUSR1: SIG_DFL, sa_mask[0]=0x63807efb, sa_flags=0x00000000
+SIGUSR2: [libjvm.dylib+0x417bd8], sa_mask[0]=0x00000004, sa_flags=0x00000042
+SIGHUP: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGINT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGTERM: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGQUIT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+
+
+---------------  S Y S T E M  ---------------
+
+OS:Bsduname:Darwin 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64
+rlimit: STACK 8192k, CORE 0k, NPROC 709, NOFILE 10240, AS infinity
+load average:1.66 1.60 1.52
+
+CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, ht, tsc, tscinvbit
+
+Memory: 4k page, physical 8388608k(2097152k free)
+
+/proc/meminfo:
+
+
+vm_info: Java HotSpot(TM) 64-Bit Server VM (24.0-b56) for bsd-amd64 JRE (1.7.0_40-b43), built on Aug 26 2013 21:29:19 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
+
+time: Sat Oct 26 11:53:17 2013
+elapsed time: 0 seconds
+
diff --git a/workspace/JuggleMasterTest/hs_err_pid2531.log b/workspace/JuggleMasterTest/hs_err_pid2531.log
new file mode 100644 (file)
index 0000000..c77675f
--- /dev/null
@@ -0,0 +1,269 @@
+#
+# A fatal error has been detected by the Java Runtime Environment:
+#
+#  Internal Error (javaClasses.cpp:136), pid=2531, tid=6403
+#  fatal error: Invalid layout of preloaded class
+#
+# JRE version:  (7.0_40-b43) (build )
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.0-b56 mixed mode bsd-amd64 compressed oops)
+# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
+#
+# If you would like to submit a bug report, please visit:
+#   http://bugreport.sun.com/bugreport/crash.jsp
+#
+
+---------------  T H R E A D  ---------------
+
+Current thread (0x00007fc1bd001000):  JavaThread "Unknown thread" [_thread_in_vm, id=6403, stack(0x0000000103489000,0x0000000103589000)]
+
+Stack: [0x0000000103489000,0x0000000103589000],  sp=0x0000000103588810,  free space=1022k
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
+V  [libjvm.dylib+0x5245f9]  VMError::report_and_die()+0x5d5
+V  [libjvm.dylib+0x1ebd3d]  report_vm_error(char const*, int, char const*, char const*)+0x54
+V  [libjvm.dylib+0x2d9095]  compute_offset(int&, klassOopDesc*, Symbol*, Symbol*, bool)+0xc2
+V  [libjvm.dylib+0x2d9c70]  java_lang_String::compute_offsets()+0x36
+V  [libjvm.dylib+0x4c3a22]  SystemDictionary::initialize_preloaded_classes(Thread*)+0x34
+V  [libjvm.dylib+0x500ea7]  Universe::genesis(Thread*)+0x46d
+V  [libjvm.dylib+0x50141b]  universe2_init()+0x1f
+V  [libjvm.dylib+0x29f338]  init_globals()+0x7c
+V  [libjvm.dylib+0x4f1426]  Threads::create_vm(JavaVMInitArgs*, bool*)+0x1be
+V  [libjvm.dylib+0x3093f9]  JNI_CreateJavaVM+0x62
+C  [java+0x2915]  JavaMain+0x134
+C  [libsystem_pthread.dylib+0x1899]  _pthread_body+0x8a
+C  [libsystem_pthread.dylib+0x172a]  _pthread_struct_init+0x0
+C  [libsystem_pthread.dylib+0x5fc9]  thread_start+0xd
+
+
+---------------  P R O C E S S  ---------------
+
+Java Threads: ( => current thread )
+
+Other Threads:
+
+=>0x00007fc1bd001000 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=6403, stack(0x0000000103489000,0x0000000103589000)]
+
+VM state:not at safepoint (not fully initialized)
+
+VM Mutex/Monitor currently owned by a thread: None
+
+GC Heap History (0 events):
+No events
+
+Deoptimization events (0 events):
+No events
+
+Internal exceptions (0 events):
+No events
+
+Events (10 events):
+Event: 0.043 loading class 0x000000010d7706e0 done
+Event: 0.044 loading class 0x000000010d770100 done
+Event: 0.044 loading class 0x000000010d7700e0
+Event: 0.044 loading class 0x000000010d778030
+Event: 0.044 loading class 0x000000010d778030 done
+Event: 0.044 loading class 0x000000010d778060
+Event: 0.044 loading class 0x000000010d778060 done
+Event: 0.044 loading class 0x000000010d778090
+Event: 0.044 loading class 0x000000010d778090 done
+Event: 0.044 loading class 0x000000010d7700e0 done
+
+
+Dynamic libraries:
+0x0000000004d9f000     /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
+0x0000000004d9f000     /System/Library/Frameworks/Security.framework/Versions/A/Security
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
+0x0000000004d9f000     /usr/lib/libz.1.dylib
+0x0000000004d9f000     /usr/lib/libSystem.B.dylib
+0x0000000004d9f000     /usr/lib/libobjc.A.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
+0x0000000004d9f000     /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
+0x0000000004d9f000     /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
+0x0000000004d9f000     /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
+0x0000000004d9f000     /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
+0x0000000004d9f000     /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
+0x0000000004d9f000     /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
+0x0000000004d9f000     /usr/lib/libauto.dylib
+0x0000000004d9f000     /usr/lib/libicucore.A.dylib
+0x0000000004d9f000     /usr/lib/libxml2.2.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
+0x0000000004d9f000     /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
+0x0000000004d9f000     /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
+0x0000000004d9f000     /usr/lib/liblangid.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
+0x0000000004d9f000     /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
+0x0000000004d9f000     /usr/lib/libDiagnosticMessagesClient.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
+0x0000000004d9f000     /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
+0x0000000004d9f000     /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
+0x0000000004d9f000     /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
+0x0000000004d9f000     /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
+0x0000000004d9f000     /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
+0x0000000004d9f000     /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
+0x0000000004d9f000     /usr/lib/libCRFSuite.dylib
+0x0000000004d9f000     /usr/lib/libc++.1.dylib
+0x0000000004d9f000     /usr/lib/libc++abi.dylib
+0x0000000004d9f000     /usr/lib/system/libcache.dylib
+0x0000000004d9f000     /usr/lib/system/libcommonCrypto.dylib
+0x0000000004d9f000     /usr/lib/system/libcompiler_rt.dylib
+0x0000000004d9f000     /usr/lib/system/libcopyfile.dylib
+0x0000000004d9f000     /usr/lib/system/libcorecrypto.dylib
+0x0000000004d9f000     /usr/lib/system/libdispatch.dylib
+0x0000000004d9f000     /usr/lib/system/libdyld.dylib
+0x0000000004d9f000     /usr/lib/system/libkeymgr.dylib
+0x0000000004d9f000     /usr/lib/system/liblaunch.dylib
+0x0000000004d9f000     /usr/lib/system/libmacho.dylib
+0x0000000004d9f000     /usr/lib/system/libquarantine.dylib
+0x0000000004d9f000     /usr/lib/system/libremovefile.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_asl.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_blocks.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_c.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_configuration.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_dnssd.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_info.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_kernel.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_m.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_malloc.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_network.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_notify.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_platform.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_pthread.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_sandbox.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_stats.dylib
+0x0000000004d9f000     /usr/lib/system/libunc.dylib
+0x0000000004d9f000     /usr/lib/system/libunwind.dylib
+0x0000000004d9f000     /usr/lib/system/libxpc.dylib
+0x0000000004d9f000     /usr/lib/libbsm.0.dylib
+0x0000000004d9f000     /usr/lib/libsqlite3.dylib
+0x0000000004d9f000     /usr/lib/libxar.1.dylib
+0x0000000004d9f000     /usr/lib/libpam.2.dylib
+0x0000000004d9f000     /usr/lib/libOpenScriptingUtil.dylib
+0x0000000004d9f000     /usr/lib/libbz2.1.0.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
+0x0000000004d9f000     /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
+0x0000000004d9f000     /usr/lib/system/libkxld.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
+0x0000000004d9f000     /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
+0x0000000004d9f000     /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
+0x0000000004d9f000     /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
+0x0000000004d9f000     /usr/lib/libxslt.1.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
+0x0000000004d9f000     /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
+0x0000000004d9f000     /usr/lib/libcups.2.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
+0x0000000004d9f000     /System/Library/Frameworks/GSS.framework/Versions/A/GSS
+0x0000000004d9f000     /usr/lib/libresolv.9.dylib
+0x0000000004d9f000     /usr/lib/libiconv.2.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
+0x0000000004d9f000     /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
+0x0000000004d9f000     /usr/lib/libheimdal-asn1.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
+0x0000000004d9f000     /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
+0x0000000004d9f000     /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
+0x0000000004d9f000     /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
+0x0000000004d9f000     /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity
+0x0000000004d9f000     /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
+0x0000000004d9f000     /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
+0x0000000048a9e000     /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib
+0x0000000104600000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/server/libjvm.dylib
+0x0000000004d9f000     /usr/lib/libstdc++.6.dylib
+0x000000010358b000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libverify.dylib
+0x0000000103598000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libjava.dylib
+0x0000000105052000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libjdwp.dylib
+0x00000001035c9000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libnpt.dylib
+0x00000001035d6000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libzip.dylib
+
+VM Arguments:
+jvm_args: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:63965 -Dfile.encoding=UTF-8 -Xbootclasspath:/Users/yuji/prog/android-sdk-mac_x86/platforms/android-7/android.jar 
+java_command: org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 63964 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.jdt.junit.runtime -classNames com.jm.pattern.PatternAnalyzerTest
+Launcher Type: SUN_STANDARD
+
+Environment Variables:
+PATH=/usr/local/bin:/usr/local/opt/ruby/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
+SHELL=/bin/bash
+
+Signal Handlers:
+SIGSEGV: [libjvm.dylib+0x524b25], sa_mask[0]=0xfffefeff, sa_flags=0x00000043
+SIGBUS: [libjvm.dylib+0x524b25], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGFPE: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGPIPE: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGXFSZ: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGILL: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGUSR1: SIG_DFL, sa_mask[0]=0x63807efb, sa_flags=0x00000000
+SIGUSR2: [libjvm.dylib+0x417bd8], sa_mask[0]=0x00000004, sa_flags=0x00000042
+SIGHUP: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGINT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGTERM: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGQUIT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+
+
+---------------  S Y S T E M  ---------------
+
+OS:Bsduname:Darwin 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64
+rlimit: STACK 8192k, CORE 0k, NPROC 709, NOFILE 10240, AS infinity
+load average:1.44 1.56 1.51
+
+CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, ht, tsc, tscinvbit
+
+Memory: 4k page, physical 8388608k(2097152k free)
+
+/proc/meminfo:
+
+
+vm_info: Java HotSpot(TM) 64-Bit Server VM (24.0-b56) for bsd-amd64 JRE (1.7.0_40-b43), built on Aug 26 2013 21:29:19 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
+
+time: Sat Oct 26 11:53:50 2013
+elapsed time: 0 seconds
+
diff --git a/workspace/JuggleMasterTest/hs_err_pid2536.log b/workspace/JuggleMasterTest/hs_err_pid2536.log
new file mode 100644 (file)
index 0000000..e2b7138
--- /dev/null
@@ -0,0 +1,269 @@
+#
+# A fatal error has been detected by the Java Runtime Environment:
+#
+#  Internal Error (javaClasses.cpp:136), pid=2536, tid=6403
+#  fatal error: Invalid layout of preloaded class
+#
+# JRE version:  (7.0_40-b43) (build )
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.0-b56 mixed mode bsd-amd64 compressed oops)
+# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
+#
+# If you would like to submit a bug report, please visit:
+#   http://bugreport.sun.com/bugreport/crash.jsp
+#
+
+---------------  T H R E A D  ---------------
+
+Current thread (0x00007fad92009000):  JavaThread "Unknown thread" [_thread_in_vm, id=6403, stack(0x000000010be1b000,0x000000010bf1b000)]
+
+Stack: [0x000000010be1b000,0x000000010bf1b000],  sp=0x000000010bf1a810,  free space=1022k
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
+V  [libjvm.dylib+0x5245f9]  VMError::report_and_die()+0x5d5
+V  [libjvm.dylib+0x1ebd3d]  report_vm_error(char const*, int, char const*, char const*)+0x54
+V  [libjvm.dylib+0x2d9095]  compute_offset(int&, klassOopDesc*, Symbol*, Symbol*, bool)+0xc2
+V  [libjvm.dylib+0x2d9c70]  java_lang_String::compute_offsets()+0x36
+V  [libjvm.dylib+0x4c3a22]  SystemDictionary::initialize_preloaded_classes(Thread*)+0x34
+V  [libjvm.dylib+0x500ea7]  Universe::genesis(Thread*)+0x46d
+V  [libjvm.dylib+0x50141b]  universe2_init()+0x1f
+V  [libjvm.dylib+0x29f338]  init_globals()+0x7c
+V  [libjvm.dylib+0x4f1426]  Threads::create_vm(JavaVMInitArgs*, bool*)+0x1be
+V  [libjvm.dylib+0x3093f9]  JNI_CreateJavaVM+0x62
+C  [java+0x2915]  JavaMain+0x134
+C  [libsystem_pthread.dylib+0x1899]  _pthread_body+0x8a
+C  [libsystem_pthread.dylib+0x172a]  _pthread_struct_init+0x0
+C  [libsystem_pthread.dylib+0x5fc9]  thread_start+0xd
+
+
+---------------  P R O C E S S  ---------------
+
+Java Threads: ( => current thread )
+
+Other Threads:
+
+=>0x00007fad92009000 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=6403, stack(0x000000010be1b000,0x000000010bf1b000)]
+
+VM state:not at safepoint (not fully initialized)
+
+VM Mutex/Monitor currently owned by a thread: None
+
+GC Heap History (0 events):
+No events
+
+Deoptimization events (0 events):
+No events
+
+Internal exceptions (0 events):
+No events
+
+Events (10 events):
+Event: 0.082 loading class 0x00000001160e26e0 done
+Event: 0.083 loading class 0x00000001160e2100 done
+Event: 0.083 loading class 0x00000001160e20e0
+Event: 0.083 loading class 0x00000001160ea030
+Event: 0.083 loading class 0x00000001160ea030 done
+Event: 0.083 loading class 0x00000001160ea060
+Event: 0.083 loading class 0x00000001160ea060 done
+Event: 0.083 loading class 0x00000001160ea090
+Event: 0.083 loading class 0x00000001160ea090 done
+Event: 0.083 loading class 0x00000001160e20e0 done
+
+
+Dynamic libraries:
+0x0000000004d9f000     /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
+0x0000000004d9f000     /System/Library/Frameworks/Security.framework/Versions/A/Security
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
+0x0000000004d9f000     /usr/lib/libz.1.dylib
+0x0000000004d9f000     /usr/lib/libSystem.B.dylib
+0x0000000004d9f000     /usr/lib/libobjc.A.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
+0x0000000004d9f000     /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
+0x0000000004d9f000     /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
+0x0000000004d9f000     /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
+0x0000000004d9f000     /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
+0x0000000004d9f000     /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
+0x0000000004d9f000     /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
+0x0000000004d9f000     /usr/lib/libauto.dylib
+0x0000000004d9f000     /usr/lib/libicucore.A.dylib
+0x0000000004d9f000     /usr/lib/libxml2.2.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
+0x0000000004d9f000     /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
+0x0000000004d9f000     /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
+0x0000000004d9f000     /usr/lib/liblangid.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
+0x0000000004d9f000     /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
+0x0000000004d9f000     /usr/lib/libDiagnosticMessagesClient.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
+0x0000000004d9f000     /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
+0x0000000004d9f000     /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
+0x0000000004d9f000     /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
+0x0000000004d9f000     /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
+0x0000000004d9f000     /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
+0x0000000004d9f000     /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
+0x0000000004d9f000     /usr/lib/libCRFSuite.dylib
+0x0000000004d9f000     /usr/lib/libc++.1.dylib
+0x0000000004d9f000     /usr/lib/libc++abi.dylib
+0x0000000004d9f000     /usr/lib/system/libcache.dylib
+0x0000000004d9f000     /usr/lib/system/libcommonCrypto.dylib
+0x0000000004d9f000     /usr/lib/system/libcompiler_rt.dylib
+0x0000000004d9f000     /usr/lib/system/libcopyfile.dylib
+0x0000000004d9f000     /usr/lib/system/libcorecrypto.dylib
+0x0000000004d9f000     /usr/lib/system/libdispatch.dylib
+0x0000000004d9f000     /usr/lib/system/libdyld.dylib
+0x0000000004d9f000     /usr/lib/system/libkeymgr.dylib
+0x0000000004d9f000     /usr/lib/system/liblaunch.dylib
+0x0000000004d9f000     /usr/lib/system/libmacho.dylib
+0x0000000004d9f000     /usr/lib/system/libquarantine.dylib
+0x0000000004d9f000     /usr/lib/system/libremovefile.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_asl.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_blocks.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_c.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_configuration.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_dnssd.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_info.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_kernel.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_m.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_malloc.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_network.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_notify.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_platform.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_pthread.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_sandbox.dylib
+0x0000000004d9f000     /usr/lib/system/libsystem_stats.dylib
+0x0000000004d9f000     /usr/lib/system/libunc.dylib
+0x0000000004d9f000     /usr/lib/system/libunwind.dylib
+0x0000000004d9f000     /usr/lib/system/libxpc.dylib
+0x0000000004d9f000     /usr/lib/libbsm.0.dylib
+0x0000000004d9f000     /usr/lib/libsqlite3.dylib
+0x0000000004d9f000     /usr/lib/libxar.1.dylib
+0x0000000004d9f000     /usr/lib/libpam.2.dylib
+0x0000000004d9f000     /usr/lib/libOpenScriptingUtil.dylib
+0x0000000004d9f000     /usr/lib/libbz2.1.0.dylib
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
+0x0000000004d9f000     /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
+0x0000000004d9f000     /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
+0x0000000004d9f000     /usr/lib/system/libkxld.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
+0x0000000004d9f000     /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
+0x0000000004d9f000     /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
+0x0000000004d9f000     /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
+0x0000000004d9f000     /usr/lib/libxslt.1.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
+0x0000000004d9f000     /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
+0x0000000004d9f000     /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
+0x0000000004d9f000     /usr/lib/libcups.2.dylib
+0x0000000004d9f000     /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
+0x0000000004d9f000     /System/Library/Frameworks/GSS.framework/Versions/A/GSS
+0x0000000004d9f000     /usr/lib/libresolv.9.dylib
+0x0000000004d9f000     /usr/lib/libiconv.2.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
+0x0000000004d9f000     /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
+0x0000000004d9f000     /usr/lib/libheimdal-asn1.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
+0x0000000004d9f000     /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
+0x0000000004d9f000     /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
+0x0000000004d9f000     /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
+0x0000000004d9f000     /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
+0x0000000004d9f000     /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
+0x0000000004d9f000     /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
+0x0000000004d9f000     /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity
+0x0000000004d9f000     /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
+0x0000000004d9f000     /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
+0x0000000004d9f000     /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
+0x0000000004d9f000     /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
+0x0000000004d9f000     /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
+0x0000000051430000     /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib
+0x000000010d000000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/server/libjvm.dylib
+0x0000000004d9f000     /usr/lib/libstdc++.6.dylib
+0x000000010bf1d000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libverify.dylib
+0x000000010bf2a000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libjava.dylib
+0x000000010bf5b000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libjdwp.dylib
+0x000000010bf98000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libnpt.dylib
+0x000000010bfa5000     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libzip.dylib
+
+VM Arguments:
+jvm_args: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:64177 -Dfile.encoding=UTF-8 -Xbootclasspath:/Users/yuji/prog/android-sdk-mac_x86/platforms/android-7/android.jar 
+java_command: org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 64176 -testLoaderClass org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader -loaderpluginname org.eclipse.jdt.junit.runtime -classNames com.jm.pattern.PatternAnalyzerTest
+Launcher Type: SUN_STANDARD
+
+Environment Variables:
+PATH=/usr/local/bin:/usr/local/opt/ruby/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
+SHELL=/bin/bash
+
+Signal Handlers:
+SIGSEGV: [libjvm.dylib+0x524b25], sa_mask[0]=0xfffefeff, sa_flags=0x00000043
+SIGBUS: [libjvm.dylib+0x524b25], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGFPE: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGPIPE: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGXFSZ: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGILL: [libjvm.dylib+0x4180e6], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGUSR1: SIG_DFL, sa_mask[0]=0x63807efb, sa_flags=0x00000000
+SIGUSR2: [libjvm.dylib+0x417bd8], sa_mask[0]=0x00000004, sa_flags=0x00000042
+SIGHUP: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGINT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGTERM: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGQUIT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+
+
+---------------  S Y S T E M  ---------------
+
+OS:Bsduname:Darwin 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64
+rlimit: STACK 8192k, CORE 0k, NPROC 709, NOFILE 10240, AS infinity
+load average:3.21 1.98 1.67
+
+CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, ht, tsc, tscinvbit
+
+Memory: 4k page, physical 8388608k(2097152k free)
+
+/proc/meminfo:
+
+
+vm_info: Java HotSpot(TM) 64-Bit Server VM (24.0-b56) for bsd-amd64 JRE (1.7.0_40-b43), built on Aug 26 2013 21:29:19 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
+
+time: Sat Oct 26 11:57:14 2013
+elapsed time: 0 seconds
+
diff --git a/workspace/JuggleMasterTest/lint.xml b/workspace/JuggleMasterTest/lint.xml
new file mode 100644 (file)
index 0000000..ee0eead
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lint>
+</lint>
\ No newline at end of file
diff --git a/workspace/JuggleMasterTest/proguard-project.txt b/workspace/JuggleMasterTest/proguard-project.txt
new file mode 100644 (file)
index 0000000..f2fe155
--- /dev/null
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
diff --git a/workspace/JuggleMasterTest/project.properties b/workspace/JuggleMasterTest/project.properties
new file mode 100644 (file)
index 0000000..22d0dca
--- /dev/null
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-7
diff --git a/workspace/JuggleMasterTest/res/drawable-hdpi/ic_launcher.png b/workspace/JuggleMasterTest/res/drawable-hdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..96a442e
Binary files /dev/null and b/workspace/JuggleMasterTest/res/drawable-hdpi/ic_launcher.png differ
diff --git a/workspace/JuggleMasterTest/res/drawable-ldpi/ic_launcher.png b/workspace/JuggleMasterTest/res/drawable-ldpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..9923872
Binary files /dev/null and b/workspace/JuggleMasterTest/res/drawable-ldpi/ic_launcher.png differ
diff --git a/workspace/JuggleMasterTest/res/drawable-mdpi/ic_launcher.png b/workspace/JuggleMasterTest/res/drawable-mdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..359047d
Binary files /dev/null and b/workspace/JuggleMasterTest/res/drawable-mdpi/ic_launcher.png differ
diff --git a/workspace/JuggleMasterTest/res/drawable-xhdpi/ic_launcher.png b/workspace/JuggleMasterTest/res/drawable-xhdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..71c6d76
Binary files /dev/null and b/workspace/JuggleMasterTest/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/workspace/JuggleMasterTest/res/values/strings.xml b/workspace/JuggleMasterTest/res/values/strings.xml
new file mode 100644 (file)
index 0000000..73599d9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">JuggleMasterTestTest</string>
+
+</resources>
diff --git a/workspace/JuggleMasterTest/src/com/jm/JmPatternTest.java b/workspace/JuggleMasterTest/src/com/jm/JmPatternTest.java
new file mode 100644 (file)
index 0000000..dd320d4
--- /dev/null
@@ -0,0 +1,10 @@
+package com.jm;
+
+import junit.framework.TestCase;
+
+public class JmPatternTest extends TestCase {
+       public void testJmPatternIntIntStringStringIntIntByteArrayArray() {
+               JmPattern jp = new JmPattern(1, 2, "name", "siteswap", 3, 4, null);
+               assertEquals("name", jp.toString());
+       }
+}
diff --git a/workspace/JuggleMasterTest/src/com/jm/db/DaoTest.java b/workspace/JuggleMasterTest/src/com/jm/db/DaoTest.java
new file mode 100644 (file)
index 0000000..2f9c51c
--- /dev/null
@@ -0,0 +1,59 @@
+package com.jm.db;
+
+import java.util.List;
+
+import android.database.sqlite.SQLiteDatabase;
+import android.test.AndroidTestCase;
+import android.test.RenamingDelegatingContext;
+
+import com.jm.utility.JmException;
+
+public class DaoTest extends AndroidTestCase {
+
+       private DatabaseHelper helper;
+
+       public void setUp() throws JmException {
+               DatabaseHelper
+                               .init(new RenamingDelegatingContext(getContext(), "test_"));
+               helper = DatabaseHelper.getInstance();
+
+               SQLiteDatabase db = helper.getWritableDatabase();
+               db.execSQL("delete from pattern_file");
+       }
+
+       public void tearDown() {
+               helper.close();
+       }
+
+       public void testGetPatternFile() throws JmException {
+               Dao dao = Dao.getInstance();
+               List<PatternFile> list = dao.getPatternFile();
+               int size = list.size();
+
+               assertEquals(0, size);
+       }
+
+       public void testAddPatternFile() throws JmException {
+               String name = "foo";
+               byte[] blob = { 1, 2, 3, 4, 5 };
+
+               Dao dao = Dao.getInstance();
+               long id = dao.addPatternFile(name, blob, false);
+
+               List<PatternFile> list = dao.getPatternFile();
+               int size = list.size();
+               assertEquals(1, size);
+
+               PatternFile p = dao.getPatternFile(id);
+               assertEquals("foo", p.getName());
+               assertArrayEquals(blob, p.getValue());
+       }
+
+       private void assertArrayEquals(byte[] a, byte[] b) {
+               assertEquals(a.length, b.length);
+
+               for (int i = 0; i < a.length; i++) {
+                       assertEquals(a[i], b[i]);
+               }
+       }
+}
diff --git a/workspace/JuggleMasterTest/src/com/jm/db/JmOpenHelper.java b/workspace/JuggleMasterTest/src/com/jm/db/JmOpenHelper.java
new file mode 100644 (file)
index 0000000..3c293b4
--- /dev/null
@@ -0,0 +1,35 @@
+package com.jm.db;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+public class JmOpenHelper extends SQLiteOpenHelper {
+       private static final String DB_NAME = "jm";
+
+       private static final int LATEST_VERSION = 1;
+
+       private Context context;
+
+       public JmOpenHelper(Context context) {
+               this(context, LATEST_VERSION);
+               this.context = context;
+       }
+
+       public JmOpenHelper(Context context, int version) {
+               super(context, DB_NAME, null, version);
+               this.context = context;
+       }
+
+       @Override
+       public void onCreate(SQLiteDatabase db) {
+               Dao dao = Dao.getInstance();
+               dao.init(db, context);
+       }
+
+       @Override
+       public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+               onCreate(db);
+       }
+
+}
diff --git a/workspace/JuggleMasterTest/src/com/jm/pattern/LineAnalyzerTest.java b/workspace/JuggleMasterTest/src/com/jm/pattern/LineAnalyzerTest.java
new file mode 100644 (file)
index 0000000..276acb8
--- /dev/null
@@ -0,0 +1,118 @@
+package com.jm.pattern;
+
+import java.util.regex.Matcher;
+
+import junit.framework.TestCase;
+
+public class LineAnalyzerTest extends TestCase {
+       public void testAnalyze_001() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze(";abcdefg");
+
+               assertEquals(LineAnalyzer.Type.COMMENT, t);
+       }
+
+       public void testAnalyze_011() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("#AB=1");
+
+               assertEquals(LineAnalyzer.Type.PARAMETER, t);
+               assertEquals(1.0, a.getValue1(), 0);
+       }
+
+       public void testAnalyze_012() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("#AB=1.23");
+
+               assertEquals(LineAnalyzer.Type.PARAMETER, t);
+               assertEquals(1.23, a.getValue1(), 0);
+       }
+
+       public void testAnalyze_021() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("/[ abcdefg ]");
+
+               assertEquals(LineAnalyzer.Type.SEPARATOR, t);
+               assertEquals("abcdefg", a.getSeparator());
+       }
+
+       public void testAnalyze_022() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("/abcdefg");
+
+               assertEquals(LineAnalyzer.Type.SEPARATOR, t);
+               assertEquals("abcdefg", a.getSeparator());
+       }
+
+       public void testAnalyze_031() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("%abcdefg   ");
+
+               assertEquals(LineAnalyzer.Type.STYLE, t);
+               assertEquals("abcdefg", a.getStyle());
+       }
+
+       public void testAnalyze_041() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("!abcdefg");
+
+               assertEquals(LineAnalyzer.Type.FORMATION, t);
+       }
+
+       public void testAnalyze_051() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("$abcdefg");
+
+               assertEquals(LineAnalyzer.Type.PERSON, t);
+       }
+
+       public void testAnalyze_061() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("{123,45}{ 6 , 7 }");
+
+               assertEquals(LineAnalyzer.Type.MOTION, t);
+
+               // Matcher m = a.getMatcher();
+               // assertEquals("123", m.group(1));
+               // assertEquals("45", m.group(2));
+               // assertEquals("6", m.group(3));
+               // assertEquals("7", m.group(4));
+               assertEquals(123.0, a.getValue1(), 0);
+               assertEquals(45.0, a.getValue2(), 0);
+               assertEquals(6.0, a.getValue3(), 0);
+               assertEquals(7.0, a.getValue4(), 0);
+       }
+
+       public void testAnalyze_062() {
+               LineAnalyzer a = new LineAnalyzer();
+               LineAnalyzer.Type t;
+
+               t = a.analyze("{-123,-45}{ -6 , -7 }");
+
+               assertEquals(LineAnalyzer.Type.MOTION, t);
+
+               Matcher m = a.getMatcher();
+               assertEquals("-123", m.group(1));
+               assertEquals("-45", m.group(2));
+               assertEquals("-6", m.group(3));
+               assertEquals("-7", m.group(4));
+       }
+}
diff --git a/workspace/JuggleMasterTest/src/com/jm/pattern/PatternAnalyzerTest.java b/workspace/JuggleMasterTest/src/com/jm/pattern/PatternAnalyzerTest.java
new file mode 100644 (file)
index 0000000..588a720
--- /dev/null
@@ -0,0 +1,27 @@
+package com.jm.pattern;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import com.jm.JmPattern;
+//import org.junit.Test;
+import com.jm.utility.Debug;
+
+public class PatternAnalyzerTest extends TestCase {
+       public void test() throws IOException {
+               String filename = "pattern.jm";
+               InputStream is = getClass().getClassLoader().getResourceAsStream(filename);
+               
+               PatternAnalyzer pa = new PatternAnalyzer();
+               pa.analyzer(is);
+
+               Debug.d(this, "=================================================");
+               List<JmPattern> pattern = pa.pattern;
+               for (JmPattern p : pattern) {
+                       Debug.d(this, p.getType() + "\t" + p.toString());
+               }
+       }
+}