% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % % Accessibility mode selector. % % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /access.option .undef def /.access.none 0 def /.access.v1 1 def /.access.v2 2 def /.access.v3 3 def /.access.brltty 4 def /.access.m1 5 def /.access.m2 6 def /access.alloptionnames [ .undef "v1" "v2" "v3" "brltty" "m1" "m2" ] def /access.optionnames [ access.alloptionnames { } forall ] def % Custom kernel options. Feel free to extend as needed. Keep this in sync % with MenuInit. /access.options.v1 "access=v1" def /access.alltexts [ /txt_access_none /txt_access_v1 /txt_access_v2 /txt_access_v3 /txt_access_brltty /txt_access_m1 /txt_access_m2 ] def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Initialise accessibility menu. % % ( ) ==> ( ) % /access.init { /xmenu.access .xm_size array def /xmenu xmenu.access def xmenu .xm_current .access.none put xmenu .xm_list [ access.optionnames { 0 1 access.alloptionnames length 1 sub { over access.alloptionnames 2 index get eq { access.alltexts exch get exch pop exit } { pop } ifelse } for } forall ] put /access.optionmap [ 0 1 access.optionnames length 1 sub { 0 1 access.alloptionnames length 1 sub { access.optionnames 2 index get access.alloptionnames 2 index get eq { [ 2 index rot ] exch exit % leaves [ optionindex alloptionindex ] optionindex } { pop } ifelse } for pop } for ] def xmenu .xm_title /txt_access put /access.soundfiles [ access.optionnames { dup .undef ne { /access.tmpfilename 32 string def "access%s.mod" access.tmpfilename sprintf access.tmpfilename findfile } if } forall ] def pmenu.init } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Update accessibility status. % % ( ) ==> ( ) % /access.update { /xmenu xmenu.access def access.optionnames xmenu .xm_current get get dup .undef eq { pop /access.option .undef def } { dup "brltty" eq { pop /access.option "braille=ask" def } { dup "v1" eq { pop /access.option access.options.v1 def } { dup length 7 add string /access.option exch def "access=%s" access.option sprintf } ifelse } ifelse } ifelse /window.action actRedrawPanel def pmenu.update } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Select an accessibility menu item. % % ( ) ==> ( ) % /access.select { /xmenu xmenu.access def access.soundfiles xmenu .xm_current get get dup .undef ne { /player.access 1 def player.access exch mod.load player.access 0 mod.play } { pop } ifelse } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Handle keyboard input. % % ( key_in ) ==> ( key_out ) % /access.input { dup 0 eq { return } if dup 0xff and '0' sub dup 0 lt { return } if dup access.optionmap { dup 1 get 2 index eq { 0 get dup xmenu .xm_list get length lt { xmenu.select pop 0 } { pop } ifelse } { pop } ifelse } forall } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Show window. % % ( ) => ( ) % /panel.access { "access" help.setcontext window.xmenu dup .xmenu xmenu.access put dup .xmenu.update /access.update put dup .xmenu.select /access.select put dup .xmenu.input /access.input put dup window.init window.show } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Return width of panel entry. % % ( ) => ( width ) % /panel.access.width { /xmenu xmenu.access def pmenu.width } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Redraw panel entry. % % ( panel ) => ( ) % /panel.access.update { /xmenu xmenu.access def pmenu.panel.update } def