Annotation of rat/client/rat.html, revision 1.2

1.1       albertel    1: <html>
                      2: 
                      3: <!--
                      4: The LearningOnline Network
                      5: Resource Assembly Tool
                      6: 7/23,7/24,7/26,
                      7: 8/11,8/14,8/18,8/19,8/20,8/21,8/22,8/25,8/26,8/28,8/30,8/31,
                      8: 9/1,9/2,9/4,9/5,9/6 Gerd Kortemeyer with Scott Harrison
1.2     ! harris41    9: 11/10 Scott Harrison
1.1       albertel   10: -->
                     11: 
                     12: 
                     13: <head>
                     14: <script language="JavaScript">
                     15: 
1.2     ! harris41   16: var row=new Array(); var maxrow=-1; var rowtype=new Array();
        !            17: var col=new Array(); var maxcol=-1; var coltype=new Array();
        !            18: 
        !            19: var rowcont=new Array(); 
        !            20: 
1.1       albertel   21: var colmap=new Array();
1.2     ! harris41   22: 
        !            23: var colmap2=new Array(); var colmap3=new Array(); var colmap4=new Array(); var colmap5=new Array();
        !            24: 
        !            25: var obj=new Array(); var maxobj=-1;
        !            26: 
        !            27: var rcol=new Array(); var rrow=new Array();
        !            28: 
        !            29: var cw=new Array(); var rh=new Array();
        !            30: 
        !            31: var data1=new Array(1024); var data2=new Array(1024); var data3=new Array(1024); var data4=new Array(1024);
