loader.lua — Fx
    Lua loader module
The built-in Lua bindings for the FreeBSD
    boot loaders using the Lua interpreter are available via the
    loader table.
The loader table is always available in
    Lua scripts. There is no need to require it like other loader-specific
    modules.
The following variables are exported from in the
    loader table:
  machine 
  - The target's hw.machine sysctl(8)
      value.
 
  machine_arch 
  - The target's hw.machine_arch
      sysctl(8) value. Some boot loaders are 32-bit
      applications that then load a 64-bit kernel. In these cases,
      
machine_arch represents the 32-bit architecture,
      not the 64-bit architecture. 
  lua_path 
  - The current lua loading path.
 
  version 
  - The version of the boot program.
 
The following functions are exported in the
    loader table.
  delay(usec) 
  - Delay for usec microseconds.
 
  command_error() 
  - Returns the error string from the last command to fail.
 
  command(argc,
    argv) 
  - Like
      
perform()
      but the arguments are already parsed onto the stack. 
  interpret(str) 
  - Execute the loader builtin command str as if it were
      typed by the user. This will first try to execute
      str as Lua. If that fails, it will attempt to
      execute it as a cli command, including those defined by the
      cli.lua(8) mechanism. If that fails, it will attempt to
      execute it as a builtin command and return the same values as
      
perform(). 
  parse(str) 
  - Parses the command str into its words and return
      those words on the stack.
 
  getenv(name) 
  - Obtains the value of the environment variable
    name.
 
  has_command(cmd) 
  - returns true if commmand is
      present in the interpreter as a builtin. Otherwise it returns
      nil and an error string. It does not check the
      “cli” table to see if a user defined command has been
      created.
 
  has_feature(feature) 
  - returns true if the feature is
      enabled. Otherwise it returns nil and an error
      string.
 
  perform(str) 
  - Execute the loader builtin command str. Returns the
      result of the command, one of the following values:
    
    
      - loader.CMD_OK
 
      - The command completed successfully.
 
      - loader.CMD_WARN
 
      - The command was successful, but the user stopped its output
          prematurely.
 
      - loader.CMD_ERROR
 
      - The command did not complete successfully. Use
          command_error to retrieve the error.
 
      - loader.CMD_CRIT
 
      - The command returned a critical error that was already printed.
 
      - loader.CMD_FATAL
 
      - The command determined continuation was not possible and the loader
          panicked. In practice, though
          
panic()
          does not return. 
    
     
   
  printc(str) 
  - Outputs the string using the loader's
      
putchar()
      function. This function is also available globally as
      printc(). 
  setenv(name,
    value) 
  - Insert or reset the environment variable name into
      the loader's environment list. If no environment variable with this name
      exists, one is created. If one exists, its value is replaced and any
      change callback function registers at creation is called.
 
  time() 
  - Returns the loader's notion of time, in seconds since 1970. The value of
      loader's notion varies somewhat between different loading
    environments.
 
  unsetenv(name) 
  - Removes the environment variable name from the
      loader's environment list.
 
  fb_bezier(x0,
    y0, x1,
    y1, x2,
    y2, width) 
  - Draw a bezier curve through the points (x0,
      y0), (x1,
      y1), and (x1,
      y1) of width width.
 
  fb_drawrect(x0,
    y0, x1,
    y1, fill) 
  - Fill in a rectangle with the pixel fill with the
      corners (x0, y0) and
      (x1, y1).
 
  fb_line(x0,
    y0, x1,
    y1, width) 
  - Draw a line from (x0, y0) to
      (x1, y1) with a width of
      width.
 
  fb_putimage(name,
    x1, y1,
    x2, y2,
    f) 
  - Load the PNG file name and place it in the rectangle
      with the corners (x1, y1) and
      (x2, y2) and fill with pixel
      f.
 
  fb_set_pixel(x,
    y) 
  - Sets the pixel at (x, y).
 
  term_drawrect(x0,
    y0, x1,
    y1) 
  - Draw the outline of a rectangle with the text coordinate corners of
      (x0, y0) and
      (x1, y1).
 
  term_putimage(name,
    x1, y1,
    x2, y2,
    f) 
  - Load the PNG file name and place it in the rectangle
      with the text coordinate corners (x1,
      y1) and (x2,
      y2) and fill with pixel
    f.
 
The functions starting with
    fb_() and
    term_()
    are optional. They should only be used if they are non-nil and if
    core.isFramebufferConsole()
    is true.
In addition, the Lua interpreters start with the file
    /boot/lua/loader.lua when they start to boot the
    system. The default one will fixup the screen, load the configuration files,
    check for a password, and then load the menu or load the kernel file and
    then return. If autoboot is enabled, the loaded files will boot.
command() and
    perform() should return a tuple when there's
    CMD_ERROR or worse..