Jump to:
The following describe the core functions of BooBoo.
Sections:
declare a number or numbers e.g. number x y z
declare a string or strings e.g. string s1 s2
declare a vector or vectors e.g. vector x
declare a map or maps e.g. map m
load a different BooBoo script e.g. reset "next_slide.boo"
Exit the app with a return code to the environment e.g. exit 0
Return a value from a function e.g. return 1 or just return if the function doesn't return a value
Include a BooBoo file at this point in the code e.g. include "my_functions.inc"
Define a label e.g. :jump_here
Define a comment e.g. = x 1 ; assign 1 to x
a string e.g. = name "Pelvis Johnson"
define a function References can be defined by prefixing a parameter name by a tilde (~) e.g. function foo param1 param2 { ... }
Returns a string respresentation of the type of the second parameter e.g. typeof type_string my_var
an expression e.g. (+ x (* y (* z w 2))) in C would be x+(y*(z*w*2)) Supported operators are: + - * / % && || > < >= <= == != | ^ & << >> The boolean operators return 1 or 0 Your own functions can be supplied as operators
Vector/map indexing operator e.g. = x [v [m "key"]] in C++ would be x = v[m["key"]] Can be used anywhere a variable is expected. You can use multiple indexes e.g. [v 3 2 1 0] is like v[3][2][1][0] in C.
Start a hexadecimal number e.g. #FF is equivalent to 255
A reference. Function parameters preceded by a ~ can be modified by a function e.g. function foo a b ~c
jump to a label e.g. goto next_loop
Comparison e.g. ? x 1 You can also evaluate an expression ? 1 (&& (> a b) (< x y)) je true jne false
Jumps like this one are based on the last comparison. If it was equal, this will jump, if not, it won't e.g. je process_x_equals_1
Jump if not equal e.g. jne process_x_not_1
Jump if less e.g. jl my_label
Jump if less or equal e.g. jle my_label
Jump if greater e.g. jg my_label
Jump if greater or equal e.g. jge my_label
Call a function that doesn't return anything e.g. call my_func param1 param2 param2
Call a function that returns a value e.g. call_result result my_func param1 param2
compare and jump e.g. if (expr1) the_if (expr2) elseif1 (expr3) elseif2 the_else ... :the_if ... ... :the_else the_if elseif1 elseif2 and the_else are labels that are the bottom of their code blocks
A for loop e.g. for i start (expression) increment end_label ; your loop code here :end_label
assign e.g. = x 1
add e.g. + x 1 You can supply more than 1 parameter at the end
subtract e.g. - x 1 You can supply more than 1 parameter at the end
multiply e.g. * x 2 You can supply more than 1 parameter at the end
divide e.g. / x 2 You can supply more than 1 parameter at the end
integer modulus e.g. % index count
format strings with replacements e.g. string_format dest "I'm % years old" age printf-equivalent formating options are available with %(...) for example %(3.16g)
Get the value of character at index in a string This function is UTF8 compliant e.g. string_char_at dest str index
Get the length of a string This function is UTF8 compliant e.g. string_length dest str
Turns the ascii value into a one character length string This function is UTF8 compliant e.g. string_from_number str 97 ; creates "a"
Create a substring of a string e.g. string_substr s start end End is optional, if not specified it will cut from start till the end of the string. This is UTF8 compliant
Make a string uppercase e.g. string_uppercase s
Make a string lowercase e.g. string_lowercase s
Trim leading and trailing whitespace from a string e.g. string_trim s
regex replacement e.g. string_replace str regex replacement
Extract sub-strings from a string e.g. string_match out_vector str regex
Check if a string matches a regex e.g. string_matches yesno str regex
floating point modulus e.g. fmod x 1.5
trigonometry functions e.g. sin n
trigonometry functions e.g. cos n
trigonometry functions e.g. tan n
trigonometry functions e.g. asin n
trigonometry functions e.g. acos n
trigonometry functions e.g. atan n
trigonometry functions e.g. atan2 y x
absolute value e.g. abs value
exponentiation e.g. pow x 2
square root e.g. sqrt x
Calculate hypotenuse of a and b e.g. hypot a b
Drop the fractional part of a number e.g. floor x
Round to the next highest integer e.g. ceil x
Invert the sign of a number e.g. neg x
Returns the sign of a number e.g. sign x
Calculate the value of e e.g. exp x
Logarithm function e.g. log x
Base 10 logarithm e.g. log10 x
Get the minimum number in a list of values e.g. min result a b c d e f g
Get the max number in a list of values e.g. max result a b
Some vector and matrix math is available through expression operators. Supported are: mul, identity, scale, rotate, translate, length, dot, angle, cross, normalize, add, sub, inverse, transpose Most of these behave as you'd expect. identity takes 1 argument, the size of the matrix. scale, rotate and translate produce transformation matrices to be multiplied by another matrix (scale and translate take 3 parameters, rotate takes 4.)
push a value onto a vector (must be created e.g. vector v) e.g. vector_add v 0
get the number of elements in a vector e.g. vector_size vec size
set an element in a vector e.g. vector_set vec index value Note: you can use multiple indices if you know you have a multidimensional vector. BooBoo will dig down into as many vectors as you specify indices for (followed by the value you're setting it to)
insert a value in any position in a vector e.g. vector_insert v index value
get the value at index in vector e.g. vector_get v output index Note: you can use multiple indices if you know you have a multidimensional vector. For example vector_get v colour y x to index into a 2D array of palette indices
remove from a vector e.g. vector_erase v index
empty a vector e.g. vector_clear v
set a key in a map e.g. map_set m "key" value map_set can dig down into linked maps the same way as you can with vector_set
get a value from a map e.g. map_get m output "key" map_get can dig down into linked maps the same way as you can with vector_get
erase a key/value pair from a map e.g. map_erase m "key"
clear a map e.g. map_clear m
Get the names of the keys from a map into a vector of strings e.g. map_keys m v
open a file, mode can be either "a" "r" or "w" number f file_open f "input.txt" "r" f will be -1 on failure e.g. file_open f "out.txt "w"
You should always close files you open with this e.g. file_close f
Read a word from a file e.g. file_read f s
Read a line from a file e.g. file_read_line f s
Write a word to a file e.g. file_write f "turkey"
Print to a file. Behaves exactly like print but takes a file e.g. file_print f "%(20s)%(20s)%(20s)" x y z
Bitwise or All bitwise functions cast the numbers to int first e.g. | x 128
Bitwise xor e.g. ^ x y
Bitwise and e.g. & x 255
Left shift e.g. << x 3
Right shift e.g. >> x 3
print a string (like string_format) e.g. print "Hello, I'm % and I like % and %" name like1 like2 printf-equivalent formating options are available with %(...) for example %(3.16g)
Read a word from stdin e.g. input str
Get an environment variable e.g. getenv dest "HOME"
Create a directory e.g. mkdir my_string_path
List files and directories in a glob e.g. list_directory dest_vector "/home/Pelvis/*" Directories returned will end with "/" and regular files will not.
Returns the user interface language of the system e.g. get_system_language lang lang will be in Steam format e.g. "french", "brazilian" etc
Get a list of active drive letters in a vector (e.g. "A", "C", ...) e.g. list_drives v
Convert a pathname to a fully qualified pathname e.g. get_full_path filename
Change the text colour. Colour constants are: BLACK BLUE GREEN CYAN RED PURPLE YELLOW WHITE Each colour has a bright version toggleable by a boolean. e.g. text_colour BLACK 0 WHITE 1 ; fore fore_bright back back_bright
Reset the text colour e.g. text_reset
Clear the screen e.g. text_clear
Input a single character from the terminal, not waiting for newline e.g. getch input_number