void tile(void) { int n,i Client *c; /*-------------- count visible clients & note aspect ratio ones ---------*/ const int BORDER_CORR=2*BORDERPX;//correction for border float sumArcs[257]={0.0}; unsigned char sumIsArc[257]={0}; int selIdx=-1; for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next),++n) { sumArcs[n+1]=sumArcs[n]+c->aspectRatio; sumIsArc[n+1]=sumIsArc[n]+(c->aspectRatio>0); if(c==sel && !(sel->aspectRatio>0)){ selIdx=n; } } /*----------- figure how many stack columns we'll need ---------------*/ int noFullCols=noCols-stackColsUsed; /*------------- build tables of essential layout parameters ---------------*/ int colStartOn[MAX_COLS+1]; int widths=sw/noCols-BORDER_CORR; colStartOn[0]=0; for(i = 1; i <= noCols; ++i){ colStartOn[i]=colStartOn[i-1]+(i<=noFullCols?1:2); } colStartOn[noCols]=n; /*-------- use tables to assign actual client positions in layout ---------*/ int colNo = 0, cumHgt, cumWid=wax-BORDER_CORR,basicHgt; int bigClientEndIdx=0,beforeBCSizeMod,arcsOk,hgt; for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next),++i) { if(i == colStartOn[colNo]){ /* this client starts a new column */ cumHgt = way; int colBeforeStartNo=colStartOn[colNo]; cumWid+=widths[colNo] + BORDER_CORR; ++colNo; int colEndNo=colStartOn[colNo]; int noArcs=sumIsArc[colEndNo]-sumIsArc[colBeforeStartNo]; int hgtInArcs=(sumArcs[colEndNo]-sumArcs[colBeforeStartNo])*widths[colNo] +BORDER_CORR*noArcs;//ceil int wahVal=wah; if(cumWid+widths[colNo] >sw-sw/BARFRAC){//res space for bar wahVal-=bh; } arcsOk=(hgtInArcs=1){/*div by 0 faults even though we don't use result*/ basicHgt=bh; //TODO: fix for case of ARC clients starting column //in final column we mix things so selected client is one of biggest ones //TODO: fix case selected is ARC client bigClientEndIdx=colBeforeStartNo+((colNo!=noCols || selIdxismax = False; //SUBTLE: pushing back bigClientEndIdx after passed it doesn't matter if(arcsOk && c->aspectRatio>0){ hgt=(int)(widths[colNo]*c->aspectRatio); ++bigClientEndIdx; }else{ hgt=basicHgt+(i