# pcb-rnd scripting - Rosetta

The Rosetta Stone of pcb-rnd scripting is a collection of example scripts implemented in various scripting languages. Rosetta has multiple purposes:

- to provide examples of using the pcb-rnd API;
- to not scare away newcomers by showing the first examples in an unfamiliar language;
- to help the user to decide which language to use for a specific task;
- to provide examples on how to convert idioms of pcb-rnd scripts from one language to another.

Each example comes with an explanation, written in plain English about what the scripts do, step by step. Instead of trying to exploit powerful features of the language, example implementations try to be simple.

The list below is ordered from the least complex to the most complex examples. Column lvl is the complexity score. The less the score is, the simpler the example is.

## Index of examples

lvl | example | languages | description
--- | --- | --- | ---
10 | hello world (text, log) | awk fl js lua perl python ruby sh stutter tcl | Create a new action hello() that prints "Hello world!" in the message log.
11 | hello world (menu, log) | awk lua python tcl | Create a new menu + action hello() that prints "Hello world!" in the message log.
12 | hello world (GUI) | awk lua perl python tcl | Create a new action hello() that prints "Hello world!" in a modal dialog box using DAD.
13 | hello world (GUI, with vbox) | awk lua perl python tcl | Create a new action hello() that prints "Hello world!" in vertical layout in a dialog box.
21 | timers | awk lua perl python tcl | Create timers that are going to call back an action in the background.
72 | unit converter (GUI, interactive) | awk lua tcl | Interactive unit converter in a dialog, created via dad().
81 | script state persistency (load/unload/reload) | awk lua | Counts how many times the script was loaded, in a persistent on-disk counter.