diff options
author | atlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-13 11:08:18 +0000 |
---|---|---|
committer | atlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-13 11:08:18 +0000 |
commit | ca99c8dc89eba6bb2ebb330beaccea304a930da0 (patch) | |
tree | 271aa033eb11e526d98e53441bdbf576f6279445 /libvo | |
parent | eefce080f001e82043111f814d088fa575d855d0 (diff) | |
download | mpv-ca99c8dc89eba6bb2ebb330beaccea304a930da0.tar.bz2 mpv-ca99c8dc89eba6bb2ebb330beaccea304a930da0.tar.xz |
changes according to -utf8 option, draw_osd() function added
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1502 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/sub.c | 232 | ||||
-rw-r--r-- | libvo/video_out.h | 5 | ||||
-rw-r--r-- | libvo/video_out_internal.h | 1 | ||||
-rw-r--r-- | libvo/vo_3dfx.c | 4 | ||||
-rw-r--r-- | libvo/vo_dga.c | 8 | ||||
-rw-r--r-- | libvo/vo_fbdev.c | 7 | ||||
-rw-r--r-- | libvo/vo_fsdga.c | 6 | ||||
-rw-r--r-- | libvo/vo_ggi.c | 7 | ||||
-rw-r--r-- | libvo/vo_gl.c | 5 | ||||
-rw-r--r-- | libvo/vo_md5.c | 4 | ||||
-rw-r--r-- | libvo/vo_mga.c | 6 | ||||
-rw-r--r-- | libvo/vo_null.c | 4 | ||||
-rw-r--r-- | libvo/vo_png.c | 4 | ||||
-rw-r--r-- | libvo/vo_sdl.c | 14 | ||||
-rw-r--r-- | libvo/vo_svga.c | 18 | ||||
-rw-r--r-- | libvo/vo_syncfb.c | 5 | ||||
-rw-r--r-- | libvo/vo_x11.c | 8 | ||||
-rw-r--r-- | libvo/vo_xmga.c | 8 | ||||
-rw-r--r-- | libvo/vo_xv.c | 12 | ||||
-rw-r--r-- | libvo/x11_common.c | 3 |
20 files changed, 232 insertions, 129 deletions
diff --git a/libvo/sub.c b/libvo/sub.c index 45521da278..610b0d48c0 100644 --- a/libvo/sub.c +++ b/libvo/sub.c @@ -6,17 +6,19 @@ font_desc_t* vo_font=NULL; unsigned char* vo_osd_text="00:00:00"; int sub_unicode=0; +int sub_utf8=0; -static void vo_draw_text_osd(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ - int len=strlen(vo_osd_text); - int j; +inline static void vo_draw_text_osd(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ + unsigned char *cp=vo_osd_text; + int c; + int font; int y=10; int x=20; - for(j=0;j<len;j++){ - int c=vo_osd_text[j]; - int font=vo_font->font[c]; - if(font>=0) + while (*cp){ + c=*cp; + cp++; + if ((font=vo_font->font[c])>=0) draw_alpha(x,y, vo_font->width[c], vo_font->pic_a[font]->h, @@ -31,9 +33,9 @@ static void vo_draw_text_osd(int dxs,int dys,void (*draw_alpha)(int x0,int y0, i int vo_osd_progbar_type=-1; int vo_osd_progbar_value=100; // 0..255 -static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ +inline static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ int i; - int y=dys/2; + int y=(dys-vo_font->height)/2; int x; int c,font; int width=(dxs*2/3-vo_font->width[0x10]-vo_font->width[0x12]); @@ -42,8 +44,8 @@ static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y x=(dxs-width)/2; // printf("osd.progbar width=%d xpos=%d\n",width,x); - c=vo_osd_progbar_type;font=vo_font->font[c]; - if(vo_osd_progbar_type>0 && font>=0) + c=vo_osd_progbar_type; + if(vo_osd_progbar_type>0 && (font=vo_font->font[c])>=0) draw_alpha(x-vo_font->width[c]-vo_font->spacewidth,y, vo_font->width[c], vo_font->pic_a[font]->h, @@ -51,8 +53,8 @@ static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y vo_font->pic_a[font]->bmp+vo_font->start[c], vo_font->pic_a[font]->w); - c=OSD_PB_START;font=vo_font->font[c]; - if(font>=0) + c=OSD_PB_START; + if ((font=vo_font->font[c])>=0) draw_alpha(x,y, vo_font->width[c], vo_font->pic_a[font]->h, @@ -61,20 +63,32 @@ static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y vo_font->pic_a[font]->w); x+=vo_font->width[c]; - for(i=0;i<elems;i++){ - c=(i<mark)?OSD_PB_0:OSD_PB_1;font=vo_font->font[c]; - if(font>=0) - draw_alpha(x,y, - vo_font->width[c], - vo_font->pic_a[font]->h, - vo_font->pic_b[font]->bmp+vo_font->start[c], - vo_font->pic_a[font]->bmp+vo_font->start[c], - vo_font->pic_a[font]->w); - x+=vo_font->width[c]; - } - - c=OSD_PB_END;font=vo_font->font[c]; - if(font>=0) + c=OSD_PB_0; + if ((font=vo_font->font[c])>=0) + for (i=mark;i--;){ + draw_alpha(x,y, + vo_font->width[c], + vo_font->pic_a[font]->h, + vo_font->pic_b[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->w); + x+=vo_font->width[c]; + } + + c=OSD_PB_1; + if ((font=vo_font->font[c])>=0) + for (i=elems-mark;i--;){ + draw_alpha(x,y, + vo_font->width[c], + vo_font->pic_a[font]->h, + vo_font->pic_b[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->w); + x+=vo_font->width[c]; + } + + c=OSD_PB_END; + if ((font=vo_font->font[c])>=0) draw_alpha(x,y, vo_font->width[c], vo_font->pic_a[font]->h, @@ -90,64 +104,88 @@ static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y subtitle* vo_sub=NULL; -static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ - int i; - int y; - y=dys-(1+vo_sub->lines-1)*vo_font->height-10; - - // too long lines divide into smaller ones - for(i=0;i<vo_sub->lines;i++){ - unsigned char* text=vo_sub->text[i]; - int len=strlen(text); - int j; - int xsize=-vo_font->charspace; - int lastStripPosition=-1; - int previousStrip=0; - int lastxsize=0; - - for(j=0;j<len;j++){ - int c=text[j]; - int w; - if (sub_unicode && (c>=0x80)) c=(c<<8)+text[++j]; - w = vo_font->width[c]; - if (text[j]==' ' && dxs>xsize) - { - lastStripPosition=j; - lastxsize=xsize; - } - xsize+=w+vo_font->charspace; - if (dxs<xsize && lastStripPosition>0) - { - xsize=lastxsize; - j=lastStripPosition; - y-=vo_font->height; - previousStrip=lastStripPosition; - xsize=-vo_font->charspace; - } - } - } - - - for(i=0;i<vo_sub->lines;i++){ - unsigned char* text=vo_sub->text[i];// "Hello World! HÛDEJÓ!"; - int len=strlen(text); - int j,k; - int xsize=-vo_font->charspace; - int x=0; - - int lastStripPosition=-1; - int previousStrip=0; - int lastxsize=xsize; - - for(j=0;j<len;j++){ - int c=text[j]; - int w; - if (sub_unicode && (c>=0x80)) c=(c<<8)+text[++j]; - w = vo_font->width[c]; - if (c==' ' && dxs>xsize) - { - lastStripPosition=j; - lastxsize=xsize; +#define MAX_UCS 1600 +#define MAX_UCSLINES 16 + +inline static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ + static int utbl[MAX_UCS+1]; + static int xtbl[MAX_UCSLINES]; + static int lines; + static subtitle *memsub=NULL; + static int memy; + static int memdxs; + static int memdys; + unsigned char *t; + int i; + int j; + int k; + int l; + int x; + int y; + + int c; + int len; + int line; + int font; + int lastStripPosition; + int xsize; + int lastxsize; + int lastk; + + if ((memsub!=vo_sub)||(memdxs!=dxs)||(memdys!=dys)){ + memsub=vo_sub; + memdxs=dxs; + memdys=dys; + + memy=dys-vo_font->height/4; + + // too long lines divide into smaller ones + i=k=lines=0; l=vo_sub->lines; + while (l--){ + t=vo_sub->text[i++]; + len=strlen(t)-1; + xsize=lastxsize=-vo_font->charspace; + lastStripPosition=-1; + + for (j=0;j<=len;j++){ + if ((c=t[j])>=0x80){ + if (sub_unicode) + c = (c<<8) + t[++j]; + else + if (sub_utf8){ + if ((c & 0xe0) == 0xc0) /* 2 bytes U+00080..U+0007FF*/ + c = (c & 0x1f)<<6 | (t[++j] & 0x3f); + else if((c & 0xf0) == 0xe0)/* 3 bytes U+00800..U+00FFFF*/ + c = ((c & 0x0f)<<6 | + (t[++j] & 0x3f))<<6 | (t[++j] & 0x3f); + } + } + if (k==MAX_UCS){ + utbl[k]=l=0; + break; + } else + utbl[k++]=c; + if (c==' '){ + lastk=k; + lastStripPosition=j; + lastxsize=xsize; + } + xsize+=vo_font->width[c]+vo_font->charspace; + if (dxs<xsize && lastStripPosition>0){ + j=lastStripPosition; + k=lastk; + } else if (j==len){ + lastxsize=xsize; + } else + continue; + utbl[k++]=0; + xtbl[lines++]=(dxs-lastxsize)/2; + if (lines==MAX_UCSLINES||k>MAX_UCS){ + l=0; + break; + } + memy-=vo_font->height; + xsize=lastxsize=-vo_font->charspace; } xsize+=w+vo_font->charspace; if ((dxs<xsize && lastStripPosition>0) || j==len-1) @@ -179,8 +217,28 @@ static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,int y0, i xsize=lastxsize=-vo_font->charspace; } } - } - + } + + y = memy; + + k=i=0; l=lines; + while (l--){ + x = xtbl[i++]; + while (utbl[k]){ + c=utbl[k]; + k++; + if (x>=0 && x+vo_font->width[c]<=dxs) + if ((font=vo_font->font[c])>=0) + draw_alpha(x,y, + vo_font->width[c], + vo_font->pic_a[font]->h, + vo_font->pic_b[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->w); + x+=vo_font->width[c]+vo_font->charspace; + } + y+=vo_font->height; + } } static int draw_alpha_init_flag=0; diff --git a/libvo/video_out.h b/libvo/video_out.h index b77d18a659..5fe44a4dfd 100644 --- a/libvo/video_out.h +++ b/libvo/video_out.h @@ -72,6 +72,11 @@ typedef struct vo_functions_s */ uint32_t (*draw_slice)(uint8_t *src[], int stride[], int w,int h, int x,int y); + /* + * Draws OSD to the screen buffer + */ + void (*draw_osd)(void); + /* * Blit/Flip buffer to the screen. Must be called after each frame! */ diff --git a/libvo/video_out_internal.h b/libvo/video_out_internal.h index 2f4895e247..9c8aa733a3 100644 --- a/libvo/video_out_internal.h +++ b/libvo/video_out_internal.h @@ -37,6 +37,7 @@ static uint32_t query_format(uint32_t format); get_info,\ draw_frame,\ draw_slice,\ + draw_osd,\ flip_page,\ check_events,\ uninit,\ diff --git a/libvo/vo_3dfx.c b/libvo/vo_3dfx.c index d9f3419c0d..e0e7cce278 100644 --- a/libvo/vo_3dfx.c +++ b/libvo/vo_3dfx.c @@ -450,6 +450,10 @@ draw_slice(uint8_t *src[], uint32_t slice_num) return 0; } +static void draw_osd(void) +{ +} + static void flip_page(void) { diff --git a/libvo/vo_dga.c b/libvo/vo_dga.c index b212ff7664..dcaa2a1138 100644 --- a/libvo/vo_dga.c +++ b/libvo/vo_dga.c @@ -23,6 +23,9 @@ * - works only on x86 architectures * * $Log$ + * Revision 1.30 2001/08/13 11:08:18 atlka + * changes according to -utf8 option, draw_osd() function added + * * Revision 1.29 2001/07/16 18:41:52 jkeil * vo_dga doesn't compile on non-x86 architecture due to x86 asm usage. * @@ -524,10 +527,12 @@ static void check_events(void) #include "sub.h" +static void draw_osd(void) +{ vo_draw_text(vo_dga_src_width,vo_dga_src_height,draw_alpha); } + static void flip_page( void ){ if(vo_dga_dbf_mem_offset != 0){ - vo_draw_text(vo_dga_src_width,vo_dga_src_height,draw_alpha); #ifdef HAVE_DGA2 XDGASetViewport (vo_dga_dpy, XDefaultScreen(vo_dga_dpy), @@ -539,7 +544,6 @@ static void flip_page( void ){ #endif vo_dga_dbf_current = 1 - vo_dga_dbf_current; } - check_events(); } //--------------------------------------------------------- diff --git a/libvo/vo_fbdev.c b/libvo/vo_fbdev.c index 193d419cf2..6a2cda5026 100644 --- a/libvo/vo_fbdev.c +++ b/libvo/vo_fbdev.c @@ -1130,10 +1130,13 @@ static void put_frame(void) } } -static void flip_page(void) +static void draw_osd(void) { vo_draw_text(in_width, in_height, draw_alpha); - check_events(); +} + +static void flip_page(void) +{ put_frame(); } diff --git a/libvo/vo_fsdga.c b/libvo/vo_fsdga.c index 3c636deafa..ab5f26f5f6 100644 --- a/libvo/vo_fsdga.c +++ b/libvo/vo_fsdga.c @@ -173,10 +173,12 @@ static void check_events(void) int e=vo_x11_check_events(vo_dga_dpy); } +static void draw_osd(void) +{ +} + static void flip_page( void ){ - check_events(); // printf("vo_dga: In flippage\n"); - } static unsigned int pix_buf_y[4][2048]; diff --git a/libvo/vo_ggi.c b/libvo/vo_ggi.c index c670fe176d..f10b64f8dc 100644 --- a/libvo/vo_ggi.c +++ b/libvo/vo_ggi.c @@ -524,12 +524,15 @@ static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, } #endif -static void flip_page(void) +static void draw_osd(void) { - check_events(); #ifdef GGI_OSD vo_draw_text(ggi_conf.width, ggi_conf.height, draw_alpha); #endif +} + +static void flip_page(void) +{ ggiFlush(ggi_conf.vis); } diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c index 10c334d1fd..990671dcc2 100644 --- a/libvo/vo_gl.c +++ b/libvo/vo_gl.c @@ -332,13 +332,14 @@ static void check_events(void) if(e&VO_EVENT_RESIZE) resize(vo_dwidth,vo_dheight); } +static void draw_osd(void) +{ +} static void flip_page(void) { - check_events(); - // glEnable(GL_TEXTURE_2D); // glBindTexture(GL_TEXTURE_2D, texture_id); diff --git a/libvo/vo_md5.c b/libvo/vo_md5.c index 9938b551f0..cc904c051d 100644 --- a/libvo/vo_md5.c +++ b/libvo/vo_md5.c @@ -49,6 +49,10 @@ get_info(void) return &vo_info; } +static void draw_osd(void) +{ +} + static void flip_page (void) { char buf2[100]; diff --git a/libvo/vo_mga.c b/libvo/vo_mga.c index 8c92026890..45f7e67d22 100644 --- a/libvo/vo_mga.c +++ b/libvo/vo_mga.c @@ -113,9 +113,13 @@ uninit(void) printf("vo: uninit!\n"); } -static void flip_page(void) +static void draw_osd(void) { vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha); +} + +static void flip_page(void) +{ vo_mga_flip_page(); } diff --git a/libvo/vo_null.c b/libvo/vo_null.c index 145e092195..b1d2e9a522 100644 --- a/libvo/vo_null.c +++ b/libvo/vo_null.c @@ -45,6 +45,10 @@ static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int return 0; } +static void draw_osd(void) +{ +} + static void flip_page(void) { diff --git a/libvo/vo_png.c b/libvo/vo_png.c index 851d0d4d95..c6ff61c0d0 100644 --- a/libvo/vo_png.c +++ b/libvo/vo_png.c @@ -221,6 +221,10 @@ static uint32_t draw_frame(uint8_t * src[]) } +static void draw_osd(void) +{ +} + static void flip_page (void) { char buf[100]; diff --git a/libvo/vo_sdl.c b/libvo/vo_sdl.c index 43de288ffb..7b7a0fc754 100644 --- a/libvo/vo_sdl.c +++ b/libvo/vo_sdl.c @@ -1152,9 +1152,15 @@ static void check_events (void) } } +static void draw_osd(void) +{ struct sdl_priv_s *priv = &sdl_priv; + + /* update osd/subtitles */ + vo_draw_text(priv->width,priv->height,draw_alpha); +} /** - * Display the surface we have written our data to and check for events. + * Display the surface we have written our data to * * params : mode == index of the desired fullscreen mode * returns : doesn't return @@ -1164,12 +1170,6 @@ static void flip_page (void) { struct sdl_priv_s *priv = &sdl_priv; - /* update osd/subtitles */ - vo_draw_text(priv->width,priv->height,draw_alpha); - - /* check and react on keypresses and window resizes */ - check_events(); - switch(priv->format) { case IMGFMT_RGB15: case IMGFMT_BGR15: diff --git a/libvo/vo_svga.c b/libvo/vo_svga.c index ca251086f2..7f7929261e 100644 --- a/libvo/vo_svga.c +++ b/libvo/vo_svga.c @@ -509,7 +509,8 @@ static uint32_t draw_slice(uint8_t *image[], int stride[], return (0); } -static void flip_page(void) { +static void draw_osd(void) +{ if (y_pos) { gl_fillbox(0, 0, WIDTH, y_pos, 0); gl_fillbox(0, HEIGHT - y_pos, WIDTH, y_pos, 0); @@ -520,6 +521,9 @@ static void flip_page(void) { } vo_draw_text(WIDTH, HEIGHT, draw_alpha); +} + +static void flip_page(void) { gl_copyscreen(screen); } @@ -538,13 +542,9 @@ static void uninit(void) { free(scalebuf); if (yuvbuf != NULL) free(yuvbuf); - if (modelist != NULL) { - while (modelist->next != NULL) { - list = modelist; - while (list->next != NULL) - list = list->next; - free(list); - } - free(modelist); + while (modelist != NULL) { + list=modelist; + modelist=modelist->next; + free(list); } } diff --git a/libvo/vo_syncfb.c b/libvo/vo_syncfb.c index e01eb3d3f5..38d6487b54 100644 --- a/libvo/vo_syncfb.c +++ b/libvo/vo_syncfb.c @@ -272,8 +272,9 @@ draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) return 0; } - - +static void draw_osd(void) +{ +} static void flip_page(void) diff --git a/libvo/vo_x11.c b/libvo/vo_x11.c index 41ef08c857..f6bda68162 100644 --- a/libvo/vo_x11.c +++ b/libvo/vo_x11.c @@ -373,7 +373,6 @@ static void Display_Image( XImage *myximage,uint8_t *ImageData ) 0,0, ( vo_dwidth - myximage->width ) / 2,( vo_dheight - myximage->height ) / 2, myximage->width,myximage->height,True ); - XFlush( mDisplay ); } else #endif @@ -382,7 +381,6 @@ static void Display_Image( XImage *myximage,uint8_t *ImageData ) 0,0, ( vo_dwidth - myximage->width ) / 2,( vo_dheight - myximage->height ) / 2, myximage->width,myximage->height ); - XFlush( mDisplay ); } #endif } @@ -405,10 +403,12 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned } } +static void draw_osd(void) +{ vo_draw_text(image_width,image_height,draw_alpha); } + static void flip_page( void ){ - vo_draw_text(image_width,image_height,draw_alpha); - check_events(); Display_Image( myximage,ImageData ); + XSync(mDisplay, False); } static uint32_t draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y ) diff --git a/libvo/vo_xmga.c b/libvo/vo_xmga.c index a640c0ea5f..790f1ce6f0 100644 --- a/libvo/vo_xmga.c +++ b/libvo/vo_xmga.c @@ -161,6 +161,9 @@ static void check_events(void) } +static void draw_osd(void) +{ vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha);} + static void flip_page(void){ #ifdef SHOW_TIME unsigned int t; @@ -170,10 +173,7 @@ static void flip_page(void){ timer=t; #endif - vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha); - - check_events(); - vo_mga_flip_page(); + vo_mga_flip_page(); } static uint32_t init( uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format ) diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c index 4c2c1cf224..e748ee6f32 100644 --- a/libvo/vo_xv.c +++ b/libvo/vo_xv.c @@ -328,16 +328,20 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned } +static void draw_osd(void) +{ vo_draw_text(image_width,image_height,draw_alpha);} + static void flip_page(void) { - vo_draw_text(image_width,image_height,draw_alpha); - check_events(); XvShmPutImage(mDisplay, xv_port, mywindow, mygc, xvimage[current_buf], 0, 0, image_width, image_height, drwX,drwY,drwWidth,(mFullscreen?drwHeight - 1:drwHeight), False); - XFlush(mDisplay); - current_buf=(current_buf+1)%num_buffers; + if (num_buffers>1){ + current_buf=(current_buf+1)%num_buffers; + XFlush(mDisplay); + } else + XSync(mDisplay, False); return; } diff --git a/libvo/x11_common.c b/libvo/x11_common.c index d739c230f0..2f0b6ab52a 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -137,7 +137,8 @@ void vo_x11_putkey(int key){ case wsM: mplayer_put_key('m'); break; case wso: case wsO: mplayer_put_key('o'); break; - default: if((key>='a' && key<='z')||(key>='A' && key<='Z')) mplayer_put_key(key); + default: if((key>='a' && key<='z')||(key>='A' && key<='Z')|| + (key>='0' && key<='9')) mplayer_put_key(key); } } |