Patch title: Release 91 bulk changes
Abstract:
File: /fullpliant/embedded/configure.pli
Key:
    Removed line
    Added line
module "/pliant/language/stream.pli"
module "/pliant/admin/file.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/linux/kernel/device.pli"

module "/pliant/language/os.pli"
module "/pliant/admin/asciifile.pli"
module "/pliant/fullpliant/user.pli"
module "/pliant/protocol/dns/name.pli"
module "/pliant/protocol/lpr/embedded.pli"

function embedded_generate_x11_3 c
  arg_rw Data:Computer c
  var Stream s ; var AsciiFile f

  # link the right executable
  file_link "file:/usr/X11R6/bin/" "target:/usr/bin/X11/"
  var Str server := c:env:"hardware":"video":"xfree86_server_name"
  var Str file := "/usr/X11R6/bin/XF86_"+upper:(server 0 1)+(server 1 server:len)
  if (file_query "target:"+file standard)=defined
    file_delete "target:/usr/X11R6/bin/X"
    file_link "file:"+file "target:/usr/X11R6/bin/X" true

  # now build the famous /etc/X11/XF86Config file
  s open "target:/etc/X11/XF86Config" out+mkdir+safe
  
  if not (c:env:"hardware":"screen":"horizontal_resolution" parse (var Int rx))
    rx := 1024
  if not (c:env:"hardware":"screen":"vertical_resolution" parse (var Int ry))
    ry := 768
  if not (c:env:"hardware":"video":"vram_mb" parse (var Int vram))
    vram := undefined
  if not (c:env:"hardware":"video":"bpp" parse (var Int bpp))
    bpp := 32
  
  if vram=defined
    if bpp=32 and rx*ry*(bpp\8)>vram*2^20
      bpp := shunt c:env:"hardware":"video":"can_do_24_bpp"="true" 24 16
    while bpp>8 and rx*ry*(bpp\8)>vram*2^20
      bpp := shunt bpp>16 16 8
  
  c "hardware" "screen" "horizontal_resolution" := string rx
  c "hardware" "screen" "vertical_resolution" := string ry
  c "hardware" "video" "bpp" := string bpp
  
  s writeline "Section [dq]Files[dq]"
  s writeline "  RgbPath [dq]/usr/X11R6/lib/X11/rgb[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/misc:unscaled[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/75dpi:unscaled[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/100dpi:unscaled[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/Type1[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/Speedo[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/misc[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/75dpi[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/100dpi[dq]"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Keyboard[dq]"
  s writeline "  Protocol [dq]Standard[dq]"
  var Str layout := c:env:"hardware":"keyboard":"xfree86_layout"
  if layout=""
    layout := c:env:"hardware":"keyboard":"layout"
  if not (layout parse any "(" any ")" any)
    layout := "xfree86("+layout+")"
  s writeline "  XkbKeymap [dq]"+layout+"[dq]"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Pointer[dq]"
  s writeline "  Protocol [dq]"+(shunt c:env:"hardware":"mouse":"linux_device"="device:/psaux" "PS/2" "Microsoft")+"[dq]"
  s writeline "  Device [dq]"+(file_os_name c:env:"hardware":"mouse":"linux_device")+"[dq]" 
  s writeline "  "+(shunt c:env:"hardware":"mouse":"button">="3" "# " "")+"Emulate3Timeout 100"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Monitor[dq]"
  s writeline "  Identifier [dq]"+c:env:"hardware":"screen":"constructor"+" "+c:env:"hardware":"screen":"model"+"[dq]"
  s writeline "  VendorName [dq]"+c:env:"hardware":"screen":"constructor"+"[dq]"
  s writeline "  ModelName [dq]"+c:env:"hardware":"screen":"model"+"[dq]"
  s writeline "  HorizSync "+c:env:"hardware":"screen":"horizontal_frequency"
  s writeline "  VertRefresh "+c:env:"hardware":"screen":"vertical_frequency"
  s writeline ""
  if c:env:"hardware":"screen":"xfree86_frequency"<>""
    s writeline c:env:"hardware":"screen":"xfree86_frequency"
  else
    s writeline "# 640x400 @ 70 Hz, 31.5 kHz hsync"
    s writeline "Modeline [dq]640x400[dq]     25.175 640  664  760  800   400  409  411  450"
    s writeline "# 640x480 @ 60 Hz, 31.5 kHz hsync"
    s writeline "Modeline [dq]640x480[dq]     25.175 640  664  760  800   480  491  493  525"
    s writeline "# 800x600 @ 56 Hz, 35.15 kHz hsync"
    s writeline "ModeLine [dq]800x600[dq]     36     800  824  896 1024   600  601  603  625"
    s writeline "# 1024x768 @ 87 Hz interlaced, 35.5 kHz hsync"
    s writeline "Modeline [dq]1024x768[dq]    44.9  1024 1048 1208 1264   768  776  784  817 Interlace"
  
    s writeline "# 640x400 @ 85 Hz, 37.86 kHz hsync"
    s writeline "Modeline [dq]640x400[dq]     31.5   640  672 736   832   400  401  404  445 -HSync +VSync"
    s writeline "# 640x480 @ 72 Hz, 36.5 kHz hsync"
    s writeline "Modeline [dq]640x480[dq]     31.5   640  680  720  864   480  488  491  521"
    s writeline "# 640x480 @ 75 Hz, 37.50 kHz hsync"
    s writeline "ModeLine  [dq]640x480[dq]    31.5   640  656  720  840   480  481  484  500 -HSync -VSync"
    s writeline "# 800x600 @ 60 Hz, 37.8 kHz hsync"
    s writeline "Modeline [dq]800x600[dq]     40     800  840  968 1056   600  601  605  628 +hsync +vsync"
  
    s writeline "# 640x480 @ 85 Hz, 43.27 kHz hsync"
    s writeline "Modeline [dq]640x400[dq]     36     640  696  752  832   480  481  484  509 -HSync -VSync"
    s writeline "# 1152x864 @ 89 Hz interlaced, 44 kHz hsync"
    s writeline "ModeLine [dq]1152x864[dq]    65    1152 1168 1384 1480   864  865  875  985 Interlace"
  
    s writeline "# 800x600 @ 72 Hz, 48.0 kHz hsync"
    s writeline "Modeline [dq]800x600[dq]     50     800  856  976 1040   600  637  643  666 +hsync +vsync"
    s writeline "# 1024x768 @ 60 Hz, 48.4 kHz hsync"
    s writeline "Modeline [dq]1024x768[dq]    65    1024 1032 1176 1344   768  771  777  806 -hsync -vsync"
  
    s writeline "# 640x480 @ 100 Hz, 53.01 kHz hsync"
    s writeline "Modeline [dq]640x480[dq]     45.8   640  672  768  864   480  488  494  530 -HSync -VSync"
    s writeline "# 1152x864 @ 60 Hz, 53.5 kHz hsync"
    s writeline "Modeline  [dq]1152x864[dq]   89.9  1152 1216 1472 1680   864  868  876  892 -HSync -VSync"
    s writeline "# 800x600 @ 85 Hz, 55.84 kHz hsync"
    s writeline "Modeline  [dq]800x600[dq]    60.75  800  864  928 1088   600  616  621  657 -HSync -VSync"
  
    s writeline "# 1024x768 @ 70 Hz, 56.5 kHz hsync"
    s writeline "Modeline [dq]1024x768[dq]    75    1024 1048 1184 1328   768  771  777  806 -hsync -vsync"
    s writeline "# 1280x1024 @ 87 Hz interlaced, 51 kHz hsync"
    s writeline "Modeline [dq]1280x1024[dq]   80    1280 1296 1512 1568  1024 1025 1037 1165 Interlace"
  
    s writeline "# 800x600 @ 100 Hz, 64.02 kHz hsync"
    s writeline "Modeline  [dq]800x600[dq]    69.65  800  864  928 1088   600  604  610  640 -HSync -VSync"
    s writeline "# 1024x768 @ 76 Hz, 62.5 kHz hsync"
    s writeline "Modeline [dq]1024x768[dq]    85    1024 1032 1152 1360   768  784  787  823"
    s writeline "# 1152x864 @ 70 Hz, 62.4 kHz hsync"
    s writeline "Modeline  [dq]1152x864[dq]   92    1152 1208 1368 1474   864  865  875  895"
    s writeline "# 1280x1024 @ 61 Hz, 64.2 kHz hsync"
    s writeline "Modeline [dq]1280x1024[dq]  110    1280 1328 1512 1712  1024 1025 1028 1054"
  
    s writeline "# 1024x768 @ 85 Hz, 70.24 kHz hsync"
    s writeline "Modeline [dq]1024x768[dq]   98.9  1024 1056 1216 1408   768 782 788 822 -HSync -VSync"
    s writeline "# 1152x864 @ 78 Hz, 70.8 kHz hsync"
    s writeline "Modeline [dq]1152x864[dq]   110   1152 1240 1324 1552   864  864  876  908"
  
    s writeline "# 1280x1024 @ 70 Hz, 74.59 kHz hsync"
    s writeline "Modeline [dq]1280x1024[dq]  126.5 1280 1312 1472 1696  1024 1032 1040 1068 -HSync -VSync"
    s writeline "# 1600x1200 @ 60Hz, 75.00 kHz hsync"
    s writeline "Modeline [dq]1600x1200[dq]  162   1600 1664 1856 2160  1200 1201 1204 1250 +HSync +VSync"
    s writeline "# 1152x864 @ 84 Hz, 76.0 kHz hsync"
    s writeline "Modeline [dq]1152x864[dq]   135    1152 1464 1592 1776   864  864  876  908"
  
    s writeline "# 1280x1024 @ 74 Hz, 78.85 kHz hsync"
    s writeline "Modeline [dq]1280x1024[dq]  135    1280 1312 1456 1712  1024 1027 1030 1064"
  
    s writeline "# 1024x768 @ 100Hz, 80.21 kHz hsync"
    s writeline "Modeline [dq]1024x768[dq]   115.5  1024 1056 1248 1440  768  771  781  802 -HSync -VSync"
    s writeline "# 1280x1024 @ 76 Hz, 81.13 kHz hsync"
    s writeline "Modeline [dq]1280x1024[dq]  135    1280 1312 1416 1664  1024 1027 1030 1064"
  
    s writeline "# 1600x1200 @ 70 Hz, 87.50 kHz hsync"
    s writeline "Modeline [dq]1600x1200[dq]  189    1600 1664 1856 2160  1200 1201 1204 1250 -HSync -VSync"
    s writeline "# 1152x864 @ 100 Hz, 89.62 kHz hsync"
    s writeline "Modeline [dq]1152x864[dq]   137.65 1152 1184 1312 1536   864  866  885  902 -HSync -VSync"
    s writeline "# 1280x1024 @ 85 Hz, 91.15 kHz hsync"
    s writeline "Modeline [dq]1280x1024[dq]  157.5  1280 1344 1504 1728  1024 1025 1028 1072 +HSync +VSync"
    s writeline "# 1600x1200 @ 75 Hz, 93.75 kHz hsync"
    s writeline "Modeline [dq]1600x1200[dq]  202.5  1600 1664 1856 2160  1200 1201 1204 1250 +HSync +VSync"
    s writeline "# 1600x1200 @ 85 Hz, 105.77 kHz hsync"
    s writeline "Modeline [dq]1600x1200[dq]  220    1600 1616 1808 2080  1200 1204 1207 1244 +HSync +VSync"
    s writeline "# 1280x1024 @ 100 Hz, 107.16 kHz hsync"
    s writeline "Modeline [dq]1280x1024[dq]  181.75 1280 1312 1440 1696  1024 1031 1046 1072 -HSync -VSync"
  
    s writeline "# 1800x1440 @ 64Hz, 96.15 kHz hsync"
    s writeline "ModeLine [dq]1800X1440[dq]  230    1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync"
    s writeline "# 1800x1440 @ 70Hz, 104.52 kHz hsync"
    s writeline "ModeLine [dq]1800X1440[dq]  250    1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync"
  
    s writeline "# 512x384 @ 78 Hz, 31.50 kHz hsync"
    s writeline "Modeline [dq]512x384[dq]    20.160 512  528  592  640   384  385  388  404 -HSync -VSync"
    s writeline "# 512x384 @ 85 Hz, 34.38 kHz hsync"
    s writeline "Modeline [dq]512x384[dq]    22     512  528  592  640   384  385  388  404 -HSync -VSync"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Device[dq]"
  s writeline "  Identifier [dq]"+c:env:"hardware":"video":"constructor"+" "+c:env:"hardware":"video":"model"+"[dq]"
  s writeline "  VendorName [dq]"+c:env:"hardware":"video":"constructor"+"[dq]"
  s writeline "  BoardName [dq]"+c:env:"hardware":"video":"model"+"[dq]"
  # if c:env:"hardware":"screen":"constructor"="IBM" and c:env:"hardware":"screen":"model"="Thinkpad 750"
  #   s writeline "  Clockchip [dq]ibm_rgb5xx[dq]"
  if c:env:"hardware":"video":"xfree86_chip_id"<>""
    s writeline "  ChipId "+c:env:"hardware":"video":"xfree86_chip_id"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Screen[dq]"
  s writeline "  Driver [dq]"+(shunt c:env:"hardware":"video":"xfree86_server_name"="SVGA" "svga" c:env:"hardware":"video":"xfree86_server_name"="VGA16" "vga16" "accel")+"[dq]"
  s writeline "  Device [dq]"+c:env:"hardware":"video":"constructor"+" "+c:env:"hardware":"video":"model"+"[dq]"
  s writeline "  Monitor [dq]"+c:env:"hardware":"screen":"constructor"+" "+c:env:"hardware":"screen":"model"+"[dq]"
  s writeline "  Subsection [dq]Display[dq]"
  s writeline "    Depth "+string:bpp
  s writeline "    Modes [dq]"+string:rx+"x"+string:ry+"[dq]"
  s writeline "    ViewPort 0 0"
  s writeline "  EndSubsection"
  s writeline "EndSection"


