/* main */ int main(int argc, char *argv[]) { fb_info fb_inf; pthread_t p_tcp; if (argc != 2) { printf("Usage: ./appname 192.168.1.***\n"); exit(1); } if (init_fb(&fb_inf) < 0) { fprintf(stderr, "Error initial framebuffer\b") ; return -1; } if (init_ft("mao.ttf", 150) < 0) { fprintf(stderr, "Error initial font\b"); exit(1); } pthread_create(&p_tcp, NULL, pro_thread_tcp, argv[1]); mouse_work(fb_inf, X_START, Y_START); munmap(fb_inf.fbmem, fb_inf.w * fb_inf.h * fb_inf.bpp / 8); return 0; }
/* main function */ int main(int argc, char *argv[]) { if (argc < 2) argv[1] = "test.jpg"; fb_info fb_inf; if (init_fb(&fb_inf) < 0){ fprintf(stderr, "Error initial framebuffer\n"); return 1; } display_jpeg(argv[1], fb_inf); #if 0 /* Test mouse */ //test_mouse(fb_inf); if (init_ft("mao.ttf", 0) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } display_string("显示文字", 432, 400, fb_inf, 0xFF0000); #endif munmap(fb_inf.fbmem, fb_inf.w * fb_inf.h * fb_inf.bpp / 8); return 0; }
/*********************************************************** * view pic ************************************************************/ void view_pic(fb_info fb_inf, char name[4][20]) { display_one("background/view.jpg",fb_inf); int size = 32 * fb_inf.w/1024; if(init_ft("font/type.ttf", size) != 0) { fprintf(stderr, "Error initial font\n"); return; } int x = fb_inf.w/4 - size * 3/2; int y = fb_inf.h - 20 * fb_inf.h/768; display_string("上一页", x, y, fb_inf, COLOR); display_string("下一页", x + fb_inf.w/2, y, fb_inf, COLOR); int i; for(i = 0; i < 4; i++) { char path[128]="image/"; strncat(path,name[i],strlen(name[i]) - 1); if(strstr(path,".jpg") != NULL) show(path, fb_inf, i); } }
/*主界面 函数*/ void menu(fb_info fb_inf) { display_menu("1.jpg", fb_inf); if (init_ft("mao.ttf", 0) != 0) { fprintf(stderr, "Error initial font\n"); return; } display_string("播放", fb_inf.w/8, fb_inf.h/5, fb_inf, 0xFF0000); display_string("预览", fb_inf.w/8, fb_inf.h*2/5, fb_inf, 0xFF0000); display_string("音乐", fb_inf.w/8, fb_inf.h*3/5, fb_inf, 0xFF0000); display_string("退出", fb_inf.w/8, fb_inf.h*4/5, fb_inf, 0xFF0000); display_string("上一页",fb_inf.w/2,98*fb_inf.h/100,fb_inf, 0x00ff0000); display_string("下一页",3*fb_inf.w/4,98*fb_inf.h/100,fb_inf, 0x00ff0000); }
int previewmusic(fb_info fb_inf)//音乐名字预览未完成 { struct dirent *musicdr; DIR *musicdir; char bufmusic[MUSIC_MAX][MUSIC_MAX]; int music_number = 0; int j = 0,i = 1; display_jpeg_2("1.jpg",fb_inf); musicdir = opendir("/home/akaedu/929/teacher/music"); while((musicdr = readdir(musicdir) )!= NULL ) { if((strcmp(musicdr->d_name, "..")==0) || (strcmp(musicdr->d_name, ".")==0)) continue; strcpy(bufmusic[music_number],musicdr->d_name); music_number++; // printf("%s\n",buf); } closedir(musicdir); if(init_ft("mao.ttf",0) != 0) { fprintf(stderr, "Error inital font\n"); return 1; } while(j<=music_number) { display_string(bufmusic[j],fb_inf.w/8,(j+1)*fb_inf.h/10,fb_inf,0x0000ff00); j++; display_string("上一页",fb_inf.w/2,98*fb_inf.h/100,fb_inf, 0x00ff0000); display_string("下一页",3*fb_inf.w/4,98*fb_inf.h/100,fb_inf, 0x00ff0000); if(j == 10*i) { i++; pause(); } } display_string("已到最后一曲",fb_inf.w,98*fb_inf.h/100,fb_inf, 0x00ff0000); return 0; }
int previewpicture(fb_info fb_inf) { struct dirent *mydr; DIR *fpdir; char buf[PICTURE_MAX][PICTURE_MAX]; int picture_number = 0; int i = 0; /* struct sigaction sig_set; sigemptyset(&sig_set.sa_mask); sig_set.sa_handler = sig_usr; sig_set.sa_flags = 0; sigprocmask(SIG_BLOCK, &sig_set.sa_mask, NULL); sigaction(SIGABRT, &sig_set, NULL); sigaction(SIGCONT, &sig_set, NULL); */ fpdir = opendir("../image"); while(((mydr = readdir(fpdir) ))!= NULL ) { if((strcmp(mydr->d_name, "..")==0) || (strcmp(mydr->d_name, ".")==0)) continue; strcpy(buf[picture_number],mydr->d_name); picture_number++; } closedir(fpdir); while(i <= picture_number ) { display_jpeg("1.jpg",fb_inf); if(sig_number < 0) sig_number = 0; if(sig_number > picture_number) sig_number = picture_number; i = sig_number; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,fb_inf.w/16,fb_inf.h/16,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,3*fb_inf.w/8,fb_inf.h/16,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,11*fb_inf.w/16,fb_inf.h/16,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,fb_inf.w/16,3*fb_inf.h/8,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,3*fb_inf.w/8,3*fb_inf.h/8,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,11*fb_inf.w/16,3*fb_inf.h/8,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,1*fb_inf.w/16,11*fb_inf.h/16,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,3*fb_inf.w/8,11*fb_inf.h/16,fb_inf); else break; if(i < picture_number ) display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,11*fb_inf.w/16,11*fb_inf.h/16,fb_inf); else break; sig_number = i; if(init_ft("mao.ttf",0) != 0) { fprintf(stderr, "Error inital font\n"); return 1; } display_string("上一页",fb_inf.w/2,98*fb_inf.h/100,fb_inf, 0x00ff0000); display_string("下一页",3*fb_inf.w/4,98*fb_inf.h/100,fb_inf, 0x00ff0000); if (restar_flag == 1) { printf("ddddddddddd\n"); init_restar(); return 1; } pause(); } display_string("已到最后一页",fb_inf.w,98*fb_inf.h/100,fb_inf, 0x00ff0000); return 0; }
int button_click(fb_info fb_inf) { int mfd; mouse_open(NULL, &mfd); /* highlight ico */ fb_info jpeg_inf; fb_info b_inf; if (init_fb(&b_inf) < 0) { printf("Error init_fb\n"); exit(1); } u8_t *buf24 = decode_jpeg("mainframel.jpg", &jpeg_inf); u8_t * scale_buf = scale24(buf24, b_inf, jpeg_inf); u32_t *buf32 = rgb24to32(scale_buf, b_inf); /* initialize font */ if (init_ft("x.ttf", 45) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } int m_x = fb_inf.w / 2; int m_y = fb_inf.h / 2; fb_drawcursor(fb_inf, m_x, m_y); u8_t buf[8]; mouse_event_t mevent; ico fkey[9]; fkey[0].x = 34; fkey[0].y = 34; fkey[1].x = 34; fkey[1].y = 178; fkey[2].x = 34; fkey[2].y = 322; fkey[3].x = 34; fkey[3].y = 510; fkey[4].x = 34; fkey[4].y = 660; fkey[5].x = 262; fkey[5].y = 46; fkey[6].x = 265; fkey[6].y = 180; fkey[7].x = 469; fkey[7].y = 46; fkey[8].x = 823; fkey[8].y = 595; char *discription[9] = {"图片", "音乐", "电子书", "设置", "时间", "幻灯", "浏览", "关于", "退出"}; int door2 = 1; /* loading ... */ display_jpeg("loading.jpg", fb_inf); display_string("loading", 200, 450, fb_inf, 0x00ff55e3); /* initialize font */ if (init_ft("x.ttf", 84) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } int c = 3; /* loading time */ while (c) { int i; for (i=0; i<3; i++) { display_string(".", 550 + i *100, 450, fb_inf, 0x00ff0000); usleep(200000); } for (i=0; i<3; i++) { display_string(".", 550 + i *100, 450, fb_inf, 0x00ffff55); usleep(200000); } c--; } /* landing mainfframe */ /* initialize font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } display_jpeg("mainframe.jpg", fb_inf); while (1) { int n = read(mfd, buf, 8); if (n != -1) { mouse_parse(buf,&mevent); fb_restorecursor(fb_inf, m_x, m_y); m_x += mevent.x; m_y += mevent.y; int k = 1; if (m_x>0 && m_x<1024 && m_y>0 && m_y<752) { fb_drawcursor(fb_inf, m_x, m_y); int i; for (i=0; i<9; i++) if (m_x > fkey[i].x && m_x < fkey[i].x + 100 && m_y > fkey[i].y && m_y < fkey[i].y + 100 ) { display_string(discription[i], fkey[i].x + 120, fkey[i].y + 50, fb_inf, 0x00ff0000); int m, n; for (m=fkey[i].y; m< fkey[i].y + 120; m++ ) for (n=fkey[i].x - 20; n< fkey[i].x + 100; n++ ) fb_pixel(b_inf, n, m, buf32[n + m * b_inf.w]); k = 0; /* interface for effect */ if (mevent.button == 1) /* if left button down ,when the cursor is being on the taiji ico occur */ { if (i == 5) { /* initialize font */ if (init_ft("x.ttf", 64) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } char *f2[7] = {"虽","然", "哥", "不", "在", "江", "湖"}; char *f3[12] = {"但", "江", "湖", "仍", "有", "哥", "的", "传", "说", ".", ".", ".",}; fb_info fbinf; if (init_fb(&fbinf) < 0) { printf("Error init_fb\n"); exit(1); } jpgdsp_door( "oba.jpg", fbinf ); int i; for (i=0; i<7; i++) { display_string(f2[i], 240 + i*80, 400, fb_inf, 0x00fffb55); usleep(100000); } for (i=0; i<12; i++) { display_string(f3[i], 100 + i*80, 570, fb_inf, 0x00fffb55); usleep(100000); } sleep(2); /* recover font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } /* interface for you */ fbb(); /* write here */ mevent.button = 0; /* Avoid play again */ display_jpeg("mainframe.jpg", fb_inf);/* back to mainframe */ } if (i == 7 && door2) { display_jpeg("show.jpg", fb_inf); sleep(5); display_jpeg("show_us.jpg", fb_inf); sleep(5); door2 = 0; display_jpeg("mainframe.jpg", fb_inf); } if (i == 8) { /* initialize font */ if (init_ft("x.ttf", 64) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } // move1("log-out.jpg", fb_inf); display_jpeg("log-out.jpg", fb_inf); int i; char *f1[5] = {"待","续", ".", ".", "."}; for (i=0; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000); usleep(100000); } int j = 4; /* replay ... tree times */ while (j) { for (i=2; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ffff55); usleep(200000); } for (i=2; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000); usleep(200000); } j--; } /* initialize font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } display_string("雁留声工作室", 800, 720, fb_inf, 0x0055ffff); exit(1); } } } } else { m_x -= mevent.x; m_y -= mevent.y; } if (k) { display_jpeg("mainframe.jpg", fb_inf); mevent.button = 0; } } } free(buf24); free(scale_buf); free(buf32); return 0; }
void efp_st_int(size_t n_atoms_i, const struct xr_atom *atoms_i, size_t n_atoms_j, const struct xr_atom *atoms_j, size_t stride, double *s, double *t) { double xin[90]; double yin[90]; double zin[90]; double ft[100], dij[100]; double sblk[100], tblk[100]; for (size_t iii = 0, loc_i = 0; iii < n_atoms_i; iii++) { const struct xr_atom *at_i = atoms_i + iii; /* shell i */ for (size_t ii = 0; ii < at_i->n_shells; ii++) { const struct shell *sh_i = at_i->shells + ii; size_t type_i = get_shell_idx(sh_i->type); size_t start_i = get_shell_start(type_i); size_t end_i = get_shell_end(type_i); size_t sl_i = get_shell_sl(type_i); size_t count_i = end_i - start_i; for (size_t jjj = 0, loc_j = 0; jjj < n_atoms_j; jjj++) { const struct xr_atom *at_j = atoms_j + jjj; /* shell j */ for (size_t jj = 0; jj < at_j->n_shells; jj++) { const struct shell *sh_j = at_j->shells + jj; size_t type_j = get_shell_idx(sh_j->type); size_t start_j = get_shell_start(type_j); size_t end_j = get_shell_end(type_j); size_t sl_j = get_shell_sl(type_j); size_t count_j = end_j - start_j; size_t count = count_i * count_j; memset(sblk, 0, count * sizeof(double)); memset(tblk, 0, count * sizeof(double)); init_ft(count_i, sh_j->type, ft); double rr = vec_dist_2(CVEC(at_i->x), CVEC(at_j->x)); const size_t *shift_x = shift_table_x[type_i * 5 + type_j]; const size_t *shift_y = shift_table_y[type_i * 5 + type_j]; const size_t *shift_z = shift_table_z[type_i * 5 + type_j]; const double *coef_i = sh_i->coef; /* primitive i */ for (size_t ig = 0; ig < sh_i->n_funcs; ig++) { double ai = *coef_i++; double con_i[20]; set_coef(con_i, sh_i->type, coef_i); coef_i++; if (sh_i->type == 'L') coef_i++; const double *coef_j = sh_j->coef; /* primitive j */ for (size_t jg = 0; jg < sh_j->n_funcs; jg++) { double aj = *coef_j++; double aa = 1.0 / (ai + aj); double tmp = aj * ai * rr * aa; if (tmp > int_tol) { coef_j++; if (sh_j->type == 'L') coef_j++; continue; } double con_j[20]; set_coef(con_j, sh_j->type, coef_j); coef_j++; if (sh_j->type == 'L') coef_j++; vec_t a = { (ai * at_i->x + aj * at_j->x) * aa, (ai * at_i->y + aj * at_j->y) * aa, (ai * at_i->z + aj * at_j->z) * aa }; double fac = exp(-tmp); for (size_t i = start_i, idx = 0; i < end_i; i++) for (size_t j = start_j; j < end_j; j++, idx++) dij[idx] = fac * con_i[i] * int_norm[i] * con_j[j] * int_norm[j]; double taa = sqrt(aa); double t1 = -2.0 * aj * aj * taa; double t2 = -0.5 * taa; for (size_t i = 0, idx = 0; i < sl_i; i++, idx += 5) { for (size_t j = 0; j < sl_j; j++) { vec_t iout; make_int(i, j, taa, &a, CVEC(at_i->x), CVEC(at_j->x), &iout); xin[idx + j] = iout.x * taa; yin[idx + j] = iout.y * taa; zin[idx + j] = iout.z * taa; make_int(i, j + 2, taa, &a, CVEC(at_i->x), CVEC(at_j->x), &iout); xin[idx + j + 30] = iout.x * t1; yin[idx + j + 30] = iout.y * t1; zin[idx + j + 30] = iout.z * t1; if (j >= 2) { make_int(i, j - 2, taa, &a, CVEC(at_i->x), CVEC(at_j->x), &iout); double t3 = j * (j - 1) * t2; xin[idx + j + 60] = iout.x * t3; yin[idx + j + 60] = iout.y * t3; zin[idx + j + 60] = iout.z * t3; } else { xin[idx + j + 60] = 0.0; yin[idx + j + 60] = 0.0; zin[idx + j + 60] = 0.0; } } } for (size_t i = 0; i < count; i++) { size_t nx = shift_x[i]; size_t ny = shift_y[i]; size_t nz = shift_z[i]; double xyz = xin[nx] * yin[ny] * zin[nz]; double add = (xin[nx + 30] + xin[nx + 60]) * yin[ny] * zin[nz] + (yin[ny + 30] + yin[ny + 60]) * xin[nx] * zin[nz] + (zin[nz + 30] + zin[nz + 60]) * xin[nx] * yin[ny]; sblk[i] = sblk[i] + dij[i] * xyz; tblk[i] = tblk[i] + dij[i] * (xyz * aj * ft[i] + add); } } } /* store integrals */ for (size_t i = 0, idx = 0; i < count_i; i++) { size_t idx2 = (loc_i + i) * stride + loc_j; for (size_t j = 0; j < count_j; j++, idx++, idx2++) { s[idx2] = sblk[idx]; t[idx2] = tblk[idx]; } } loc_j += count_j; }} loc_i += count_i; }} }
int main (int argc, char **argv) { if(argc > 1) { //fprintf(stdout,"%s\n",argv[1]); int server_fd; unsigned short remote_port; remote_port = 8000; struct sockaddr_in remote_ipv4_address; memset(&remote_ipv4_address,0,sizeof(remote_ipv4_address)); remote_ipv4_address.sin_family = AF_INET; remote_ipv4_address.sin_port = htons(remote_port); inet_pton(AF_INET,argv[1],&remote_ipv4_address.sin_addr); //pause(); ssize_t receive; ssize_t total = 0; ssize_t send; char buffer[BUFFER_SIZE]; while(1) { if((server_fd = socket(PF_INET,SOCK_STREAM,0)) < 0){ fprintf(stderr,"socket create failed,%s\n",strerror(errno)); exit(1); } fprintf(stdout,"Socket create successed,server fd %d\n",server_fd); if(connect(server_fd,(struct sockaddr *)&remote_ipv4_address,sizeof(remote_ipv4_address)) < 0){ fprintf(stderr,"connect to remote server %s : %d failed,%s\n",argv[1],remote_port,strerror(errno)); close(server_fd); exit(1); } fprintf(stdout,"Connected to %s:%d success.\n",argv[1],remote_port); receive = read(STDIN_FILENO,buffer,sizeof(buffer)); if(strncmp(buffer,"ls",2) == 0){ send = write(server_fd,buffer,receive); if(send < 0){ fprintf(stderr,"send command to server failed,%s\n",strerror(errno)); exit(2); } fprintf(stdout,"Send %d bytes to server successed.\n",send); while(1) { receive = read(server_fd,buffer,BUFFER_SIZE - 1); if(receive < 0){ if(errno == EINTR) continue; fprintf(stderr,"receive data failed,%s\n",strerror(errno)); exit(3); }else if(receive == 0){ break; } write(STDOUT_FILENO,buffer,receive); total += receive; } fprintf(stdout,"Received %d bytes.\n",total); total = 0; }else if(strncmp(buffer,"cp",2) == 0){ total = 0; send = write(server_fd,buffer,receive); if(send < 0){ fprintf(stderr,"send command to server failed,%s\n",strerror(errno)); exit(2); } fprintf(stdout,"Send %d bytes to server successed.\n",send); char rbuffer[BUFFER_SIZE]; receive = read(server_fd,rbuffer,BUFFER_SIZE - 1); if(strncmp(rbuffer,"Bad",3) == 0){ write(STDOUT_FILENO,rbuffer,receive); exit(3); } if(strncmp(rbuffer,"File",4) == 0){ write(STDOUT_FILENO,rbuffer,receive); exit(3); } char *ptr; buffer[send - 1] = '\0'; fprintf(stdout,"%s\n",buffer); ptr = str_proc(buffer + 2); if(ptr == NULL){ fprintf(stderr,"string process failed\n"); exit(3); } char path[4096]; snprintf(path,sizeof(path),"./res/jpg/%s",ptr); fprintf(stdout,"path %s\n",path); int file_fd = open(path,O_RDWR | O_CREAT | O_TRUNC,0644); if(file_fd < 0){ fprintf(stderr,"open file %s failed,%s\n",path,strerror(errno)); exit(3); } write(file_fd,rbuffer,receive); total += receive; while((receive = read(server_fd,rbuffer,BUFFER_SIZE - 1)) != 0) { write(file_fd,rbuffer,receive); total += receive; } fprintf(stdout,"Download success.Received %d bytes.\n",total); close(file_fd); }else if(strncmp(buffer,"exit",4) == 0){ break; } close(server_fd); } } else{ if(init_fb(&fb_inf) < 0){ fprintf(stderr,"init fb failed,%s\n",strerror(errno)); exit(1); } screen_size = fb_inf.w * fb_inf.h * fb_inf.bpp / 8; fprintf(stdout,"%d\n",screen_size); int err_code; #if 1 pthread_t mou_tid; if((err_code = pthread_create(&mou_tid,NULL,mouse_ops,NULL)) != 0 ) { fprintf(stderr,"create pthread failed,%s\n",strerror(err_code)); exit(5); } #endif #if 1 char *file_desk[1024]; int pic_num = 0; if(read_jpg_dir("./res/jpg",file_desk,&pic_num) < 0){ fprintf(stderr,"read_jpg_dir failed.\n"); int pic_num = 0; if(read_jpg_dir("./res/jpg",file_desk,&pic_num) < 0){ fprintf(stderr,"read_jpg_dir failed.\n"); exit(4); } exit(4); } tranves_file_desk(file_desk,pic_num); fprintf(stdout,"sum %d\n",pic_num); #if 1 err_code = init_ft("./res/fonts/fanxinshu.TTF",36); if(err_code != 0){ fprintf(stderr,"init_ft failed\n"); exit(1); } #endif fun play_funs[DISPLAY_FUNS] = {disp_jpeg2,fang_picture_l,right_mid_left,fang_picture_h,down_in,right_in,bai_ye_chuang,up_down,left_right,rand_picture,crilepicture_big,crilepicture_small,up_mid_down,left_fix_right,Random,Box_radom,dissolve}; unsigned int index = 0; unsigned int fun_ind = 0; int flag = 1; char pathname[1024]; welcome_menu: rool_flag = 0; welcome_flag = 1; #if 1 err_code = init_ft("./res/fonts/fanxinshu.TTF",36); if(err_code != 0){ fprintf(stderr,"init_ft failed\n"); exit(1); } #endif pthread_mutex_lock(&mutex_lock); play_funs[0]("./res/welcome/welcome.jpg",fb_inf); display_string("自动播放",200,200,fb_inf,0x0930e); display_string("手动播放",400,400,fb_inf,0xc9112d); display_string("音乐播放",600,600,fb_inf,0xe68500); display_string("退出",950,750,fb_inf,0x9f0521); memcpy(screen_save,fb_inf.fbmem,screen_size); pthread_mutex_unlock(&mutex_lock); while(!rool_flag) sleep(1); welcome_flag = 0; while(flag == 1) { //fprintf(stdout,"%s,%d,flag %d\n",pathname,fun_ind,mouse_global_flag); #if 1 switch(mouse_global_flag) { case 0: #if 1 snprintf(pathname,sizeof(pathname),"./res/jpg/%s",file_desk[index]); pthread_mutex_lock(&mutex_lock); play_funs[fun_ind](pathname,fb_inf); init_ft("./res/fonts/fanxinshu.TTF",22); display_string(file_desk[index],10,20,fb_inf,0xaffff); memcpy(screen_save,fb_inf.fbmem,screen_size); pthread_mutex_unlock(&mutex_lock); fun_ind++; fun_ind = fun_ind % DISPLAY_FUNS; index++; index = index % pic_num; #endif sleep(1); break; case 1: index++; index = index % pic_num; snprintf(pathname,sizeof(pathname),"./res/jpg/%s",file_desk[index]); pthread_mutex_lock(&mutex_lock); play_funs[15](pathname,fb_inf); init_ft("./res/fonts/stsong.ttf",30); display_string("返回",950,750,fb_inf,0x9f0521); init_ft("./res/fonts/fanxinshu.TTF",22); display_string(file_desk[index],10,20,fb_inf,0xaffff); memcpy(screen_save,fb_inf.fbmem,screen_size); pthread_mutex_unlock(&mutex_lock); mouse_global_flag = 10; sleep(1); break; case -1: index--; index = index % pic_num; snprintf(pathname,sizeof(pathname),"./res/jpg/%s",file_desk[index]); pthread_mutex_lock(&mutex_lock); play_funs[16](pathname,fb_inf); init_ft("./res/fonts/stsong.ttf",30); display_string("返回",950,750,fb_inf,0x9f0521); init_ft("./res/fonts/fanxinshu.TTF",22); display_string(file_desk[index],10,20,fb_inf,0xaffff); memcpy(screen_save,fb_inf.fbmem,screen_size); pthread_mutex_unlock(&mutex_lock); mouse_global_flag = 10; sleep(1); break; case 2: goto welcome_menu; break; case 3: flag = 0; break; default: break; } #endif } pthread_mutex_lock(&mutex_lock); play_funs[9]("./res/end/end.jpg",fb_inf); init_ft("./res/fonts/fanxinshu.TTF",90); display_string("谢谢观赏",360,300,fb_inf,0xb8264a); memcpy(screen_save,fb_inf.fbmem,screen_size); pthread_mutex_unlock(&mutex_lock); pthread_mutex_destroy(&mutex_lock); pthread_cancel(mou_tid); pthread_join(mou_tid,NULL); destroy_file_desk(file_desk,pic_num); #endif if(munmap(fb_inf.fbmem,fb_inf.w * fb_inf.h * fb_inf.bpp / 8) < 0){ fprintf(stderr,"mmunmap failed,%s\n",strerror(errno)); exit(5); } } return 0; }
void *mouse_ops(void *arg) { mouse_t mevent; memset(&mevent,0,sizeof(mevent)); fb_info mous_inf = fb_inf;; int mfd = open_mice(NULL); int pre_px,pre_py; sleep(1); while(1) { pre_px = mevent.px; pre_py = mevent.py; read_mice(mfd, &mevent, mous_inf); if(mevent.px != pre_px || mevent.py != pre_py){ pthread_mutex_lock(&mutex_lock); memcpy(fb_inf.fbmem,screen_save,screen_size); draw_mouse(mous_inf,mevent); pthread_mutex_unlock(&mutex_lock); usleep(20000); } //recover_mouse(mous_inf,mevent); if(welcome_flag == 1){ if(mevent.button == 1) { if(mevent.px > 200 && mevent.px < 336 && mevent.py > 176 && mevent.py < 200){ pthread_mutex_lock(&mutex_lock); display_string("自动播放",200,200,fb_inf,0x777777); pthread_mutex_unlock(&mutex_lock); rool_flag = 1; mevent.button = 0; mouse_global_flag = 0; usleep(100000); }else if(mevent.px > 406 && mevent.px < 530 && mevent.py > 373 && mevent.py < 400){ pthread_mutex_lock(&mutex_lock); display_string("手动播放",400,400,fb_inf,0x777777); pthread_mutex_unlock(&mutex_lock); rool_flag = 1; mevent.button = 0; mouse_global_flag = 1; }else if(mevent.px > 606 && mevent.px < 730 && mevent.py > 569 && mevent.py < 595){ pthread_mutex_lock(&mutex_lock); display_string("音乐播放",600,600,fb_inf,0x777777); pthread_mutex_unlock(&mutex_lock); rool_flag = 1; mevent.button = 0; mouse_global_flag = 2; }else if(mevent.px > 950 && mevent.px < 1000 && mevent.py > 725 && mevent.py < 753){ pthread_mutex_lock(&mutex_lock); display_string("退出",950,750,fb_inf,0x777777); pthread_mutex_unlock(&mutex_lock); rool_flag = 1; mevent.button = 0; mouse_global_flag = 3; } } }else{ if(mevent.button == 1) { if(mevent.px > 950 && mevent.px < 1000 && mevent.py > 725 && mevent.py < 753){ init_ft("./res/fonts/stsong.ttf",30); display_string("返回",950,750,fb_inf,0x777777); mevent.button = 0; mouse_global_flag = 2; }else{ rool_flag = 1; mevent.button = 0; mouse_global_flag = 1; } } else if(mevent.button == 2){ mouse_global_flag = -1; mevent.button = 0; }else if(mevent.button == 4){ mouse_global_flag = 0; mevent.button = 0; } } usleep(10000); } return (void *)NULL; }