Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
457b238
Refactoring of command code to separate the main code from each of th…
Steve-the-wonder-dog Aug 25, 2020
f95184d
Updated version of refactored code with addition of documentation and…
Steve-the-wonder-dog Aug 27, 2020
268f2f3
Fix an ugly cut and paste error in the documentation
Steve-the-wonder-dog Aug 29, 2020
f8f928c
Minor changes and documentation:
Steve-the-wonder-dog Aug 29, 2020
f3d5801
Added a new command RPN_EVAL. This allows RPN expressions to be eval…
Steve-the-wonder-dog Sep 1, 2020
ba40877
Significant modifications to the RPN_EVAL command.
Steve-the-wonder-dog Sep 4, 2020
2ca6d0e
Improvements to RPN_EVAL
Steve-the-wonder-dog Sep 4, 2020
f768b7a
Useful implementation of local and global variables for the RPN_EVAL …
Steve-the-wonder-dog Sep 5, 2020
cf99b9e
RPN_EVAL upgrades as promised
Steve-the-wonder-dog Sep 6, 2020
9aaf1c1
Bug preventing scripts from being validated fixed.
Steve-the-wonder-dog Sep 6, 2020
d443439
Added line numbers to reporting of goings-on within LPHK
Steve-the-wonder-dog Sep 6, 2020
68ec660
Variables for mouse commands
Steve-the-wonder-dog Sep 6, 2020
53aa082
How to add commands
Steve-the-wonder-dog Sep 7, 2020
850cbc1
A far more robust implementation of variables for the Mouse commands.
Steve-the-wonder-dog Sep 7, 2020
11df3cf
More refactoring to simplify the creation of new functions
Steve-the-wonder-dog Sep 9, 2020
e41c5e1
Improved documentation for creating new commands.
Steve-the-wonder-dog Sep 10, 2020
822d941
Significant improvements in internal documentation and consistency, b…
Steve-the-wonder-dog Sep 13, 2020
95b6500
Completed refactoring of flow control commands including the creation…
Steve-the-wonder-dog Sep 16, 2020
1340b52
Continues bug fixes/conversion of commands to latest structure
Steve-the-wonder-dog Sep 19, 2020
55818fa
Refactoring to pass the button object rather than information about t…
Steve-the-wonder-dog Sep 20, 2020
eb994e5
* Complete conversion of btn.Line[x] to btn.Line(x)
Steve-the-wonder-dog Feb 11, 2021
0b0d705
* Created new parameter type (PT_VAR) to allow variable names to be p…
Steve-the-wonder-dog Feb 12, 2021
47116b8
Oops, also some changes to the rpncalc module (described in the last …
Steve-the-wonder-dog Feb 12, 2021
cf6b4f0
Remove some validations for the mouse commands because negative coord…
Steve-the-wonder-dog Feb 14, 2021
b3ec50e
* allow a simpler method of counting parameters, getting and setting …
Steve-the-wonder-dog Feb 14, 2021
c943251
* basic update for keys functions, but more to do
Steve-the-wonder-dog Feb 14, 2021
b34610b
* Fixed error preventing layouts from being saved
Steve-the-wonder-dog Feb 17, 2021
225938c
Preliminary changes leading to the Variable column allowing 3 values …
Steve-the-wonder-dog Feb 17, 2021
3b951f5
* add untested code to allow command removal (i.e. un-registering)
Steve-the-wonder-dog Feb 17, 2021
3c09c39
* New command module for screen scraping. Initial command does OCR o…
Steve-the-wonder-dog Feb 17, 2021
6992e78
Multiple fixes to command_scrape
Steve-the-wonder-dog Feb 17, 2021
e6aa5ad
* Change to argparse to better handle command line parameters
Steve-the-wonder-dog Feb 18, 2021
ca71833
* a few minor documentation fixes
Steve-the-wonder-dog Feb 18, 2021
cd16831
* change S_OCR_FORM_TEXT to S_OCR
Steve-the-wonder-dog Feb 18, 2021
ff83025
* Command list documentation upgrade
Steve-the-wonder-dog Feb 18, 2021
4f74e00
Modifications made to move the specification of the requirement for a…
Steve-the-wonder-dog Feb 18, 2021
cf42a80
Updated "NewCommands" describing the simplest way to add more commands
Steve-the-wonder-dog Feb 18, 2021
56bd596
* Several bug fixes
Steve-the-wonder-dog Feb 19, 2021
7b9ff51
* "Pass number" line only printed if there is an error
Steve-the-wonder-dog Feb 21, 2021
2e98c34
* Bug introduced while checking in squashed :-o
Steve-the-wonder-dog Feb 21, 2021
8035898
* Slight modification to command_list to tell us why a module can't b…
Steve-the-wonder-dog Feb 22, 2021
51fe6bf
* A little more internal documentation for kb.py, lp_colors.py, and l…
Steve-the-wonder-dog Feb 23, 2021
3bac574
* lots of internal documentation improved
Steve-the-wonder-dog Feb 24, 2021
1cb24de
Merge with "develop" branch of main repo (thanks duncte123)
Steve-the-wonder-dog Mar 5, 2021
66392dd
* Accepted recommended change by duncte123
Steve-the-wonder-dog Mar 5, 2021
b89aaf8
ALPHA version of subroutine code. Still has many problems (real and …
Steve-the-wonder-dog Mar 5, 2021
6cc1149
This version has badly broken variables due to changes made for subro…
Steve-the-wonder-dog Mar 8, 2021
107303b
* Better handling of the conversion routines
Steve-the-wonder-dog Mar 8, 2021
c497ab2
Further work on standalone mode, and on correcting parameter passing.…
Steve-the-wonder-dog Mar 9, 2021
03e96d2
Lots of bug fixes, but debug code remains (although largely commented…
Steve-the-wonder-dog Mar 10, 2021
779fb23
More bugs fixed, and the start of dialogs
Steve-the-wonder-dog Mar 10, 2021
b11875d
Modifications to improve documentation
Steve-the-wonder-dog Mar 11, 2021
3f2742b
Merge remote-tracking branch 'origin/develop' into master
Steve-the-wonder-dog Mar 11, 2021
33c5c7c
* Improved documentation
Steve-the-wonder-dog Mar 11, 2021
2472f85
Some tidying up of code, improvements to documentation, and work on t…
Steve-the-wonder-dog Mar 11, 2021
119c96c
Fixed parameter passing, Form on screen has same colours as Launchpad…
Steve-the-wonder-dog Mar 13, 2021
6ae9286
Main improvement is the display of text on buttons provided by the @N…
Steve-the-wonder-dog Mar 13, 2021
bb8e066
Improvements to button text
Steve-the-wonder-dog Mar 13, 2021
47cdfed
A pretty rugged workable version that has sufficient functionality fo…
Steve-the-wonder-dog Mar 13, 2021
a24ac5b
The run script and the layout I have built up for testing.
Steve-the-wonder-dog Mar 13, 2021
18cadc4
Merge remote-tracking branch 'origin/develop' into master
Steve-the-wonder-dog Mar 13, 2021
69db3ec
Merge branch 'master' into master
Steve-the-wonder-dog Mar 13, 2021
1fea76f
Merge branch 'develop' of https://github.com/nimaid/LPHK into master
Steve-the-wonder-dog Mar 14, 2021
c4c5210
Significant modifications and bug-fixes whilst using LPHK today. Apa…
Steve-the-wonder-dog Mar 15, 2021
340a747
I hope this merge will be the last...
Steve-the-wonder-dog Mar 15, 2021
5b0bd2f
Merge branch 'develop' of https://github.com/Steve-the-wonder-dog/LPH…
Steve-the-wonder-dog Mar 15, 2021
88379a2
Oopsie
Steve-the-wonder-dog Mar 15, 2021
7dd7714
More bugs squashed, more documentation, and more commands
Steve-the-wonder-dog Mar 16, 2021
080b78c
Don't you hate it when you forget to save. Just a small amount of in…
Steve-the-wonder-dog Mar 16, 2021
1a5fc36
Another day another check in. Today was all about web automation, th…
Steve-the-wonder-dog Mar 17, 2021
2ba338b
More documentation and bug fixes than new functionality this time.
Steve-the-wonder-dog Mar 18, 2021
b3c57a0
Mostly bug fixes. This includes adding functionality to ensure subro…
Steve-the-wonder-dog Mar 19, 2021
1802032
Minor fixes
Steve-the-wonder-dog Mar 22, 2021
89d3d2a
Documentation, preparation to remove "test" commands, and some functi…
Steve-the-wonder-dog Mar 26, 2021
e559585
Mostly bug fixes (kinda)
Steve-the-wonder-dog Mar 31, 2021
12aa79e
Oopsie in the install files
Steve-the-wonder-dog Apr 6, 2021
e6a6877
Way better documentation. Also notification of deprecated commands
Steve-the-wonder-dog Apr 12, 2021
f4829aa
A major bug fix and more documentation
Steve-the-wonder-dog Apr 13, 2021
0c0170b
Update to make -f the default (also to remove the -f option)
Steve-the-wonder-dog Apr 14, 2021
6b54798
Brought up-to-date with nimaid/LPHK Dev
Steve-the-wonder-dog Apr 14, 2021
4814416
More changes based on comments in pull request
Steve-the-wonder-dog Apr 14, 2021
c462c1e
Deprecating the @Load_Layout header in exchange for adding new comman…
Steve-the-wonder-dog Apr 16, 2021
43c3467
Minor additions and bug fixes
Steve-the-wonder-dog May 1, 2021
3494ebb
Added the very obviously missing command to place the contents of a v…
Steve-the-wonder-dog May 9, 2021
9baae68
Faster loading for layouts. If layouts have a lot of subroutines, or…
Steve-the-wonder-dog Jun 10, 2021
da20398
Adding a new header command for scripts to set the default colour of …
Steve-the-wonder-dog Jun 11, 2021
42e6831
Oops, forgot to include the slightly modified lp_colors.py
Steve-the-wonder-dog Jun 11, 2021
75f363d
Bug fixes and improvements to command interfaces
Steve-the-wonder-dog Jun 27, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion INSTALL/environment-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ dependencies:
- pip
- tk
- pip:
- git+git://github.com/FMMT666/launchpad.py.git@master
- pillow
- pygame
- pynput
Expand All @@ -18,3 +17,8 @@ dependencies:
- pytesseract
- imagehash
- dhash
- selenium
- pyperclip
- python-dateutil
- launchpad-py
- launchpad
6 changes: 5 additions & 1 deletion INSTALL/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ dependencies:
- pip
- tk
- pip:
- git+git://github.com/FMMT666/launchpad.py.git@master
- pillow
- pygame
- pynput
Expand All @@ -17,3 +16,8 @@ dependencies:
- pytesseract
- imagehash
- dhash
- selenium
- pyperclip
- python-dateutil
- launchpad-py
- launchpad
6 changes: 5 additions & 1 deletion INSTALL/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,8 @@ pywin32==227
pytesseract==0.3.7
ImageHash==4.2.0
dhash==1.3
-e git+git://github.com/FMMT666/launchpad.py.git@master#egg=launchpad-py
selenium==3.141.0
pyperclip==1.8.0
python-dateutil==2.8.1
launchpad-py
launchpad
70 changes: 50 additions & 20 deletions LPHK.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import sys, os, subprocess, argparse
import sys, os, subprocess, argparse, global_vars
from datetime import datetime
from constants import *

Expand All @@ -10,7 +10,7 @@
if getattr(sys, 'frozen', False):
IS_EXE = True
PROG_FILE = sys.executable
PROG_PATH = os.path.dirname(PROG_FILE)
PROG_PATH = os.path.dirname(PROG_FILE)
PATH = sys._MEIPASS
else:
IS_EXE = False
Expand Down Expand Up @@ -65,10 +65,10 @@ def datetime_str():

# Try to import launchpad.py
try:
import launchpad_py as launchpad
import launchpad_py as launchpad_real
except ImportError:
try:
import launchpad
import launchpad as launchpad_real
except ImportError:
sys.exit("[LPHK] Error loading launchpad.py")
print("")
Expand All @@ -79,7 +79,17 @@ def datetime_str():
# just import the control modules to automatically integrate them
import command_list

lp = launchpad.Launchpad()

# create a launchpad object, either real or fake
def Launchpad():
if window.IsStandalone():
import launchpad_fake
return launchpad_fake.launchpad
else:
return launchpad_real.Launchpad()


LP = None

EXIT_ON_WINDOW_CLOSE = True

Expand All @@ -88,51 +98,71 @@ def init():

ap = argparse.ArgumentParser() # argparse makes argument processing easy
ap.add_argument( # reimnplementation of debug (-d or --debug)
"-d", "--debug",
help = "turn on debugging mode", action="store_true")
ap.add_argument( # new option to automatically load a layout
"-l", "--layout",
help = "load a layout",
"-d", "--debug",
help = "Turn on debugging mode", action="store_true")
ap.add_argument( # option to automatically load a layout
"-l", "--layout",
help = "Load an initial layout",
type=argparse.FileType('r'))
ap.add_argument( # new option to start minimised
"-m", "--minimised",
ap.add_argument( # option to start minimised
"-m", "--minimised",
help = "Start the application minimised", action="store_true")

window.ARGS = vars(ap.parse_args()) # store the arguments in a place anything can get to

if window.ARGS['debug']:
ap.add_argument( # option to start without connecting to a Launchpad
"-s", "--standalone",
help = "Operate without connection to Launchpad", type=str, choices=[LP_MK1, LP_MK2, LP_MINI, LP_PRO])
ap.add_argument( # option to start with launchpad window in a particular mode
"-M", "--mode",
help = "Launchpad mode", type=str, choices=[LM_EDIT, LM_MOVE, LM_SWAP, LM_COPY, LM_DEL, LM_RUN], default=LM_EDIT)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What exactly does this do?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It starts the program in the specified mode. The default is starting it up in edit mode, so that clicking on a button will start the editor. However, if you're operating without a launchpad, it makes more sense to start in run mode, so that clicking on a button will execute the macro. I always start mine in run mode now. The other modes are there just so you can chose one of them if you have a reason to,

ap.add_argument( # turn of unnecessary verbosity
"-q", "--quiet",
help = "Disable information popups", action="store_true")

global_vars.ARGS = vars(ap.parse_args()) # store the arguments in a place anything can get to

if global_vars.ARGS['debug']:
EXIT_ON_WINDOW_CLOSE = False
print("[LPHK] Debugging mode active! Will not shut down on window close.")
print("[LPHK] Run shutdown() to manually close the program correctly.")

files.init(USER_PATH)
sound.init(USER_PATH)

global LP
LP = Launchpad()

def shutdown():
if lp_events.timer != None: # cancel any outstanding events
lp_events.timer.cancel()

scripts.to_run = [] # remove anything from the list of scripts scheduled to run

for x in range(9):
for y in range(9):
if scripts.buttons[x][y].thread != None:
scripts.buttons[x][y].thread.kill.set() # request to kill any running threads
if window.lp_connected:

if window.lp_connected or window.IsStandalone:
scripts.Unbind_all() # unbind all the buttons
lp_events.timer.cancel() # cancel all the timers
launchpad_connector.disconnect(lp) # disconnect from the launchpad
if LP != None and LP != -1:
launchpad_connector.disconnect(LP) # disconnect from the launchpad
window.lp_connected = False

logger.stop() # stop logging

if window.restart:
window.restart = False # don't do this forever
if IS_EXE:
os.startfile(sys.argv[0])
else:
os.execv(sys.executable, ["\"" + sys.executable + "\""] + sys.argv)

sys.exit("[LPHK] Shutting down...")


def main():
init()
window.init(lp, launchpad, PATH, PROG_PATH, USER_PATH, VERSION, PLATFORM)
window.init(LP, PATH, PROG_PATH, USER_PATH, VERSION, PLATFORM)
if EXIT_ON_WINDOW_CLOSE:
shutdown()

Expand Down
18 changes: 13 additions & 5 deletions NewCommands.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ This has a shorter list of requirements, but it's more coding, and requires more
* Required basic understanding of stages of execution of a command


#### An example - Decoding an old version of the MOUSE_SCROLL command
#### An example - Decoding S_FDIST command

The `S_FDIST` command looks like this:
```python
Expand All @@ -69,7 +69,7 @@ class Scrape_Fingerprint_Distance(command_base.Command_Basic):
self,
):

super().__init__("S_FDIST", # the name of the command as you have to enter it in the code
super().__init__("S_FDIST, Calculate the distance between 2 fingerprints",
LIB,
(
# Desc Opt Var type p1_val p2_val
Expand All @@ -82,6 +82,10 @@ class Scrape_Fingerprint_Distance(command_base.Command_Basic):
(3, " Return the hamming distance between fingerprints {1} and {2} into {3}"),
) )

self.doc = ["This command calculates the hamming distance between 2 fingerprints.", \
"This can be used to determine how similar 2 images are. The larger", \
"the hamming distance, the more different the images are."]


def Process(self, btn, idx, split_line):
f1 = self.Get_param(btn, 1) # get the fingerprints
Expand Down Expand Up @@ -130,7 +134,7 @@ The initialization of a command class serves to define the name of the command.
self,
):

super().__init__("S_FDIST", # the name of the command as you have to enter it in the code
super().__init__("S_FDIST, Calculate the distance between 2 fingerprints",
LIB,
(
# Desc Opt Var type p1_val p2_val
Expand All @@ -142,9 +146,13 @@ The initialization of a command class serves to define the name of the command.
# num params, format string (trailing comma is important)
(3, " Return the hamming distance between fingerprints {1} and {2} into {3}"),
) )

self.doc = ["This command calculates the hamming distance between 2 fingerprints.", \
"This can be used to determine how similar 2 images are. The larger", \
"the hamming distance, the more different the images are."]
```

The 5th line defines the name of the command. Note that command names are case sensitive, so the name should be in all uppercase to be consistent.
The 5th line defines the name of the command. Note that command names are case sensitive, so the name should be in all uppercase to be consistent. The name can be optionally followed by a comma and a description of the command. This description is used as part of the auto-documentation of commands

Line 6 passes the name of the current library (lib) to the the object. The current library will be used to define where the command originates from in some of the low level reporting functions.

Expand Down Expand Up @@ -644,7 +652,7 @@ Every command requires a validation. If you do not provide validation code, the

try:
temp = int(split_line[1])
if valid_var_name(temp):
if variables.valid_var_name(temp):

if temp < 1:
return ("Line:" + str(idx+1) + " - '" + split_line[0] + " parameter 1 must be a positive number.", btn.line[idx])
Expand Down
67 changes: 62 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,26 @@ I have specifically chosen to do my best to develop this using as many cross pla
* `.desktop` shortcuts are coming soon!

## How do I use it? (Post-Install) [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
* Before starting the program, make sure your Launchpad Classic/Mini/S or MkII is connected to the computer.
* Command line options
* usage: lphk.py [-h] [-d] [-l LAYOUT] [-m] [-s {Mk1,Mk2,Mini,Pro}] [-M {edit,move,swap,copy,run}] [-q]
* -h, --help
* Show this help message and exit
* -d, --debug
* Turn on debugging mode
* -l LAYOUT, --layout
* LAYOUT Load an initial layout
* -m, --minimised
* Start the application minimised
* -s {Mk1,Mk2,Mini,Pro}, --standalone {Mk1,Mk2,Mini,Pro}
* Operate without connection to Launchpad
* -M {edit,move,swap,copy,run}, --mode {edit,move,swap,copy,run}
* Launchpad mode
* -q, --quiet
* Disable information popups* Click `Launchpad > Connect to Launchpad...`.
* Before starting the program, if you are planning to use a Launchpad, ensure it (Launchpad Classic/Mini/S or MkII) is connected to the computer.
* If you have a Launchpad Pro, there is currently beta support for it. Please put it in `Live` mode by following the instructions in the pop-up when trying to connect in the next step. For more info, see the [User Manual](https://d2xhy469pqj8rc.cloudfront.net/sites/default/files/novation/downloads/10581/launchpad-pro-gsg-en.pdf).
* Click `Launchpad > Connect to Launchpad...`.
* If the connection is successful, the grid will appear, and the status bar at the bottom will turn green.
* The current mode is displayed in the upper right, in the gap between the circular buttons. Clicking this text will change the mode. There are four modes:
* The current mode is displayed in the upper right, in the gap between the circular buttons. Clicking this text will change the mode. There are five modes:
* "Edit" mode: Click on a button to open the Script Edit window for that button.
* All scripts are saved in the `.lpl` (LaunchPad Layout) files, but the editor also has the ability to import/export single `.lps` (LaunchPad Script) files.
* For examples, you can click `Import Script` and look through the `user_scripts/examples/` folder.
Expand All @@ -158,6 +173,10 @@ I have specifically chosen to do my best to develop this using as many cross pla
* The selected button will remain unchanged.
* The second button will have the selected button's old script and color bound to it.
* If the second button is already bound, you will get a dialog box with options.
* "Run" mode: Click on a button to execute it.
* The button is executes when you release the mouse button.
* A release of the button is queued immediately after the button press.
* This is currentl;y only functional with an emulated launchpad
* Go to `Layout > Save layout as...` to save your current layout for future use, colors and all.
* Go to `Layout > Load layout...` to load an existing layout. Examples are in `user_layouts/examples/`.

Expand Down Expand Up @@ -190,16 +209,52 @@ RELEASE (argument 1)
```
If this is used, all other lines in the file must either be blank lines or comments.

#### The `@LOAD_LAYOUT` Header [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
This is a method of loading a new layout. The header is followed by the name of the layout.
```
@LOAD_LAYOUT c:\layouts\newlayout.lpl
```
#### The `@SUB` Header [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
This defines a subroutine name and parameters.
```
@SUB SUB1 a% b% @result%
```
This defines a subroutine that will be called using CALL:SUB1. It requires 3 parameters. The first 2 can be either integer constants or variables. The last must be a variable because a result can be returned in it.
Within the subroutine, refer to the parameters as `a`, `b`, and `result`.
If a parameter name is preceeded with `@`, the parameter is passed by reference and a variable MUST be specified in the calling code
If a parameter name is preceeded with `-`, the parameter is optional
If a parameter name is followed with `%`, the parameter is integer
If a parameter name is followed with `#`, the parameter is floating point
If a parameter name is followed with `$`, the parameter is a string
If a parameter name is followed with `!`, the parameter is a boolean
#### The `@DESC` Header [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
This defines efines a one line description of a subroutine or button.
```
@DESC Starts the music
```
#### The "@NAME" Header [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
The sets the name of a button. Currently this does nothing outside the automatically generated documentation, but could in the future be used to place a label, hint text, etc on the form showing the launchpad.
```
@NAME Fast Press
```
This sets the name to `Fast Press`. Note that names are not limited to a single word, but in general should be terse.
#### The "@DOC" Header [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
This adds lines of documentation to a subroutine or button script.
```
@DOC This is the first line of documentation
@DOC And this is the second line
```
This adds 2 lines of documentation that will appear in the automatically generated documentation
### Commands List [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
Commands follow the format: `COMMAND arg1 arg2 ...`. Scripts are just a text file with newlines separating commands.

#### Utility [[Table of Contents]](https://github.com/nimaid/LPHK#table-of-contents)
* `ABORT`
* Terminates the script immediately, logging any message after the command. This has the same functionality as END, however it carries with it the notion that the termination was abnormal.
* Terminates the script immediately, logging any message after the command. This has the same functionality as END, however it carries with it the notion that the termination was abnormal. This will stop execution of a script immediately, even if called from within a subroutine.
* `DELAY`
* Delays the script for (argument 1) seconds.
* `END`
* Terminates the script immediately, logging any message after the command. This has the same functionality as ABORT, however it indicates a normal termination.
* Terminates the script immediately, logging any message after the command. This has the same functionality as ABORT, however it indicates a normal termination. This will stop execution of a script immediately, even if called from within a subroutine.
* `GOTO_LABEL`
* Goto label (argument 1).
* `IF_PRESSED_GOTO_LABEL`
Expand All @@ -224,6 +279,8 @@ Commands follow the format: `COMMAND arg1 arg2 ...`. Scripts are just a text fil
* Works the same as the REPEAT_LABEL command, except the number of times the loop is executed is defined by argument 2. In addition, the loop counter is reset automatically allowing loops to be nested.
* `RESET_REPEATS`
* Reset the counter on all repeats. (no arguments)
* `RETURN`
* Returns from a subroutine. If not in a subroutine, this will terminate the script.
* `SOUND`
* Play a sound named (argument 1) inside the `user_sounds/` folder.
* Supports `.wav`, `.flac`, and `.ogg` only.
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.1
0.3.2
Loading