function embedded_generate_x11_4 c
  arg_rw Data:Computer c
  var Stream s ; var AsciiFile f

  file_delete "target:/etc/X11/XF86Config-4" # something creates this file from time to time, and it prevents X11 to start

  s open "target:/etc/X11/XF86Config" out+mkdir+safe
  
  if not (c:env:"hardware":"screen":"horizontal_resolution" parse (var Int rx))
    rx := 1024
  if not (c:env:"hardware":"screen":"vertical_resolution" parse (var Int ry))
    ry := 768
  if not (c:env:"hardware":"video":"vram_mb" parse (var Int vram))
    vram := undefined
  if not (c:env:"hardware":"video":"bpp" parse (var Int bpp))
    bpp := 32
  
  if vram=defined
    if bpp=32 and rx*ry*(bpp\8)>vram*2^20
      bpp := shunt c:env:"hardware":"video":"can_do_24_bpp"="true" 24 16
    while bpp>8 and rx*ry*(bpp\8)>vram*2^20
      bpp := shunt bpp>16 16 8
  
  c "hardware" "screen" "horizontal_resolution" := string rx
  c "hardware" "screen" "vertical_resolution" := string ry
  c "hardware" "video" "bpp" := string bpp
  
  # small recommended extensions
  s writeline "Section [dq]Module[dq]"
  s writeline "  Load [dq]int10[dq]"
  s writeline "  Load [dq]dbe[dq]"
  s writeline "  Load [dq]record[dq]"
  s writeline "  Load [dq]glx[dq]"
  s writeline "  Load [dq]extmod[dq]"
  # s writeline "  SubSection [dq]extmod[dq]"
  # s writeline "    Option [dq]omit xfree86-dga[dq]"
  # s writeline "  EndSubSection"
  s writeline "  Load [dq]type1[dq]"
  s writeline "  Load [dq]freetype[dq]"
  # larger ones
  s writeline "  Load [dq]Glcore[dq]"
  # s writeline "  Load [dq]pex5[dq]"
  # s writeline "  Load [dq]xie[dq]"
  s writeline "EndSection"

  s writeline ""
  s writeline "Section [dq]Files[dq]"
  s writeline "  RgbPath [dq]/usr/X11R6/lib/X11/rgb[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/misc:unscaled[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/75dpi:unscaled[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/100dpi:unscaled[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/Type1[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/Speedo[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/misc[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/75dpi[dq]"
  s writeline "  FontPath [dq]/usr/X11R6/lib/X11/fonts/100dpi[dq]"
  s writeline "EndSection"

  s writeline ""
  s writeline "Section [dq]InputDevice[dq]"
  s writeline "  Identifier [dq]Keyboard1[dq]"
  s writeline "  Driver [dq]Keyboard[dq]"
  s writeline "  Option [dq]AutoRepeat[dq] [dq]500 30[dq]"
  s writeline "  Option [dq]XkbRules[dq] [dq]xfree86[dq]"
  s writeline "  Option [dq]XkbModel[dq] [dq]pc101[dq]"
  var Str layout := c:env:"hardware":"keyboard":"xfree86_layout"
  if layout=""
    layout := c:env:"hardware":"keyboard":"layout"
  if (layout parse any "(" any:(var Str layout0) ")" any)
    layout := layout0
  s writeline "  Option [dq]XkbLayout[dq] [dq]"+layout+"[dq]"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]InputDevice[dq]"
  s writeline "  Identifier [dq]Mouse1[dq]"
  s writeline "  Driver [dq]mouse[dq]"
  s writeline "  Option [dq]Protocol[dq] [dq]"+(shunt c:env:"hardware":"mouse":"linux_device"="device:/psaux" "PS/2" c:env:"hardware":"mouse":"linux_device"="device:/input/mice" "IMPS/2" "Microsoft")+"[dq]"
  s writeline "  Option [dq]Device[dq] [dq]"+(file_os_name c:env:"hardware":"mouse":"linux_device")+"[dq]"
  if c:env:"hardware":"mouse":"button"="2"
    s writeline "  Option [dq]Emulate3Buttons[dq]"
    s writeline "  Option [dq]Emulate3Timeout[dq] [dq]50[dq]"
  if (c:env:"hardware":"mouse":"resolution" parse (var Int resolution))
    s writeline "  Option [dq]Resolution[dq] [dq]"+c:env:"hardware":"mouse":"resolution"+"[dq]"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Monitor[dq]"
  s writeline "  Identifier [dq]"+c:env:"hardware":"screen":"constructor"+" "+c:env:"hardware":"screen":"model"+"[dq]"
  s writeline "  HorizSync "+c:env:"hardware":"screen":"horizontal_frequency"
  s writeline "  VertRefresh "+c:env:"hardware":"screen":"vertical_frequency"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Device[dq]"
  s writeline "  Identifier [dq]"+c:env:"hardware":"video":"constructor"+" "+c:env:"hardware":"video":"model"+"[dq]"
  s writeline "  Driver [dq]"+c:env:"hardware":"video":"xfree86_driver"+"[dq]"
  s writeline "EndSection"
  
  s writeline ""
  s writeline "Section [dq]Screen[dq]"
  s writeline "  Identifier [dq]Screen 1[dq]"
  s writeline "  Device [dq]"+c:env:"hardware":"video":"constructor"+" "+c:env:"hardware":"video":"model"+"[dq]"
  s writeline "  Monitor [dq]"+c:env:"hardware":"screen":"constructor"+" "+c:env:"hardware":"screen":"model"+"[dq]"
  s writeline "  DefaultDepth "+string:bpp
  s writeline "  Subsection [dq]Display[dq]"
  s writeline "    Depth "+string:bpp
  s writeline "    Modes [dq]"+string:rx+"x"+string:ry+"[dq]"
  s writeline "    ViewPort 0 0"
  s writeline "  EndSubsection"
  s writeline "EndSection"

  s writeline ""
  s writeline "Section [dq]ServerLayout[dq]"
  s writeline "  Identifier [dq]Simple Layout[dq]"
  s writeline "  Screen [dq]Screen 1[dq]"
  s writeline "  InputDevice [dq]Mouse1[dq] [dq]CorePointer[dq]"
  s writeline "  InputDevice [dq]Keyboard1[dq] [dq]CoreKeyboard[dq]"
  s writeline "EndSection"