1.1       albertel   32: 
                     33: // ----------------------------------------- Functions to switch between images
                     34: 
                     35: function ssws(doc,i,j) {
                     36:       var name='s'+i+'_'+j;
                     37:       doc.document[name].src='insrow.gif';
                     38: }
                     39: 
                     40: function sswe(doc,i,j) {
                     41:      var name='s'+i+'_'+j;
                     42:      doc.document[name].src='sempty.gif';
                     43: }
                     44: 
                     45: function sswet(doc,i,j) {
                     46:     var name='s'+i+'_'+j;
                     47:     doc.document[name].src='std.gif';
                     48: }
                     49: 
                     50: function csws(doc,i,j) {
                     51:     var name='c'+i+'_'+j;
                     52:     doc.document[name].src='inscond.gif';
                     53: }
                     54: 
                     55: function cswe(doc,i,j) {
                     56:     var name='c'+i+'_'+j;
                     57:     doc.document[name].src='sctd.gif';
                     58: }
                     59: 
                     60: function isws(doc,i,j) {
                     61:     var name='i'+i+'_'+j;
                     62:     doc.document[name].src='inscol.gif';
                     63: }
                     64: 
                     65: function iswel(doc,i,j) {
                     66:     var name='i'+i+'_'+j;
                     67:     doc.document[name].src='sld.gif';
                     68: }
                     69: 
                     70: function iswed(doc,i,j) {
                     71:     var name='i'+i+'_'+j;
                     72:     doc.document[name].src='std.gif';
                     73: }
                     74: 
                     75: function iswedt(doc,i,j) {
                     76:     var name='i'+i+'_'+j;
                     77:     doc.document[name].src='stdl.gif';
                     78: }
                     79: 
                     80: 
                     81: function isweb(doc,i,j) {
                     82:     var name='i'+i+'_'+j;
                     83:     doc.document[name].src='sempty.gif';
                     84: }
                     85: 
                     86: function bsws(doc,i,j) {
                     87:     var name='b'+i+'_'+j;
                     88:     doc.document[name].src='insres.gif';
                     89: }
                     90: 
                     91: function bswe(doc,i,j) {
                     92:     var name='b'+i+'_'+j;
                     93:     doc.document[name].src='bempty.gif';
                     94: }
                     95: 
                     96: function bswet(doc,i,j) {
                     97:     var name='b'+i+'_'+j;
                     98:     doc.document[name].src='btd.gif';
                     99: }
                    100: 
                    101: // Insert a resource
                    102: 
                    103: function insertresource(i,j) {
                    104:       var cols=tr[i].split(":");
                    105:       cols[j]='r'+i+j;
                    106:       tr[i]=cols.join(':');
                    107: 
                    108: // This is only a test
                    109:       joinres(tti,ttj,i,j,'nodraw');
                    110:        
                    111:       draw('edit');
                    112: }
                    113: 
                    114: // Insert a condition
                    115: 
                    116: function insertcondition(i,j) {
                    117:       var cols=tc[i].split(":");
                    118:       cols[j]='r'+i+j;
                    119:       tc[i]=cols.join(':');
                    120:       draw('edit');
                    121: }
                    122: 
                    123: // ------------------------------------------------ Insert a row into the table
                    124: 
                    125: function insertrow(j,size,ex1,ex2) {
                    126:    objects1='';
                    127:    objects2='';
                    128:    for (kj=0;kj<=maxrow;kj++) {
                    129:       if ( row[kj]==j )   { objects1=rowcont[kj]; }
                    130:       if ( row[kj]==j+1 ) { objects2=rowcont[kj]; } 
                    131:       if ( row[kj]>j ) { row[kj]++; } 
                    132:    }
                    133:    maxrow++;
                    134:    row[maxrow]=j+1;
                    135:    rowtype[maxrow]=size;
                    136:    rowcont[maxrow]=':';
                    137:    colcover=':'+ex1+':'+ex2+':';
                    138:    objects=objects1+':'+objects2;
                    139:    data1=objects.split(':');
                    140:    for (kj=0;kj<data1.length;kj++) {
                    141:      if (data1[kj]!='') {
                    142:        thisisobj=obj[data1[kj]];
                    143:        thisobjtype=thisisobj.split('&')[0];
                    144:        if (thisobjtype=='v') {
                    145:           if (rowcont[maxrow].indexOf(':'+data1[kj]+':',0)==-1) {
                    146:              thisobjcol=thisisobj.split('&')[1];
                    147:              if (colcover.indexOf(':'+thisobjcol+':',0)==-1) {
                    148:                 colcover+=thisobjcol+':';  
                    149:                 rowcont[maxrow]+=data1[kj]+':';
                    150:              }
                    151:           }
                    152:        }
                    153:        if (thisobjtype=='h') {
                    154:              updown=thisisobj.split('&')[4];
                    155:              leftupdown=updown.split(':')[0];
                    156:              rightupdown=updown.split(':')[1];          
                    157:              thisobjdest=thisisobj.split('&')[3];
                    158:              thisobjtofrom=thisisobj.split('&')[2];
                    159:              thisobjfrom=thisobjtofrom.split(':')[0];
                    160:              thisobjto=thisobjtofrom.split(':')[1];
                    161:              thisobjdir=col[thisobjto]-col[thisobjfrom];
                    162:              thisobjrow=row[thisisobj.split('&')[1]];
                    163:              topbottom=thisobjrow-j-1;
                    164:              newobj='';
                    165:              if (leftupdown==-1) {
                    166:                 if (topbottom<0) {
                    167:                    if (thisobjdir<0) {
                    168:                       newobj='v&'+thisobjto+'&'+thisobjdest+'&-1';
                    169:                    } else {
                    170:                       newobj='v&'+thisobjfrom+'&'+thisobjdest+'&1';
                    171:                    }
                    172:                 }
                    173:              } else {
                    174:                 if (topbottom>0) {
                    175:                    if (thisobjdir<0) {
                    176:                       newobj='v&'+thisobjto+'&'+thisobjdest+'&1';
                    177:                    } else {
                    178:                       newobj='v&'+thisobjfrom+'&'+thisobjdest+'&-1';
                    179:                    }
                    180:                 }
                    181:              }
                    182:              if (newobj!='') {
                    183:                 thisobjcol=newobj.split('&')[1];
                    184:                 if (colcover.indexOf(':'+thisobjcol+':',0)==-1) {
                    185:                    colcover+=thisobjcol+':';  
                    186:                    rowcont[maxrow]+=obj.length+':';
                    187:                    obj[obj.length]=newobj;
                    188:                 }
                    189:              }
                    190:              newobj=''; 
                    191:              if (rightupdown==-1) {
                    192:                 if (topbottom<0) {
                    193:                    if (thisobjdir<0) {
                    194:                       newobj='v&'+thisobjfrom+'&'+thisobjdest+'&1';
                    195:                    } else {
                    196:                       newobj='v&'+thisobjto+'&'+thisobjdest+'&-1';
                    197:                    }
                    198:                 }
                    199:              } else {
                    200:                 if (topbottom>0) {
                    201:                    if (thisobjdir<0) {
                    202:                       newobj='v&'+thisobjfrom+'&'+thisobjdest+'&-1';
                    203:                    } else {
                    204:                       newobj='v&'+thisobjto+'&'+thisobjdest+'&1';
                    205:                    }
                    206:                 }
                    207:              }
                    208:              if (newobj!='') {
                    209:                 thisobjcol=newobj.split('&')[1];
                    210:                 if (colcover.indexOf(':'+thisobjcol+':',0)==-1) {
                    211:                    colcover+=thisobjcol+':';  
                    212:                    rowcont[maxrow]+=obj.length+':';
                    213:                    obj[obj.length]=newobj;
                    214:                 }
                    215:              } 
                    216:        }
                    217:      }
                    218:    }
                    219:    if (rowcont[maxrow]!=':') {
                    220:       rowcont[maxrow]=rowcont[maxrow].substring(1,rowcont[maxrow].length-1);
                    221:    } else {
                    222:       rowcont[maxrow]='';
                    223:    }
                    224: }
                    225:  
                    226: // --------------------------------------------- Insert a column into the table
                    227: 
                    228: function insertcol(j,size) {
                    229:    for (kj=0;kj<=maxcol;kj++) {
                    230:       if ( col[kj]>j ) { col[kj]++; } 
                    231:    }
                    232:    maxcol++;
                    233:    col[maxcol]=j+1;
                    234:    coltype[maxcol]=size;
                    235: }
                    236: 
                    237: // --------------------------------------------------------------- Find the row
                    238: 
                    239: function findrow(jid) {
                    240:    for (j=0;j<=maxrow;j++) { if (row[j]==jid) { return j; } }
                    241:    return -1;
                    242: }
                    243: 
                    244: // --------------------------------------------------------------- Find the col
                    245: 
                    246: function findcol(jid) {
                    247:    for (j=0;j<=maxcol;j++) { if (col[j]==jid) { return j; } }
                    248:    return -1;
                    249: }
                    250: 
                    251: // -------------------------------------------------------------- Map out a row
                    252: //
                    253: // b&rowID&colID:inObj:outObj:outCond&...
                    254: // h&rowID&incolID:outcolID&inObj:outObj&inupdown:outupdown
                    255: // v&colID&inObj:outObj&updown
                    256: //
                    257: // returns middle (col number of middle of obj1)
                    258: // sets colmap (map of cols with object numbers)
                    259: 
                    260: function maprow (jid,obj1,ign) {
                    261:  middle=-1;
                    262:  for (j=0;j<=maxcol;j++) { colmap[j]=0; }
                    263:  if (rowcont[jid]!='') {
                    264:    data2=rowcont[jid].split(':');
                    265:    for (j=0;j<data2.length;j++) {
                    266:       data3=obj[data2[j]].split('&');
                    267:       if (data3[0]=='b') {
                    268:          left=maxcol;
                    269:          right=0;
                    270:          for (k=2;k<data3.length;k++) {
                    271:             thiscol=col[data3[k].split(':')[0]];
                    272:             if (thiscol<left)  { left=thiscol;  }
                    273:             if (thiscol>right) { right=thiscol; }
                    274:          }
                    275:       }
                    276:       if (data3[0]=='h') {
                    277:          data4=data3[2].split(':');
                    278:          if (col[data4[1]]>col[data4[0]]) {
                    279:             left=col[data4[0]];
                    280:             right=col[data4[1]];
                    281:          } else {
                    282:             right=col[data4[0]];
                    283:             left=col[data4[1]];
                    284:          }
                    285:       }
                    286:       if (data3[0]=='v') { left=col[data3[1]]; right=left; }
                    287:       if (data2[j]==obj1) { middle=Math.round((left+right)/2); }
                    288:       if ((data3[0]!='h') || (ign!=1)) {
                    289:          for (k=left;k<=right;k++) { colmap[k]=data2[j]; }
                    290:       } else {
                    291:          colmap[left]=data2[j];
                    292:          colmap[right]=data2[j];
                    293:       }
                    294:    }
                    295:  }
                    296:  return middle;
                    297: }
                    298: 
                    299: // --------------------------------------------------------- Find hole in a row
                    300: // jid: rowID
                    301: // kid: colID, find point close to this
                    302: // dkid: destination colID
                    303: // returns colID
                    304: 
                    305: function comingthru (jid,kid,dkid) {
                    306:    maprow(jid,-1,1);
                    307:    knum=col[kid];
                    308:    if (colmap[knum]==0) { return kid; }
                    309:    right=-1;
                    310:    for (k=knum+1;(k<colmap.length) && (right==-1);k++) {
                    311:       if ((right==-1) && (colmap[k]!=colmap[knum])) { right=k; }
                    312:    }
                    313:    left=-1;
                    314:    for (k=knum-1;(k>=0) && (left==-1);k--) {
                    315:       if ((left==-1) && (colmap[k]!=colmap[knum])) { left=k; }
                    316:    }
                    317:    kup=-1;
                    318: //   if ((left==-1) && (right==-1)) { right=colmap.length; }
                    319:    dknum=col[dkid];
                    320:    dleft=left-dknum;
                    321:    dright=right-dknum;
                    322:    if (dleft<0) { dleft=-dleft; }
                    323:    if (dright<0) { dright=-dright; }
                    324:    if ((dright<=dleft) && (right!=-1)) { kup=right; }
                    325:    if ((dright>=dleft) && (left!=-1)) { kup=left; }
                    326:    if (colmap[kup]==0) { return findcol(kup); }
                    327:    if (kup==right) { kup--; }
                    328:    insertcol(kup,1);
                    329:    return maxcol;
                    330: }
                    331: 
                    332: // ----------------------------------------------------- Insert port into block
                    333: // obj1: object number
                    334: // d: direction from middle (>0: right, <0 left)
                    335: // inout: in or out port (1: in, 2: out)
                    336: // linkobj: object that the link goes to/comes from
                    337: // sets incol,inrow or outcol,outrow
                    338: 
                    339: function insertport (obj1,d,inout,linkobj) {
                    340:    data1=obj[obj1].split('&');
                    341:    middle=maprow(data1[1],obj1,0);
                    342:    if (inout==1) {
                    343:       inrow=data1[1];
                    344:    } else {
                    345:       outrow=data1[1];
                    346:    }
                    347:    if (d>0) {
                    348:       for (k=middle;(colmap[k]==obj1) && (k<colmap.length);k++) { data3[k]=0; }
                    349:    } else {
                    350:       for (k=middle;(colmap[k]==obj1) && (k>=0);k--) { data3[k]=0; }
                    351:    }
                    352:    for (k=2;k<data1.length;k++) { 
                    353:       data2=data1[k].split(':');
                    354:       data3[col[data2[0]]]=data2[inout];
                    355:    }
                    356:    port=-1;
                    357:    if (d>0) {
                    358:       for (k=middle;(colmap[k]==obj1) && (k<colmap.length);k++) {
                    359:          if ((data3[k]==0) && (colmap[k]==obj1) && (port==-1)) { port=k; }
                    360:       }
                    361:    } else {
                    362:       for (k=middle;(colmap[k]==obj1) && (k>=0);k--) {
                    363:          if ((data3[k]==0) && (colmap[k]==obj1) && (port==-1)) { port=k; } 
                    364:       }
                    365:    }
                    366: 
                    367:    if (port==-1) {
                    368:       if (colmap[k]==0) {
                    369:          port=k;
                    370:          if (inout==1) {
                    371:             data1[data1.length]=findcol(port)+":"+linkobj+":0:0";
                    372:          } else {
                    373:             data1[data1.length]=findcol(port)+":0:"+linkobj+":0";
                    374:          }
                    375:       } else {
                    376:          if (d>0) {
                    377:             insertcol(k-1,2);
                    378:             port=k;
                    379:          } else {
                    380:             insertcol(k,2);
                    381:             port=k+1;
                    382:          }
                    383:          if (inout==1) {
                    384:             data1[data1.length]=maxcol+":"+linkobj+":0:0";
                    385:          } else {
                    386:             data1[data1.length]=maxcol+":0:"+linkobj+":0";
                    387:          }
                    388:       }
                    389:    } else {
                    390:       portfound=-1;
                    391:       for (k=2;k<data1.length;k++) { 
                    392:          data2=data1[k].split(':');
                    393:          if (col[data2[0]]==port) {
                    394:             data2[inout]=linkobj;
                    395:             data1[k]=data2.join(':');
                    396:             portfound=1;
                    397:          }
                    398:       }
                    399:       if (portfound==-1) {
                    400:          if (inout==1) {
                    401:             data1[data1.length]=findcol(port)+":"+linkobj+":0:0";
                    402:          } else {
                    403:             data1[data1.length]=findcol(port)+":0:"+linkobj+":0";
                    404:          }
                    405:       }
                    406:    }
                    407:    if (inout==1) {
                    408:       incol=findcol(port);
                    409:       coltype[incol]=2;
                    410:    } else {
                    411:       outcol=findcol(port);
                    412:       coltype[outcol]=2;
                    413:    }
                    414:    obj[obj1]=data1.join('&');
                    415: }
                    416: 
                    417: // ---------------------------- Make a new object and add it to the row content
                    418:  
                    419: function addobj(kjid,objs) {
                    420:    if (rowcont[kjid]!='') { rowcont[kjid]+=':'; }
                    421:    rowcont[kjid]+=obj.length;
                    422:    obj[obj.length]=objs;
                    423: } 
                    424: 
                    425: // ---------------------------------------- Make horizontal connection for hrid
                    426: // hoffs=-1: this line goes on top of hrid
                    427: 
                    428: function horizontal(hrid,hoffs,hfcol,htcol,hdest,hends) {
                    429:    hcrid=-1;
                    430:    if (hoffs==-1) {
                    431:       hbrid=findrow(row[hrid]-1);
                    432:    } else {
                    433:       hbrid=findrow(row[hrid]+1);
                    434:    }
                    435:    if (hbrid!=-1) {
                    436:       maprow(hbrid,-1,0);
                    437:       hcrid=hbrid;
                    438:       if (col[hfcol]>col[htcol]) { left=col[htcol]; right=col[hfcol]; }
                    439:                             else { right=col[htcol]; left=col[hfcol]; }
                    440:       if (colmap[left]!=0) {
                    441:          hcrid=-1;
                    442:       } else {
                    443:          if (colmap[right]!=0) {
                    444:             hcrid=-1;
                    445:          } else {
                    446:             for (kh=left+1;kh<right;kh++) {
                    447:                if (colmap[kh]!=0) { 
                    448:                   if (obj[colmap[kh]].split('&')[0]!='v') { hcrid=-1; }
                    449:                }
                    450:             }
                    451:          }
                    452:       }
                    453:    }
                    454: 
                    455:    if (hcrid==-1) {
                    456:       insertrow(row[hrid]+hoffs,1,hfcol,htcol);
                    457:       addobj(maxrow,'h&'+maxrow+'&'+hfcol+':'+htcol+'&'+hdest+'&'+hends);
                    458:    } else {
                    459:       addobj(hcrid,'h&'+hcrid+'&'+hfcol+':'+htcol+'&'+hdest+'&'+hends);
                    460:    }   
                    461: }
                    462: 
                    463: // ----------------------------------------------------------- Join two objects
                    464: // Links obj1 with obj2
                    465: 
                    466: function joinres (obj1,obj2) {
                    467:    data3=obj[obj1].split('&');
                    468:    sum=0;
                    469:    for (k=2;k<data3.length;k++) { sum+=col[data3[k].split(':')[0]]; }
                    470:    outmiddle=sum/(data3.length-2);
                    471:    data3=obj[obj2].split('&');
                    472:    sum=0;
                    473:    for (k=2;k<data3.length;k++) { sum+=col[data3[k].split(':')[0]]; }
                    474:    inmiddle=sum/(data3.length-2);
                    475:    d=inmiddle-outmiddle;
                    476:    insertport(obj1,d,2,obj2);
                    477:    insertport(obj2,-d,1,obj1);
                    478:    dest=obj1+':'+obj2;
                    479:    if (row[inrow]<row[outrow]) {
                    480:       updown=1;
                    481:       tcol=comingthru(inrow,incol,outcol);
                    482:       horizontal(inrow,-1,tcol,incol,dest,'-1:-1');
                    483:       addobj(inrow,'v&'+tcol+'&'+dest+'&1');
                    484:       incol=tcol;
                    485:       tcol=comingthru(outrow,outcol,incol);
                    486:       horizontal(outrow,0,outcol,tcol,dest,'1:1');
                    487:       addobj(outrow,'v&'+tcol+'&'+dest+'&1');
                    488:       outcol=tcol;
                    489:    } else {
                    490:      updown=-1;
                    491:    }
                    492: 
                    493:    if (inrow==outrow) {
                    494:       tcol=comingthru(inrow,incol,outcol);
                    495:       horizontal(inrow,-1,tcol,incol,dest,'-1:-1');
                    496:       addobj(inrow,'v&'+tcol+'&'+dest+'&1');
                    497:       horizontal(outrow,0,outcol,tcol,dest,'1:1');
                    498:    } else {
                    499:       if (updown==-1) {
                    500:          for (kr=row[outrow]+1;kr<row[inrow];kr++) {
                    501:             rid=findrow(kr);
                    502:             ncol=comingthru(rid,outcol,incol);
                    503:             if (ncol!=outcol) {
                    504:                insertrow(k-1,1,outcol,ncol);
                    505:                if (col[ncol]>col[incol]) {
                    506:                   addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+ncol+'&'+dest+'&-1:1');
                    507:                } else {
                    508:                   addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+ncol+'&'+dest+'&1:-1');
                    509:                }
                    510:             }
                    511:             addobj(rid,'v&'+ncol+'&'+dest+'&-1');
                    512:             outcol=ncol;
                    513:          }
                    514:          if (incol!=outcol) {
                    515:             insertrow(row[inrow]-1,1,outcol,incol);
                    516:             if (col[outcol]>col[incol]) {
                    517:                addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+incol+'&'+dest+'&-1:1');
                    518:             } else {
                    519:                addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+incol+'&'+dest+'&1:-1');
                    520:             }
                    521:          }
                    522:       } else {
                    523:          for (kr=row[outrow]-1;kr>row[inrow];kr--) {
                    524:             rid=findrow(kr);
                    525:             ncol=comingthru(rid,outcol,incol);
                    526:             if (ncol!=outcol) {
                    527:                insertrow(k,1,outcol,ncol);
                    528:                if (col[outcol]>col[ncol]) {
                    529:                   addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+ncol+'&'+dest+'&1:-1');
                    530:                } else {
                    531:                   addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+ncol+'&'+dest+'&-1:1');
                    532:                }
                    533:             }
                    534:             addobj(rid,'v&'+ncol+'&'+dest+'&1');
                    535:             outcol=ncol;
                    536:          }
                    537:          if (incol!=outcol) {
                    538:             insertrow(row[inrow],1,outcol,incol);
                    539:             if (col[outcol]>col[incol]) {
                    540:                addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+incol+'&'+dest+'&1:-1');
                    541:             } else {
                    542:                addobj(maxrow,'h&'+maxrow+'&'+outcol+':'+incol+'&'+dest+'&-1:1');
                    543:             }
                    544:          }
                    545:       }
                    546:    }  
                    547: }
                    548: // -------------------------------------------------------------- Draw an entry
                    549: 
                    550: function drawcell (rtype,ctype,what,cm,mode2) {
                    551:    doc.document.write('<td width='+cw[ctype]+'>');
                    552:    if (what!='') {
                    553:       if (cm!=0) {
                    554:         if (what.substring(0,2)=='r:') {
                    555:            doc.document.write(what);
                    556:         } else {
                    557:            doc.document.write('<img src="'+rtype+'.'+ctype+'.'+what+'.gif">');
                    558:         }        
                    559:       } else {
                    560:         doc.document.write('<img src="'+rtype+'.'+ctype+'.'+what+'.gif">');
                    561:       }
                    562:    }
                    563:    doc.document.write('</td>');
                    564: }
                    565: 
                    566: // ----------------------------------------------------------------- Draw a row
                    567: 
                    568: function drawrow (jid,mode2) {
                    569:  for (j=0;j<=maxcol;j++) { 
                    570:     colmap[j]=''; colmap2[j]=''; colmap3[j]=''; colmap4[j]=''; colmap5[j]='';
                    571:  }
                    572:  doc.document.writeln('<tr height='+rh[rowtype[jid]]+'>');
                    573:  if (rowcont[jid]!='') {
                    574:    data2=rowcont[jid].split(':');
                    575:    for (jk=0;jk<data2.length;jk++) {
                    576:       data3=obj[data2[jk]].split('&');
                    577:       if (data3[0]=='b') {
                    578:          left=maxcol;
                    579:          leftin=maxcol;
                    580:          leftout=maxcol;
                    581:          right=0;
                    582:          rightin=0;
                    583:          rightout=0;
                    584:          for (k=2;k<data3.length;k++) {
                    585:             data1=data3[k].split(':');
                    586:             thiscol=col[data1[0]];
                    587:             if (thiscol<left)  { left=thiscol;  }
                    588:             if (thiscol>right) { right=thiscol; }
                    589:             if (data1[1]!=0) {
                    590:                if (thiscol<leftin)  { leftin=thiscol;  }
                    591:                if (thiscol>rightin) { rightin=thiscol; }
                    592:                colmap4[thiscol]=data1[1];
                    593:             }
                    594:             if (data1[2]!=0) {
                    595:                if (thiscol<leftout)  { leftout=thiscol;  }
                    596:                if (thiscol>rightout) { rightout=thiscol; }
                    597:                if (data1[3]!=0) {
                    598:                   colmap3[thiscol]='r:'+data1[3];
                    599:                   colmap5[thiscol]=2;
                    600:                } else {
                    601:                   colmap3[thiscol]='ctd';
                    602:                }       
                    603:             }
                    604:          }
                    605:          middle=Math.round((left+right)/2);
                    606:          colmap[middle]='r:'+data2[jk];
                    607:          colmap5[middle]=1;
                    608: 
                    609:          if (rightin>middle) {
                    610:             for (k=middle+1;k<rightin;k++) { 
                    611:                if (colmap4[k]!='') {
                    612:                   colmap[k]='rlt'; 
                    613:                } else {
                    614:                   colmap[k]='rl';
                    615:                }
                    616:             }
                    617:             colmap[rightin]='tl'; 
                    618:          }
                    619:          if (leftin<middle) {
                    620:             for (k=middle-1;k>leftin;k--) { 
                    621:                if (colmap4[k]!='') {
                    622:                   colmap[k]='lrt'; 
                    623:                } else {
                    624:                   colmap[k]='lr';
                    625:                }
                    626:             }
                    627:             colmap[leftin]='tr'; 
                    628:          }
                    629: 
                    630:          if (leftout>middle) { 
                    631:             if (colmap3[leftout]!='') {
                    632:                colmap2[middle]='tr'; 
                    633:             }
                    634:          }
                    635:          if (leftout==middle) {
                    636:             if (rightout==middle) { colmap2[middle]='td'; }
                    637:             if (rightout>middle)  { colmap2[middle]='rtd'; }
                    638:          }
                    639:          if (leftout<middle) {
                    640:             if (rightout<middle)  { colmap2[middle]='tl'; }
                    641:             if (rightout==middle) { colmap2[middle]='tdl'; }
                    642:             if (rightout>middle)  { 
                    643:               if (colmap3[middle]!='') {
                    644:                  colmap2[middle]='rtdl'; 
                    645:               } else {
                    646:                  colmap2[middle]='rtl';
                    647:               }
                    648:             }
                    649:          }
                    650:          if (leftout<middle) {
                    651:             for (k=middle-1;k>leftout;k--) { 
                    652:                if (colmap3[k]!='') {
                    653:                   colmap2[k]='rld'; 
                    654:                } else {
                    655:                   colmap2[k]='rl';
                    656:                }
                    657:             }
                    658:             colmap2[leftout]='rd'; 
                    659:          }
                    660:          if (rightout>middle) {
                    661:             for (k=middle+1;k<rightout;k++) { 
                    662:                if (colmap3[k]!='') {
                    663:                   colmap2[k]='lrd'; 
                    664:                } else {
                    665:                   colmap2[k]='lr';
                    666:                }
                    667:             }
                    668:             colmap2[rightout]='ld'; 
                    669:          }        
                    670:       }
                    671:       if (data3[0]=='h') {
                    672:          data4=data3[2].split(':');
                    673:          if (col[data4[1]]>col[data4[0]]) {
                    674:             left=col[data4[0]];
                    675:             right=col[data4[1]];
                    676:             thisarrow='lr';
                    677:          } else {
                    678:             right=col[data4[0]];
                    679:             left=col[data4[1]];
                    680:             thisarrow='rl';
                    681:          }
                    682:          if (data3[4].split(':')[0]==1) {
                    683:             colmap[left]='tr';
                    684:          } else {
                    685:             colmap[left]='rd'; colmap2[left]='utd'; colmap3[left]='utd';   
                    686:          }
                    687:          for (k=left+1;k<right;k++) { 
                    688:             if (colmap[k]=='') {
                    689:                colmap[k]=thisarrow; 
                    690:             } else {
                    691:                colmap[k]='tdrl';
                    692:             }
                    693:          }
                    694:          if (data3[4].split(':')[1]==1) {
                    695:             colmap[right]='tl';
                    696:          } else {
                    697:             colmap[right]='ld'; colmap2[right]='utd'; colmap3[right]='utd';   
                    698:          }
                    699:       }
                    700:       if (data3[0]=='v') { 
                    701:          left=col[data3[1]];
                    702:          if (colmap[left]=='') {
                    703:             if (data3[3]==1) { colmap[left]='dt'; } else { colmap[left]='td'; }
                    704:          } else {
                    705:             colmap[left]='tdrl';
                    706:          }
                    707:          colmap2[left]='utd'; colmap3[left]='utd';
                    708:       }
                    709:    }
                    710:    rtype=rowtype[jid];
                    711:    for (k=0;k<=maxcol;k++) {
                    712:      drawcell(rtype,coltype[rcol[k]],colmap[k],colmap5[k],mode2);
                    713:    }
                    714:    if (rowtype[jid]==2) {
                    715:       doc.document.writeln('</tr><tr>');
                    716:       for (k=0;k<=maxcol;k++) {
                    717:         drawcell(1,coltype[rcol[k]],colmap2[k],colmap5[k],mode2);
                    718:       }
                    719:       doc.document.writeln('</tr><tr>');
                    720:       for (k=0;k<=maxcol;k++) {
                    721:         drawcell(1,coltype[rcol[k]],colmap3[k],colmap5[k],mode2);
                    722:       }
                    723:    }     
                    724:  }
                    725:  doc.document.writeln('</tr>');
                    726: }
                    727: 
                    728: // ------------------------------------------------------------- Draw the table
                    729:          
                    730: function draw (mode,mode2) {
                    731:    if (mode=='debug') {  
                    732:       var options="scrollbars=1,resizable=1,menubar=0,width=200,height=300";
                    733:       deb=open("","debout",options);
                    734:       deb.document.clear();
                    735:       deb.document.writeln('<html><body bgcolor="#FFFFFF">');
                    736: 
                    737:       for (k=0;k<obj.length;k++) { deb.document.writeln(k+' - '+obj[k]+'<br>'); }
                    738:       deb.document.writeln('<hr>Cols: '+col+'<hr>Rows: '+row+'<hr>');
                    739:       for (kr=0;kr<=maxrow;kr++) {
                    740:          kid=findrow(kr);
                    741:          maprow(kid,-1,0);
                    742:          deb.document.writeln(kid+' : '+colmap+' '+rowcont[kid]+"<br>");
                    743:       }
                    744: 
                    745:       deb.document.writeln('</body></html>');
                    746:       deb.document.close();
                    747:    }
                    748: 
                    749:    for (k=0;k<=maxrow;k++) { rrow[row[k]]=k; }
                    750:    for (k=0;k<=maxcol;k++) { rcol[col[k]]=k; }
                    751:    rh[1]=30;
                    752:    rh[2]=60;
                    753:    cw[1]=30;
                    754:    cw[2]=60;
                    755:    var options="scrollbars=1,resizable=1,menubar=0,width=200,height=300";
                    756:    doc=open("","mapout",options);
                    757:    doc.document.clear();
                    758:    doc.document.writeln('<html><body bgcolor="#AAFFAA">');
                    759:    doc.document.writeln('<table cellpadding=0 cellspacing=0 border=0>');
                    760: 
                    761:    for (kr=0;kr<=maxrow;kr++) { drawrow(rrow[kr],mode2); } 
                    762: 
                    763:    doc.document.writeln('</table>');
                    764:    doc.document.writeln('</body></html>');
                    765:    doc.document.close();
                    766: 
                    767: }
                    768: 
                    769: function main() {
                    770:    row[0]=0;
                    771:    row[1]=1;
                    772:    row[2]=2;
                    773:    rowcont[0]='5:4';
                    774:    rowtype[0]=2;
                    775:    rowcont[1]='3';
                    776:    rowtype[1]=2;
                    777:    rowcont[2]='7';
                    778:    rowtype[2]=2;
                    779:    insertcol(0,1);
                    780:    insertcol(0,1);
                    781:    insertcol(0,1);
                    782:    insertcol(0,1);
                    783:    insertcol(0,1);
                    784:    insertcol(0,1);
                    785:    insertcol(0,1);
                    786:    insertcol(0,1);
                    787:    insertcol(0,1);
                    788:    insertcol(0,1);
                    789:    insertcol(0,1);
                    790:    insertcol(0,1);
                    791:    insertcol(0,1);
                    792:    swap=col[8];
                    793:    col[8]=col[3];
                    794:    col[3]=swap;
                    795:    swap=col[6];
                    796:    col[6]=col[4];
                    797:    col[4]=swap;
                    798:    maxrow=2;
                    799:    obj[3]='b&1&4:0:0:0';
                    800:    coltype[4]=2;
                    801:    obj[4]='b&0&8:0:0:0';
                    802:    coltype[8]=2;
                    803:    obj[5]='b&0&2:0:0:0';
                    804:    coltype[2]=2;
                    805:    obj[7]='b&2&5:0:0:0';
                    806:    coltype[5]=2;
                    807:    joinres(7,4);
                    808:    joinres(4,7);
                    809:    joinres(7,5);
                    810:    joinres(5,7);
                    811:    joinres(7,7);
                    812:    joinres(4,5);
                    813:    joinres(5,5);
                    814:    joinres(3,4);
                    815:    joinres(3,7);
                    816:    joinres(5,3);
                    817:    joinres(7,3);
                    818:    joinres(4,3);
                    819:    draw('debug','edit');
                    820: }
                    821: 
                    822: </script>
                    823: </head>
                    824: 
1.2     ! harris41  825: <! body onLoad="main()">
        !           826: <body>
        !           827: Welcome to the Resource Assembly Tool.<P>Your browser must be javascript enabled to use this tool.  Enjoy!
1.1       albertel  828: </body>
                    829: 
                    830: </html>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>