summaryrefslogtreecommitdiffstats
path: root/src/common.inc
diff options
context:
space:
mode:
Diffstat (limited to 'src/common.inc')
-rw-r--r--src/common.inc1682
1 files changed, 1682 insertions, 0 deletions
diff --git a/src/common.inc b/src/common.inc
new file mode 100644
index 0000000..b527464
--- /dev/null
+++ b/src/common.inc
@@ -0,0 +1,1682 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Main part.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% max command line length
+/cmdlinelength 512 def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Install source is 64bit?
+%
+% ( ) ==> ( true|false )
+%
+/64bit_source {
+ % 64 bit dir exists and is != 32 bit dir
+ 64bit_boot_dir 32bit_boot_dir ne
+ 64bit_boot_dir .undef ne and
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Are we a dvd?
+%
+% ( ) ==> ( true|false )
+%
+/is_dvd {
+ % check only once
+ is_dvd.result .undef ne { is_dvd.result return } if
+
+ /is_dvd.result
+ mediatype m_cdrom eq {
+ 0x10 readsector
+ dup 0x50 add getdword exch free
+ 9 shr % iso size in MB
+ 720 gt % assume dvd if > 720 MB
+ } {
+ false
+ } ifelse
+ def
+
+ is_dvd.result return
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Install source is 32 & 64bit?
+%
+% ( ) ==> ( true|false )
+%
+/32+64bit_source {
+ 32bit_boot_dir .undef ne
+ % uncomment next line to automatically warn about 32bit software on 64bit machines, too
+ % 64bit_boot_dir .undef ne and
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Enough memory?
+%
+% ( ) ==> ( true|false )
+%
+/enough_mem {
+ biosmem 4 20 shl lt
+ biosmem mem.check 20 shl ge or
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Check if there are boot directories for 32 & 64bit.
+%
+% Assumes 32bit to be in *i386* and 64bit in *x86_64*.
+%
+% ( ) ==> ( )
+%
+/check_arch_boot_dir {
+ getcwd dup .undef ne {
+ /64bit.tmp 256 string def
+
+ dup "i386" strstr 0 ne over "x86_64" strstr 0 ne or {
+ dup "i386" strstr {
+ /32bit_boot_dir exch def
+ /64bit_boot_dir 32bit_boot_dir "i386" "x86_64" strreplace
+ } {
+ /64bit_boot_dir exch def
+ /32bit_boot_dir 64bit_boot_dir "x86_64" "i386" strreplace
+ } ifelse
+
+ dup "%s/isolinux.cfg" 64bit.tmp sprintf
+ 64bit.tmp filesize .undef ne { def } { free pop } ifelse
+
+ } {
+ /32bit_boot_dir over def
+ /64bit_boot_dir exch def
+ } ifelse
+
+ 64bit.tmp free
+
+ % font.normal setfont
+ % 0 400 moveto 32bit_boot_dir print
+ % 0 420 moveto 64bit_boot_dir print dtrace
+
+ } {
+ pop
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% input event handling
+%
+% ( key ) ==> ( input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode
+% >=2: start linux
+%
+/KeyEvent {
+ % timeout
+
+ dup 0 eq { boot.ed.list buildcmdline 2 return } if
+
+ debug 4 ge {
+ % print keycode somewhere
+ -1 settransparentcolor
+ white setcolor
+ 500 0 moveto dup print " " print
+ } if
+
+ dup 0xff00 and 16 shl over 0xff and dup 0xe0 eq { pop 0 } if add /key exch def
+ 16 shr 0xffff and /keystat exch def
+
+ key 24 shr 0xff and dup 0xf0 ge exch 0xf4 le and { key serial.input return } if
+
+ key
+
+ config.keymap { mapkey } if
+
+ dup 0xffffff and dup { exch } if pop
+
+ debug 4 ge {
+ % print mapped key somewhere
+ -1 settransparentcolor
+ white setcolor
+ 500 20 moveto dup print " " print
+ } if
+
+ ptheme {
+ % reverse direction
+ /p.xmas.dx p.xmas.dx neg def
+
+ key keyF9 eq
+ key keyF7 eq or {
+ % call super penguin
+ p.call.super
+ } {
+ key keyF1 ge
+ key keyF10 le and {
+ % read something
+ /p.read.timer rand 0x31 and neg -30 add def
+ } if
+ } ifelse
+
+ } if
+
+ % some special keys
+ debug.input
+
+ % put key through normal input queue
+ window.input
+
+ pop
+
+ window.action actExit eq {
+ /window.action actNothing def
+ "" -1 1 return
+ } if
+
+ window.action actCloseInfo eq {
+ /window.action actNothing def
+ % cd change dialog
+ info.type 5 eq info.type 6 eq or {
+ % 'chdir' triggers fs metadata re-read
+ getcwd dup .undef ne { chdir } { pop } ifelse
+ } if
+
+ "" -1 3 return
+ } if
+
+ window.action actPassword eq {
+ /window.action actNothing def
+ password.dialog {
+ password.dialog .ed.buffer.list get 0 get
+ } { "" } ifelse
+ -1 3 return
+ } if
+
+ window.action actStart eq {
+ /window.action actNothing def
+ /load_error false def
+
+ syslinux {
+ menu.texts menu.entry 0 max menu.texts length 1 sub min get
+ dup "mem.min[%s]" mem.min sprintf
+ "mem.msg[%s]" mem.msg sprintf
+
+ enough_mem not {
+ nomem_popup
+ "" -1 0 return
+ } if
+ } if
+
+ % some tricks to make it possible to review the complete command line
+ debug 3 ge xxx.cmdline .undef eq and {
+ /window.action actNothing def
+
+ boot.ed.list buildcmdline /xxx.menu exch def /xxx.cmdline exch def
+
+ /dia window.dialog def
+ dia .title "Kernel command line" put
+ dia .text "" put
+ % Must all be of same size!
+ dia .ed.list 1 array put
+ dia .ed.buffer.list [ xxx.cmdline ] put
+ dia .ed.text.list [ "All options\n" ] put
+
+ dia .ed.focus 0 put
+ dia .ed.width 600 put
+ dia .ed.font font.normal put
+ dia .buttons
+ [ button.ok button.default actStart button.setaction ]
+ put
+ dia window.init
+ dia window.show
+
+ "" -1 0
+ } {
+ sound.done
+
+ xxx.cmdline .undef ne {
+ xxx.cmdline xxx.menu
+ /xxx.cmdline .undef def
+ } {
+ boot.ed.list buildcmdline
+ } ifelse
+ 2 return
+ } ifelse
+ } if
+
+ window.action actRedraw eq {
+ /window.action actNothing def
+ main.redraw
+ } if
+
+ window.action actRedrawPanel eq {
+ /window.action actNothing def
+ panel.show
+ } if
+
+ window.action actInstallOK eq {
+ /window.action actNothing def
+ install.ok
+ } if
+
+ window.action actInstallCancel eq {
+ /window.action actNothing def
+ install.cancel
+ } if
+
+ "" -1 0
+} def
+
+
+/bc.cmd cmdlinelength string def
+/mem.min 128 string def
+/mem.msg 256 string def
+
+
+% ( edit_object_list ) ==> ( cmdline menu_entry )
+%
+/buildcmdline {
+ menu.entry 0 lt menu.entry menu.texts length ge or { pop "" -1 return } if
+
+ [ over
+ {
+ dup .inp_show get {
+ build1cmdline strdup
+ } {
+ pop
+ } ifelse
+ } forall
+
+ % empty? -> pass at least the first edit object
+ dup [ eq { over 0 get build1cmdline strdup } if
+
+ ]
+
+ dup boot.splitstr join bc.cmd over strcpy pop free
+ dup { free } forall free
+
+ pop bc.cmd menu.entry
+
+} def
+
+
+% ( edit_object ) ==> ( cmdline )
+%
+% grub:
+% just return
+%
+% syslinux & lilo:
+% add kernel name at start of command line
+%
+/build1cmdline {
+ syslinux {
+ % set new working directory
+ xmenu.bits .xm_current get 1 eq { 64bit_boot_dir } { 32bit_boot_dir } ifelse
+ dup .undef ne {
+ dup getcwd ne { chdir } { pop } ifelse
+ } {
+ pop
+ } ifelse
+ } if
+ % getcwd 0 300 moveto show trace
+
+ % lilo & syslinux: prepend kernel/label name
+ grub {
+ bc.cmd 0 0 put
+ } {
+ menu.texts menu.entry get "%s " bc.cmd sprintf
+ } ifelse
+
+ syslinux {
+ /splash_file 32 string def
+
+ video.modes.list xmenu.video .xm_current get get
+ dup .vm_mode get 0 ge {
+ dup .vm_height get exch .vm_width get
+ ",%04d%04d.spl" splash_file sprintf
+ } { pop } ifelse
+
+ % check whether splash file exists
+ splash_file 1 add filesize .undef eq {
+ splash_file 0 0 put % empty string
+ } if
+ } if
+
+ xmenu.kernelopts {
+ kernelopts.options xmenu.kernelopts .xm_current get get dup "" ne {
+ "%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } if
+
+ /cmdline.hidden over dup length .inp_hidden ge { .inp_hidden get } { pop .undef } ifelse def
+
+ cmdline.hidden {
+ cmdline.hidden "" ne {
+ splash_file {
+ /bc.tmp cmdline.hidden length splash_file length add string def
+ cmdline.hidden "initrd=" bootopt.find dup .undef ne {
+ skipnonspaces
+ dup
+ dup 0 get over 0 0 put
+ splash_file cmdline.hidden "%s%s" bc.tmp sprintf
+ 0 exch put
+ "%s" bc.tmp dup length add sprintf
+ } {
+ pop
+ bc.tmp cmdline.hidden strcpy pop
+ } ifelse
+
+ bc.tmp "%s " bc.cmd dup length add sprintf
+
+ bc.tmp free /bc.tmp .undef def
+ } {
+ cmdline.hidden "%s " bc.cmd dup length add sprintf
+ } ifelse
+ } if
+ } if
+
+ /splash_file xfree
+
+ syslinux {
+ video.modes.list xmenu.video .xm_current get get .vm_mode get
+
+ dup 0 ge {
+ 0x200 add "vga=0x%x " bc.cmd dup length add sprintf
+ } {
+ -1 eq {
+ "textmode=1 " bc.cmd dup length add sprintf
+ } if
+ } ifelse
+
+ config.lang {
+ config.lang "en_US" ne {
+ config.lang "lang=%s " bc.cmd dup length add sprintf
+ } if
+ } if
+
+ v_impaired 1 ge {
+ "braille=1 " bc.cmd dup length add sprintf
+ } if
+
+ v_impaired 2 ge {
+ "linemode=1 " bc.cmd dup length add sprintf
+ } if
+ } if
+
+ xmenu.dud {
+ xmenu.dud .xm_current get .dud_url eq {
+ input.edit.dud_url 0 get dup "" ne {
+ "dud=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } {
+ xmenu.dud .xm_current get .dud_file eq {
+ input.edit.dud_file 0 get dup "" ne {
+ "driverupdate=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } {
+ dud.options xmenu.dud .xm_current get get dup "" ne {
+ "%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } ifelse
+ } ifelse
+ } if
+
+ xmenu.profile {
+ profile.options xmenu.profile .xm_current get get dup "" ne {
+ "%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } if
+
+ xmenu.install {
+ config.noinstallopt menu.texts menu.entry get iselement not {
+ install.option "" ne {
+ install.option "%s " bc.cmd dup length add sprintf
+ } if
+ } if
+ } if
+
+ % add user-supplied options
+
+ bc.cmd exch .inp_buf get strcat " " strcat pop
+
+ % remove all but last 'vga' & 'initrd' options
+ [ "vga" "initrd" ] dup {
+ {
+ bc.cmd over bootopt.find2 .undef eq { pop exit } if
+ bc.cmd over bootopt.remove free
+ } loop
+ } forall free
+
+ bc.cmd "driverupdate" bootopt.find dup .undef ne {
+ % exclude 'driverupdate=0 and driverupdate=1'
+ "driverupdate=" length get
+ dup '0' ne exch '1' ne and {
+
+ /bc.tmp bc.cmd "driverupdate" bootopt.remove def
+ bc.tmp .undef ne {
+ /bc.tmp bc.tmp "driverupdate=" length add ',' split bc.tmp free def
+ /bc.tmp2 cmdlinelength string def
+
+ bc.tmp2 "initrd=" strcpy pop
+
+ bc.tmp length 0 gt {
+ % add '+' to first arg unless it starts with '+' or '-'
+ bc.tmp 0 get 0 get
+ dup '-' eq { % remove '-'
+ bc.tmp 0 get dup 1 add strdup exch free
+ bc.tmp exch 0 exch put
+ pop '+'
+ } if
+ '+' ne { % add '+'
+ bc.tmp 0 get length 1 add string "+" strcat bc.tmp 0 get strcat
+ bc.tmp 0 get free bc.tmp exch 0 exch put
+ } if
+
+ bc.tmp length 1 sub -1 0 {
+ bc.tmp exch get
+ bc.tmp2 exch strcat "," strcat pop
+ } for
+ } if
+
+ bc.tmp dup { free } forall free
+
+ % last 'initrd' option
+ /bc.tmp .undef def
+ {
+ bc.cmd "initrd" bootopt.remove dup .undef ne {
+ bc.tmp free /bc.tmp exch def
+ } {
+ pop exit
+ } ifelse
+ } loop
+
+ % re-add new 'initrd' option
+ bc.tmp {
+ bc.tmp2 bc.tmp "initrd=" length add strcat pop
+ bc.tmp free
+ bc.cmd bc.tmp2 strcat " " strcat pop
+ } if
+ } if
+
+ } if
+ } { pop } ifelse
+
+ syslinux {
+ % find out initrd sizes for kernel loading progress bar
+ bc.cmd "initrd" bootopt.find dup .undef ne {
+ "initrd=" length add
+ dup dup skipnonspaces
+ sub neg
+ string
+ exch strcpy
+ % it's a ',' separated list
+ dup ',' split exch free
+ dup
+ {
+ dup
+ % skip leading '+' or '-'
+ dup 0 get dup '+' eq exch '-' eq or { 1 add } if
+ filesize dup .undef ne {
+ sectorsize 1 sub add
+ sectorsize div /progress_extra exch progress_extra add def
+ } { pop } ifelse
+ free
+ } forall
+ free
+ } { pop } ifelse
+ } if
+
+ % remove final space
+ bc.cmd dropspaces
+
+ bc.cmd
+} def
+
+
+/iso.needscheck {
+ false
+
+ /i_tmp 0x10 readsector def
+ i_tmp {
+ i_tmp dup length 1 sub 0 put
+ /i_tmp2 i_tmp 0x373 add cvs def
+ i_tmp2 "check=1" strstr {
+ pop true
+ } if
+
+ i_tmp free
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( menu_entries_array cmdline_args_array defaultentry ) == > ( )
+/MenuInit {
+ bsplash.done
+
+ colorbits 8 le {
+ 0 setcolor 0 0 moveto screen.size fillrect loadpalette
+ } if
+
+ init
+
+ /menu.entry -1 def
+
+ /menu.dentry exch def
+ /menu.args exch def
+ /menu.texts exch def
+
+ /mi_name "mediacheck" "" gfxconfig.set.str
+
+ mi_name {
+ /remove.mediachk false def
+ sectorsize 0x800 eq {
+ /remove.mediachk iso.needscheck not def
+ } if
+ } {
+ /remove.mediachk false def
+ } ifelse
+
+ remove.mediachk menu.dentry mi_name ne and {
+ /mi_tmp 0 def
+ menu.texts {
+ mi_name eq { exit } if
+ /mi_tmp inc
+ } forall
+
+ mi_tmp menu.texts length lt {
+ /mi_tmp2 0 def
+ /menu.texts
+ [
+ menu.texts { mi_tmp2 mi_tmp eq { pop } if /mi_tmp2 inc } forall
+ ]
+ def
+
+ /mi_tmp2 0 def
+ /menu.args
+ [
+ menu.args { mi_tmp2 mi_tmp eq { pop } if /mi_tmp2 inc } forall
+ ]
+ def
+ } if
+ } if
+
+ window.main
+ 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 {
+
+ 64bit {
+ 64bit_source not { notimeout 32bit_popup } if
+ } {
+ 64bit_source { notimeout 64bit_popup } if
+ } ifelse
+
+ } if
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( text errorcode ) ==> ( )
+% errorcode:
+% 0 normal info
+% 1 fatal error
+% 2 missing file
+% 3 disk change
+% 4 disk change failed
+% 5 ask for cd change
+% 6 change cd back to original
+%
+
+/info.tmpmsg 256 string def
+
+/InfoBoxInit {
+ /info.type exch def
+ /info.msg exch def
+
+ window.dialog
+
+ info.type 1 eq {
+ dup .title.bg window.title.error.bg put
+ dup .title txt_error_title put
+ dup .buttons
+ [
+ button.reboot button.default actCloseInfo button.setaction
+ ] put
+ } {
+ dup .title txt_info_title put
+ dup .buttons
+ [
+ button.ok button.default actCloseInfo button.setaction
+% button.cancel button.notdefault actCloseInfo button.setaction
+ ] put
+ } ifelse
+
+ syslinux info.type 2 eq and {
+ dup .title "I/O Error" put
+ info.msg "File not found: %s" info.tmpmsg sprintf
+ /info.msg info.tmpmsg def
+ /load_error true def
+ } if
+
+ syslinux info.type 3 eq and {
+ dup .title txt_change_disk_title put
+ 0 getinfo 1 add txt_insert_disk info.tmpmsg sprintf
+ /info.msg info.tmpmsg def
+ } if
+
+ syslinux info.type 4 eq and {
+ dup .title txt_change_disk_title put
+ 1 getinfo 15 not and {
+ 0 getinfo 1 add
+ txt_insert_disk3 info.tmpmsg sprintf
+ } {
+ 0 getinfo 1 add 1 getinfo 1 add
+ txt_insert_disk2 info.tmpmsg sprintf
+ } ifelse
+ /info.msg info.tmpmsg def
+ } if
+
+ syslinux info.type 5 eq and {
+ dup .title "Driver Update" put
+ info.msg "Insert driver update CD-ROM for\n\"%s\"." info.tmpmsg sprintf
+ /info.msg info.tmpmsg def
+ } if
+
+ syslinux info.type 6 eq and {
+ dup .title "Driver Update" put
+ /info.msg "Put the openSUSE CD-ROM back into the drive." def
+ } if
+
+ dup .text info.msg put
+
+ serial.line.status {
+ serial.infobox .undef eq {
+ /serial.infobox .xm_size array def
+ serial.infobox .xm_current 0 put
+ } if
+
+ serial.infobox .xm_title 2 index .title get put
+ serial.infobox .xm_text info.msg put
+ serial.infobox .xm_list [ info.type 1 eq { "reboot" } { "ok" } ifelse ] put
+
+ serial.infobox.setup
+ } if
+
+ dup window.init
+ window.show
+
+} def
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% progress bar code
+
+
+% Show percentage of progress bar.
+%
+% ( percentage ) ==> ( )
+%
+/progress.percent {
+ 0 max 100 min % so people don't ask silly questions...
+ "100%" strsize over neg progress.text.x add progress.text.y moveto
+ window.current .color.bg get setcolor
+ fillrect
+
+ "%3u%%" 8 string dup 4 1 roll sprintf
+
+ dup strsize pop neg progress.text.x add progress.text.y moveto
+ window.current .color.fg get setcolor
+
+ serial.line.status {
+ "\x08\x08\x08\x08" serial.show
+ dup serial.show
+ } if
+
+ dup show
+ free
+
+} def
+
+
+% Show n-th progress bar symbol.
+%
+% ( n ) ==> ( )
+%
+/progress.sym.show {
+ /progress.sym.current exch def
+
+ progress.bar.x progress.bar.y moveto
+ progress.sym.width progress.sym.current 1 sub mul 1 add 1 rmoveto
+ progress.sym.width 2 sub
+ progress.bar.height 2 sub
+ progress.bar.color setcolor
+ fillrect
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( kernel_name ) ==> ( )
+/ProgressInit {
+ /progress.kname exch def
+
+ boot.ed.list { edit.hidecursor } forall
+
+ /dia window.dialog def
+
+ dia .width.min 350 put
+ dia .position 10 put
+
+ dia .title txt_load_kernel_title put
+ dia .text
+ progress.kname "memtest" eq {
+ txt_load_memtest
+ } {
+ txt_load_kernel
+ } ifelse
+ put
+
+ dia window.init
+ dia window.show
+
+ % now add progress bar
+
+ dia .x get dia .y get moveto
+ dia .text.x get dia .text.y get 28 add rmoveto
+
+ /progress.bar.height 19 def
+ /progress.bar.width dia .width get 75 sub def
+
+ /progress.sym.width 10 def
+ /progress.bar.width
+ progress.bar.width progress.sym.width div
+ /progress.syms over def progress.sym.width mul
+ def
+
+ currentpoint over 1 sub over 2 sub moveto
+ black white progress.bar.width 2 add progress.bar.height 4 add drawborder
+
+ /progress.bar.y exch def
+ /progress.bar.x exch def
+
+ /progress.text.x progress.bar.x progress.bar.width 55 add add def
+ /progress.text.y progress.bar.y progress.bar.height fontheight sub 2 div add def
+
+ /progress.sym.current 0 def
+
+ 0 progress.percent
+
+ serial.line.status {
+ "\n" serial.show
+ dia .text get serial.show
+ " 0%" serial.show
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( ) ==> ( )
+/ProgressDone {
+ window.done
+
+ load_error {
+ /load_error false def
+ boot.ed.list boot.window .ed.focus get get edit.showcursor
+ } if
+
+ serial.line.status { "\n\n" serial.show } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( max current ) ==> ( )
+%
+% Note: max is just kernel size (in sectors).
+%
+/ProgressUpdate {
+ exch progress_extra add exch
+
+ over over 100 mul exch 1 max div progress.percent
+
+ progress.syms mul progress.syms 2 div add exch 1 max div
+
+ 0 max progress.syms min
+
+ dup progress.sym.current gt {
+ progress.sym.current 1 add over 1 exch {
+ progress.sym.show
+ } for
+ } if
+ pop
+
+} def
+
+% initrd size (in sectors)
+/progress_extra 0 def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( time ) ==> ( )
+% /Timer { pop } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( label correct_password ) ==> ( )
+%
+/PasswordInit {
+ /password.key exch def pop
+
+ /dia window.dialog def
+
+ /password.dialog dia def
+
+ dia .title txt_password_title put
+ dia .text "" put
+
+ % Must all be of same size!
+ dia .ed.list 1 array put
+ dia .ed.buffer.list [ 31 string ] put
+ dia .ed.text.list [ txt_password ] put
+
+ dia .ed.focus 0 put
+
+ dia .ed.width 200 put
+
+ dia .ed.font font.normal pwmode put
+
+ dia .buttons
+ [ button.ok button.default actPassword button.setaction ]
+ put
+
+ dia window.init
+ dia window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( password ) ==> ( error )
+%
+% error:
+% true password ok
+% false wrong password
+%
+% ****** FIXME: test result seems to be unused
+%
+/PasswordDone {
+
+ password.key eq
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( text ) == > ( new_text )
+/menuitemmap {
+ translate
+ config._2space {
+ /mmm.tmp xfree
+ strdup /mmm.tmp over def
+ dup length 0 gt {
+ 0 1 2 index length 1 sub {
+ over over get '_' eq { over exch ' ' put } { pop } ifelse
+ } for
+ } if
+ } if
+ dup "memtest" eq over "memtest86" eq or { pop txt_memtest return } if
+ dup "firmware" eq { pop txt_firmware return } if
+ syslinux {
+ dup "live" eq { pop "openSUSE LiveCD" return } if
+ dup "kde" eq { pop "LiveCD - KDE" return } if
+ dup "gnome" eq { pop "LiveCD - GNOME" return } if
+ dup "linux" eq { pop txt_install return } if
+ dup "failsafe" eq { pop txt_safe_install return } if
+ dup "noacpi" eq { pop txt_noacpi_install return } if
+ dup "noapic" eq { pop txt_noapic_install return } if
+ dup "nolapic" eq { pop txt_nolapic_install return } if
+ dup "apic" eq { pop txt_apic return } if
+ dup "manual" eq { pop txt_manual_install return } if
+ dup "repair" eq { pop txt_repain_system return } if
+ dup "rescue" eq { pop txt_rescue return } if
+ dup "hwcheck" eq { pop "Hardware Check" return } if
+ dup "harddisk" eq { pop txt_boot_harddisk return } if
+ dup "mediachk" eq { pop txt_mediacheck return } if
+ dup "mediacheck" eq { pop txt_mediacheck return } if
+ } {
+ dup "linux" eq { pop "Linux" return } if
+ dup "failsafe" eq { pop txt_safe_linux return } if
+ dup "windows" eq { pop "Windows" return } if
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( color0 color1 width height ) ==> ( )
+/drawborder {
+ currentpoint /db.y0 exch def /db.x0 exch def
+
+ /db.y1 exch 1 sub db.y0 add def
+ /db.x1 exch 1 sub db.x0 add def
+ /db.col1 exch def
+ /db.col0 exch def
+
+ db.x0 db.y1 moveto
+
+ db.col0 setcolor
+ db.x0 db.y0 lineto db.x1 db.y0 lineto
+
+ db.col1 setcolor
+ db.x1 db.y1 lineto db.x0 db.y1 lineto
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( color0 color1 color2 width height ) ==> ( )
+% draw frame with shadow
+% color0: upper left, color1: lower right, color2: shadow
+/drawborder3 {
+ currentpoint /db.y0 exch def /db.x0 exch def
+
+ /db.y1 exch 1 sub db.y0 add def
+ /db.x1 exch 1 sub db.x0 add def
+ /db.col2 exch def
+ /db.col1 exch def
+ /db.col0 exch def
+
+ db.x0 db.y1 moveto
+
+ db.col0 setcolor
+ db.x0 db.y0 lineto db.x1 db.y0 lineto
+
+ db.col1 setcolor
+ db.x1 db.y1 lineto db.x0 db.y1 lineto
+
+ db.col2 -1 ne {
+ db.col2 setcolor
+ 1 1 rmoveto
+ db.x1 1 add db.y1 1 add lineto
+ db.x1 1 add db.y0 1 add lineto
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( color0 color1 width height ) ==> ( )
+/drawborder4 {
+ 3 index 4 1 roll rot dup 3 index 3 index
+ currentpoint 6 2 roll
+ 1 1 rmoveto drawborder
+ moveto drawborder
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% center text
+% ( text width height ) ==> ( )
+/centertext {
+ 3 -1 roll strsize
+ 4 2 roll
+ 4 1 roll exch 4 1 roll sub 2 div neg 3 1 roll sub 2 div neg
+} def
+
+
+% ( img ) => ( width heigh )
+/imgsize {
+ dup .undef eq {
+ pop 0 0
+ } {
+ getdword dup
+ 0xffff and exch 16 shr
+ } ifelse
+} def
+
+
+% ( pic pic_a -- )
+/showlogo {
+ /tmp.sc over imgsize savescreen def
+
+ currentpoint 4 2 roll
+ 0 0 moveto tmp.sc blend
+ moveto tmp.sc restorescreen
+
+ tmp.sc free
+} def
+
+
+% ( file_name ) ==> ( image )
+/readimage {
+ findfile dup .undef ne {
+ dup setimage 0 0 image.size unpackimage exch free
+ } if
+} def
+
+
+/init {
+ 0 0 moveto currentpoint clip.size image
+
+ ptheme { ptheme.init } if
+
+ % set default language
+ "lang" findfile dup {
+ /tmp over length 1 add 2 max string def
+ tmp exch {
+ dup ' ' eq over '\n' eq or { pop pop exit } if
+ over exch 0 exch put
+ 1 add
+ } forall
+ tmp dup setlang pop getkeymapfromlocale setkeymap
+ } {
+ pop
+ "en_US" dup setlang pop getkeymapfromlocale setkeymap
+ } ifelse
+
+ keymap.default "" ne { keymap.default setkeymap } if
+
+ font.large setfont
+
+ /menu.text.xofs 10 def
+ /menu.text.yofs 2 def
+ /menu.item.height fontheight dup ptheme { 3 } { 2 } ifelse div add def
+ /menu.bar.height fontheight menu.text.yofs dup add add def
+
+ font.normal setfont
+
+ /menu.bar.width menu.bar.min.width def
+
+ % false: no boot options line initially
+ /boot.show true def
+
+} def
+
+
+/chksum {
+ 0 exch
+ { add } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some special debug & test keys.
+%
+% ( key_in ) ==> ( key_out )
+%
+/debug.input {
+ dup keyShiftF4 eq debug 3 ge and {
+ currentcolor black setcolor
+ currentpoint 0 0 moveto
+ 64 string biosmem "mem = %u " 2 index sprintf dup show free
+ moveto setcolor
+ } 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
+ } 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
+
+ config.livecd not {
+ 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
+ } if
+
+ .undef 0 idle
+ kroete.file free /kroete.file .undef def
+ pop 0
+ } if
+
+ dup keyShiftF3 eq syslinux and debug 3 ge and {
+ currentcolor black setcolor
+ currentpoint 0 0 moveto
+ "eject " print bootdrive eject print
+ moveto setcolor
+ } if
+
+ dup keyShiftF5 eq syslinux and debug 3 ge and {
+ currentcolor black setcolor
+ currentpoint 100 0 moveto
+ bootdrive print
+ moveto setcolor
+ } if
+
+ dup keyShiftF8 eq debug 3 ge and {
+ currentcolor debug 1 and { white } { black } ifelse setcolor
+
+ currentpoint 300 0 moveto
+ 0 memsize print "/" print print " " print
+ moveto
+
+ currentpoint 300 20 moveto
+ 1 memsize print "/" print print " " print
+ moveto
+
+ currentpoint 300 40 moveto
+ 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
+ } if
+
+ dup keyShiftF9 eq debug 3 ge and {
+ dumpmem
+ } if
+
+ dup keyShiftF10 eq {
+ /debug debug 1 add def
+ } if
+
+ dup keyShiftF11 eq {
+ 400 0 moveto "ani_%04d.jpg" play_movie
+ } if
+
+ dup keyShiftF1 eq {
+ /transp transp 0x10 sub 0 max def
+
+ /player 0 def
+ player "hapysuse.mod" findfile dup
+ {
+ mod.load
+ config.volume sound.setvolume
+ player 0 mod.play
+ /player player 1 add 3 and def
+ } {
+ pop
+ } ifelse
+
+ pop 0
+ } if
+
+ dup keyShiftF3 eq {
+ "fsfsong.wav" findfile dup
+ {
+ config.volume 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 {
+ dup 0xff and rand 0xff and gt { 0xff add } if
+ 8 shr
+ } def
+
+ /c13.r rand 0x7f00 and def
+ /c02_13.r rand 0x7f00 and c13.r sub def
+ /c23.r rand 0x7f00 and def
+ /c01_23.r rand 0x7f00 and c23.r sub def
+ /c13.g rand 0x7f00 and def
+ /c02_13.g rand 0x7f00 and c13.g sub def
+ /c23.g rand 0x7f00 and def
+ /c01_23.g rand 0x7f00 and c23.g sub def
+ /c13.b rand 0x7f00 and def
+ /c02_13.b rand 0x7f00 and c13.b sub def
+ /c23.b rand 0x7f00 and def
+ /c01_23.b rand 0x7f00 and c23.b sub def
+
+ screen.size /h exch def /w exch def
+
+ 0 1 screen.size exch pop {
+ 0 1 screen.size pop {
+ over moveto
+
+ currentpoint c01_23.r mul h div exch c02_13.r mul w div add c13.r add c23.r add
+ dit 0 max 0xff min 16 shl
+ currentpoint c01_23.g mul h div exch c02_13.g mul w div add c13.g add c23.g add
+ dit 0 max 0xff min 8 shl
+ currentpoint c01_23.b mul h div exch c02_13.b mul w div add c13.b add c23.b add
+ dit 0 max 0xff min add add
+
+ setcolor putpixel
+ } for
+ pop
+ } for
+
+ pop 0
+ } if
+
+ dup keyF12 eq debug 3 ge and {
+ % mouse support testing
+
+ 1 keepmode
+
+ /mouse xxx def
+ 0xc00000 setcolor
+ mouse .undef eq {
+ 700 580 moveto "no mouse" show
+ } {
+ {
+ mouse getdword 16 shl 16 shr screen.size pop 2 div add
+ mouse getdword 16 shr neg screen.size exch pop 2 div add
+ moveto 4 4 fillrect
+
+ mouse 4 add getdword 7 and
+ dup 1 and { 0xc00000 setcolor } if
+ dup 2 and { 0x0000a0 setcolor } if
+ dup 4 and { 0x009000 setcolor } if
+
+ 3 and 3 eq { exit } if
+
+ } loop
+ } ifelse
+ pop 0
+ } if
+
+ dup keyShiftF12 eq {
+ /transp transp 0x10 add 0x100 min def
+ pop 0
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show exit popup.
+%
+% ( ) ==> ( )
+%
+/exit_popup {
+ window.dialog
+
+ dup .title txt_exit_title put
+ dup .text txt_exit_dialog put
+ dup .buttons [
+ button.ok button.default actExit button.setaction
+ button.cancel button.notdefault actNothing button.setaction
+ config.rtl { exch } if
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show help window.
+%
+% ( ) ==> ( )
+%
+/show_help {
+ window.help
+
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show dvd popup.
+%
+% ( ) ==> ( )
+%
+/dvd_popup {
+ window.dialog
+
+ dup .title txt_dvd_warning_title put
+ dup .text txt_dvd_warning2 put
+ dup .buttons [
+% button.eject button.default actEject actNoClose or button.setaction
+ button.continue button.default actNothing button.setaction
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Warn that we are about to install 32bit software on a 64bit system.
+%
+% ( ) ==> ( )
+%
+/32bit_popup {
+ window.dialog
+
+ dup .title "Cool computer, but..." put
+ dup .text "You are about to install 32-bit software on a 64-bit computer." put
+ dup .buttons [
+ button.continue button.default actNothing button.setaction
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Warn that we are about to install 64bit software on a 32bit system.
+%
+% ( ) ==> ( )
+%
+/64bit_popup {
+ window.dialog
+
+ dup .title "Cool software, but..." put
+ dup .text "This is a 32-bit computer. You cannot use 64-bit software on it." put
+ dup .buttons [
+ button.reboot button.default actReboot actNoClose or button.setaction
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Warn that we don't have enough memory.
+%
+% ( ) ==> ( )
+%
+/nomem_popup {
+ window.dialog
+
+ dup .title "Sorry, but..." put
+ dup .text mem.show put
+ dup .buttons [
+ button.ok button.default actNothing button.setaction
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show "power off" popup.
+%
+% ( ) ==> ( )
+%
+/power_off {
+ window.dialog
+
+ dup .title txt_power_off_title put
+ dup .text txt_power_off put
+ dup .buttons [
+ button.ok button.notdefault actPowerOff actNoClose or button.setaction
+ button.cancel button.default actNothing button.setaction
+ config.rtl { exch } if
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set global config variables.
+%
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% For monitor tests: fake DDC info.
+%
+
+% "ddc" findfile test1
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% First, figure out video mode.
+%
+
+/config.screen.width /config.screen.height "screen.size" 800 600 gfxconfig.set.int2
+
+/screen.fallback false def
+
+config.screen.width config.screen.height 32 findmode setmode not {
+ config.screen.width config.screen.height 16 findmode setmode not {
+ /screen.fallback true def
+ 640 480 16 findmode setmode not {
+ 640 480 32 findmode setmode not {
+ false .end
+ } if
+ } if
+ } if
+} if
+
+% prepend fallback section to layout section list
+screen.fallback {
+ /gfxconfig.layout [ "640x480" gfxconfig.layout { } forall ] gfxconfig.layout free def
+} if
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Figure out whether to use penguin theme.
+%
+
+/config.penguin "penguin" 0 gfxconfig.set.int
+
+% more likely during winter...
+config.penguin -1 eq {
+ date
+ 0
+
+ over month 12 eq { 5 add } if
+ over month 1 le { 5 add } if
+ over weekday 5 eq { 2 mul } if
+ over weekday 6 eq { 4 mul } if
+ over dup month 12 eq exch day dup 24 ge exch 6 eq or and { pop 100 } if
+ over dup month 1 eq exch day 1 eq and { pop 100 } if
+
+ /config.penguin exch def
+ pop
+} if
+
+/ptheme rand pop rand 100 mod config.penguin lt def
+
+0x417 cvp getbyte 0x40 and 0 ne { /ptheme true def } if
+0x417 cvp getbyte 0x10 and 0 ne { /ptheme false def } if
+
+% prepend penguin section to layout section list
+ptheme {
+ /gfxconfig.layout [ "penguin" gfxconfig.layout { } forall ] gfxconfig.layout free def
+} if
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Then, read the other config variables (might depend on video mode).
+%
+
+/config.welcome "welcome" 0 gfxconfig.set.int
+/config.beep "beep" false gfxconfig.set.bool
+/config.volume "volume" 70 gfxconfig.set.int
+/config.talk "talk" false gfxconfig.set.bool
+/config.livecd "livecd" false gfxconfig.set.bool
+/config._2space "_2space" false gfxconfig.set.bool
+/transp "menu.transparency" 0x20 gfxconfig.set.int
+/config.screen.width
+/config.screen.height "screen.size" 800 600 gfxconfig.set.int2
+/config.background "background" "back.jpg" gfxconfig.set.str
+/config.font.normal "font.normal" "16x16.fnt" gfxconfig.set.str
+/config.font.large "font.large" "16x16.fnt" gfxconfig.set.str
+/progress.bar.color "progress.bar.color" white gfxconfig.set.int
+/xmenu.normal.bg "menu.normal.bg" black gfxconfig.set.int
+/xmenu.normal.fg "menu.normal.fg" white gfxconfig.set.int
+/xmenu.selected.bg "menu.selected.bg" white gfxconfig.set.int
+/xmenu.selected.fg "menu.selected.fg" black gfxconfig.set.int
+/window.color.bg "window.bg" white gfxconfig.set.int
+/window.color.fg "window.fg" black gfxconfig.set.int
+/window.title.bg "window.title.bg" black gfxconfig.set.int
+/window.title.fg "window.title.fg" white gfxconfig.set.int
+/window.title.error.bg "window.title.error.bg" 0xc00000 gfxconfig.set.int
+/help.link.fg "help.link.fg" 0x0000a0 gfxconfig.set.int
+/help.link.selected.fg "help.link.selected.fg" white gfxconfig.set.int
+/help.link.selected.bg "help.link.selected.bg" 0x0000a0 gfxconfig.set.int
+/help.highlight.fg "help.highlight.fg" 0x009000 gfxconfig.set.int
+/menu.text.normal "mainmenu.normal.fg" white gfxconfig.set.int
+/menu.text.select "mainmenu.selected.fg" black gfxconfig.set.int
+/boot.text.options "bootopt.label.fg" white gfxconfig.set.int
+/boot.text.normal "bootopt.text.fg" white gfxconfig.set.int
+/menu.bar.color "mainmenu.bar.color" white gfxconfig.set.int
+/menu.bar.min.width "mainmenu.bar.minwidth" 300 gfxconfig.set.int
+/menu.bar.transparency "mainmenu.bar.transparency" 70 gfxconfig.set.int
+/menu.start.x
+/menu.start.y "mainmenu.pos" 253 170 gfxconfig.set.int2
+/menu.max.entries "mainmenu.entries" 8 gfxconfig.set.int
+/boot.pos.x
+/boot.pos.y "bootopt.pos" 263 480 gfxconfig.set.int2
+/panel.normal.fg "panel.normal.fg" white gfxconfig.set.int
+/panel.title.fg "panel.title.fg" white gfxconfig.set.int
+/panel.f-key.fg "panel.f-key.fg" black gfxconfig.set.int
+/keymap.submenu "keymap.submenu" false gfxconfig.set.bool
+/keymap.mainmenu "keymap.mainmenu" false gfxconfig.set.bool
+/keymap.default "keymap" "" gfxconfig.set.str
+
+/install.default "install" "" gfxconfig.set.str
+/install.http.server "install.http.server" "" gfxconfig.set.str
+/install.http.path "install.http.path" "" gfxconfig.set.str
+
+/install.nfs.server "install.nfs.server" "" gfxconfig.set.str
+/install.nfs.path "install.nfs.path" "" gfxconfig.set.str
+
+/install.ftp.server "install.ftp.server" "" gfxconfig.set.str
+/install.ftp.path "install.ftp.path" "" gfxconfig.set.str
+/install.ftp.user "install.ftp.user" "" gfxconfig.set.str
+/install.ftp.password "install.ftp.password" "" gfxconfig.set.str
+
+/install.smb.server "install.smb.server" "" gfxconfig.set.str
+/install.smb.share "install.smb.share" "" gfxconfig.set.str
+/install.smb.path "install.smb.path" "" gfxconfig.set.str
+/install.smb.domain "install.smb.domain" "" gfxconfig.set.str
+/install.smb.user "install.smb.user" "" gfxconfig.set.str
+/install.smb.password "install.smb.password" "" gfxconfig.set.str
+
+/install.hd.device "install.hd.device" "" gfxconfig.set.str
+/install.hd.path "install.hd.path" "" gfxconfig.set.str
+
+/dud.default "dud" "" gfxconfig.set.str
+/dud.file "dud.file" "" gfxconfig.set.str
+/dud.url "dud.url" "" gfxconfig.set.str
+/dud.url.name "dud.url.name" "" gfxconfig.set.str
+
+/serial.line0 "serial.line0" [ ] gfxconfig.set.array_str
+/serial.line1 "serial.line1" [ ] gfxconfig.set.array_str
+/serial.line2 "serial.line2" [ ] gfxconfig.set.array_str
+/serial.line3 "serial.line3" [ ] gfxconfig.set.array_str
+
+/serial.lines [
+ serial.line0 serial.line1 serial.line2 serial.line3
+] def
+
+% Array of menu entries with no boot option input field.
+/config.nobootoptions "nobootoptions" [ ] gfxconfig.set.array_str
+
+% Array of menu entries which should not get an 'install' option appended.
+/config.noinstallopt "noinstallopt" [ ] gfxconfig.set.array_str
+
+% Mininum required memory in MB.
+/mem.check {
+ mem.min gfxconfig.int dup .undef eq { pop 0 } if
+} def
+
+% Message to print if we fail minimum memory requirement.
+/mem.show {
+ mem.msg gfxconfig.str dup .undef eq { pop "Not enough memory." } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% drawing area size
+/clip.size { screen.size } def
+
+% set background image
+config.background findfile setimage
+
+% get font(s)
+/font.normal config.font.normal findfile def
+/font.large
+ % don't load it twice
+ config.font.normal config.font.large eq {
+ font.normal
+ } {
+ config.font.large findfile
+ } ifelse
+def
+
+% default kroet direction (idle task)
+/kroete.dir 0 def
+
+% default debug level
+/debug 0 def
+
+% no specials for visual impaired people
+/v_impaired 0 def
+
+% show welcome animation?
+ptheme
+screen.fallback or
+CapsLock or
+config.welcome 0 eq or
+{
+ /bsplash.done { } def
+} {
+ bsplash.show
+} ifelse
+
+% check for bi-arch config
+check_arch_boot_dir
+