load ('tree.lefty');
inode1 = function (p, name) {
    local i, nnum, size;
    nnum = nodenum;
    if (~name)
        name = "";
    nodearray[nnum].ch = [];
    nodearray[nnum].chn = 0;
    nodearray[nnum].name = name;
    size = nodesize (nodearray[nnum]);
    nodearray[nnum].rect[0] = p;
    nodearray[nnum].rect[1] = ['x' = p.x + size.x; 'y' = p.y + size.y;];
    nodenum = nodenum + 1;
    if (~tree) {
        tree = nodearray[nnum];
        tree.depth = 0;
    }
    return nodearray[nnum];
};
iedge1 = function (node1, node2) {
     node1.ch[node1.chn] = node2;
     node1.chn = node1.chn + 1;
     node2.depth = node1.depth + 1;
};
inode1 ([], null);
inode1 ([], null);
iedge1 (nodearray[0], nodearray[1]);
inode1 ([], null);
iedge1 (nodearray[1], nodearray[2]);
inode1 ([], null);
iedge1 (nodearray[2], nodearray[3]);
inode1 ([], null);
iedge1 (nodearray[3], nodearray[4]);
inode1 ([], null);
iedge1 (nodearray[3], nodearray[5]);
inode1 ([], null);
iedge1 (nodearray[2], nodearray[6]);
inode1 ([], null);
iedge1 (nodearray[6], nodearray[7]);
inode1 ([], null);
iedge1 (nodearray[7], nodearray[8]);
inode1 ([], null);
iedge1 (nodearray[8], nodearray[9]);
inode1 ([], null);
iedge1 (nodearray[8], nodearray[10]);
inode1 ([], null);
iedge1 (nodearray[10], nodearray[11]);
inode1 ([], null);
iedge1 (nodearray[10], nodearray[12]);
inode1 ([], null);
iedge1 (nodearray[12], nodearray[13]);
inode1 ([], null);
iedge1 (nodearray[12], nodearray[14]);
inode1 ([], null);
iedge1 (nodearray[7], nodearray[15]);
inode1 ([], null);
iedge1 (nodearray[15], nodearray[16]);
inode1 ([], null);
iedge1 (nodearray[15], nodearray[17]);
inode1 ([], null);
iedge1 (nodearray[6], nodearray[18]);
inode1 ([], null);
iedge1 (nodearray[18], nodearray[19]);
inode1 ([], null);
iedge1 (nodearray[19], nodearray[20]);
inode1 ([], null);
iedge1 (nodearray[20], nodearray[21]);
inode1 ([], null);
iedge1 (nodearray[21], nodearray[22]);
inode1 ([], null);
iedge1 (nodearray[22], nodearray[23]);
inode1 ([], null);
iedge1 (nodearray[22], nodearray[24]);
inode1 ([], null);
iedge1 (nodearray[24], nodearray[25]);
inode1 ([], null);
iedge1 (nodearray[24], nodearray[26]);
inode1 ([], null);
iedge1 (nodearray[21], nodearray[27]);
inode1 ([], null);
iedge1 (nodearray[20], nodearray[28]);
inode1 ([], null);
iedge1 (nodearray[19], nodearray[29]);
inode1 ([], null);
iedge1 (nodearray[29], nodearray[30]);
inode1 ([], null);
iedge1 (nodearray[29], nodearray[31]);
inode1 ([], null);
iedge1 (nodearray[18], nodearray[32]);
inode1 ([], null);
iedge1 (nodearray[32], nodearray[33]);
inode1 ([], null);
iedge1 (nodearray[33], nodearray[34]);
inode1 ([], null);
iedge1 (nodearray[33], nodearray[35]);
inode1 ([], null);
iedge1 (nodearray[32], nodearray[36]);
inode1 ([], null);
iedge1 (nodearray[36], nodearray[37]);
inode1 ([], null);
iedge1 (nodearray[37], nodearray[38]);
inode1 ([], null);
iedge1 (nodearray[38], nodearray[39]);
inode1 ([], null);
iedge1 (nodearray[39], nodearray[40]);
inode1 ([], null);
iedge1 (nodearray[40], nodearray[41]);
inode1 ([], null);
iedge1 (nodearray[40], nodearray[42]);
inode1 ([], null);
iedge1 (nodearray[39], nodearray[43]);
inode1 ([], null);
iedge1 (nodearray[38], nodearray[44]);
inode1 ([], null);
iedge1 (nodearray[37], nodearray[45]);
inode1 ([], null);
iedge1 (nodearray[45], nodearray[46]);
inode1 ([], null);
iedge1 (nodearray[45], nodearray[47]);
inode1 ([], null);
iedge1 (nodearray[47], nodearray[48]);
inode1 ([], null);
iedge1 (nodearray[48], nodearray[49]);
inode1 ([], null);
iedge1 (nodearray[48], nodearray[50]);
inode1 ([], null);
iedge1 (nodearray[47], nodearray[51]);
inode1 ([], null);
iedge1 (nodearray[36], nodearray[52]);
inode1 ([], null);
iedge1 (nodearray[52], nodearray[53]);
inode1 ([], null);
iedge1 (nodearray[53], nodearray[54]);
inode1 ([], null);
iedge1 (nodearray[53], nodearray[55]);
inode1 ([], null);
iedge1 (nodearray[52], nodearray[56]);
inode1 ([], null);
iedge1 (nodearray[56], nodearray[57]);
inode1 ([], null);
iedge1 (nodearray[56], nodearray[58]);
inode1 ([], null);
iedge1 (nodearray[1], nodearray[59]);
inode1 ([], null);
iedge1 (nodearray[59], nodearray[60]);
inode1 ([], null);
iedge1 (nodearray[60], nodearray[61]);
inode1 ([], null);
iedge1 (nodearray[61], nodearray[62]);
inode1 ([], null);
iedge1 (nodearray[62], nodearray[63]);
inode1 ([], null);
iedge1 (nodearray[63], nodearray[64]);
inode1 ([], null);
iedge1 (nodearray[63], nodearray[65]);
inode1 ([], null);
iedge1 (nodearray[62], nodearray[66]);
inode1 ([], null);
iedge1 (nodearray[66], nodearray[67]);
inode1 ([], null);
iedge1 (nodearray[67], nodearray[68]);
inode1 ([], null);
iedge1 (nodearray[67], nodearray[69]);
inode1 ([], null);
iedge1 (nodearray[66], nodearray[70]);
inode1 ([], null);
iedge1 (nodearray[70], nodearray[71]);
inode1 ([], null);
iedge1 (nodearray[70], nodearray[72]);
inode1 ([], null);
iedge1 (nodearray[72], nodearray[73]);
inode1 ([], null);
iedge1 (nodearray[73], nodearray[74]);
inode1 ([], null);
iedge1 (nodearray[74], nodearray[75]);
inode1 ([], null);
iedge1 (nodearray[74], nodearray[76]);
inode1 ([], null);
iedge1 (nodearray[73], nodearray[77]);
inode1 ([], null);
iedge1 (nodearray[72], nodearray[78]);
inode1 ([], null);
iedge1 (nodearray[78], nodearray[79]);
inode1 ([], null);
iedge1 (nodearray[78], nodearray[80]);
inode1 ([], null);
iedge1 (nodearray[61], nodearray[81]);
inode1 ([], null);
iedge1 (nodearray[81], nodearray[82]);
inode1 ([], null);
iedge1 (nodearray[82], nodearray[83]);
inode1 ([], null);
iedge1 (nodearray[82], nodearray[84]);
inode1 ([], null);
iedge1 (nodearray[84], nodearray[85]);
inode1 ([], null);
iedge1 (nodearray[84], nodearray[86]);
inode1 ([], null);
iedge1 (nodearray[81], nodearray[87]);
inode1 ([], null);
iedge1 (nodearray[87], nodearray[88]);
inode1 ([], null);
iedge1 (nodearray[88], nodearray[89]);
inode1 ([], null);
iedge1 (nodearray[89], nodearray[90]);
inode1 ([], null);
iedge1 (nodearray[90], nodearray[91]);
inode1 ([], null);
iedge1 (nodearray[90], nodearray[92]);
inode1 ([], null);
iedge1 (nodearray[92], nodearray[93]);
inode1 ([], null);
iedge1 (nodearray[92], nodearray[94]);
inode1 ([], null);
iedge1 (nodearray[94], nodearray[95]);
inode1 ([], null);
iedge1 (nodearray[94], nodearray[96]);
inode1 ([], null);
iedge1 (nodearray[89], nodearray[97]);
inode1 ([], null);
iedge1 (nodearray[97], nodearray[98]);
inode1 ([], null);
iedge1 (nodearray[98], nodearray[99]);
inode1 ([], null);
iedge1 (nodearray[99], nodearray[100]);
inode1 ([], null);
iedge1 (nodearray[99], nodearray[101]);
inode1 ([], null);
iedge1 (nodearray[98], nodearray[102]);
inode1 ([], null);
iedge1 (nodearray[97], nodearray[103]);
inode1 ([], null);
iedge1 (nodearray[103], nodearray[104]);
inode1 ([], null);
iedge1 (nodearray[103], nodearray[105]);
inode1 ([], null);
iedge1 (nodearray[88], nodearray[106]);
inode1 ([], null);
iedge1 (nodearray[106], nodearray[107]);
inode1 ([], null);
iedge1 (nodearray[106], nodearray[108]);
inode1 ([], null);
iedge1 (nodearray[108], nodearray[109]);
inode1 ([], null);
iedge1 (nodearray[108], nodearray[110]);
inode1 ([], null);
iedge1 (nodearray[87], nodearray[111]);
inode1 ([], null);
iedge1 (nodearray[111], nodearray[112]);
inode1 ([], null);
iedge1 (nodearray[111], nodearray[113]);
inode1 ([], null);
iedge1 (nodearray[60], nodearray[114]);
inode1 ([], null);
iedge1 (nodearray[114], nodearray[115]);
inode1 ([], null);
iedge1 (nodearray[115], nodearray[116]);
inode1 ([], null);
iedge1 (nodearray[116], nodearray[117]);
inode1 ([], null);
iedge1 (nodearray[116], nodearray[118]);
inode1 ([], null);
iedge1 (nodearray[115], nodearray[119]);
inode1 ([], null);
iedge1 (nodearray[119], nodearray[120]);
inode1 ([], null);
iedge1 (nodearray[119], nodearray[121]);
inode1 ([], null);
iedge1 (nodearray[114], nodearray[122]);
inode1 ([], null);
iedge1 (nodearray[122], nodearray[123]);
inode1 ([], null);
iedge1 (nodearray[122], nodearray[124]);
inode1 ([], null);
iedge1 (nodearray[59], nodearray[125]);
inode1 ([], null);
iedge1 (nodearray[125], nodearray[126]);
inode1 ([], null);
iedge1 (nodearray[126], nodearray[127]);
inode1 ([], null);
iedge1 (nodearray[127], nodearray[128]);
inode1 ([], null);
iedge1 (nodearray[128], nodearray[129]);
inode1 ([], null);
iedge1 (nodearray[128], nodearray[130]);
inode1 ([], null);
iedge1 (nodearray[130], nodearray[131]);
inode1 ([], null);
iedge1 (nodearray[130], nodearray[132]);
inode1 ([], null);
iedge1 (nodearray[127], nodearray[133]);
inode1 ([], null);
iedge1 (nodearray[133], nodearray[134]);
inode1 ([], null);
iedge1 (nodearray[133], nodearray[135]);
inode1 ([], null);
iedge1 (nodearray[126], nodearray[136]);
inode1 ([], null);
iedge1 (nodearray[136], nodearray[137]);
inode1 ([], null);
iedge1 (nodearray[137], nodearray[138]);
inode1 ([], null);
iedge1 (nodearray[137], nodearray[139]);
inode1 ([], null);
iedge1 (nodearray[136], nodearray[140]);
inode1 ([], null);
iedge1 (nodearray[125], nodearray[141]);
inode1 ([], null);
iedge1 (nodearray[141], nodearray[142]);
inode1 ([], null);
iedge1 (nodearray[141], nodearray[143]);
inode1 ([], null);
iedge1 (nodearray[143], nodearray[144]);
inode1 ([], null);
iedge1 (nodearray[143], nodearray[145]);
inode1 ([], null);
iedge1 (nodearray[0], nodearray[146]);
inode1 ([], null);
iedge1 (nodearray[146], nodearray[147]);
inode1 ([], null);
iedge1 (nodearray[147], nodearray[148]);
inode1 ([], null);
iedge1 (nodearray[148], nodearray[149]);
inode1 ([], null);
iedge1 (nodearray[149], nodearray[150]);
inode1 ([], null);
iedge1 (nodearray[149], nodearray[151]);
inode1 ([], null);
iedge1 (nodearray[151], nodearray[152]);
inode1 ([], null);
iedge1 (nodearray[151], nodearray[153]);
inode1 ([], null);
iedge1 (nodearray[148], nodearray[154]);
inode1 ([], null);
iedge1 (nodearray[154], nodearray[155]);
inode1 ([], null);
iedge1 (nodearray[155], nodearray[156]);
inode1 ([], null);
iedge1 (nodearray[155], nodearray[157]);
inode1 ([], null);
iedge1 (nodearray[157], nodearray[158]);
inode1 ([], null);
iedge1 (nodearray[158], nodearray[159]);
inode1 ([], null);
iedge1 (nodearray[158], nodearray[160]);
inode1 ([], null);
iedge1 (nodearray[160], nodearray[161]);
inode1 ([], null);
iedge1 (nodearray[160], nodearray[162]);
inode1 ([], null);
iedge1 (nodearray[157], nodearray[163]);
inode1 ([], null);
iedge1 (nodearray[163], nodearray[164]);
inode1 ([], null);
iedge1 (nodearray[163], nodearray[165]);
inode1 ([], null);
iedge1 (nodearray[154], nodearray[166]);
inode1 ([], null);
iedge1 (nodearray[166], nodearray[167]);
inode1 ([], null);
iedge1 (nodearray[167], nodearray[168]);
inode1 ([], null);
iedge1 (nodearray[167], nodearray[169]);
inode1 ([], null);
iedge1 (nodearray[169], nodearray[170]);
inode1 ([], null);
iedge1 (nodearray[169], nodearray[171]);
inode1 ([], null);
iedge1 (nodearray[166], nodearray[172]);
inode1 ([], null);
iedge1 (nodearray[147], nodearray[173]);
inode1 ([], null);
iedge1 (nodearray[173], nodearray[174]);
inode1 ([], null);
iedge1 (nodearray[174], nodearray[175]);
inode1 ([], null);
iedge1 (nodearray[175], nodearray[176]);
inode1 ([], null);
iedge1 (nodearray[175], nodearray[177]);
inode1 ([], null);
iedge1 (nodearray[177], nodearray[178]);
inode1 ([], null);
iedge1 (nodearray[177], nodearray[179]);
inode1 ([], null);
iedge1 (nodearray[174], nodearray[180]);
inode1 ([], null);
iedge1 (nodearray[173], nodearray[181]);
inode1 ([], null);
iedge1 (nodearray[146], nodearray[182]);
inode1 ([], null);
iedge1 (nodearray[182], nodearray[183]);
inode1 ([], null);
iedge1 (nodearray[182], nodearray[184]);
inode1 ([], null);
iedge1 (nodearray[184], nodearray[185]);
inode1 ([], null);
iedge1 (nodearray[184], nodearray[186]);
inode1 ([], null);
iedge1 (nodearray[186], nodearray[187]);
inode1 ([], null);
iedge1 (nodearray[187], nodearray[188]);
inode1 ([], null);
iedge1 (nodearray[187], nodearray[189]);
inode1 ([], null);
iedge1 (nodearray[186], nodearray[190]);
dist = ['x' = 4; 'y' = 40;];
defaultsize = ['x' = 4; 'y' = 4;];
dolayout = function (node, pary) {
    local cr, r, n, size;
    size = nodesize (node);
    if (node.chn > 0) {
        if (node.chn >= 2) {
            cr = dolayout (node.ch[0], pary - size.y - dist.y);
            r[0].x = cr[1].x + dist.x / 2 - size.x / 2;
            cr = dolayout (node.ch[1], pary - size.y - dist.y);
        } else {
            cr = dolayout (node.ch[0], pary - size.y - dist.y);
            r[0].x = (cr[1].x + cr[0].x) / 2 - size.x / 2;
        }
        r[0].y = pary;
        r[1].x = r[0].x + size.x;
        r[1].y = r[0].y + size.y;
        node.rect = r;
        return cr;
    } else {
        r[0].x = leafx;
        r[0].y = pary;
        r[1].x = r[0].x + size.x;
        r[1].y = r[0].y + size.y;
        leafx = r[1].x + dist.x;
        node.rect = r;
        return r;
    }
};
drawtree = function (node) {
    local i, n;
    if ((n = tablesize (node.ch)) > 0) {
        for (i = 0; i < n; i = i + 1) {
            drawedge (node, node.ch[i]);
            drawtree (node.ch[i]);
        }
    }
    if (n > 0)
        circlenode (node);
    else
        boxnode (node);
};
complayout ();
wrect = [0 = ['x' = 0; 'y' = -200;]; 1 = ['x' = 1400; 'y' = 600;];];
setwidgetattr (canvas, ['window' = wrect;]);
redraw (canvas);
dops ();
