12
System API
IgorTimofeev edited this page 2019-01-24 16:33:16 +03:00
This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This library is the core of the operating system and allows you to manage it at a basic level. Below are only the most necessary methods due to my laziness to create documentation, however, those that are available will be quite enough for most developers.

Contents
Auxiliary methods
system.getTime
system.getCurrentScript
system.getTemporaryPath
system.parseArguments
Shortcuts
system.createShortcut
system.readShortcut
Users
system.getUser
system.saveUserSettings
system.getUserSettings
system.authorize
Localizations
system.getLocalization
system.getCurrentScriptLocalization
system.getSystemLocalization
Graphical interface
system.getWorkspace
system.addWindow
Launching functions and files
system.call
system.error
system.execute
How to develop MineOS applications?

Auxiliary methods

system.getTime(): float timestamp

Returns real world Unix timestamp of current system using timezone defined in user properties.

os.date("%d %b %Y %H:%M:%S", system.getTime())
> 13 Jan 2019 05:10:32

system.getCurrentScript(): string path

Returns path to currently running script. For example, if you create file named /MineOS/Scripts/Test.lua and call this function from it, the following string will be returned:

> /MineOS/Scripts/Test.lua

system.getTemporaryPath(): string path

Returns temporary directory with random name. It will be erased on next MineOS boot.

system.parseArguments(...): table arguments, table options

Method for programs to parse their arguments. Returns two tables, the first one containing all incoming arguments, the second containing options. Options must be indicated by a leading -, and all options must only be a single character, since multiple characters following a single - will be interpreted as multiple options. Options specified with 2 dashes are not split and can have multiple letters. Also, 2-dash options can be given values by using an equal sign. The following example will show how this function works:

system.parseArguments("meow", "-purr", "--purr", "--meow=purr", "-meow=purr")
> {
    "meow"
  },
  {
    "p"
    "u"
    "r"
    "purrr"
    meow = "purr",
    "m"
    "e"
    "o"
    "w"
    "="
  }

Shortcuts

system.createShortcut(string wherePath, string forWhatPath)

Creates an shortcut with .lnk extension by given where path. Shortcut points to a file or directory located on given forWhat path.

system.createShortcut(
	"/MineOS/Users/MyName/Desktop/MyShortcut",
	"/MineOS/Pictures/Dick.pic"
)

system.readShortcut(string shortcutPath): string targetPath

Reads shortcut located by given shortcutPath and returns a string targetPath it points to:

system.readShortcut("/MineOS/Users/MyName/Desktop/MyShortcut.lnk")
> "/MineOS/Pictures/Dick.pic"

Users

system.getUser(): string username

Returns currently logged in user name.

system.getUser()
> Herobrine1488

system.saveUserSettings()

Writes currently logged in user settings table to a %user_path%/Settings.cfg file.

system.getUserSettings(): table settings

Returns currently logged in user settings table. You can change it's keys and values whatever you want and call system.saveUserSettings() method.

local settings = system.getUserSettings()

settings.interfaceWallpaperPath = "/Dick.pic"
settings.localizationLanguage = "Russian"

system.saveUserSettings()

system.authorize()

Moves user to authorization interface stage:

Localizations

system.getLocalization(string path): table localization

Searches for files with .lang extension in directory by given path and returns an deserialized table. Priority is given to the language that is set in currently logged in user properties. If required language is not found, this function tries to load English.lang file. If it is not found, function tries to load the first available file. If the directory by given path is empty, an error occurs.

system.getLocalization("/Robot.app/Localizations/")
> {
    greeting = "Hello",
    robot = "This is my robot"
  }

system.getCurrentScriptLocalization(): table localization

Works the same way as system.getLocalization() does, but automatically searches for appropriate localization file in Localizations/ directory located near currently running script:

Sample.app/
	Main.lua
	Localizations/
		English.lang
		Russian.lang

system.getSystemLocalization(): table localization

