From 4308c9d432a2e0a1acc23020c0450ec519fdad6f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 19 Feb 2026 18:13:54 +0000
Subject: [PATCH 1/3] Initial plan
From 830c5ccbb9d91ad3e69d14398c4e69c3f48c6930 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 19 Feb 2026 18:18:11 +0000
Subject: [PATCH 2/3] Remove deprecated Java applet code
(AppletInteractionController comments and BeanTree files)
Co-authored-by: rvosa <106490+rvosa@users.noreply.github.com>
---
.../lib/docs/mesquite/BeanTree/BeanTree.html | 1 -
.../lib/docs/mesquite/BeanTree/BeanTree.java | 1 -
.../mesquite/BeanTree/BeanTree/BeanTree.class | Bin 1759 -> 0 bytes
.../BeanTree/BeanTree/BeanTreeControls.class | Bin 1456 -> 0 bytes
.../docs/mesquite/BeanTree/BeanTree/Branch.class | Bin 928 -> 0 bytes
.../mesquite/BeanTree/BeanTree/TreeCanvas.class | Bin 6044 -> 0 bytes
.../mesquite/BeanTree/BeanTree/TreeClass.class | Bin 2374 -> 0 bytes
.../BeanTree/com/metrowerks/AppletFrame.class | Bin 1680 -> 0 bytes
.../src/main/webapp/WEB-INF/treebase-servlet.xml | 8 +-------
9 files changed, 1 insertion(+), 9 deletions(-)
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTree.class
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTreeControls.class
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/Branch.class
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/TreeCanvas.class
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/TreeClass.class
delete mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/com/metrowerks/AppletFrame.class
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html
deleted file mode 100755
index ad060a139..000000000
--- a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html
+++ /dev/null
@@ -1 +0,0 @@
-
BeanTree
BeanTree
It all started yesterday because I thought that perhaps I should try out some object oriented programming in case I wanted to teach an object oriented language to the students in my class next spring....
Much faster as stand alone application.
Taxon names must be one character only (actually, they can all be the same character).
\ No newline at end of file
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java
deleted file mode 100755
index 106f0adbe..000000000
--- a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java
+++ /dev/null
@@ -1 +0,0 @@
-//package wpm;
import java.awt.*;
import java.applet.Applet;
public class BeanTree extends Applet
{
static TreeCanvas TreeDisplay;
static BeanTreeControls controls;
public void init()
{
setLayout( new BorderLayout() );
resize(300, 300);
TreeDisplay = new TreeCanvas(10, 10, 400, 400);
add( "Center", TreeDisplay );
add("North", controls = new BeanTreeControls(TreeDisplay));
TreeDisplay.Tree = new TreeClass();
TreeDisplay.controls = controls;
TreeDisplay.Tree.SubRoot = new Branch(null, false);
TreeDisplay.Tree.Root = new Branch(TreeDisplay.Tree.SubRoot, false);
TreeDisplay.edgewidth = 10;
TreeDisplay.needsUpdating = false;
TreeDisplay.highlightedBranch = null;
TreeDisplay.Tree.exists = false;
repaint();
}
public void start() {
controls.enable();
}
public void stop() {
controls.disable();
}
public static void main(String args[])
{
com.metrowerks.AppletFrame.startApplet("BeanTree", "BeanTree", args);
}
}
/** ======================================================================== */
class TreeCanvas extends Canvas {
TreeClass Tree;
int x_max, y_max;
int edgewidth;
Branch highlightedBranch, branchFrom;
int xFrom, yFrom, xTo, yTo;
boolean needsUpdating;
String treeDescription;
BeanTreeControls controls;
private int lastleft;
private int taxspacing;
private Branch foundBranch;
public TreeCanvas( int x_max, int y_max, int x_size, int y_size )
{
this.x_max = x_max;
this.y_max = y_max;
resize( x_size, y_size );
repaint();
}
/*_________________________________________________*/
private void WriteTreeDescription(Branch N) {
if (N.left!=null)
{
treeDescription+='(';
WriteTreeDescription(N.left);
treeDescription+=',';
WriteTreeDescription(N.right);
treeDescription+=')';
}
else
{
treeDescription+='*';
}
}
public String Describe() {
treeDescription="";
WriteTreeDescription(Tree.Root);
treeDescription+=';';
return treeDescription;
}
/*_________________________________________________*/
private void CalcInternalLocs(Branch N)
{
if (N.left != null) //internal
{
CalcInternalLocs(N.left);
CalcInternalLocs(N.right);
N.y = (-N.left.x + N.right.x+N.left.y + N.right.y) / 2;
N.x =(N.left.x + N.right.x - N.left.y + N.right.y) / 2;
}
}
/*_________________________________________________*/
private void CalcTerminalLocs(Branch N)
{
if (N.left == null) //terminal
{
lastleft+= taxspacing;
N.y = 90;
N.x = lastleft;
}
else
{
CalcTerminalLocs(N.left);
CalcTerminalLocs(N.right);
}
}
/*_________________________________________________*/
private void CalcBranchPolys(Branch N)
{
if (N.left != null) //terminal
{
CalcBranchPolys(N.left);
CalcBranchPolys(N.right);
N.branchPoly.npoints=0;
N.branchPoly.addPoint(N.x, N.y);
N.branchPoly.addPoint(N.x+edgewidth/2, N.y-edgewidth/2);
N.branchPoly.addPoint(N.x+edgewidth, N.y);
N.branchPoly.addPoint(N.ancestor.x+edgewidth, N.ancestor.y);
N.branchPoly.addPoint(N.ancestor.x, N.ancestor.y);
N.branchPoly.npoints=5;
}
else
{
N.branchPoly.npoints=0;
N.branchPoly.addPoint(N.x, N.y);
N.branchPoly.addPoint(N.x+edgewidth, N.y);
N.branchPoly.addPoint(N.ancestor.x+edgewidth, N.ancestor.y);
N.branchPoly.addPoint(N.ancestor.x, N.ancestor.y);
N.branchPoly.npoints=4;
}
}
/*_________________________________________________*/
private void calcBranches() {
lastleft = 0;
taxspacing = (bounds().width - 10) / Tree.numTaxa;
CalcTerminalLocs(Tree.Root);
CalcInternalLocs(Tree.Root);
Tree.SubRoot.y = (Tree.Root.y)+20;
Tree.SubRoot.x = (Tree.Root.x)-20;
CalcBranchPolys(Tree.Root);
}
/*_________________________________________________*/
private void drawBranch(Graphics g, Branch N) {
g.setColor(N.color);
g.fillPolygon(N.branchPoly);
if (N.left != null)
drawBranch(g, N.left);
if (N.right != null)
drawBranch(g, N.right);
}
/*_________________________________________________*/
public void drawTree(Graphics g) {
if (Tree.exists)
{
calcBranches();
drawBranch(g, Tree.Root);
}
}
/*_________________________________________________*/
public void paint(Graphics g) {
drawTree(g);
needsUpdating = false;
}
/*_________________________________________________*/
public void InvertBranch(Graphics g, Branch N) {
// N.color=Color.white;
highlightedBranch=N;
g.setColor(Color.white);
g.fillPolygon(N.branchPoly);
// needsUpdating=true;
}
/*_________________________________________________*/
public void RevertBranch(Graphics g, Branch N) {
// N.color=Color.black;
highlightedBranch=null;
g.setColor(Color.black);
g.fillPolygon(N.branchPoly);
// needsUpdating=true;
}
/*_________________________________________________*/
private void ScanBranches(Branch N, int x, int y)
{
if (foundBranch==null) {
if (N.branchPoly.inside(x, y))
foundBranch = N;
if (N.left != null) //terminal
{
ScanBranches(N.left, x, y);
ScanBranches(N.right, x, y);
}
}
}
/*_________________________________________________*/
public Branch FindBranch(int x, int y) {
foundBranch=null;
ScanBranches(Tree.Root, x, y);
return foundBranch;
}
/*_________________________________________________*/
public void ScanTouch(Graphics g, int x, int y) {
Branch branchFound=FindBranch( x, y);
if (branchFound!=null)
{
branchFrom=branchFound;
xFrom=x;
yFrom=y;
xTo=x;
yTo=y;
g.setXORMode(Color.gray);
g.setColor(Color.black);
g.drawLine(xFrom,yFrom,xTo,yTo);
}
}
/*_________________________________________________*/
public void ScanFlash(Graphics g, int x, int y) {
Branch branchFound=FindBranch( x, y);
if (highlightedBranch != null)
{if (branchFound==null)
RevertBranch(g, highlightedBranch);
else if (branchFound!=highlightedBranch)
{
RevertBranch(g, highlightedBranch);
InvertBranch(g, branchFound);
}
}
else if (branchFound!=null)
InvertBranch(g, branchFound);
}
/*_________________________________________________*/
public void ScanDrop(Graphics g, int x, int y) {
Branch branchTo=FindBranch( x, y);
if (branchTo != null)
{if (branchFrom==branchTo)
{
}
else
{
Tree.MoveBranch(branchFrom, branchTo);
controls.RedescribeTree();
}
};
needsUpdating=true;
branchFrom = null;
}
/*_________________________________________________*/
public boolean mouseMove(Event e, int x, int y) {
Graphics g = getGraphics();
ScanFlash(g, x, y);
return true;
}
/*_________________________________________________*/
public boolean mouseDown(Event e, int x, int y) {
Graphics g = getGraphics();
ScanTouch(g, x, y);
if (needsUpdating)
repaint();
return true;
}
/*_________________________________________________*/
public boolean mouseDrag(Event e, int x, int y) {
if (branchFrom!=null)
{
Graphics g = getGraphics();
g.setColor(Color.black);
g.setXORMode(Color.gray);
g.drawLine(xFrom,yFrom,xTo,yTo);
xTo=x;
yTo=y;
g.drawLine(xFrom,yFrom,xTo,yTo);
}
return true;
}
/*_________________________________________________*/
public boolean mouseUp(Event e, int x, int y) {
Graphics g = getGraphics();
if (branchFrom!=null) {
ScanDrop( g, x, y);
repaint();
}
branchFrom=null;
g.setXORMode(g.getColor());
return true;
}
}
/** ======================================================================== */
public class TreeClass {
Branch Root, SubRoot;
int numTaxa;
boolean exists;
private int stringloc;
/** ________________ read tree ________________ */
private void ParseTreeDescription(String TreeDescription, Branch Ancestor) {
if (TreeDescription.charAt(stringloc) == '(')
{
stringloc++;
Ancestor.sprout();
ParseTreeDescription(TreeDescription, Ancestor.left);
stringloc++; //skip comma
ParseTreeDescription(TreeDescription, Ancestor.right);
stringloc++; //skip parensu
}
else
{
stringloc++; //skip tt name
numTaxa++;
}
}
public void ReadTree(String TreeDescription) {
stringloc=0;
numTaxa=0;
ParseTreeDescription(TreeDescription, Root);
exists=true;
}
/** ______________________________________________ */
private boolean DescendantOf(Branch branchD, Branch branchA) {
return false;
}
private boolean NodeSlantsRight(Branch N) {
if (N.ancestor.right==N)
return true;
else
return false;
}
private Branch Sister(Branch N) {
if (N.ancestor.right==N)
return N.ancestor.left;
else
return N.ancestor.right;
}
/** ______________________________________________ */
public void MoveBranch(Branch branchFrom, Branch branchTo) {
Branch sideN,C, G, F, H, NCAnc;
boolean fromancslantRight, fromslantRight, toslantRight, NCslantRight, fromroot, toroot;
if ((branchFrom.ancestor.ancestor == branchTo) & (branchTo == Root))
{
branchFrom = Sister(branchFrom);
branchTo = Sister(branchFrom.ancestor);
}
if ((branchFrom.ancestor == Root) & (branchTo.ancestor.ancestor == Root))
{
sideN = branchFrom;
branchFrom = branchTo;
branchTo = sideN;
}
fromroot = false;
toroot = false;
fromslantRight = NodeSlantsRight(branchFrom);
fromancslantRight = NodeSlantsRight(branchFrom.ancestor);
toslantRight = NodeSlantsRight(branchTo);
G = Sister(branchFrom);
H = branchFrom.ancestor.ancestor;
C = branchTo.ancestor;
F = branchFrom.ancestor;
if (F == Root)
fromroot = true;
else if (branchTo == Root )
toroot = true;
if (fromslantRight == toslantRight)
{
sideN = F.left;
F.left = F.right;
F.right = sideN;
}
G.ancestor = H;
F.ancestor = C;
branchTo.ancestor = F;
if (fromancslantRight)
H.right = G;
else
H.left = G;
if (toslantRight)
{
F.right = branchTo;
C.right = F;
}
else
{
F.left = branchTo;
C.left = F;
}
sideN = Sister(G);
if (fromroot)
{
sideN = Root;
Root = G;
G = sideN;
}
if (toroot)
{
sideN = Root;
Root = F;
F = sideN;
}
if (!NodeSlantsRight(Root))
{
SubRoot.right = Root;
}
}
}
/** ======================================================================== */
public class Branch {
Branch left, right, ancestor;
int x;
int y;
Polygon branchPoly;
Color color;
Branch(Branch Ancestor, boolean isFirstDescendant) {
this.ancestor = Ancestor;
this.color=Color.black;
branchPoly= new Polygon();
branchPoly.xpoints = new int[5];
branchPoly.ypoints = new int[5];
branchPoly.npoints=5;
}
public boolean sprout() {
this.left = new Branch(this, true);
this.right = new Branch(this, false);
return true;
}
}
class BeanTreeControls extends Panel {
TextField tf;
TreeCanvas TreeDisplay;
public BeanTreeControls(TreeCanvas TreeDisplay) {
this.TreeDisplay = TreeDisplay;
add(tf = new TextField("(((*,*),(*,*)),(((*,*),*),*));", 40));
add(new Button("Show"));
}
public boolean action(Event ev, Object arg) {
if (ev.target instanceof Button) {
/* destroy current tree if present */
/*Display.startApplet("BeanTree.html", "BeanTree.html", args);*/
TreeDisplay.treeDescription=tf.getText();
TreeDisplay.Tree.ReadTree(TreeDisplay.treeDescription);
TreeDisplay.repaint();
return true;
}
return false;
}
public void RedescribeTree() {
TreeDisplay.treeDescription = TreeDisplay.Describe();
tf.setText(TreeDisplay.treeDescription);
repaint();
}
}
\ No newline at end of file
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTree.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTree.class
deleted file mode 100755
index 5b486f2de79c04dfa89f02e8288c468994fc39c1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1759
zcmZ`(TUQ%Z7~LmaCK-kj(n4E61zR-fCNptnQmjA0
zCzo%&_1PDfZ38Y@%OBwH@!91*nOs<1bgkr^^L^jh-*un)=fA)H#sDs%DG*;OJGN_w
z9|#PjGur|qTfS1OcF=I-BLSR`dOm3SPb8xy0l%Cn+twjyH5AX%?{I`C%=NtU$6G
zSQo5^WZ+GgI9O%6Y2VF<%I!z*lVyE;b(1YI++pc_7@btFWD*S5Tcckph4
z#lEK(;)Yjz>6U8-ID9KzjHLWd6y|*sOCYg~&F1cH&m%G7-5VA@!g7LfRv1UyEUZR~
zkC}|BRMoy+32Opk-NGlhp~I~UjJiryf;)|h4B0VScPxB{qPE@?7_ZsYn!|snDp4jD
zKG$AnaEqy`AM79uEZo+B1#B`gUp2@K2ET(?Z~o+CZvY1Fnz#qPi@}0dVK)ZDnoahb
zJ@&Kkp&*n#s~c9Xrn-f%HEHkR8(t4WufaeSJBUoXk*Q2mouLIL)AyqpAE!cQJB~TF
zzU??-qQK${IddF(qBjdQ*aA~!ub!(bl4D=_dqIceYrd>21A8VMJYZhZud>3^Cpgki
zfy6L3y{2DQYqoyYspZ|kbDE)wl((dw+I((9d2Vi11$(T2cFlA6ymMWC_70cz8|75H
zhPI43Qt~{27~=Xx@f6ogAgptxAP95M(c3k{BE`C11)DdP%
zNi%6u;_nczJjI1<>a{1haDdF+Y-;`pmr9fl@mA?6u4*NvBP`I<+bvwD@B~*|Smfau
zt{-8kBnA%gVGD)6COSPsA+oGdPMR%z%6*`P4Q`@^FQQviY-JBn`lDT1g6kqqaUJ95
zEy)kiI5J4#8lUwIoFO46NTW$Ka27w|9DZR-e#I0XV;aAa&~YNIsC?YVmy`s)>b3?~
zDCyQ1Ea3p(_CrP;n>_|MdT{vyc;$Kc#S`EOD167591Lq1Xh%<^s;O%BPt>1xkUr)h
o0T*67eSYdY4(7S*^oO#CX!OA`s`_;gbrO%^d+K8d;kWnTf6t<8
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTreeControls.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTreeControls.class
deleted file mode 100755
index a5163fcb8d2e35706dd039099830177d8c0b3ef3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1456
zcmZuwU2_yg6g_vdGP{!@32TT5h=~!LoeivD5OgC*79!vpVm1a7ed*n8lYz<1)=Veh
zAMii;A9%4UA5~gKm9M_}@!*Re<%94mEN}O0X16RKrl;@i?t9KXefo!gzI}=zoX6*c
z!dyG>LtkAZ47uf1LQZ`_7;iifJEAHcsp^V+tQLG3bZUg*l~~G~e$oxZmjtJw!@3A}
zM8b>Ap@r87`Q~QysDRfA$Nz_5%I}rsbQ
z&8tm6(Te|9D1Aest^6n?oE_kPYe(}QX#Za8foyXp>wG|octa{(&d@XR^wu3*Ky~oC
zOd$&wi@1b02^JsJ7r|z7d#Vho>tGg_S@^7Ny*HE0!WA1=@iyzCwB=;dj{R;*evnJ=
zsvNuv?$7S~(ZYL0T*Dj-qLXah)RTcolA43}aYHZ9v;UW+=;$pDZsHuFXlm$f78Y!L
zfLq*3EW3PN%E2A&(7w?I_795^9rBsV>SWta8DJD(X%y
zL_tT!)k7O(lM7mL!qLM86SD`8@hbyz{ISz{gnn=)VnQf@Q08chb9&Et?*JoSWe+9K
z`wru4rHL{3057la;nY5+?sIN>t#tMPu8zLp13B0{mULY}kO
zp(lJUWpGkAMZdzP-*AF{N16U$xBiJs^p{~WnPOy2X0eES%z$yRgeq4dd~8N7N7KxJ
vDGimvt)xs&Wi;-4%%LyAhz6j)F+$I9nw}d_#{f+AKy&!i(ESW+=D+?g!ctCQ
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/Branch.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/Branch.class
deleted file mode 100755
index 1848f8e0533f709d1ea9ec8a53d4631d2502710c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 928
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
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/com/metrowerks/AppletFrame.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/com/metrowerks/AppletFrame.class
deleted file mode 100755
index 902694c39bbb5539c010b2f24888bd8328b1d44b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1680
zcmZ`(U31$+6g}(MRxGP=;y6y-2KoU_orKnWv;)MUG`LBcVq74_p)Fq&Ry@CrYQ;jFCK3X{sC_3quh_ndp~)&BGE?|)(f*I-WKQw<+zxUb=c
zhOacdt>JwQ4>a7-@VSN^4SP9gxU3_CD>^1|LCs#%q2o;*DYevbNr!>+I`UXlvp1CO
zb+vm{M;Z%ixM<)JZW-7{!@!qn_BFmW@I7hk5p=o;ETGtAFuW$L!g4%ko=UCyU&nVo^GqfKLZ34wafH*3{yq=tJKmvhTAQ{~tXz$SP>y%(uH^<~!(@w1&y-GE`nHlb)>nJt
z`9p>i)g`8t4i9WbOxYweoe=A~;v!HQN+cr{V=)=Jbc`9*_kM#Jm&JeU5*U8BSr8&6Ol;)k|WRZUPYj>Cy3LpwM@1x8wC8c>koJo(bf5eSJqu8xT3J
zv$Sq4zr?u#Dt{r<`USb&BlWvBz%<{fKQQ@loGnGtH&@#8nVRkiL$qZ1gWGd+a
z=GDA(#BktcHboHiKOL`&1WBPv+dULH7WmF^zrd44jPtTD=6Ua_Q)ceqy17Mh%iX!ao<5;ac_ckv0w60geP>?UzO
z!(-mAi@1ah#>>!$SL#p}qNF0Zvdhf7c*JN!_Sq=%jR?6sJb{ntt)48FBV?g&;5be@
zj#FOw6=!Df_s_^J4{$d9LdBhVF^XFx6A)ELor
-
-
@@ -625,8 +623,6 @@
redirect:/user/treeList.html
-
-
@@ -1008,9 +1004,7 @@
exportRowSegmentDataController
exportRowSegmentTemplateController
-
-
- treeParserController
+ treeParserController
userManagementController
selectStudiesController
From f4c984195d05a5a759f64a601293bd7fe87e72b5 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 19 Feb 2026 18:22:44 +0000
Subject: [PATCH 3/3] Restore BeanTree mesquite files - only clean up
treebase-servlet.xml
Co-authored-by: rvosa <106490+rvosa@users.noreply.github.com>
---
.../lib/docs/mesquite/BeanTree/BeanTree.html | 1 +
.../lib/docs/mesquite/BeanTree/BeanTree.java | 1 +
.../mesquite/BeanTree/BeanTree/BeanTree.class | Bin 0 -> 1759 bytes
.../BeanTree/BeanTree/BeanTreeControls.class | Bin 0 -> 1456 bytes
.../docs/mesquite/BeanTree/BeanTree/Branch.class | Bin 0 -> 928 bytes
.../mesquite/BeanTree/BeanTree/TreeCanvas.class | Bin 0 -> 6044 bytes
.../mesquite/BeanTree/BeanTree/TreeClass.class | Bin 0 -> 2374 bytes
.../BeanTree/com/metrowerks/AppletFrame.class | Bin 0 -> 1680 bytes
8 files changed, 2 insertions(+)
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTree.class
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTreeControls.class
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/Branch.class
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/TreeCanvas.class
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/TreeClass.class
create mode 100755 treebase-core/lib/docs/mesquite/BeanTree/BeanTree/com/metrowerks/AppletFrame.class
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html
new file mode 100755
index 000000000..ad060a139
--- /dev/null
+++ b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.html
@@ -0,0 +1 @@
+BeanTree
BeanTree
It all started yesterday because I thought that perhaps I should try out some object oriented programming in case I wanted to teach an object oriented language to the students in my class next spring....
Much faster as stand alone application.
Taxon names must be one character only (actually, they can all be the same character).
\ No newline at end of file
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java
new file mode 100755
index 000000000..106f0adbe
--- /dev/null
+++ b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree.java
@@ -0,0 +1 @@
+//package wpm;
import java.awt.*;
import java.applet.Applet;
public class BeanTree extends Applet
{
static TreeCanvas TreeDisplay;
static BeanTreeControls controls;
public void init()
{
setLayout( new BorderLayout() );
resize(300, 300);
TreeDisplay = new TreeCanvas(10, 10, 400, 400);
add( "Center", TreeDisplay );
add("North", controls = new BeanTreeControls(TreeDisplay));
TreeDisplay.Tree = new TreeClass();
TreeDisplay.controls = controls;
TreeDisplay.Tree.SubRoot = new Branch(null, false);
TreeDisplay.Tree.Root = new Branch(TreeDisplay.Tree.SubRoot, false);
TreeDisplay.edgewidth = 10;
TreeDisplay.needsUpdating = false;
TreeDisplay.highlightedBranch = null;
TreeDisplay.Tree.exists = false;
repaint();
}
public void start() {
controls.enable();
}
public void stop() {
controls.disable();
}
public static void main(String args[])
{
com.metrowerks.AppletFrame.startApplet("BeanTree", "BeanTree", args);
}
}
/** ======================================================================== */
class TreeCanvas extends Canvas {
TreeClass Tree;
int x_max, y_max;
int edgewidth;
Branch highlightedBranch, branchFrom;
int xFrom, yFrom, xTo, yTo;
boolean needsUpdating;
String treeDescription;
BeanTreeControls controls;
private int lastleft;
private int taxspacing;
private Branch foundBranch;
public TreeCanvas( int x_max, int y_max, int x_size, int y_size )
{
this.x_max = x_max;
this.y_max = y_max;
resize( x_size, y_size );
repaint();
}
/*_________________________________________________*/
private void WriteTreeDescription(Branch N) {
if (N.left!=null)
{
treeDescription+='(';
WriteTreeDescription(N.left);
treeDescription+=',';
WriteTreeDescription(N.right);
treeDescription+=')';
}
else
{
treeDescription+='*';
}
}
public String Describe() {
treeDescription="";
WriteTreeDescription(Tree.Root);
treeDescription+=';';
return treeDescription;
}
/*_________________________________________________*/
private void CalcInternalLocs(Branch N)
{
if (N.left != null) //internal
{
CalcInternalLocs(N.left);
CalcInternalLocs(N.right);
N.y = (-N.left.x + N.right.x+N.left.y + N.right.y) / 2;
N.x =(N.left.x + N.right.x - N.left.y + N.right.y) / 2;
}
}
/*_________________________________________________*/
private void CalcTerminalLocs(Branch N)
{
if (N.left == null) //terminal
{
lastleft+= taxspacing;
N.y = 90;
N.x = lastleft;
}
else
{
CalcTerminalLocs(N.left);
CalcTerminalLocs(N.right);
}
}
/*_________________________________________________*/
private void CalcBranchPolys(Branch N)
{
if (N.left != null) //terminal
{
CalcBranchPolys(N.left);
CalcBranchPolys(N.right);
N.branchPoly.npoints=0;
N.branchPoly.addPoint(N.x, N.y);
N.branchPoly.addPoint(N.x+edgewidth/2, N.y-edgewidth/2);
N.branchPoly.addPoint(N.x+edgewidth, N.y);
N.branchPoly.addPoint(N.ancestor.x+edgewidth, N.ancestor.y);
N.branchPoly.addPoint(N.ancestor.x, N.ancestor.y);
N.branchPoly.npoints=5;
}
else
{
N.branchPoly.npoints=0;
N.branchPoly.addPoint(N.x, N.y);
N.branchPoly.addPoint(N.x+edgewidth, N.y);
N.branchPoly.addPoint(N.ancestor.x+edgewidth, N.ancestor.y);
N.branchPoly.addPoint(N.ancestor.x, N.ancestor.y);
N.branchPoly.npoints=4;
}
}
/*_________________________________________________*/
private void calcBranches() {
lastleft = 0;
taxspacing = (bounds().width - 10) / Tree.numTaxa;
CalcTerminalLocs(Tree.Root);
CalcInternalLocs(Tree.Root);
Tree.SubRoot.y = (Tree.Root.y)+20;
Tree.SubRoot.x = (Tree.Root.x)-20;
CalcBranchPolys(Tree.Root);
}
/*_________________________________________________*/
private void drawBranch(Graphics g, Branch N) {
g.setColor(N.color);
g.fillPolygon(N.branchPoly);
if (N.left != null)
drawBranch(g, N.left);
if (N.right != null)
drawBranch(g, N.right);
}
/*_________________________________________________*/
public void drawTree(Graphics g) {
if (Tree.exists)
{
calcBranches();
drawBranch(g, Tree.Root);
}
}
/*_________________________________________________*/
public void paint(Graphics g) {
drawTree(g);
needsUpdating = false;
}
/*_________________________________________________*/
public void InvertBranch(Graphics g, Branch N) {
// N.color=Color.white;
highlightedBranch=N;
g.setColor(Color.white);
g.fillPolygon(N.branchPoly);
// needsUpdating=true;
}
/*_________________________________________________*/
public void RevertBranch(Graphics g, Branch N) {
// N.color=Color.black;
highlightedBranch=null;
g.setColor(Color.black);
g.fillPolygon(N.branchPoly);
// needsUpdating=true;
}
/*_________________________________________________*/
private void ScanBranches(Branch N, int x, int y)
{
if (foundBranch==null) {
if (N.branchPoly.inside(x, y))
foundBranch = N;
if (N.left != null) //terminal
{
ScanBranches(N.left, x, y);
ScanBranches(N.right, x, y);
}
}
}
/*_________________________________________________*/
public Branch FindBranch(int x, int y) {
foundBranch=null;
ScanBranches(Tree.Root, x, y);
return foundBranch;
}
/*_________________________________________________*/
public void ScanTouch(Graphics g, int x, int y) {
Branch branchFound=FindBranch( x, y);
if (branchFound!=null)
{
branchFrom=branchFound;
xFrom=x;
yFrom=y;
xTo=x;
yTo=y;
g.setXORMode(Color.gray);
g.setColor(Color.black);
g.drawLine(xFrom,yFrom,xTo,yTo);
}
}
/*_________________________________________________*/
public void ScanFlash(Graphics g, int x, int y) {
Branch branchFound=FindBranch( x, y);
if (highlightedBranch != null)
{if (branchFound==null)
RevertBranch(g, highlightedBranch);
else if (branchFound!=highlightedBranch)
{
RevertBranch(g, highlightedBranch);
InvertBranch(g, branchFound);
}
}
else if (branchFound!=null)
InvertBranch(g, branchFound);
}
/*_________________________________________________*/
public void ScanDrop(Graphics g, int x, int y) {
Branch branchTo=FindBranch( x, y);
if (branchTo != null)
{if (branchFrom==branchTo)
{
}
else
{
Tree.MoveBranch(branchFrom, branchTo);
controls.RedescribeTree();
}
};
needsUpdating=true;
branchFrom = null;
}
/*_________________________________________________*/
public boolean mouseMove(Event e, int x, int y) {
Graphics g = getGraphics();
ScanFlash(g, x, y);
return true;
}
/*_________________________________________________*/
public boolean mouseDown(Event e, int x, int y) {
Graphics g = getGraphics();
ScanTouch(g, x, y);
if (needsUpdating)
repaint();
return true;
}
/*_________________________________________________*/
public boolean mouseDrag(Event e, int x, int y) {
if (branchFrom!=null)
{
Graphics g = getGraphics();
g.setColor(Color.black);
g.setXORMode(Color.gray);
g.drawLine(xFrom,yFrom,xTo,yTo);
xTo=x;
yTo=y;
g.drawLine(xFrom,yFrom,xTo,yTo);
}
return true;
}
/*_________________________________________________*/
public boolean mouseUp(Event e, int x, int y) {
Graphics g = getGraphics();
if (branchFrom!=null) {
ScanDrop( g, x, y);
repaint();
}
branchFrom=null;
g.setXORMode(g.getColor());
return true;
}
}
/** ======================================================================== */
public class TreeClass {
Branch Root, SubRoot;
int numTaxa;
boolean exists;
private int stringloc;
/** ________________ read tree ________________ */
private void ParseTreeDescription(String TreeDescription, Branch Ancestor) {
if (TreeDescription.charAt(stringloc) == '(')
{
stringloc++;
Ancestor.sprout();
ParseTreeDescription(TreeDescription, Ancestor.left);
stringloc++; //skip comma
ParseTreeDescription(TreeDescription, Ancestor.right);
stringloc++; //skip parensu
}
else
{
stringloc++; //skip tt name
numTaxa++;
}
}
public void ReadTree(String TreeDescription) {
stringloc=0;
numTaxa=0;
ParseTreeDescription(TreeDescription, Root);
exists=true;
}
/** ______________________________________________ */
private boolean DescendantOf(Branch branchD, Branch branchA) {
return false;
}
private boolean NodeSlantsRight(Branch N) {
if (N.ancestor.right==N)
return true;
else
return false;
}
private Branch Sister(Branch N) {
if (N.ancestor.right==N)
return N.ancestor.left;
else
return N.ancestor.right;
}
/** ______________________________________________ */
public void MoveBranch(Branch branchFrom, Branch branchTo) {
Branch sideN,C, G, F, H, NCAnc;
boolean fromancslantRight, fromslantRight, toslantRight, NCslantRight, fromroot, toroot;
if ((branchFrom.ancestor.ancestor == branchTo) & (branchTo == Root))
{
branchFrom = Sister(branchFrom);
branchTo = Sister(branchFrom.ancestor);
}
if ((branchFrom.ancestor == Root) & (branchTo.ancestor.ancestor == Root))
{
sideN = branchFrom;
branchFrom = branchTo;
branchTo = sideN;
}
fromroot = false;
toroot = false;
fromslantRight = NodeSlantsRight(branchFrom);
fromancslantRight = NodeSlantsRight(branchFrom.ancestor);
toslantRight = NodeSlantsRight(branchTo);
G = Sister(branchFrom);
H = branchFrom.ancestor.ancestor;
C = branchTo.ancestor;
F = branchFrom.ancestor;
if (F == Root)
fromroot = true;
else if (branchTo == Root )
toroot = true;
if (fromslantRight == toslantRight)
{
sideN = F.left;
F.left = F.right;
F.right = sideN;
}
G.ancestor = H;
F.ancestor = C;
branchTo.ancestor = F;
if (fromancslantRight)
H.right = G;
else
H.left = G;
if (toslantRight)
{
F.right = branchTo;
C.right = F;
}
else
{
F.left = branchTo;
C.left = F;
}
sideN = Sister(G);
if (fromroot)
{
sideN = Root;
Root = G;
G = sideN;
}
if (toroot)
{
sideN = Root;
Root = F;
F = sideN;
}
if (!NodeSlantsRight(Root))
{
SubRoot.right = Root;
}
}
}
/** ======================================================================== */
public class Branch {
Branch left, right, ancestor;
int x;
int y;
Polygon branchPoly;
Color color;
Branch(Branch Ancestor, boolean isFirstDescendant) {
this.ancestor = Ancestor;
this.color=Color.black;
branchPoly= new Polygon();
branchPoly.xpoints = new int[5];
branchPoly.ypoints = new int[5];
branchPoly.npoints=5;
}
public boolean sprout() {
this.left = new Branch(this, true);
this.right = new Branch(this, false);
return true;
}
}
class BeanTreeControls extends Panel {
TextField tf;
TreeCanvas TreeDisplay;
public BeanTreeControls(TreeCanvas TreeDisplay) {
this.TreeDisplay = TreeDisplay;
add(tf = new TextField("(((*,*),(*,*)),(((*,*),*),*));", 40));
add(new Button("Show"));
}
public boolean action(Event ev, Object arg) {
if (ev.target instanceof Button) {
/* destroy current tree if present */
/*Display.startApplet("BeanTree.html", "BeanTree.html", args);*/
TreeDisplay.treeDescription=tf.getText();
TreeDisplay.Tree.ReadTree(TreeDisplay.treeDescription);
TreeDisplay.repaint();
return true;
}
return false;
}
public void RedescribeTree() {
TreeDisplay.treeDescription = TreeDisplay.Describe();
tf.setText(TreeDisplay.treeDescription);
repaint();
}
}
\ No newline at end of file
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTree.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTree.class
new file mode 100755
index 0000000000000000000000000000000000000000..5b486f2de79c04dfa89f02e8288c468994fc39c1
GIT binary patch
literal 1759
zcmZ`(TUQ%Z7~LmaCK-kj(n4E61zR-fCNptnQmjA0
zCzo%&_1PDfZ38Y@%OBwH@!91*nOs<1bgkr^^L^jh-*un)=fA)H#sDs%DG*;OJGN_w
z9|#PjGur|qTfS1OcF=I-BLSR`dOm3SPb8xy0l%Cn+twjyH5AX%?{I`C%=NtU$6G
zSQo5^WZ+GgI9O%6Y2VF<%I!z*lVyE;b(1YI++pc_7@btFWD*S5Tcckph4
z#lEK(;)Yjz>6U8-ID9KzjHLWd6y|*sOCYg~&F1cH&m%G7-5VA@!g7LfRv1UyEUZR~
zkC}|BRMoy+32Opk-NGlhp~I~UjJiryf;)|h4B0VScPxB{qPE@?7_ZsYn!|snDp4jD
zKG$AnaEqy`AM79uEZo+B1#B`gUp2@K2ET(?Z~o+CZvY1Fnz#qPi@}0dVK)ZDnoahb
zJ@&Kkp&*n#s~c9Xrn-f%HEHkR8(t4WufaeSJBUoXk*Q2mouLIL)AyqpAE!cQJB~TF
zzU??-qQK${IddF(qBjdQ*aA~!ub!(bl4D=_dqIceYrd>21A8VMJYZhZud>3^Cpgki
zfy6L3y{2DQYqoyYspZ|kbDE)wl((dw+I((9d2Vi11$(T2cFlA6ymMWC_70cz8|75H
zhPI43Qt~{27~=Xx@f6ogAgptxAP95M(c3k{BE`C11)DdP%
zNi%6u;_nczJjI1<>a{1haDdF+Y-;`pmr9fl@mA?6u4*NvBP`I<+bvwD@B~*|Smfau
zt{-8kBnA%gVGD)6COSPsA+oGdPMR%z%6*`P4Q`@^FQQviY-JBn`lDT1g6kqqaUJ95
zEy)kiI5J4#8lUwIoFO46NTW$Ka27w|9DZR-e#I0XV;aAa&~YNIsC?YVmy`s)>b3?~
zDCyQ1Ea3p(_CrP;n>_|MdT{vyc;$Kc#S`EOD167591Lq1Xh%<^s;O%BPt>1xkUr)h
o0T*67eSYdY4(7S*^oO#CX!OA`s`_;gbrO%^d+K8d;kWnTf6t<8
literal 0
HcmV?d00001
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTreeControls.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/BeanTreeControls.class
new file mode 100755
index 0000000000000000000000000000000000000000..a5163fcb8d2e35706dd039099830177d8c0b3ef3
GIT binary patch
literal 1456
zcmZuwU2_yg6g_vdGP{!@32TT5h=~!LoeivD5OgC*79!vpVm1a7ed*n8lYz<1)=Veh
zAMii;A9%4UA5~gKm9M_}@!*Re<%94mEN}O0X16RKrl;@i?t9KXefo!gzI}=zoX6*c
z!dyG>LtkAZ47uf1LQZ`_7;iifJEAHcsp^V+tQLG3bZUg*l~~G~e$oxZmjtJw!@3A}
zM8b>Ap@r87`Q~QysDRfA$Nz_5%I}rsbQ
z&8tm6(Te|9D1Aest^6n?oE_kPYe(}QX#Za8foyXp>wG|octa{(&d@XR^wu3*Ky~oC
zOd$&wi@1b02^JsJ7r|z7d#Vho>tGg_S@^7Ny*HE0!WA1=@iyzCwB=;dj{R;*evnJ=
zsvNuv?$7S~(ZYL0T*Dj-qLXah)RTcolA43}aYHZ9v;UW+=;$pDZsHuFXlm$f78Y!L
zfLq*3EW3PN%E2A&(7w?I_795^9rBsV>SWta8DJD(X%y
zL_tT!)k7O(lM7mL!qLM86SD`8@hbyz{ISz{gnn=)VnQf@Q08chb9&Et?*JoSWe+9K
z`wru4rHL{3057la;nY5+?sIN>t#tMPu8zLp13B0{mULY}kO
zp(lJUWpGkAMZdzP-*AF{N16U$xBiJs^p{~WnPOy2X0eES%z$yRgeq4dd~8N7N7KxJ
vDGimvt)xs&Wi;-4%%LyAhz6j)F+$I9nw}d_#{f+AKy&!i(ESW+=D+?g!ctCQ
literal 0
HcmV?d00001
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/Branch.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/Branch.class
new file mode 100755
index 0000000000000000000000000000000000000000..1848f8e0533f709d1ea9ec8a53d4631d2502710c
GIT binary patch
literal 928
zcmYjPTTj$b5dLO&p}V!*R#XH;Kv5_{y}K%cfFU8-tRxZ=@TpslY@zm$wyW?b{3X6<
z+>m&|+k=-MWt?-myZUg>%zQJQ@0&UO{pbBLvY5dlAwTB@e&{FjgzV(h1|b)SX9?rw
zrN|Av+I>Pt7!&nllof?3stYck-VSl)GCxQ_cWaTKs4L)E~Of%>ZV
zUvgO?oa&rwl3SB4!Y!quSeBj}Y`Br{Rs*rFE<#V)4@IT^yecA%Sm;KE+iJ?d4R@T!
z)m`Bw22PsjN6|tja?FuVV&F^x131lks)6h6Sr|kYp}Q?uYceogz&Q+Au+XLI&$kHv
zo5{eKiE%|>;)E)?NH7ler5`3SA@g+A!X;cTaLFVm4%37MJH@6M3tQL>@~Uo@7r!jG
zdB|K+^SMcWvAyg*KVI>pIC&&uPlVfU$ZtVgJXgFQ$vOx8a9e5@Jtj-JWAW4Gl&HHF
zI#Q1pZ9b9p$P+8RT4Zst8q1)bh!k9NlNw>#sR$W5%(9or{m~T}Y>UWQ5^lI23DI_D
z)xHQ_t%Qy-#(ez%3_eWHHx#+H{0Q0_$ZK0@THc+GdC_b$e0T&9uCn)vyJXpx>?54A
zryDqHzr{!cqxJ`kZyw=70~7W;OyobB4NSGYE81(od80e_@jaq6(I@^9j!~e`=%p_h
zqOX{sZ*b^4dbwsa<-)b5(h{z-M~WXeaFewWZsB%QTZJc6xnb5auxaOxP-@^_8f0}a
lmwV0m3>1I2>P{1&CO{mY@`ZXfP}#fTC4+nR!VDCiA8<6A12#
zU98sHy3$(LYO2+`G?`dwU0MXSTHB(vYTfOwR;#vEsqKI6ee>oK`PzP8^L;b-zWeSy
z=Rf~h?#Vp*(Y^O!7-kw#1LX^1$wVrVJKDgo`swQogw|vn$3SJPjLk_qn{6^s+Pk6K
z?loYvaK25?E1Y&66yINbCal1v9H*VA8
zu--K;m2Z>p;VH+7XV<3Vb}o_Xq`s33jLZ?p5+@tWB+|Krn=(++0MP-NElk!2AE%3+)*SGLb
z2&rmyV|H?#ok`g3NoS3G5maj;<*exGZg(MqZk$3wxvm7sFtsC}t{*f-IJh;Xuok-LJj
zG@z?!Z@`88*mDZZnl%LmQ>Ekr0gUEFl)lr
z+S)0**F;>RW!g!DIYHOs7D3JRLSxF&*Y@hukYjzlu)Ii{Ey0S7dRnCo$a?7z{(<+wtE_a+7q
z3+?D4xPoY@nPR9!rx1OB9a0&}oZduM-2PpR5`Jzo@p&mlQ}I1=?-i$8aI37`Wg;rO
zrsDf_X-jI0lgViwO;iZIQ;`>kb+I6sxCd7m7~z|&xCrCk3hcxWczm@}JkCSyNjt_6
zzfUOLiTk;sEoP^*bP1W^em&E*^&qY9C$u1u$|j^@sRk2k~RU{Rn-&
zG*P@IOsUTWA2WeP(;Bx&ZoPvJ#FN(eQ#>ZZo}jPV^?fKoY@$*l`K1X{C&7~@hU?j{
zOpMU8Uz-@IXV0>FbY^U3{cp6b&l4TP=fst(m$UGjcoA2Nk6-fqCpVReS1?`{U-i%~
zWx44x@gp4szcVqQXMf-!v1UoeO>?So%FP^E?rw23n<_;0G!W<}UdI~|2Edyp#-Lh!
z`4-)`+KH>HyItKdCjKhdWOV5L9LBp5yoYy)uG{U&I-+dLer>EsGg
zD!aTgyf
zw243I_pBx5gyH3ERS<(tTGJ>uDoDA(3Lj~6donR+X+m0uszvQtH`$YO^x`U88mNZG
z6^@%~BTCBfASVvc9U3
zX{JU7of;W(YGlBvk>RFB2Adk0uWIByu130+V+nYvsF7ES8ktTUt6}i+9nbH>`E&-+
zlyV$z4PvrYJAgy12?LmB)m4Y`m|^A7c$Ydmf!|}*&ILq&G)uukhW#Q+TZ~%1o1>**
zHjdyEF7L8tW-2nmm!gR-vd`@gEO%5PY*fnHRJh-W&NSKb1Q%TrH7DJouOpJ|KJU~>;Co1Lc1fPKa_;2q{!%ERl80nqi52yXVJ4~
zv!b1YSvZ&Ja2{`!?bwF%aWQ*~9k>A3vzxmU7h)GK!V7HP-r*am6gpk@`ONS0nP*Sp
zMZxWi0!f$67OhKK%*+e=ad9*fCqK-auhIRfVh*K?)0p0HnI1Nh#poDDjyQnlipw3*
zF>!`a@nE)SsLuII>HNzG_;O6c6$E=FtH4z>a)&ZPXWeGch!W}4Jm}jAT}s^Sh8g|%
zMjqG6xHXS&b6^memOQh1-OOQa;hE`pa}j`!-D}uyUrWxfBh%OO{2
z24|xW-%)(cR$K~;?B+Z`Cvdk!ajoXy_8m-{LEK?U8tEDoP(4D4?qmJBh2{O$fWvBi
zb+w*4gYGRTX{HKMQfW2hakqG_zi3ZHy}E;h-Wd>B=?kp%1+v5OP@l{*LSwZxV*rB<
zcjJcvDvP2u-aJJQvNO9UKu@(VzS^g!+NXz2)yEVWTG0dlLDBtG^Z*q-_&+Ktk?zz}
zbO{T%l<+y^eb*i|O72dm%j4l4D7P90u!{=}ka4QYOsE^gqpHrRSyS{EUm*gevX%2azpd~QRRs_^1mqAHNbY)Lw5?#3E$%^(y*(L7qt@v
z2Jsf}Ar9^$0=13knGt!RS)p2v>eMUG5_cDLp7n@yb^0d
z1K2Cg$5U3_0G^iFGctRQ&VM0~mpLfc5YAKlJk8HD{5+S(Yejl2)#5zM)On8m`SYac
z1yb}P>hKZ{#>-5hS6HxKW!v$ZLay7EWj^v{eyl9>>00K|RnAuD7nCnIIonmwnw_Lg
ztZ6A&LrjCaad=H=4@Rma8_eVPeQ2l&$(x&Su)k<=EssC;VWcn+@g9rDOkP9e9(zev4h!+gN~i*@3+mFr>vdq{TO+#W$qIH)N4-2wP>(kZV0d<`xVQ
zP?L#yZ%ybX#s#Z|e#ql5oV=aK-z>VUUjk-t5wxzJ?-TR~^uUK0%P^Q~7_f{G8jaEb
z*ttH~xjxvrKG?ZF*qJn6v;KGd!vnjCUJ%x!yc+h+4>5QomOcvI#x>n9sW>$v{6V1-
zBMdX3H|pz+;$K83aT@jYMm@b{)G1|^-X{8j-ZMSDwL!hcF!IsA17R*U1|Xv6E-&49|nW28{1@zf8n;fu+Gwpw|4|Z
z(M*j|5*4F?8I2fai;4=#280J*B_{e}eB((UOnfu(!Nf>B-@RR1goobq=R4o|{m%K$
z_w|RnH*dj-791wjY|Z9#g`C+*a7LT=5?sT&Zn8hsZK#FpWII6`naEjvAuskw+kQh#6@5!shqJ%mx>QT#l
zvXiRO#oS%d{^lMT4Om8~`#+?Fej8Ggt<#(R|DHgd-%dF^p~ZLJIsB*Eng-qxc}FngCdnd1ieQ)Rl`&)WMs
z6S}`Kd;(pCtX4F2gVkY8oe;YS;RiIad9TdJ$pq`MK}HR{LVJ=Ri}q`U3AJDj9wjtH
zm%6Pv$vOKe47y&rfJZ
zvRhLN;(W`>Ix)6{z|w+cBf`b)1DF}af%8}Bw&dBfY(9RL4slIbO04n3g3!#?4c_Hs
zxj!CTK<Oev~v-m_~qM(g}plcDEDkMUpIh2N*2H~S2G|(OkaJikJ45*X<9e4_@
zC75k2MY9~v%i;@Bl!twwu`1Gzat;TcW;8+Cfz1|ahZx9Gw%zO%q-)~~=vY8gd=75c
z<*L*{0Y(Slr-R(H!&NkE%Mi8bv>+Vfo|F=gl@d2r68mj6a;4hE#!E^j=YNVN<&TLaG4pvbVh)mKWfyVV;@2#4Rw+~zJZXp=;$HkUBlJc>tv%)#qw
z4a_5Gv6_R&)fx=@!v2d;6c5jITH!$M{URcYr)3dMid&Hu(ZOyWn~sFy;cwVGi-002
zZeE{<&(Ri8x-Xv+Rg%M`DVb3r>dvv#1wj((G8o#+EjBI9PG
zB7&>>2tn3Hg~cf=b9)o(xZ8O|sKEawI@Z(k7^5P_$;1Jg#vwX|BlH5Y^dhF{G)#I4
zr|D(P&>5ViS8$GA#d(^+MS2Z$^g6z!H*l5S#0`22x9Dx$rnC5o-oY>QF7D8K_?6D#
zcX}Ux(g*mPKE%Ito}6@n0`xI8&?mH#KBWkKMosiN#pw&$K$mC}&C?e8k~--t>ZPyw
z_56m0={swtF4)tuG*djz+wHr-TAy_{#`(L0e@-01UF_t?B7k%F5qsF@!VK@~O#FcX-r>a*{z8hS52x`P(yaNB#Xsn0Er?sFvoR=wjuIM)H@tLp
m;w;5|b;qt_ywZGeO~tDuUQO}7+OLv>UnOz158;3%5B>*=5686t
literal 0
HcmV?d00001
diff --git a/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/com/metrowerks/AppletFrame.class b/treebase-core/lib/docs/mesquite/BeanTree/BeanTree/com/metrowerks/AppletFrame.class
new file mode 100755
index 0000000000000000000000000000000000000000..902694c39bbb5539c010b2f24888bd8328b1d44b
GIT binary patch
literal 1680
zcmZ`(U31$+6g}(MRxGP=;y6y-2KoU_orKnWv;)MUG`LBcVq74_p)Fq&Ry@CrYQ;jFCK3X{sC_3quh_ndp~)&BGE?|)(f*I-WKQw<+zxUb=c
zhOacdt>JwQ4>a7-@VSN^4SP9gxU3_CD>^1|LCs#%q2o;*DYevbNr!>+I`UXlvp1CO
zb+vm{M;Z%ixM<)JZW-7{!@!qn_BFmW@I7hk5p=o;ETGtAFuW$L!g4%ko=UCyU&nVo^GqfKLZ34wafH*3{yq=tJKmvhTAQ{~tXz$SP>y%(uH^<~!(@w1&y-GE`nHlb)>nJt
z`9p>i)g`8t4i9WbOxYweoe=A~;v!HQN+cr{V=)=Jbc`9*_kM#Jm&JeU5*U8BSr8&6Ol;)k|WRZUPYj>Cy3LpwM@1x8wC8c>koJo(bf5eSJqu8xT3J
zv$Sq4zr?u#Dt{r<`USb&BlWvBz%<{fKQQ@loGnGtH&@#8nVRkiL$qZ1gWGd+a
z=GDA(#BktcHboHiKOL`&1WBPv+dULH7WmF^zrd44jPtTD=6Ua_Q)ceqy17Mh%iX!ao<5;ac_ckv0w60geP>?UzO
z!(-mAi@1ah#>>!$SL#p}qNF0Zvdhf7c*JN!_Sq=%jR?6sJb{ntt)48FBV?g&;5be@
zj#FOw6=!Df_s_^J4{$d9LdBhVF^XFx6A)ELor