method s menu id
  arg_rw Stream s ; arg Str id
  s writeline ""
  s writeline "DestroyMenu "+id
  s writeline "AddToMenu "+id

method s blank_line
  arg_rw Stream s
  s writeline "+ [dq][dq] Nop"

method s sub_menu title id
  arg_rw Stream s ; arg Str title id
  s writeline "+ [dq]"+title+"[dq] Popup "+id

method s sub_menu id
  arg_rw Stream s ; arg Str id
  s sub_menu upper:(id 0 1)+(id 1 id:len) id

gvar Array:Str path
path += ""
path += "/usr/bin/"
path += "/usr/local/bin/"
path += "/usr/X11R6/bin/"

method s application title exe
  arg_rw Stream s ; arg Str title exe
  for (var Int i) 0 path:size-1
    if (file_query "target:"+path:i+(exe 0 (exe search " " exe:len)) extended+deadlinks)=defined
      s writeline "+ [dq]"+title+"[dq] Exec "+exe
      return
  # s writeline "+ [dq]- "+title+" -[dq] Nop"

method s application exe
  arg_rw Stream s ; arg Str exe
  s application upper:(exe 0 1)+(exe 1 exe:len) exe

function embedded_generate_fvwm2 c
  arg_rw Data:Computer c
  var Stream s ; var AsciiFile f
  s open "target:/home/me/.fvwm2rc" out+mkdir+safe

  s menu "browser"
  s application "Firefox" "/usr/bin/mozilla-firefox"
  s application "Firebird" "/usr/bin/mozilla-firebird"
  s application "mozilla"
  s application "konqueror"
  s application "galeon"
  s application "Netscape 4" "/usr/lib/netscape/477/navigator/navigator-smotif.real"
    
  s menu "htmleditor"
  s application "OpenOffice" "/usr/lib/openoffice/program/sweb"
  s application "mozilla"
  s application "quanta"
  s application "Amaya" "/usr/local/Amaya/LINUX-ELF/bin/amaya"
  
  s menu "wordprocessor"
  s application "OpenWriter" "/usr/lib/openoffice/program/swriter"
  s application "scribus"
  s application "abiword"
  s application "kword"
  s application "StarWriter" "/usr/local/staroffice/soffice"
    
  s menu "chart"
  s application "guppi"
  s application "StarChart" "/usr/local/staroffice/soffice"
  s application "kchart"
  
  s menu "spreadsheet"
  s application "OpenCalc" "/usr/lib/openoffice/program/scalc"
  s application "gnumeric"
  s application "kspread"
  s application "StarCalc" "/usr/local/staroffice/soffice"
  s blank_line
  s sub_menu "chart"
  
  s menu "image"
  s application "gimp"
  s application "StarImage" "/usr/local/staroffice/soffice"
  
  s menu "vector"
  s application "OpenDraw" "/usr/lib/openoffice/program/sdraw"
  s application "inkscape"
  s application "sketch"
  s application "karbon"
  s application "kontour"
  s application "StarDraw" "/usr/local/staroffice/soffice"
  s application "sodipodi"
  
  s menu "diagram"
  s application "dia"
  s application "kivio"
  
  s menu "presenter"
  s application "OpenImpress" "/usr/lib/openoffice/program/simpress"
  s application "kpresenter"
  s application "StarImpress" "/usr/local/staroffice/soffice"
  
  s menu "drawing"
  s sub_menu "image"
  s sub_menu "vector"
  s sub_menu "diagram"
  s sub_menu "presenter"
  
  s menu "database"
  s application "gaby"
  s application "StarBase" "/usr/local/staroffice/soffice"
  s application "knoda"
    
  s menu "texteditor"
  s application "kwrite"
  s application "kate"
  s application "tkdesk"
  s application "adie"
  
  s menu "filemanager"
  s application "konqueror"
  s application "tkdesk"
  s application "PathFinder"

  s menu "tools"
  s application "calcularor"
    
  s menu "main"
  s writeline "+ [dq]"+computer_fullname+"[dq] Title"
  plugin menu_head
  s sub_menu "Web browser" "browser"
  s sub_menu "HTML editor" "htmleditor"
  s blank_line
  s sub_menu "Word processor" "wordprocessor"
  s sub_menu "spreadsheet"
  s sub_menu "drawing"
  s sub_menu "database"
  s blank_line
  s sub_menu "Text editor" "texteditor"
  s sub_menu "File manager" "filemanager"
  s sub_menu "Other tools" "tools"
  s application "Prompt" "xterm +sb -fg black -bg rgb:D8/D8/D8 -title [dq]Prompt[dq]"
  plugin menu_tail
  s writeline "MenuStyle black grey white -adobe-helvetica-bold-r-*-*-12-* mwm"
 
  s writeline ""
  s writeline "DeskTopSize 2x2"
  s writeline "EdgeScroll 0 0"
  s writeline "OpaqueMoveSize 100"
  
  s writeline ""
  s writeline "DestroyMenu Window-Ops"
  s writeline "AddToMenu Window-Ops"
  s writeline "+ [dq]Window Options[dq] Title"
  s writeline "+ [dq](Un)Shade[dq] WindowShade"
  s writeline "+ [dq](Un)Maximize vertical[dq] Maximize 0 100"
  s writeline "+ [dq](Un)Maximize horizontal[dq] Maximize 100 0"
  s writeline "+ [dq](Un)Maximize to screen[dq] Maximize 100 100"
  s writeline "+ [dq][dq] Nop"
  s writeline "+ [dq]Destroy[dq] Destroy"
  
  s writeline ""
  s writeline "DestroyDecor default-decor"
  s writeline "AddToDecor default-decor"
  s writeline "+ ButtonStyle Reset"
  s writeline "+ ButtonStyle 2 Vector 16 20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 60x50@0 80x80@0 70x80@0 50x60@0 30x80@0 20x80@0 20x70@0 40x50@1 20x30@0 20x20@1"
  s writeline "+ ButtonStyle 4 Vector 2 80x76@0 20x76@1"
  
  s writeline ""
  s writeline "Style [dq]*[dq] UseDecor default-decor"
  s writeline "Style [dq]*[dq] Font -adobe-helvetica-bold-r-*-*-12-*"
  s writeline "Style [dq]*[dq] ForeColor black"
  s writeline "Style [dq]*[dq] BackColor #B0B0B0"
  s writeline "Style [dq]*[dq] HilightFore white"
  s writeline "Style [dq]*[dq] HilightBack #405060"
  s writeline "Style [dq]*[dq] BorderWidth 6"
  s writeline "Style [dq]*[dq] HandleWidth 6"
  s writeline "Style [dq]*[dq] MWMBorder"
  s writeline "Style [dq]*[dq] MWMDecor"
  s writeline "Style [dq]*[dq] SmartPlacement"
  s writeline "Style [dq]*[dq] RandomPlacement"
  s writeline "Style [dq]*[dq] IconBox 35 -50 -1 -1"
  s writeline "Style [dq]*[dq] Icon /usr/X11R6/lib/tkdesk/images/question.xpm"
  s writeline "Style [dq]*[dq] IconFont -adobe-helvetica-medium-r-*-*-10-*"
  s writeline "Style [dq]xterm[dq] Icon /usr/X11R6/lib/tkdesk/images/xterm32.xpm"
  
  s writeline ""
  s writeline "Mouse 1 R A Menu main"
  s writeline "Mouse 3 R A WindowList OnlyIcons, NoGeometry"
  
  s writeline "Mouse 1 T A move-or-raise"
  s writeline "Mouse 2 T A WindowShade"
  s writeline "Mouse 3 T A move-or-lower"
  s writeline "Mouse 1 S A resize-or-raise"
  s writeline "Mouse 3 S A move-or-lower"
  s writeline "Mouse 1 F A resize-or-raise"
  s writeline "Mouse 3 F A move-or-lower"
  
  s writeline "Mouse 0 I A deiconify-and-raise"
  
  s writeline "Mouse 0 1 A Popup Window-Ops"
  s writeline "Mouse 0 2 A Close"
  s writeline "Mouse 0 4 A Iconify"
  
  s writeline ""
  s writeline "Key F1 A SC GotoPage 0 0"
  s writeline "Key F2 A SC GotoPage 1 0"
  s writeline "Key F3 A SC GotoPage 0 1"
  s writeline "Key F4 A SC GotoPage 1 1"
  s writeline "Key F5 W SC Maximize 0 100"
  s writeline "Key F6 W SC Maximize 100 0"
  s writeline "Key F7 W SC Maximize 100 100"
  s writeline "Key F8 W SC WindowShade"
  s writeline "Key F9 W SC Raise"
  s writeline "Key F10 W SC Lower"
  s writeline "Key F11 W SC Iconify"
  s writeline "Key F12 W SC Close"
  
  s writeline ""
  s writeline "DestroyFunc deiconify-and-raise"
  s writeline "AddToFunc deiconify-and-raise"
  s writeline "+ [dq]I[dq] Iconify -1"
  s writeline "+ [dq]I[dq] Raise"
  
  s writeline ""
  s writeline "DestroyFunc move-or-raise"
  s writeline "AddToFunc move-or-raise"
  s writeline "+ [dq]M[dq] Move"
  s writeline "+ [dq]C[dq] Raise"
  
  s writeline ""
  s writeline "DestroyFunc move-or-lower"
  s writeline "AddToFunc move-or-lower"
  s writeline "+ [dq]M[dq] Move"
  s writeline "+ [dq]C[dq] Lower"
  
  s writeline ""
  s writeline "DestroyFunc resize-or-raise"
  s writeline "AddToFunc resize-or-raise"
  s writeline "+ [dq]M[dq] Resize"
  s writeline "+ [dq]C[dq] Raise"
  

