double* simulatePlant(double *state_vect, double *input_vect, double *state_op_vect, double sampling_time) { double input_op_vect[4] = {0.0, 0.0, 0.0, 0.0}; Eigen::Map<Eigen::VectorXd> x(state_vect, num_states_); Eigen::Map<Eigen::VectorXd> x_bar(state_op_vect, num_states_); Eigen::Map<Eigen::VectorXd> u(input_vect, num_inputs_); Eigen::Map<Eigen::VectorXd> u_bar(&input_op_vect[0], num_inputs_); Eigen::MatrixXd A = Eigen::MatrixXd::Identity(num_states_, num_states_); Eigen::MatrixXd B = Eigen::MatrixXd::Zero(num_states_, num_inputs_); Eigen::MatrixXd M = Eigen::MatrixXd::Zero(num_inputs_, num_inputs_); Eigen::VectorXd f_bar = Eigen::MatrixXd::Zero(num_inputs_, 1); double phi = x_bar(6); double theta = x_bar(7); double p = x_bar(9); double q = x_bar(10); double r = x_bar(11); M << 1., 1., 1., 1., 0., -1., 0., 1., 1., 0., -1., 0., -1., 1., -1., 1.; f_bar(0) = g_ * m_ / (Ct_ * cos(phi) * cos(theta)); f_bar(1) = (Izz_ - Iyy_) * q * r / (Ct_ * d_); f_bar(2) = (Izz_ - Ixx_) * p * r / (Ct_ * d_); f_bar(3) = (Iyy_ - Ixx_) * p * q / Cq_; u_bar = M.inverse() * f_bar; u_bar = u_bar.cwiseSqrt(); // Compute the matrices of the linear dynamic model computeLTIModel(A, B, state_op_vect, input_op_vect); x = x_bar + A * (x - x_bar) + B * (u - u_bar); return state_vect; }
void draw_time_online(void) { char str[10]; long t=time(NULL)-ppplogtime; if(fullscreen) return; // Box3D(x_maxx()-58,x_maxy()-15,x_maxx()-1,x_maxy()); x_setfill(0,7); //light gray x_bar(x_maxx()-56,x_maxy()-13,x_maxx()-3,x_maxy()-2); sprintf(str,"%2d:%02d:%02d", (int)t/3600, (int)(t/60)%60 , (int)t%60 ); x_settextjusty(2,2); x_setcolor(2); //red htmlfont(1,0); x_text_ib(x_maxx()-4,x_maxy()-15,(unsigned char *)str); x_settextjusty(0,2); // always write text from upper left corner }
void outs( char far *s) /* print a ASCIIZ string to stdio */ { #ifdef CAV if (GLOBAL.clipdel == CLIPBOARD_DEFER_ADD || GLOBAL.clipdel == CLIPBOARD_ADDHOT) return; #endif if(fullscreen) return; #ifndef TEXTONLY { char str[105], *ptr; int l; //!!glennmcc: Aug 22, 2005 -- maintain size independant of fontshift htmlfont(1-user_interface.fontshift,0); // htmlfont(1,0); l=x_charmax((unsigned char *)s,x_maxx()-200); if(l>100) l=100; x_setfill(0,7); #ifndef AGB #ifdef CUSTOMER x_setcolor(15); x_line(2,x_maxy()-14,x_maxx()-2,x_maxy()-14); x_setcolor(8); x_line(2,x_maxy()-1,x_maxx()-2,x_maxy()-1); x_bar(2,x_maxy()-13,x_maxx()-2,x_maxy()-2); #else x_setcolor(15); x_line(2,x_maxy()-14,x_maxx()-154,x_maxy()-14); x_setcolor(8); x_line(2,x_maxy()-1,x_maxx()-154,x_maxy()-1); x_bar(2,x_maxy()-13,x_maxx()-154,x_maxy()-2); #endif // CUSTOMER #else x_setcolor(15); x_line(2,x_maxy()-14,x_maxx()-2,x_maxy()-14); x_setcolor(8); x_line(2,x_maxy()-1,x_maxx()-2,x_maxy()-1); x_bar(2,x_maxy()-13,x_maxx()-2,x_maxy()-2); #endif // AGB if(strlen(s)>l && l>3) { l-=3; makestr(str,s,l); strcat(str,"..."); ptr=str; } else ptr=s; x_setcolor(0); x_text_ib(4,x_maxy()-15,(unsigned char *)ptr); //redraw time! lasttime[0]='\0'; } #else puts(s); #endif }
//Draw time void clock_and_timer(char *wait) //kresleni casu a screensaver { #ifndef POSIX struct time t; #endif char cas2[32]; timestr(cas2); if (strcmp(lasttime,cas2) == 0 ) return; #ifndef CLEMTEST #ifndef AGB if((ScreenSaver>0l||lasttime[0]=='*') && SecondsSleeping>(long)ScreenSaver*60l) { /* if(1) { mouseoff(); // strcpy(buf,"system\\scrnsvrs\\stin.exe"); // closebat(buf,RESTART_REDRAW); // GLOBAL.willexecute=willexecute(buf); // GLOBAL.gotolocation=1; execl("system\\scrnsvrs\\stin.exe","system\\scrnsvrs\\stin.exe",NULL); graphicsinit(arachne.graphics); // XLOPIF SVGA GRAPHICS } else */ { int j; int fullscr[4]={0,0,0,0}; int x,y,px,py,done=0; fullscr[2]=x_maxx(); fullscr[3]=x_maxy(); { #define MAX_CERFS 20 #define MAX_TRACK 100 int xx[MAX_CERFS],yy[MAX_CERFS],xs[MAX_CERFS],ys[MAX_CERFS],col[MAX_CERFS]; int x2[MAX_CERFS],y2[MAX_CERFS],xs2[MAX_CERFS],ys2[MAX_CERFS]; int tracklen[MAX_CERFS]; int trackcnt[MAX_CERFS]; int trackbuf[MAX_CERFS]; int xtr[MAX_CERFS][MAX_TRACK],ytr[MAX_CERFS][MAX_TRACK]; int xt2[MAX_CERFS][MAX_TRACK],yt2[MAX_CERFS][MAX_TRACK]; int pom; int cerfs=MAX_CERFS/2; char barva0[6]={1,3,9,11,7,8}; char barva1[6]={1,2,3,6,10,14}; char *barva; char *value; #ifdef HICOLOR int dc=1,p=0; #endif //----------------------------screensaver mouseoff(); x_cleardev(); #ifdef LINUX #define RND(X) (random()*X) srandom(time(NULL)); #else #define RND(X) random(X) randomize(); #endif value=configvariable(&ARACHNEcfg,"ScreenSaverColors",NULL); if(value && *value=='1') barva=barva1; else barva=barva0; value=configvariable(&ARACHNEcfg,"ScreenSaverMess",NULL); if(value) { cerfs=atoi(value); if(cerfs<1) cerfs=1; if(cerfs>MAX_CERFS) cerfs=MAX_CERFS; } value=configvariable(&ARACHNEcfg,"ScreenSaverStyle",NULL); j=0; while(j<cerfs) //deklarace car { xx[j]=100+RND(fullscr[2]-200); yy[j]=100+RND(fullscr[3]-200); if(*value=='C') x2[j]=10+RND(fullscr[3]/3); else { x2[j]=120+RND(fullscr[2]-240); y2[j]=120+RND(fullscr[3]-240); } if(*value=='R') {xs[j]=RND(2);if(xs[j]==0)xs[j]=-1;} else {xs[j]=RND(3);if(xs[j]==2)xs[j]=-1;} ys[j]=RND(2);if(ys[j]==0)ys[j]=-1; xs2[j]=RND(2);if(xs2[j]==0)xs2[j]=-1; if(*value=='R') {ys2[j]=RND(2);if(ys2[j]==0)ys2[j]=-1;} else {ys2[j]=RND(3);if(ys2[j]==2)ys2[j]=-1;} col[j]=barva[RND(6)]; pom=RND(MAX_TRACK-10)+10; tracklen[j]=pom; trackcnt[j]=1; //odsud se bude cist trackbuf[j]=0; //sem se bude zapisovat while(pom>=0) { xtr[j][pom]=0; ytr[j][pom]=0; xt2[j][pom]=0; yt2[j][pom]=0; pom--; } j+=1; }//loop j=0; ImouseRead( &x, &y ); ImouseWait(); px=x;py=y; while(!done) //animace { if(wait!=NULL) { #ifdef POSIX time_t t=time(NULL); struct tm *gt=gmtime(&t); sprintf(cas2,"%2d:%02d:%02d", gt->tm_hour, gt->tm_min, gt->tm_sec ); #else gettime(&t); sprintf(cas2,"%2d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec ); #endif if(strstr(wait,cas2)!=NULL)break; }//endif #ifndef LINUX if(g_PrtScr) { g_PrtScr = 0; PrintScreen2BMP(0); goto out; } #endif //mazani stopy x_setcolor(0); #ifndef LINUX if(*value=='C') x_circle(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]]); else #endif if(*value=='R') x_rect(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]],yt2[j][trackcnt[j]]); else x_line(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]],yt2[j][trackcnt[j]]); if(++trackcnt[j]>tracklen[j])trackcnt[j]=0; xtr[j][trackbuf[j]]=xx[j]; ytr[j][trackbuf[j]]=yy[j]; xt2[j][trackbuf[j]]=x2[j]; yt2[j][trackbuf[j]]=y2[j]; if(++trackbuf[j]>tracklen[j])trackbuf[j]=0; //kresleni nove cary x_setcolor(col[j]); #ifndef LINUX if(*value=='C') x_circle(xx[j],yy[j],x2[j]); else #endif if(*value=='R') x_rect(xx[j],yy[j],x2[j],y2[j]); else x_line(xx[j],yy[j],x2[j],y2[j]); xx[j]+=xs[j]; yy[j]+=ys[j]; x2[j]+=xs2[j]; y2[j]+=ys2[j]; if(xx[j]>=fullscr[2]||xx[j]<=0)xs[j]=-xs[j]; if(yy[j]>=fullscr[3]||yy[j]<=0)ys[j]=-ys[j]; if(x2[j]>=fullscr[2]||x2[j]<=0)xs2[j]=-xs2[j]; if(y2[j]>=fullscr[3]||y2[j]<=0)ys2[j]=-ys2[j]; j++; if(j==cerfs) j=0; if(*value=='C' || j%10==0) { //!!RAY: Sep 30, 2006 -- CTRL key will now deactivate the screensaver if((bioskey(1) || bioskey(2) &4) || ImouseRead( &x, &y ) || x!=px || y!=py) // if(bioskey(1) || ImouseRead( &x, &y ) || x!=px || y!=py) done=1; } px=x;py=y; #ifdef HICOLOR if(xg_256 == MM_Hic) { if(p>20*cerfs) { dc=-dc; p=0; } p++; if(p%cerfs==0) { int c=1; while(c<16) { if(c%2) dc=-dc; Iipal[c*3]+=dc; if(Iipal[c*3]>63) Iipal[c*3]=63; if(Iipal[c*3]<0) Iipal[c*3]=0; Iipal[c*3+1]+=dc; if(Iipal[c*3+1]>63) Iipal[c*3+1]=63; if(Iipal[c*3+1]<0) Iipal[c*3+1]=0; Iipal[c*3+2]+=dc; if(Iipal[c*3+2]>63) Iipal[c*3+2]=63; if(Iipal[c*3+2]<0) Iipal[c*3+2]=0; c++; }//loop } x_palett( 16, Iipal); } #endif }//loop if(bioskey(1))bioskey(0); ImouseWait(); out: #ifdef HICOLOR if(xg_256 == MM_Hic) initpalette(); #endif x_cleardev(); RedrawALL(); DrawTitle(1); if(lasttime[1]=='*') redraw=4; else redraw=3; } } SecondsSleeping=0l; }//endif screensaver #endif// AGB #endif// CLEMTEST #ifndef GGI //it doesn't make sense to show time in X11 app.. if(!fullscreen) { x_setfill(0,7); //sediva if(mousey>x_maxy()-30 && mousex>x_maxx()-230) mouseoff(); #ifdef CUSTOMER x_bar(x_maxx()-56,x_maxy()-13,x_maxx()-2,x_maxy()-2); x_setcolor(0); //cerna htmlfont(1,0); x_text_ib( x_maxx()-56,x_maxy()-15,(unsigned char *)cas2); #elif AGB x_bar(x_maxx()-56,x_maxy()-13,x_maxx()-2,x_maxy()-2); x_setcolor(0); //cerna htmlfont(1,0); x_text_ib( x_maxx()-56,x_maxy()-15,(unsigned char *)cas2); #else x_bar(x_maxx()-206,x_maxy()-13,x_maxx()-156,x_maxy()-2); x_setcolor(0); //cerna //!!glennmcc: Aug 22, 2005 //prevent fontshift >0 from causing the clock to go 'off the right' htmlfont(0-user_interface.fontshift,0); // htmlfont(1,0); x_text_ib( x_maxx()-206,x_maxy()-15,(unsigned char *)cas2); #endif if(mousey>x_maxy()-30 && mousex>x_maxx()-230) mouseon(); } #endif if(lasttime[0]) //not if time redraw was forced! { SecondsSleeping++; if(GLOBAL.timeout) GLOBAL.secondsleft--; if(ppplogtime && tcpip) draw_time_online(); } strcpy(lasttime,cas2); }//end sub
void computeLTIModel(Eigen::MatrixXd &A, Eigen::MatrixXd &B, double* state_op_vect, double* input_op_vect) { Eigen::Map<Eigen::VectorXd> x_bar(state_op_vect, num_states_); Eigen::Map<Eigen::VectorXd> u_bar(input_op_vect, num_inputs_); Eigen::MatrixXd U = Eigen::MatrixXd::Zero(num_inputs_, num_inputs_); double phi = x_bar(6); double theta = x_bar(7); double psi = x_bar(8); double p = x_bar(9); double q = x_bar(10); double r = x_bar(11); double U1 = Ct_ * (pow(u_bar(0),2) + pow(u_bar(1),2) + pow(u_bar(2),2) + pow(u_bar(3),2)); A(0,3) = ts_; A(1,4) = ts_; A(2,5) = ts_; A(3,6) = ts_ * (sin(psi) * cos(phi) - cos(psi) * sin(theta) * sin(phi)) * U1 / m_; A(3,7) = ts_ * (cos(psi) * cos(theta) * cos(phi)) * U1 / m_; A(3,8) = ts_ * (cos(psi) * sin(phi) - sin(psi) * sin(theta) * cos(psi)) * U1 / m_; A(4,6) = - ts_ * (sin(psi) * sin(theta) * sin(phi) + cos(psi) * cos(phi)) * U1 / m_; A(4,7) = ts_ * (sin(psi) * cos(theta) * cos(psi)) * U1 / m_; A(4,8) = ts_ * (cos(psi) * sin(theta) * cos(phi) + sin(psi) * sin(phi)) * U1 / m_; A(5,6) = - ts_ * (cos(theta) * sin(phi)) * U1 / m_; A(5,7) = - ts_ * (sin(theta) * cos(phi)) * U1 / m_; A(6,6) = ts_ * (q * cos(phi) - r * sin(phi)) * tan(theta); A(6,7) = ts_ * (q * sin(phi) + r * cos(phi)) / (cos(theta) * cos(theta)); A(6,9) = ts_; A(6,10) = ts_ * sin(phi) * tan(theta); A(6,11) = ts_ * cos(phi) * tan(theta); A(7,6) = - ts_ * (q * sin(phi) + r * cos(phi)); A(7,10) = ts_ * cos(phi); A(7,11) = - ts_ * sin(phi); A(8,6) = ts_ * (q * cos(phi) - r * sin(phi)) / cos(theta); A(8,7) = ts_ * (q * sin(phi) + r * cos(phi)) * tan(theta) / cos(theta); A(8,10) = ts_ * sin(phi) / cos(theta); A(8,11) = ts_ * cos(phi) / cos(theta); A(9,10) = ts_ * r * (Iyy_ - Izz_) / Ixx_; A(9,11) = ts_ * q * (Iyy_ - Izz_) / Ixx_; A(10,9) = ts_ * r * (Izz_ - Ixx_) / Iyy_; A(10,11) = ts_ * p * (Izz_ - Ixx_) / Iyy_; A(11,9) = ts_ * q * (Ixx_ - Iyy_) / Izz_; A(11,10) = ts_ * p * (Ixx_ - Iyy_) / Izz_; B(3,0) = ts_ * (cos(psi) * sin(theta) * cos(phi) + sin(psi) * sin(phi)) / m_; B(4,0) = ts_ * (sin(psi) * sin(theta) * cos(phi) - cos(psi) * sin(phi)) / m_; B(5,0) = ts_ * cos(theta) * cos(phi) / m_; B(9,1) = ts_ * d_ / Ixx_; B(10,2) = ts_ * d_ / Iyy_; B(11,3) = ts_ / Izz_; U(0,0) = 2 * Ct_ * u_bar(0); U(0,1) = 2 * Ct_ * u_bar(1); U(0,2) = 2 * Ct_ * u_bar(2); U(0,3) = 2 * Ct_ * u_bar(3); U(1,1) = - 2 * Ct_ * u_bar(1); U(1,3) = 2 * Ct_ * u_bar(3); U(2,0) = 2 * Ct_ * u_bar(0); U(2,2) = - 2 * Ct_ * u_bar(2); U(3,0) = - 2 * Cq_ * u_bar(0); U(3,1) = 2 * Cq_ * u_bar(1); U(3,2) = - 2 * Cq_ * u_bar(2); U(3,3) = 2 * Cq_ * u_bar(3); B = B * U; }
void x_ellipse(int x1, int y1, int rx, int ry ) { int x, y, istyle = 0; long p, n, test, pa, na; int xz,xk,loc_style; #if HI_COLOR int SaveMode; SaveMode = xg_hipalmod; xg_hipalmod = 1; #endif loc_style = xg_style; if((xg_flag & 0x0004) != 0) // Vyplnene kolecko (ne carkovane) { xg_style = 0xFFFF; } xg_notview = 1; // Zadny posun v X_BAR rx = (int) ((long)rx * 10000L / (long)xg_xr); /* prepocet */ ry = (int) ((long)ry * 10000L / (long)xg_yr); /* aspectratio */ x1 += xg_view[0]; /* posunuti */ y1 += xg_view[1]; /* viewportu */ if( rx < 1 || ry < 1 ) { x_rect( x1-rx, y1-ry, x1+rx, y1+ry ); goto Ok; } pa = (long) rx * (long) rx; /* inicializace */ test = (long) ( -2 * ry + 1 ) * pa; pa *= 4L; p = pa * (long) (1 - ry); n = 2L * (long) ry * (long) ry; na = 2L * n; x = 0; y = ry; if ( ( x1-rx ) >= xg_view[0] && ( x1+rx ) <= xg_view[2] && ( y1-ry ) >= xg_view[1] && ( y1+ry ) <= xg_view[3] ) { for ( ; ; ) /* elipsa uvnitr viewportu - rychly cyklus */ { if ( xg_style & ( 1 << (istyle++ % 16))) { if((xg_flag & 0x0004) == 0) // NEVYPLNENA { x_putpix( x1+x, y1+y, xg_color ); x_putpix( x1+x, y1-y, xg_color ); x_putpix( x1-x, y1+y, xg_color ); x_putpix( x1-x, y1-y, xg_color ); } else // VYPLNENA { x_bar(x1-x,y1+y,x1+x,y1+y); x_bar(x1-x,y1-y,x1+x,y1-y); } } if ( ry < 0 ) break; if ( test < 0L ) { x++ ; test += n; n += na; } else { y--; test += p; p += pa; if ( p > 0L) ry = -1; } } } else { for ( ; ; ) /* elipsa vne viewportu - pomaly cyklus */ { if ( xg_style & ( 1 << (istyle++ % 16))) { if((xg_flag & 0x0004) == 0) // NEVYPLNENA { if INVIEW(x1+x, y1+y) x_putpix( x1+x, y1+y, xg_color ); if INVIEW(x1+x, y1-y) x_putpix( x1+x, y1-y, xg_color ); if INVIEW(x1-x, y1+y) x_putpix( x1-x, y1+y, xg_color ); if INVIEW(x1-x, y1-y) x_putpix( x1-x, y1-y, xg_color ); } else { xz = max(x1-x,xg_view[0]); if(xz < xg_view[2]) { xk = min(x1+x,xg_view[2]); if((y1-y) >= xg_view[1] && (y1-y) <= xg_view[3]) x_bar(xz,y1-y,xk,y1-y); if((y1+y) >= xg_view[1] && (y1+y) <= xg_view[3]) x_bar(xz,y1+y,xk,y1+y); } } } if ( ry < 0 ) break; if ( test < 0L ) { x++ ; test += n; n += na; } else { y--; test += p; p += pa; if ( p > 0L) ry = -1; } } }
//REDRAW SCROLL BARS void ScrollDraw(struct ScrollBar *scroll,int fromx,long fromy) { long pom; int zblo=0; if(user_interface.scrollbarstyle == 'C') //C = Clarence ;) return; if(!scroll->onscrollx) { if(scroll->total_y<=scroll->ysize || scroll->total_y==0) { scroll->yscrsz=scroll->max_yscrsz; scroll->yscr=0; } else { pom=(long)scroll->ysize*(long)scroll->max_yscrsz; scroll->yscrsz=(int)(pom/scroll->total_y)+1; if(scroll->yscrsz<8) { scroll->yscrsz=8; if(scroll->yscrsz>scroll->max_yscrsz)scroll->yscrsz=scroll->max_yscrsz; } pom=fromy*(long)scroll->max_yscrsz; scroll->yscr=(int)(pom/scroll->total_y); //!!Ray: Dec 17, 2007 -- fix BSOD // Return if overflow: if(scroll->yscr < 0) return; //!!Ray: end if(scroll->yscr+scroll->yscrsz>scroll->max_yscrsz)scroll->yscr=scroll->max_yscrsz-scroll->yscrsz; } if(!scroll->yvisible) return; x_setfill(0,0); if(scroll->scrollbarstyle) zblo=1; scroll->yscr+=scroll->gap; if(scroll->yscr>0) x_bar(scroll->xtop+scroll->xsize+1,scroll->ytop+scroll->gap, scroll->xtop+scroll->xsize+user_interface.scrollbarsize,scroll->ytop+scroll->yscr-1); if(scroll->yscr+scroll->yscrsz<scroll->max_yscrsz+scroll->gap) x_bar(scroll->xtop+scroll->xsize+1,scroll->ytop+scroll->yscr+scroll->yscrsz+1, scroll->xtop+scroll->xsize+user_interface.scrollbarsize,scroll->ytop+scroll->max_yscrsz+scroll->gap+zblo); Box3Dv(scroll->xtop+scroll->xsize+1,scroll->ytop+scroll->yscr, scroll->xtop+scroll->xsize+user_interface.scrollbarsize,scroll->ytop+scroll->yscr+scroll->yscrsz+zblo); //ozdobicky (tr.: ornaments) if(scroll->yscrsz>24) { int ymid=scroll->yscrsz/2; int xleft=scroll->xtop+scroll->xsize+3; int xright=scroll->xtop+scroll->xsize+user_interface.scrollbarsize-3; int yyy=scroll->ytop+scroll->yscr+ymid; x_setcolor(15); x_line(xleft,yyy, xright,yyy); x_line(xleft,yyy-4, xright,yyy-4); x_line(xleft,yyy+4, xright,yyy+4); x_line(xleft,yyy-8, xright,yyy-8); x_line(xleft,yyy+8, xright,yyy+8); x_setcolor(8); x_line(xleft,yyy-1, xright,yyy-1); x_line(xleft,yyy-5, xright,yyy-5); x_line(xleft,yyy+3, xright,yyy+3); x_line(xleft,yyy-9, xright,yyy-9); x_line(xleft,yyy+7, xright,yyy+7); } } if(scroll->onscrolly) { #ifdef GGI Smart_ggiFlush(); #endif return; } if(!scroll->xvisible || scroll->total_x<=scroll->xsize || scroll->total_x==0) { scroll->xscrsz=scroll->max_xscrsz; scroll->xscr=0; if(!scroll->xvisible) return; } else { pom=(long)scroll->xsize*(long)scroll->max_xscrsz; scroll->xscrsz=(int)(pom/scroll->total_x)+1; if(scroll->xscrsz<8) { scroll->xscrsz=8; if(scroll->xscrsz>scroll->max_xscrsz)scroll->xscrsz=scroll->max_xscrsz; } pom=fromx*(long)scroll->max_xscrsz; scroll->xscr=(int)(pom/scroll->total_x); if(scroll->xscr+scroll->xscrsz>scroll->max_xscrsz)scroll->xscr=scroll->max_xscrsz-scroll->xscrsz; } x_setfill(0,0); if(scroll->scrollbarstyle!='N') zblo=0; scroll->xscr+=scroll->gap+zblo; if(scroll->xscr>0) x_bar(scroll->xtop+scroll->gap+zblo,scroll->ytop+scroll->ysize+1, scroll->xtop+scroll->xscr-1,scroll->ytop+scroll->ysize+user_interface.scrollbarsize); if(scroll->xscr+scroll->xscrsz<scroll->max_xscrsz+scroll->gap+zblo) x_bar(scroll->xtop+scroll->xscr+scroll->xscrsz+1,scroll->ytop+scroll->ysize+1, scroll->xtop+scroll->max_xscrsz+scroll->gap+zblo,scroll->ytop+scroll->ysize+user_interface.scrollbarsize); Box3Dh(scroll->xtop+scroll->xscr,scroll->ytop+scroll->ysize+1, scroll->xtop+scroll->xscr+scroll->xscrsz,scroll->ytop+scroll->ysize+user_interface.scrollbarsize); if(scroll->xscrsz>24)//ozdobicky... (tr.: ornaments...) { int xmid=scroll->xscrsz/2; int yend=scroll->ytop+scroll->ysize+3; int ystart=scroll->ytop+scroll->ysize+user_interface.scrollbarsize-3; int xxx=scroll->xtop+scroll->xscr+xmid; x_setcolor(15); x_line(xxx,yend, xxx,ystart); x_line(xxx-4,yend, xxx-4,ystart); x_line(xxx+4,yend, xxx+4,ystart); x_line(xxx-8,yend, xxx-8,ystart); x_line(xxx+8,yend, xxx+8,ystart); x_setcolor(8); x_line(xxx-1,yend, xxx-1,ystart); x_line(xxx-5,yend, xxx-5,ystart); x_line(xxx+3,yend, xxx+3,ystart); x_line(xxx-9,yend, xxx-9,ystart); x_line(xxx+7,yend, xxx+7,ystart); } #ifdef GGI Smart_ggiFlush(); #endif }