pipes-lang
v1.1.0
Published
Interpreter for PIPES 2D image programming language
Downloads
6
Maintainers
Readme
PIPES
PIPES is a image-based 2D programming "language". It follows "pipes" and executes operations when reaching pipes with specific colors. Most operations work on the stack, but you can save and load from memory.
Features
- Drawing programs
- No more writing programs
- Input characters
- Output numbers and characters
- Basic arithmetic operations
- Comparisons
- Saving and loading to/from memory
Planned
- Better input processing
- Custom palettes
- Better debugging
- Better editing (custom IDE?)
Install PIPES:
$ npm install pipes-lang -g
You can use this palette file for Paint.NET.
Usage
Usage: pipes [options]
Options:
-V, --version output the version number
-d, --debug Debug mode
-s, --strict Strict mode
-i, --input [args] Input arguments
-p, --stepwise NOT YET IMPLEMENTED! Stepwise execution
-h, --help output usage information
Pipes
The program will always try to go straight, then right and then left.
Pipes aren't allowed to touch the image borders!
This is the standard palette, in the future I want to make it easy to use custom palettes.
Meta Pipes
|Color|Code|Name|Meaning| |-|-|-|-| |White|0,0,0|background|is ignored| |Black|255,255,255|default pipe|guides program| |Grey|127,127,127|blockade|low priority(only enters if there's no other way)| |Green|0,255,0|entry|program starts here| |Red|255,0,0|exit|program stops here|
Stack Operation Pipes
|Color|Code|Name|Meaning| |-|-|-|-| |Blue|0,0,255|push|the only pipe that needs an parameter afterwards, pushes the following pixel color number to the stack| |Yellow|255,255,0|remove|removes the top element from the stack| |Gray|127,127,127|blockade|low priority(only enters if there's no other way)| |Spring Green|0,255,144|stack to memory|saves the second element on the stack to the adress provided by the first element, the first element is removed| |Cyan|0,225,255|memory to stack|pushes the element at the adress provided by the top element on the stack and removes the adress element| |Malibu|127,127,255|duplicate|duplicates the top element on the stack| |Electric Violet|178,0,255|swap|swaps the top two elements|
Arithmetic Pipes
|Color|Code|Name|Meaning| |-|-|-|-| |Japanese Laurel|37,127,0|add|removes E1, E2 and pushes E1+E2| |Pigment Indigo|87,0,124|subtract|removes E1, E2 and pushes E2-E1| |Cedar Wood Finish|124,24,0|multiply|removes E1, E2 and pushes E1*E2| |Orient|37,127,0|divide|removes E1, E2 and pushes E2/E1|
Control Flow Pipes
|Color|Code|Name|Meaning| |-|-|-|-| |Pumpkin Skin|168,97,11|compare|compares E2 to E1, and changes direction depending on the result. equal: straight, greater: right, less: left| |Blue Chalk|248,214,255|teleport absolute|program jumps to position x = E2 y = E1| |Baja White|255,251,214|teleport relative|program jumps on position x = x+E2 y = y+E1|
I/O Pipes
|Color|Code|Name|Meaning| |-|-|-|-| |School Bus Yellow|255,216,0|input|no effect (yet)| |Blaze Orange|255,106|output|removes the top element from the stack and prints it| |Chardonnay|255,206,127|char output|removes the top element from the stack and prints the char with the char code provided|
All the color names are only the names of the nearest named colors.
Examples
(Please tell me how I can set images to display pixelated, this is awful.)
Basic I/O
When you input "r" it will output "right", when you input "l" it will output "left, otherwise it will return "-1".