function unix_owner path uid gid
  arg Str path ; arg Int uid gid
  file_tree_create path
  file_configure path "uid "+string:uid+" gid "+string:gid+" mode "+string:os_default_directory_mode
  var Array:FileInfo files := file_list path extended+recursive+directories
  for (var Int i) 0 files:size-1
    file_configure files:i:name "uid "+string:uid+" gid "+string:gid+string:(shunt files:i:is_directory os_default_directory_mode os_default_file_mode)


function unix_user name uid gid f
  arg Str name ; arg Int uid gid ; arg_rw AsciiFile f
  f set name ":" name+":*:"+string:uid+":"+string:gid+":"+name+":/home/"+name+":/bin/sh"
  unix_owner "target:/home/"+name+"/" uid gid

if false

  function unix_crypt key salt -> adr
    arg CStr key salt ; arg Address adr
    external "libcrypt.so.1" "crypt"
  
  function unix_password password -> sign
    arg Str password sign
    sign set (unix_crypt password "zN") 13 false


function embedded_configure c install
  arg_rw Data:Computer c ; arg CBool install
  var Str fullname := c:env:"pliant":"identity":"name"+"."+c:env:"pliant":"identity":"domain"
  var Str name := name 0 (name search "." name:len)
  var Str domain := fullname (fullname search "." fullname:len)+1 fullname:len
  var Str medium := c:env:"pliant":"system":"medium"
  var Stream s

  # /etc/mtab (OpenOffice workaround)
  plugin mtab
    (var Stream s) open "target:/etc/mtab" out+mkdir+safe
    s close

  # hosts
  plugin hosts
    (var Stream s) open "target:/etc/hosts" out+mkdir+safe
    s writeline "127.0.0.1 localhost"
    if c:env:"pliant":"dns":"service"<>"true"
      each host name_database:data:name
        var Str hfullname := keyof host
        var Str hname := hfullname 0 (hfullname search "." hfullname:len)
        var Str hdomain := hfullname (hfullname search "." hfullname:len)+1 hfullname:len
        if hdomain=domain
          s writeline (name_ip host:ip)+" "+keyof:host+" "+hname
        else
          s writeline (name_ip host:ip)+" "+keyof:host
    each printer c:env:"printer"
      var Str share := printer "share"
      while share<>""
        if not (share parse any:(var Str first) _ any:(var Str remain))
          first := share ; remain := ""
        if name_ip:first<>""
          s writeline name_ip:first+" "+first
        share := remain
    s close  
      
  # resolv.conf
  plugin dns
    (var Stream s) open "target:/etc/resolv.conf" out+mkdir+safe
    if c:env:"pliant":"dns":"service"="true"
      s writeline "nameserver 127.0.0.1"
      if c:env:"pliant":"dns":"cache"=""
        c "pliant" "dns" "cache" := "127.0.0.1"
    s close
    
  # timezone
  plugin timezone
    var Str timezone := c:env:"hardware":"clock":"timezone"
    if timezone<>""
      file_link "file:/usr/share/zoneinfo/"+timezone "target:/etc/localtime"
    s open "target:/etc/timezone" out+mkdir+safe
    s writeline (shunt timezone<>"" timezone "GMT")
    s close

  # /home/
  plugin home
    (var AsciiFile f) load "target:/etc/passwd"
    f set "root" ":" "root:*:0:0:root:/root:/bin/sh"
    unix_user "nobody" 65534 65534 f
    unix_user "me" 4096 100 f
    each u user
      if u:computer=fullname and u:uid=defined
        unix_user keyof:u u:uid 100 f
    f store

  # standard Unix print queues: now replaced by Pliant lpr service
  plugin lpr
    lpr_embedded_configure "target:/"
  if false
    s open "target:/etc/printcap" out+mkdir+safe
    (var Stream hosts) open "target:/etc/hosts.lpd" out+mkdir+safe
    hosts writeline "localhost"
    var Str default := ""
    each printer c:env:"printer"
      if default="" or printer:"default"="true"
        default := keyof printer
    each printer c:env:"printer"
      var Str device := printer "device"
      var Str rhost := printer "remote_host"
      var Str rqueue := printer "remote_queue"
      if (device parse any:(var Str queue0) "@"  any:(var Str host0))
        device := ""
        rhost := host0
        rqueue := queue0
      file_tree_create "target:/var/spool/"+keyof:printer+"/"
      s writeline (shunt keyof:printer=default "lp|" "")+keyof:printer+":\"
      s writeline "  :sd=/var/spool/"+keyof:printer+"/:\"
      if printer:"gs_driver"<>""
        s writeline "  :if=/var/spool/"+keyof:printer+"/filter:\" 
      if rhost<>""
        s writeline "  :rm="+rhost+":\"
        s writeline "  :rp="+rqueue+":\"
      s writeline "  :lp="+(shunt device<>"" file_os_name:device "/dev/null")+":\"
      s writeline "  :mx#0:\"
      s writeline "  :sh:"
      if printer:"gs_driver"<>""
        (var Stream filter) open "target:/var/spool/"+keyof:printer+"/filter" out+safe
        filter writeline "#!/bin/bash"  
        filter writeline "gs -q "+(shunt (printer:"gs_driver" 0 1)<>"@" "-sDEVICE=" "")+printer:"gs_driver"+" "+printer:"gs_options"+" -dSAFER -dNOPAUSE -sOutputFile=- - -c quit"
        filter close
        file_rights "target:/var/spool/"+keyof:printer+"/filter" undefined undefined 8^2+8+1 0
      var Str share := printer "share"
      while share<>""
        if not (share parse any:(var Str first) _ any:(var Str remain))
          first := share ; remain := ""
        hosts writeline first
        share := remain
    s close
      
  var Str xserver := c:env:"hardware":"video":"xfree86_server_name"
  var Str xfree3_exe := "XF86_"+upper:(xserver 0 1)+(xserver 1 xserver:len)
  var Str xdriver := c:env:"hardware":"video":"xfree86_driver"
  if xserver<>"" and (file_query "embedded:/usr/X11R6/bin/"+xfree3_exe standard)=success
    embedded_generate_x11_3 c
  eif xdriver<>"" and (file_query "embedded:/usr/X11R6/bin/XFree86" standard)=success
    embedded_generate_x11_4 c
  embedded_generate_fvwm2 c

  # pliant
  (var Stream script) open "/menu.page" out+safe
  script writeline "plugin menu"
  script writeline "  execute_dynamic_page [dq]/pliant/fullpliant/menu.html[dq]"
  script close
  file_delete "/fullpliant.page" # cleanup the past

  if not (this_computer:env:"pliant":"http":"port" parse (var Int port))
    port := 80
  var Str homepage := "http://localhost"+(shunt port<>80 ":"+string:port "")+"/menu.html"

  # xterm
  kernel_make_device "embedded:/dev/zero"
  file_rights "embedded:/dev/zero" undefined undefined 6*8+6 0
  kernel_make_device "embedded:/dev/console"
  kernel_make_device "embedded:/dev/tty"
  file_rights "embedded:/dev/tty" undefined undefined 6*8+6 0
  for (var Int i) 0 9
    kernel_make_device "embedded:/dev/tty"+string:i
    file_rights "embedded:/dev/tty"+string:i undefined undefined 6*8+6 0
  for (var Int i) 0 25
    for (var Int j) 0 15
      kernel_make_device "embedded:/dev/tty"+(character "a":number+i)+lower:(string j "radix 16")
      file_rights "embedded:/dev/tty"+(character "a":number+i)+lower:(string j "radix 16") undefined undefined 6*8+6 0
      kernel_make_device "embedded:/dev/pty"+(character "a":number+i)+lower:(string j "radix 16")
      file_rights "embedded:/dev/pty"+(character "a":number+i)+lower:(string j "radix 16") undefined undefined 6*8+6 0

  # ghostscript
  if (file_query "target:/usr/bin/gs" extended)=failure
    if (file_query "target:/usr/bin/gs-gnu" extended)=success
      file_link "file:/usr/bin/gs-gnu" "target:/usr/bin/gs"

  # netscape 4
  plugin netscape4
    (var AsciiFile pref) load "target:/home/me/.netscape/preferences.js"
    if pref:size>=2 and (pref:1 0 2)="//" # workaround for an old bug that corruped this file
      pref remove 0
    pref set "user_pref(" "[dq]browser.startup.homepage[dq]" "user_pref([dq]browser.startup.homepage[dq], [dq]"+homepage+"[dq]);"
    pref store

  # mozilla
  plugin mozilla
    (var AsciiFile pref) load "target:/home/me/.mozilla/Default User/23ja91l9.slt/prefs.js"
    pref set "user_pref(" "[dq]browser.startup.homepage[dq]" "user_pref([dq]browser.startup.homepage[dq], [dq]"+homepage+"[dq]);"
    pref set "user_pref(" "[dq]security.warn_submit_insecure[dq]" "user_pref([dq]security.warn_submit_insecure[dq], false);"
    var Str printers := ""
    each printer this_computer:env:"printer"
      printers += (shunt printers<>"" " " "")+keyof:printer
    if printers<>""
      pref set "user_pref(" "[dq]print.printer_list[dq]" "user_pref([dq]print.printer_list[dq], [dq]"+printers+"[dq]);"
    file_delete "target:/home/me/.mozilla/Default User/23ja91l9.slt/lock"
    pref store

  # phoenix
  plugin phoenix
    (var AsciiFile pref) load "target:/home/me/.phoenix/default/b108zr7b.slt/prefs.js"
    pref set "user_pref(" "[dq]browser.startup.homepage[dq]" "user_pref([dq]browser.startup.homepage[dq], [dq]"+homepage+"[dq]);"
    pref set "user_pref(" "[dq]security.warn_submit_insecure[dq]" "user_pref([dq]security.warn_submit_insecure[dq], false);"
    var Str printers := ""
    each printer this_computer:env:"printer"
      printers += (shunt printers<>"" " " "")+keyof:printer
    if printers<>""
      pref set "user_pref(" "[dq]print.printer_list[dq]" "user_pref([dq]print.printer_list[dq], [dq]"+printers+"[dq]);"
    file_delete "target:/home/me/.phoenix/default/b108zr7b.slt/lock"
    pref store

  # konqueror
  plugin konqueror
    (var AsciiFile pref) load "target:/home/me/.kde/share/config/konquerorrc"
    pref set "HomeURL" "=" "HomeURL="+homepage
    pref set "EnableJavaScript" "=" "EnableJavaScript=true"
    pref set "UnderlineLinks" "=" "UnderlineLinks=true"
    pref set "iso8859-1" "=" "iso8859-1=helvetica,fixed,times,helvetica,helvetica,helvetica,0"
    pref store
    (var AsciiFile pref) load "target:/home/me/.kde/share/config/kioslaverc"
    if (pref get "ResponseTimeout" "=")=""
      pref insert 0 "ResponseTimeout=604800"
    pref store

  # galeon
  plugin galeon
    (var Stream s) open "target:/home/me/.gconf/apps/galeon/Browsing/General/%gconf.xml" out+safe+mkdir
    s writeline "<?xml version=[dq]1.0[dq]?>"
    s writeline "<gconf>"
    s writeline "  <entry name=[dq]startpage[dq] mtime=[dq]1007556465[dq] muser=[dq]me[dq] type=[dq]string[dq]>"
    s writeline "    <stringvalue>"+homepage+"</stringvalue>"
    s writeline "  </entry>"
    s writeline "</gconf>"
    (var Stream s) open "target:/home/me/.gconf/apps/galeon/UI/Windows/%gconf.xml" out+safe+mkdir
    s writeline "<?xml version=[dq]1.0[dq]?>"
    s writeline "<gconf>"
    s writeline "  <entry name=[dq]show_bookmarks[dq] mtime=[dq]1007557715[dq] muser=[dq]me[dq] type=[dq]bool[dq] value=[dq]false[dq]/>"
    s writeline "</gconf>"
    s close

  # kate
  plugin kate
    (var AsciiFile pref) load "target:/home/me/.kde/share/config/katerc"
    pref set "Font" "=" "Font=lucidatypewriter,12,2,0,50,0"
    pref set "TabWidth" "=" "TabWidth=2"
    pref set "ConfigFlags" "=" "ConfigFlags=15385651"
    pref store

  # xbiff2
  plugin xbiff2
    if c:env:"pliant":"mail":"pop3_provider"<>""
      (var AsciiFile rc) load "target:/home/me/.xbiff2rc"
      rc set "set Config(popserver)" "{" "set Config(popserver) {"+c:env:"pliant":"mail":"pop3_provider"+"}"
      rc set "set Config(poplogin)" "{" "set Config(poplogin) {"+c:env:"pliant":"mail":"pop3_user"+"}"
      rc set "set Config(poppasswd)" "{" "set Config(poppasswd) {"+c:env:"pliant":"mail":"pop3_password"+"}"
      rc store

  safe
    plugin configure
  failure err
    (var Stream log) open "file:/tmp/embedded_configure.log" out+safe
    log writeline err

export embedded_configure