Returns currently logged in user system localization table.

Graphical interface

system.getWorkspace(): table workspace

Returns pointer to main GUI.workspace object that is currently being used by MineOS. This workspace contains every OS visual element: top menu object, windows container, dock widget, icon field, icons, etc.

system.addWindow(table window[, boolean keepCoordinates]): table workspace, table window, table menu

Adds instance of GUI.window object to MineOS windows container, adds corresponding icon to dock and adds window menu data. If keepCoordinates argument is set, window coordinates will be kept, otherwise window will be centered. Returns pointer to main system GUI.workspace object, a pointer to given window object and a pointer to system GUI.menu object:

-- Import libraries
local GUI = require("GUI")
local system = require("System")

---------------------------------------------------------------------------------

-- Add a new window to MineOS workspace
local workspace, window, menu = system.addWindow(GUI.filledWindow(1, 1, 60, 20, 0xE1E1E1))

-- Add single cell layout to window
local layout = window:addChild(GUI.layout(1, 1, window.width, window.height, 1, 1))

-- Add nice gray text object to layout
layout:addChild(GUI.text(1, 1, 0x4B4B4B, "Hello, " .. system.getUser()))

-- Customize MineOS menu for this application by your will
local contextMenu = menu:addContextMenuItem("File")
contextMenu:addItem("New")
contextMenu:addSeparator()
contextMenu:addItem("Open")
contextMenu:addItem("Save", true)
contextMenu:addItem("Save as")
contextMenu:addSeparator()
contextMenu:addItem("Close").onTouch = function()
	window:remove()
end

-- You can also add items without context menu
menu:addItem("Example item").onTouch = function()
	GUI.alert("It works!")
end

-- Create callback function with resizing rules when window changes its' size
window.onResize = function(newWidth, newHeight)
  window.backgroundPanel.width, window.backgroundPanel.height = newWidth, newHeight
  layout.width, layout.height = newWidth, newHeight
end

---------------------------------------------------------------------------------

-- Draw changes on screen after customizing your window
workspace:draw()

Result:

Launching functions and files

system.call(function f, varargs ...): boolean success, string errorPath, int errorLine, string traceback

Safely calls given function and passes every given argument to it. Returns boolean success of calling, string path to file where error got caught, integer error line of this file and detailed string stack traceback.

For example, here is Test.lua file:

local function f(senpaiName)
	error("I'm no nasty error... Spank me, senpai " .. senpaiName)
end

system.call(f, "Computrix")
> false, "/Test.lua", 2, stdin:1: I'm no nasty error... Spank me, senpai Computrix
stack traceback:
[C]: in function 'error'
stdin:1: in function 'f'
(...tail calls...)
[C]: in ?

system.error(string path, int errorLine, string traceback)

Shows error window over MineOS workspace with source code of file by given path, with highlighted errorLine and detailed stack traceback:

system.error("/Test.lua", 2, [[stdin:1: I'm no nasty error... Spank me, senpai Computrix
stack traceback:
[C]: in function 'error'
stdin:1: in function 'f'
(...tail calls...)
[C]: in ?]]
)

system.execute(string path, varargs ...)

Safely launches a file from given path and passes given arguments to it. If some error occurs during execution, shows an error window in MineOS workspace. In fact, this method just applies system.call() and system.error() by automatic way:

system.execute("/Test.lua")

How to develop MineOS applications?

Every MineOS application is a directory with .app extension, which has the following contents:

2019-01-08 11 03 18

The Main.lua file is launched on application start, and Icon.pic is used to display application icon. Application directory is very convenient to store some resources: localization files, images, configs, etc.

You can click on the corresponding option in the context menu to create sample application:

2019-01-08 11 31 24

When application directory is created, it's a good time to read wiki of how to use system APIs. You can instantly edit Main.lua file to do some source code changes:

2019-01-08 11 19 32

2019-01-08 11 17 46

2019-01-08 11 15 53