/* erase to the end of current line */ void erase_eol() { if (_isatty(_fileno(stdout))) { disp_open(); disp_eeol(); disp_close(); } }
/* move cursor up */ void cursor_up(int rows) { if (_isatty(_fileno(stdout))) { disp_open(); disp_move(disp_cursorrow - rows, 0); disp_close(); } }
main() { disp_open(); drawbox(10,10,10,10); disp_close(); }
void term_init_ibm(void) { disp_open(); msm_init(); msm_setareay(0,(disp_numrows-1)*8); msm_showcursor(); ztc_textcolor = FG_WHITE; tty_charmode = 0; x_max = 80; y_max = 25; x_coord = y_coord = 0; so_arr[0] = '\1'; so_arr[1] = '\0'; se_arr[0] = '\2'; se_arr[1] = '\0'; }
void fn_response(char **args) { struct ftp_hist *h; FILE *f; if (ftp_history == NULL) { disp_status(DISP_STATUS, "no exchange available"); return; } if ((f=disp_open(opt_pager, 1)) == NULL) return; for (h=ftp_history; h; h=h->next) fprintf(f, "%s\n", h->line); disp_close(f, 1); }
int main(int argc, char **argv) { struct display *disp; struct buffer **buffers; int ret, i; MSG("Opening Display.."); disp = disp_open(argc, argv); if (!disp) { usage(argv[0]); return 1; } if (check_args(argc, argv)) { /* remaining args.. print usage msg */ usage(argv[0]); return 0; } buffers = disp_get_buffers(disp, NBUF); if (!buffers) { return 1; } for (i = 0; i < CNT; i++) { struct buffer *buf = buffers[i % NBUF]; fill(buf, i * 2); ret = disp_post_buffer(disp, buf); if (ret) { return ret; } } MSG("Ok!"); disp_close(disp); return 0; }
void frame_show(struct frame_t *frame) { static int disp_initialized = 0; static int frame_id = 0; if (!disp_initialized) { if (!disp_open()) { fprintf(stderr, "Can't open /dev/disp\n"); return; } disp_set_para(ve_virt2phys(frame->luma_buffer), ve_virt2phys(frame->chroma_buffer), frame->color, frame->width, frame->height, 0, 0, 800, 600); disp_initialized = 1; } disp_new_frame(ve_virt2phys(frame->luma_buffer), ve_virt2phys(frame->chroma_buffer), frame_id++, 24000); }
void init_textmode () { if (disp_getmode () != 3) disp_setmode ( 3 ) ; disp_open () ; }
void main(void) { int i; FILE *log = stdout, *nulfile; #ifdef __ZTC__ disp_open(); #endif nulfile = fopen("NUL", "w"); time1 = *bios_time; for(i = 1; i < 1000; i++) { gotoxy(10,5); puts("puts test."); puts("this is the second line.\n"); } time1 = *bios_time - time1; time2 = *bios_time; for(i = 1; i < 1000; i++) { gotoxy(10,5); printf("printf test.\n"); printf("this is the second line.\n"); } time2 = *bios_time - time2; time3 = *bios_time; for(i = 1; i < 1000; i++) { #ifdef __ZTC__ disp_move(4,9); cputs("d_puts test."); #else gotoxy(10,5); #if defined(M_I86) && !defined(__WATCOMC__) cputs("_outtext test.\r\n"); #else cputs("cputs test.\r\n"); #endif #endif cputs("this is the second line."); } time3 = *bios_time - time3; time4 = *bios_time; for(i = 1; i < 1000; i++) { #ifdef __ZTC__ disp_move(4,9); cprintf("d_printf test."); #else gotoxy(10,5); cprintf("cprintf test.\r\n"); #endif cprintf("this is the second line."); } time4 = *bios_time - time4; time5 = *bios_time; for(i = 1; i < 1000; i++) { fputs("fputs test.\n", nulfile); fputs("this is the second line.\n", nulfile); } time5 = *bios_time - time5; time6 = *bios_time; for(i = 1; i < 1000; i++) { fprintf(nulfile, "fprintf test.\n"); fprintf(nulfile, "this is the second line.\n"); } time6 = *bios_time - time6; #ifdef __ZTC__ disp_close(); #endif log = fopen(LOGFILE, "w"); fputs("Times for 1000 iterations:\n\n", log); fprintf(log, "puts %10.3f seconds\n", (double)time1 * .054945); fprintf(log, "printf %10.3f seconds\n", (double)time2 * .054945); #ifndef __ZTC__ #if defined(M_I86) && !defined(__WATCOMC__) fprintf(log, "_outtext %10.3f seconds\n", (double)time3 * .054945); #else fprintf(log, "cputs %10.3f seconds\n", (double)time3 * .054945); #endif fprintf(log, "cprintf %10.3f seconds\n", (double)time4 * .054945); #else fprintf(log, "d_puts %10.3f seconds\n", (double)time3 * .054945); fprintf(log, "d_printf %10.3f seconds\n", (double)time4 * .054945); #endif fprintf(log, "fputs %10.3f seconds\n", (double)time5 * .054945); fprintf(log, "fprintf %10.3f seconds\n", (double)time6 * .054945); fclose(log); }
static int32_t __init gp_fb_init( void ) { int32_t ret = 0; struct gp_fb_info *info; #if 0 /* Init display device */ if (disp_open(0, 0) < 0) return -EIO; if (disp_init() < 0) return -EIO; #endif fbinfo = framebuffer_alloc(sizeof(struct gp_fb_info), NULL); if (!fbinfo) return -ENOMEM; info = fbinfo->par; info->first_open = 0; /*Get panel resolution */ disp_get_panel_res(&info->panelRes); /* Color */ ret = gp_fb_setColorType(fbinfo); if (ret < 0) { printk("[%s:%d], set color type error\n", __FUNCTION__, __LINE__); goto dealloc_fb; } /* Get buffer width, height, and size */ gp_fb_getBufInfo(fbinfo); /* Get panel rect */ gp_fb_getPanelRect(fbinfo); info->fbmem = disp_allocate_buffer(info->bufinfo); if (info->fbmem == NULL) { ret = -ENXIO; goto dealloc_fb; } memset(info->fbmem, 0x00, info->bufinfo.size); fbinfo->fbops = &gp_fb_ops; fbinfo->flags = FBINFO_FLAG_DEFAULT; fbinfo->pseudo_palette = NULL; fbinfo->screen_base = info->fbmem; fbinfo->screen_size = 0; /* Resolution */ fbinfo->var.xres = info->bufinfo.width; fbinfo->var.yres = info->bufinfo.height; fbinfo->var.xres_virtual = fbinfo->var.xres; fbinfo->var.yres_virtual = fbinfo->var.yres * 2; /* Timing */ fbinfo->var.left_margin = 0; fbinfo->var.right_margin = 0; fbinfo->var.upper_margin = 0; fbinfo->var.lower_margin = 0; fbinfo->var.hsync_len = 0; fbinfo->var.vsync_len = 0; fbinfo->var.activate = FB_ACTIVATE_FORCE; fbinfo->var.accel_flags = 0; fbinfo->var.vmode = FB_VMODE_NONINTERLACED; /* fixed info */ memset(&fbinfo->fix.id, 0, sizeof(fbinfo->fix.id)); strncpy(fbinfo->fix.id, driver_name, sizeof(driver_name)); fbinfo->fix.mmio_start = 0x93000000; fbinfo->fix.mmio_len = 0x1000; fbinfo->fix.type = FB_TYPE_PACKED_PIXELS; fbinfo->fix.type_aux = 0; fbinfo->fix.visual = FB_VISUAL_TRUECOLOR; fbinfo->fix.xpanstep = 0; fbinfo->fix.ypanstep = 1; fbinfo->fix.ywrapstep = 0; fbinfo->fix.accel = FB_ACCEL_NONE; fbinfo->fix.smem_start = gp_chunk_pa(info->fbmem); fbinfo->fix.smem_len = info->bufinfo.size; fbinfo->fix.line_length = (fbinfo->var.xres_virtual * fbinfo->var.bits_per_pixel) / 8; gp_fb_activate(fbinfo); ret = register_framebuffer(fbinfo); if (ret < 0) { printk(KERN_ERR "Failed to register framebuffer device: %d\n", ret); goto release_fbmem; } printk(KERN_INFO "fb%d: %s frame buffer device\n", fbinfo->node, fbinfo->fix.id); return 0; release_fbmem: disp_free_buffer(FB_BUFFER_ID); dealloc_fb: framebuffer_release(fbinfo); return ret; }
/** * Function fmin contains Quasi-Newton function minimizer with * inexact line search using Wolfe conditions and * BFGS correction formula for Hessian update. * * The algorithm consists of the following steps (in the order of execution): * - Initial step with Hessian being an identity matrix (see call1) * - Line search test for step length satisfying Wolfe conditions (beginning of * call2) * - Line search backtracking and reducing alpha (label40) if the current * direction * is not a gradient descent one or the function value has increased * - Hessian update (labels 50-70) once all conditions are satisfied to assure * its * positive-definiteness * - Update of a vector of independent variables (label30) * * Convergence is detected if the maximal gradient component falls below small * constant (see label20) * * Requires: * \param _f Value of function to be minimized. * \param _x Vector of independent variables. * \param _g Vector containing the partial derivatives of _f with respect to * each independent variable. The gradient vector returned by \ref gradcalc. * Pre: * Some class member variables can be initialized by user prior to calling * this function. * These control variables may change the behavior of fmin, they are: * maxfn (maximal number of function evaluations, after which * minimization stops) * crit (convergence criterion constant) * imax (maximal number of function evaluations within one linear search* before to stop) * iprint (flag to allow (=1) or supress (=0) printing intermediate * statistics * min_improve (stop after 10 iterations with overall function decrease * less than this value) * The default values can be found in function set_defaults of class * fmm_control * Modifies: * The Hessian matrix (and not its inverse) h * Returns (via parameter vector x): * A vector x after a step of linear search in the direction of gradient * descent \ingroup FMM */ void fmm::fmin(const double& _f, const dvector &_x, const dvector& _g) { if (log_values_switch) { print_values(_f,_x,_g); } if (pfmintime==0) pfmintime=new adtimer; tracing_message(traceflag,"A3"); /* Remember gradient and function values resulted from previous function evaluation */ dvector& g=(dvector&) _g; double& f=(double&) _f; /* Create local vector x as a pointer to the argument vector _x */ independent_variables& x= (independent_variables&) _x; #ifdef DIAG cout << "On entry to fmin: " << *this << endl; #endif tracing_message(traceflag,"A4"); #ifdef _MSC_VER SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, true); #else /* Check the value of control variable ireturn: -1 (exit status) 0 (initialization of function minimizer) 1 (call1 - x update and convergence check) 2 (call2 - line search and Hessian update) >=3 (derivative check) */ if (ireturn <= 0 ) { signal(SIGINT, &onintr); } #endif #ifdef __ZTC__ if (ireturn <= 0 ) { if (disp_inited == 0) { disp_open(); disp_usebios(); } } #endif tracing_message(traceflag,"A5"); if (ireturn ==1 && dcheck_flag ==0) { ireturn = 3; } if (ireturn >= 3) { /* Entering derivative check */ derch(f, x, g, n, ireturn); return; } if (ireturn == 1) goto call1; if (ireturn == 2) goto call2; /* we are here because ireturn=0 Start initializing function minimizer variables */ fbest=1.e+100; tracing_message(traceflag,"A6"); /* allocate Hessian h - object of class dfsdmat, the memory is allocated only for elements of lower triagonal matrix */ if (!h) h.allocate(n); /* initialize w, the dvector of size 4*n: w(1,n) contains gradient vector in the point x_new = x_old + alpha*p_k w(n+1,2n) contains direction of linear search, i.e. transpose(p_k) w(2n+1,4n) are used for Hessian updating terms */ w.initialize(); /* alpha - the Newton step size */ alpha=1.0; /* full Newton step at the beginning */ ihflag=0; /* validity check for dimensions and indexing of independent vector and gradient vector Note, this function will work correctly only if indices start at 1 */ if (n==0) { cerr << "Error -- the number of active parameters" " fmin must be > 0\n"; ad_exit(1); } tracing_message(traceflag,"A7"); if (x.indexmin() !=1) { cerr << "Error -- minimum valid index" " for independent_variables in fmin must be 1\n" << " it is " << x.indexmin() << "\n"; ad_exit(1); } if (x.size() <n) { cerr << "Error -- the size of the independent_variables" " which is " << x.size() << " must be >= " << n << "\n" << " the number of independent variables in fmin\n"; ad_exit(1); } tracing_message(traceflag,"A8"); if (g.indexmin() !=1) { cerr << "Error -- minimum valid index" " for the gradient vector in fmin must be 1\n" << " it is " << g.indexmin() << "\n"; ad_exit(1); } if (g.size() <n) { cerr << "Error -- the size of the gradient vector" " which is " << g.size() << " must be >=\n" << " the number of independent variables in fmin\n"; ad_exit(1); } /* end of validity check */ tracing_message(traceflag,"A9"); /* xx is reserved for the updated values of independent variables, at the moment put the current values */ for (i=1; i<=n; i++) xx.elem(i)=x.elem(i); tracing_message(traceflag,"A10"); /* itn - iteration counter */ itn=0; /* icc - obsolete calls counter? */ icc=0; /* initialize funval vector, it will contain last 10 function values (10-th is the most recent) needed to stop minimization in case if f(1)-f(10)<min_improve */ for (i=1; i< 11; i++) funval.elem(i)=0.; tracing_message(traceflag,"A11"); ihang = 0; /* flag, =1 when function minimizer is not making progress */ llog=1; np=n+1; n1=n-1; nn=n*np/2; is=n; iu=n; iv=n+n; ib=iv+n; iexit=0; /* exit code */ tracing_message(traceflag,"A12"); /* Initialize hessian to the unit matrix */ h.elem(1,1) = 1; for (i=2; i<=n; i++) { for ( j=1; j<i; j++) { h.elem(i,j)=0; } h.elem(i,i)=1; } tracing_message(traceflag,"A13"); /* dmin - minimal element of hessian used to verify its positive definiteness */ dmin=h.elem(1,1); for ( i=2; i<=n; i++) { if(h.elem(i,i)<dmin) dmin=h.elem(i,i); } if (dmin <= 0.) /* hessian is not positive definite? */ goto label7020; /* exit */ if(dfn == 0.) z = 0.0; tracing_message(traceflag,"A14"); for (i=1; i<=n; i++) { xsave.elem(i)=x.elem(i); x.elem(i)=xx.elem(i); } ireturn=1; /* upon next entry will go to call1 */ tracing_message(traceflag,"A15"); if (h.disk_save()) { cout << "starting hessian save" << endl; h.save(); cout << "finished hessian save" << endl; } tracing_message(traceflag,"A16"); return; /* End of initialization */ call1: /* first line search step and x update */ tracing_message(traceflag,"A17"); if (h.disk_save()) { cout << "starting hessian restore" << endl; h.restore(); cout << "finished hessian restore" << endl; } tracing_message(traceflag,"A18"); for (i=1; i<=n; i++) { x.elem(i)=xsave.elem(i); } ireturn=3; tracing_message(traceflag,"A19"); { } for ( i=1; i<=n; i++) gbest.elem(i)=g.elem(i); tracing_message(traceflag,"A20"); funval.elem(10) = f; df=dfn; if(dfn == 0.0) df = f - z; if(dfn < 0.0) df=fabs(df * f); if(df <= 0.0) df=1.; label20: /* check for convergence */ ic=0; /* counter for number of calls */ iconv = 1; /* convergence flag: 1 - convergence, 2 - not yet */ for ( i=1; i<=9; i++) funval.elem(i)= funval.elem(i+1); funval.elem(10) = f; /* check if function value is improving */ if ( itn>15 && fabs( funval.elem(1)-funval.elem(10))< min_improve ) ihang = 1; gmax = 0; /* satisfy convergence criterion? */ for ( i=1; i<=n; i++) { if(fabs(g.elem(i)) > crit) iconv = 2; if(fabs(g.elem(i)) > fabs(gmax) ) gmax = g.elem(i); } /* exit if either convergence or no improvement has been achieved during last 10 iterations */ if( iconv == 1 || ihang == 1) { ireturn=-1; goto label92; } /* otherwise proceed to the Newton step (label21) */ if(iprint == 0) goto label21; /* without printing */ if(itn == 0) goto label7000; /* printing Initial statistics first */ #if defined(USE_DDOUBLE) #undef double if(fmod(double(itn),double(iprint)) != 0) goto label21; #define double dd_real #else if(fmod(double(itn),double(iprint)) != 0) goto label21; #endif if (llog) goto label7010; #if defined (_MSC_VER) && !defined (__WAT32__) if (!scroll_flag) clrscr(); #endif label7003: /* Printing table header */ if (iprint>0) { if (ad_printf) { (*ad_printf)("%d variables; iteration %ld; function evaluation %ld", n, itn, ifn); if (pointer_to_phase) { (*ad_printf)("; phase %d", *pointer_to_phase); } (*ad_printf)( "\nFunction value %15.7le; maximum gradient component mag %12.4le\n", #if defined(USE_DDOUBLE) #undef double double(f), double(gmax)); #define double dd_real #else f, gmax); #endif } } /*label7002:*/ /* Printing Statistics table */ if(iprint>0) { fmmdisp(x, g, n, this->scroll_flag,noprintx); } label21 : /* Calculating Newton step */ /* found good search direction, increment iteration number */ itn=itn+1; for (i=1; i<=n; i++) x.elem(i)=xx.elem(i); w.elem(1)=-g.elem(1); pfmintime->get_elapsed_time_and_reset(); /* solving system of linear equations H_(k+1) * (x_(k+1)-x(k)) = -g_k to get next search direction p_k = (x_(k+1)-x(k)) = - inv(H_(k+1)) * g_k */ for (i=2; i<=n; i++) { i1=i-1; z=-g.elem(i); double * pd=&(h.elem(i,1)); double * pw=&(w.elem(1)); for (j=1; j<=i1; j++) { z-=*pd++ * *pw++; } w.elem(i)=z; } w.elem(is+n)=w.elem(n)/h.elem(n,n); { dvector tmp(1,n); tmp.initialize(); for (i=1; i<=n1; i++) { j=i; double * pd=&(h.elem(n-j+1,n-1)); double qd=w.elem(is+np-j); double * pt=&(tmp(1)); for (int ii=1; ii<=n1; ii++) { *pt++ +=*pd-- * qd; } w.elem(is+n-i)=w.elem(n-i)/h.elem(n-i,n-i)-tmp(i); } }/* w(n+1,2n) now contains search direction with current Hessian approximation */ gs=0.0; for (i=1; i<=n; i++) gs+=w.elem(is+i)*g.elem(i);/* gs = -inv(H_k)*g_k*df(x_k+alpha_k*p_k) */ iexit=2; if(gs >= 0.0) goto label92; /* exit with error */ gso=gs; /* compute new step length 0 < alpha <= 1 */ alpha=-2.0*df/gs; if(alpha > 1.0) alpha=1.0; df=f; tot=0.0; label30: /* Taking a step, updating x */ iexit=3; if (ialph) { goto label92; } /* exit if step size too small */ /* exit if number of function evaluations exceeded maxfn */ if( ifn >= maxfn) { maxfn_flag=1; goto label92; } else { maxfn_flag=0; iexit=1; } if(quit_flag) goto label92; for (i=1; i<=n; i++) { /* w(n+1,2n) has the next direction to go */ z=alpha*w.elem(is+i); /* new independent vector values */ xx.elem(i)+=z; } for (i=1; i<=n; i++) { /* save previous values and update x return value */ xsave.elem(i)=x.elem(i); gsave.elem(i)=g.elem(i); x.elem(i)=xx.elem(i); fsave = f; } fsave = f; ireturn=2; if (h.disk_save()) { cout << "starting hessian save" << endl; h.save(); cout << "finished hessian save" << endl; } return; // end of call1 call2: /* Line search and Hessian update */ if (h.disk_save()) { cout << "starting hessian restore" << endl; h.restore(); cout << "finished hessian restore" << endl; } /* restore x_k, g(x_k) and g(x_k+alpha*p_k) */ for (i=1; i<=n; i++) { x.elem(i)=xsave.elem(i); //x_k w.elem(i)=g.elem(i); //g(x_k+alpha*p_k) g.elem(i)=gsave.elem(i); //g(x_k) } fy = f; f = fsave; /* now fy is a new function value, f is the old one */ ireturn=-1; /* remember current best function value, gradient and parameter values */ if (fy <= fbest) { fbest=fy; for (i=1; i<=n; i++) { x.elem(i)=xx.elem(i); gbest.elem(i)=w.elem(i); } } /* what to do if CTRL-C keys were pressed */ if (use_control_c==1) { #if defined(__BORLANDC__) if ( kbhit() || ctlc_flag|| ifn == dcheck_flag ) #elif defined(_MSC_VER) //if ( kbhit() || ifn == dcheck_flag ) if ( _kbhit() || ctlc_flag || ifn == dcheck_flag ) #else if(ctlc_flag || ifn == dcheck_flag ) #endif { int c=0; if (ifn != dcheck_flag) { #if defined(__DJGPP__) c = toupper(getxkey()); #else c = toupper(getch()); #endif } else c='C'; if ( c == 'C') { for (i=1; i<=n; i++) { x.elem(i)=xx.elem(i); } ireturn = 3; derch(f, x , w, n, ireturn); return; } else if(c=='S') { //set convergence criteria to something high to stop now crit=100000.0; return; } else { if ( c == 'Q'|| c == 'N') { quit_flag=c; goto label92; } else { quit_flag=0; } } } } if (quit_flag) { if (quit_flag==1) quit_flag='Q'; if (quit_flag==2) quit_flag='N'; goto label92; } /* Otherwise, continue */ /* Note, icc seems to be unused */ icc+=1; if( icc >= 5) icc=0; /* ic - counter of calls without x update */ ic++; if( ic >imax) { if (iprint>0) { if (ad_printf) (*ad_printf)(" ic > imax in fminim is answer attained ?\n"); fmmdisp(x, g, n, this->scroll_flag,noprintx); } ihflag=1; ihang=1; goto label92; } /* new function value was passed to fmin, will increment ifn */ ifn++; gys=0.0; /* gys = transpose(p_k) * df(x_k+alpha_k*p_k) */ for (i=1; i<= n; i++) gys+=w.elem(i)*w.elem(is+i); /* bad step; unless modified by the user, fringe default = 0 */ if(fy>f+fringe) { goto label40; /* backtrack */ } /* Otherwise verify if the search step length satisfies strong Wolfe condition */ if(fabs(gys/gso)<=.9) goto label50; /* proceed to Hessian update */ /* or slightly modified constant in Wolfe condition for the number of calls > 4 */ if(fabs(gys/gso)<=.95 && ic > 4) goto label50; /* proceed to Hessian update */ if(gys>0.0) /* not a descent direction */ goto label40; /* backtrack */ tot+=alpha; z=10.0; if(gs<gys) z=gys/(gs-gys); if(z>10.0) z=10.0; /* increase step length */ alpha=alpha*z; if (alpha == 0.) { ialph=1; #ifdef __ZTC__ if (ireturn <= 0) { disp_close(); } #endif return; } f=fy; gs=gys; goto label30; /* update x with new alpha */ label40: /* new step is not acceptable, stepping back and start backtracking along the Newton direction trying a smaller value of alpha */ for (i=1;i<=n;i++) xx.elem(i)-=alpha*w.elem(is+i); if (alpha == 0.) { ialph=1; return; } /* compute new alpha */ z=3.0*(f-fy)/alpha+gys+gs; zz=dafsqrt(z*z-gs*gys); z=1.0-(gys+zz-z)/(2.0*zz+gys-gs); if (fabs(fy-1.e+95) < 1.e-66) { alpha*=.001; } else { if (z>10.0) { cout << "large z" << z << endl; z=10.0; } alpha=alpha*z; } if (alpha == 0.) { ialph=1; if (ialph) { if (ad_printf) (*ad_printf)("\nFunction minimizer: Step size" " too small -- ialph=1"); } return; } goto label30; /* update x with new alpha */ label50: /* compute Hessian updating terms */ alpha+=tot; f=fy; df-=f; dgs=gys-gso; xxlink=1; if(dgs+alpha*gso>0.0) goto label52; for (i=1;i<=n;i++) w.elem(iu+i)=w.elem(i)-g.elem(i); /* now w(n+1,2n) = df(x_k+alpha_k*p_k)-df(x_k) */ sig=1.0/(alpha*dgs); goto label70; label52: /* compute Hessian updating terms */ zz=alpha/(dgs-alpha*gso); z=dgs*zz-1.0; for (i=1;i<=n;i++) w.elem(iu+i)=z*g.elem(i)+w.elem(i); sig=1.0/(zz*dgs*dgs); goto label70; label60: /* compute Hessian updating terms */ xxlink=2; for (i=1;i<=n;i++) w.elem(iu+i)=g.elem(i); if(dgs+alpha*gso>0.0) goto label62; sig=1.0/gso; goto label70; label62: /* compute Hessian updating terms */ sig=-zz; goto label70; label65: /* save in g the gradient df(x_k+alpha*p_k) */ for (i=1;i<=n;i++) g.elem(i)=w.elem(i); goto label20; //convergence check label70: // Hessian update w.elem(iv+1)=w.elem(iu+1); pfmintime->get_elapsed_time_and_reset(); for (i=2;i<=n;i++) { i1=i-1; z=w.elem(iu+i); double * pd=&(h.elem(i,1)); double * pw=&(w.elem(iv+1)); for (j=1;j<=i1;j++) { z-=*pd++ * *pw++; } w.elem(iv+i)=z; } pfmintime->get_elapsed_time_and_reset(); for (i=1;i<=n;i++) { /* BFGS updating formula */ z=h.elem(i,i)+sig*w.elem(iv+i)*w.elem(iv+i); if(z <= 0.0) z=dmin; if(z<dmin) dmin=z; h.elem(i,i)=z; w.elem(ib+i)=w.elem(iv+i)*sig/z; sig-=w.elem(ib+i)*w.elem(ib+i)*z; } for (j=2;j<=n;j++) { double * pd=&(h.elem(j,1)); double * qd=&(w.elem(iu+j)); double * rd=&(w.elem(iv+1)); for (i=1;i<j;i++) { *qd-=*pd * *rd++; *pd++ +=w.elem(ib+i)* *qd; } } if (xxlink == 1) goto label60; if (xxlink == 2) goto label65; /*label90:*/ for (i=1;i<=n;i++) g.elem(i)=w.elem(i); label92: /* Exit with error */ if (iprint>0) { if (ialph) { if (ad_printf) (*ad_printf)("\nFunction minimizer: Step size too small -- ialph=1"); } if (ihang == 1) { if (ad_printf) (*ad_printf)( "Function minimizer not making progress ... is minimum attained?\n"); #if defined(USE_DDOUBLE) #undef double if (ad_printf) (*ad_printf)("Minimprove criterion = %12.4le\n",double(min_improve)); #define double dd_real #else if (ad_printf) (*ad_printf)("Minimprove criterion = %12.4le\n",min_improve); #endif } } if(iexit == 2) { if (iprint>0) { if (ad_printf) (*ad_printf)("*** grad transpose times delta x greater >= 0\n" " --- convergence critera may be too strict\n"); ireturn=-1; } } #if defined (_MSC_VER) && !defined (__WAT32__) if (scroll_flag == 0) clrscr(); #endif if (maxfn_flag == 1) { if (iprint>0) { if (ad_printf) (*ad_printf)("Maximum number of function evaluations exceeded"); } } if (iprint>0) { if (quit_flag == 'Q') if (ad_printf) (*ad_printf)("User initiated interrupt"); } if(iprint == 0) goto label777; if (ad_printf) (*ad_printf)("\n - final statistics:\n"); if (ad_printf) (*ad_printf)("%d variables; iteration %ld; function evaluation %ld\n", n, itn, ifn); #if defined(USE_DDOUBLE) #undef double if (ad_printf) (*ad_printf)( "Function value %12.4le; maximum gradient component mag %12.4le\n", double(f), double(gmax)); if (ad_printf) (*ad_printf)( "Exit code = %ld; converg criter %12.4le\n",iexit,double(crit)); #define double dd_real #else if (ad_printf) (*ad_printf)( "Function value %12.4le; maximum gradient component mag %12.4le\n", f, gmax); if (ad_printf) (*ad_printf)( "Exit code = %ld; converg criter %12.4le\n",iexit,crit); #endif fmmdisp(x, g, n, this->scroll_flag,noprintx); label777: /* Printing final Hessian approximation */ if (ireturn <= 0) #ifdef DIAG if (ad_printf) (*ad_printf)("Final values of h in fmin:\n"); cout << h << "\n"; #endif #ifdef __ZTC__ { disp_close(); } #endif return; label7000:/* Printing Initial statistics */ if (iprint>0) { #if defined (_MSC_VER) && !defined (__WAT32__) if (!scroll_flag) clrscr(); #endif if (ad_printf) (*ad_printf)("\nInitial statistics: "); } goto label7003; label7010:/* Printing Intermediate statistics */ if (iprint>0) { #if defined (_MSC_VER) && !defined (__WAT32__) if (!scroll_flag) clrscr(); #endif if (ad_printf) (*ad_printf)("\nIntermediate statistics: "); } llog=0; goto label7003; label7020:/* Exis because Hessian is not positive definite */ if (iprint > 0) { if (ad_printf) (*ad_printf)("*** hessian not positive definite\n"); } #ifdef __ZTC__ if (ireturn <= 0) { disp_close(); } #endif }
/*************************************************************************************************** *Name : robin_open *Prototype : __s32 robin_open( robin_mode_e robin_mode, void *arg_p ) *Arguments : robin_mode input. the work mode of the robin module. * arg_p input. arguments, should be NULL at present. *Return : ==0 succeed * !=0 fail *Description : open robin. *Other : ***************************************************************************************************/ __s32 robin_open( robin_mode_e robin_mode, robin_open_arg_t *arg_p ) { if(arg_p) { if(0 == arg_p->reserve_mem_size) { arg_p->reserve_mem_size = 512*1024; } } switch( robin_mode ) { case ROBIN_MODE_AUDIO_MIN : npl_delete( ); if( npl_create( RAT_MEDIA_TYPE_AUDIO) ) goto error; if( cedar_open(arg_p ) ) goto error; if( get_feedback_msgQ( ) ) goto error; if( cmdQ_create( ) ) goto error; if( robin_feedbackQ_create( ) ) goto error; if( robin_monitor_create( ROBIN_MONITOR_PRIO ) ) goto error; if( robin_cedar_mutex_create( ) ) goto error; if( robin_cmd_mutex_create( ) ) goto error; break; case ROBIN_MODE_AUDIO_MAX : npl_delete( ); if( npl_create( RAT_MEDIA_TYPE_AUDIO ) ) goto error; if( cedar_open(arg_p ) ) goto error; if( willow_open( ) ) goto error; if( get_feedback_msgQ( ) ) goto error; if( disp_open( ) ) goto error; if( cmdQ_create( ) ) goto error; if( robin_feedbackQ_create( ) ) goto error; if( robin_monitor_create( ROBIN_MONITOR_PRIO ) ) goto error; if( robin_cedar_mutex_create( ) ) goto error; if( robin_cmd_mutex_create( ) ) goto error; break; case ROBIN_MODE_VIDEO_MIN : case ROBIN_MODE_VIDEO_MAX : if( orchid_open( ) ) goto error; if( npl_create( RAT_MEDIA_TYPE_VIDEO) ) goto error; if( cedar_open(arg_p ) ) goto error; if( get_feedback_msgQ( ) ) goto error; if( disp_open( ) ) goto error; if( cmdQ_create( ) ) goto error; if( robin_feedbackQ_create( ) ) goto error; if( robin_monitor_create( ROBIN_MONITOR_PRIO ) ) goto error; if( robin_cedar_mutex_create( ) ) goto error; if( robin_cmd_mutex_create( ) ) goto error; break; case ROBIN_MODE_FAVO_VIDEO_MIN : case ROBIN_MODE_FAVO_VIDEO_MAX : DebugPrintf("before ROBIN_MODE_FAVO_VIDEO_MAX\n"); if( orchid_open( ) ) goto error; if( npl_create_favo( RAT_MEDIA_TYPE_FAVOR_VIDEO) ) goto error; if( cedar_open(arg_p ) ) goto error; if( get_feedback_msgQ( ) ) goto error; if( disp_open( ) ) goto error; if( cmdQ_create( ) ) goto error; if( robin_feedbackQ_create( ) ) goto error; if( robin_monitor_create( ROBIN_MONITOR_PRIO ) ) goto error; if( robin_cedar_mutex_create( ) ) goto error; if( robin_cmd_mutex_create( ) ) goto error; break; default : goto error; } cur_robin_mode = robin_mode; to_quit_robin = EPDK_FALSE; robin_open_state = EPDK_TRUE; return 0; error: _release_res( ); cur_robin_mode = ROBIN_MODE_UNKNOWN; to_quit_robin = EPDK_FALSE; return -1; }
/*************************************************************************************************** *Name : robin_set_mode *Prototype : __s32 robin_set_mode( robin_mode_e robin_mode ) *Arguments : robin_mode input. the work mode of the robin module. *Return : ==0 succeed * !=0 fail *Description : set the work mode of the robin module. *Other : ***************************************************************************************************/ __s32 robin_set_mode( robin_mode_e robin_mode, robin_open_arg_t *arg_p ) { if(arg_p) { if(0 == arg_p->reserve_mem_size) { arg_p->reserve_mem_size = 512*1024; } } switch( robin_mode ) { case ROBIN_MODE_AUDIO_MIN : disp_close( ); willow_close( ); npl_delete( ); if( orchid_open( ) ) goto error; if( npl_create( RAT_MEDIA_TYPE_AUDIO ) ) goto error; if( cedar_open(arg_p ) ) goto error; if( get_feedback_msgQ( ) ) goto error; if( cmdQ_create( ) ) goto error; if( robin_feedbackQ_create( ) ) goto error; if( robin_monitor_create( ROBIN_MONITOR_PRIO ) ) goto error; if( robin_cedar_mutex_create( ) ) goto error; if( robin_cmd_mutex_create( ) ) goto error; break; case ROBIN_MODE_AUDIO_MAX : npl_delete( ); if( orchid_open( ) ) goto error; if( npl_create( RAT_MEDIA_TYPE_AUDIO ) ) goto error; if( cedar_open(arg_p ) ) goto error; if( willow_open( ) ) goto error; if( get_feedback_msgQ( ) ) goto error; if( disp_open( ) ) goto error; if( cmdQ_create( ) ) goto error; if( robin_feedbackQ_create( ) ) goto error; if( robin_monitor_create( ROBIN_MONITOR_PRIO ) ) goto error; if( robin_cedar_mutex_create( ) ) goto error; if( robin_cmd_mutex_create( ) ) goto error; break; case ROBIN_MODE_VIDEO_MIN : case ROBIN_MODE_VIDEO_MAX : willow_close( ); if( orchid_open( ) ) goto error; if( npl_create( RAT_MEDIA_TYPE_VIDEO ) ) goto error; if( cedar_open(arg_p ) ) goto error; if( get_feedback_msgQ( ) ) goto error; if( disp_open( ) ) goto error; if( cmdQ_create( ) ) goto error; if( robin_feedbackQ_create( ) ) goto error; if( robin_monitor_create( ROBIN_MONITOR_PRIO ) ) goto error; if( robin_cedar_mutex_create( ) ) goto error; if( robin_cmd_mutex_create( ) ) goto error; break; default : goto error; } cur_robin_mode = robin_mode; return 0; error: _release_res( ); cur_robin_mode = ROBIN_MODE_UNKNOWN; return -1; }
int main(int argc, char **argv) { struct display *disp; struct v4l2 *v4l2; pthread_t threads[MAX_CAP]; struct thr_data tdata[MAX_CAP]; void *result = NULL; int ret = 0, i, multi = 1, idx = 0; char c; MSG("Opening Display.."); disp = disp_open(argc, argv); if (!disp) { usage(argv[0]); return 1; } for (i = 1; i < argc; i++) { if (!argv[i]) continue; if (!strcmp("--multi", argv[i])) { argv[i++] = NULL; sscanf(argv[i], "%d", &multi); argv[i] = NULL; if(multi < 1 || multi > MAX_CAP) { usage(argv[i]); return 1; } } } for (i = 0; i < multi; i++) { MSG("Opening V4L2.."); v4l2 = v4l2_open(argc, argv, &tdata[i].fourcc, &tdata[i].width, &tdata[i].height); if (!v4l2) { usage(argv[0]); return 1; } tdata[i].disp = disp; tdata[i].v4l2 = v4l2; } if (check_args(argc, argv)) { /* remaining args.. print usage msg */ usage(argv[0]); return 0; } for (i = 0; i < multi; i++) { ret = pthread_create(&threads[i], NULL, capture_loop, &tdata[i]); if(ret) { MSG("Failed creating thread"); } } for (i = 0; i < multi; i++) { pthread_join(threads[i], &result); } disp_close(disp); return ret; }
bool CDVDVideoCodecA10::DoOpen() { s32 ret; if (cas(&g_cedaropen, 0, 1) != 0) { CLog::Log(LOGERROR, "A10: cedar already in use"); return false; } m_hcedarv = libcedarv_init(&ret); if (ret < 0) { CLog::Log(LOGERROR, "A10: libcedarv_init failed. (%d)\n", ret); goto Error; } ret = m_hcedarv->set_vstream_info(m_hcedarv, &m_info); if (ret < 0) { CLog::Log(LOGERROR, "A10: set_vstream_info failed. (%d)\n", ret); goto Error; } ret = m_hcedarv->open(m_hcedarv); if (ret < 0) { CLog::Log(LOGERROR, "A10: open failed. (%d)\n", ret); goto Error; } ret = m_hcedarv->ioctrl(m_hcedarv, CEDARV_COMMAND_PLAY, 0); if (ret < 0) { CLog::Log(LOGERROR, "A10: CEDARV_COMMAND_PLAY failed. (%d)\n", ret); goto Error; } if (!disp_open()) { CLog::Log(LOGERROR, "A10: disp_open failed.\n"); goto Error; } #ifndef A10DEBUG //*open scaler once if (!scaler_open) { CLog::Log(LOGERROR, "A10: scaler_open failed.\n"); return false; } #endif CLog::Log(LOGDEBUG, "A10: cedar open."); return true; Error: Dispose(); return false; }
void decode_jpeg(struct jpeg_t *jpeg) { if (!ve_open()) err(EXIT_FAILURE, "Can't open VE"); int input_size =(jpeg->data_len + 65535) & ~65535; uint8_t *input_buffer = ve_malloc(input_size); int output_size = ((jpeg->width + 31) & ~31) * ((jpeg->height + 31) & ~31); uint8_t *luma_output = ve_malloc(output_size); uint8_t *chroma_output = ve_malloc(output_size); memcpy(input_buffer, jpeg->data, jpeg->data_len); ve_flush_cache(input_buffer, jpeg->data_len); // activate MPEG engine void *ve_regs = ve_get(VE_ENGINE_MPEG, 0); // set restart interval writel(jpeg->restart_interval, ve_regs + VE_MPEG_JPEG_RES_INT); // set JPEG format set_format(jpeg, ve_regs); // set output buffers (Luma / Croma) writel(ve_virt2phys(luma_output), ve_regs + VE_MPEG_ROT_LUMA); writel(ve_virt2phys(chroma_output), ve_regs + VE_MPEG_ROT_CHROMA); // set size set_size(jpeg, ve_regs); // ?? writel(0x00000000, ve_regs + VE_MPEG_SDROT_CTRL); // input end writel(ve_virt2phys(input_buffer) + input_size - 1, ve_regs + VE_MPEG_VLD_END); // ?? writel(0x0000007c, ve_regs + VE_MPEG_CTRL); // set input offset in bits writel(0 * 8, ve_regs + VE_MPEG_VLD_OFFSET); // set input length in bits writel(jpeg->data_len * 8, ve_regs + VE_MPEG_VLD_LEN); // set input buffer writel(ve_virt2phys(input_buffer) | 0x70000000, ve_regs + VE_MPEG_VLD_ADDR); // set Quantisation Table set_quantization_tables(jpeg, ve_regs); // set Huffman Table writel(0x00000000, ve_regs + VE_MPEG_RAM_WRITE_PTR); set_huffman_tables(jpeg, ve_regs); // start writeb(0x0e, ve_regs + VE_MPEG_TRIGGER); // wait for interrupt ve_wait(1); // clean interrupt flag (??) writel(0x0000c00f, ve_regs + VE_MPEG_STATUS); // stop MPEG engine ve_put(); //output_ppm(stdout, jpeg, output, output + (output_buf_size / 2)); if (!disp_open()) { fprintf(stderr, "Can't open /dev/disp\n"); return; } int color; switch ((jpeg->comp[0].samp_h << 4) | jpeg->comp[0].samp_v) { case 0x11: case 0x21: color = COLOR_YUV422; break; case 0x12: case 0x22: default: color = COLOR_YUV420; break; } disp_set_para(ve_virt2phys(luma_output), ve_virt2phys(chroma_output), color, jpeg->width, jpeg->height, 0, 0, 800, 600); getchar(); disp_close(); ve_free(input_buffer); ve_free(luma_output); ve_free(chroma_output); ve_close(); }
void fn_help(char **args) { static char spaces[] = " "; struct binding *b; FILE *f; int what, c, i, j, l; char *s, *t; what = read_char("Help on <f>unction, <k>ey, or <o>ption " "(shift for list)? "); switch (what) { case 'f': s = read_string("Function: ", 1); if (s == NULL || s[0] == '\0') { free(s); disp_status(DISP_STATUS, ""); return; } if ((i=find_function(s)) == -1) disp_status(DISP_STATUS, "no such function: %s", s); else disp_status(DISP_STATUS, "%s: %s", functions[i].name, functions[i].help); free(s); break; case 'F': if ((f=disp_open(opt_pager, 1)) == NULL) return; for (i=0; functions[i].name; i++) { fprintf(f, "%-16.16s %s\n", functions[i].name, functions[i].help); } disp_close(f, 1); disp_status(DISP_STATUS, ""); break; case 'k': c = read_char("Key: "); b = get_function(c, bs_none); if ((i=b->fn) == -1) disp_status(DISP_STATUS, "[%s%s] key is unbound", (binding_state != bs_none ? binding_statename[binding_state] : ""), print_key(c, 0)); else { char *buf; int cols; cols = tty_cols; if ((buf=(char *)malloc(cols+5)) == NULL) break; sprintf(buf, "[%s%s] %s", (b->state != bs_none ? binding_statename[b->state] : ""), print_key(c, 0), functions[i].name); if (b->args) { int i, l; l = strlen(buf); for (i=0; b->args[i]; i++) if (strlen(b->args[i])+l+2 > cols) { strcpy(buf+l, " ..."); break; } else { sprintf(buf+l, " %s", b->args[i]); l += strlen(b->args[i])+1; } } disp_status(DISP_STATUS, "%s", buf); free(buf); } break; case 'K': if ((f=disp_open(opt_pager, 1)) == NULL) return; for (i=0; i<max_fnkey+256; i++) { for (b=&binding[i]; b; b=b->next) { if (b->fn != -1) { s = (b->state != bs_none ? binding_statename[b->state] : ""); t = print_key(i, 0); l = strlen(s)+strlen(t); fprintf(f, "%s%s%s%s", s, t, spaces+((l>16) ? 16 : l), functions[b->fn].name); if (b->args) { for (j=0; b->args[j]; j++) fprintf(f, " %s", b->args[j]); } fputc('\n', f); } } } disp_close(f, 1); disp_status(DISP_STATUS, ""); break; case 'o': s = read_string("Option: ", 1); if (s == NULL || s[0] == '\0') { free(s); disp_status(DISP_STATUS, ""); return; } for (i=0; option[i].name; i++) if (strcasecmp(option[i].name, s) == 0 || strcasecmp(option[i].shrt, s) == 0) break; if (option[i].name == NULL) disp_status(DISP_STATUS, "no such option: %s", s); else { char *buf; switch(option[i].type) { case OPT_INT: if ((buf=(char *)malloc(30)) == NULL) break; sprintf(buf, "(int) %d", *(option[i].var.i)); break; case OPT_CHR: if ((buf=(char *)malloc(30)) == NULL) break; sprintf(buf, "(char) `%c'", *(option[i].var.i)); break; case OPT_STR: if ((buf=(char *)malloc(strlen(*(option[i].var.s))+10)) == NULL) break; sprintf(buf, "(str) ``%s''", *(option[i].var.s)); break; case OPT_BOOL: if ((buf=(char *)malloc(30)) == NULL) break; sprintf(buf, "(bool) %s", (*(option[i].var.i) ? "on" : "off")); break; case OPT_ENUM: if ((buf=(char *)malloc(strlen(option[i].values[*(option[i].var.i)])+10)) == NULL) break; sprintf(buf, "(enum) %s", option[i].values[*(option[i].var.i)]); break; default: buf = NULL; } if (buf == NULL) break; disp_status(DISP_STATUS, "%s (%s) [%s]: %s", option[i].name, option[i].shrt, buf, option[i].help); } free(s); break; case 'O': if ((f=disp_open(opt_pager, 1)) == NULL) return; for (i=0; option[i].name; i++) { if (i > 0) fputc('\n', f); fprintf(f, "%s %-15.15s", option[i].shrt, option[i].name); switch(option[i].type) { case OPT_INT: fprintf(f, "(int) %d\n", *(option[i].var.i)); break; case OPT_CHR: fprintf(f, "(char) `%c'\n", *(option[i].var.i)); break; case OPT_STR: fprintf(f, "(str) ``%s''\n", *(option[i].var.s)); break; case OPT_BOOL: fprintf(f, "(bool) %s\n", (*(option[i].var.i) ? "on" : "off")); break; case OPT_ENUM: fprintf(f, "(enum) %s\n", option[i].values[*(option[i].var.i)]); break; } fprintf(f, " %s\n", option[i].help); } disp_close(f, 1); disp_status(DISP_STATUS, ""); default: disp_status(DISP_STATUS, ""); } }