New things on epi v_3.0
Throw and Exception keywords
Comments
v_2.1
- Working with variables
Numbers
Strings
Booleans
Files
Functions
Arrays
What is epi?
Install epi v_2.1
How to use it —
Compile a file
Create a safe file.
Tutorials —
print
User Input
cmos
File Working
Time and Date
Get Char
Print Compact
Networking
Functions
Dialogs
Loops
If
Images
Working with Internet Files
String Working
Visual Elements
Random Numbers
Boolean Functions
Char Functions
Arrays
"import" Command
Sleep Command
Arguments
return
System Functions
GUI Commands
Keywords
- Working with variables
v_2.0
- Working with variables
Numbers
Strings
Booleans
Files
Functions
What is epi?
Install epi v_2.0
How to use it —
Compile a file
Create a safe file.
Tutorials —
print
User Input
cmos
File Working
Time and Date
Get Char
Print Compact
Networking
Functions
Dialogs
Loops
If
Images
Working with Internet Files
String Working
Visual Elements
Random Numbers
Boolean Functions
Char Functions
Arrays
"import" Command
Sleep Command
Arguments
return
- Working with variables
v_1.luc2
- Working with variables
Numbers
Strings
Booleans
Files
Functions
What is epi?
Install epi v_1.luc2
How to use it —
Compile a file
Tutorials —
print
User Input
cmos
File Working
Time and Date
Get Char
Print Compact
Networking
Functions
Dialogs
Loops
If
Images
Working with Internet Files
String Working
Visual Elements
Random Numbers
Boolean Functions
Char Functions
Arrays
"import" Command
Sleep Command
Arguments
- Working with variables
v_1.luc1
- Working with variables
Numbers
Strings
Booleans
Files
Functions
What is epi?
Install epi v_1.luc1
How to use it —
Compile a file
Tutorials —
print
User Input
cmos
File Working
Time and Date
Get Char
Print Compact
Networking
Functions
Dialogs
Loops
If
Images
Working with Internet Files
String Working
Visual Elements
Random Numbers
Boolean Functions
Char Functions
Arrays
"import" Command
Sleep Command
Arguments
- Working with variables
v_0.1 - v_1.2
Start
Install epi
References —
print
cmos
in
var
File Work
Time
Import
Get Char
Print C.
Networking
Functions
Dialogs
Loops (repeat)
If
Images
Read Files From Internet
Read Lines From Internet
String Methods
Visual Elements
Random
Variable Functions
Boolean functions
Char functions
Arrays
"import" Command
"utils.epi" file
"sleep" Command
Epi Variables
Epi examples in depth
Documents
Here you can view some tutorials of how to code in epi.
Click on the sidebar to view them.
Installation
In this tutorial you will learn hos to download epi.
- Download epi: Here you have the download link.
-
If you downloaded the compiler file:
- Move the downloaded file to a new directory
- Copy the new directory direction. (ex: C:/users/cat/desktop/epi/)
- Edit the all users path variable and add the directory
- Open the installer.
- Select with which privileges install epi
- Select a language
- Read and accept license.
- Read information about install.
- Click install
- Installed, click on "Run epi and close".
- Add the installation path to your user variables.
- Now you have installed epi!
- Create a new file on Visual Studio Code((R)Microsoft) or your text editor.
- Write on it:
print("hello world!") - Save the file as "helloworld.epi"
- On CMD/Powershell input
epi helloworld.epi - It should run well, if it don't, repeat the installation process
print function gets the content inside the () and shows it on the screen.
Added in: v_0.1
Usage on v_0.1^
print(textToPrint)
Example: print("Hello World")
Output:
Hello World
Cmos
cmos is a function that runs a specified command on command prompt.
Added in: v_0.1
Usage on v_0.1^
cmos.commandToRun(args)
Example: cmos.gcc("--version")
Output:
gcc.exe (Rev6, Built by MSYS2 project) 13.1.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
In
in is a comamnd to get a user input.
Added in: v_0.1, Updated in: v_1.1
Usage on v_1.1^
Now you can call in function using inx function.
Example:
print("Hello, " + inx())
Output:
mr. Meow
Hello, mr. Meow
As you can see, inx function is replaced by a user-input.
You can also add more than one inx in the same line, but it doesn't look good.
Example:
print("Hello, " + inx() + ", how are you today? " + inx())
Output:
mr. cat
meow
Hello, mr. cat, how are you today? meow
Usage on v_0.1^
in(message, (variable)saveIn)
Example: var username null
in("Enter username: ", "username")
Output:
Enter username: ▮
Var
var command works for store information as a string.
Added in: v_0.1, Updated in: v_1.0, v_1.2
Usage on v_1.2^
Using string methods you can get values via myVariable.getValue()
Also we tried to fix String Methods for making a new value to the String but we couldn't finish it.
Usage on v_1.0-v_1.1
Modifing var values
var myVariable null
print("Old: " + var(myVariable))
setva("myVariable", "hi")
print("New: " + var(myVariable))
print("Old: " + var(myVariable))
setva("myVariable", "hi")
print("New: " + var(myVariable))
Output:
Old: null
New: hi
Usage on v_0.1-v_0.rev1
var name value
Example: var user null
It can be called by var(varName). The varName should be without ""
Output:
no-output
File Working
openf, readf, writf and relif commands works for working with files.
Added in: v_0.2
Usage on v_0.2^
// Create the file variable
var file null
// Open the file
openf("file", "filename.txt")
// Use your code as normal
Creating and writing files:
Example: //Create the file variable
var file null
//Open the file
openf("file", "hello.txt")
//Write on the file
writf("file", "This is hello.txt file contents!")
Output:
no-output
Reading files:
Example: //Create the file variable
var file null
//Open the file
openf("file", "hello.txt")
//Create the veriable in where we're going to save the text
var txt null
//Read file and save it
readf("file", "txt")
//Print the result
print(var(txt))
Output:
This is hello.txt file contents!
Reading a specific line on files:
Example: //Create the file variable
var file null
//Open the file
openf("file", "hello.txt")
//Write a multiline text on file
writf("file", "hola\nque\ntal")
//Create the veriable in where we're going to save the text
var txt null
//Read the line 2 and save it
relif("file", "txt", 2)
//Print the result
print(var(txt))
Output:
que
Time
gettMinutes, gettHours, gettSeconds, gettMilliseconds, gettDay, gettMonth and gettYear commands works for getting actual time.
Added in: v_0.2
Usage on v_0.2^
var minutes null
gettMinutes("minutes")
print(var(minutes))
Output:
Getting seconds, minutes and hours like this: HH:MM.SS
//Create the variables which store the time
var hours null
var minutes null
var seconds null
//Get the time and set it to the variables
gettHours("hours")
gettMinutes("minutes")
gettSeconds("seconds")
//Print it on the specific format
print(var(hours) + ":" + var(minutes) + "." + var(seconds))
Output:
Getting day, month and year like this: DD/MM/YYYY
//Create the variables which store the time
var day null
var month null
var year null
//Get the time and set it to the variables
gettDay("day")
gettMonth("month")
gettYear("year")
//Print it on the specific format
print(var(day) + "/" + var(month) + "/" + var(year))
Output:
Import Functions
epi uses a special command to import libraries.
You can use this command to import yours java or executables files and run it on epi.
To edit the commands you edit the file in the epi main folder. (imp.epilib)
Added in: v_0.3
Usage on v_0.3^
C:/Program Files(x86)/epi-v_yourepiversion/imp.epilib
;printText;echo;
Syntax
;printText;echo; Name to call the function
;printText;echo; Command to run
main.epi
var output null
printText("hi", "output")
print(var(output))
cmd:
epi main.epi
Output:
hi
Get Char
You can use getcha function to get a pressed button by the user.
Added in: v_0.3
Usage on v_0.3^
var key null
getcha("key")
print("User pressed: " + var(key))
Output:
h▮
User pressed: h
Note: You can use printc for no new-line print.
Print Compact
You can use printc for putting no new-line after print.
Added in: v_0.3
Usage on v_0.3^
var key null
printc("Press key: ")
getcha("key")
Output:
Press key: ▮
Networking
In v_0.3, there is a way to import files made up in java. So intallation of v_0.3 includes some files to send messages to a server or recieve mesasges. You can use netw.createServer and netw.createConection.
Warning: Java 21^ must be installed to use this function.
Added in: v_0.3, Updated in: v_1.0
Usage on v_1.0:
Now in netw.createConnection function you can add spaces to messages using '_' character
Example:
var output null
netw.createConnection("1234 supersecretip hi_again", "output")
Usage on v_0.3^
Create a Server to Recieve Text
main.epi file:
var data null
netw.createServer("2288", "data")
print(var(data))
netw.createServer Syntax:
netw.createServer <- Create the server"2288" <- Select the port where we're going to create the server"data" <- Where to save the recieved text.Create a Connection and Send Text
sub.epi file:
var data null
netw.createConection("2288 supersecretip hi", "data")
print(var(data))
netw.createConection Syntax:
netw.createServer <- Create the server2288 <- Select the port where we're going to connect.supersecretip <- The ip of the server where we want to connect.hi <- Text to send.main.epi Output:
hi
Function
For creating functions you can create them by using openFunction, closeFunction and runFunction.
Added in: v_0.3, Updated in: v_1.0
Deprecated: runFunction function is not neccesary(v_1.0^), you can use variable functions to know how to run functions. See deprecated lib to view more information.
Usage v_1.0^:
main.epi File:
var function null
openFunction("function")
print("hi")
closeFunction()
function()
Output:
hi
Usage on v_0.3-v_0.rev1
main.epi File:
var function null
openFunction("function")
print("hi")
closeFunction()
runFunction("function")
Output:
hi
Dialogs
You can create dialogs to warn the user of something visually or getting userinput.
Warning: Java 21^ must be installed to use this function.
Added in: v_0.rev1, Updated in: v_1.0, v_1.2
Usage on 1.2:
Now with gui.showMessageOptions, gui.showErrorOptions and gui.showWarningOptions you can create dialogs with more buttons and also store output as a number(index) or get -1 if the user closed the dialog.
Example:
var output null
gui.showMessageOptions("Select_an_option Select Print0~Print1~Print2", "output")
print(output.getValue())
Output:
Usage on 1.0:
Is the same but now you can put spaces on dialogs.
Example:
var output null
gui.showMessage("hi_hi hi", "output")
Usage on v_0.rev1
Create Normal Dialogs
There are three types of dialogs:showMessage A dialog with an info iconshowWarning A dialog with an warning iconshowError A dialog with an error icon
Here is the use:
showMessage:
var output null
// output variable might be required to troubleshotign
gui.showMessage("message title", "output")
Output:
showWarning
:
var output null
// output variable might be required to troubleshotign
gui.showWarning("message title", "output")
Output:
showError
:
var output null
// output variable might be required to troubleshotign
gui.showError("message title", "output")
Output:
Create UserInput Dialogs
string username
// You can't enter spaces on dialogs (maybe later yes) *username variable stores the entered text
gui.requestInput("Username Login", "username")
print(str(username))
Output:
Loops
In epi there's a way to do loops, but you have to determinate how much times repeat it.
Added in: v_0.rev1
Usage on v_0.rev1^
main.epi File:
//First define function
var function null
openFunction("function")
print("hi")
closeFunction()
runFunction("function")
// now use this
repeatTim("function", 10)
Output:
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
If
You can use runIf function to run a function if a condition is true or other condition if false.
Added in: v_1.0
Usage on v_1.0^
main.epi file:
// Declarate functions
var loginok null
var loginbad null
var username null
openFunction("loginok")
print("Welcome!")
closeFunction()
openFunction("loginbad")
print("Error loging in")
closeFunction()
// Request username
in("username: ", "username")
// Check if username is meow and run loginok
runIf(ieq(var(username), "meow"), "loginok", "loginbad")
Output:
username: meow
Welcome!
Images
You can use img.imageToTxt to read an image and save the output in a variable.
Warning: Java 21^ must be installed to use this function.
Added in: v_1.0
Usage on v_1.0^
main.epi file:
var output null
img.imageToTxt("icon.png", "output")
print(var(output))
icon.png file:
Output: (1:12px) (That isn't the actual output, html doesn't want to put spaces.)
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccc
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo:::oooooooooooooooooooooooooooooooooooccccccccccccccccc
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo:.....:oooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo:.......:ooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........ooooooooooooooooooooooooooooooooccccccccccccccccc
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........:ooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........:ooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........oooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo:........oooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo:...:oooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
ooooooooooooooooooooooooooooooo::::ooooooooooooooooooooooooooooooooooooooooooooooooo::::oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooooo............:ooooooooooooooooooooooo:::::::oooooooooo:...........:oooooooooooooooooooooooo:::::::ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
oooooooooooooooooooooooo.................:oooooooooooooooooooo.......:ooooooo:...............:oooooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeec
ooooooooooooooooooooo:.....................ooooooooooooooooooo.......:ooooo:....................oooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooooooooooo:.......................oooooooooooooooooo.......:oooo.......................ooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
ooooooooooooooooooo:.........................:oooooooooooooooo.......:ooo.........................oooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooooooooo:.............::............:ooooooooooooooo.......:oo...........::..............ooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
ooooooooooooooooo:.........:oooooooo:..........ooooooooooooooo.......:o:......:ooooooooo:...........oooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooooooo:........:oooooooooooo:........:oooooooooooooo.......::.....:ooooooooooooo:.........:ooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooooooo........:ooooooooooooooo........:ooooooooooooo.............oooooooooooooooo:.........ooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
ooooooooooooooo........:ooooooooooooooooo........ooooooooooooo............oooooooooooooooooo:........:oooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooooo:.......:oooooooooooooooooo:.......:oooooooooooo...........oooooooooooooooooooo:........oooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooooo........oooooooooooooooooooo.......:oooooooooooo..........:ooooooooooooooooooooo........:ooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
ooooooooooooo:.......:oooooooooooooooooooo:.......oooooooooooo..........oooooooooooooooooooooo:.......:ooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
ooooooooooooo:.......oooooooooooooooooooooo.......oooooooooooo.........oooooooooooooooooooooooo........ooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
ooooooooooooo.......:oooooooooooooooooooooo.......:ooooooooooo.........oooooooooooooooooooooooo:.......:oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooo:.......ooooooooooooooooooooooo:.......ooooooooooo........:ooooooooooooooooooooooooo.......:oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooc
oooooooooooo:......:ooooooooooooooooooooooo:.......ooooooooooo........oooooooooooooooooooooooooo........oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
oooooooooooo.......:ooooooooooooooooooooooo:.......ooooooooooo........oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
oooooooooooo.......oooooooooooooooooooooooo:.......ooooooooooo........oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
oooooooooooo.......................................ooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
ooooooooooo:.......................................ooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
ooooooooooo:.......................................ooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
ooooooooooo:.......................................ooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
ooooooooooo:.......................................ooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
ooooooooooo:.......................................ooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
ooooooooooo:.......ooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
oooooooooooo.......ooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooo:.......oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
oooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooo.......:oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
oooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooo.......:oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccc
oooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooo.......:ooooooooooooooooooooooooo:.......:oooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccccccccccccccccc
oooooooooooo........oooooooooooooooooooooooooooooooooooooooooo........ooooooooooooooooooooooooo:.......ooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooo:.......oooooooooooooooooooooooooooooooooooooooooo........ooooooooooooooooooooooooo........ooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooo:.......:ooooooooooooooooooooooooooooooooooooooooo........:oooooooooooooooooooooooo.......:ooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooo........ooooooooooooooooooooooooooooooooooooooooo.........ooooooooooooooooooooooo:.......oooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooo:.......:oooooooooooooooooooooooooooooooooooooooo.........:oooooooooooooooooooooo........oooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooo:........oooooooooooooooooooooooooooooooooooooooo..........ooooooooooooooooooooo........:oooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooo.........oooooooooooooooooooooooo.oooooooooooooo..........:ooooooooooooooooooo:........ooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooo:........:ooooooooooooooooooooo:..oooooooooooooo...........:ooooooooooooooooo:........:ooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooo:.........ooooooooooooooooooo....oooooooooooooo.............ooooooooooooooo:........:oooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooo..........:oooooooooooooo:......oooooooooooooo..............:ooooooooooo:..........ooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooo:............::oooooo::.........oooooooooooooo.......::.......::ooooo::...........:ooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooo:..............................oooooooooooooo.......:o:.........................:oooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooo.............................oooooooooooooo.......:oo........................oooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooo..........................:ooooooooooooooo.......:ooo......................ooooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooo:.......................ooooooooooooooooo.......:oooo:..................:oooooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooo:..................:ooooooooooooooooooo.......:oooooo:..............:oooooooooooooooooooooooo.......ooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooo::..........::oooooooooooooooooooooo.......:oooooooo:::.......::oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......:oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooocccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
cccccccccccccccccccooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceeeeeeeeeeeeec
ccccccccccccccceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
Reading Files From Internet
You can use netw.readFileFromInternet for reading files with a specified URL.
Warning: Java 21^ must be installed to use this function.
Added in: v_1.0
Usage on v_1.0^
main.epi file:
var output null
netw.readFileFromInternet("https://www.google.es", "output")
print(var(output))
Output:
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="es"><head><meta content="Google.es permite acceder a la informaci?n mundial en castellano, catal?n, gallego, euskara e ingl?s." name="description"><meta content="noodp" name="robots"><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){var _g={kEI:'fDlSZaaLF--MhbIP-fqrmAE',kEXPI:'0,1365467,207,4804,2316,383,246,5,1129120,1805,106,1195846,644,380090,16114,28684,22431,1361,283,12029,17587,4998,17075,38444,889,1983,2891,3926,7828,606,30668,30022,2614,13491,230,20583,4,4755,54862,4437,22601,6636,7596,1,42154,2,20270,19491,5679,1020,31122,4568,6253,23424,1252,30152,29549,8155,23351,872,19634,7,1922,9779,12414,23871,6174,20199,5796,3,14433,20206,8377,19241,297,4825,782,2248,15816,1804,13806,21463,11813,1635,13492,21121,16441,5215444,2,579,133,353,5993900,253,2802966,3306,141,795,29783,172,1,20,2,78,15,30,2,5,2,23940458,4044106,16673,43886,3,2105,3,569,3,1310,1392060,727330,1,23031939,3326,9473,2945,5464,2878,336,1262,4423,5799,739,5034,12824,819,10029,3,545,1550,852,3476,3538,2542,8203,828,2,1122,4323,2368,4244,6405,1594,4643,3,510,2461,769,27,6,5,15,313,1329,5,1,779,2670,699,4,872,1106,771,992,2407,64,367,1643,1,549,148,242,214,1049,907,751,332,2302,1075,1296,253,42,1503,744,608,101,771,1387,378,394,659,359,741,271,880,18,250,1223,1251,961,153,50,51,1687,751,410,86,93,74,189,931,626,174,4,80,1,6,236,1651,969,788,4,500,17,832,1053,10,891,150,75,366,405,1317,300,105,2,6,2,318,326,61,45,294,9,363,336,1084,273,225,165,149,1,6,53,191,120,719,24,31,1588,400,741,1264,390,1706,5,125,90,126,174,1640,144,1,512,4,446,25,383,193,10,402,18,89,176,6,168,380,4,2133,267,20,168,1075,621,135,96,285,5,830,317,3,4,2,2,2,280,21351470,422561',kBL:'eIMV',kOPI:89978449};(function(){var a;(null==(a=window.google)?0:a.stvsc)?google.kEI=_g.kEI:window.google=_g;}).call(this);})();(function(){google.sn='webhp';google.kHL='es';})();(function(){
var h=this||self;function l(){return void 0!==window.google&&void 0!==window.google.kOPI&&0!==window.google.kOPI?window.google.kOPI:null};var m,n=[];function p(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));)a=a.parentNode;return b||m}function q(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute("leid")));)a=a.parentNode;return b}function r(a){/^http:/i.test(a)&&"https:"===window.location.protocol&&(google.ml&&google.ml(Error("a"),!1,{src:a,glmm:1}),a="");return a}
function t(a,b,c,d,k){var e="";-1===b.search("&ei=")&&(e="&ei="+p(d),-1===b.search("&lei=")&&(d=q(d))&&(e+="&lei="+d));d="";var g=-1===b.search("&cshid=")&&"slh"!==a,f=[];f.push(["zx",Date.now().toString()]);h._cshid&&g&&f.push(["cshid",h._cshid]);c=c();nul
l!=c&&f.push(["opi",c.toString()]);for(c=0;c<f.length;c++){if(0===c||0<c)d+="&";d+=f[c][0]+"="+f[c][1]}return"/"+(k||"gen_204")+"?atyp=i&ct="+String(a)+"&cad="+(b+e+d)};m=google.kEI;google.getEI=p;google.getLEI=q;google.ml=function(){return null};google.log
=function(a,b,c,d,k,e){e=void 0===e?l:e;c||(c=t(a,b,e,d,k));if(c=r(c)){a=new Image;var g=n.length;n[g]=a;a.onerror=a.onload=a.onabort=function(){delete n[g]};a.src=c}};google.logUrl=function(a,b){b=void 0===b?l:b;return t("",a,b)};}).call(this);(function(){
google.y={};google.sy=[];google.x=function(a,b){if(a)var c=a.id;else{do c=Math.random();while(google.y[c])}google.y[c]=[a,b];return!1};google.sx=function(a){google.sy.push(a)};google.lm=[];google.plm=function(a){google.lm.push.apply(google.lm,a)};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};google.bx=!1;google.lx=function(){};var d=[];google.fce=function(a,b,c,e){d.push([a,b,c,e])};google.qce=d;}).call(this);google.f={};(function(){
document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a="1"===c||"q"===c&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.ad
dEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!==document.documentElement;a=a.parentElement)if("A"===a.tagName){a="1"===a.getAttribute("data-nohref");break a}a=!1}a&&b.preventDefault()},!0);}).call(this);</script><style>#gbar,#guser{font-si
ze:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}
</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#1967d2}em{font-weight:bold;font-style:normal}.lst{height:25px;
width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}body{background:#fff;color:#000}a{color:#681da8;text-decoration:none}a:
hover,a:active{text-decoration:underline}.fl a{color:#1967d2}a:visited{color:#681da8}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#f8f9fa;border:solid 1px;border-color:#dadce0 #70757a #70757a #dad
ce0;height:30px}.lsbb{display:block}#WqQANb a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;color:#000;border:none;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#dadce0}.lst:focus{outline:none}</style><script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){window.google.erd={jsr:1,bv:1899,de:true};
var h=this||self;var k,l=null!=(k=h.mei)?k:1,n,p=null!=(n=h.sdo)?n:!0,q=0,r,t=google.erd,v=t.jsr;google.ml=function(a,b,d,m,e){e=void 0===e?2:e;b&&(r=a&&a.message);void 0===d&&(d={});d.cad="ple_"+google.ple+".aple_"+google.aple;if(google.dl)return google.dl
(a,e,d),null;if(0>v){window.console&&console.error(a,d);if(-2===v)throw a;b=!1}else b=!a||!a.message||"Error loading script"===a.message||q>=l&&!m?!1:!0;if(!b)return null;q++;d=d||{};b=encodeURIComponent;var c="/gen_204?atyp=i&ei="+b(google.kEI);google.kEXPI&&(c+="&jexpid="+b(google.kEXPI));c+="&srcpg="+b(google.sn)+"&jsr="+b(t.jsr)+"&bver="+
b(t.bv);var f=a.lineNumber;void 0!==f&&(c+="&line="+f);var g=a.fileName;g&&(0<g.indexOf("-extension:/")&&(e=3),c+="&script="+b(g),f&&g===window.location.href&&(f=document.documentElement.outerHTML.split("\n")[f],c+="&cad="+b(f?f.substring(0,300):"No script
found.")));google.ple&&1===google.ple&&(e=2);c+="&jsel="+e;for(var u in d)c+="&",c+=b(u),c+="=",c+=b(d[u]);c=c+"&emsg="+b(a.name+": "+a.message);c=c+"&jsst="+b(a.stack||"N/A");12288<=c.length&&(c=c.substr(0,12288));a=c;m||google.log(0,"",a);return a};window
.onerror=function(a,b,d,m,e){r!==a&&(a=e instanceof Error?e:Error(a),void 0===d||"lineNumber"in a||(a.lineNumber=d),void 0===b||"fileName"in a||(a.fileName=b),google.ml(a,!1,void 0,!1,"SyntaxError"===a.name||"SyntaxError"===a.message.substring(0,11)||-1!==a
.message.indexOf("Script error")?3:0));r=null;p&&q>=l&&(window.onerror=null)};})();</script></head><body bgcolor="#fff"><script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}
if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}
}
})();</script><div id="mngb"><div id=gbar><nobr><b class=gb1>B?squeda</b> <a class=gb1 href="https://www.google.com/imghp?hl=es&tab=wi">Im?genes</a> <a class=gb1 href="https://maps.google.es/maps?hl=es&tab=wl">Maps</a> <a class=gb1 href="https://play.google
.com/?hl=es&tab=w8">Play</a> <a class=gb1 href="https://www.youtube.com/?tab=w1">YouTube</a> <a class=gb1 href="https://news.google.com/?tab=wn">Noticias</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive
.google.com/?tab=wo">Drive</a> <a class=gb1 style="text-decoration:none" href="https://www.google.es/intl/es/about/products?tab=wh"><u>M?s</u> »</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span
><span id=gbe></span><a href="http://www.google.es/history/optout?hl=es" class=gb4>Historial web</a> | <a href="/preferences?hl=es" class=gb4>Ajustes</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=es&passive=true&continue=h
ttps://www.google.com/&ec=GAZAAQ" class=gb4>Iniciar sesi?n</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div></div><center><br clear="all" id="lgpd"><div id="lga"><img alt="Google" height="92" src="/images/branding/googlel
ogo/1x/googlelogo_white_background_color_272x92dp.png" style="padding:28px 0 14px" width="272" id="hplogo"><br><br></div><form action="/search" name="f"><table cellpadding="0" cellspacing="0"><tr valign="top"><td width="25%"> </td><td align="center" no
wrap=""><input name="ie" value="ISO-8859-1" type="hidden"><input value="es" name="hl" type="hidden"><input name="source" type="hidden" value="hp"><input name="biw" type="hidden"><input name="bih" type="hidden"><div class="ds" style="height:32px;margin:4px 0
"><input class="lst" style="margin:0;padding:5px 8px 0 6px;vertical-align:top;color:#000" autocomplete="off" value="" title="Buscar con Google" maxlength="2048" name="q" size="57"></div><br style="line-height:0"><span class="ds"><span class="lsbb"><input cl
ass="lsb" value="Buscar con Google" name="btnG" type="submit"></span></span><span class="ds"><span class="lsbb"><input class="lsb" id="tsuid_1" value="Voy a tener suerte" name="btnI" type="submit"><script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){var id='tsuid_1';document.getElementById(id).onclick = function(){if (this.form.q.value){this.checked = 1;if (this.form.iflsig)this.form.iflsig.disabled = false;}
else top.location='/doodles/';};})();</script><input value="AO6bgOgAAAAAZVJHjC4b8hSHhdNsCs1NCRtjKnLUBEUt" name="iflsig" type="hidden"></span></span></td><td class="fl sblc" align="left" nowrap="" width="25%"><a href="/advanced_search?hl=es&authuser=0">B
?squeda avanzada</a></td></tr></table><input id="gbv" name="gbv" type="hidden" value="1"><script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){var a,b="1";if(document&&document.getElementById)if("undefined"!=typeof XMLHttpRequest)b="2";else if("undefined"!=typ
eof ActiveXObject){var c,d,e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(c=0;d=e[c++];)try{new ActiveXObject(d),b="2"}catch(h){}}a=b;if("2"==a&&-1==location.search.indexOf("&gbv=2")){var f=google.gbvu,g=document.getE
lementById("gbv");g&&(g.value=a);f&&window.setTimeout(function(){location.href=f},0)};}).call(this);</script></form><div id="gac_scont"></div><div style="font-size:83%;min-height:3.5em"><br><div id="prm"><style>.szppmdbYutt__middle-slot-promo{font-size:smal
l;margin-bottom:32px}.szppmdbYutt__middle-slot-promo a.ZIeIlb{display:inline-block;text-decoration:none}.szppmdbYutt__middle-slot-promo img{border:none;margin-right:5px;vertical-align:middle}</style><div class="szppmdbYutt__middle-slot-promo" data-ved="0ahU
KEwimuaitnsGCAxVvRkEAHXn9ChMQnIcBCAQ"><img alt="" height="32" src="https://www.google.com/images/hpp/get-certified.png" width="32"><span>F?rmate para trabajos demandados con el </span><a class="NKcBbd" href="https://www.google.com/url?q=https://grow.google/
intl/es/google-career-certificates/data-analytics/%3Futm_source%3DHPP%26utm_medium%3Downed%26utm_campaign%3DQ4_Nov_2023_EMEA_Data_Analytics_Cert_HPP%26utm_content%3D_Spain&source=hpp&id=19039495&ct=3&usg=AOvVaw2hYZFKM7WjlADC6iWcjwQb&sa=X
&ved=0ahUKEwimuaitnsGCAxVvRkEAHXn9ChMQ8IcBCAU" rel="nofollow">Certificado de An?lisis de Datos de Google</a></div></div><div id="gws-output-pages-elements-homepage_additional_languages__als"><style>#gws-output-pages-elements-homepage_additional_language
s__als{font-size:small;margin-bottom:24px}#SIvCob{color:#3c4043;display:inline-block;line-height:28px;}#SIvCob a{padding:0 3px;}.H6sW5{display:inline-block;margin:0 2px;white-space:nowrap}.z4hgWe{display:inline-block;margin:0 2px}</style><div id="SIvCob">Of
recido por Google en: <a href="https://www.google.com/setprefs?sig=0_NGWOVU7BNC5SAj6LAwH7Wg-Odjw%3D&hl=ca&source=homepage&sa=X&ved=0ahUKEwimuaitnsGCAxVvRkEAHXn9ChMQ2ZgBCAc">catal?</a> <a href="https://www.google.com/setprefs?sig=0_NGWOVU
7BNC5SAj6LAwH7Wg-Odjw%3D&hl=gl&source=homepage&sa=X&ved=0ahUKEwimuaitnsGCAxVvRkEAHXn9ChMQ2ZgBCAg">galego</a> <a href="https://www.google.com/setprefs?sig=0_NGWOVU7BNC5SAj6LAwH7Wg-Odjw%3D&hl=eu&source=homepage&sa=X&ved=0ahU
KEwimuaitnsGCAxVvRkEAHXn9ChMQ2ZgBCAk">euskara</a> </div></div></div><span id="footer"><div style="font-size:10pt"><div style="margin:19px auto;text-align:center" id="WqQANb"><a href="/intl/es/ads/">Publicidad</a><a href="http://www.google.es/intl/es/servic
es/">Soluciones Empresariales</a><a href="/intl/es/about.html">Todo acerca de Google</a><a href="https://www.google.com/setprefdomain?prefdom=ES&prev=https://www.google.es/&sig=K_xhqSGihRWg_rkEgS2QE7tCnOfUQ%3D">Google.es</a></div></div><p style="fon
t-size:8pt;color:#70757a">© 2023 - <a href="/intl/es/policies/privacy/">Privacidad</a> - <a href="/intl/es/policies/terms/">T?rminos</a></p></span></center><script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){window.google.cdo={height:757,width:1440};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b){var c=window.document,d="CSS1Compat"==c.compatMode?c.documentElement:c.body;a=d.clientWidth;b=d.clientHeight}
if(a&&b&&(a!=google.cdo.width||b!=google.cdo.height)){var e=google,f=e.log,g="/client_204?&atyp=i&biw="+a+"&bih="+b+"&ei="+google.kEI,h="",k=[],l=void 0!==window.google&&void 0!==window.google.kOPI&&0!==window.google.kOPI?window.google.kOPI:null;null!=l&&k.
push(["opi",l.toString()]);for(var m=0;m<k.length;m++){if(0===m||0<m)h+="&";h+=k[m][0]+"="+k[m][1]}f.call(e,"","",g+h)};}).call(this);})();</script> <script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){google.xjs={ck:'xjs.hp.KMpMd6qiBqo.L.X.O',combam:'CAAAAAA
AAAAAAAAAAAAAAAgAAAAARA2EQwAAAIBAAAgAAAABABCwQhRCMABAAACAESpAAAATICgBQAAiBYBZAAAJiAEAAAQAAME-AAAAAAQAAGAAAAACGgUwgBCoEBAAAABADgAADwAxCLAAAAAAAAAAAAAAQMASBIMLEgAAAQAAAAAAAAAAAAAAkJImDg',cs:'ACT90oHrovQb16gVSykd-e3BzNHr1Ed3GA',cssam:'AAAAAAAAAAAAAAAAAAAAAAgAA
AAARAiEAwAAAAAAAAgAAAABAACgAgBAMABAAACAAAAAAAAAICgBQAAiBQBAAAAJiAEAAAQAAEAAAAAAAAQAAEAAAAACCAQwgBAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAI',cssopt:false,csss:'ACT90oE2FIYNwzERpND90fDcO_G3ct_3fA',excm:[],sepam:false,sepcss:false};})()
;</script> <script nonce="qkDHpkn0sG83pJQBb3OFiQ">(function(){var u='/xjs/_/js/k\x3dxjs.hp.en.OEoyrI9eqms.O/am\x3dAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAADgAgQAAAAAAAAAAAEAAAHQEAsAAAFw/d\x3d1/ed\x3d1/rs\x3dACT90oEjbdtk6dVqiTDU7xOp93hfXUDwpA/m\x3dsb_he,d,cEt90b,SNUn3,qddgKe,sTsDMc,dtl0hd,eHDfl';var amd=0;
var e=this||self,f=function(a){return a};var g;var h=function(a){this.g=a};h.prototype.toString=function(){return this.g+""};var k={};var l=function(){var a=document;var b="SCRIPT";"application/xhtml+xml"===a.contentType&&(b=b.toLowerCase());return a.createElement(b)};
function m(a,b){a.src=b instanceof h&&b.constructor===h?b.g:"type_error:TrustedResourceUrl";var c,d;(c=(b=null==(d=(c=(a.ownerDocument&&a.ownerDocument.defaultView||window).document).querySelector)?void 0:d.call(c,"script[nonce]"))?b.nonce||b.getAttribute("
nonce")||"":"")&&a.setAttribute("nonce",c)};function n(a){a=null===a?"null":void 0===a?"undefined":a;if(void 0===g){var b=null;var c=e.trustedTypes;if(c&&c.createPolicy){try{b=c.createPolicy("goog#html",{createHTML:f,createScript:f,createScriptURL:f})}catch
(d){e.console&&e.console.error(d.message)}g=b}else g=b}a=(b=g)?b.createScriptURL(a):a;return new h(a,k)};void 0===google.ps&&(google.ps=[]);function p(){var a=u,b=function(){};google.lx=google.stvsc?b:function(){q(a);google.lx=b};google.bx||google.lx()}func
tion r(a,b){b&&m(a,n(b));var c=a.onload;a.onload=function(d){c&&c(d);google.ps=google.ps.filter(function(t){return a!==t})};google.ps.push(a);document.body.appendChild(a)}google.as=r;function q(a){google.timers&&google.timers.load&&google.tick&&google.tick(
"load","xjsls");var b=l();b.onerror=function(){google.ple=1};b.onload=function(){google.ple=0};google.xjsus=void 0;r(b,a);google.aple=-1;google.psa=!0};google.xjsu=u;e._F_jsUrl=u;setTimeout(function(){0<amd?google.caft(function(){return p()},amd):p()},0);})
();window._ = window._ || {};window._DumpException = _._DumpException = function(e){throw e;};window._s = window._s || {};_s._DumpException = _._DumpException;window._qs = window._qs || {};_qs._DumpException = _._DumpException;(function(){var t=[1,0,0,0,134217728,16777216,57344,4104,536870912,4194304,1167360,11264,23];window._F_toggles = window._xjs_toggles = t;})();function _F_installCss(c){}
(function(){google.jl={blt:'none',chnk:0,dw:false,dwu:true,emtn:0,end:0,ico:false,ikb:0,ine:false,injs:'none',injt:0,injth:0,injv2:false,lls:'default',pdt:0,rep:0,snet:true,strt:0,ubm:false,uwp:true};})();(function(){var pmc='{\x22d\x22:{},\x22sb_he\x22:{\x
22agen\x22:false,\x22cgen\x22:false,\x22client\x22:\x22heirloom-hp\x22,\x22dh\x22:true,\x22ds\x22:\x22\x22,\x22fl\x22:true,\x22host\x22:\x22google.com\x22,\x22jsonp\x22:true,\x22lm\x22:true,\x22msgs\x22:{\x22cibl\x22:\x22Borrar b\\u00fasqueda\x22,\x22dym\x2
2:\x22Quiz\\u00e1s quisiste decir:\x22,\x22lcky\x22:\x22Voy a tener suerte\x22,\x22lml\x22:\x22M\\u00e1s informaci\\u00f3n\x22,\x22psrc\x22:\x22Esta b\\u00fasqueda se ha eliminado de tu \\u003Ca href\x3d\\\x22/history\\\x22\\u003Ehistorial web\\u003C/a\\u00
3E.\x22,\x22psrl\x22:\x22Eliminar\x22,\x22sbit\x22:\x22Buscar por imagen\x22,\x22srch\x22:\x22Buscar con Google\x22},\x22ovr\x22:{},\x22pq\x22:\x22\x22,\x22rfs\x22:[],\x22sbas\x22:\x220 3px 8px 0 rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.08)\x22,\x22stok\x22:\x22pWRKa8FsS6ydQeUf9cH_T6sc4Ow\x22}}';google.pmc=JSON.parse(pmc);})();(function(){var b=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}};
var e=this||self;var g,h;a:{for(var k=["CLOSURE_FLAGS"],l=e,n=0;n<k.length;n++)if(l=l[k[n]],null==l){h=null;break a}h=l}var p=h&&h[610401301];g=null!=p?p:!1;var q,r=e.navigator;q=r?r.userAgentData||null:null;function t(a){return g?q?q.brands.some(function(c
){return(c=c.brand)&&-1!=c.indexOf(a)}):!1:!1}function u(a){var c;a:{if(c=e.navigator)if(c=c.userAgent)break a;c=""}return-1!=c.indexOf(a)};function v(){return g?!!q&&0<q.brands.length:!1}function w(){return u("Safari")&&!(x()||(v()?0:u("Coast"))||(v()?0:u(
"Opera"))||(v()?0:u("Edge"))||(v()?t("Microsoft Edge"):u("Edg/"))||(v()?t("Opera"):u("OPR"))||u("Firefox")||u("FxiOS")||u("Silk")||u("Android"))}function x(){return v()?t("Chromium"):(u("Chrome")||u("CriOS"))&&!(v()?0:u("Edge"))||u("Silk")}function y(){retu
rn u("Android")&&!(x()||u("Firefox")||u("FxiOS")||(v()?0:u("Opera"))||u("Silk"))};var z=v()?!1:u("Trident")||u("MSIE");y();x();w();Object.freeze({});var A=!z&&!w(),D=function(a){if(/-[a-z]/.test("ved"))return null;if(A&&a.dataset){if(y()&&!("ved"in a.datase
t))return null;a=a.dataset.ved;return void 0===a?null:a}return a.getAttribute("data-"+"ved".replace(/([A-Z])/g,"-$1").toLowerCase())};var E=[],F=null;function G(a){a=a.target;var c=performance.now(),f=[],H=f.concat,d=E;if(!(d instanceof Array)){var m="undef
ined"!=typeof Symbol&&Symbol.iterator&&d[Symbol.iterator];if(m)d=m.call(d);else if("number"==typeof d.length)d={next:b(d)};else throw Error("a`"+String(d));for(var B=[];!(m=d.next()).done;)B.push(m.value);d=B}E=H.call(f,d,[c]);if(a&&a instanceof HTMLElement)if(a===F){if(c=4<=E.length)c=5>(E[E.length-1]-E[E.length-4])/1E3;if(c){c=google.getEI(a);a.hasAttribute("data-ved")?f=a?D(a)||"":"":f=(f=
a.closest("[data-ved]"))?D(f)||"":"";f=f||"";if(a.hasAttribute("jsname"))a=a.getAttribute("jsname");else{var C;a=null==(C=a.closest("[jsname]"))?void 0:C.getAttribute("jsname")}google.log("rcm","&ei="+c+"&ved="+f+"&jsname="+(a||""))}}else F=a,E=[c]}window.document.addEventListener("DOMContentLoaded",function(){document.body.addEventListener("click",G)});}).call(this);</script></body></html>
Reading Lines From Internet
You can use netw.readLineFileFromInternet for reading a specified line of a file on Internet.
Warning: Java 21^ must be installed to use this function.
Added in: v_1.0
Usage on v_1.0^
main.epi file:
var output null
// 2 sets the line to read
netw.readLineFileFromInternet("https://www.google.es 2", "output")
print(var(output))
Output:
var h=this||self;function l(){return void 0!==window.google&&void 0!==window.google.kOPI&&0!==window.google.kOPI?window.google.kOPI:null};var m,n=[];function p(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));)a=a.parentNode;return b||m}function q(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute("leid")));)a=a.parentNode;return b}function r(a){/^http:/i.test(a)&&"https:"===window.location.protocol&&(google.ml&&google.ml(Error("a"),!1,{src:a,glmm:1}),a="");return a}
String Methods
Now you can modify strings using String Methods
Added in: v_1.0, Updated in: v_1.2
Usage on: v_1.2^
It's actually the same but instead of calling them as a function you can call the like this:
var myString Hello World!
print(myString.length())
Output:
12
We also deleted delStr function because they are the same as .replace("myQuery", "").
Usage on v_1.0 -> v_1.1
| Name | Returns | Comments | Throws | Example | Output |
|---|---|---|---|---|---|
= |
String | Modifies the String content | nothing | var greeting Good Morning |
Good Afternoon |
substr |
String | Cuts the string using the two arguments and sets it to the variable | IntegerOrString, WhoaBigger or IndexOutOfBounds |
var greeting Good Morning |
Good |
find |
int | Finds the argument on the variable | nothing | var greeting Good Morning |
0 |
index |
String | Finds the character on the String using the index of the argument | IntegerOrString or IndexOutOfBounds |
var greeting Good Morning |
G |
del |
String | Makes the variable empty | nothing | var greeting Good Morning |
|
delStr |
String | Deletes a String from a String | nothing | var greeting Good Morning |
Good |
add |
String | Adds the String on a determinated position | IntegerOrString or IndexOutOfBounds |
var greeting Good Morning |
Very Good Morning |
contains |
Boolean | Checks if inside the variable there's the determinated String | nothing | var greeting Good Morning |
1 |
encrypt |
String[en] | Encrypts the variable using as key the argument | nothing | var greeting Good Morning |
&♣A,♠ |
decrypt |
String | Decrypts the variable using the key specified on the arguments | nothing | var greeting Good Morning |
Good Morning |
isNum |
Boolean | Checks if the variable is a number | nothing | var pi 3.14 |
1 |
isBool |
Boolean | Checks if the variable is a boolean | nothing | var true 1 |
1 |
isEmpty |
Boolean | Checks if the variable is empty | nothing | var meme hehehehee |
1 |
replace |
String | Replaces some text from the variable | nothing | var isNight Good Morning |
Good Night |
forgive |
void | Deletes the variable from memory | nothing | var pi 3.14 |
*Program Crashes* |
indize |
String[i] | Splits the variable using a pattern | IntegerOrString or IndexOutOfBounds |
var users ;cat;dog;chicken; |
cat |
length |
int | Returns the length of the variable | nothing | var greeting hello |
5 |
Visual Elements
This commands could help the user to read better your program.
Warning: Some commands like puc don't work in professional cmd(old one), use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Warning: gotoxy command doesn't work in professional cmd(old one) because uit uses a special character to move the cursor, use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Added in: v_1.0, Updated in: v_1.2
Usage on v_1.2^
cmwSizeX and cmwSizeY commands:
With this commands you can get the screen resulution as chars.
main.epi file:
// First define the variables to store the data
var xRes null
var yRes null
// Now we call the cmwSizeX and cmwSizeY commands for getting the resolution
cmwSizeX("xRes")
cmwSizeY("yRes")
// Print the result
print("Chars for width: " + var(xRes))
print("Chars for height: " + var(yRes))
Output:
Chars for width: 188
Chars for height: 23
Usage on v_1.0^
puc command:
With this command you can change the terminal color.
For text color(is not neccesary to put which color is displayed):
- red_text
- blue_text
- green_text
- purple_text
- yellow_text
- black_text
- cyan_text
- white_text
Usage:
puc(colorToBeDisplayed)
Example:
puc("red_text")
print("a")
Output:
a
For background color:
- red_background
- blue_background
- green_background
- purple_background
- yellow_background
- black_background
- cyan_background
- white_background
Usage:
puc(colorToBeDisplayed)
Example:
puc("red_background")
print("a")
Output:
a
You can use reset color for reseting the output color.
clear command:
Clear command can be used for cleaning all the text on the screen.
Example:
print("a")
clear()
Output:
gotoxy command:
When you run this command it moves the writing cursor to a determinated x and y.
Example:
gotoyx(2,2)
print("I'm at x:2 y:2")
Output:
I'm at x:2 y:2
Random
With random command you can generate random numbers.
Added in: v_1.0
Usage on v_1.0^
main.epi file:
var storage null
random("storage", 0, 10)
print(var(storage))
In this example, storage variable stores the output of the random functions using 0 as the min and 10 as the max.
Output:
NumbersBetween0and10
Variable Functions
This function was added on 1.0 for running functions with less code.
Added in: v_1.0
Usage on v_1.0^
main.epi file:
var function null
openFunction("function")
print("hi")
closeFunction()
function()
Output:
hi
Boolean Functions
This are functions with different funcionalities thta return 1 if true and 0 if false.
Added in: v_1.0 (I didn't marked it on relase notes but it works on this version)
Usage on v_1.0^
main.epi file:
// First we will compare a few Strings
var str1 hello
var str2 bye
var str3 hello
print("str1 == str3: " + ieq(var(str1), var(str3)))
print("str1 == str2: " + ieq(var(str1), var(str2)))
print("str1 != str3: " + inq(var(str1), var(str3)))
print("str1 != str2: " + inq(var(str1), var(str2)))
// Now we're going to compare numbers
var num1 1
var num2 2
var num3 3
var num4 4
print("num1 < num2: " + ilt(var(num1), var(num2)))
print("num1 <= num2: " + ilq(var(num1), var(num2)))
print("num4 > num3: " + ihi(var(num4), var(num3)))
print("num4 >= num3: " + ihq(var(num4), var(num3)))
print("num1 > num2: " + ihi(var(num1), var(num2)))
print("num1 >= num2: " + ihq(var(num1), var(num2)))
print("num4 < num3: " + ilt(var(num4), var(num3)))
print("num4 <= num3: " + ilq(var(num4), var(num3)))
Output:
str1 == str3: 1
str1 == str2: 0
str1 != str3: 0
str1 != str2: 1
num1 < num2: 1
num1 <= num2: 1
num4 > num3: 1
num4 >= num3: 1
num1 > num2: 0
num1 >= num2: 0
num4 < num3: 0
num4 <= num3: 0
Char Functions
This functions are usseful for working with chars.
Added in: v_1.1
Usage on v_1.1^
main.epi file:
// First we will declarate the storing variable
var output1 null
var output2 null
// Now we will get character with code 200 and save it on output1
getchN(100, "output1")
// And now we get the code form the character 'a'
getchC("a", "output2")
// Lets check the result
print("(char)200: " + var(output1))
print("(int)'a': " + var(output2))
Output:
(char)200: d
(int)'a': 97
Arrays
With arrays you can store items inside a variable.
Added in: v_1.1
Usage on v_1.1^
main.epi file:
var arr null
initArr("arr", 10)
editArr("arr", 2, "good morning")
editArr("arr", 2, "sweet nights")
print(getArr("arr", 2))
// This should print "sweet nights"
Output:
sweet nights
Explanation:
initArr():
initArr("arr", 10) - This selects the variable to transform into an Array.
initArr("arr", 10) - This selects the length of the array.
editArr():
editArr("arr", 2, "good morning") - This selects the Array to edit.
editArr("arr", 2, "good morning") - This selects the index of the Array to modify.
editArr("arr", 2, "good morning") - This is the text to add in the specified index.
getArr():
print(getArr("arr", 2)) - This selects the array to read.
print(getArr("arr", 2)) - This selects the index to read.
Import from external files
If you're the kind of perosn who likes having one function in each file, import function would be the favourite for you.
With this command you can import variables, functions and also run code from other .epi file.
Added in: v_1.2
Usage on v_1.2^
main.epi file:
import("sayhi.epi")
sayHi()
sayhi.epi file:
var sayHi null
openFunction("sayHi")
print("I'm saying hi")
closeFunction()
Output:
I'm saying hi
Import from utils.epi file
In this file we've wroten some functions on epi for you to don't writing them again.
Added in: v_1.2
Usage on v_1.2^
prog.pause() function:
main.epi file:
import("utils.epi")
prog.pause()
Output:
Press any key to continue . . .
sleep command.
With this command you can determinate how much miliseconds you want to stop the program.
Added in: v_1.2
Usage on v_1.2^
main.epi file:
print("I'm back in two seconds. . .")
sleep(2000)
print("I'm back!")
Output:
I'm back in two seconds. . .
I'm back!
Epi Variables
This variables are for you to getting information about the program.
You can modify them at C:/Program Files(x86)/epi-v_yourepiversion/var.epivar file.
Added in: v_1.2
Usage on v_1.2^
main.epi file:
print("Epi path: " + %EPIPATH%)
Output:
C:/Program Files(x86)/epi-v_yourepiversion/
Install epi v_1.luc1
- Download epi v_1.luc1 in download page.
- Run the setup. It may warn you that our software is insecure(It isn't). Click on Show details and run anyways.
- Select for who do you want to install epi.
- Select the language to install.
- Read and accept the license.
- Read important info about epi.
- Select where tp install epi(I don't recommend you touching it because epi is prepared to be installed at a single location)
- Select if you want to create desktop shortcut to epi.
- Click on install.
- Click on run epi and close. Check if you have the last version installed and run "nowwhat".
- Complete all the tests.
- If you have done all the things it asked for you, epi should be configurated and ready to use!
What is epi?
Epi is an easy programming language made in C++ using eLite NT code. It's light and easy to understand.
It is updated every month with major upgrades.
I wish you like it ;)
How to compile a file
In this tutorial I'll show you how to compile a .epi file.
- Create a file called
hello.epiin your preferred code editor. - On it write
print("Hello World!") - Open terminal and go to your folder in where you created your
.epifile. - Write
epi hello.epiand press enter. - And that's how do you create and compile an
.epifile.
Print command
You can use the print command to print text on the screen.
Example:
print("Hello World!")
User Input
You can use the in commands to get some text the user entered.
in Example:
String username
in("Enter username:", "username")
print("Hello, " + str(username))
You can use the in command for all types of variables.
Variables - Numbers
You can use the Number keyword for creating a variable which contains numbers.
Number Example:
Number myInt
setva("myInt", "1")
print("myInt Value: " + num(myInt))
setva function updates the value of the variable.
Variables - Strings
You can use the String keyword for creating a variable which contains text or a character.
String Example:
String myString
setva("myString", "Hello World!")
print("myString Value: " + str(myString))
setva function updates the value of the variable.
Variables - Booleans
You can use the boolean keyword for creating a variable which contains 0 or 1.
boolean Example:
boolean myBoolean
setva("myBoolean", "1")
print("myBoolean Value: " + bol(myBoolean))
setva function updates the value of the variable.
Variables - Files
You can use the File keyword for creating a variable which contains data for working with files.
File Example:
File myFile
Note: You will learn how to work with files in the File Working section.
Variables - Functions
You can use the function keyword for creating a runneable function.
function Example:
function myFunction
Note: You will learn how to work with files in the Functions section.
File Working
With this functions you can read, write or delete files.
Writing on a file
For writing on a file you need to create a File variable and open the file which you want to write.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("Hello World!")
That should create a file named hello.txt and write inside it Hello World!.
Reading a file
For reading a file you need to open the file and call a function that reads the file.
If you runned the last code you might not have errors but if not create a file called hello.txt and write inside it whathever you want.
Example:
File myFile
myFile.open("hello.txt")
print("hello.txt contents: " + myFile.read())
Reading a line form a file and writing multiline files
Using \n character you can make a new line in a file while writing it. Using .readLine() function you can select which line do you want to read from the file.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("good\nmorning\nto\nyou")
print(myFile.readLine(3))
Note: You can't use .readLine twice in a line. Run it one time in a variable and then concatenate them.
Deleting files
You can also delete files using .delete() function.
Example:
File myFile
myFile.open("hello.txt")
myFile.delete()
Time Functions
With this functions you can get time and date easily.
Getting all the date as this format: HH:MM.SS,MMM DD/MM/YY
Example:
print(date.getHours() + ":" + date.getMinutes() + "." + date.getSeconds() + "," + date.getMilliseconds() + " " + date.getDay() + "/" + date.getMonth() + "/" + date.getYear())
Output:
17:29.43,878 14/12/2023
Getch Function
With this function you make the program wait until user press one key and get which key pressed.
Example:
print("Waiting to user press a key. . .")
print("User pressed: " + getch())
Print Compact
This function is like print function but it doesn't create a new line after printing.
Example:
printc("good ")
print("morning")
Output:
good morning
Networking
With this functions you can send text between computers. This is usseful if you want to create an instant messaging program.
Warning: Java 21^ must be installed to use this function.
Creating a "server" to recieve text
Using netw.createServer you create a connection using a port and store the message in a variable, in this case txt.
Example Main.epi:
String txt
netw.createServer("2567", "txt")
print("Recieved text: " + str(txt))
Sending text to the server
Using netw.createConection you can send some text to the server you created. In this case hi is the message to be sent and 2567 is the port where you created the server. The text supersecretip is the ip from where you created the connection.
Example Send.epi:
String text
netw.createConection("2567 supersecretip hi", "text")
Cmos
With this function you can run cmd commands.
Syntax:
cmos.commandToRun(arguments)
Example:
cmos.gcc("--version")
Output:
gcc.exe (Rev6, Built by MSYS2 project) 13.1.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Functions
Functions are variables which stores code to be runned when called.
For define a function you need to use function keyboard and later start it.
Example:
function myFunction
myFunction.start()
print("hello")
closeFunction()
myFunction()
Dialogs
With this functions you can create dialogs for the user pressing a button or making the user informating of something.
Warning: Java 21^ must be installed to use this function.
Creating normal dialogs
There are three types of dialogs:showMessage A dialog with an info iconshowWarning A dialog with an warning iconshowError A dialog with an error icon
Here is the use:
showMessage:
String output
// output variable might be required to troubleshotign
gui.showMessage("message title", "output")
Output:
showWarning
:
String output
// output variable might be required to troubleshotign
gui.showWarning("message title", "output")
Output:
showError
:
String output
// output variable might be required to troubleshotign
gui.showError("message title", "output")
Output:
Creating user-input dialogs
String username
// You can't enter spaces on dialogs (maybe later yes) *username variable stores the entered text
gui.requestInput("Username Login", "username")
print(str(username))
Output:
Note: You can add spaces to the dialogs by using _ character.
Creatign multi-awnser dialogs
Now with gui.showMessageOptions, gui.showErrorOptions and gui.showWarningOptions you can create dialogs with more buttons and also store output as a number(index) or get -1 if the user closed the dialog.
Example:
String output
gui.showMessageOptions("Select_an_option Select Print0~Print1~Print2", "output")
print(output.getValue())
Output:
Loops
Warning: This function wasn't prepared to be fixed in this function. Wait until v_1.luc2
If
Warning: This function wasn't prepared to be fixed in this function. Wait until v_1.luc2
Images
In epi you can transform images to text by setting one character for each pixel's color.
Warning: Java 21^ must be installed to use this function.
Example:
String output
img.imageToTxt("icon.png", "output")
print(str(output))
Working with internet files
You can read files that are uploaded on internet or you can select which line do you want to read of a file.
Warning: Java 21^ must be installed to use this function.
Examples:
Reading a internet file and save it to a String
String output
netw.readFileFromInternet("https://elitees.github.io/epi/", "output")
print(str(output))
Reading a line from a internet file
String output
// 2 sets the line to read
netw.readLineFileFromInternet("https://elitees.github.io/epi/ 2", "output")
print(str(output))
Working with Strings
There are some functions that return a value from a String.
Here's a table for you to viewing them:
| Name | Returns | Comments | Throws | Example | Output |
|---|---|---|---|---|---|
setva |
String | Modifies the String content | nothing |
String helloWorld |
This prints nothing: |
substring |
String | Cuts the string using the two arguments and sets it to the variable | IntegerOrString, WhoaBigger or IndexOutOfBounds |
String greeting |
Hello |
find |
int | Finds the argument on the variable | nothing |
String greeting |
4 |
index |
String | Finds the character on the String using the index of the argument | IntegerOrString or IndexOutOfBounds |
String greeting |
o |
del |
String | Makes the variable empty | nothing |
String greeting |
This prints nothing: |
add |
String | Adds the String on a determinated position | IntegerOrString or IndexOutOfBounds |
String greeting |
Hello World! How are you doing today? |
contains |
Boolean | Checks if inside the variable there's the determinated String | nothing |
String greeting |
greeting contains 'Hello'?: 1 |
encrypt |
String[en] | Encrypts the variable using as key the argument | nothing |
String greeting |
Encrypted text: %∟ ▬M.♦↨§ X |
decrypt |
String | Decrypts the variable using the key specified on the arguments | nothing |
String greeting |
Encrypted text: %∟ ▬M.♦↨§ X |
isNum |
Boolean | Checks if the variable is a number | nothing |
String greeting |
'greeting' is a number?: 0
'pi' is a number?: 1
|
isBool |
Boolean | Checks if the variable is a boolean | nothing |
String greeting |
'greeting' is a Boolean?: 0 |
isEmpty |
Boolean | Checks if the variable is empty | nothing |
String greeting |
Is 'greeting' empty?: 0 |
replace |
String | Replaces some text from the variable | nothing |
String greeting |
Hello Universe! |
indize |
String[i] | Splits the variable using a pattern | IntegerOrString or IndexOutOfBounds |
String users
setva("users", ";cat;dog;chicken;")
print("User no.1: " + users.indize(";", 0))
|
User no.1: cat |
length |
int | Returns the length of the variable | nothing |
String greeting |
Length of the String: 12 |
Visual Elements
This commands could help the user to read better your program.
Warning: Some commands like puc don't work in professional cmd(old one), use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Warning: gotoxy command doesn't work in professional cmd(old one) because uit uses a special character to move the cursor, use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Warning: cmwSizeX and cmwSizeY functions weren't prepared to be fixed in this function. Wait until v_1.luc2
Examples:
puc command:
With this command you can change the terminal color.
For text color(is not neccesary to put which color is displayed):
- red_text
- blue_text
- green_text
- purple_text
- yellow_text
- black_text
- cyan_text
- white_text
Usage:
puc(colorToBeDisplayed)
Example:
puc("red_text")
print("a")
Output:
a
For background color:
- red_background
- blue_background
- green_background
- purple_background
- yellow_background
- black_background
- cyan_background
- white_background
Usage:
puc(colorToBeDisplayed)
Example:
puc("red_background")
print("a")
Output:
a
You can use reset color for reseting the output color.
clear command:
Clear command can be used for cleaning all the text on the screen.
Example:
print("a")
clear()
Output:
gotoxy command:
When you run this command it moves the writing cursor to a determinated x and y.
Example:
gotoyx(2,2)
print("I'm at x:2 y:2")
Output:
I'm at x:2 y:2
Random Numbers
Warning: This function wasn't prepared to be fixed in this function. Wait until v_1.luc2
Boolean Functions
This are some functions that are usseful for comparing variables and store the result as 0 false and 1 if true.
// First we will compare a few Strings
String str1
String str2
String str3
setva("str1", "hello")
setva("str2", "bye")
setva("str3", "hello")
print("str1 == str3: " + ieq(str(str1), str(str3)))
print("str1 == str2: " + ieq(str(str1), str(str2)))
print("str1 != str2: " + ieq(str(str1), str(str2)))
print("str1 != str3: " + ieq(str(str1), str(str3)))
// And now we compare some numbers
Number num1
Number num2
Number num3
Number num4
setva("num1", "1")
setva("num2", "2")
setva("num3", "3")
setva("num4", "4")
print("num1 < num2: " + ilt(num(num1), num(num2)))
print("num1 <= num2: " + ilq(num(num1), num(num2)))
print("num4 > num3: " + ihi(num(num4), num(num3)))
print("num4 >= num3: " + ihq(num(num4), num(num3)))
print("num1 > num2: " + ihi(num(num1), num(num2)))
print("num1 >= num2: " + ihq(num(num1), num(num2)))
print("num4 < num3: " + ilt(num(num4), num(num3)))
print("num4 <= num3: " + ilq(num(num4), num(num3)))
Output:
str1 == str3: 1
str1 == str2: 0
str1 != str2: 0
str1 != str3: 1
num1 < num2: 1
num1 <= num2: 1
num4 > num3: 1
num4 >= num3: 1
num1 > num2: 0
num1 >= num2: 0
num4 < num3: 0
num4 <= num3: 0
Char Functions
Warning: This function wasn't prepared to be fixed in this function. Wait until v_1.luc2
Arrays
Warning: This function wasn't prepared to be fixed in this function. Wait until v_1.luc2
"import" Command
If you're the kind of person that likes everything clear and in separeated on files, this must be your favourite function! With this function you can import variables, functions and run code from another file.
Example:
Main.epi file:
import("Sub.epi")
askForAuth()
print("Hello, " + str(username) + "!")
Sub.epi file:
function askForAuth
String username
askForAuth.start()
printc("username: ")
setva("username", inp())
closeFunction()
Sleep Command
With this function you can say to the program to wait some milliseconds to run the next line.
Example:
print("I'm back in two seconds. . .")
sleep(2000)
print("I'm back!")
Output:
I'm back in two seconds. . .
I'm back!
Arguments
Arguments are text added after calling the program. Example: myprog imAnArgument
In epi you can get the arguments and how the program is called by usign arg function.
Example:
print("How do you called the program: " + arg(0))
print("Argument 1 (filename): " + arg(1))
print("Argument 2: " + arg(2))
And compile the file like this: epi myFile.epi "Hello World!"
Output:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: Hello World!
If you don't add any argument, in this case argument 2, the output would be like this:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: arg(2)
What is epi?
Epi is an easy programming language made in C++ using eLite NT code. It's light and easy to understand.
It is updated every month with major upgrades.
I wish you like it ;)
Install epi v_1.luc1
- Download epi v_1.luc2 in download page.
- Run the setup. It may warn you that our software is insecure(It isn't). Click on Show details and run anyways.
- Select for who do you want to install epi.
- Select the language to install.
- Read and accept the license.
- Read important info about epi.
- Select where tp install epi(I don't recommend you touching it because epi is prepared to be installed at a single location)
- Select if you want to create desktop shortcut to epi.
- Click on install.
- Click on run epi and close. Check if you have the last version installed and run "nowwhat".
- Complete all the tests.
- If you have done all the things it asked for you, epi should be configurated and ready to use!
How to compile a file
In this tutorial I'll show you how to compile a .epi file.
- Create a file called
hello.epiin your preferred code editor. - On it write
print("Hello World!") - Open terminal and go to your folder in where you created your
.epifile. - Write
epi hello.epiand press enter. - And that's how do you create and compile an
.epifile.
Print command
You can use the print command to print text on the screen.
Example:
print("Hello World!")
User Input
You can use the in commands to get some text the user entered.
in Example:
String username
in("Enter username:", "username")
print("Hello, " + str(username))
You can use the in command for all types of variables.
Variables - Numbers
You can use the Number keyword for creating a variable which contains numbers.
Number Example:
Number myInt = 89
print("Old Value: " + @myInt)
myInt = 100
print("myInt new Value: " + @myInt)
Variables - Strings
You can use the String keyword for creating a variable which contains text or a character.
String Example:
String myString = "Hello World!"
print("Old myString Value: " + @myString)
myString = "Hello Universe!"
print("myString New Value: " + @myString)
Variables - Booleans
You can use the boolean keyword for creating a variable which contains 0 or 1.
boolean Example:
boolean myBoolean = 1
print("myBoolean Old Value: " + @myBoolean)
myBoolean = 0
print("myBoolean New Value: " + @myBoolean)
Variables - Files
You can use the File keyword for creating a variable which contains data for working with files.
File Example:
File myFile
Note: You will learn how to work with files in the File Working section.
Variables - Functions
You can use the function keyword for creating a runneable function.
function Example:
function myFunction
Note: You will learn how to work with files in the Functions section.
File Working
With this functions you can read, write or delete files.
Writing on a file
For writing on a file you need to create a File variable and open the file which you want to write.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("Hello World!")
That should create a file named hello.txt and write inside it Hello World!.
Reading a file
For reading a file you need to open the file and call a function that reads the file.
If you runned the last code you might not have errors but if not create a file called hello.txt and write inside it whathever you want.
Example:
File myFile
myFile.open("hello.txt")
print("hello.txt contents: " + myFile.read())
Reading a line form a file and writing multiline files
Using \n character you can make a new line in a file while writing it. Using .readLine() function you can select which line do you want to read from the file.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("good\nmorning\nto\nyou")
print(myFile.readLine(3))
Note: You can't use .readLine twice in a line. Run it one time in a variable and then concatenate them.
Deleting files
You can also delete files using .delete() function.
Example:
File myFile
myFile.open("hello.txt")
myFile.delete()
Time Functions
With this functions you can get time and date easily.
Getting all the date as this format: HH:MM.SS,MMM DD/MM/YY
Example:
print(date.getHours() + ":" + date.getMinutes() + "." + date.getSeconds() + "," + date.getMilliseconds() + " " + date.getDay() + "/" + date.getMonth() + "/" + date.getYear())
Output:
17:29.43,878 14/12/2023
Getch Function
With this function you make the program wait until user press one key and get which key pressed.
Example:
print("Waiting to user press a key. . .")
print("User pressed: " + getch())
Print Compact
This function is like print function but it doesn't create a new line after printing.
Example:
printc("good ")
print("morning")
Output:
good morning
Networking
With this functions you can send text between computers. This is usseful if you want to create an instant messaging program.
Warning: Java 21^ must be installed to use this function.
Creating a "server" to recieve text
Using netw.createServer you create a connection using a port and store the message in a variable, in this case txt.
Example Main.epi:
String txt
netw.createServer("2567", "txt")
print("Recieved text: " + str(txt))
Sending text to the server
Using netw.createConection you can send some text to the server you created. In this case hi is the message to be sent and 2567 is the port where you created the server. The text supersecretip is the ip from where you created the connection.
Example Send.epi:
String text
netw.createConection("2567 supersecretip hi", "text")
Cmos
With this function you can run cmd commands.
Syntax:
cmos.commandToRun(arguments)
Example:
cmos.gcc("--version")
Output:
gcc.exe (Rev6, Built by MSYS2 project) 13.1.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Functions
Functions are variables which stores code to be runned when called.
For define a function you need to use function keyboard and later start it.
Example:
function myFunction
myFunction.start()
print("hello")
closeFunction()
myFunction()
Dialogs
With this functions you can create dialogs for the user pressing a button or making the user informating of something.
Warning: Java 21^ must be installed to use this function.
Creating normal dialogs
There are three types of dialogs:showMessage A dialog with an info iconshowWarning A dialog with an warning iconshowError A dialog with an error icon
Here is the use:
showMessage:
String output
// output variable might be required to troubleshotign
gui.showMessage("message title", "output")
Output:
showWarning
:
String output
// output variable might be required to troubleshotign
gui.showWarning("message title", "output")
Output:
showError
:
String output
// output variable might be required to troubleshotign
gui.showError("message title", "output")
Output:
Creating user-input dialogs
String username
// You can't enter spaces on dialogs (maybe later yes) *username variable stores the entered text
gui.requestInput("Username Login", "username")
print(str(username))
Output:
Note: You can add spaces to the dialogs by using _ character.
Creatign multi-awnser dialogs
Now with gui.showMessageOptions, gui.showErrorOptions and gui.showWarningOptions you can create dialogs with more buttons and also store output as a number(index) or get -1 if the user closed the dialog.
Example:
String output
gui.showMessageOptions("Select_an_option Select Print0~Print1~Print2", "output")
print(output.getValue())
Output:
Loops
With this loops you can run code the times you select.
Example:
repeat(10, print("Hello World"))
If
Warning: This function wasn't prepared to be fixed in this function. Wait until v_1.luc2
With this function you can run some code if the first argument is 1 that is true or run other code if 0 that is false.
boolean true = 1
if(ieq(@true,1), print("true is 1"), print("true is other thing"))
Images
In epi you can transform images to text by setting one character for each pixel's color.
Warning: Java 21^ must be installed to use this function.
Example:
String output
img.imageToTxt("icon.png", "output")
print(str(output))
Working with internet files
You can read files that are uploaded on internet or you can select which line do you want to read of a file.
Warning: Java 21^ must be installed to use this function.
Examples:
Reading a internet file and save it to a String
String output
netw.readFileFromInternet("https://elitees.github.io/epi/", "output")
print(str(output))
Reading a line from a internet file
String output
// 2 sets the line to read
netw.readLineFileFromInternet("https://elitees.github.io/epi/ 2", "output")
print(str(output))
Working with Strings
There are some functions that return a value from a String.
Here's a table for you to viewing them:
| Name | Returns | Comments | Throws | Example | Output |
|---|---|---|---|---|---|
setva |
String | Modifies the String content | nothing |
String helloWorld |
This prints nothing: |
substring |
String | Cuts the string using the two arguments and sets it to the variable | IntegerOrString, WhoaBigger or IndexOutOfBounds |
String greeting |
Hello |
find |
int | Finds the argument on the variable | nothing |
String greeting |
4 |
index |
String | Finds the character on the String using the index of the argument | IntegerOrString or IndexOutOfBounds |
String greeting |
o |
del |
String | Makes the variable empty | nothing |
String greeting |
This prints nothing: |
add |
String | Adds the String on a determinated position | IntegerOrString or IndexOutOfBounds |
String greeting |
Hello World! How are you doing today? |
contains |
Boolean | Checks if inside the variable there's the determinated String | nothing |
String greeting |
greeting contains 'Hello'?: 1 |
encrypt |
String[en] | Encrypts the variable using as key the argument | nothing |
String greeting |
Encrypted text: %∟ ▬M.♦↨§ X |
decrypt |
String | Decrypts the variable using the key specified on the arguments | nothing |
String greeting |
Encrypted text: %∟ ▬M.♦↨§ X |
isNum |
Boolean | Checks if the variable is a number | nothing |
String greeting |
'greeting' is a number?: 0
'pi' is a number?: 1
|
isBool |
Boolean | Checks if the variable is a boolean | nothing |
String greeting |
'greeting' is a Boolean?: 0 |
isEmpty |
Boolean | Checks if the variable is empty | nothing |
String greeting |
Is 'greeting' empty?: 0 |
replace |
String | Replaces some text from the variable | nothing |
String greeting |
Hello Universe! |
indize |
String[i] | Splits the variable using a pattern | IntegerOrString or IndexOutOfBounds |
String users
setva("users", ";cat;dog;chicken;")
print("User no.1: " + users.indize(";", 0))
|
User no.1: cat |
length |
int | Returns the length of the variable | nothing |
String greeting |
Length of the String: 12 |
Visual Elements
This commands could help the user to read better your program.
Warning: Some commands like ws.color don't work in professional cmd(old one), use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Warning: ws.goToXY command doesn't work in professional cmd(old one) because uit uses a special character to move the cursor, use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Examples:
ws.color command:
With this command you can change the terminal color.
For text color(is not neccesary to put which color is displayed):
- red_text
- blue_text
- green_text
- purple_text
- yellow_text
- black_text
- cyan_text
- white_text
Usage:
ws.color(colorToBeDisplayed)
Example:
ws.color("red_text")
print("a")
Output:
a
For background color:
- red_background
- blue_background
- green_background
- purple_background
- yellow_background
- black_background
- cyan_background
- white_background
Usage:
ws.color(colorToBeDisplayed)
Example:
ws.color("red_background")
print("a")
Output:
a
You can use reset color for reseting the output color.
ws.clear command:
Clear command can be used for cleaning all the text on the screen.
Example:
print("a")
ws.clear()
Output:
ws.goToXY command:
When you run this command it moves the writing cursor to a determinated x and y.
Example:
ws.goToXY(2,2)
print("I'm at x:2 y:2")
Output:
I'm at x:2 y:2
ws.getScreenHeigth() and ws.getScreenWidth() commands:
With this functions you can get console window height and width.
Example:
Number width = ws.getScreenWidth()
Number height = ws.getScreenHeigth()
print("Width of console window: " + @width)
print("Height of console window: " + @height)
Random Numbers
With this function you can generate random numbers using a minimun and a maximun number.
Example:
print("Random number between 0 and 5: " + genRandom(0,5))
Boolean Functions
This are some functions that are usseful for comparing variables and store the result as 0 false and 1 if true.
// First we will compare a few Strings
String str1
String str2
String str3
setva("str1", "hello")
setva("str2", "bye")
setva("str3", "hello")
print("str1 == str3: " + ieq(str(str1), str(str3)))
print("str1 == str2: " + ieq(str(str1), str(str2)))
print("str1 != str2: " + ieq(str(str1), str(str2)))
print("str1 != str3: " + ieq(str(str1), str(str3)))
// And now we compare some numbers
Number num1
Number num2
Number num3
Number num4
setva("num1", "1")
setva("num2", "2")
setva("num3", "3")
setva("num4", "4")
print("num1 < num2: " + ilt(num(num1), num(num2)))
print("num1 <= num2: " + ilq(num(num1), num(num2)))
print("num4 > num3: " + ihi(num(num4), num(num3)))
print("num4 >= num3: " + ihq(num(num4), num(num3)))
print("num1 > num2: " + ihi(num(num1), num(num2)))
print("num1 >= num2: " + ihq(num(num1), num(num2)))
print("num4 < num3: " + ilt(num(num4), num(num3)))
print("num4 <= num3: " + ilq(num(num4), num(num3)))
Output:
str1 == str3: 1
str1 == str2: 0
str1 != str2: 0
str1 != str3: 1
num1 < num2: 1
num1 <= num2: 1
num4 > num3: 1
num4 >= num3: 1
num1 > num2: 0
num1 >= num2: 0
num4 < num3: 0
num4 <= num3: 0
Char Functions
With this functions you can get a character from a charcode or a charcode from a character.
Example:
print("(char) 97: " + charC(97))
print("(int) a: " + charN("a"))
Arrays
Warning: This function wasn't prepared to be fixed in this function. Wait until v_2.0
"import" Command
If you're the kind of person that likes everything clear and in separeated on files, this must be your favourite function! With this function you can import variables, functions and run code from another file.
Example:
Main.epi file:
import("Sub.epi")
askForAuth()
print("Hello, " + str(username) + "!")
Sub.epi file:
function askForAuth
String username
askForAuth.start()
printc("username: ")
setva("username", inp())
closeFunction()
Sleep Command
With this function you can say to the program to wait some milliseconds to run the next line.
Example:
print("I'm back in two seconds. . .")
ws.sleep(2000)
print("I'm back!")
Output:
I'm back in two seconds. . .
I'm back!
Arguments
Arguments are text added after calling the program. Example: myprog imAnArgument
In epi you can get the arguments and how the program is called by usign arg function.
Example:
print("How do you called the program: " + arg(0))
print("Argument 1 (filename): " + arg(1))
print("Argument 2: " + arg(2))
And compile the file like this: epi myFile.epi "Hello World!"
Output:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: Hello World!
If you don't add any argument, in this case argument 2, the output would be like this:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: arg(2)
What is epi?
Epi is an easy programming language made in C++ using eLite NT code. It's light and easy to understand.
It is updated every month with major upgrades.
I wish you like it ;)
Install epi v_2.0
- Download epi v_2.0 in download page.
- Run the setup. It may warn you that our software is insecure(It isn't). Click on Show details and run anyways.
- Select for who do you want to install epi.
- Select the language to install.
- Read and accept the license.
- Read important info about epi.
- Select where tp install epi(I don't recommend you touching it because epi is prepared to be installed at a single location)
- Select if you want to create desktop shortcut to epi.
- Click on install.
- Click on run epi and close. Check if you have the last version installed and run "nowwhat".
- Complete all the tests.
- If you have done all the things it asked for you, epi should be configurated and ready to use!
How to compile a file
In this tutorial I'll show you how to compile a .epi file.
- Create a file called
hello.epiin your preferred code editor. - On it write
print("Hello World!") - Open terminal and go to your folder in where you created your
.epifile. - Write
epi hello.epiand press enter. - And that's how do you create and compile an
.epifile.
Print command
You can use the print command to print text on the screen.
Example:
print("Hello World!")
User Input
You can use the in commands to get some text the user entered.
in Example:
String username
in("Enter username:", "username")
print("Hello, " + str(username))
You can use the in command for all types of variables.
Variables - Numbers
You can use the Number keyword for creating a variable which contains numbers.
Number Example:
Number myInt = 89
print("Old Value: " + @myInt)
myInt = 100
print("myInt new Value: " + @myInt)
Variables - Strings
You can use the String keyword for creating a variable which contains text or a character.
String Example:
String myString = "Hello World!"
print("Old myString Value: " + @myString)
myString = "Hello Universe!"
print("myString New Value: " + @myString)
Variables - Booleans
You can use the boolean keyword for creating a variable which contains 0 or 1.
boolean Example:
boolean myBoolean = 1
print("myBoolean Old Value: " + @myBoolean)
myBoolean = 0
print("myBoolean New Value: " + @myBoolean)
Variables - Files
You can use the File keyword for creating a variable which contains data for working with files.
File Example:
File myFile
Note: You will learn how to work with files in the File Working section.
Variables - Functions
You can use the function keyword for creating a runneable function.
function Example:
function myFunction
Note: You will learn how to work with files in the Functions section.
File Working
With this functions you can read, write or delete files.
Writing on a file
For writing on a file you need to create a File variable and open the file which you want to write.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("Hello World!")
That should create a file named hello.txt and write inside it Hello World!.
Reading a file
For reading a file you need to open the file and call a function that reads the file.
If you runned the last code you might not have errors but if not create a file called hello.txt and write inside it whathever you want.
Example:
File myFile
myFile.open("hello.txt")
print("hello.txt contents: " + myFile.read())
Reading a line form a file and writing multiline files
Using \n character you can make a new line in a file while writing it. Using .readLine() function you can select which line do you want to read from the file.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("good\nmorning\nto\nyou")
print(myFile.readLine(3))
Deleting files
You can also delete files using .delete() function.
Example:
File myFile
myFile.open("hello.txt")
myFile.delete()
Time Functions
With this functions you can get time and date easily.
Getting all the date as this format: HH:MM.SS,MMM DD/MM/YY
Example:
print(date.getHours() + ":" + date.getMinutes() + "." + date.getSeconds() + "," + date.getMilliseconds() + " " + date.getDay() + "/" + date.getMonth() + "/" + date.getYear())
Output:
17:29.43,878 14/12/2023
Getch Function
With this function you make the program wait until user press one key and get which key pressed.
Example:
print("Waiting to user press a key. . .")
print("User pressed: " + getch())
Print Compact
This function is like print function but it doesn't create a new line after printing.
Example:
printc("good ")
print("morning")
Output:
good morning
Networking
With this functions you can send text between computers. This is usseful if you want to create an instant messaging program.
Warning: Java 21^ must be installed to use this function.
Info: We updated the way to call Java Functions so read this again.
Creating a "server" to recieve text
Using netw.createServer you create a connection using a port and store the message in a variable, in this case txt.
Example Main.epi:
String txt = netw.createServer("2567")
print("Recieved text: " + @txt)
Sending text to the server
Using netw.createConection you can send some text to the server you created. In this case hi is the message to be sent and 2567 is the port where you created the server. The text supersecretip is the ip from where you created the connection.
Example Send.epi:
String text = netw.createConection("2567 supersecretip hi")
Cmos
With this function you can run cmd commands.
Syntax:
cmos.commandToRun(arguments)
Example:
cmos.gcc("--version")
Output:
gcc.exe (Rev6, Built by MSYS2 project) 13.1.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Functions
Functions are variables which stores code to be runned when called.
For define a function you need to use function keyboard and later start it.
Example:
function myFunction
myFunction.start()
print("hello")
closeFunction()
myFunction()
How to create a return type function.
In epi you can create functions that return some text. Use this code:
function myFunction
myFunction.start()
return "Hello"
closeFunction()
print(myFunction())
Dialogs
With this functions you can create dialogs for the user pressing a button or making the user informating of something.
Warning: Java 21^ must be installed to use this function.
Info: We updated the way to call Java Functions so read this again.
Creating normal dialogs
There are three types of dialogs:showMessage A dialog with an info iconshowWarning A dialog with an warning iconshowError A dialog with an error icon
Here is the use:
showMessage:
String output = gui.showMessage("message title")
Output:
showWarning
:
String output = gui.showWarning("message title")
Output:
showError
:
String output = gui.showError("message title")
Output:
Creating user-input dialogs
String username = gui.requestInput("Username Login")
print("User Logged in: " + @username)
Output:
Note: You can add spaces to the dialogs by using _ character.
Creating multi-awnser dialogs
Now with gui.showMessageOptions, gui.showErrorOptions and gui.showWarningOptions you can create dialogs with more buttons and also store output as a number(index) or get -1 if the user closed the dialog.
Example:
String output = gui.showMessageOptions("Select_an_option Select Print0~Print1~Print2")
print("User Selected: " + @output)
Output:
Loops
With this loops you can run code the times you select.
Example:
repeat(10, print("Hello World"))
If
With this function you can run some code if the first argument is 1 that is true or run other code if 0 that is false.
boolean true = 1
if(ieq(@true,1), print("true is 1"), print("true is other thing"))
Images
In epi you can transform images to text by setting one character for each pixel's color.
Warning: Java 21^ must be installed to use this function.
Info: We updated the way to call Java Functions so read this again.
Example:
String output = img.imageToTxt("icon.png")
print(@output)
Working with internet files
You can read files that are uploaded on internet or you can select which line do you want to read of a file.
Warning: Java 21^ must be installed to use this function.
Info: We updated the way to call Java Functions so read this again.
Examples:
Reading a internet file and save it to a String
String output = netw.readFileFromInternet("https://elitees.github.io/epi/", "output")
print(@output)
Reading a line from a internet file
String output = netw.readLineFileFromInternet("https://elitees.github.io/epi/ 2", "output")
print(@output)
Working with Strings
There are some functions that return a value from a String.
Here's a table for you to viewing them:
| Name | Returns | Comments | Throws | Example | Output |
|---|---|---|---|---|---|
= |
String | Modifies the String content | nothing |
String helloWorld |
This prints nothing: |
substring |
String | Cuts the string using the two arguments and sets it to the variable | IntegerOrString, WhoaBigger or IndexOutOfBounds |
String greeting = "Hello World!" |
Hello |
find |
int | Finds the argument on the variable | nothing |
String greeting = "Hello World!" |
4 |
index |
String | Finds the character on the String using the index of the argument | IntegerOrString or IndexOutOfBounds |
String greeting = "Hello World!" |
o |
del |
String | Makes the variable empty | nothing |
String greeting = "Hello World!" |
This prints nothing: |
add |
String | Adds the String on a determinated position | IntegerOrString or IndexOutOfBounds |
String greeting = "Hello World!" |
Hello World! How are you doing today? |
contains |
Boolean | Checks if inside the variable there's the determinated String | nothing |
String greeting = "Hello World!" |
greeting contains 'Hello'?: 1 |
encrypt |
String[en] | Encrypts the variable using as key the argument | nothing |
String greeting = "Hello World!" |
Encrypted text: %∟ ▬M.♦↨§ X |
decrypt |
String | Decrypts the variable using the key specified on the arguments | nothing |
String greeting = "Hello World!" |
Encrypted text: %∟ ▬M.♦↨§ X |
isNum |
Boolean | Checks if the variable is a number | nothing |
String greeting = "Hello World!" |
'greeting' is a number?: 0
'pi' is a number?: 1
|
isBool |
Boolean | Checks if the variable is a boolean | nothing |
String greeting = "Hello World!" |
'greeting' is a Boolean?: 0 |
isEmpty |
Boolean | Checks if the variable is empty | nothing |
String greeting = "Hello World!" |
Is 'greeting' empty?: 0 |
replace |
String | Replaces some text from the variable | nothing |
String greeting = "Hello World!" |
Hello Universe! |
indize |
String[i] | Splits the variable using a pattern | IntegerOrString or IndexOutOfBounds |
String users = ";cat;dog;chicken;" |
User no.1: cat |
length |
int | Returns the length of the variable | nothing |
String greeting = "Hello World!" |
Length of the String: 12 |
Visual Elements
This commands could help the user to read better your program.
Warning: Some commands like ws.color don't work in professional cmd(old one), use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Warning: ws.goToXY command doesn't work in professional cmd(old one) because uit uses a special character to move the cursor, use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Examples:
ws.color command:
With this command you can change the terminal color.
For text color(is not neccesary to put which color is displayed):
- red_text
- blue_text
- green_text
- purple_text
- yellow_text
- black_text
- cyan_text
- white_text
Usage:
ws.color(colorToBeDisplayed)
Example:
ws.color("red_text")
print("a")
Output:
a
For background color:
- red_background
- blue_background
- green_background
- purple_background
- yellow_background
- black_background
- cyan_background
- white_background
Usage:
ws.color(colorToBeDisplayed)
Example:
ws.color("red_background")
print("a")
Output:
a
You can use reset color for reseting the output color.
ws.clear command:
Clear command can be used for cleaning all the text on the screen.
Example:
print("a")
ws.clear()
Output:
ws.goToXY command:
When you run this command it moves the writing cursor to a determinated x and y.
Example:
ws.goToXY(2,2)
print("I'm at x:2 y:2")
Output:
I'm at x:2 y:2
ws.getScreenHeigth() and ws.getScreenWidth() commands:
With this functions you can get console window height and width.
Example:
Number width = ws.getScreenWidth()
Number height = ws.getScreenHeigth()
print("Width of console window: " + @width)
print("Height of console window: " + @height)
Random Numbers
With this function you can generate random numbers using a minimun and a maximun number.
Example:
print("Random number between 0 and 5: " + genRandom(0,5))
Boolean Functions
This are some functions that are usseful for comparing variables and store the result as 0 false and 1 if true.
// First we will compare a few Strings
String str1 = "hello"
String str2 = "bye"
String str3 = "hello"
print("str1 == str3: " + ieq(@str1, @str3))
print("str1 == str2: " + ieq(@str1, @str2))
print("str1 != str2: " + ieq(@str1, @str2))
print("str1 != str3: " + ieq(@str1, @str3))
// And now we compare some numbers
Number num1 = 1
Number num2 = 2
Number num3 = 3
Number num4 = 4
print("num1 < num2: " + ilt(@num1, @num2))
print("num1 <= num2: " + ilq(@num1, @num2))
print("num4 > num3: " + ihi(@num4, @num3))
print("num4 >= num3: " + ihq(@num4, @num3))
print("num1 > num2: " + ihi(@num1, @num2))
print("num1 >= num2: " + ihq(@num1, @num2))
print("num4 < num3: " + ilt(@num4, @num3))
print("num4 <= num3: " + ilq(@num4, @num3))
Output:
str1 == str3: 1
str1 == str2: 0
str1 != str2: 0
str1 != str3: 1
num1 < num2: 1
num1 <= num2: 1
num4 > num3: 1
num4 >= num3: 1
num1 > num2: 0
num1 >= num2: 0
num4 < num3: 0
num4 <= num3: 0
Char Functions
With this functions you can get a character from a charcode or a charcode from a character.
Example:
print("(char) 97: " + charC(97))
print("(int) a: " + charN("a"))
Arrays
Arrays are variables which stores different values. You can define an Array by using vector keyword.
Example:
vector myArray
myArray[1] = "I'm element 1"
myArray[2] = "I'm element 2"
myArray[3] = "I'm element 3"
print(@arr("myArray", 1))
print(@arr("myArray", 2))
print(@arr("myArray", 3))
"import" Command
If you're the kind of person that likes everything clear and in separeated on files, this must be your favourite function! With this function you can import variables, functions and run code from another file.
Example:
Main.epi file:
import("Sub.epi")
askForAuth()
print("Hello, " + @username + "!")
Sub.epi file:
function askForAuth
String username
askForAuth.start()
printc("username: ")
username = inp()
closeFunction()
Sleep Command
With this function you can say to the program to wait some milliseconds to run the next line.
Example:
print("I'm back in two seconds. . .")
ws.sleep(2000)
print("I'm back!")
Output:
I'm back in two seconds. . .
I'm back!
Arguments
Arguments are text added after calling the program. Example: myprog imAnArgument
In epi you can get the arguments and how the program is called by usign arg function.
Example:
print("How do you called the program: " + arg(0))
print("Argument 1 (filename): " + arg(1))
print("Argument 2: " + arg(2))
And compile the file like this: epi myFile.epi "Hello World!"
Output:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: Hello World!
If you don't add any argument, in this case argument 2, the output would be like this:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: arg(2)
Return
return is a keyword that returs text inside a function or program. (What did you expected)
At the moment you can use it in functions.
Example:
function login
login.start()
printc("Enter username: ")
return inp()
closeFunction()
print("Welcome, " + login() + "!")
Compile a safe file
There's a way to encrypt your programs so you can share them without problems and also run it in a computer tht have epi installed as it was an executable.
You can compile your epi file like this: epi --compile myFile.epi and it creates a new file called myFile.epir. If you double click on the file it would run as normal.
You can run a .epir file via command prompt too, run epir myFile.epir
What is epi?
Epi is an easy programming language made in C++ using eLite NT code. It's light and easy to understand.
It is updated every month with major upgrades.
I wish you like it ;)
Install epi v_2.1
- Download epi v_2.1 in download page.
- Run the setup. It may warn you that our software is insecure(It isn't). Click on Show details and run anyways.
- Select for who do you want to install epi.
- Select the language to install.
- Read and accept the license.
- Read important info about epi.
- Select where tp install epi(I don't recommend you touching it because epi is prepared to be installed at a single location)
- Select if you want to create desktop shortcut to epi.
- Click on install.
- Click on run epi and close. Check if you have the last version installed and run "nowwhat".
- Complete all the tests.
- If you have done all the things it asked for you, epi should be configurated and ready to use!
How to compile a file
In this tutorial I'll show you how to compile a .epi file.
- Create a file called
hello.epiin your preferred code editor. - On it write
print("Hello World!") - Open terminal and go to your folder in where you created your
.epifile. - Write
epi hello.epiand press enter. - And that's how do you create and compile an
.epifile.
Print command
You can use the print command to print text on the screen.
Example:
print("Hello World!")
User Input
You can use the inp commands to get some text the user entered.
inp Example:
String username
printc("username: ")
username = inp()
print("Hello, " + @username + "!")
You can use the inp command for all types of variables.
Variables - Numbers
You can use the Number keyword for creating a variable which contains numbers.
Number Example:
Number myInt = 89
print("Old Value: " + @myInt)
myInt = 100
print("myInt new Value: " + @myInt)
You can make calculations with numbers:
Sum:
Number x = 2
Number y = 3
x += @y
print(@x)
Substract:
Number x = 2
Number y = 3
x -= @y
print(@x)
Divide:
Number x = 4
Number y = 2
x /= @y
print(@x)
Multiply:
Number x = 2
Number y = 3
x *= @y
print(@x)
Variables - Strings
You can use the String keyword for creating a variable which contains text or a character.
String Example:
String myString = "Hello World!"
print("Old myString Value: " + @myString)
myString = "Hello Universe!"
print("myString New Value: " + @myString)
Variables - Booleans
You can use the boolean keyword for creating a variable which contains 0 or 1.
boolean Example:
boolean myBoolean = 1
print("myBoolean Old Value: " + @myBoolean)
myBoolean = 0
print("myBoolean New Value: " + @myBoolean)
Variables - Files
You can use the File keyword for creating a variable which contains data for working with files.
File Example:
File myFile
Note: You will learn how to work with files in the File Working section.
Variables - Functions
You can use the function keyword for creating a runneable function.
function Example:
function myFunction
Note: You will learn how to work with files in the Functions section.
Variables - Vectors / Arrays
vector keyword works for creating variables that stores other variables.
vector Example:
vector myArray
Note: You will learn how to work with arrays in the Arrays section.
File Working
With this functions you can read, write or delete files.
Writing on a file
For writing on a file you need to create a File variable and open the file which you want to write.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("Hello World!")
That should create a file named hello.txt and write inside it Hello World!.
Reading a file
For reading a file you need to open the file and call a function that reads the file.
If you runned the last code you might not have errors but if not create a file called hello.txt and write inside it whathever you want.
Example:
File myFile
myFile.open("hello.txt")
print("hello.txt contents: " + myFile.read())
Reading a line form a file and writing multiline files
Using \n character you can make a new line in a file while writing it. Using .readLine() function you can select which line do you want to read from the file.
Example:
File myFile
myFile.open("hello.txt")
myFile.write("good\nmorning\nto\nyou")
print(myFile.readLine(3))
Deleting files
You can also delete files using .delete() function.
Example:
File myFile
myFile.open("hello.txt")
myFile.delete()
Time Functions
With this functions you can get time and date easily.
Getting all the date as this format: HH:MM.SS,MMM DD/MM/YY
Example:
print(date.getHours() + ":" + date.getMinutes() + "." + date.getSeconds() + "," + date.getMilliseconds() + " " + date.getDay() + "/" + date.getMonth() + "/" + date.getYear())
Output:
17:29.43,878 14/12/2023
Getch Function
With this function you make the program wait until user press one key and get which key pressed.
Example:
print("Waiting to user press a key. . .")
print("User pressed: " + getch())
Print Compact
This function is like print function but it doesn't create a new line after printing.
Example:
printc("good ")
print("morning")
Output:
good morning
Networking
With this functions you can send text between computers. This is usseful if you want to create an instant messaging program.
Warning: Java 21^ must be installed to use this function.
Info: We added more functions to this section so I recommend you to read it again.
Downloading a file from Internet
Using netw.downloadFileFromInternet you can download a file from Internet in a specific path.
Example:
printc("Enter URL To Download: ")
String url = inp()
printc("Enter path to write: ")
String path = inp()
netw.downloadFileFromInternet(@url + " " + @path)
print("File Downloaded Succesfully!")
Syntax: netw.downloadFileFromInternet("url pathToWrite")
Getting user's ip
With netw.getLocalIpAdress function you can get the user's ip. This function can be usseful for maling a local chat.
Example:
print("user's ip: " + netw.getLocalIpAdress())
Creating a "server" to recieve text
Using netw.createServer you create a connection using a port and store the message in a variable, in this case txt.
Example Main.epi:
String txt = netw.createServer("2567")
print("Recieved text: " + @txt)
Sending text to the server
Using netw.createConection you can send some text to the server you created. In this case hi is the message to be sent and 2567 is the port where you created the server. The text supersecretip is the ip from where you created the connection.
Example Send.epi:
String text = netw.createConection("2567 supersecretip hi")
Cmos
With this function you can run cmd commands.
Syntax:
cmos.commandToRun(arguments)
Example:
cmos.gcc("--version")
Output:
gcc.exe (Rev6, Built by MSYS2 project) 13.1.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Functions
Functions are variables which stores code to be runned when called.
For define a function you need to use function keyboard and later start it.
Example:
function myFunction
myFunction.start()
print("hello")
closeFunction()
myFunction()
How to create a return type function.
In epi you can create functions that return some text. Use this code:
function myFunction
myFunction.start()
return "Hello"
closeFunction()
print(myFunction())
How to concatenate a function and reset it.
In epi you can add code to existing functions and reset the text inside it.
Example:
function myFunction
myFunction.start()
print("hi")
closeFunction()
myFunction()
myFunction.start()
print("bye")
closeFunction()
myFunction()
Output:
hi
hi
bye
If you don't wantto declarate a new function you can reuse an existing function.
Example:
function myFunction
myFunction.start()
print("hi")
print("bye")
closeFunction()
myFunction()
myFunction.reset()
myFunction.start()
print("I'm the new function!")
closeFunction()
myFunction()
Output:
hi
bye
I'm the new function!
Dialogs
With this functions you can create dialogs for the user pressing a button or making the user informating of something.
Warning: Java 21^ must be installed to use this function.
Creating normal dialogs
There are three types of dialogs:showMessage A dialog with an info iconshowWarning A dialog with an warning iconshowError A dialog with an error icon
Here is the use:
showMessage:
String output = gui.showMessage("message title")
Output:
showWarning
:
String output = gui.showWarning("message title")
Output:
showError
:
String output = gui.showError("message title")
Output:
Creating user-input dialogs
String username = gui.requestInput("Username Login")
print("User Logged in: " + @username)
Output:
Note: You can add spaces to the dialogs by using _ character.
Creating multi-awnser dialogs
Now with gui.showMessageOptions, gui.showErrorOptions and gui.showWarningOptions you can create dialogs with more buttons and also store output as a number(index) or get -1 if the user closed the dialog.
Example:
String output = gui.showMessageOptions("Select_an_option Select Print0~Print1~Print2")
print("User Selected: " + @output)
Output:
Loops
With this loops you can run code the times you select.
Example:
repeat(10, print("Hello World"))
If
With this function you can run some code if the first argument is 1 that is true or run other code if 0 that is false.
boolean true = 1
if(ieq(@true, 1)) : print("true is 1")
if(inq(@true, 1)) : print("true is other thing")
Images
In epi you can transform images to text by setting one character for each pixel's color.
Warning: Java 21^ must be installed to use this function.
Transforming each pixel to a character:
Example:
String output = img.imageToTxt("icon.png")
print(@output)
Transforming each pixel to a character with color
Example:
img.renderImage("icon.png")
Working with internet files
You can read files that are uploaded on internet or you can select which line do you want to read of a file.
Warning: Java 21^ must be installed to use this function.
Examples:
Reading a internet file and save it to a String
String output = netw.readFileFromInternet("https://elitees.github.io/epi/", "output")
print(@output)
Reading a line from a internet file
String output = netw.readLineFileFromInternet("https://elitees.github.io/epi/ 2", "output")
print(@output)
Working with Strings
There are some functions that return a value from a String.
Here's a table for you to viewing them:
| Name | Returns | Comments | Throws | Example | Output |
|---|---|---|---|---|---|
= |
String | Modifies the String content | nothing |
String helloWorld |
This prints nothing: |
substring |
String | Cuts the string using the two arguments and sets it to the variable | IntegerOrString, WhoaBigger or IndexOutOfBounds |
String greeting = "Hello World!" |
Hello |
find |
int | Finds the argument on the variable | nothing |
String greeting = "Hello World!" |
4 |
index |
String | Finds the character on the String using the index of the argument | IntegerOrString or IndexOutOfBounds |
String greeting = "Hello World!" |
o |
del |
String | Makes the variable empty | nothing |
String greeting = "Hello World!" |
This prints nothing: |
add |
String | Adds the String on a determinated position | IntegerOrString or IndexOutOfBounds |
String greeting = "Hello World!" |
Hello World! How are you doing today? |
contains |
Boolean | Checks if inside the variable there's the determinated String | nothing |
String greeting = "Hello World!" |
greeting contains 'Hello'?: 1 |
encrypt |
String[en] | Encrypts the variable using as key the argument | nothing |
String greeting = "Hello World!" |
Encrypted text: %∟ ▬M.♦↨§ X |
decrypt |
String | Decrypts the variable using the key specified on the arguments | nothing |
String greeting = "Hello World!" |
Encrypted text: %∟ ▬M.♦↨§ X |
isNum |
Boolean | Checks if the variable is a number | nothing |
String greeting = "Hello World!" |
'greeting' is a number?: 0
'pi' is a number?: 1
|
isBool |
Boolean | Checks if the variable is a boolean | nothing |
String greeting = "Hello World!" |
'greeting' is a Boolean?: 0 |
isEmpty |
Boolean | Checks if the variable is empty | nothing |
String greeting = "Hello World!" |
Is 'greeting' empty?: 0 |
replace |
String | Replaces some text from the variable | nothing |
String greeting = "Hello World!" |
Hello Universe! |
indize |
String[i] | Splits the variable using a pattern | IntegerOrString or IndexOutOfBounds |
String users = ";cat;dog;chicken;" |
User no.1: cat |
length |
int | Returns the length of the variable | nothing |
String greeting = "Hello World!" |
Length of the String: 12 |
Visual Elements
This commands could help the user to read better your program.
Warning: Some commands like ws.color don't work in professional cmd(old one), use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Warning: ws.goToXY command doesn't work in professional cmd(old one) because uit uses a special character to move the cursor, use windows 11 terminal or Visual Studio Code(c)Microsoft integrated terminal.
Examples:
ws.color command:
With this command you can change the terminal color.
For text color(is not neccesary to put which color is displayed):
- red_text
- blue_text
- green_text
- purple_text
- yellow_text
- black_text
- cyan_text
- white_text
Usage:
ws.color(colorToBeDisplayed)
Example:
ws.color("red_text")
print("a")
Output:
a
For background color:
- red_background
- blue_background
- green_background
- purple_background
- yellow_background
- black_background
- cyan_background
- white_background
Usage:
ws.color(colorToBeDisplayed)
Example:
ws.color("red_background")
print("a")
Output:
a
You can use reset color for reseting the output color.
ws.clear command:
Clear command can be used for cleaning all the text on the screen.
Example:
print("a")
ws.clear()
Output:
ws.goToXY command:
When you run this command it moves the writing cursor to a determinated x and y.
Example:
ws.goToXY(2,2)
print("I'm at x:2 y:2")
Output:
I'm at x:2 y:2
ws.getScreenHeigth() and ws.getScreenWidth() commands:
With this functions you can get console window height and width.
Example:
Number width = ws.getScreenWidth()
Number height = ws.getScreenHeigth()
print("Width of console window: " + @width)
print("Height of console window: " + @height)
Random Numbers
With this function you can generate random numbers using a minimun and a maximun number.
Example:
print("Random number between 0 and 5: " + genRandom(0,5))
Boolean Functions
This are some functions that are usseful for comparing variables and store the result as 0 false and 1 if true.
// First we will compare a few Strings
String str1 = "hello"
String str2 = "bye"
String str3 = "hello"
print("str1 == str3: " + ieq(@str1, @str3))
print("str1 == str2: " + ieq(@str1, @str2))
print("str1 != str2: " + ieq(@str1, @str2))
print("str1 != str3: " + ieq(@str1, @str3))
// And now we compare some numbers
Number num1 = 1
Number num2 = 2
Number num3 = 3
Number num4 = 4
print("num1 < num2: " + ilt(@num1, @num2))
print("num1 <= num2: " + ilq(@num1, @num2))
print("num4 > num3: " + ihi(@num4, @num3))
print("num4 >= num3: " + ihq(@num4, @num3))
print("num1 > num2: " + ihi(@num1, @num2))
print("num1 >= num2: " + ihq(@num1, @num2))
print("num4 < num3: " + ilt(@num4, @num3))
print("num4 <= num3: " + ilq(@num4, @num3))
Output:
str1 == str3: 1
str1 == str2: 0
str1 != str2: 0
str1 != str3: 1
num1 < num2: 1
num1 <= num2: 1
num4 > num3: 1
num4 >= num3: 1
num1 > num2: 0
num1 >= num2: 0
num4 < num3: 0
num4 <= num3: 0
Char Functions
With this functions you can get a character from a charcode or a charcode from a character.
Example:
print("(char) 97: " + charC(97))
print("(int) a: " + charN("a"))
Arrays
Arrays are variables which stores different values. You can define an Array by using vector keyword.
Example:
vector myArray
myArray[1] = "I'm element 1"
myArray[2] = "I'm element 2"
myArray[3] = "I'm element 3"
print(@arr("myArray", 1))
print(@arr("myArray", 2))
print(@arr("myArray", 3))
Arrays Functions
Deleting the whole array
You can reset the entire array using .delete() function.
Example:
vector myArray
myArray[1] = "I'm element 1"
myArray[2] = "I'm element 2"
myArray[3] = "I'm element 3"
print(@arr("myArray", 1))
myArray.delete()
print(@arr("myArray", 1))
Delete just one item from the array
For deleting an especified index from the array you can use .index.delete(index) function.
Example:
vector myArray
myArray[1] = "I'm element 1"
myArray[2] = "I'm element 2"
myArray[3] = "I'm element 3"
myArray.index.delete(2)
// This prints nothing
print(@arr("myArray", 2))
Get the type of the array
You can get the type of the array by using .type() function. It can return boolean, Number or String.
Example:
vector myArray
myArray[1] = "I'm element 1"
myArray[2] = "I'm element 2"
myArray[3] = "I'm element 3"
print("myArray has the type: " + myArray.type())
"import" Command
If you're the kind of person that likes everything clear and in separeated on files, this must be your favourite function! With this function you can import variables, functions and run code from another file.
We added exclude keyword that makes this usseful.
Example:
Main.epi file:
import("Sub.epi")
askForAuth()
print("Hello, " + @username + "!")
Sub.epi file:
function askForAuth
String username
askForAuth.start()
printc("username: ")
username = inp()
closeFunction()
How to use exclude keyword?
exclude keyword makes the import function don't check that line but if the file is being compiled that line of code can be runned.
Example Main.epi:
import("Sub.epi")
Example: Sub.epi:
print("Hi")
exclude print("Bye")
Runned by epi Main.epi output:
Hi
Runned by epi Sub.epi output:
Hi
Bye
Sleep Command
With this function you can say to the program to wait some milliseconds to run the next line.
Example:
print("I'm back in two seconds. . .")
ws.sleep(2000)
print("I'm back!")
Output:
I'm back in two seconds. . .
I'm back!
Arguments
Arguments are text added after calling the program. Example: myprog imAnArgument
In epi you can get the arguments and how the program is called by usign arg function.
Example:
print("How do you called the program: " + arg(0))
print("Argument 1 (filename): " + arg(1))
print("Argument 2: " + arg(2))
And compile the file like this: epi myFile.epi "Hello World!"
Output:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: Hello World!
If you don't add any argument, in this case argument 2, the output would be like this:
How do you called the program: epi
Argument 1 (filename): myFile.epi
Argument 2: arg(2)
Return
return is a keyword that returs text inside a function or program. (What did you expected)
At the moment you can use it in functions.
Example:
function login
login.start()
printc("Enter username: ")
return inp()
closeFunction()
print("Welcome, " + login() + "!")
System Functions
This function can obtain System information like battery, os version, path variable, running processes, number of cores, etc...
Example:
print("Battery % left: " + sys.batteryLeft())
print("AC State: " + sys.usingBattery())
print("Moving cursor to x: 0 y: 0 . . .")
sys.moveCursor("0 0")
print("Done!")
print("PATH Variable: " + sys.pathSystemVariable())
print("OS Version: " + sys.osVersion())
print("Screen Resolution (width x heigth): " + sys.getScreenResolutionWidth() + " x " + sys.getScreenResolutionHeight())
print("No. of Cores: " + sys.getNumberOfCores())
print("Running Processes: " + sys.getRunningProcesses())
print("Battery Charging Time Left: " + sys.batteryChargingTimeLeft())
print("Battery Life Time Left: " + sys.batteryTimeLeft())
sys.beep()
GUI Commands
Warning: Java 21^ must be installed to use this function.
This functions are functions that are related to the screen. At the moment you can only take screenshots.
Take a Screenshot
Using gui.takeScreenshot you can take a screenshot of the screen and save it on a .png file.
Example:
gui.takeScreenshot("myScreenshot.png")
Compile a safe file
There's a way to encrypt your programs so you can share them without problems and also run it in a computer tht have epi installed as it was an executable.
You can compile your epi file like this: epi --compile myFile.epi and it creates a new file called myFile.epir. If you double click on the file it would run as normal.
You can run a .epir file via command prompt too, run epir myFile.epir
Keywords
This are some commands that could help you on some functions.
do_nothing and ignore keywords
This keywords aren't runned so they are better than just putting nothing.
throw and exception keywords
This keywords help for creating libraries and tell the user that something is wrong in the code.
throw Example:
throw("IntegerOrString")
The avaiable epi-generated exceptions are:
- VariableUndefined
- IntegerOrString
- WhoaBigger
- IndexOutOfBounds
- FunctionNotFound
- UnknownCommand
Epi will generate a error message for each exception, if you need more you can use exception keyword.
exception Example:
exception("MyException", "here goes the problem", "how goes how the user can fix the problem")
Comments
Now you can comment your code usign // symbols. That helps you for not running code that doesn't work or do documentation.
Example:
// Print this prints "hello"
print("hello")
At the momemnt you can only put a comment at the start of the line.
Examples
Here you can view some games and programs that I made with epi.
guessTheNumber.epi file:
var userNumber null
var numberToGuess null
var numberCorrect null
var numberIncorrect null
random("numberToGuess", 0, 5)
in("Enter a number between 0 and 5: ", "userNumber")
openFunction("numberCorrect")
print("You accerted the number!")
closeFunction()
openFunction("numberIncorrect")
print("You didn't accerted the number, try again!")
closeFunction()
runIf(ieq(var(numberToGuess), var(userNumber)), numberCorrect, numberIncorrect)
print("Number to guess: " + var(numberToGuess))
print("You entered: " + var(userNumber))
Output:
weatherIn.epi file:
var city null
var weather null
in("How is the weather in?: ", "city")
cmos.curl("https://wttr.in/" + var(city))
Output:
If you want to share another program made in epi, send it to me in elite.atencionalcliente@gmail.com
:)