void fwav_stran_xyz(fwav fw,float *b1,int dx,int dy,int dz)
{
    int dx0,dy0,dz0;

    if (dx<=DX && dy<=DY && dz<=DZ) return;

    dx0=dx; dy0=dy; dz0=dz;
    if (dx>DX) dx=HALF(dx); if (dy>DY) dy=HALF(dy); if (dz>DZ) dz=HALF(dz);
    fwav_stran_xyz(fw,b1,dx,dy,dz);
    if (dz0>DZ) fwav_stran_z(fw,b1,dx ,dy ,dz0);
    if (dy0>DY) fwav_stran_y(fw,b1,dx ,dy0,dz0);
    if (dx0>DX) fwav_stran_x(fw,b1,dx0,dy0,dz0);
}
void fwav_stran_x(fwav fw,float *b1,int dx,int dy,int dz)
{
    int j,dx2,dxv,y,z,d;
    float a0,a2,v0,v1;
    float *ba,*bu,*bv;

    dx2=HALF(dx); d=dz*dy*dx2; dxv=dx>>1;
    bu=fw->bt; ba=b1; for (j=d;j--;) *bu++ = *ba++;
    for (z=0;z<dz;z++) {
        for (y=0;y<dy;y++) {
            ba=fw->bt+(z*dy+y)*dx2; bu=fw->burow;
            for (j=dx2;j--;) *bu++ = *ba++;
            ba=b1+(d+(z*dy+y)*dxv); bv=fw->bvrow;
            for (j=dxv;j--;) *bv++ = *ba++;

            ba=b1+(z*dy+y)*dx; bu=fw->burow; bv=fw->bvrow;
            v0=0.0; v1= *bv++;
            *ba++ =a2=(*bu++)-0.25*(v0+v1);
            for (j=dxv-1;j--;) {
                a0=a2; v0=v1;
                v1= *bv++; a2=(*bu++)-0.25*(v0+v1);
                *ba++ =0.5*(a0+a2)+v0;
                *ba++ =a2;
            }
            if (dx&1) {
                a0=a2; v0=v1;
                v1=0.0; a2=(*bu++)-0.25*(v0+v1);
                *ba++ =0.5*(a0+a2)+v0;
                *ba++ =a2;
            }else { *ba++ =0.5*(a2+a2)+v1; }
        }
    }
}
Exemple #3
0
void fwav_atran_y(fwav fw,float *b0,int dx,int dy,int dz)
{
    int j,dy2,y,z;
    float *ba0,*ba1,*ba2,*bb,v1,td0,td1;

    td0=fw->td0; td1=fw->td1;
    dy2=HALF(dy); bb=fw->bt;
    for (z=0;z<dz;z++) {
        for (y=0;y+1<dy;y+=2) {
            ba0=b0+(z*dy+y)*dx;
            ba1=ba0+dx;
            ba2=(y+2<dy?ba1+dx:ba0);
            for (j=dx;j--;)
                { v1=(*ba1++)-0.5*((*ba0++)+(*ba2++)); THRESH(v1) *bb++ =v1; }
        }
    }
    bb=b0;
    for (z=0;z<dz;z++) {
        for (y=0;y<dy;y+=2) {
            ba1=b0+(z*dy+y)*dx;
            ba2=(y+1<dy?fw->bt+(z*(dy>>1)+(y>>1))*dx:fw->zero);
            ba0=(y?fw->bt+(z*(dy>>1)+(y>>1)-1)*dx:fw->zero);
            for (j=dx;j--;) *bb++ =(*ba1++)+0.25*((*ba0++)+(*ba2++));
        }
    }
    j=dx*dy*dz-(bb-b0); ba0=fw->bt; while (j--) *bb++ = *ba0++;
}
void fwav_stran_y(fwav fw,float *b1,int dx,int dy,int dz)
{
    int j,dy2,y,z,d,dyv,y2;
    float *ba0,*ba1,*ba2,*bb;

    dy2=HALF(dy); d=dx*dy2*dz; dyv=dy>>1;
    bb=fw->bt; ba1=b1; for (j=dz*dy*dx;j--;) *bb++ = *ba1++;
    for (z=0;z<dz;z++) {
        for (y=0;y<dy;y+=2) {
            bb=b1+(z*dy+y)*dx;
            y2=y>>1;
            ba1=fw->bt+(z*dy2+y2)*dx;
            ba2=(y2>=dyv?fw->zero:fw->bt+(d+(z*dyv+y2)*dx));
            ba0=(y?fw->bt+(d+(z*dyv+y2-1)*dx):fw->zero);
            for (j=dx;j--;) *bb++ =(*ba1++)-0.25*((*ba0++)+(*ba2++));
        }
    }
    for (z=0;z<dz;z++) {
        for (y=0;y+1<dy;y+=2) {
            bb=fw->bt+(d+(z*dyv+(y>>1))*dx);
            ba0=b1+(z*dy+y)*dx;
            ba1=ba0+dx;
            ba2=(y+2<dy?ba1+dx:ba0);
            for (j=dx;j--;) *ba1++ =(*bb++)+0.5*((*ba0++)+(*ba2++));
        }
    }
}
void fwav_stran_z(fwav fw,float *b1,int dx,int dy,int dz)
{
    int j,dz2,y,z,dd,d,dzv,z2;
    float *ba0,*ba1,*ba2,*bb;

    dz2=HALF(dz); dd=dx*dy; d=dx*dy*dz2; dzv=dz>>1;
    bb=fw->bt; ba1=b1; for (j=dz*dy*dx;j--;) *bb++ = *ba1++;
    for (z=0;z<dz;z+=2) {
        for (y=0;y<dy;y++) {
            z2=z>>1;
            bb=b1+(z*dy+y)*dx;
            ba1=fw->bt+(z2*dy+y)*dx;
            ba2=(z2>=dzv?fw->zero:fw->bt+(d+(z2*dy+y)*dx));
            ba0=(z?fw->bt+(d+((z2-1)*dy+y)*dx):fw->zero);
            for (j=dx;j--;) *bb++ =(*ba1++)-0.25*((*ba0++)+(*ba2++));
        }
    }
    for (z=0;z+1<dz;z+=2) {
        for (y=0;y<dy;y++) {
            bb=fw->bt+(d+((z>>1)*dy+y)*dx);
            ba0=b1+(z*dy+y)*dx;
            ba1=ba0+dd;
            ba2=(z+2<dz?ba1+dd:ba0);
            for (j=dx;j--;) *ba1++ =(*bb++)+0.5*((*ba0++)+(*ba2++));
        }
    }
}
Exemple #6
0
void CBarShader::FillRect(CDC *dc, LPRECT rectSpan, float fRed, float fGreen,
						  float fBlue, bool bFlat) {
	if(bFlat) {
		COLORREF color = RGB((int)(fRed + .5f), (int)(fGreen + .5f), (int)(fBlue + .5f));
		dc->FillRect(rectSpan, &CBrush(color));
	} else {
		if (m_Modifiers == NULL || (m_used3dlevel!=thePrefs.Get3DDepth() && !m_bIsPreview) )
			BuildModifiers();
		RECT rect = *rectSpan;
		int iTop = rect.top;
		int iBot = rect.bottom;
		int iMax = HALF(m_iHeight);
		for(int i = 0; i < iMax; i++) {
			CBrush cbNew(RGB((int)(fRed * m_Modifiers[i] + .5f), (int)(fGreen * m_Modifiers[i] + .5f), (int)(fBlue * m_Modifiers[i] + .5f)));
			
			rect.top = iTop + i;
			rect.bottom = iTop + i + 1;
			dc->FillRect(&rect, &cbNew);

			rect.top = iBot - i - 1;
			rect.bottom = iBot - i;
			dc->FillRect(&rect, &cbNew);
		}
	}
}
Exemple #7
0
void fwav_atran_z(fwav fw,float *b0,int dx,int dy,int dz)
{
    int j,dz2,y,z,dd,d;
    float *ba0,*ba1,*ba2,*bb,v1,td0,td1;

    td0=fw->td0; td1=fw->td1;
    dz2=HALF(dz); dd=dx*dy; d=dx*dy*dz2;
    bb=fw->bt;
    for (z=0;z+1<dz;z+=2) {
        for (y=0;y<dy;y++) {
            ba0=b0+(z*dy+y)*dx;
            ba1=ba0+dd;
            ba2=(z+2<dz?ba1+dd:ba0);
            for (j=dx;j--;)
                { v1=(*ba1++)-0.5*((*ba0++)+(*ba2++)); THRESH(v1) *bb++ =v1; }
        }
    }
    bb=b0;
    for (z=0;z<dz;z+=2) {
        for (y=0;y<dy;y++) {
            ba1=b0+(z*dy+y)*dx;
            ba2=(z+1<dz?fw->bt+((z>>1)*dy+y)*dx:fw->zero);
            ba0=(z?fw->bt+(((z>>1)-1)*dy+y)*dx:fw->zero);
            for (j=dx;j--;) *bb++ =(*ba1++)+0.25*((*ba0++)+(*ba2++));
        }
    }
    j=dx*dy*dz-(bb-b0); ba0=fw->bt; while (j--) *bb++ = *ba0++;
}
void fwav_atran(fwav fw,float *v)
{
    int dx,dy,dz;
    float *b1,*td;

    fw->v=v;
    dx=fw->xs; dy=fw->ys; dz=fw->zs; b1=fw->v;

    
#define TD { fw->td0= -td[0]; fw->td1=td[0]; td++; }

    td=(fw->thresh?fw->thresh:fw->zero);
    while (dx>DX || dy>DY || dz>DZ) {
        TD if (dx>DX) { fwav_atran_x(fw,b1,dx,dy,dz); dx=HALF(dx); }
        TD if (dy>DY) { fwav_atran_y(fw,b1,dx,dy,dz); dy=HALF(dy); }
        TD if (dz>DZ) { fwav_atran_z(fw,b1,dx,dy,dz); dz=HALF(dz); }
    }
}
Exemple #9
0
void buttons_runTest() {
  buttons_init();  // Initialize buttons
  display_init();  // Initialize display, which sets Rotation = 1 by default
  display_fillScreen(DISPLAY_BLACK); // blank the screen
  display_setTextColor(DISPLAY_BLACK);  // Change text color to black
  display_setTextSize(BUTTONS_TEXT_SIZE); // Make text larger

  // Set the values of the global variables
  x_max = display_width();
  y_max = display_height();

  // Set the values of screen positions
  x_fourth = FOURTH(x_max);
  x_half = HALF(x_max);
  x_three_fourths = THREE_FOURTHS(x_max);
  y_fourth = FOURTH(y_max);
  y_half = HALF(y_max);
  y_three_fourths = THREE_FOURTHS(y_max);

  // Do an initial read of button values
  int32_t buttonValues = buttons_read();

  // Until all 4 BTNS are pressed simultaneously, write info to the LCD
  while (buttonValues != BUTTONS_ALL_BTNS_ON) {

    // Draw the Rects/Text on the LCD corresponding to current buttons
    buttons_write_LCD(buttonValues);

    // Poll new value of buttons
    buttonValues = buttons_read();
  }

  // After all buttons are pushed simultaneously, finish test.
  display_fillScreen(DISPLAY_BLACK);  // blank screen
  display_setTextColor(DISPLAY_CYAN); // change text color
  display_setCursor(0,0);  // reset cursor to origin
  display_println("Button Test Finished!");  // print that the test is complete
}
Exemple #10
0
void CBarShader::FillRect(CDC& dc, LPCRECT rectSpan, COLORREF crColor)
{
	if(!crColor)
		dc.FillSolidRect(rectSpan, crColor);
	else
{
		if (m_pdblModifiers == NULL)
			BuildModifiers();

		double	dblRed = GetRValue(crColor), dblGreen = GetGValue(crColor), dblBlue = GetBValue(crColor);
		double	dAdd, dMod;

		if (m_used3dlevel > 5)		//Cax2 aqua bar
		{
			dMod = 1.0 - .025 * (256 - m_used3dlevel);		//variable central darkness - from 97.5% to 87.5% of the original colour...
			dAdd = 255;

			dblRed = dMod * dblRed - dAdd;
			dblGreen = dMod * dblGreen - dAdd;
			dblBlue = dMod * dblBlue - dAdd;
		}
		else
			dAdd = 0;

		RECT		rect;
		int			iTop = rectSpan->top, iBot = rectSpan->bottom;
		double		*pdCurr = m_pdblModifiers, *pdLimit = pdCurr + HALF(m_iHeight);

		rect.right = rectSpan->right;
		rect.left = rectSpan->left;

		for (; pdCurr < pdLimit; pdCurr++)
		{
			crColor = RGB( static_cast<int>(dAdd + dblRed * *pdCurr),
				static_cast<int>(dAdd + dblGreen * *pdCurr),
				static_cast<int>(dAdd + dblBlue * *pdCurr) );
			rect.top = iTop++;
			rect.bottom = iTop;
			dc.FillSolidRect(&rect, crColor);

			rect.bottom = iBot--;
			rect.top = iBot;
		//	Fast way to fill, background color is already set inside previous FillSolidRect
			dc.FillSolidRect(&rect, crColor);
		}
	}
}
Exemple #11
0
void CBarShader::BuildModifiers()
{
	if (m_pdblModifiers != NULL)
	{
		delete[] m_pdblModifiers;
		m_pdblModifiers = NULL; // 'new' may throw an exception
	}

	static const double dDepths[5] = { 5.5, 4.0, 3.0, 2.50, 2.25 };		//aqua bar - smoother gradient jumps...
	double	depth = dDepths[((m_used3dlevel > 5) ? (256 - m_used3dlevel) : m_used3dlevel) - 1];
	uint32_t dwCount = HALF(static_cast<uint32_t>(m_iHeight));
	double piOverDepth = PI / depth;
	double base = PI / 2 - piOverDepth;
	double increment = piOverDepth / (dwCount - 1);

	m_pdblModifiers = new double[dwCount];
	for (uint32_t i = 0; i < dwCount; i++, base += increment)
		m_pdblModifiers[i] = sin(base);
}
Exemple #12
0
void CBarShader::BuildModifiers() {
	delete[] m_Modifiers;
	m_Modifiers = NULL; // 'new' may throw an exception

	if (!m_bIsPreview) 
		m_used3dlevel=thePrefs.Get3DDepth();

	// Barry - New property page slider to control depth of gradient

	// Depth must be at least 2
	// 2 gives greatest depth, the higher the value, the flatter the appearance
	// m_Modifiers[count-1] will always be 1, m_Modifiers[0] depends on the value of depth
	
	int depth = (7-m_used3dlevel);
	int count = HALF(m_iHeight);
	double piOverDepth = M_PI/depth;
	double base = piOverDepth * ((depth / 2.0) - 1);
	double increment = piOverDepth / (count - 1);

	m_Modifiers = new float[count];
	for (int i = 0; i < count; i++)
		m_Modifiers[i] = (float)(sin(base + i * increment));
}
void fwav_atran_x(fwav fw,float *ba0,int dx,int dy,int dz)
{
    int j,dx2,y,z;
    float a0,a1,a2,v0,v1;
    float *ba,*bu,*bv,td0,td1;

    td0=fw->td0; td1=fw->td1;
    dx2=HALF(dx); bu=ba0; ba=ba0; bv=fw->bt;
    for (z=0;z<dz;z++) {
        for (y=0;y<dy;y++) {
            v1=0.0; a2= *ba++;
            for (j=dx2-1;j--;) {
                a0=a2; v0=v1; a1= *ba++; a2= *ba++;
                v1=a1-0.5*(a0+a2); THRESH(v1) *bv++ =v1;
                *bu++ =a0+0.25*(v0+v1);
            }
            v0=v1;
            if (dx&1) v1=0.0;
            else { a1= *ba++; v1=a1-0.5*(a2+a2); THRESH(v1) *bv++ =v1; }
            *bu++ =a2+0.25*(v0+v1);
        }
    }
    j=bv-fw->bt; bv=fw->bt; while (j--) *bu++ = *bv++;
}
Exemple #14
0
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	HWND msgwnd = CreateWindow(L"STATIC", L"Shiftfocus window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, GetModuleHandle(NULL), 0);

#	define MAKE(x) (RegisterHotKey(msgwnd, x, MOD_CONTROL | MOD_WIN, x) == 0)
	if ((msgwnd == NULL) || MAKE(VK_LEFT)
						 || MAKE(VK_RIGHT)
						 || MAKE(VK_UP)
						 || MAKE(VK_DOWN))
	{
		MessageBox(msgwnd, L"Unable to register hotkeys, exiting.", L"Error", MB_ICONERROR | MB_OK);
		DestroyWindow(msgwnd);
		return 1;
	}

	MSG msg;
	BOOL ret;
	while (0 != (ret = GetMessage(&msg, msgwnd, 0, 0))) {
		if (-1 == ret)
			return 1;

		switch (msg.message) {
		case WM_DESTROY:
			PostQuitMessage(0);
			break;

		case WM_HOTKEY: {
			RECT loc = {};
			HWND fg = GetForegroundWindow();
			HWND desktop = getDesktopWindow();
			GetWindowRect(fg, &loc);
		
			POINT p = {};
			for (
				int distance = 10;
				MonitorFromPoint(p, MONITOR_DEFAULTTONULL);
				distance += 10) {
				
				switch (msg.wParam)
				{
#					define HALF(x,y) (((y)-(x))/2+(x))
					case VK_LEFT:
						p.x=loc.left-distance;
						p.y=HALF(loc.top,loc.bottom);
						break;
					case VK_RIGHT:
						p.x=loc.right+distance;
						p.y=HALF(loc.top,loc.bottom);
						break;
					case VK_UP:
						p.y=loc.top-distance;
						p.x=HALF(loc.left,loc.right);
						break;
					case VK_DOWN:
						p.y=loc.bottom+distance;
						p.x=HALF(loc.left,loc.right);
						break;
					default:
						MessageBeep(MB_ICONERROR);
				}

				HWND n = ChildWindowFromPoint(GetDesktopWindow(), p);
				if (NULL == n)
					MessageBeep(MB_ICONASTERISK);
				else
				{
					if (desktop == n)
						continue;

					if (!SetForegroundWindow(n))
						MessageBeep(MB_ICONERROR);
					break;
				}
			}
		} break;
		}

		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
Exemple #15
0
ldcomplex
cpowl(ldcomplex z, ldcomplex w) {
	ldcomplex ans;
	long double x, y, u, v, t, c, s, r;
	long double t1, t2, t3, t4, x1, x2, y1, y2, u1, v1, b[4], w1, w2;
	int ix, iy, hx, hy, hv, hu, iu, iv, i, j, k;

	x = LD_RE(z);
	y = LD_IM(z);
	u = LD_RE(w);
	v = LD_IM(w);
	hx = HI_XWORD(x);
	hy = HI_XWORD(y);
	hu = HI_XWORD(u);
	hv = HI_XWORD(v);
	ix = hx & 0x7fffffff;
	iy = hy & 0x7fffffff;
	iu = hu & 0x7fffffff;
	iv = hv & 0x7fffffff;

	j = 0;
	if (v == zero) {	/* z**(real) */
		if (u == one) {	/* (anything) ** 1  is itself */
			LD_RE(ans) = x;
			LD_IM(ans) = y;
		} else if (u == zero) {	/* (anything) ** 0  is 1 */
			LD_RE(ans) = one;
			LD_IM(ans) = zero;
		} else if (y == zero) {	/* real ** real */
			LD_IM(ans) = zero;
			if (hx < 0 && ix < hiinf && iu < hiinf) {
			/* -x ** u  is exp(i*pi*u)*pow(x,u) */
				r = powl(-x, u);
				sincospil(u, &s, &c);
				LD_RE(ans) = (c == zero)? c: c * r;
				LD_IM(ans) = (s == zero)? s: s * r;
			} else
				LD_RE(ans) = powl(x, u);
		} else if (x == zero || ix >= hiinf || iy >= hiinf) {
			if (isnanl(x) || isnanl(y) || isnanl(u))
				LD_RE(ans) = LD_IM(ans) = x + y + u;
			else {
				if (x == zero)
					r = fabsl(y);
				else
					r = fabsl(x) + fabsl(y);
				t = atan2pil(y, x);
				sincospil(t * u, &s, &c);
				LD_RE(ans) = (c == zero)? c: c * r;
				LD_IM(ans) = (s == zero)? s: s * r;
			}
		} else if (fabsl(x) == fabsl(y)) {    /* |x| = |y| */
			if (hx >= 0) {
				t = (hy >= 0)? 0.25L : -0.25L;
				sincospil(t * u, &s, &c);
			} else if ((LAST(u) & 3) == 0) {
				t = (hy >= 0)? 0.75L : -0.75L;
				sincospil(t * u, &s, &c);
			} else {
				r = (hy >= 0)? u : -u;
				t = -0.25L * r;
				w1 = r + t;
				w2 = t - (w1 - r);
				sincospil(w1, &t1, &t2);
				sincospil(w2, &t3, &t4);
				s = t1 * t4 + t3 * t2;
				c = t2 * t4 - t1 * t3;
			}
			if (ix < 0x3ffe0000)	/* |x| < 1/2 */
				r = powl(fabsl(x + x), u) * exp2l(-0.5L * u);
			else if (ix >= 0x3fff0000 || iu < 0x400cfff8)
				/* |x| >= 1 or |u| < 16383 */
				r = powl(fabsl(x), u) * exp2l(0.5L * u);
			else   /* special treatment */
				j = 2;
			if (j == 0) {
				LD_RE(ans) = (c == zero)? c: c * r;
				LD_IM(ans) = (s == zero)? s: s * r;
			}
		} else
			j = 1;
		if (j == 0)
			return (ans);
	}
	if (iu >= hiinf || iv >= hiinf || ix >= hiinf || iy >= hiinf) {
		/*
		 * non-zero imag part(s) with inf component(s) yields NaN
		 */
		t = fabsl(x) + fabsl(y) + fabsl(u) + fabsl(v);
		LD_RE(ans) = LD_IM(ans) = t - t;
	} else {
		k = 0;	/* no scaling */
		if (iu > 0x7ffe0000 || iv > 0x7ffe0000) {
			u *= 1.52587890625000000000e-05L;
			v *= 1.52587890625000000000e-05L;
			k = 1;	/* scale u and v by 2**-16 */
		}
		/*
		 * Use similated higher precision arithmetic to compute:
		 * r = u * log(hypot(x, y)) - v * atan2(y, x)
		 * q = u * atan2(y, x) + v * log(hypot(x, y))
		 */

		t1 = __k_clog_rl(x, y, &t2);
		t3 = __k_atan2l(y, x, &t4);
		x1 = t1; HALF(x1);
		y1 = t3; HALF(y1);
		u1 = u; HALF(u1);
		v1 = v; HALF(v1);
		x2 = t2 - (x1 - t1);    /* log(hypot(x,y)) = x1 + x2 */
		y2 = t4 - (y1 - t3);    /* atan2(y,x) = y1 + y2 */
		/* compute q = u * atan2(y, x) + v * log(hypot(x, y)) */
		if (j != 2) {
			b[0] = u1 * y1;
			b[1] = (u - u1) * y1 + u * y2;
			if (j == 1) {	/* v = 0 */
				w1 = b[0] + b[1];
				w2 = b[1] - (w1 - b[0]);
			} else {
				b[2] = v1 * x1;
				b[3] = (v - v1) * x1 + v * x2;
				w1 = sum4fpl(b, &w2);
			}
			sincosl(w1, &t1, &t2);
			sincosl(w2, &t3, &t4);
			s = t1 * t4 + t3 * t2;
			c = t2 * t4 - t1 * t3;
			if (k == 1)	/* square j times */
				for (i = 0; i < 10; i++) {
					t1 = s * c;
					c = (c + s) * (c - s);
					s = t1 + t1;
				}
		}
		/* compute r = u * (t1, t2) - v * (t3, t4) */
		b[0] = u1 * x1;
		b[1] = (u - u1) * x1 + u * x2;
		if (j == 1) {   /* v = 0 */
			w1 = b[0] + b[1];
			w2 = b[1] - (w1 - b[0]);
		} else {
			b[2] = -v1 * y1;
			b[3] = (v1 - v) * y1 - v * y2;
			w1 = sum4fpl(b, &w2);
		}
		/* scale back unless w1 is large enough to cause exception */
		if (k != 0 && fabsl(w1) < 20000.0L) {
			w1 *= 65536.0L; w2 *= 65536.0L;
		}
		hx = HI_XWORD(w1);
		ix = hx & 0x7fffffff;
		/* compute exp(w1 + w2) */
		k = 0;
		if (ix < 0x3f8c0000) /* exp(tiny < 2**-115) = 1 */
			r = one;
		else if (ix >= 0x400c6760) /* overflow/underflow */
			r = (hx < 0)? tiny * tiny : huge * huge;
		else {  /* compute exp(w1 + w2) */
			k = (int) (invln2 * w1 + ((hx >= 0)? 0.5L : -0.5L));
			t1 = (long double) k;
			t2 = w1 - t1 * ln2hil;
			t3 = w2 - t1 * ln2lol;
			r = expl(t2 + t3);
		}
		if (c != zero) c *= r;
		if (s != zero) s *= r;
		if (k != 0) {
			c = scalbnl(c, k);
			s = scalbnl(s, k);
		}
		LD_RE(ans) = c;
		LD_IM(ans) = s;
	}
	return (ans);
}
Exemple #16
0
void changeMotion()
{
  //------------------------------------------------------------------------------
  // change motion based on current cat state
  
  // Author: Lingxiao Zheng
  // Date: 09/29/2015

  //------------------------------------------------------------------------------
  switch (Car_State)
    {
    case 0: // pause 0.5s
    case 2:
    case 4:
    case 6:
    case 8:
    case 10:
      if (resetTimerA0)
	changeTimerA0Interval(TA0_INTERVAL_0_5s);

      stop();
      break;
      
    case 1: // move forward until BLK_LN
      if (!startADC)
	startADC=TRUE;
     
      move_forward();
      break;
      
    case 3: // move reverse until BLK_LN
      move_reverse();

      // recording time
      if (!isRecording)
	startRecording();
      
      if (!startADC)
	{
	  five_msec_sleep(SLEEP_1s/2);
          startADC=TRUE;
	}
      break;
       
    case 5: // go forward for half of time going reverse
      if (resetTimerA0)
        changeTimerA0Interval(TA0_INTERVAL_0_1s*HALF(getRecording()));
      
      move_forward();
      break;
      
    case 7: // spin clockwise 
      if (resetTimerA0)
	changeTimerA0Interval(TA0_INTERVAL_3s);

      spin_clockwise();
      break;
      
    case 9: // spin counter clockwise 
      if (resetTimerA0)
	changeTimerA0Interval(TA0_INTERVAL_5s);

      spin_counterclock();
      break;
      
    default: // done, disable all ISR
      TA0CTL |= MC__STOP;
      ADC10IE &= ~ADC10IE0;

      while(ALWAYS)
	LPM4;
    }
}
Exemple #17
0
void
profiler(struct monprof *mpp)
{
    struct pdata *current, *base;
    int nmem;

    if(prof_Enabled == 0) {
        return;
    }

    if(mpp->type & MONPROF_FUNCLOG) {
        nmem = prof_FuncTot;
        base = prof_FuncTbl;
        while(nmem) {
            current = &base[HALF(nmem)];
            if(mpp->pc < current->data) {
                nmem = HALF(nmem);
            } else if(mpp->pc > current->data) {
                if(mpp->pc < (current+1)->data) {
                    current->pcount++;
                    goto tidlog;
                } else {
                    base = current + 1;
                    nmem = (HALF(nmem)) - (nmem ? 0 : 1);
                }
            } else {
                current->pcount++;
                goto tidlog;
            }
        }
        prof_BadSymCnt++;
    }
tidlog:
    if(mpp->type & MONPROF_TIDLOG) {
        /* First see if the tid is already in the table.  If it is,
         * increment the pcount.  If it isn't add it to the table.
         */
        nmem = prof_TidTally;
        base = prof_TidTbl;
        while(nmem) {
            current = &base[HALF(nmem)];
            if(mpp->tid < current->data) {
                nmem = HALF(nmem);
            } else if(mpp->tid > current->data) {
                base = current + 1;
                nmem = (HALF(nmem)) - (nmem ? 0 : 1);
            } else {
                current->pcount++;
                goto pclog;
            }
        }
        /* Since we got here, the tid must not be in the table, so
         * do an insertion into the table.  Items are in the table in
         * ascending order.
         */
        if(prof_TidTally == 0) {
            prof_TidTbl->pcount = 1;
            prof_TidTbl->data = mpp->tid;
            prof_TidTally++;
        } else if(prof_TidTally >= prof_TidTot) {
            prof_TidOverflow++;
        } else {
            current = prof_TidTbl + prof_TidTally - 1;
            while(current >= prof_TidTbl) {
                if(mpp->tid > current->data) {
                    current++;
                    current->pcount = 1;
                    current->data = mpp->tid;
                    break;
                } else {
                    *(current+1) = *current;
                    if(current == prof_TidTbl) {
                        current->pcount = 1;
                        current->data = mpp->tid;
                        break;
                    }
                }
                current--;
            }
            prof_TidTally++;
        }
    }
pclog:
    if(mpp->type & MONPROF_PCLOG) {
        ulong offset;

        if((mpp->pc > prof_PcTxtEnd) || (mpp->pc < prof_PcTxtBase)) {
            prof_PcOORCnt++;
        } else {
            offset = mpp->pc - prof_PcDelta;
            switch(prof_PcWidth) {
            case 2:
                (*(ushort *)offset)++;
                break;
            case 4:
                (*(ulong *)offset)++;
                break;
            }
        }
    }
    prof_CallCnt++;
    return;
}
Exemple #18
0
void fdct_int32( short *const In )
{
  short *pIn;
  int i;

  pIn = In;
  for(i=8; i>0; --i)
  {
    int mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, Spill;

      // even

    LOAD_BUTF(mm1,mm6, 1, 6, mm0, pIn);
    LOAD_BUTF(mm2,mm5, 2, 5, mm0, pIn);
    LOAD_BUTF(mm3,mm4, 3, 4, mm0, pIn);
    LOAD_BUTF(mm0,mm7, 0, 7, Spill, pIn);

    BUTF(mm1, mm2, Spill);
    BUTF(mm0, mm3, Spill);

    ROTATE(mm3, mm2, ROT6_C, ROT6_SmC, -ROT6_SpC, Spill, FIX-FPASS, HALF(FIX-FPASS));
    pIn[2] = mm3;
    pIn[6] = mm2;

    BUTF(mm0, mm1, Spill);
    pIn[0] = SHIFTL(mm0, FPASS);
    pIn[4] = SHIFTL(mm1, FPASS);


      // odd

    mm3 = mm5 + mm7;
    mm2 = mm4 + mm6;
    ROTATE(mm2, mm3,  ROT17_C, -ROT17_SpC, -ROT17_SmC, mm0, FIX-FPASS, HALF(FIX-FPASS));
    ROTATE(mm4, mm7, -ROT37_C,  ROT37_SpC,  ROT37_SmC, mm0, FIX-FPASS, HALF(FIX-FPASS));
    mm7 += mm3;
    mm4 += mm2;
    pIn[1] = mm7;
    pIn[7] = mm4;

    ROTATE(mm5, mm6, -ROT13_C,  ROT13_SmC,  ROT13_SpC, mm0, FIX-FPASS, HALF(FIX-FPASS));
    mm5 += mm3;
    mm6 += mm2;
    pIn[3] = mm6;
    pIn[5] = mm5;

    pIn  += 8;
  }

  pIn = In;
  for(i=8; i>0; --i)
  {
    int mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, Spill;

      // even

    LOAD_BUTF(mm1,mm6, 1*8, 6*8, mm0, pIn);
    LOAD_BUTF(mm2,mm5, 2*8, 5*8, mm0, pIn);
    BUTF(mm1, mm2, mm0);

    LOAD_BUTF(mm3,mm4, 3*8, 4*8, mm0, pIn);
    LOAD_BUTF(mm0,mm7, 0*8, 7*8, Spill, pIn);
    BUTF(mm0, mm3, Spill);

    ROTATE(mm3, mm2, ROT6_C, ROT6_SmC, -ROT6_SpC, Spill, 0,  HALF(FIX+FPASS+3));
    pIn[2*8] = (int16_t)SHIFTR(mm3,FIX+FPASS+3);
    pIn[6*8] = (int16_t)SHIFTR(mm2,FIX+FPASS+3);

    mm0 += HALF(FPASS+3) - 1;
    BUTF(mm0, mm1, Spill);
    pIn[0*8] = (int16_t)SHIFTR(mm0, FPASS+3);
    pIn[4*8] = (int16_t)SHIFTR(mm1, FPASS+3);

      // odd

    mm3 = mm5 + mm7;
    mm2 = mm4 + mm6;

    ROTATE(mm2, mm3,  ROT17_C, -ROT17_SpC, -ROT17_SmC, mm0, 0, HALF(FIX+FPASS+3));
    ROTATE2(mm4, mm7, -ROT37_C,  ROT37_SpC,  ROT37_SmC, mm0);
    mm7 += mm3;
    mm4 += mm2;
    pIn[7*8] = (int16_t)SHIFTR(mm4,FIX+FPASS+3);
    pIn[1*8] = (int16_t)SHIFTR(mm7,FIX+FPASS+3);

    ROTATE2(mm5, mm6, -ROT13_C,  ROT13_SmC,  ROT13_SpC, mm0);
    mm5 += mm3;
    mm6 += mm2;
    pIn[5*8] = (int16_t)SHIFTR(mm5,FIX+FPASS+3);
    pIn[3*8] = (int16_t)SHIFTR(mm6,FIX+FPASS+3);

    pIn++;
  }
}