void CIBViewApp::CGDCountxy(void)
{
int *ipuse, *xp, cox,coy,xlen, strskip;
int xdateoffset, ydateoffset;
int idxx, idxy;
char *cp, *cp2, offsetv;
void *xptr, *yptr;
cp = DataChainStart[theCurrentView->BufferNumber];
offsetv = (theCurrentView->BufferNumber + 1) * SO_charp;
cox = CalcingColOffset[0];coy = CalcingColOffset[1];
switch (DataColType[theCurrentView->GraphCol[0].DataColNum])
{
case COL_TYPE_STRING: _asm{ lea eax, dtstringx
mov xptr,eax} break;
case COL_TYPE_INT:
_asm{ lea eax, dtintx
mov xptr,eax} break;
case COL_TYPE_CURRENCY:
_asm{ lea eax, dtcurrencyx
mov xptr,eax} break;
case COL_TYPE_FLOAT:
_asm{ lea eax, dtfloatx
mov xptr,eax} break;
case COL_TYPE_DATE_AUTO:
switch(theCurrentView->GraphCol[0].DateType)
{
case GRAPH_DATE_OP_DOW :
_asm{ lea eax, dtdate1x
mov xptr,eax} xdateoffset = SO_double+SO_int;break;
case GRAPH_DATE_OP_DOM :
_asm{ lea eax, dtdate1x
mov xptr,eax} xdateoffset = SO_double+SO_int+SO_char;break;
case GRAPH_DATE_OP_WEEK :
_asm{ lea eax, dtdate1x
mov xptr,eax}xdateoffset = SO_double+SO_int+(SO_char*2);break;
case GRAPH_DATE_OP_MONTH :
_asm{ lea eax, dtdate1x
mov xptr,eax} xdateoffset = SO_double+SO_int+(SO_char*3);break;
case GRAPH_DATE_OP_YEAR :
_asm{ lea eax, dtdateyearx
mov xptr,eax}xdateoffset = SO_double+SO_int + (SO_char * 4);break;
case GRAPH_DATE_OP_DATE :
_asm{ lea eax, dtdateabsx
mov xptr,eax} break;
}
}
switch (DataColType[theCurrentView->GraphCol[1].DataColNum])
{
case COL_TYPE_STRING: _asm{ lea eax, dtstringy
mov yptr,eax} break;
case COL_TYPE_INT:
_asm{ lea eax, dtinty
mov yptr,eax} break;
case COL_TYPE_CURRENCY:
_asm{ lea eax, dtcurrencyy
mov yptr,eax} break;
case COL_TYPE_FLOAT:
_asm{ lea eax, dtfloaty
mov yptr,eax} break;
case COL_TYPE_DATE_AUTO:
switch(theCurrentView->GraphCol[1].DateType)
{
case GRAPH_DATE_OP_DOW :
_asm{ lea eax, dtdate1y
mov yptr,eax} ydateoffset = SO_double+SO_int;break;
case GRAPH_DATE_OP_DOM :
_asm{ lea eax, dtdate1y
mov yptr,eax} ydateoffset = SO_double+SO_int+SO_char;break;
case GRAPH_DATE_OP_WEEK :
_asm{ lea eax, dtdate1y
mov yptr,eax} ydateoffset = SO_double+SO_int+(SO_char*2);break;
case GRAPH_DATE_OP_MONTH :
_asm{ lea eax, dtdate1y
mov yptr,eax} ydateoffset = SO_double+SO_int+(SO_char*3);break;
case GRAPH_DATE_OP_YEAR :
_asm{ lea eax, dtdateyeary
mov yptr,eax} ydateoffset = SO_double+SO_int + (SO_char * 4);break;
case GRAPH_DATE_OP_DATE :
_asm{ lea eax, dtdateabsy
mov yptr,eax} break;
}
break;
default:ASSERT(0); break;
}
xlen = theCurrentView->RangeCount[theCurrentView->GraphCol[1].DataColNum];
while(cp)
{
_asm{ call xptr}
_asm { call yptr}
ipuse = CalcingIxTotsBuff + (idxx * xlen) + idxy;
*ipuse = *ipuse + 1;
cp = * ((char **) (cp+offsetv));
}
return;
dtstringx:
strskip = *((short *) (cp + cox));
xp = (int *) ((cp + strskip));
idxx = *xp;
_asm{ ret}
dtintx:
dtcurrencyx:
dtfloatx:
xp = (int *) (cp + cox);
idxx = *xp;
_asm{ ret}
dtdate1x:
cp2 = cp + cox;
idxx = (*(cp2+xdateoffset)) - 1;
_asm{ ret}
dtdateyearx:
cp2 = (cp + cox);
idxx = *((int *) (cp2+xdateoffset));
_asm{ ret}
dtdateabsx:
xp = (int *) (cp + cox);
idxx = *xp;
_asm{ ret}
dtstringy:
strskip = *((short *) (cp + coy));
xp = (int *) ((cp + strskip));
idxy = *xp;
_asm{ ret}
dtinty:
dtcurrencyy:
dtfloaty:
xp = (int *) (cp + coy);
idxy = *xp;
_asm{ ret}
dtdate1y:
cp2 = cp + coy;
idxy = (*(cp2+ydateoffset)) - 1;
_asm{ ret}
dtdateyeary:
cp2 = (cp + coy);
idxy = *((int *) (cp2+ydateoffset));
_asm{ ret}
dtdateabsy:
xp = (int *) (cp + coy);
idxy = *xp;
_asm{ ret}
}