From Wiki96
Jump to: navigation, search
m (→‎Usage: updating to wrtrun bin)
(Added the Module Part)
Line 34: Line 34:
//!wrt $BSPEC:{"icn":"apps/explorer","cpr":"Copyright (C) Windows 96 Team 2021.","dsc":"System File Explorer","frn":"Explorer","ver":1}
//!wrt $BSPEC:{"icn":"apps/explorer","cpr":"Copyright (C) Windows 96 Team 2021.","dsc":"System File Explorer","frn":"Explorer","ver":1}
</syntaxhighlight>
</syntaxhighlight>
== Modules ==
A module is a file called by a script in the WRT. Those files will also run in WRT and will have access to WRT features. In addition to this, modules can export data that can be used in other scripts and modules. A module can be called with the <code>include</code> function. It returns a Promise with the module exports.
The <code>include</code> function will returns:
* The <code>module.exports</code> of a JavaScript file.
* The parsed content of a JSON file.
* The raw content of any other file type.
=== Global Modules ===
Modules can also be global by declaring a JSON manifest in <code>C:/system/local/lib/modules</code> in the following format: <code>MODULE.json</code> where <code>MODULE</code> is the name of the module when including it. The content of this file should look like this:<syntaxhighlight lang="json" line="1" start="-2">
{
    "libPath": "C:/path/to/module.js"
}
</syntaxhighlight>Then, the module can be accessed from any file by doing <code>include("MODULE")</code>.

Revision as of 21:38, 12 July 2023

Win96 Run Time, sometimes abbreviated as WRT, is the runtime behind the Windows 96 binaries.

Features

A script executed with the WRT will behave differently than a normal script. Firstly, this script will be able to use FS, FSUtil, WApplication, StandardWindow, registerApp and deregisterApp without having to use the w96 namespace before. these script will also be able to use the WRT module API where the module object is available for exporting data and include for getting module exported data. Scripts executed with the WRT will also be executed in an asyncronous context, so it is possible to use top-level await.

Usage

To execute a script using the WRT, there are 2 options:

  • Start the script with the following shebang: //!wrt
  • Run the wrtrun command with the path to the script

History

The Windows Runtime was introduced in Windows 96 v2 Service Pack 2.

"A set of APIs which allow you to easily make apps and include modules, without worrying about the filesystem and stuff like that." Windows 96 devs in the rel2sp2 changelog.

Shebang

The shebang is the first line of a binary. The WRT shebang starts with //!wrt. The shebang denotes that this regular file is a WRT bin, and must be the very first line in any WRT application.

The binary specification (BSPEC)

The binary specification (BSPEC) is a way to describe metadata for a WRT bin. It always follows the shebang on the same line, where the cumulative line size must not exceed 256 characters.

The BSPEC is a simple JSON object prefixed with $BSPEC: and contains the following fields:

  • icn - The name of the icon to use.
  • cpr - The copyright holder of the application.
  • dsc - A basic description of the application.
  • frn - The display name of the application.
  • aut - The application author.
  • ssy - The subsystem to use for this application. Can either be gui or cli.
  • ver - The version of the application.

Below is an example of a binary specification declaration for the File Explorer application.

//!wrt $BSPEC:{"icn":"apps/explorer","cpr":"Copyright (C) Windows 96 Team 2021.","dsc":"System File Explorer","frn":"Explorer","ver":1}

Modules

A module is a file called by a script in the WRT. Those files will also run in WRT and will have access to WRT features. In addition to this, modules can export data that can be used in other scripts and modules. A module can be called with the include function. It returns a Promise with the module exports.

The include function will returns:

  • The module.exports of a JavaScript file.
  • The parsed content of a JSON file.
  • The raw content of any other file type.

Global Modules

Modules can also be global by declaring a JSON manifest in C:/system/local/lib/modules in the following format: MODULE.json where MODULE is the name of the module when including it. The content of this file should look like this:

{
    "libPath": "C:/path/to/module.js"
}

Then, the module can be accessed from any file by doing include("MODULE").