t_real qtrn_get_norm(const t_qtrn *const q) { if (q->type == CARTHESIAN) return (XP(q) * XP(q) + YP(q) * YP(q) + ZP(q) * ZP(q) + WP(q) * WP(q)); else if (q->type == CYLINDRICAL) return (ZP(q) * ZP(q) + QRP(q) * QRP(q)); else return (QRHOP(q)); }
//{ Panel int panel_hitscan(panel_t *panel,int hx,int hy) { int idofs=PAN_ENT*panel->index+PAN_ENT; int wy=D(PANEL_WY+idofs); if(kbpanel&&panel->items[0].str_id==kbpanel) { if(kbpanel==KB_INSTALL) { if(kbitem[kbpanel]>2)kbitem[kbpanel]=2; return panel->index-8==kbitem[kbpanel]; } if(kbitem[kbpanel]>panel->items[0].action_id)kbitem[kbpanel]=panel->items[0].action_id; while(panel->items[kbitem[kbpanel]].type!=TYPE_CHECKBOX&& panel->items[kbitem[kbpanel]].type!=TYPE_BUTTON)kbitem[kbpanel]++; return kbitem[kbpanel]; } if(!wy)return -1; hx-=Xp(panel)+D(PNLITEM_OFSX); hy-=Yp(panel)+D(PNLITEM_OFSY); if(!expertmode&&panel->items[0].type==TYPE_GROUP_BREAK)return -2; if(hx<0||hy<0||hx>XP(panel)-D(PNLITEM_OFSX)*2)return -3; if(hy/wy>=panel->items[0].action_id)return -4; return hy/wy+1; }
t_qtrn qtrn_external_prod(const t_qtrn *const a, const t_real s) { t_qtrn ans; ans.type = a->type; if (a->type == CARTHESIAN) { X(ans) = XP(a) * s; Y(ans) = YP(a) * s; Z(ans) = ZP(a) * s; W(ans) = WP(a) * s; } else if (a->type == CYLINDRICAL) { QR(ans) = QRP(a) * s; QTHETA(ans) = QTHETAP(a); Z(ans) = ZP(a) * s; W(ans) = WP(a) * s; } else { QRHO(ans) = QRHOP(a) * s; QTHETA(ans) = QTHETAP(a); QPHI(ans) = QPHIP(a); W(ans) = WP(a) * s; } return (ans); }
void polar2carth(t_cmplx *v) { const t_real m = MODP(v); const t_real a = ARGP(v); XP(v) = m * cos(a); YP(v) = m * sin(a); v->type = CARTHESIAN; }
void carth2polar(t_cmplx *v) { const t_real x = XP(v); const t_real y = YP(v); MODP(v) = sqrt(x * x + y * y); ARGP(v) = atan2(y, x); v->type = POLAR; }
void xlog_destroy(xlog_h xlog) { xlog_s *xp = XP( xlog ) ; xlog_unlink( xp ) ; XL_FINI( xp ) ; free( xp->xl_id ) ; FREE( xp ) ; }
void spher2carth(t_vec3t *v) { const t_real r = RHOP(v); const t_real t = THETAP(v); const t_real p = PHIP(v); XP(v) = r * sin(p) * cos(t); YP(v) = r * sin(p) * sin(t); ZP(v) = r * cos(p); v->type = CARTHESIAN; }
void carth2spher(t_vec3t *v) { const t_real x = XP(v); const t_real y = YP(v); const t_real z = ZP(v); RHOP(v) = sqrt(x * x + y * y + z * z); THETAP(v) = atan2(y, x); PHIP(v) = acos(z / RHOP(v)); v->type = SPHERICAL; }
t_qtrn qtrn_get_conj(const t_qtrn *const q) { if (q->type == CARTHESIAN) return (NEW_QTRN(-XP(q), -YP(q), -ZP(q), WP(q))); else if (q->type == CYLINDRICAL) return ((t_qtrn){CYLINDRICAL, {{ QRP(q), QTHETAP(q) + M_PI, -ZP(q), WP(q)}}}); else return ((t_qtrn){SPHERICAL, {{ QRHOP(q), QTHETAP(q) + M_PI, QPHIP(q) + M_PI, WP(q)}}}); }
/* VARARGS4 */ void xlog_write( xlog_h xlog, char buf[], int len, int flags, ... ) { xlog_s *xp = XP( xlog ) ; va_list ap ; int status ; va_start( ap, flags ) ; status = XL_WRITE( xp, buf, len, flags, ap ) ; va_end( ap ) ; if ( status != XLOG_ENOERROR ) { CALLBACK( xp, status ) ; } }
void panel_draw_inv(panel_t *panel) { int x=Xp(panel),y=Yp(panel); int idofs=PAN_ENT*panel->index+PAN_ENT; int wy=D(PANEL_WY+idofs); int ofsy=D(PNLITEM_OFSY); RECT rect; if(!panel)return; rect.left=x; rect.top=y; rect.right=x+XP(panel); rect.bottom=y+(wy+1)*panel->items[0].action_id+ofsy*2; InvalidateRect(hMain,&rect,0); }
void qtrn_conj(t_qtrn *const q) { if (q->type == CARTHESIAN) { XP(q) *= -1; YP(q) *= -1; ZP(q) *= -1; } else if (q->type == CYLINDRICAL) { QTHETAP(q) += M_PI; ZP(q) *= -1; } else { QTHETAP(q) += M_PI; QPHIP(q) += M_PI; } }
/* VARARGS2 */ int xlog_control( xlog_h xlog, xlog_cmd_e cmd, ... ) { va_list ap ; xlog_s *xp = XP( xlog ) ; int status = XLOG_ENOERROR ; va_start( ap, cmd ) ; switch ( cmd ) { case XLOG_LINK: xlog_unlink( xp ) ; xlog_link( xp, va_arg( ap, xlog_s * ) ) ; xp->xl_callback_arg = va_arg( ap, void * ) ; break ; case XLOG_CALLBACK: xp->xl_callback = va_arg( ap, voidfunc ) ; break ; case XLOG_GETFLAG: case XLOG_SETFLAG: xlog_flags( xp, cmd, ap ) ; break ; /* * If the 'cmd' is not supported by the underlying logging object, * XL_CONTROL should return XLOG_EBADOP, if the 'cmd' returns * information to the caller (for example, XLOG_GETFD returns * a file descriptor, so if this command is applied to a xlog * that doesn't support it, it should return XLOG_EBADOP). * XL_CONTROL should return XLOG_ENOERROR otherwise. */ default: status = XL_CONTROL( xp, cmd, ap ) ; } va_end( ap ) ; return( status ) ; }
void qtrn_external_mult(t_qtrn *const a, const t_real s) { if (a->type == CARTHESIAN) { XP(a) *= s; YP(a) *= s; ZP(a) *= s; WP(a) *= s; } else if (a->type == CYLINDRICAL) { QRP(a) *= s; ZP(a) *= s; WP(a) *= s; } else { QRHOP(a) *= s; WP(a) *= s; } }
void panel_draw(HDC hdc,panel_t *panel) { WCHAR buf[BUFLEN]; POINT p; HRGN rgn=0; int cur_i; int i; int idofs=PAN_ENT*panel->index+PAN_ENT; int x=Xp(panel),y=Yp(panel); int ofsx=D(PNLITEM_OFSX),ofsy=D(PNLITEM_OFSY); int wy=D(PANEL_WY+idofs); if(XP(panel)<0)return; //if(panel_lasti/256!=panel->index)return; GetCursorPos(&p); ScreenToClient(hMain,&p); cur_i=panel_hitscan(panel,p.x,p.y); if(!D(PANEL_WY+idofs))return; for(i=0;i<panel->items[0].action_id+1;i++) { if(i==1&&panel->index==0) { wsprintf(buf,L"%s",STR(STR_SYSINF_MOTHERBOARD)); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+SYSINFO_COL1,y+ofsy,buf,wcslen(buf)); wsprintf(buf,L"%s",STR(STR_SYSINF_ENVIRONMENT)); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+SYSINFO_COL2,y+ofsy,buf,wcslen(buf)); } if(i==2&&panel->index==0) { wsprintf(buf,L"%s (%d-bit)",get_winverstr(manager_g),manager_g->matcher->state->architecture?64:32); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL0,y+ofsy,buf,wcslen(buf)); wsprintf(buf,L"%s",state_getproduct(manager_g->matcher->state)); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL1,y+ofsy,buf,wcslen(buf)); wsprintf(buf,L"%s",STR(STR_SYSINF_WINDIR)); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL2,y+ofsy,buf,wcslen(buf)); wsprintf(buf,L"%s",manager_g->matcher->state->text+manager_g->matcher->state->windir); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL3,y+ofsy,buf,wcslen(buf)); } if(i==3&&panel->index==0) { if(XP(panel)<10+SYSINFO_COL1) wsprintf(buf,L"%s",state_getproduct(manager_g->matcher->state)); else wsprintf(buf,L"%s",manager_g->matcher->state->platform.szCSDVersion); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL0,y+ofsy,buf,wcslen(buf)); wsprintf(buf,L"%s: %s",STR(STR_SYSINF_TYPE),STR(isLaptop?STR_SYSINF_LAPTOP:STR_SYSINF_DESKTOP)); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL1,y+ofsy,buf,wcslen(buf)); wsprintf(buf,L"%s",STR(STR_SYSINF_TEMP)); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL2,y+ofsy,buf,wcslen(buf)); wsprintf(buf,L"%s",manager_g->matcher->state->text+manager_g->matcher->state->temp); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx+10+SYSINFO_COL3,y+ofsy,buf,wcslen(buf)); } if(panel->items[i].type==TYPE_GROUP_BREAK&&!expertmode)break; switch(panel->items[i].type) { case TYPE_CHECKBOX: drawcheckbox(hdc,x+ofsx,y+ofsy,D(CHKBOX_SIZE)-2,D(CHKBOX_SIZE)-2,panel->items[i].checked,i==cur_i); SetTextColor(hdc,D(i==cur_i?CHKBOX_TEXT_COLOR_H:CHKBOX_TEXT_COLOR)); TextOut(hdc,x+D(CHKBOX_TEXT_OFSX)+ofsx,y+ofsy,STR(panel->items[i].str_id),wcslen(STR(panel->items[i].str_id))); if(i==cur_i&&kbpanel)drawrectsel(hdc,x+ofsx,y+ofsy,x+XP(panel)-ofsx,y+ofsy+wy,0xff00,1); y+=D(PNLITEM_WY); break; case TYPE_BUTTON: if(panel->index>=8&&panel->index<=10&&D(PANEL_OUTLINE_WIDTH+idofs)<0) box_draw(hdc,x+ofsx,y+ofsy,x+XP(panel)-ofsx,y+ofsy+wy,i==cur_i?BOX_PANEL_H+panel->index*2+2:BOX_PANEL+panel->index*2+2); else box_draw(hdc,x+ofsx,y+ofsy,x+XP(panel)-ofsx,y+ofsy+wy-1,i==cur_i?BOX_BUTTON_H:BOX_BUTTON); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); if(i==1&&panel->index==8) { int j,cnt=0; itembar_t *itembar; itembar=&manager_g->items_list[RES_SLOTS]; for(j=RES_SLOTS;j<manager_g->items_handle.items;j++,itembar++) if(itembar->checked)cnt++; wsprintf(buf,L"%s (%d)",STR(panel->items[i].str_id),cnt); TextOut(hdc,x+ofsx+wy/2,y+ofsy+(wy-D(FONT_SIZE)-2)/2,buf,wcslen(buf)); } else TextOut(hdc,x+ofsx+wy/2,y+ofsy+(wy-D(FONT_SIZE)-2)/2,STR(panel->items[i].str_id),wcslen(STR(panel->items[i].str_id))); y+=D(PNLITEM_WY); break; case TYPE_TEXT: if(i==1&&panel->index==7) { version_t v; v.d=atoi(SVN_REV_D); v.m=atoi(SVN_REV_M); v.y=SVN_REV_Y; wsprintf(buf,L"%s (",TEXT(SVN_REV2)); str_date(&v,buf+wcslen(buf)); wcscat(buf,L")"); SetTextColor(hdc,D(CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx,y+ofsy,buf,wcslen(buf)); } SetTextColor(hdc,D(i==cur_i&&i>11?CHKBOX_TEXT_COLOR_H:CHKBOX_TEXT_COLOR)); TextOut(hdc,x+ofsx,y+ofsy,STR(panel->items[i].str_id),wcslen(STR(panel->items[i].str_id))); y+=D(PNLITEM_WY); break; case TYPE_GROUP_BREAK: case TYPE_GROUP: if(panel->index>=8&&panel->index<=10)break; if(i)y+=D(PNLITEM_WY); box_draw(hdc,x,y,x+XP(panel),y+(wy)*panel->items[i].action_id+ofsy*2, BOX_PANEL+panel->index*2+2); rgn=CreateRectRgn(x,y,x+XP(panel),y+(wy)*panel->items[i].action_id+ofsy*2); SelectClipRgn(hdc,rgn); break; default: break; } } if(rgn) { SelectClipRgn(hdc,0); DeleteObject(rgn); } }