Hello community, here is the log from the commit of package gfxboot checked in at Mon Apr 28 17:16:23 CEST 2008. -------- --- arch/i386/gfxboot/gfxboot.changes 2008-04-17 15:00:36.000000000 +0200 +++ /mounts/work_src_done/STABLE/gfxboot/gfxboot.changes 2008-04-28 16:40:02.000000000 +0200 @@ -1,0 +2,9 @@ +Mon Apr 28 16:39:41 CEST 2008 - snwint@suse.de + +- WAV file playback works again +- added beep when bootloader is ready (fate #303482) +- added 'visually impaired' mode key (F9) (fate #303482) +- added speech output +- added Thai + +------------------------------------------------------------------- Old: ---- gfxboot-4.0.5.tar.bz2 New: ---- gfxboot-4.0.6.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gfxboot.spec ++++++ --- /var/tmp/diff_new_pack.w20790/_old 2008-04-28 17:15:46.000000000 +0200 +++ /var/tmp/diff_new_pack.w20790/_new 2008-04-28 17:15:46.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package gfxboot (Version 4.0.5) +# spec file for package gfxboot (Version 4.0.6) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -19,10 +19,10 @@ Requires: coreutils cpio mktemp perl AutoReqProv: on Summary: Graphical Boot Logo for GRUB, LILO and SYSLINUX -Version: 4.0.5 -Release: 3 +Version: 4.0.6 +Release: 1 BuildRoot: %{_tmppath}/%{name}-%{version}-build -Source: gfxboot-4.0.5.tar.bz2 +Source: gfxboot-4.0.6.tar.bz2 Source1: openSUSE.tar.bz2 Source2: upstream.tar.bz2 @@ -127,6 +127,12 @@ %ghost /boot/message %changelog +* Mon Apr 28 2008 snwint@suse.de +- WAV file playback works again +- added beep when bootloader is ready (fate #303482) +- added 'visually impaired' mode key (F9) (fate #303482) +- added speech output +- added Thai * Thu Apr 17 2008 snwint@suse.de - adjusted package requires (bnc #380757) * Mon Apr 14 2008 snwint@suse.de ++++++ gfxboot-4.0.5.tar.bz2 -> gfxboot-4.0.6.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/gfxboot-4.0.5/bincode.asm new/gfxboot-4.0.6/bincode.asm --- old/gfxboot-4.0.5/bincode.asm 2008-04-08 12:28:02.000000000 +0200 +++ new/gfxboot-4.0.6/bincode.asm 2008-04-28 12:13:59.000000000 +0200 @@ -424,20 +424,21 @@ kbd_status dw 0 -sound_buf_size equ 8*1024 +sound_buf_size equ 4*1024 +sound_buf_mask equ sound_buf_size - 1 + align 4, db 0 -sound_x dd 0 +sound_unpack_buf dd 0 ; buffer for unpacked sound samples +sound_unpack_buf_size dd 0 +cnt0_acc dw 0 +cnt0_start_val dw 0 sound_old_int8 dd 0 -sound_old_61 db 0 -sound_61 db 0 -sound_cnt0 dw 0 -sound_timer0 dw 0 -sound_timer1 dw 0 sound_vol db 0 sound_ok db 0 sound_int_active db 0 -sound_playing db 0 +sound_playing db 0 ; bits 0-3: mod, 4-7: wav +sound_scale db 0 sound_sample dd 0 sound_buf dd 0 ; (seg:ofs) sound_buf.lin dd 0 ; buffer for sound player @@ -446,9 +447,11 @@ playlist times playlist_entries * sizeof_playlist db 0 mod_buf dd 0 ; buffer for mod player int8_count dd 0 -cycles_per_tt dd 0 -cycles_per_int dd 0 -next_int dd 0,0 +wav_current dd 0 ; pointer to currently played way file +wav_end dd 0 ; stop here +wav_next dd 0 ; next sound sample +wav_type db 0 +need_sound_update db 0 align 4, db 0 @@ -918,10 +921,23 @@ jc gfx_init_90 mov [vbe_info_buffer],eax + mov eax,sound_buf_size + call calloc + cmp eax,1 + jc gfx_init_90 + mov [sound_buf.lin],eax + mov edx,eax + and eax,~0fh + shl eax,12 + and edx,0fh + mov ax,dx + mov [sound_buf],eax + ; those must be low memory addresses: mov eax,[gfx_pal_tmp] or eax,[vbe_buffer] or eax,[vbe_info_buffer] + or eax,[sound_buf.lin] cmp eax,100000h cmc jc gfx_init_90 @@ -5278,8 +5294,14 @@ cmp dx,t_int + (t_string << 8) jz prim_add_50 cmp dx,t_int + (t_ptr << 8) + jz prim_add_50 + cmp dx,t_string + (t_int << 8) + jz prim_add_40 + cmp dx,t_ptr + (t_int << 8) stc jnz prim_add_90 +prim_add_40: + xchg dl,dh prim_add_50: add eax,ecx dec dword [pstack.ptr] @@ -8532,6 +8554,50 @@ ret +;; getword - get word from memory +; +; group: system +; +; ( ptr1 -- int1 ) +; +; int1: word at ptr1 +; + + bits 32 + +prim_getword: + mov dl,t_ptr + call get_1arg + jc prim_getword_90 + movzx eax,word [es:eax] + mov dl,t_int + xor ecx,ecx + call set_pstack_tos +prim_getword_90: + ret + + +;; putword - write word to memory +; +; group: system +; +; ( ptr1 int1 -- ) +; +; Write word int1 at ptr1. +; + + bits 32 + +prim_putword: + mov dx,t_int + (t_ptr << 8) + call get_2args + jc prim_putword_90 + mov [es:ecx],ax + sub dword [pstack.ptr],2 +prim_putword_90: + ret + + ;; getdword - get dword from memory ; ; group: system @@ -9329,7 +9395,7 @@ jb prim_sgsr_90 mov [pstack.ptr],eax mov dl,t_int - movzx eax,byte [sound_sample] + mov eax,[sound_sample] xor ecx,ecx call set_pstack_tos prim_sgsr_90: @@ -9340,7 +9406,7 @@ ; ; group: sound ; -; ( -- int1 ) +; (int1 -- ) ; ; int1: sample rate ; @@ -9396,24 +9462,6 @@ ret -%if 0 - - bits 32 - -prim_soundtest: - mov dl,t_int - call get_1arg - jc prim_stest_90 - dec dword [pstack.ptr] - - mov [sound_x],eax - call sound_test - clc -prim_stest_90: - ret -%endif - - ;; mod.load - assign mod file to player ; ; group: sound @@ -9546,6 +9594,81 @@ ret +;; wav.play - play wav file +; +; group: sound +; +; ( ptr1 -- ) +; +; ptr1: wav file +; + + bits 32 + +prim_wavplay: + call pr_setptr_or_none + + call snd_activate + + clc + ret + +prim_test2: + mov eax,wav_current + add eax,[prog.base] + jmp pr_getptr_or_none + +prim_test3: + movzx eax,word [cnt0_start_val] + jmp pr_getint + +prim_test4: + mov eax,[int8_count] + jmp pr_getint + +prim_test5: + xor eax,eax + mov al,[sound_playing] + mov ah,[need_sound_update] + jmp pr_getint + +prim_test6: + mov eax,sound_start + add eax,[prog.base] + jmp pr_getptr_or_none + + + +;; wav.playlater - play wav file after current one +; +; group: sound +; +; ( ptr1 -- ) +; +; ptr1: wav file +; + + bits 32 + +prim_wavplaylater: + mov eax,[wav_current] + or eax,eax + jz prim_wavplay + cmp eax,[wav_end] + jz prim_wavplay + + call pr_setptr_or_none + + ; eax file + + mov [wav_next],eax + + or byte [sound_playing],0f0h + + clc + ret + + ;; settextwrap - set text wrap column ; ; group: text @@ -13492,6 +13615,173 @@ ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +; Activate sound file. +; +; eax buffer +; + +snd_activate: + push eax + call find_mem_size + pop esi + + cmp eax,16 + jbe sa_90 + + cmp dword [es:esi],7d53b605h + jnz sa_50 + + ; our format + + mov ecx,[es:esi+12] ; sample rate + cmp ecx,1 + jb sa_90 + cmp ecx,24000 + jae sa_90 + + mov edx,[es:esi+8] ; unpacked size + add esi,16 + sub eax,16 + + cmp eax,[es:esi-16+4] ; packed size + jbe sa_10 + mov eax,[es:esi-16+4] +sa_10: + + cmp edx,[sound_unpack_buf_size] + jbe sa_20 + + push edx + push ecx + push esi + push eax + + push edx + mov eax,[sound_unpack_buf] + call free + pop eax + call calloc + + pop ebp + pop esi + pop ecx + pop edx + + or eax,eax + jz sa_90 + mov [sound_unpack_buf],eax + mov [sound_unpack_buf_size],edx + mov eax,ebp +sa_20: + + mov edi,[sound_unpack_buf] + add edx,edi + + ; esi: src + ; edi: dst + ; eax: src size + ; edx: dst end + + mov [wav_end],edx + mov [wav_current],edi + + mov [tmp_var_0],edi + add eax,esi + mov [tmp_var_1],eax + + push ecx + +sa_30: + cmp esi,[tmp_var_1] + jae sa_49 + mov eax,[es:esi] + cmp al,0ffh + jz sa_40 + stosb + inc esi + cmp edi,edx + jb sa_30 + jmp sa_49 +sa_40: + add esi,4 + shr eax,8 + mov ecx,eax + and ecx,7fh + add ecx,5 + lea ebx,[edi+ecx] + cmp ebx,edx + ja sa_49 + shr eax,7 + add eax,[tmp_var_0] + push esi + mov esi,eax + es rep movsb + pop esi + jmp sa_30 +sa_49: + + pop ecx + + jmp sa_70 + +sa_50: + cmp eax,44 ; WAV header size + jbe sa_90 + + ; could be WAV + + cmp dword [es:esi+0],46464952h + jnz sa_90 + cmp dword [es:esi+8],45564157h + jnz sa_90 + cmp word [es:esi+20],1 + jnz sa_90 + cmp word [es:esi+34],8 + jnz sa_90 + cmp word [es:esi+22],1 + jnz sa_90 + mov ecx,[es:esi+24] ; sample rate + cmp ecx,1 + jb sa_90 + cmp ecx,24000 + jae sa_90 + + add esi,44 + sub eax,44 + + cmp eax,[es:esi-44+40] ; size + jbe sa_60 + mov eax,[es:esi-44+40] +sa_60: + + add eax,esi + + mov [wav_end],eax + mov [wav_current],esi + +sa_70: + + mov byte [sound_scale],0 + cmp ecx,12000 + jae sa_80 + add ecx,ecx + mov byte [sound_scale],1 + dec dword [wav_current] +sa_80: + + push ecx + call sound_init + pop eax + jc sa_90 + call sound_setsample + + or byte [sound_playing],0f0h + +sa_90: + ret + + +; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Our timer interrut handler. ; ; Needed to play sound via pc-speaker. @@ -13509,118 +13799,76 @@ push cs pop ds - mov al,20h - out 20h,al - inc dword [int8_count] cmp byte [sound_playing],0 - jnz new_int8_10 - - mov ax,[sound_timer1] - out 40h,al - mov al,ah - out 40h,al - - jmp new_int8_90 - -new_int8_10: + jz new_int8_50 -%if 0 - rdtsc - mov esi,[next_int] - mov edi,[next_int + 4] - sub esi,eax - sbb edi,edx - jnc new_int8_20 + ; play sound - xor eax,eax - xor edx,edx - sub eax,esi - sbb edx,edi + mov si,[sound_start] + cmp si,[sound_end] + jz new_int8_30 - mov [tmp_var_0],eax - mov [tmp_var_1],edx -%endif + les bx,[sound_buf] + movzx ax,byte [es:bx+si] -new_int8_20: - rdtsc - mov edi,edx - mov esi,eax + ; 0ffh = off - sub eax,[next_int] - sbb edx,[next_int + 4] - jb new_int8_20 - - add esi,[cycles_per_int] - adc edi,0 - mov [next_int],esi - mov [next_int + 4],edi + cmp al,0ffh + jz new_int8_10 - mov si,[sound_start] - cmp si,[sound_end] - jz new_int8_25 +%if 0 - les bx,[sound_buf] - mov dl,[es:bx+si] + ; not slower than timer - cmp dl,0ffh - jz new_int8_22 + mov cx,[cnt0_start_val] + sub cx,4 - mov al,[sound_61] - out 61h,al - and al,0xfe - out 61h,al + cmp ax,cx + jb new_int8_05 + mov ax,cx +new_int8_05: +%endif - mov al,dl out 42h,al -new_int8_22: +new_int8_10: inc si - cmp si,sound_buf_size - jb new_int8_23 - xor si,si -new_int8_23: - + and si,sound_buf_mask mov [sound_start],si -new_int8_25: - mov ax,[sound_timer1] - out 40h,al - mov al,ah - out 40h,al - - mov ax,[sound_timer0] - or ax,ax - jz new_int8_30 - add [sound_cnt0],ax - jnc new_int8_40 new_int8_30: - push word 40h - pop es - inc dword [es:6ch] -new_int8_40: - - cmp byte [sound_int_active],0 - jnz new_int8_90 - mov byte [sound_int_active],1 - - sti + ; refill sound buffer mov ax,[sound_end] sub ax,[sound_start] - jnc new_int8_60 + jnc new_int8_40 add ax,sound_buf_size -new_int8_60: +new_int8_40: cmp ax,160 - jae new_int8_80 - pm32_call mod_get_samples + jae new_int8_50 + + mov byte [need_sound_update],1 -new_int8_80: +new_int8_50: + + ; run bios timer + + mov ax,[cnt0_start_val] + or ax,ax + jz new_int8_60 + add [cnt0_acc],ax + jnc new_int8_70 +new_int8_60: + push word 40h + pop es + inc dword [es:6ch] +new_int8_70: - mov byte [sound_int_active],0 -new_int8_90: + mov al,20h + out 20h,al pop gs pop fs @@ -13632,6 +13880,39 @@ ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +; Add sound samples to buffer. +; + + bits 32 + +sound_update: + + test byte [sound_playing],0fh + jz sound_update_20 + call mod_get_samples + jmp sound_update_50 +sound_update_20: + test byte [sound_playing],0f0h + jz sound_update_50 + call wav_get_samples + + mov eax,[wav_current] + cmp eax,[wav_end] + jnz sound_update_50 + mov eax,[wav_next] + or eax,eax + jz sound_update_50 + call snd_activate + mov dword [wav_next],0 + +sound_update_50: + + mov byte [need_sound_update],0 + + ret + + +; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Prepare sound subsystem. ; ; Installs a new timer interrupt handler and increases timer frequency. @@ -13643,9 +13924,6 @@ cmp byte [sound_ok],0 jnz sound_init_90 - call chk_tsc - jc sound_init_90 - mov eax,ar_sizeof call calloc cmp eax,1 @@ -13654,24 +13932,13 @@ call mod_init - mov eax,sound_buf_size - call calloc - cmp eax,1 - jc sound_init_90 - mov [sound_buf.lin],eax - mov edx,eax - and eax,~0fh - shl eax,12 - and edx,0fh - mov ax,dx - mov [sound_buf],eax - xor eax,eax mov [int8_count],eax mov [sound_start],eax mov [sound_end],eax mov [sound_playing],al mov [sound_int_active],al + mov [need_sound_update],al mov edi,playlist add edi,[prog.base] @@ -13681,21 +13948,20 @@ pushf cli - in al,61h - mov [sound_old_61],al - or al,3 - mov [sound_61],al - - mov al,92h + mov al,90h out 43h,al - mov al,30h + mov al,34h out 43h,al xor ax,ax out 40h,al out 40h,al + in al,61h + or al,3 + out 61h,al + push dword [es:8*4] pop dword [sound_old_int8] @@ -13705,41 +13971,9 @@ popf - mov eax,[int8_count] -sound_init_40: - cmp eax,[int8_count] - jz sound_init_40 - - rdtsc - - mov edi,edx - mov esi,eax - - mov eax,[int8_count] - add eax,4 -sound_init_50: - cmp eax,[int8_count] - jnz sound_init_50 - - rdtsc - - sub eax,esi - sbb edx,edi - - shrd eax,edx,18 - adc eax,0 - mov [cycles_per_tt],eax - - mov [tmp_var_0],eax - mov [tmp_var_1],edx - mov eax,16000 call sound_setsample - xor eax,eax - mov [next_int],eax - mov [next_int+4],eax - mov byte [sound_ok],1 sound_init_90: ret @@ -13760,20 +13994,23 @@ pushf cli - mov al,[sound_old_61] + in al,61h + and al,~3 out 61h,al mov al,36h out 43h,al - xor ax,ax + xor eax,eax out 40h,al out 40h,al - mov [sound_timer0],ax - mov [sound_timer1],ax - mov [sound_cnt0],ax + mov [cnt0_start_val],ax + mov [cnt0_acc],ax mov [sound_playing],al + mov [need_sound_update],al + mov [sound_start],eax + mov [sound_end],eax push dword [sound_old_int8] pop dword [es:8*4] @@ -13785,9 +14022,14 @@ mov eax,[mod_buf] call free - mov eax,[sound_buf.lin] + mov eax,[sound_unpack_buf] call free + xor eax,eax + mov [mod_buf],eax + mov [sound_unpack_buf],eax + mov [sound_unpack_buf_size],eax + sound_done_90: ret @@ -13805,69 +14047,26 @@ jae sound_setsample_20 mov eax,20 sound_setsample_20: - cmp eax,18000 + cmp eax,24000 jbe sound_setsample_50 - mov eax,18000 + mov eax,24000 sound_setsample_50: mov [sound_sample],eax xchg eax,ecx mov eax,1193180 xor edx,edx div ecx - mov [sound_timer0],ax - push eax - mul dword [cycles_per_tt] - mov [cycles_per_int],eax - - mov [tmp_var_2],eax - - pop eax - - ; 5/4 faster - imul eax,eax,4 - mov ecx,5 - div ecx + mov [cnt0_start_val],ax - mov [sound_timer1],ax - mov [tmp_var_3],eax - pushf cli out 40h,al mov al,ah out 40h,al popf -sound_setsample_90: - ret - - -; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Test sound subsystem. -; -%if 0 - - bits 32 - -sound_test: - cmp dword [sound_x],0 - jz sound_test_80 - - call sound_init - jc sound_test_90 - - mov eax,16000 - call sound_setsample - - mov byte [sound_playing],1 - - jmp sound_test_90 - -sound_test_80: - call sound_done -sound_test_90: +sound_setsample_90: ret -%endif ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -13898,7 +14097,7 @@ mod_play: mov esi,[mod_buf] call playmod - mov byte [sound_playing],1 + or byte [sound_playing],0fh ret @@ -13909,7 +14108,7 @@ mod_playsample: mov esi,[mod_buf] call playsamp - mov byte [sound_playing],1 + or byte [sound_playing],0fh ret @@ -13940,11 +14139,7 @@ or al,dl ; 0ffh if we play nothing mov [es:ebx+edi],al inc edi - cmp edi,sound_buf_size - jb mod_get_samples_50 - xor edi,edi - -mod_get_samples_50: + and edi,sound_buf_mask dec ecx jnz mod_get_samples_20 @@ -13986,6 +14181,89 @@ ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + bits 32 + +wav_get_samples: + mov esi,[wav_current] + or esi,esi + jz mod_get_samples_90 + cmp esi,[wav_end] + jae mod_get_samples_90 + + mov ecx,num_samples + mov edi,[sound_buf.lin] + mov ebp,[sound_end] + cld + +wav_get_samples_20: + cmp esi,[wav_end] + jb wav_get_samples_25 + mov al,0ffh + jmp wav_get_samples_50 +wav_get_samples_25: + es lodsb + + cmp byte [sound_scale],0 + jz wav_get_samples_30 + + mov dl,al + call calc_delay + + mov [es:edi+ebp],al + inc ebp + and ebp,sound_buf_mask + + mov al,dl + add al,[es:esi] + rcr al,1 + +wav_get_samples_30: + call calc_delay + +wav_get_samples_50: + mov [es:edi+ebp],al + inc ebp + and ebp,sound_buf_mask + + dec ecx + jnz wav_get_samples_20 + + mov [sound_end],ebp + mov [wav_current],esi + +wav_get_samples_90: + ret + + +calc_delay: + push edx + push ebx + + sub al,128 + movsx eax,al + movzx edx,byte [sound_vol] + imul edx + mov ebx,100 + idiv ebx + cmp eax,7fh + jle calc_delay_30 + mov al,7fh +calc_delay_30: + cmp eax,-80h + jg calc_delay_40 + mov al,-80h +calc_delay_40: + add al,80h + movzx eax,al + mov al,[pctab+eax] + + pop ebx + pop edx + ret + + +; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Check for cpuid instruction. ; ; return: @@ -14015,27 +14293,6 @@ ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Check for time stamp counter. -; -; return: -; CF 0/1 yes/no -; - - bits 32 - -chk_tsc: - call chk_cpuid - jc chk_tsc_90 - mov eax,1 - cpuid - test dl,1 << 4 - jnz chk_tsc_90 - stc -chk_tsc_90: - ret - - -; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Check for 64 bit extension. ; ; return: @@ -15561,6 +15818,12 @@ mov fs,ax mov gs,ax + cmp byte [need_sound_update],0 + jz switch_to_pm_80 + pusha + call sound_update + popa +switch_to_pm_80: pop eax popfw o16 ret diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/gfxboot-4.0.5/Changelog new/gfxboot-4.0.6/Changelog --- old/gfxboot-4.0.5/Changelog 2008-04-14 09:55:58.000000000 +0200 +++ new/gfxboot-4.0.6/Changelog 2008-04-28 16:19:57.000000000 +0200 @@ -1,3 +1,10 @@ +28/4/2008: v4.0.6 + - WAV file playback works again + - added beep when bootloader is ready (fate #303482) + - added 'visually impaired' mode key (F9) (fate #303482) + - added speech output + - added Thai + 14/4/2008: v4.0.5 - gfxboot doesn't always need a bootloader diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/gfxboot-4.0.5/mk_vocabulary new/gfxboot-4.0.6/mk_vocabulary --- old/gfxboot-4.0.5/mk_vocabulary 2008-04-08 12:28:02.000000000 +0200 +++ new/gfxboot-4.0.6/mk_vocabulary 2008-04-28 10:26:49.000000000 +0200 @@ -32,6 +32,7 @@ sound.getsamplerate sound.setsamplerate sound.play sound.done mod.load mod.play mod.playsample + wav.play wav.playlater settextwrap currenttextwrap seteotchar currenteotchar @@ -54,7 +55,7 @@ 64bit - getbyte putbyte getdword putdword + getbyte putbyte getword putword getdword putdword inbyte outbyte findfile filesize getcwd chdir @@ -75,7 +76,7 @@ getkey - test1 xxx + xxx test1 test2 test3 test4 test5 test6 ); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/gfxboot-4.0.5/VERSION new/gfxboot-4.0.6/VERSION --- old/gfxboot-4.0.5/VERSION 2008-04-14 09:54:57.000000000 +0200 +++ new/gfxboot-4.0.6/VERSION 2008-04-14 17:47:54.000000000 +0200 @@ -1 +1 @@ -4.0.5 +4.0.6 ++++++ openSUSE.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/data-boot/gfxboot.cfg new/themes/openSUSE/data-boot/gfxboot.cfg --- old/themes/openSUSE/data-boot/gfxboot.cfg 2008-04-10 18:09:22.000000000 +0200 +++ new/themes/openSUSE/data-boot/gfxboot.cfg 2008-04-28 16:20:45.000000000 +0200 @@ -1,6 +1,15 @@ # theme name theme=openSUSE + # penguin theme likelihood in percent; -1 = auto penguin=0 + # show welcome animation (cdrom boot only) welcome=0 + +# beep when menu is ready +beep=0 + +# activate speech output +talk=0 + Files old/themes/openSUSE/data-install/en.tlk and new/themes/openSUSE/data-install/en.tlk differ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/data-install/gfxboot.cfg new/themes/openSUSE/data-install/gfxboot.cfg --- old/themes/openSUSE/data-install/gfxboot.cfg 2008-04-11 18:16:33.000000000 +0200 +++ new/themes/openSUSE/data-install/gfxboot.cfg 2008-04-28 16:15:48.000000000 +0200 @@ -1,6 +1,15 @@ # theme name theme=openSUSE + # penguin theme likelihood in percent; -1 = auto penguin=0 + # show welcome animation (cdrom boot only) welcome=1 + +# beep when menu is ready +beep=1 + +# activate speech output +talk=0 + diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/data-install/languages new/themes/openSUSE/data-install/languages --- old/themes/openSUSE/data-install/languages 2008-04-10 18:16:07.000000000 +0200 +++ new/themes/openSUSE/data-install/languages 2008-04-28 15:14:38.000000000 +0200 @@ -43,6 +43,7 @@ fi_FI sv_SE ta_IN +th_TH zh_TW vi_VN tr_TR Files old/themes/openSUSE/fonts/16x16.fnt and new/themes/openSUSE/fonts/16x16.fnt differ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/fonts/16x16.fnt.log new/themes/openSUSE/fonts/16x16.fnt.log --- old/themes/openSUSE/fonts/16x16.fnt.log 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/fonts/16x16.fnt.log 2008-04-28 15:16:41.000000000 +0200 @@ -32,6 +32,10 @@ File /usr/share/fonts/truetype/lklug.ttf Size 17, dY 1 c 0x0d82-0x0df4 + Loma (ok) + File /usr/share/fonts/truetype/Loma.ttf + Size 17, dY -2 + c 0x0e01-0x0e7f KhmerOS_sys (ok) File /usr/share/fonts/truetype/KhmerOS_sys.ttf Size 16, dY -2 @@ -15310,6 +15314,168 @@ |..........| +Char 0x0e17 'ท' + Font: Loma (17) + Bitmap: 11 x 10 + Advance: 11 + Offset: 0 x -2 + ___________ + |...........| + |...........| + |...........| + |...........| + |...........| + |...........| + |...........| + | 461 251 | + |4b99 1##c | + |585c 8c7# | + |19b# 1#53#1| + | 5# 7c 3#1| + | 5# #6 3#1| + | 5#6c 3#1| + ->| 5#c6 3#1|<- + | 5## 3#1| + | 5#7 3#1| + |...........| + |...........| + ----------- + +Char 0x0e20 'ภ' + Font: Loma (17) + Bitmap: 11 x 10 + Advance: 11 + Offset: 0 x -2 + ___________ + |...........| + |...........| + |...........| + |...........| + |...........| + |...........| + |...........| + | 2675 | + | 7#cb#c2 | + | 5#4 1ba | + | 6c4 5# | + | 6c 3#1| + | 1#4 3#1| + | 26# 3#1| + ->|2cb# 3#1|<- + |573c 3#1| + |1b#6 3#1| + |...........| + |...........| + ----------- + +Char 0x0e22 'ย' + Font: Loma (17) + Bitmap: 8 x 10 + Advance: 10 + Offset: 1 x -2 + __________ + |..........| + |..........| + |..........| + |..........| + |..........| + |..........| + |..........| + |. 362 53.| + |.3#8c b7.| + |.6c2c b7.| + |.6#b7 b7.| + |.2#41 b7.| + |. 7#b2 b7.| + |.2#1 b7.| + ->|.4c b7.|<- + |.4c4444b7.| + |.4######7.| + |..........| + |..........| + ---------- + +Char 0x0e29 'ษ' + Font: Loma (17) + Bitmap: 11 x 10 + Advance: 11 + Offset: 0 x -2 + ___________ + |...........| + |...........| + |...........| + |...........| + |...........| + |...........| + |...........| + | 56 61 | + |7ab8 #4 | + |857a #4 | + |2aca 41#62| + | 7a 658#c4| + | 7a 4#9#9 | + | 7a 46#4 | + ->| 7a #3 |<- + | 7b3333#3 | + | 7######3 | + |...........| + |...........| + ----------- + +Char 0x0e32 'า' + Font: Loma (17) + Bitmap: 7 x 10 + Advance: 10 + Offset: 1 x -2 + __________ + |..........| + |..........| + |..........| + |..........| + |..........| + |..........| + |..........| + |. 575 ..| + |.1b#b#c2..| + |.89 b9..| + |.1 6c..| + |. 5#..| + |. 5#..| + |. 5#..| + ->|. 5#..|<- + |. 5#..| + |. 5#..| + |..........| + |..........| + ---------- + +Char 0x0e44 'ไ' + Font: Loma (17) + Bitmap: 9 x 16 + Advance: 9 + Offset: -1 x -2 + _________ + |..........| + | 22 .| + |b2 3##4 .| + |96 86b7 .| + |4b c1a7 .| + | 9#7 a7 .| + | a7 .| + | a7 .| + | a7 .| + | a7 .| + | a7 .| + | a7 .| + | a7 .| + | a83 .| + ->| ab96.|<- + | 9728.| + | 4#c4.| + |..........| + |..........| + --------- + Char 0x1ebf 'ế' Font: DejaVuSans-Bold (14) Bitmap: 8 x 12 diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/fonts/Makefile new/themes/openSUSE/fonts/Makefile --- old/themes/openSUSE/fonts/Makefile 2008-04-08 18:02:21.000000000 +0200 +++ new/themes/openSUSE/fonts/Makefile 2008-04-28 15:16:12.000000000 +0200 @@ -10,14 +10,14 @@ .ready: @touch .ready -16x16.fnt: ../po/en.tr ../bootlogo.log ../message.log +16x16.fnt: ../po/en.tr ../src/main.log cat ../po/*.tr ../help-*/*.html >tmp.txt $(GFXBOOT_FONT) -v -l 18 \ -c ISO-8859-15 -c ISO-8859-2 -c koi8-r \ `$(KEYMAPCHARS) ../keymaps/keymap.*.inc` \ -t tmp.txt \ - -t ../bootlogo.log -t ../message.log \ - -t ../languages \ + -t ../src/main.log \ + -t ../data-install/languages \ -f NachlieliCLM-Bold:size=14:c=0x590-0x5ff \ -f KacstOne:size=14:c=0x600-0x6ff,0xfe70-0xfefc:dy=2 \ -f MuktiNarrow:size=18:c=0x0981-0x09fa:bold=1 \ @@ -26,6 +26,7 @@ -f lohit_gu:size=18:c=0x0a81-0x0af1:bold=1 \ -f TSCu_Paranar:size=18:c=0x0b82-0x0bfa:dy=2:bold=1 \ -f lklug:size=17:c=0x0d82-0x0df4:bold=1:dy=1 \ + -f Loma:size=17:c=0x0e01-0x0e7f:bold=0:dy=-2 \ -f KhmerOS_sys:size=16:c=0x1780-0x17f9:dy=-2 \ -f DejaVuSans-Bold:size=14 \ -f FZHeiTi:size=17:nobitmap=1:autohint=1 \ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/po/Makefile new/themes/openSUSE/po/Makefile --- old/themes/openSUSE/po/Makefile 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/po/Makefile 2008-04-28 12:55:57.000000000 +0200 @@ -16,4 +16,4 @@ bin/po2txt --product='$(PRODUCT)' $< >en.tr clean: - rm -f .ready text.inc *.tr *~ + rm -f .ready text.inc *.tr *~ talk/*~ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/src/common.inc new/themes/openSUSE/src/common.inc --- old/themes/openSUSE/src/common.inc 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/src/common.inc 2008-04-28 16:10:12.000000000 +0200 @@ -602,6 +602,13 @@ dup window.init window.show + config.beep { 3000 50000 beep } if + + config.talk { + load_talk_dialog + menu.texts menu.idx get menuitemmap speak + } if + syslinux { 32+64bit_source not { @@ -1110,6 +1117,12 @@ } def +/chksum { + 0 exch + { add } forall +} def + + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Some special debug & test keys. % @@ -1121,17 +1134,31 @@ currentpoint 0 0 moveto 64 string biosmem "mem = %u " 2 index sprintf dup show free moveto setcolor - pop 0 } if dup keyF8 eq syslinux and { kroete.file .undef eq { /kroete.file "kroete.dat" findfile def } if kroete.file kroete.dir idle /kroete.dir kroete.dir 1 xor def - pop 0 } if dup keyF9 eq syslinux and { + /v_impaired inc + + v_impaired 1 eq config.talk not and { + /config.talk true def + load_talk_dialog + menu.texts menu.idx get menuitemmap speak + } { + sound.getsamplerate { sound.getsamplerate sound.setsamplerate } if + } ifelse + + xmenu.video .xm_current 0 put + % redraw unless another menu is still open + window.current { + window.current .xmenu get .undef eq { video.update } if + } if + .undef 0 idle kroete.file free /kroete.file .undef def pop 0 @@ -1142,7 +1169,6 @@ currentpoint 0 0 moveto "eject " print bootdrive eject print moveto setcolor - pop 0 } if dup keyShiftF5 eq syslinux and debug 3 ge and { @@ -1150,7 +1176,6 @@ currentpoint 100 0 moveto bootdrive print moveto setcolor - pop 0 } if dup keyShiftF8 eq debug 3 ge and { @@ -1168,25 +1193,28 @@ 2 memsize print "/" print print " " print moveto + currentpoint 300 60 moveto + 3 memsize print "/" print print " " print + moveto + + currentpoint 300 80 moveto + 4 memsize print "/" print print " " print + moveto + setcolor - pop 0 } if dup keyShiftF9 eq debug 3 ge and { dumpmem - pop 0 } if dup keyShiftF10 eq { - /debug debug 1 add def "" - pop 0 + /debug debug 1 add def } if dup keyShiftF1 eq { /transp transp 0x10 sub 0 max def - % sound test XXXXXXXX - /player 0 def player "hapysuse.mod" findfile dup { @@ -1201,6 +1229,25 @@ pop 0 } if + dup keyShiftF3 eq { + "fsfsong.wav" findfile dup + { + 50 sound.setvolume + wav.play + } { + pop + } ifelse + + pop 0 + } if + + dup keyShiftF4 eq { + % sound test XXXXXXXX + + sound.done + + } if + dup keyF11 eq debug 1 ge and { /dit { @@ -1496,6 +1543,8 @@ /debug 0 def +/v_impaired 0 def + ptheme small_layout or CapsLock or diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/src/dia_help.inc new/themes/openSUSE/src/dia_help.inc --- old/themes/openSUSE/src/dia_help.inc 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/src/dia_help.inc 2008-04-28 12:42:05.000000000 +0200 @@ -17,6 +17,8 @@ "" eq { pop } { help.setcontext } ifelse } if show_help + + config.talk { txt_help speak } if } def diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/src/dia_lang.inc new/themes/openSUSE/src/dia_lang.inc --- old/themes/openSUSE/src/dia_lang.inc 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/src/dia_lang.inc 2008-04-28 15:03:14.000000000 +0200 @@ -18,61 +18,62 @@ /.la.name 2 def /lang.defaultnames [ - [ "af_ZA" false "Afrikaans" ] -% [ "ar_EG" true "\u064a\u0628\u0631\u0639" ] - [ "ar_EG" true "\ufef2\ufe91\ufeae\ufecb" ] - [ "bg_BG" false "Български" ] - [ "bn_BD" false "\u09ac\u09be\u0982\u09b2\u09be" ] % Bengali - [ "bs_BA" false "Bosanski" ] - [ "ca_ES" false "Català" ] - [ "cs_CZ" false "Čeština" ] - [ "cy_GB" false "Cymraeg" ] - [ "da_DK" false "Dansk" ] - [ "de_DE" false "Deutsch" ] - [ "el_GR" false "Ελληνικά" ] - [ "en_GB" false "English (UK)" ] - [ "en_US" false "English (US)" ] - [ "es_ES" false "Español" ] - [ "et_EE" false "Eesti" ] - [ "fi_FI" false "Suomi" ] - [ "fr_FR" false "Français" ] + [ "af_ZA" false "Afrikaans" ] % Afrikaans +% [ "ar_EG" true "\u064a\u0628\u0631\u0639" ] % Arabic + [ "ar_EG" true "\ufef2\ufe91\ufeae\ufecb" ] % Arabic + [ "bg_BG" false "Български" ] % Bulgarian + [ "bn_BD" false "\u09ac\u09be\u0982\u09b2\u09be" ] % Bengali + [ "bs_BA" false "Bosanski" ] % Bosnian + [ "ca_ES" false "Català" ] % Catalan + [ "cs_CZ" false "Čeština" ] % Czech + [ "cy_GB" false "Cymraeg" ] % Welsh + [ "da_DK" false "Dansk" ] % Danish + [ "de_DE" false "Deutsch" ] % German + [ "el_GR" false "Ελληνικά" ] % Greek + [ "en_GB" false "English (UK)" ] % English + [ "en_US" false "English (US)" ] % English + [ "es_ES" false "Español" ] % Spanish + [ "et_EE" false "Eesti" ] % Estonian + [ "fi_FI" false "Suomi" ] % Finnish + [ "fr_FR" false "Français" ] % French [ "gu_IN" false "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0" ] % Gujarati - [ "he_IL" false "תירבע" ] -% [ "hi_IN" false "\u0939\u093f\u0928\u094d\u0926\u0940" ] % Hindi - [ "hi_IN" false "\u0939\u093f\u0902\u0926\u0940" ] % Hindi - [ "hr_HR" false "Hrvatski" ] - [ "hu_HU" false "Magyar" ] - [ "id_ID" false "Bahasa Indonesia" ] - [ "it_IT" false "Italiano" ] - [ "ja_JP" false "日本語" ] -% [ "km_KH" false "\u1781\u17d2\u1798\u17c2\u179a" ] % Khmer - [ "km_KH" false "Khmer" ] - [ "ko_KR" false "한글" ] - [ "lt_LT" false "Lietuvių" ] - [ "mk_MK" false "Македонски" ] - [ "mr_IN" false "\u092e\u0930\u093e\u0920\u0940" ] % Marathi - [ "nb_NO" false "Norsk" ] - [ "nl_NL" false "Nederlands" ] - [ "pa_IN" false "\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40" ] % Punjabi - [ "pl_PL" false "Polski" ] - [ "pt_BR" false "Português (Brasil)" ] - [ "pt_PT" false "Português" ] - [ "ro_RO" false "Română" ] - [ "ru_RU" false "Русский" ] - [ "si_LK" false "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd" ] % Sinhala - [ "sk_SK" false "Slovenčina" ] - [ "sl_SI" false "Slovenščina" ] - [ "sr_CS" false "Srpski" ] - [ "sv_SE" false "Svenska" ] - [ "ta_IN" false "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" ] % Tamil - [ "tr_TR" false "Türkçe" ] - [ "uk_UA" false "Українська" ] - [ "vi_VN" false "Tiếng Việt" ] - [ "wa_BE" false "Walon" ] - [ "xh_ZA" false "isiXhosa" ] - [ "zh_CN" false "简体中文" ] - [ "zh_TW" false "繁體中文 (台灣)" ] - [ "zu_ZA" false "isiZulu" ] + [ "he_IL" false "תירבע" ] % Hebrew +% [ "hi_IN" false "\u0939\u093f\u0928\u094d\u0926\u0940" ] % Hindi + [ "hi_IN" false "\u0939\u093f\u0902\u0926\u0940" ] % Hindi + [ "hr_HR" false "Hrvatski" ] % Croatian + [ "hu_HU" false "Magyar" ] % Hungarian + [ "id_ID" false "Bahasa Indonesia" ] % Indonesian + [ "it_IT" false "Italiano" ] % Italian + [ "ja_JP" false "日本語" ] % Japanese +% [ "km_KH" false "\u1781\u17d2\u1798\u17c2\u179a" ] % Khmer + [ "km_KH" false "Khmer" ] % Khmer + [ "ko_KR" false "한글" ] % Korean + [ "lt_LT" false "Lietuvių" ] % Lithuanian + [ "mk_MK" false "Македонски" ] % Macedonian + [ "mr_IN" false "\u092e\u0930\u093e\u0920\u0940" ] % Marathi + [ "nb_NO" false "Norsk" ] % Norwegian + [ "nl_NL" false "Nederlands" ] % Dutch + [ "pa_IN" false "\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40" ] % Punjabi + [ "pl_PL" false "Polski" ] % Polish + [ "pt_BR" false "Português (Brasil)" ] % Portuguese (Brazilian) + [ "pt_PT" false "Português" ] % Portuguese + [ "ro_RO" false "Română" ] % Romanian + [ "ru_RU" false "Русский" ] % Russian + [ "si_LK" false "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd" ] % Sinhala + [ "sk_SK" false "Slovenčina" ] % Slovak + [ "sl_SI" false "Slovenščina" ] % Slovenian + [ "sr_CS" false "Srpski" ] % Serbian + [ "sv_SE" false "Svenska" ] % Swedish + [ "ta_IN" false "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" ] % Tamil + [ "th_TH" false "\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22" ] % Thai + [ "tr_TR" false "Türkçe" ] % Turkish + [ "uk_UA" false "Українська" ] % Ukrainian + [ "vi_VN" false "Tiếng Việt" ] % Vietnamese + [ "wa_BE" false "Walon" ] % Walloon + [ "xh_ZA" false "isiXhosa" ] % Xhosa + [ "zh_CN" false "简体中文" ] % Simplified Chinese + [ "zh_TW" false "繁體中文 (台灣)" ] % Traditional Chinese + [ "zu_ZA" false "isiZulu" ] % Zulu ] def diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/src/menu.inc new/themes/openSUSE/src/menu.inc --- old/themes/openSUSE/src/menu.inc 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/src/menu.inc 2008-04-28 12:41:53.000000000 +0200 @@ -274,6 +274,7 @@ } ifelse setcolor menu.texts menu.idx get menuitemmap + menu.status { config.talk { dup speak } if } if currentfont exch font.large setfont show.rtl setfont menu.status { diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/src/system.inc new/themes/openSUSE/src/system.inc --- old/themes/openSUSE/src/system.inc 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/src/system.inc 2008-04-28 12:53:47.000000000 +0200 @@ -995,6 +995,26 @@ } def +% Beep when ready. +% +% ( -- bool ) +% +/config.beep { + /config.beep "beep" getgfxconfig dup .undef ne { cvn } { pop 0 } ifelse 0 ne def + config.beep +} def + + +% Speech output. +% +% ( -- bool ) +% +/config.talk { + /config.talk "talk" getgfxconfig dup .undef ne { cvn } { pop 0 } ifelse 0 ne def + config.talk +} def + + % Video memory in kb. % % ( -- int ) @@ -1086,3 +1106,95 @@ } def +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% pc speaker beep. +% +% ( freq duration -- ) +% +% freq in Hz, duration in microseconds. +% +/beep { + exch + 0x61 inbyte + dup 3 or 0x61 exch outbyte + 0x43 0xb6 outbyte + exch 2386360 exch div + + dup 0x42 exch outbyte + 8 shr 0x42 exch outbyte + + exch usleep + + 0x61 exch outbyte +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% +% ( text -- ) +% +/speak { + talk_array { + dup .talk_text get 2 index eq { + .talk_sound get wav.playlater + exit + } { + pop + } ifelse + } forall + pop +} def + + +/.talk_text 0 def +/.talk_sound 1 def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Load sound samples. +% +% ( -- ) +% +/load_talk { + /talk_file "en.tlk" findfile def + + talk_file .undef eq { return } if + + talk_file getdword 0x692741e8 ne { return } if + + talk_array .undef ne { + talk_array { free } forall + } if + + /talk_array xfree + + /talk_array [ + 0 1 talk_file 4 add getdword 1 sub { + [ + exch 8 mul 8 add talk_file add + dup getdword talk_file add cvs + exch 4 add getdword talk_file add + ] + } for + ] def +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Load sound samples. +% +% ( -- ) +% +/load_talk_dialog { + window.dialog + dup .title "Just a second..." put + dup .text "Please wait while speech files are being loaded..." put + dup window.init window.show + + load_talk + 70 sound.setvolume + + window.done +} def + + diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/src/xmenu.inc new/themes/openSUSE/src/xmenu.inc --- old/themes/openSUSE/src/xmenu.inc 2008-04-08 12:54:33.000000000 +0200 +++ new/themes/openSUSE/src/xmenu.inc 2008-04-28 12:42:55.000000000 +0200 @@ -110,17 +110,25 @@ dup config.rtl { keyLeft } { keyRight } ifelse eq { xmenu .xm_current get - dup xmenu.maxlines div 1 add xmenu.columns mod xmenu.maxlines mul - exch xmenu.maxlines mod add - xmenu .xm_list get length 1 sub min xmenu.select + xmenu .xm_list get length over sub xmenu.maxlines lt v_impaired and { + pop + } { + dup xmenu.maxlines div 1 add xmenu.columns mod xmenu.maxlines mul + exch xmenu.maxlines mod add + xmenu .xm_list get length 1 sub min xmenu.select + } ifelse pop 0 } if dup config.rtl { keyRight } { keyLeft } ifelse eq { xmenu .xm_current get - dup xmenu.maxlines div xmenu.columns add 1 sub xmenu.columns mod xmenu.maxlines mul - exch xmenu.maxlines mod add - xmenu .xm_list get length 1 sub min xmenu.select + dup xmenu.maxlines lt v_impaired and { + pop + } { + dup xmenu.maxlines div xmenu.columns add 1 sub xmenu.columns mod xmenu.maxlines mul + exch xmenu.maxlines mod add + xmenu .xm_list get length 1 sub min xmenu.select + } ifelse pop 0 } if @@ -228,6 +236,12 @@ % /xmenu.show { window.push + + config.talk { + xmenu .xm_title get dup .undef ne { exec speak } { pop } ifelse + xmenu .xm_list get xmenu .xm_current get get exec speak + } if + } def @@ -304,12 +318,16 @@ % ( new_entry ) ==> ( ) % /xmenu.select { - dup 0 lt { xmenu .xm_list get length add } if - dup xmenu .xm_list get length ge { xmenu .xm_list get length sub } if + dup 0 lt { v_impaired { 1 } { xmenu .xm_list get length } ifelse add } if + dup xmenu .xm_list get length ge { v_impaired { 1 } { xmenu .xm_list get length } ifelse sub } if xmenu .xm_current get over xmenu .xm_current rot put xmenu.viewentry xmenu.viewentry + + config.talk { + xmenu .xm_list get xmenu .xm_current get get exec speak + } if } def Files old/themes/openSUSE/talk/en.tlk and new/themes/openSUSE/talk/en.tlk differ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/talk/Makefile new/themes/openSUSE/talk/Makefile --- old/themes/openSUSE/talk/Makefile 1970-01-01 01:00:00.000000000 +0100 +++ new/themes/openSUSE/talk/Makefile 2008-04-28 14:08:06.000000000 +0200 @@ -0,0 +1,7 @@ +all: en.tlk + +en.tlk: talk.po + ./po2talk --compress $< $@ + +clean: + rm -f *~ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/talk/po2talk new/themes/openSUSE/talk/po2talk --- old/themes/openSUSE/talk/po2talk 1970-01-01 01:00:00.000000000 +0100 +++ new/themes/openSUSE/talk/po2talk 2008-04-28 14:32:19.000000000 +0200 @@ -0,0 +1,184 @@ +#! /usr/bin/perl + +use Getopt::Long; + +sub help; +sub read_po; +sub join_id; +sub new_tmp_file; +sub cleanup; + +GetOptions( + 'help' => \&help, + 'compress' => \$opt_compress, +); + +END { cleanup } +$SIG{INT} = \&cleanup; +$SIG{TERM} = \&cleanup; + +my @tmp_files; + +$espeak = "espeak"; + +$magic = 0x692741e8; + +help if @ARGV != 2; + +$po = read_po $ARGV[0]; + +$tmp_txt = new_tmp_file; +$tmp_wav = new_tmp_file; +$tmp_snd = new_tmp_file; + +for $msg (@{$po}) { + $id = join_id $msg, 'id'; + $str = join_id $msg, 'str'; + + next unless $id ne ""; + + eval '$id = "' . $id . '"'; + eval '$str = "' . $str . '"'; + + $str = $id if $str eq ""; + + open W, ">$tmp_txt"; + print W $str; + close W; + + system "$espeak -f $tmp_txt -w $tmp_wav"; + system "sox $tmp_wav -b -u -c 1 -r 16000 -t .wav $tmp_snd"; + if($opt_compress) { + system "./sc $tmp_snd $tmp_snd"; + } + + open F, $tmp_snd; + sysread F, $snd_buf, -s $tmp_snd; + close F; + + $snd{$id} = $snd_buf; +} + +$file_ofs = 0; +@snds = sort keys %snd; + +for $snd (@snds) { + $txt_ofs{$snd} = $file_ofs; + $file_ofs += length($snd) + 1; +} + +for $snd (@snds) { + $snd_ofs{$snd} = $file_ofs; + $file_ofs += length($snd{$snd}); +} + +$head_size = 8 + 8 * @snds; + +open W, ">$ARGV[1]"; + +print W pack("VV", $magic, scalar(@snds)); +for $snd (@snds) { + print W pack("VV", ($txt_ofs{$snd} + $head_size, $snd_ofs{$snd} + $head_size)); +} +for $snd (@snds) { + print W $snd, "\x00"; +} +for $snd (@snds) { + print W $snd{$snd}; +} + +close W; + + +sub help +{ + print STDERR + "Usage: po2talk [options] po_file talk_file\n" . + "Run po file through espeak.\n"; + + exit 0; +} + + +sub read_po +{ + local $_; + my ($msg, $cnt, $id, $f); + + $cnt = 0; + + open F, $_[0]; + while(<F>) { + s/^\s*|\s*$//g; + next if $_ eq ""; + if(/^#,/) { + s/^#,\s*//; + for $f (split /\s*,\s*/) { + ${$msg->[$cnt]{flags}{$f}} = 1 if $f ne ""; + } + next + } + if(/^#(\s|$)/) { push @{$msg->[$cnt]{u_comment}}, $_ ; next } + if(/^#/) { push @{$msg->[$cnt]{a_comment}}, $_; next } + if(s/^msg(id\b|id_plural\b|str(\[\d+\])?)\s*//) { + $id = $1; + if($id eq 'id') { + $msg->[$cnt]{line} = $. unless exists $msg->[$cnt]{$line}; + $cnt++; + } + } + if($cnt && /^"(.*)"$/) { + push @{$msg->[$cnt - 1]{$id}}, $1; + } + else { + print STDERR "$_[0]:$.: invalid po format\n"; + return undef; + } + } + close F; + + # trailing comments + pop @$msg if @$msg > 0 && !$msg->[-1]{id}; + + return $msg; +} + + +sub join_id +{ + my ($msg, $id); + + ($msg, $id) = @_; + + return join '', @{$msg->{$id}}; +} + + +# create new temporary file +sub new_tmp_file +{ + local $_; + + chomp ($_ = `mktemp /tmp/po2talk.XXXXXXXXXX`); + die "error: mktemp failed\n" if $?; + + push @tmp_files, $_; + + return $_; +} + + +# remove temporary files +sub cleanup +{ + local $_; + + for (@tmp_files) { + next unless defined $_; + unlink; + $_ = undef; + } + + undef @tmp_files; +} + Files old/themes/openSUSE/talk/sc and new/themes/openSUSE/talk/sc differ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/openSUSE/talk/talk.po new/themes/openSUSE/talk/talk.po --- old/themes/openSUSE/talk/talk.po 1970-01-01 01:00:00.000000000 +0100 +++ new/themes/openSUSE/talk/talk.po 2008-04-28 16:29:47.000000000 +0200 @@ -0,0 +1,300 @@ +# main menu + +msgid "Boot from Hard Disk" +msgstr "" + +msgid "Installation" +msgstr "" + +msgid "Repair Installed System" +msgstr "" + +msgid "Rescue System" +msgstr "" + +msgid "Check Installation Media" +msgstr "" + +msgid "Firmware Test" +msgstr "" + +msgid "Memory Test" +msgstr "" + + +# panel texts + +msgid "Help" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Video Mode" +msgstr "" + +msgid "Source" +msgstr "Installation Source" + +msgid "Kernel" +msgstr "" + +msgid "Driver" +msgstr "Driver Update" + +msgid "Arch" +msgstr "Architecture" + + +# language menu + +msgid "\xef\xbb\xb2\xef\xba\x91\xef\xba\xae\xef\xbb\x8b" +msgstr "Arabic" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Български" +msgstr "Bulgarian" + +msgid "\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6" +msgstr "Bengali" + +msgid "Bosanski" +msgstr "Bosnian" + +msgid "Català" +msgstr "Catalan" + +msgid "Čeština" +msgstr "Czech" + +msgid "Cymraeg" +msgstr "Welsh" + +msgid "Dansk" +msgstr "Danish" + +msgid "Deutsch" +msgstr "German" + +msgid "Ελληνικά" +msgstr "Greek" + +msgid "English (UK)" +msgstr "English (UK)" + +msgid "English (US)" +msgstr "English (US)" + +msgid "Español" +msgstr "Spanish" + +msgid "Eesti" +msgstr "Estonian" + +msgid "Suomi" +msgstr "Finnish" + +msgid "Français" +msgstr "French" + +msgid "\xe0\xaa\x97\xe0\xab\x81\xe0\xaa\x9c\xe0\xaa\xb0\xe0\xaa\xbe\xe0\xaa\xa4\xe0\xab\x80" +msgstr "Gujarati" + +msgid "תירבע" +msgstr "Hebrew" + +msgid "\xe0\xa4\xb9\xe0\xa4\xbf\xe0\xa4\x82\xe0\xa4\xa6\xe0\xa5\x80" +msgstr "Hindi" + +msgid "Hrvatski" +msgstr "Croatian" + +msgid "Magyar" +msgstr "Hungarian" + +msgid "Bahasa Indonesia" +msgstr "Indonesian" + +msgid "Italiano" +msgstr "Italian" + +msgid "日本語" +msgstr "Japanese" + +msgid "Khmer" +msgstr "Khmer" + +msgid "한글" +msgstr "Korean" + +msgid "Lietuvių" +msgstr "Lithuanian" + +msgid "Македонски" +msgstr "Macedonian" + +msgid "\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\xa0\xe0\xa5\x80" +msgstr "Marathi" + +msgid "Norsk" +msgstr "Norwegian" + +msgid "Nederlands" +msgstr "Dutch" + +msgid "\xe0\xa8\xaa\xe0\xa9\xb0\xe0\xa8\x9c\xe0\xa8\xbe\xe0\xa8\xac\xe0\xa9\x80" +msgstr "Punjabi" + +msgid "Polski" +msgstr "Polish" + +msgid "Português (Brasil)" +msgstr "Portuguese (Brazilian)" + +msgid "Português" +msgstr "Portuguese" + +msgid "Română" +msgstr "Romanian" + +msgid "Русский" +msgstr "Russian" + +msgid "\xe0\xb7\x83\xe0\xb7\x92\xe0\xb6\x82\xe0\xb7\x84\xe0\xb6\xbd" +msgstr "Sinhala" + +msgid "Slovenčina" +msgstr "Slovak" + +msgid "Slovenščina" +msgstr "Slovenian" + +msgid "Srpski" +msgstr "Serbian" + +msgid "Svenska" +msgstr "Swedish" + +msgid "\xe0\xae\xa4\xe0\xae\xae\xe0\xae\xbf\xe0\xae\xb4\xe0\xaf\x8d" +msgstr "Tamil" + +msgid "\xe0\xb8\xa0\xe0\xb8\xb2\xe0\xb8\xa9\xe0\xb8\xb2\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2" +msgstr "Thai" + +msgid "Türkçe" +msgstr "Turkish" + +msgid "Українська" +msgstr "Ukrainian" + +msgid "Tiếng Việt" +msgstr "Vietnamese" + +msgid "Walon" +msgstr "Walloon" + +msgid "isiXhosa" +msgstr "Xhosa" + +msgid "简体中文" +msgstr "Simplified Chinese" + +msgid "繁體中文 (台灣)" +msgstr "Traditional Chinese" + +msgid "isiZulu" +msgstr "Zulu" + + +# video menu + +msgid "Text Mode" +msgstr "" + +msgid "VESA" +msgstr "" + +msgid "800 x 600" +msgstr "800 times 600" + +msgid "1024 x 768" +msgstr "1024 times 768" + +msgid "1280 x 1024" +msgstr "1280 times 1024" + +msgid "1400 x 1050" +msgstr "1400 times 1050" + +msgid "1600 x 1200" +msgstr "1600 times 1200" + + +# source menu + +msgid "CD-ROM" +msgstr "" + +msgid "DVD" +msgstr "" + +msgid "SLP" +msgstr "" + +msgid "FTP" +msgstr "" + +msgid "HTTP" +msgstr "" + + +msgid "NFS" +msgstr "" + + +msgid "SMB / CIFS" +msgstr "" + + +msgid "Hard Disk" +msgstr "" + + +# kernel menu + +msgid "Default" +msgstr "" + +msgid "Safe Settings" +msgstr "" + +msgid "No ACPI" +msgstr "" + +msgid "No Local APIC" +msgstr "" + + +# driver menu + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + +msgid "File" +msgstr "" + + +# arch menu + +msgid "x86" +msgstr "" + +msgid "x86-64" +msgstr "" + + ++++++ upstream.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/upstream/data-boot/gfxboot.cfg new/themes/upstream/data-boot/gfxboot.cfg --- old/themes/upstream/data-boot/gfxboot.cfg 2008-04-10 18:12:16.000000000 +0200 +++ new/themes/upstream/data-boot/gfxboot.cfg 2008-04-28 16:21:20.000000000 +0200 @@ -1,6 +1,15 @@ # theme name theme=upstream + # penguin theme likelihood in percent; -1 = auto penguin=0 + # show welcome animation (cdrom boot only) welcome=0 + +# beep when menu is ready +beep=0 + +# activate speech output +talk=0 + diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/themes/upstream/data-install/gfxboot.cfg new/themes/upstream/data-install/gfxboot.cfg --- old/themes/upstream/data-install/gfxboot.cfg 2008-04-10 18:12:07.000000000 +0200 +++ new/themes/upstream/data-install/gfxboot.cfg 2008-04-28 16:21:50.000000000 +0200 @@ -1,6 +1,15 @@ # theme name theme=upstream + # penguin theme likelihood in percent; -1 = auto penguin=0 + # show welcome animation (cdrom boot only) welcome=1 + +# beep when menu is ready +beep=1 + +# activate speech output +talk=0 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org